diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/js/dist/edit-site.js --- a/wp/wp-includes/js/dist/edit-site.js Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-includes/js/dist/edit-site.js Fri Sep 05 18:40:08 2025 +0200 @@ -1,927 +1,7275 @@ -/******/ (function() { // webpackBootstrap +/******/ (() => { // 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); +/***/ 4660: +/***/ ((module) => { + +/* eslint eslint-comments/no-unlimited-disable: 0 */ +/* eslint-disable */ +/* pako 1.0.10 nodeca/pako */ ( function ( f ) { + if ( true ) { + module.exports = f(); + } else { var g; } +} )( function () { + var define, module, exports; + return ( function () { + function r( e, n, t ) { + function o( i, f ) { + if ( ! n[ i ] ) { + if ( ! e[ i ] ) { + var c = undefined; + if ( ! f && c ) return require( i, ! 0 ); + if ( u ) return u( i, ! 0 ); + var a = new Error( "Cannot find module '" + i + "'" ); + throw ( ( a.code = 'MODULE_NOT_FOUND' ), a ); + } + var p = ( n[ i ] = { exports: {} } ); + e[ i ][ 0 ].call( + p.exports, + function ( r ) { + var n = e[ i ][ 1 ][ r ]; + return o( n || r ); + }, + p, + p.exports, + r, + e, + n, + t + ); } - } - }; - }(); - - 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(); + return n[ i ].exports; } - }; - - 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; - - 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) { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } else { - classes.push(arg.toString()); - } - } - } - - 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; + for ( + var u = undefined, i = 0; + i < t.length; + i++ + ) + o( t[ i ] ); + return o; + } + return r; + } )()( + { + 1: [ + function ( require, module, exports ) { + 'use strict'; + + var TYPED_OK = + typeof Uint8Array !== 'undefined' && + typeof Uint16Array !== 'undefined' && + typeof Int32Array !== 'undefined'; + + function _has( obj, key ) { + return Object.prototype.hasOwnProperty.call( obj, key ); + } + + exports.assign = function ( + obj /*from1, from2, from3, ...*/ + ) { + var sources = Array.prototype.slice.call( + arguments, + 1 + ); + while ( sources.length ) { + var source = sources.shift(); + if ( ! source ) { + continue; + } + + if ( typeof source !== 'object' ) { + throw new TypeError( + source + 'must be non-object' + ); + } + + for ( var p in source ) { + if ( _has( source, p ) ) { + obj[ p ] = source[ p ]; + } + } + } + + return obj; + }; + + // reduce buffer size, avoiding mem copy + exports.shrinkBuf = function ( buf, size ) { + if ( buf.length === size ) { + return buf; + } + if ( buf.subarray ) { + return buf.subarray( 0, size ); + } + buf.length = size; + return buf; + }; + + var fnTyped = { + arraySet: function ( + dest, + src, + src_offs, + len, + dest_offs + ) { + if ( src.subarray && dest.subarray ) { + dest.set( + src.subarray( src_offs, src_offs + len ), + dest_offs + ); + return; + } + // Fallback to ordinary array + for ( var i = 0; i < len; i++ ) { + dest[ dest_offs + i ] = src[ src_offs + i ]; + } + }, + // Join array of chunks to single array. + flattenChunks: function ( chunks ) { + var i, l, len, pos, chunk, result; + + // calculate data length + len = 0; + for ( i = 0, l = chunks.length; i < l; i++ ) { + len += chunks[ i ].length; + } + + // join chunks + result = new Uint8Array( len ); + pos = 0; + for ( i = 0, l = chunks.length; i < l; i++ ) { + chunk = chunks[ i ]; + result.set( chunk, pos ); + pos += chunk.length; + } + + return result; + }, + }; + + var fnUntyped = { + arraySet: function ( + dest, + src, + src_offs, + len, + dest_offs + ) { + for ( var i = 0; i < len; i++ ) { + dest[ dest_offs + i ] = src[ src_offs + i ]; + } + }, + // Join array of chunks to single array. + flattenChunks: function ( chunks ) { + return [].concat.apply( [], chunks ); + }, + }; + + // Enable/Disable typed arrays use, for testing + // + exports.setTyped = function ( on ) { + if ( on ) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign( exports, fnTyped ); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign( exports, fnUntyped ); + } + }; + + exports.setTyped( TYPED_OK ); + }, + {}, + ], + 2: [ + function ( require, module, exports ) { + // String encode/decode helpers + 'use strict'; + + var utils = require( './common' ); + + // Quick check if we can use fast array to bin string conversion + // + // - apply(Array) can fail on Android 2.2 + // - apply(Uint8Array) can fail on iOS 5.1 Safari + // + var STR_APPLY_OK = true; + var STR_APPLY_UIA_OK = true; + + try { + String.fromCharCode.apply( null, [ 0 ] ); + } catch ( __ ) { + STR_APPLY_OK = false; + } + try { + String.fromCharCode.apply( null, new Uint8Array( 1 ) ); + } catch ( __ ) { + STR_APPLY_UIA_OK = false; + } + + // Table with utf8 lengths (calculated by first byte of sequence) + // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, + // because max possible codepoint is 0x10ffff + var _utf8len = new utils.Buf8( 256 ); + for ( var q = 0; q < 256; q++ ) { + _utf8len[ q ] = + q >= 252 + ? 6 + : q >= 248 + ? 5 + : q >= 240 + ? 4 + : q >= 224 + ? 3 + : q >= 192 + ? 2 + : 1; + } + _utf8len[ 254 ] = _utf8len[ 254 ] = 1; // Invalid sequence start + + // convert string to array (typed, when possible) + exports.string2buf = function ( str ) { + var buf, + c, + c2, + m_pos, + i, + str_len = str.length, + buf_len = 0; + + // count binary size + for ( m_pos = 0; m_pos < str_len; m_pos++ ) { + c = str.charCodeAt( m_pos ); + if ( + ( c & 0xfc00 ) === 0xd800 && + m_pos + 1 < str_len + ) { + c2 = str.charCodeAt( m_pos + 1 ); + if ( ( c2 & 0xfc00 ) === 0xdc00 ) { + c = + 0x10000 + + ( ( c - 0xd800 ) << 10 ) + + ( c2 - 0xdc00 ); + m_pos++; + } + } + buf_len += + c < 0x80 + ? 1 + : c < 0x800 + ? 2 + : c < 0x10000 + ? 3 + : 4; + } + + // allocate buffer + buf = new utils.Buf8( buf_len ); + + // convert + for ( i = 0, m_pos = 0; i < buf_len; m_pos++ ) { + c = str.charCodeAt( m_pos ); + if ( + ( c & 0xfc00 ) === 0xd800 && + m_pos + 1 < str_len + ) { + c2 = str.charCodeAt( m_pos + 1 ); + if ( ( c2 & 0xfc00 ) === 0xdc00 ) { + c = + 0x10000 + + ( ( c - 0xd800 ) << 10 ) + + ( c2 - 0xdc00 ); + m_pos++; + } + } + if ( c < 0x80 ) { + /* one byte */ + buf[ i++ ] = c; + } else if ( c < 0x800 ) { + /* two bytes */ + buf[ i++ ] = 0xc0 | ( c >>> 6 ); + buf[ i++ ] = 0x80 | ( c & 0x3f ); + } else if ( c < 0x10000 ) { + /* three bytes */ + buf[ i++ ] = 0xe0 | ( c >>> 12 ); + buf[ i++ ] = 0x80 | ( ( c >>> 6 ) & 0x3f ); + buf[ i++ ] = 0x80 | ( c & 0x3f ); + } else { + /* four bytes */ + buf[ i++ ] = 0xf0 | ( c >>> 18 ); + buf[ i++ ] = 0x80 | ( ( c >>> 12 ) & 0x3f ); + buf[ i++ ] = 0x80 | ( ( c >>> 6 ) & 0x3f ); + buf[ i++ ] = 0x80 | ( c & 0x3f ); + } + } + + return buf; + }; + + // Helper (used in 2 places) + function buf2binstring( buf, len ) { + // On Chrome, the arguments in a function call that are allowed is `65534`. + // If the length of the buffer is smaller than that, we can use this optimization, + // otherwise we will take a slower path. + if ( len < 65534 ) { + if ( + ( buf.subarray && STR_APPLY_UIA_OK ) || + ( ! buf.subarray && STR_APPLY_OK ) + ) { + return String.fromCharCode.apply( + null, + utils.shrinkBuf( buf, len ) + ); + } + } + + var result = ''; + for ( var i = 0; i < len; i++ ) { + result += String.fromCharCode( buf[ i ] ); + } + return result; + } + + // Convert byte array to binary string + exports.buf2binstring = function ( buf ) { + return buf2binstring( buf, buf.length ); + }; + + // Convert binary string (typed, when possible) + exports.binstring2buf = function ( str ) { + var buf = new utils.Buf8( str.length ); + for ( var i = 0, len = buf.length; i < len; i++ ) { + buf[ i ] = str.charCodeAt( i ); + } + return buf; + }; + + // convert array to string + exports.buf2string = function ( buf, max ) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array( len * 2 ); + + for ( out = 0, i = 0; i < len; ) { + c = buf[ i++ ]; + // quick process ascii + if ( c < 0x80 ) { + utf16buf[ out++ ] = c; + continue; + } + + c_len = _utf8len[ c ]; + // skip 5 & 6 byte codes + if ( c_len > 4 ) { + utf16buf[ out++ ] = 0xfffd; + i += c_len - 1; + continue; + } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while ( c_len > 1 && i < len ) { + c = ( c << 6 ) | ( buf[ i++ ] & 0x3f ); + c_len--; + } + + // terminated by end of string? + if ( c_len > 1 ) { + utf16buf[ out++ ] = 0xfffd; + continue; + } + + if ( c < 0x10000 ) { + utf16buf[ out++ ] = c; + } else { + c -= 0x10000; + utf16buf[ out++ ] = + 0xd800 | ( ( c >> 10 ) & 0x3ff ); + utf16buf[ out++ ] = 0xdc00 | ( c & 0x3ff ); + } + } + + return buf2binstring( utf16buf, out ); + }; + + // Calculate max possible position in utf8 buffer, + // that will not break sequence. If that's not possible + // - (very small limits) return max size as is. + // + // buf[] - utf8 bytes array + // max - length limit (mandatory); + exports.utf8border = function ( buf, max ) { + var pos; + + max = max || buf.length; + if ( max > buf.length ) { + max = buf.length; + } + + // go back from last position, until start of sequence found + pos = max - 1; + while ( pos >= 0 && ( buf[ pos ] & 0xc0 ) === 0x80 ) { + pos--; + } + + // Very small and broken sequence, + // return max, because we should return something anyway. + if ( pos < 0 ) { + return max; + } + + // If we came to start of buffer - that means buffer is too small, + // return max too. + if ( pos === 0 ) { + return max; + } + + return pos + _utf8len[ buf[ pos ] ] > max ? pos : max; + }; + }, + { './common': 1 }, + ], + 3: [ + function ( require, module, exports ) { + 'use strict'; + + // Note: adler32 takes 12% for level 0 and 2% for level 6. + // It isn't worth it to make additional optimizations as in original. + // Small size is preferable. + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + function adler32( adler, buf, len, pos ) { + var s1 = ( adler & 0xffff ) | 0, + s2 = ( ( adler >>> 16 ) & 0xffff ) | 0, + n = 0; + + while ( len !== 0 ) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = ( s1 + buf[ pos++ ] ) | 0; + s2 = ( s2 + s1 ) | 0; + } while ( --n ); + + s1 %= 65521; + s2 %= 65521; + } + + return s1 | ( s2 << 16 ) | 0; + } + + module.exports = adler32; + }, + {}, + ], + 4: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + module.exports = { + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8, + //Z_NULL: null // Use -1 or null inline, depending on var type + }; + }, + {}, + ], + 5: [ + function ( require, module, exports ) { + 'use strict'; + + // Note: we can't get significant speed boost here. + // So write code to minimize size - no pregenerated tables + // and array tools dependencies. + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + // Use ordinary array, since untyped makes no boost here + function makeTable() { + var c, + table = []; + + for ( var n = 0; n < 256; n++ ) { + c = n; + for ( var k = 0; k < 8; k++ ) { + c = c & 1 ? 0xedb88320 ^ ( c >>> 1 ) : c >>> 1; + } + table[ n ] = c; + } + + return table; + } + + // Create table on load. Just 255 signed longs. Not a problem. + var crcTable = makeTable(); + + function crc32( crc, buf, len, pos ) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for ( var i = pos; i < end; i++ ) { + crc = + ( crc >>> 8 ) ^ t[ ( crc ^ buf[ i ] ) & 0xff ]; + } + + return crc ^ -1; // >>> 0; + } + + module.exports = crc32; + }, + {}, + ], + 6: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; + } + + module.exports = GZheader; + }, + {}, + ], + 7: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + // See state defs from inflate.js + var BAD = 30; /* got a data error -- remain here until reset */ + var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + + /* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ + module.exports = function inflate_fast( strm, start ) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ + //#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ + //#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + ( strm.avail_in - 5 ); + _out = strm.next_out; + output = strm.output; + beg = _out - ( start - strm.avail_out ); + end = _out + ( strm.avail_out - 257 ); + //#ifdef INFLATE_STRICT + dmax = state.dmax; + //#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = ( 1 << state.lenbits ) - 1; + dmask = ( 1 << state.distbits ) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: do { + if ( bits < 15 ) { + hold += input[ _in++ ] << bits; + bits += 8; + hold += input[ _in++ ] << bits; + bits += 8; + } + + here = lcode[ hold & lmask ]; + + dolen: for (;;) { + // Goto emulation + op = here >>> 24 /*here.bits*/; + hold >>>= op; + bits -= op; + op = ( here >>> 16 ) & 0xff /*here.op*/; + if ( op === 0 ) { + /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[ _out++ ] = + here & 0xffff /*here.val*/; + } else if ( op & 16 ) { + /* length base */ + len = here & 0xffff /*here.val*/; + op &= 15; /* number of extra bits */ + if ( op ) { + if ( bits < op ) { + hold += input[ _in++ ] << bits; + bits += 8; + } + len += hold & ( ( 1 << op ) - 1 ); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if ( bits < 15 ) { + hold += input[ _in++ ] << bits; + bits += 8; + hold += input[ _in++ ] << bits; + bits += 8; + } + here = dcode[ hold & dmask ]; + + dodist: for (;;) { + // goto emulation + op = here >>> 24 /*here.bits*/; + hold >>>= op; + bits -= op; + op = ( here >>> 16 ) & 0xff /*here.op*/; + + if ( op & 16 ) { + /* distance base */ + dist = here & 0xffff /*here.val*/; + op &= 15; /* number of extra bits */ + if ( bits < op ) { + hold += input[ _in++ ] << bits; + bits += 8; + if ( bits < op ) { + hold += + input[ _in++ ] << bits; + bits += 8; + } + } + dist += hold & ( ( 1 << op ) - 1 ); + //#ifdef INFLATE_STRICT + if ( dist > dmax ) { + strm.msg = + 'invalid distance too far back'; + state.mode = BAD; + break top; + } + //#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = + _out - + beg; /* max distance in output */ + if ( dist > op ) { + /* see if copy from window */ + op = + dist - + op; /* distance back in window */ + if ( op > whave ) { + if ( state.sane ) { + strm.msg = + 'invalid distance too far back'; + state.mode = BAD; + break top; + } + + // (!) This block is disabled in zlib defaults, + // don't enable it for binary compatibility + //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + // if (len <= op - whave) { + // do { + // output[_out++] = 0; + // } while (--len); + // continue top; + // } + // len -= op - whave; + // do { + // output[_out++] = 0; + // } while (--op > whave); + // if (op === 0) { + // from = _out - dist; + // do { + // output[_out++] = output[from++]; + // } while (--len); + // continue top; + // } + //#endif + } + from = 0; // window index + from_source = s_window; + if ( wnext === 0 ) { + /* very common case */ + from += wsize - op; + if ( op < len ) { + /* some from window */ + len -= op; + do { + output[ _out++ ] = + s_window[ + from++ + ]; + } while ( --op ); + from = + _out - + dist; /* rest from output */ + from_source = output; + } + } else if ( wnext < op ) { + /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if ( op < len ) { + /* some from end of window */ + len -= op; + do { + output[ _out++ ] = + s_window[ + from++ + ]; + } while ( --op ); + from = 0; + if ( wnext < len ) { + /* some from start of window */ + op = wnext; + len -= op; + do { + output[ + _out++ + ] = + s_window[ + from++ + ]; + } while ( --op ); + from = + _out - + dist; /* rest from output */ + from_source = + output; + } + } + } else { + /* contiguous in window */ + from += wnext - op; + if ( op < len ) { + /* some from window */ + len -= op; + do { + output[ _out++ ] = + s_window[ + from++ + ]; + } while ( --op ); + from = + _out - + dist; /* rest from output */ + from_source = output; + } + } + while ( len > 2 ) { + output[ _out++ ] = + from_source[ from++ ]; + output[ _out++ ] = + from_source[ from++ ]; + output[ _out++ ] = + from_source[ from++ ]; + len -= 3; + } + if ( len ) { + output[ _out++ ] = + from_source[ from++ ]; + if ( len > 1 ) { + output[ _out++ ] = + from_source[ + from++ + ]; + } + } + } else { + from = + _out - + dist; /* copy direct from output */ + do { + /* minimum length is three */ + output[ _out++ ] = + output[ from++ ]; + output[ _out++ ] = + output[ from++ ]; + output[ _out++ ] = + output[ from++ ]; + len -= 3; + } while ( len > 2 ); + if ( len ) { + output[ _out++ ] = + output[ from++ ]; + if ( len > 1 ) { + output[ _out++ ] = + output[ from++ ]; + } + } + } + } else if ( ( op & 64 ) === 0 ) { + /* 2nd level distance code */ + here = + dcode[ + ( here & + 0xffff ) /*here.val*/ + + ( hold & + ( ( 1 << op ) - + 1 ) ) + ]; + continue dodist; + } else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } else if ( ( op & 64 ) === 0 ) { + /* 2nd level length code */ + here = + lcode[ + ( here & 0xffff ) /*here.val*/ + + ( hold & ( ( 1 << op ) - 1 ) ) + ]; + continue dolen; + } else if ( op & 32 ) { + /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while ( _in < last && _out < end ); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= ( 1 << bits ) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = + _in < last + ? 5 + ( last - _in ) + : 5 - ( _in - last ); + strm.avail_out = + _out < end + ? 257 + ( end - _out ) + : 257 - ( _out - end ); + state.hold = hold; + state.bits = bits; + return; + }; + }, + {}, + ], + 8: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + var utils = require( '../utils/common' ); + var adler32 = require( './adler32' ); + var crc32 = require( './crc32' ); + var inflate_fast = require( './inffast' ); + var inflate_table = require( './inftrees' ); + + var CODES = 0; + var LENS = 1; + var DISTS = 2; + + /* Public constants ==========================================================*/ + /* ===========================================================================*/ + + /* Allowed flush values; see deflate() and inflate() below for details */ + //var Z_NO_FLUSH = 0; + //var Z_PARTIAL_FLUSH = 1; + //var Z_SYNC_FLUSH = 2; + //var Z_FULL_FLUSH = 3; + var Z_FINISH = 4; + var Z_BLOCK = 5; + var Z_TREES = 6; + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_NEED_DICT = 2; + //var Z_ERRNO = -1; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_MEM_ERROR = -4; + var Z_BUF_ERROR = -5; + //var Z_VERSION_ERROR = -6; + + /* The deflate compression method */ + var Z_DEFLATED = 8; + + /* STATES ====================================================================*/ + /* ===========================================================================*/ + + var HEAD = 1; /* i: waiting for magic header */ + var FLAGS = 2; /* i: waiting for method and flags (gzip) */ + var TIME = 3; /* i: waiting for modification time (gzip) */ + var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ + var EXLEN = 5; /* i: waiting for extra length (gzip) */ + var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ + var NAME = 7; /* i: waiting for end of file name (gzip) */ + var COMMENT = 8; /* i: waiting for end of comment (gzip) */ + var HCRC = 9; /* i: waiting for header crc (gzip) */ + var DICTID = 10; /* i: waiting for dictionary check value */ + var DICT = 11; /* waiting for inflateSetDictionary() call */ + var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ + var STORED = 14; /* i: waiting for stored size (length and complement) */ + var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ + var COPY = 16; /* i/o: waiting for input or output to copy stored block */ + var TABLE = 17; /* i: waiting for dynamic block table lengths */ + var LENLENS = 18; /* i: waiting for code length code lengths */ + var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ + var LEN_ = 20; /* i: same as LEN below, but only first time in */ + var LEN = 21; /* i: waiting for length/lit/eob code */ + var LENEXT = 22; /* i: waiting for length extra bits */ + var DIST = 23; /* i: waiting for distance code */ + var DISTEXT = 24; /* i: waiting for distance extra bits */ + var MATCH = 25; /* o: waiting for output space to copy string */ + var LIT = 26; /* o: waiting for output space to write literal */ + var CHECK = 27; /* i: waiting for 32-bit check value */ + var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ + var DONE = 29; /* finished check, done -- remain here until reset */ + var BAD = 30; /* got a data error -- remain here until reset */ + var MEM = 31; /* got an inflate() memory error -- remain here until reset */ + var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + + /* ===========================================================================*/ + + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + + var MAX_WBITS = 15; + /* 32K LZ77 window */ + var DEF_WBITS = MAX_WBITS; + + function zswap32( q ) { + return ( + ( ( q >>> 24 ) & 0xff ) + + ( ( q >>> 8 ) & 0xff00 ) + + ( ( q & 0xff00 ) << 8 ) + + ( ( q & 0xff ) << 24 ) + ); + } + + function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = + null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = + null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = + null; /* starting table for length/literal codes */ + this.distcode = + null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16( + 320 + ); /* temporary storage for code lengths */ + this.work = new utils.Buf16( + 288 + ); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = + null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = + null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ + } + + function inflateResetKeep( strm ) { + var state; + + if ( ! strm || ! strm.state ) { + return Z_STREAM_ERROR; + } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if ( state.wrap ) { + /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null /*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32( + ENOUGH_LENS + ); + state.distcode = state.distdyn = new utils.Buf32( + ENOUGH_DISTS + ); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; + } + + function inflateReset( strm ) { + var state; + + if ( ! strm || ! strm.state ) { + return Z_STREAM_ERROR; + } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep( strm ); + } + + function inflateReset2( strm, windowBits ) { + var wrap; + var state; + + /* get the state */ + if ( ! strm || ! strm.state ) { + return Z_STREAM_ERROR; + } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if ( windowBits < 0 ) { + wrap = 0; + windowBits = -windowBits; + } else { + wrap = ( windowBits >> 4 ) + 1; + if ( windowBits < 48 ) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if ( + windowBits && + ( windowBits < 8 || windowBits > 15 ) + ) { + return Z_STREAM_ERROR; + } + if ( + state.window !== null && + state.wbits !== windowBits + ) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset( strm ); + } + + function inflateInit2( strm, windowBits ) { + var ret; + var state; + + if ( ! strm ) { + return Z_STREAM_ERROR; + } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null /*Z_NULL*/; + ret = inflateReset2( strm, windowBits ); + if ( ret !== Z_OK ) { + strm.state = null /*Z_NULL*/; + } + return ret; + } + + function inflateInit( strm ) { + return inflateInit2( strm, DEF_WBITS ); + } + + /* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ + var virgin = true; + + var lenfix, distfix; // We have no pointers in JS, so keep tables separate + + function fixedtables( state ) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if ( virgin ) { + var sym; + + lenfix = new utils.Buf32( 512 ); + distfix = new utils.Buf32( 32 ); + + /* literal/length table */ + sym = 0; + while ( sym < 144 ) { + state.lens[ sym++ ] = 8; + } + while ( sym < 256 ) { + state.lens[ sym++ ] = 9; + } + while ( sym < 280 ) { + state.lens[ sym++ ] = 7; + } + while ( sym < 288 ) { + state.lens[ sym++ ] = 8; + } + + inflate_table( + LENS, + state.lens, + 0, + 288, + lenfix, + 0, + state.work, + { bits: 9 } + ); + + /* distance table */ + sym = 0; + while ( sym < 32 ) { + state.lens[ sym++ ] = 5; + } + + inflate_table( + DISTS, + state.lens, + 0, + 32, + distfix, + 0, + state.work, + { bits: 5 } + ); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; + } + + /* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ + function updatewindow( strm, src, end, copy ) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if ( state.window === null ) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8( state.wsize ); + } + + /* copy state->wsize or less output bytes into the circular window */ + if ( copy >= state.wsize ) { + utils.arraySet( + state.window, + src, + end - state.wsize, + state.wsize, + 0 + ); + state.wnext = 0; + state.whave = state.wsize; + } else { + dist = state.wsize - state.wnext; + if ( dist > copy ) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet( + state.window, + src, + end - copy, + dist, + state.wnext + ); + copy -= dist; + if ( copy ) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet( + state.window, + src, + end - copy, + copy, + 0 + ); + state.wnext = copy; + state.whave = state.wsize; + } else { + state.wnext += dist; + if ( state.wnext === state.wsize ) { + state.wnext = 0; + } + if ( state.whave < state.wsize ) { + state.whave += dist; + } + } + } + return 0; + } + + function inflate( strm, flush ) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, + _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8( + 4 + ); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = + /* permutation of code lengths */ + [ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, + 13, 2, 14, 1, 15, + ]; + + if ( + ! strm || + ! strm.state || + ! strm.output || + ( ! strm.input && strm.avail_in !== 0 ) + ) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if ( state.mode === TYPE ) { + state.mode = TYPEDO; + } /* skip check */ + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + // goto emulation + inf_leave: for (;;) { + switch ( state.mode ) { + case HEAD: + if ( state.wrap === 0 ) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while ( bits < 16 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + if ( state.wrap & 2 && hold === 0x8b1f ) { + /* gzip header */ + state.check = 0 /*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[ 0 ] = hold & 0xff; + hbuf[ 1 ] = ( hold >>> 8 ) & 0xff; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if ( state.head ) { + state.head.done = false; + } + if ( + ! ( + state.wrap & 1 + ) /* check if zlib header allowed */ || + ( ( ( hold & 0xff ) /*BITS(8)*/ << 8 ) + + ( hold >> 8 ) ) % + 31 + ) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ( + ( hold & 0x0f ) /*BITS(4)*/ !== + Z_DEFLATED + ) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = ( hold & 0x0f ) /*BITS(4)*/ + 8; + if ( state.wbits === 0 ) { + state.wbits = len; + } else if ( len > state.wbits ) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = + state.check = 1 /*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while ( bits < 16 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ( + ( state.flags & 0xff ) !== + Z_DEFLATED + ) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if ( state.flags & 0xe000 ) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if ( state.head ) { + state.head.text = ( hold >> 8 ) & 1; + } + if ( state.flags & 0x0200 ) { + //=== CRC2(state.check, hold); + hbuf[ 0 ] = hold & 0xff; + hbuf[ 1 ] = ( hold >>> 8 ) & 0xff; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while ( bits < 32 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + if ( state.head ) { + state.head.time = hold; + } + if ( state.flags & 0x0200 ) { + //=== CRC4(state.check, hold) + hbuf[ 0 ] = hold & 0xff; + hbuf[ 1 ] = ( hold >>> 8 ) & 0xff; + hbuf[ 2 ] = ( hold >>> 16 ) & 0xff; + hbuf[ 3 ] = ( hold >>> 24 ) & 0xff; + state.check = crc32( + state.check, + hbuf, + 4, + 0 + ); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while ( bits < 16 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + if ( state.head ) { + state.head.xflags = hold & 0xff; + state.head.os = hold >> 8; + } + if ( state.flags & 0x0200 ) { + //=== CRC2(state.check, hold); + hbuf[ 0 ] = hold & 0xff; + hbuf[ 1 ] = ( hold >>> 8 ) & 0xff; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if ( state.flags & 0x0400 ) { + //=== NEEDBITS(16); */ + while ( bits < 16 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.length = hold; + if ( state.head ) { + state.head.extra_len = hold; + } + if ( state.flags & 0x0200 ) { + //=== CRC2(state.check, hold); + hbuf[ 0 ] = hold & 0xff; + hbuf[ 1 ] = ( hold >>> 8 ) & 0xff; + state.check = crc32( + state.check, + hbuf, + 2, + 0 + ); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } else if ( state.head ) { + state.head.extra = null /*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if ( state.flags & 0x0400 ) { + copy = state.length; + if ( copy > have ) { + copy = have; + } + if ( copy ) { + if ( state.head ) { + len = + state.head.extra_len - + state.length; + if ( ! state.head.extra ) { + // Use untyped array for more convenient processing later + state.head.extra = + new Array( + state.head.extra_len + ); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if ( state.flags & 0x0200 ) { + state.check = crc32( + state.check, + input, + copy, + next + ); + } + have -= copy; + next += copy; + state.length -= copy; + } + if ( state.length ) { + break inf_leave; + } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if ( state.flags & 0x0800 ) { + if ( have === 0 ) { + break inf_leave; + } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[ next + copy++ ]; + /* use constant limit because in js we should not preallocate memory */ + if ( + state.head && + len && + state.length < + 65536 /*state.head.name_max*/ + ) { + state.head.name += + String.fromCharCode( len ); + } + } while ( len && copy < have ); + + if ( state.flags & 0x0200 ) { + state.check = crc32( + state.check, + input, + copy, + next + ); + } + have -= copy; + next += copy; + if ( len ) { + break inf_leave; + } + } else if ( state.head ) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if ( state.flags & 0x1000 ) { + if ( have === 0 ) { + break inf_leave; + } + copy = 0; + do { + len = input[ next + copy++ ]; + /* use constant limit because in js we should not preallocate memory */ + if ( + state.head && + len && + state.length < + 65536 /*state.head.comm_max*/ + ) { + state.head.comment += + String.fromCharCode( len ); + } + } while ( len && copy < have ); + if ( state.flags & 0x0200 ) { + state.check = crc32( + state.check, + input, + copy, + next + ); + } + have -= copy; + next += copy; + if ( len ) { + break inf_leave; + } + } else if ( state.head ) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if ( state.flags & 0x0200 ) { + //=== NEEDBITS(16); */ + while ( bits < 16 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + if ( + hold !== + ( state.check & 0xffff ) + ) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if ( state.head ) { + state.head.hcrc = + ( state.flags >> 9 ) & 1; + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while ( bits < 32 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32( hold ); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if ( state.havedict === 0 ) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = + state.check = 1 /*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if ( + flush === Z_BLOCK || + flush === Z_TREES + ) { + break inf_leave; + } + /* falls through */ + case TYPEDO: + if ( state.last ) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while ( bits < 3 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.last = hold & 0x01 /*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ( hold & 0x03 /*BITS(2)*/ ) { + case 0 /* stored block */: + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1 /* fixed block */: + fixedtables( state ); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = + LEN_; /* decode codes */ + if ( flush === Z_TREES ) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2 /* dynamic block */: + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while ( bits < 32 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + if ( + ( hold & 0xffff ) !== + ( ( hold >>> 16 ) ^ 0xffff ) + ) { + strm.msg = + 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if ( flush === Z_TREES ) { + break inf_leave; + } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if ( copy ) { + if ( copy > have ) { + copy = have; + } + if ( copy > left ) { + copy = left; + } + if ( copy === 0 ) { + break inf_leave; + } + //--- zmemcpy(put, next, copy); --- + utils.arraySet( + output, + input, + next, + copy, + put + ); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while ( bits < 14 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.nlen = + ( hold & 0x1f ) /*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = + ( hold & 0x1f ) /*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = + ( hold & 0x0f ) /*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + //#ifndef PKZIP_BUG_WORKAROUND + if ( + state.nlen > 286 || + state.ndist > 30 + ) { + strm.msg = + 'too many length or distance symbols'; + state.mode = BAD; + break; + } + //#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while ( state.have < state.ncode ) { + //=== NEEDBITS(3); + while ( bits < 3 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.lens[ order[ state.have++ ] ] = + hold & 0x07; //BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while ( state.have < 19 ) { + state.lens[ order[ state.have++ ] ] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table( + CODES, + state.lens, + 0, + 19, + state.lencode, + 0, + state.work, + opts + ); + state.lenbits = opts.bits; + + if ( ret ) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while ( + state.have < + state.nlen + state.ndist + ) { + for (;;) { + here = + state.lencode[ + hold & + ( ( 1 << + state.lenbits ) - + 1 ) + ]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = ( here >>> 16 ) & 0xff; + here_val = here & 0xffff; + + if ( here_bits <= bits ) { + break; + } + //--- PULLBYTE() ---// + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + //---// + } + if ( here_val < 16 ) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[ state.have++ ] = + here_val; + } else { + if ( here_val === 16 ) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while ( bits < n ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += + input[ next++ ] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if ( state.have === 0 ) { + strm.msg = + 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = + state.lens[ + state.have - 1 + ]; + copy = 3 + ( hold & 0x03 ); //BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } else if ( here_val === 17 ) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while ( bits < n ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += + input[ next++ ] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + ( hold & 0x07 ); //BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while ( bits < n ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += + input[ next++ ] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + ( hold & 0x7f ); //BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if ( + state.have + copy > + state.nlen + state.ndist + ) { + strm.msg = + 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while ( copy-- ) { + state.lens[ state.have++ ] = + len; + } + } + } + + /* handle error breaks in while */ + if ( state.mode === BAD ) { + break; + } + + /* check for end-of-block code (better have one) */ + if ( state.lens[ 256 ] === 0 ) { + strm.msg = + 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table( + LENS, + state.lens, + 0, + state.nlen, + state.lencode, + 0, + state.work, + opts + ); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if ( ret ) { + strm.msg = + 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table( + DISTS, + state.lens, + state.nlen, + state.ndist, + state.distcode, + 0, + state.work, + opts + ); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if ( ret ) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if ( flush === Z_TREES ) { + break inf_leave; + } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if ( have >= 6 && left >= 258 ) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast( strm, _out ); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if ( state.mode === TYPE ) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = + state.lencode[ + hold & + ( ( 1 << state.lenbits ) - + 1 ) + ]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = ( here >>> 16 ) & 0xff; + here_val = here & 0xffff; + + if ( here_bits <= bits ) { + break; + } + //--- PULLBYTE() ---// + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + //---// + } + if ( here_op && ( here_op & 0xf0 ) === 0 ) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = + state.lencode[ + last_val + + ( ( hold & + ( ( 1 << + ( last_bits + + last_op ) ) - + 1 ) ) /*BITS(last.bits + last.op)*/ >> + last_bits ) + ]; + here_bits = here >>> 24; + here_op = ( here >>> 16 ) & 0xff; + here_val = here & 0xffff; + + if ( + last_bits + here_bits <= + bits + ) { + break; + } + //--- PULLBYTE() ---// + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if ( here_op === 0 ) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if ( here_op & 32 ) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if ( here_op & 64 ) { + strm.msg = + 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if ( state.extra ) { + //=== NEEDBITS(state.extra); + n = state.extra; + while ( bits < n ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.length += + hold & + ( ( 1 << state.extra ) - + 1 ) /*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = + state.distcode[ + hold & + ( ( 1 << state.distbits ) - + 1 ) + ]; /*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = ( here >>> 16 ) & 0xff; + here_val = here & 0xffff; + + if ( here_bits <= bits ) { + break; + } + //--- PULLBYTE() ---// + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + //---// + } + if ( ( here_op & 0xf0 ) === 0 ) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = + state.distcode[ + last_val + + ( ( hold & + ( ( 1 << + ( last_bits + + last_op ) ) - + 1 ) ) /*BITS(last.bits + last.op)*/ >> + last_bits ) + ]; + here_bits = here >>> 24; + here_op = ( here >>> 16 ) & 0xff; + here_val = here & 0xffff; + + if ( + last_bits + here_bits <= + bits + ) { + break; + } + //--- PULLBYTE() ---// + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if ( here_op & 64 ) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = here_op & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if ( state.extra ) { + //=== NEEDBITS(state.extra); + n = state.extra; + while ( bits < n ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + state.offset += + hold & + ( ( 1 << state.extra ) - + 1 ) /*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //#ifdef INFLATE_STRICT + if ( state.offset > state.dmax ) { + strm.msg = + 'invalid distance too far back'; + state.mode = BAD; + break; + } + //#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if ( left === 0 ) { + break inf_leave; + } + copy = _out - left; + if ( state.offset > copy ) { + /* copy from window */ + copy = state.offset - copy; + if ( copy > state.whave ) { + if ( state.sane ) { + strm.msg = + 'invalid distance too far back'; + state.mode = BAD; + break; + } + // (!) This block is disabled in zlib defaults, + // don't enable it for binary compatibility + //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + // Trace((stderr, "inflate.c too far\n")); + // copy -= state.whave; + // if (copy > state.length) { copy = state.length; } + // if (copy > left) { copy = left; } + // left -= copy; + // state.length -= copy; + // do { + // output[put++] = 0; + // } while (--copy); + // if (state.length === 0) { state.mode = LEN; } + // break; + //#endif + } + if ( copy > state.wnext ) { + copy -= state.wnext; + from = state.wsize - copy; + } else { + from = state.wnext - copy; + } + if ( copy > state.length ) { + copy = state.length; + } + from_source = state.window; + } else { + /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if ( copy > left ) { + copy = left; + } + left -= copy; + state.length -= copy; + do { + output[ put++ ] = from_source[ from++ ]; + } while ( --copy ); + if ( state.length === 0 ) { + state.mode = LEN; + } + break; + case LIT: + if ( left === 0 ) { + break inf_leave; + } + output[ put++ ] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if ( state.wrap ) { + //=== NEEDBITS(32); + while ( bits < 32 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + // Use '|' instead of '+' to make sure that result is signed + hold |= input[ next++ ] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if ( _out ) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + state.flags + ? crc32( + state.check, + output, + _out, + put - _out + ) + : adler32( + state.check, + output, + _out, + put - _out + ); + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ( + ( state.flags + ? hold + : zswap32( hold ) ) !== + state.check + ) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if ( state.wrap && state.flags ) { + //=== NEEDBITS(32); + while ( bits < 32 ) { + if ( have === 0 ) { + break inf_leave; + } + have--; + hold += input[ next++ ] << bits; + bits += 8; + } + //===// + if ( + hold !== + ( state.total & 0xffffffff ) + ) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if ( + state.wsize || + ( _out !== strm.avail_out && + state.mode < BAD && + ( state.mode < CHECK || flush !== Z_FINISH ) ) + ) { + if ( + updatewindow( + strm, + strm.output, + strm.next_out, + _out - strm.avail_out + ) + ) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if ( state.wrap && _out ) { + strm.adler = state.check = + /*UPDATE(state.check, strm.next_out - _out, _out);*/ + state.flags + ? crc32( + state.check, + output, + _out, + strm.next_out - _out + ) + : adler32( + state.check, + output, + _out, + strm.next_out - _out + ); + } + strm.data_type = + state.bits + + ( state.last ? 64 : 0 ) + + ( state.mode === TYPE ? 128 : 0 ) + + ( state.mode === LEN_ || state.mode === COPY_ + ? 256 + : 0 ); + if ( + ( ( _in === 0 && _out === 0 ) || + flush === Z_FINISH ) && + ret === Z_OK + ) { + ret = Z_BUF_ERROR; + } + return ret; + } + + function inflateEnd( strm ) { + if ( + ! strm || + ! strm.state /*|| strm->zfree == (free_func)0*/ + ) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if ( state.window ) { + state.window = null; + } + strm.state = null; + return Z_OK; + } + + function inflateGetHeader( strm, head ) { + var state; + + /* check state */ + if ( ! strm || ! strm.state ) { + return Z_STREAM_ERROR; + } + state = strm.state; + if ( ( state.wrap & 2 ) === 0 ) { + return Z_STREAM_ERROR; + } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; + } + + function inflateSetDictionary( strm, dictionary ) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if ( + ! strm /* == Z_NULL */ || + ! strm.state /* == Z_NULL */ + ) { + return Z_STREAM_ERROR; + } + state = strm.state; + + if ( state.wrap !== 0 && state.mode !== DICT ) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if ( state.mode === DICT ) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32( + dictid, + dictionary, + dictLength, + 0 + ); + if ( dictid !== state.check ) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow( + strm, + dictionary, + dictLength, + dictLength + ); + if ( ret ) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; + } + + exports.inflateReset = inflateReset; + exports.inflateReset2 = inflateReset2; + exports.inflateResetKeep = inflateResetKeep; + exports.inflateInit = inflateInit; + exports.inflateInit2 = inflateInit2; + exports.inflate = inflate; + exports.inflateEnd = inflateEnd; + exports.inflateGetHeader = inflateGetHeader; + exports.inflateSetDictionary = inflateSetDictionary; + exports.inflateInfo = 'pako inflate (from Nodeca project)'; + + /* Not implemented + exports.inflateCopy = inflateCopy; + exports.inflateGetDictionary = inflateGetDictionary; + exports.inflateMark = inflateMark; + exports.inflatePrime = inflatePrime; + exports.inflateSync = inflateSync; + exports.inflateSyncPoint = inflateSyncPoint; + exports.inflateUndermine = inflateUndermine; + */ + }, + { + '../utils/common': 1, + './adler32': 3, + './crc32': 5, + './inffast': 7, + './inftrees': 9, + }, + ], + 9: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + var utils = require( '../utils/common' ); + + var MAXBITS = 15; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + + var CODES = 0; + var LENS = 1; + var DISTS = 2; + + var lbase = [ + /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, + 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, + 83, 99, 115, 131, 163, 195, 227, 258, 0, 0, + ]; + + var lext = [ + /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, + 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, + 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78, + ]; + + var dbase = [ + /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, + 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, + 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, + 24577, 0, 0, + ]; + + var dext = [ + /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, + 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, + 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64, + ]; + + module.exports = function inflate_table( + type, + lens, + lens_index, + codes, + table, + table_index, + work, + opts + ) { + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, + max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; + // var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16( MAXBITS + 1 ); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16( MAXBITS + 1 ); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for ( len = 0; len <= MAXBITS; len++ ) { + count[ len ] = 0; + } + for ( sym = 0; sym < codes; sym++ ) { + count[ lens[ lens_index + sym ] ]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for ( max = MAXBITS; max >= 1; max-- ) { + if ( count[ max ] !== 0 ) { + break; + } + } + if ( root > max ) { + root = max; + } + if ( max === 0 ) { + /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[ table_index++ ] = + ( 1 << 24 ) | ( 64 << 16 ) | 0; + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[ table_index++ ] = + ( 1 << 24 ) | ( 64 << 16 ) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for ( min = 1; min < max; min++ ) { + if ( count[ min ] !== 0 ) { + break; + } + } + if ( root < min ) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for ( len = 1; len <= MAXBITS; len++ ) { + left <<= 1; + left -= count[ len ]; + if ( left < 0 ) { + return -1; + } /* over-subscribed */ + } + if ( left > 0 && ( type === CODES || max !== 1 ) ) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[ 1 ] = 0; + for ( len = 1; len < MAXBITS; len++ ) { + offs[ len + 1 ] = offs[ len ] + count[ len ]; + } + + /* sort symbols by length, by symbol order within each length */ + for ( sym = 0; sym < codes; sym++ ) { + if ( lens[ lens_index + sym ] !== 0 ) { + work[ offs[ lens[ lens_index + sym ] ]++ ] = + sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if ( type === CODES ) { + base = extra = work; /* dummy value--not used */ + end = 19; + } else if ( type === LENS ) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + } else { + /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ( + ( type === LENS && used > ENOUGH_LENS ) || + ( type === DISTS && used > ENOUGH_DISTS ) + ) { + return 1; + } + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here_bits = len - drop; + if ( work[ sym ] < end ) { + here_op = 0; + here_val = work[ sym ]; + } else if ( work[ sym ] > end ) { + here_op = extra[ extra_index + work[ sym ] ]; + here_val = base[ base_index + work[ sym ] ]; + } else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << ( len - drop ); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[ next + ( huff >> drop ) + fill ] = + ( here_bits << 24 ) | + ( here_op << 16 ) | + here_val | + 0; + } while ( fill !== 0 ); + + /* backwards increment the len-bit code huff */ + incr = 1 << ( len - 1 ); + while ( huff & incr ) { + incr >>= 1; + } + if ( incr !== 0 ) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if ( --count[ len ] === 0 ) { + if ( len === max ) { + break; + } + len = lens[ lens_index + work[ sym ] ]; + } + + /* create new sub-table if needed */ + if ( len > root && ( huff & mask ) !== low ) { + /* if first time, transition to sub-tables */ + if ( drop === 0 ) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while ( curr + drop < max ) { + left -= count[ curr + drop ]; + if ( left <= 0 ) { + break; + } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ( + ( type === LENS && used > ENOUGH_LENS ) || + ( type === DISTS && used > ENOUGH_DISTS ) + ) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[ low ] = + ( root << 24 ) | + ( curr << 16 ) | + ( next - table_index ) | + 0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if ( huff !== 0 ) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[ next + huff ] = + ( ( len - drop ) << 24 ) | ( 64 << 16 ) | 0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; + }; + }, + { '../utils/common': 1 }, + ], + 10: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + module.exports = { + 2: 'need dictionary' /* Z_NEED_DICT 2 */, + 1: 'stream end' /* Z_STREAM_END 1 */, + 0: '' /* Z_OK 0 */, + '-1': 'file error' /* Z_ERRNO (-1) */, + '-2': 'stream error' /* Z_STREAM_ERROR (-2) */, + '-3': 'data error' /* Z_DATA_ERROR (-3) */, + '-4': 'insufficient memory' /* Z_MEM_ERROR (-4) */, + '-5': 'buffer error' /* Z_BUF_ERROR (-5) */, + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */, + }; + }, + {}, + ], + 11: [ + function ( require, module, exports ) { + 'use strict'; + + // (C) 1995-2013 Jean-loup Gailly and Mark Adler + // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // 3. This notice may not be removed or altered from any source distribution. + + function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = '' /*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2 /*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; + } + + module.exports = ZStream; + }, + {}, + ], + '/lib/inflate.js': [ + function ( require, module, exports ) { + 'use strict'; + + var zlib_inflate = require( './zlib/inflate' ); + var utils = require( './utils/common' ); + var strings = require( './utils/strings' ); + var c = require( './zlib/constants' ); + var msg = require( './zlib/messages' ); + var ZStream = require( './zlib/zstream' ); + var GZheader = require( './zlib/gzheader' ); + + var toString = Object.prototype.toString; + + /** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + + /* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overridden. + **/ + + /** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + + /** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + + /** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + /** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ + function Inflate( options ) { + if ( ! ( this instanceof Inflate ) ) + return new Inflate( options ); + + this.options = utils.assign( + { + chunkSize: 16384, + windowBits: 0, + to: '', + }, + options || {} + ); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if ( + opt.raw && + opt.windowBits >= 0 && + opt.windowBits < 16 + ) { + opt.windowBits = -opt.windowBits; + if ( opt.windowBits === 0 ) { + opt.windowBits = -15; + } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ( + opt.windowBits >= 0 && + opt.windowBits < 16 && + ! ( options && options.windowBits ) + ) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ( opt.windowBits > 15 && opt.windowBits < 48 ) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ( ( opt.windowBits & 15 ) === 0 ) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if ( status !== c.Z_OK ) { + throw new Error( msg[ status ] ); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader( this.strm, this.header ); + + // Setup dictionary + if ( opt.dictionary ) { + // Convert data if needed + if ( typeof opt.dictionary === 'string' ) { + opt.dictionary = strings.string2buf( + opt.dictionary + ); + } else if ( + toString.call( opt.dictionary ) === + '[object ArrayBuffer]' + ) { + opt.dictionary = new Uint8Array( + opt.dictionary + ); + } + if ( opt.raw ) { + //In raw mode we need to set the dictionary early + status = zlib_inflate.inflateSetDictionary( + this.strm, + opt.dictionary + ); + if ( status !== c.Z_OK ) { + throw new Error( msg[ status ] ); + } + } + } + } + + /** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ + Inflate.prototype.push = function ( data, mode ) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if ( this.ended ) { + return false; + } + _mode = + mode === ~~mode + ? mode + : mode === true + ? c.Z_FINISH + : c.Z_NO_FLUSH; + + // Convert data if needed + if ( typeof data === 'string' ) { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf( data ); + } else if ( + toString.call( data ) === '[object ArrayBuffer]' + ) { + strm.input = new Uint8Array( data ); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if ( strm.avail_out === 0 ) { + strm.output = new utils.Buf8( chunkSize ); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate( + strm, + c.Z_NO_FLUSH + ); /* no bad return value */ + + if ( status === c.Z_NEED_DICT && dictionary ) { + status = zlib_inflate.inflateSetDictionary( + this.strm, + dictionary + ); + } + + if ( + status === c.Z_BUF_ERROR && + allowBufError === true + ) { + status = c.Z_OK; + allowBufError = false; + } + + if ( + status !== c.Z_STREAM_END && + status !== c.Z_OK + ) { + this.onEnd( status ); + this.ended = true; + return false; + } + + if ( strm.next_out ) { + if ( + strm.avail_out === 0 || + status === c.Z_STREAM_END || + ( strm.avail_in === 0 && + ( _mode === c.Z_FINISH || + _mode === c.Z_SYNC_FLUSH ) ) + ) { + if ( this.options.to === 'string' ) { + next_out_utf8 = strings.utf8border( + strm.output, + strm.next_out + ); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string( + strm.output, + next_out_utf8 + ); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if ( tail ) { + utils.arraySet( + strm.output, + strm.output, + next_out_utf8, + tail, + 0 + ); + } + + this.onData( utf8str ); + } else { + this.onData( + utils.shrinkBuf( + strm.output, + strm.next_out + ) + ); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if ( strm.avail_in === 0 && strm.avail_out === 0 ) { + allowBufError = true; + } + } while ( + ( strm.avail_in > 0 || strm.avail_out === 0 ) && + status !== c.Z_STREAM_END + ); + + if ( status === c.Z_STREAM_END ) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if ( _mode === c.Z_FINISH ) { + status = zlib_inflate.inflateEnd( this.strm ); + this.onEnd( status ); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if ( _mode === c.Z_SYNC_FLUSH ) { + this.onEnd( c.Z_OK ); + strm.avail_out = 0; + return true; + } + + return true; + }; + + /** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ + Inflate.prototype.onData = function ( chunk ) { + this.chunks.push( chunk ); + }; + + /** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ + Inflate.prototype.onEnd = function ( status ) { + // On success - join + if ( status === c.Z_OK ) { + if ( this.options.to === 'string' ) { + // Glue & convert here, until we teach pako to send + // utf8 aligned strings to onData + this.result = this.chunks.join( '' ); + } else { + this.result = utils.flattenChunks( + this.chunks + ); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; + }; + + /** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ + function inflate( input, options ) { + var inflator = new Inflate( options ); + + inflator.push( input, true ); + + // That will never happens, if you don't cheat with options :) + if ( inflator.err ) { + throw inflator.msg || msg[ inflator.err ]; + } + + return inflator.result; + } + + /** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ + function inflateRaw( input, options ) { + options = options || {}; + options.raw = true; + return inflate( input, options ); + } + + /** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + exports.Inflate = Inflate; + exports.inflate = inflate; + exports.inflateRaw = inflateRaw; + exports.ungzip = inflate; + }, + { + './utils/common': 1, + './utils/strings': 2, + './zlib/constants': 4, + './zlib/gzheader': 6, + './zlib/inflate': 8, + './zlib/messages': 10, + './zlib/zstream': 11, + }, + ], + }, + {}, + [] + )( '/lib/inflate.js' ); +} ); +/* eslint-enable */ /***/ }), -/***/ 8981: -/***/ (function(module, exports) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//download.js v4.2, by dandavis; 2008-2016. [MIT] see http://danml.com/download.html for tests/usage -// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime -// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs -// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling. -// v4 adds AMD/UMD, commonJS, and plain browser support -// v4.1 adds url download capability via solo URL argument (same domain/CORS only) -// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors -// https://github.com/rndme/download - -(function (root, factory) { - if (true) { - // AMD. Register as an anonymous module. - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __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 {} -}(this, function () { - - return function download(data, strFileName, strMimeType) { - - var self = window, // this script is only for browsers anyway... - defaultMime = "application/octet-stream", // this default mime also triggers iframe downloads - mimeType = strMimeType || defaultMime, - payload = data, - url = !strFileName && !strMimeType && payload, - anchor = document.createElement("a"), - toString = function(a){return String(a);}, - myBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString), - fileName = strFileName || "download", - blob, - reader; - myBlob= myBlob.call ? myBlob.bind(self) : Blob ; - - if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback - payload=[payload, mimeType]; - mimeType=payload[0]; - payload=payload[1]; - } - - - if(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument - fileName = url.split("/").pop().split("?")[0]; - anchor.href = url; // assign href prop to temp anchor - if(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path: - var ajax=new XMLHttpRequest(); - ajax.open( "GET", url, true); - ajax.responseType = 'blob'; - ajax.onload= function(e){ - download(e.target.response, fileName, defaultMime); - }; - setTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return: - return ajax; - } // end if valid url? - } // end if url? - - - //go ahead and download dataURLs right away - if(/^data:([\w+-]+\/[\w+.-]+)?[,;]/.test(payload)){ - - if(payload.length > (1024*1024*1.999) && myBlob !== toString ){ - payload=dataUrlToBlob(payload); - mimeType=payload.type || defaultMime; - }else{ - return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs: - navigator.msSaveBlob(dataUrlToBlob(payload), fileName) : - saver(payload) ; // everyone else can save dataURLs un-processed +/***/ 8572: +/***/ ((module) => { + +/* eslint eslint-comments/no-unlimited-disable: 0 */ +/* eslint-disable */ +( function ( f ) { + if ( true ) { + module.exports = f(); + } else { var g; } +} )( function () { + var define, module, exports; + return ( function () { + function r( e, n, t ) { + function o( i, f ) { + if ( ! n[ i ] ) { + if ( ! e[ i ] ) { + var c = undefined; + if ( ! f && c ) return require( i, ! 0 ); + if ( u ) return u( i, ! 0 ); + var a = new Error( "Cannot find module '" + i + "'" ); + throw ( ( a.code = 'MODULE_NOT_FOUND' ), a ); + } + var p = ( n[ i ] = { exports: {} } ); + e[ i ][ 0 ].call( + p.exports, + function ( r ) { + var n = e[ i ][ 1 ][ r ]; + return o( n || r ); + }, + p, + p.exports, + r, + e, + n, + t + ); + } + return n[ i ].exports; } - - }else{//not data url, is it a string with special needs? - if(/([\x80-\xff])/.test(payload)){ - var i=0, tempUiArr= new Uint8Array(payload.length), mx=tempUiArr.length; - for(i;i 0; + }; + + /* Fills up the input ringbuffer by calling the input callback. + + Does nothing if there are at least 32 bytes present after current position. + + Returns 0 if either: + - the input callback returned an error, or + - there is no more input and the position is past the end of the stream. + + After encountering the end of the input stream, 32 additional zero bytes are + copied to the ringbuffer, therefore it is safe to call this function after + every 32 bytes of input is read. +*/ + BrotliBitReader.prototype.readMoreInput = function () { + if ( this.bit_end_pos_ > 256 ) { + return; + } else if ( this.eos_ ) { + if ( this.bit_pos_ > this.bit_end_pos_ ) + throw new Error( + 'Unexpected end of input ' + + this.bit_pos_ + + ' ' + + this.bit_end_pos_ + ); + } else { + var dst = this.buf_ptr_; + var bytes_read = this.input_.read( + this.buf_, + dst, + BROTLI_READ_SIZE + ); + if ( bytes_read < 0 ) { + throw new Error( 'Unexpected end of input' ); + } + + if ( bytes_read < BROTLI_READ_SIZE ) { + this.eos_ = 1; + /* Store 32 bytes of zero after the stream end. */ + for ( var p = 0; p < 32; p++ ) + this.buf_[ dst + bytes_read + p ] = 0; + } + + if ( dst === 0 ) { + /* Copy the head of the ringbuffer to the slack region. */ + for ( var p = 0; p < 32; p++ ) + this.buf_[ ( BROTLI_READ_SIZE << 1 ) + p ] = + this.buf_[ p ]; + + this.buf_ptr_ = BROTLI_READ_SIZE; + } else { + this.buf_ptr_ = 0; + } + + this.bit_end_pos_ += bytes_read << 3; + } + }; + + /* Guarantees that there are at least 24 bits in the buffer. */ + BrotliBitReader.prototype.fillBitWindow = function () { + while ( this.bit_pos_ >= 8 ) { + this.val_ >>>= 8; + this.val_ |= + this.buf_[ this.pos_ & BROTLI_IBUF_MASK ] << 24; + ++this.pos_; + this.bit_pos_ = ( this.bit_pos_ - 8 ) >>> 0; + this.bit_end_pos_ = ( this.bit_end_pos_ - 8 ) >>> 0; + } + }; + + /* Reads the specified number of bits from Read Buffer. */ + BrotliBitReader.prototype.readBits = function ( n_bits ) { + if ( 32 - this.bit_pos_ < n_bits ) { + this.fillBitWindow(); + } + + var val = + ( this.val_ >>> this.bit_pos_ ) & + kBitMask[ n_bits ]; + this.bit_pos_ += n_bits; + return val; + }; + + module.exports = BrotliBitReader; + }, + {}, + ], + 2: [ + function ( require, module, exports ) { + /* Copyright 2013 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Lookup table to map the previous two bytes to a context id. + + There are four different context modeling modes defined here: + CONTEXT_LSB6: context id is the least significant 6 bits of the last byte, + CONTEXT_MSB6: context id is the most significant 6 bits of the last byte, + CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text, + CONTEXT_SIGNED: second-order context model tuned for signed integers. + + The context id for the UTF8 context model is calculated as follows. If p1 + and p2 are the previous two bytes, we calcualte the context as + + context = kContextLookup[p1] | kContextLookup[p2 + 256]. + + If the previous two bytes are ASCII characters (i.e. < 128), this will be + equivalent to + + context = 4 * context1(p1) + context2(p2), + + where context1 is based on the previous byte in the following way: + + 0 : non-ASCII control + 1 : \t, \n, \r + 2 : space + 3 : other punctuation + 4 : " ' + 5 : % + 6 : ( < [ { + 7 : ) > ] } + 8 : , ; : + 9 : . + 10 : = + 11 : number + 12 : upper-case vowel + 13 : upper-case consonant + 14 : lower-case vowel + 15 : lower-case consonant + + and context2 is based on the second last byte: + + 0 : control, space + 1 : punctuation + 2 : upper-case letter, number + 3 : lower-case letter + + If the last byte is ASCII, and the second last byte is not (in a valid UTF8 + stream it will be a continuation byte, value between 128 and 191), the + context is the same as if the second last byte was an ASCII control or space. + + If the last byte is a UTF8 lead byte (value >= 192), then the next byte will + be a continuation byte and the context id is 2 or 3 depending on the LSB of + the last byte and to a lesser extent on the second last byte if it is ASCII. + + If the last byte is a UTF8 continuation byte, the second last byte can be: + - continuation byte: the next byte is probably ASCII or lead byte (assuming + 4-byte UTF8 characters are rare) and the context id is 0 or 1. + - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 + - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 + + The possible value combinations of the previous two bytes, the range of + context ids and the type of the next byte is summarized in the table below: + + |--------\-----------------------------------------------------------------| + | \ Last byte | + | Second \---------------------------------------------------------------| + | last byte \ ASCII | cont. byte | lead byte | + | \ (0-127) | (128-191) | (192-) | + |=============|===================|=====================|==================| + | ASCII | next: ASCII/lead | not valid | next: cont. | + | (0-127) | context: 4 - 63 | | context: 2 - 3 | + |-------------|-------------------|---------------------|------------------| + | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | + | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | + |-------------|-------------------|---------------------|------------------| + | lead byte | not valid | next: ASCII/lead | not valid | + | (192-207) | | context: 0 - 1 | | + |-------------|-------------------|---------------------|------------------| + | lead byte | not valid | next: cont. | not valid | + | (208-) | | context: 2 - 3 | | + |-------------|-------------------|---------------------|------------------| + + The context id for the signed context mode is calculated as: + + context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2]. + + For any context modeling modes, the context ids can be calculated by |-ing + together two lookups from one table using context model dependent offsets: + + context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2]. + + where offset1 and offset2 are dependent on the context mode. +*/ + + var CONTEXT_LSB6 = 0; + var CONTEXT_MSB6 = 1; + var CONTEXT_UTF8 = 2; + var CONTEXT_SIGNED = 3; + + /* Common context lookup table for all context modes. */ + exports.lookup = new Uint8Array( [ + /* CONTEXT_UTF8, last byte. */ + /* ASCII range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 16, 12, + 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, + 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, + 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, + 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, + 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, + 60, 60, 60, 24, 12, 28, 12, 0, + /* UTF8 continuation byte range. */ + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, /* UTF8 lead byte range. */ + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, + 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, + 3, 2, 3, 2, 3, 2, 3, + /* CONTEXT_UTF8 second last byte. */ + /* ASCII range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, + /* UTF8 continuation byte range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, /* UTF8 lead byte range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /* CONTEXT_SIGNED, second last byte. */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 7, + /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ + 0, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, + /* CONTEXT_LSB6, last byte. */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, + /* CONTEXT_MSB6, last byte. */ + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, + 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, + 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, + 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, + 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, + 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, + 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, + 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, + 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, + 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, + 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, + 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, + 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, + 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, + 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, + 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, + 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, + 62, 62, 62, 62, 63, 63, 63, 63, + /* CONTEXT_{M,L}SB6, second last byte, */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + ] ); + + exports.lookupOffsets = new Uint16Array( [ + /* CONTEXT_LSB6 */ + 1024, 1536, /* CONTEXT_MSB6 */ + 1280, 1536, /* CONTEXT_UTF8 */ + 0, 256, /* CONTEXT_SIGNED */ + 768, 512, + ] ); + }, + {}, + ], + 3: [ + function ( require, module, exports ) { + /* Copyright 2013 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + var BrotliInput = require( './streams' ).BrotliInput; + var BrotliOutput = require( './streams' ).BrotliOutput; + var BrotliBitReader = require( './bit_reader' ); + var BrotliDictionary = require( './dictionary' ); + var HuffmanCode = require( './huffman' ).HuffmanCode; + var BrotliBuildHuffmanTable = + require( './huffman' ).BrotliBuildHuffmanTable; + var Context = require( './context' ); + var Prefix = require( './prefix' ); + var Transform = require( './transform' ); + + var kDefaultCodeLength = 8; + var kCodeLengthRepeatCode = 16; + var kNumLiteralCodes = 256; + var kNumInsertAndCopyCodes = 704; + var kNumBlockLengthCodes = 26; + var kLiteralContextBits = 6; + var kDistanceContextBits = 2; + + var HUFFMAN_TABLE_BITS = 8; + var HUFFMAN_TABLE_MASK = 0xff; + /* Maximum possible Huffman table size for an alphabet size of 704, max code + * length 15 and root table bits 8. */ + var HUFFMAN_MAX_TABLE_SIZE = 1080; + + var CODE_LENGTH_CODES = 18; + var kCodeLengthCodeOrder = new Uint8Array( [ + 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, + 14, 15, + ] ); + + var NUM_DISTANCE_SHORT_CODES = 16; + var kDistanceShortCodeIndexOffset = new Uint8Array( [ + 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, + ] ); + + var kDistanceShortCodeValueOffset = new Int8Array( [ + 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3, + ] ); + + var kMaxHuffmanTableSize = new Uint16Array( [ + 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, + 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, + 1080, + ] ); + + function DecodeWindowBits( br ) { + var n; + if ( br.readBits( 1 ) === 0 ) { + return 16; + } + + n = br.readBits( 3 ); + if ( n > 0 ) { + return 17 + n; + } + + n = br.readBits( 3 ); + if ( n > 0 ) { + return 8 + n; + } + + return 17; + } + + /* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ + function DecodeVarLenUint8( br ) { + if ( br.readBits( 1 ) ) { + var nbits = br.readBits( 3 ); + if ( nbits === 0 ) { + return 1; + } else { + return br.readBits( nbits ) + ( 1 << nbits ); + } + } + return 0; + } + + function MetaBlockLength() { + this.meta_block_length = 0; + this.input_end = 0; + this.is_uncompressed = 0; + this.is_metadata = false; + } + + function DecodeMetaBlockLength( br ) { + var out = new MetaBlockLength(); + var size_nibbles; + var size_bytes; + var i; + + out.input_end = br.readBits( 1 ); + if ( out.input_end && br.readBits( 1 ) ) { + return out; + } + + size_nibbles = br.readBits( 2 ) + 4; + if ( size_nibbles === 7 ) { + out.is_metadata = true; + + if ( br.readBits( 1 ) !== 0 ) + throw new Error( 'Invalid reserved bit' ); + + size_bytes = br.readBits( 2 ); + if ( size_bytes === 0 ) return out; + + for ( i = 0; i < size_bytes; i++ ) { + var next_byte = br.readBits( 8 ); + if ( + i + 1 === size_bytes && + size_bytes > 1 && + next_byte === 0 + ) + throw new Error( 'Invalid size byte' ); + + out.meta_block_length |= next_byte << ( i * 8 ); + } + } else { + for ( i = 0; i < size_nibbles; ++i ) { + var next_nibble = br.readBits( 4 ); + if ( + i + 1 === size_nibbles && + size_nibbles > 4 && + next_nibble === 0 + ) + throw new Error( 'Invalid size nibble' ); + + out.meta_block_length |= + next_nibble << ( i * 4 ); + } + } + + ++out.meta_block_length; + + if ( ! out.input_end && ! out.is_metadata ) { + out.is_uncompressed = br.readBits( 1 ); + } + + return out; + } + + /* Decodes the next Huffman code from bit-stream. */ + function ReadSymbol( table, index, br ) { + var start_index = index; + + var nbits; + br.fillBitWindow(); + index += + ( br.val_ >>> br.bit_pos_ ) & HUFFMAN_TABLE_MASK; + nbits = table[ index ].bits - HUFFMAN_TABLE_BITS; + if ( nbits > 0 ) { + br.bit_pos_ += HUFFMAN_TABLE_BITS; + index += table[ index ].value; + index += + ( br.val_ >>> br.bit_pos_ ) & + ( ( 1 << nbits ) - 1 ); + } + br.bit_pos_ += table[ index ].bits; + return table[ index ].value; + } + + function ReadHuffmanCodeLengths( + code_length_code_lengths, + num_symbols, + code_lengths, + br + ) { + var symbol = 0; + var prev_code_len = kDefaultCodeLength; + var repeat = 0; + var repeat_code_len = 0; + var space = 32768; + + var table = []; + for ( var i = 0; i < 32; i++ ) + table.push( new HuffmanCode( 0, 0 ) ); + + BrotliBuildHuffmanTable( + table, + 0, + 5, + code_length_code_lengths, + CODE_LENGTH_CODES + ); + + while ( symbol < num_symbols && space > 0 ) { + var p = 0; + var code_len; + + br.readMoreInput(); + br.fillBitWindow(); + p += ( br.val_ >>> br.bit_pos_ ) & 31; + br.bit_pos_ += table[ p ].bits; + code_len = table[ p ].value & 0xff; + if ( code_len < kCodeLengthRepeatCode ) { + repeat = 0; + code_lengths[ symbol++ ] = code_len; + if ( code_len !== 0 ) { + prev_code_len = code_len; + space -= 32768 >> code_len; + } + } else { + var extra_bits = code_len - 14; + var old_repeat; + var repeat_delta; + var new_len = 0; + if ( code_len === kCodeLengthRepeatCode ) { + new_len = prev_code_len; + } + if ( repeat_code_len !== new_len ) { + repeat = 0; + repeat_code_len = new_len; + } + old_repeat = repeat; + if ( repeat > 0 ) { + repeat -= 2; + repeat <<= extra_bits; + } + repeat += br.readBits( extra_bits ) + 3; + repeat_delta = repeat - old_repeat; + if ( symbol + repeat_delta > num_symbols ) { + throw new Error( + '[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols' + ); + } + + for ( var x = 0; x < repeat_delta; x++ ) + code_lengths[ symbol + x ] = + repeat_code_len; + + symbol += repeat_delta; + + if ( repeat_code_len !== 0 ) { + space -= + repeat_delta << + ( 15 - repeat_code_len ); + } + } + } + if ( space !== 0 ) { + throw new Error( + '[ReadHuffmanCodeLengths] space = ' + space + ); + } + + for ( ; symbol < num_symbols; symbol++ ) + code_lengths[ symbol ] = 0; + } + + function ReadHuffmanCode( + alphabet_size, + tables, + table, + br + ) { + var table_size = 0; + var simple_code_or_skip; + var code_lengths = new Uint8Array( alphabet_size ); + + br.readMoreInput(); + + /* simple_code_or_skip is used as follows: + 1 for simple code; + 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ + simple_code_or_skip = br.readBits( 2 ); + if ( simple_code_or_skip === 1 ) { + /* Read symbols, codes & code lengths directly. */ + var i; + var max_bits_counter = alphabet_size - 1; + var max_bits = 0; + var symbols = new Int32Array( 4 ); + var num_symbols = br.readBits( 2 ) + 1; + while ( max_bits_counter ) { + max_bits_counter >>= 1; + ++max_bits; + } + + for ( i = 0; i < num_symbols; ++i ) { + symbols[ i ] = + br.readBits( max_bits ) % alphabet_size; + code_lengths[ symbols[ i ] ] = 2; + } + code_lengths[ symbols[ 0 ] ] = 1; + switch ( num_symbols ) { + case 1: + break; + case 3: + if ( + symbols[ 0 ] === symbols[ 1 ] || + symbols[ 0 ] === symbols[ 2 ] || + symbols[ 1 ] === symbols[ 2 ] + ) { + throw new Error( + '[ReadHuffmanCode] invalid symbols' + ); + } + break; + case 2: + if ( symbols[ 0 ] === symbols[ 1 ] ) { + throw new Error( + '[ReadHuffmanCode] invalid symbols' + ); + } + + code_lengths[ symbols[ 1 ] ] = 1; + break; + case 4: + if ( + symbols[ 0 ] === symbols[ 1 ] || + symbols[ 0 ] === symbols[ 2 ] || + symbols[ 0 ] === symbols[ 3 ] || + symbols[ 1 ] === symbols[ 2 ] || + symbols[ 1 ] === symbols[ 3 ] || + symbols[ 2 ] === symbols[ 3 ] + ) { + throw new Error( + '[ReadHuffmanCode] invalid symbols' + ); + } + + if ( br.readBits( 1 ) ) { + code_lengths[ symbols[ 2 ] ] = 3; + code_lengths[ symbols[ 3 ] ] = 3; + } else { + code_lengths[ symbols[ 0 ] ] = 2; + } + break; + } + } else { + /* Decode Huffman-coded code lengths. */ + var i; + var code_length_code_lengths = new Uint8Array( + CODE_LENGTH_CODES + ); + var space = 32; + var num_codes = 0; + /* Static Huffman code for the code length code lengths */ + var huff = [ + new HuffmanCode( 2, 0 ), + new HuffmanCode( 2, 4 ), + new HuffmanCode( 2, 3 ), + new HuffmanCode( 3, 2 ), + new HuffmanCode( 2, 0 ), + new HuffmanCode( 2, 4 ), + new HuffmanCode( 2, 3 ), + new HuffmanCode( 4, 1 ), + new HuffmanCode( 2, 0 ), + new HuffmanCode( 2, 4 ), + new HuffmanCode( 2, 3 ), + new HuffmanCode( 3, 2 ), + new HuffmanCode( 2, 0 ), + new HuffmanCode( 2, 4 ), + new HuffmanCode( 2, 3 ), + new HuffmanCode( 4, 5 ), + ]; + for ( + i = simple_code_or_skip; + i < CODE_LENGTH_CODES && space > 0; + ++i + ) { + var code_len_idx = kCodeLengthCodeOrder[ i ]; + var p = 0; + var v; + br.fillBitWindow(); + p += ( br.val_ >>> br.bit_pos_ ) & 15; + br.bit_pos_ += huff[ p ].bits; + v = huff[ p ].value; + code_length_code_lengths[ code_len_idx ] = v; + if ( v !== 0 ) { + space -= 32 >> v; + ++num_codes; + } + } + + if ( ! ( num_codes === 1 || space === 0 ) ) + throw new Error( + '[ReadHuffmanCode] invalid num_codes or space' + ); + + ReadHuffmanCodeLengths( + code_length_code_lengths, + alphabet_size, + code_lengths, + br + ); + } + + table_size = BrotliBuildHuffmanTable( + tables, + table, + HUFFMAN_TABLE_BITS, + code_lengths, + alphabet_size + ); + + if ( table_size === 0 ) { + throw new Error( + '[ReadHuffmanCode] BuildHuffmanTable failed: ' + ); + } + + return table_size; + } + + function ReadBlockLength( table, index, br ) { + var code; + var nbits; + code = ReadSymbol( table, index, br ); + nbits = Prefix.kBlockLengthPrefixCode[ code ].nbits; + return ( + Prefix.kBlockLengthPrefixCode[ code ].offset + + br.readBits( nbits ) + ); + } + + function TranslateShortCodes( code, ringbuffer, index ) { + var val; + if ( code < NUM_DISTANCE_SHORT_CODES ) { + index += kDistanceShortCodeIndexOffset[ code ]; + index &= 3; + val = + ringbuffer[ index ] + + kDistanceShortCodeValueOffset[ code ]; + } else { + val = code - NUM_DISTANCE_SHORT_CODES + 1; + } + return val; + } + + function MoveToFront( v, index ) { + var value = v[ index ]; + var i = index; + for ( ; i; --i ) v[ i ] = v[ i - 1 ]; + v[ 0 ] = value; + } + + function InverseMoveToFrontTransform( v, v_len ) { + var mtf = new Uint8Array( 256 ); + var i; + for ( i = 0; i < 256; ++i ) { + mtf[ i ] = i; + } + for ( i = 0; i < v_len; ++i ) { + var index = v[ i ]; + v[ i ] = mtf[ index ]; + if ( index ) MoveToFront( mtf, index ); + } + } + + /* Contains a collection of huffman trees with the same alphabet size. */ + function HuffmanTreeGroup( alphabet_size, num_htrees ) { + this.alphabet_size = alphabet_size; + this.num_htrees = num_htrees; + this.codes = new Array( + num_htrees + + num_htrees * + kMaxHuffmanTableSize[ + ( alphabet_size + 31 ) >>> 5 + ] + ); + this.htrees = new Uint32Array( num_htrees ); + } + + HuffmanTreeGroup.prototype.decode = function ( br ) { + var i; + var table_size; + var next = 0; + for ( i = 0; i < this.num_htrees; ++i ) { + this.htrees[ i ] = next; + table_size = ReadHuffmanCode( + this.alphabet_size, + this.codes, + next, + br + ); + next += table_size; + } + }; + + function DecodeContextMap( context_map_size, br ) { + var out = { num_htrees: null, context_map: null }; + var use_rle_for_zeros; + var max_run_length_prefix = 0; + var table; + var i; + + br.readMoreInput(); + var num_htrees = ( out.num_htrees = + DecodeVarLenUint8( br ) + 1 ); + + var context_map = ( out.context_map = new Uint8Array( + context_map_size + ) ); + if ( num_htrees <= 1 ) { + return out; + } + + use_rle_for_zeros = br.readBits( 1 ); + if ( use_rle_for_zeros ) { + max_run_length_prefix = br.readBits( 4 ) + 1; + } + + table = []; + for ( i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++ ) { + table[ i ] = new HuffmanCode( 0, 0 ); + } + + ReadHuffmanCode( + num_htrees + max_run_length_prefix, + table, + 0, + br + ); + + for ( i = 0; i < context_map_size; ) { + var code; + + br.readMoreInput(); + code = ReadSymbol( table, 0, br ); + if ( code === 0 ) { + context_map[ i ] = 0; + ++i; + } else if ( code <= max_run_length_prefix ) { + var reps = + 1 + ( 1 << code ) + br.readBits( code ); + while ( --reps ) { + if ( i >= context_map_size ) { + throw new Error( + '[DecodeContextMap] i >= context_map_size' + ); + } + context_map[ i ] = 0; + ++i; + } + } else { + context_map[ i ] = code - max_run_length_prefix; + ++i; + } + } + if ( br.readBits( 1 ) ) { + InverseMoveToFrontTransform( + context_map, + context_map_size + ); + } + + return out; + } + + function DecodeBlockType( + max_block_type, + trees, + tree_type, + block_types, + ringbuffers, + indexes, + br + ) { + var ringbuffer = tree_type * 2; + var index = tree_type; + var type_code = ReadSymbol( + trees, + tree_type * HUFFMAN_MAX_TABLE_SIZE, + br + ); + var block_type; + if ( type_code === 0 ) { + block_type = + ringbuffers[ + ringbuffer + ( indexes[ index ] & 1 ) + ]; + } else if ( type_code === 1 ) { + block_type = + ringbuffers[ + ringbuffer + + ( ( indexes[ index ] - 1 ) & 1 ) + ] + 1; + } else { + block_type = type_code - 2; + } + if ( block_type >= max_block_type ) { + block_type -= max_block_type; + } + block_types[ tree_type ] = block_type; + ringbuffers[ ringbuffer + ( indexes[ index ] & 1 ) ] = + block_type; + ++indexes[ index ]; + } + + function CopyUncompressedBlockToOutput( + output, + len, + pos, + ringbuffer, + ringbuffer_mask, + br + ) { + var rb_size = ringbuffer_mask + 1; + var rb_pos = pos & ringbuffer_mask; + var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; + var nbytes; + + /* For short lengths copy byte-by-byte */ + if ( + len < 8 || + br.bit_pos_ + ( len << 3 ) < br.bit_end_pos_ + ) { + while ( len-- > 0 ) { + br.readMoreInput(); + ringbuffer[ rb_pos++ ] = br.readBits( 8 ); + if ( rb_pos === rb_size ) { + output.write( ringbuffer, rb_size ); + rb_pos = 0; + } + } + return; + } + + if ( br.bit_end_pos_ < 32 ) { + throw new Error( + '[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32' + ); + } + + /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */ + while ( br.bit_pos_ < 32 ) { + ringbuffer[ rb_pos ] = br.val_ >>> br.bit_pos_; + br.bit_pos_ += 8; + ++rb_pos; + --len; + } + + /* Copy remaining bytes from br.buf_ to ringbuffer. */ + nbytes = ( br.bit_end_pos_ - br.bit_pos_ ) >> 3; + if ( br_pos + nbytes > BrotliBitReader.IBUF_MASK ) { + var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; + for ( var x = 0; x < tail; x++ ) + ringbuffer[ rb_pos + x ] = + br.buf_[ br_pos + x ]; + + nbytes -= tail; + rb_pos += tail; + len -= tail; + br_pos = 0; + } + + for ( var x = 0; x < nbytes; x++ ) + ringbuffer[ rb_pos + x ] = br.buf_[ br_pos + x ]; + + rb_pos += nbytes; + len -= nbytes; + + /* If we wrote past the logical end of the ringbuffer, copy the tail of the + ringbuffer to its beginning and flush the ringbuffer to the output. */ + if ( rb_pos >= rb_size ) { + output.write( ringbuffer, rb_size ); + rb_pos -= rb_size; + for ( var x = 0; x < rb_pos; x++ ) + ringbuffer[ x ] = ringbuffer[ rb_size + x ]; + } + + /* If we have more to copy than the remaining size of the ringbuffer, then we + first fill the ringbuffer from the input and then flush the ringbuffer to + the output */ + while ( rb_pos + len >= rb_size ) { + nbytes = rb_size - rb_pos; + if ( + br.input_.read( ringbuffer, rb_pos, nbytes ) < + nbytes + ) { + throw new Error( + '[CopyUncompressedBlockToOutput] not enough bytes' + ); + } + output.write( ringbuffer, rb_size ); + len -= nbytes; + rb_pos = 0; + } + + /* Copy straight from the input onto the ringbuffer. The ringbuffer will be + flushed to the output at a later time. */ + if ( br.input_.read( ringbuffer, rb_pos, len ) < len ) { + throw new Error( + '[CopyUncompressedBlockToOutput] not enough bytes' + ); + } + + /* Restore the state of the bit reader. */ + br.reset(); + } + + /* Advances the bit reader position to the next byte boundary and verifies + that any skipped bits are set to zero. */ + function JumpToByteBoundary( br ) { + var new_bit_pos = ( br.bit_pos_ + 7 ) & ~7; + var pad_bits = br.readBits( new_bit_pos - br.bit_pos_ ); + return pad_bits == 0; + } + + function BrotliDecompressedSize( buffer ) { + var input = new BrotliInput( buffer ); + var br = new BrotliBitReader( input ); + DecodeWindowBits( br ); + var out = DecodeMetaBlockLength( br ); + return out.meta_block_length; + } + + exports.BrotliDecompressedSize = BrotliDecompressedSize; + + function BrotliDecompressBuffer( buffer, output_size ) { + var input = new BrotliInput( buffer ); + + if ( output_size == null ) { + output_size = BrotliDecompressedSize( buffer ); + } + + var output_buffer = new Uint8Array( output_size ); + var output = new BrotliOutput( output_buffer ); + + BrotliDecompress( input, output ); + + if ( output.pos < output.buffer.length ) { + output.buffer = output.buffer.subarray( + 0, + output.pos + ); + } + + return output.buffer; + } + + exports.BrotliDecompressBuffer = BrotliDecompressBuffer; + + function BrotliDecompress( input, output ) { + var i; + var pos = 0; + var input_end = 0; + var window_bits = 0; + var max_backward_distance; + var max_distance = 0; + var ringbuffer_size; + var ringbuffer_mask; + var ringbuffer; + var ringbuffer_end; + /* This ring buffer holds a few past copy distances that will be used by */ + /* some special distance codes. */ + var dist_rb = [ 16, 15, 11, 4 ]; + var dist_rb_idx = 0; + /* The previous 2 bytes used for context. */ + var prev_byte1 = 0; + var prev_byte2 = 0; + var hgroup = [ + new HuffmanTreeGroup( 0, 0 ), + new HuffmanTreeGroup( 0, 0 ), + new HuffmanTreeGroup( 0, 0 ), + ]; + var block_type_trees; + var block_len_trees; + var br; + + /* We need the slack region for the following reasons: + - always doing two 8-byte copies for fast backward copying + - transforms + - flushing the input ringbuffer when decoding uncompressed blocks */ + var kRingBufferWriteAheadSlack = + 128 + BrotliBitReader.READ_SIZE; + + br = new BrotliBitReader( input ); + + /* Decode window size. */ + window_bits = DecodeWindowBits( br ); + max_backward_distance = ( 1 << window_bits ) - 16; + + ringbuffer_size = 1 << window_bits; + ringbuffer_mask = ringbuffer_size - 1; + ringbuffer = new Uint8Array( + ringbuffer_size + + kRingBufferWriteAheadSlack + + BrotliDictionary.maxDictionaryWordLength + ); + ringbuffer_end = ringbuffer_size; + + block_type_trees = []; + block_len_trees = []; + for ( var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++ ) { + block_type_trees[ x ] = new HuffmanCode( 0, 0 ); + block_len_trees[ x ] = new HuffmanCode( 0, 0 ); + } + + while ( ! input_end ) { + var meta_block_remaining_len = 0; + var is_uncompressed; + var block_length = [ 1 << 28, 1 << 28, 1 << 28 ]; + var block_type = [ 0 ]; + var num_block_types = [ 1, 1, 1 ]; + var block_type_rb = [ 0, 1, 0, 1, 0, 1 ]; + var block_type_rb_index = [ 0 ]; + var distance_postfix_bits; + var num_direct_distance_codes; + var distance_postfix_mask; + var num_distance_codes; + var context_map = null; + var context_modes = null; + var num_literal_htrees; + var dist_context_map = null; + var num_dist_htrees; + var context_offset = 0; + var context_map_slice = null; + var literal_htree_index = 0; + var dist_context_offset = 0; + var dist_context_map_slice = null; + var dist_htree_index = 0; + var context_lookup_offset1 = 0; + var context_lookup_offset2 = 0; + var context_mode; + var htree_command; + + for ( i = 0; i < 3; ++i ) { + hgroup[ i ].codes = null; + hgroup[ i ].htrees = null; + } + + br.readMoreInput(); + + var _out = DecodeMetaBlockLength( br ); + meta_block_remaining_len = _out.meta_block_length; + if ( + pos + meta_block_remaining_len > + output.buffer.length + ) { + /* We need to grow the output buffer to fit the additional data. */ + var tmp = new Uint8Array( + pos + meta_block_remaining_len + ); + tmp.set( output.buffer ); + output.buffer = tmp; + } + input_end = _out.input_end; + is_uncompressed = _out.is_uncompressed; + + if ( _out.is_metadata ) { + JumpToByteBoundary( br ); + + for ( + ; + meta_block_remaining_len > 0; + --meta_block_remaining_len + ) { + br.readMoreInput(); + /* Read one byte and ignore it. */ + br.readBits( 8 ); + } + + continue; + } + + if ( meta_block_remaining_len === 0 ) { + continue; + } + + if ( is_uncompressed ) { + br.bit_pos_ = ( br.bit_pos_ + 7 ) & ~7; + CopyUncompressedBlockToOutput( + output, + meta_block_remaining_len, + pos, + ringbuffer, + ringbuffer_mask, + br + ); + pos += meta_block_remaining_len; + continue; + } + + for ( i = 0; i < 3; ++i ) { + num_block_types[ i ] = + DecodeVarLenUint8( br ) + 1; + if ( num_block_types[ i ] >= 2 ) { + ReadHuffmanCode( + num_block_types[ i ] + 2, + block_type_trees, + i * HUFFMAN_MAX_TABLE_SIZE, + br + ); + ReadHuffmanCode( + kNumBlockLengthCodes, + block_len_trees, + i * HUFFMAN_MAX_TABLE_SIZE, + br + ); + block_length[ i ] = ReadBlockLength( + block_len_trees, + i * HUFFMAN_MAX_TABLE_SIZE, + br + ); + block_type_rb_index[ i ] = 1; + } + } + + br.readMoreInput(); + + distance_postfix_bits = br.readBits( 2 ); + num_direct_distance_codes = + NUM_DISTANCE_SHORT_CODES + + ( br.readBits( 4 ) << distance_postfix_bits ); + distance_postfix_mask = + ( 1 << distance_postfix_bits ) - 1; + num_distance_codes = + num_direct_distance_codes + + ( 48 << distance_postfix_bits ); + context_modes = new Uint8Array( + num_block_types[ 0 ] + ); + + for ( i = 0; i < num_block_types[ 0 ]; ++i ) { + br.readMoreInput(); + context_modes[ i ] = br.readBits( 2 ) << 1; + } + + var _o1 = DecodeContextMap( + num_block_types[ 0 ] << kLiteralContextBits, + br + ); + num_literal_htrees = _o1.num_htrees; + context_map = _o1.context_map; + + var _o2 = DecodeContextMap( + num_block_types[ 2 ] << kDistanceContextBits, + br + ); + num_dist_htrees = _o2.num_htrees; + dist_context_map = _o2.context_map; + + hgroup[ 0 ] = new HuffmanTreeGroup( + kNumLiteralCodes, + num_literal_htrees + ); + hgroup[ 1 ] = new HuffmanTreeGroup( + kNumInsertAndCopyCodes, + num_block_types[ 1 ] + ); + hgroup[ 2 ] = new HuffmanTreeGroup( + num_distance_codes, + num_dist_htrees + ); + + for ( i = 0; i < 3; ++i ) { + hgroup[ i ].decode( br ); + } + + context_map_slice = 0; + dist_context_map_slice = 0; + context_mode = context_modes[ block_type[ 0 ] ]; + context_lookup_offset1 = + Context.lookupOffsets[ context_mode ]; + context_lookup_offset2 = + Context.lookupOffsets[ context_mode + 1 ]; + htree_command = hgroup[ 1 ].htrees[ 0 ]; + + while ( meta_block_remaining_len > 0 ) { + var cmd_code; + var range_idx; + var insert_code; + var copy_code; + var insert_length; + var copy_length; + var distance_code; + var distance; + var context; + var j; + var copy_dst; + + br.readMoreInput(); + + if ( block_length[ 1 ] === 0 ) { + DecodeBlockType( + num_block_types[ 1 ], + block_type_trees, + 1, + block_type, + block_type_rb, + block_type_rb_index, + br + ); + block_length[ 1 ] = ReadBlockLength( + block_len_trees, + HUFFMAN_MAX_TABLE_SIZE, + br + ); + htree_command = + hgroup[ 1 ].htrees[ block_type[ 1 ] ]; + } + --block_length[ 1 ]; + cmd_code = ReadSymbol( + hgroup[ 1 ].codes, + htree_command, + br + ); + range_idx = cmd_code >> 6; + if ( range_idx >= 2 ) { + range_idx -= 2; + distance_code = -1; + } else { + distance_code = 0; + } + insert_code = + Prefix.kInsertRangeLut[ range_idx ] + + ( ( cmd_code >> 3 ) & 7 ); + copy_code = + Prefix.kCopyRangeLut[ range_idx ] + + ( cmd_code & 7 ); + insert_length = + Prefix.kInsertLengthPrefixCode[ + insert_code + ].offset + + br.readBits( + Prefix.kInsertLengthPrefixCode[ + insert_code + ].nbits + ); + copy_length = + Prefix.kCopyLengthPrefixCode[ copy_code ] + .offset + + br.readBits( + Prefix.kCopyLengthPrefixCode[ + copy_code + ].nbits + ); + prev_byte1 = + ringbuffer[ ( pos - 1 ) & ringbuffer_mask ]; + prev_byte2 = + ringbuffer[ ( pos - 2 ) & ringbuffer_mask ]; + for ( j = 0; j < insert_length; ++j ) { + br.readMoreInput(); + + if ( block_length[ 0 ] === 0 ) { + DecodeBlockType( + num_block_types[ 0 ], + block_type_trees, + 0, + block_type, + block_type_rb, + block_type_rb_index, + br + ); + block_length[ 0 ] = ReadBlockLength( + block_len_trees, + 0, + br + ); + context_offset = + block_type[ 0 ] << + kLiteralContextBits; + context_map_slice = context_offset; + context_mode = + context_modes[ block_type[ 0 ] ]; + context_lookup_offset1 = + Context.lookupOffsets[ + context_mode + ]; + context_lookup_offset2 = + Context.lookupOffsets[ + context_mode + 1 + ]; + } + context = + Context.lookup[ + context_lookup_offset1 + prev_byte1 + ] | + Context.lookup[ + context_lookup_offset2 + prev_byte2 + ]; + literal_htree_index = + context_map[ + context_map_slice + context + ]; + --block_length[ 0 ]; + prev_byte2 = prev_byte1; + prev_byte1 = ReadSymbol( + hgroup[ 0 ].codes, + hgroup[ 0 ].htrees[ + literal_htree_index + ], + br + ); + ringbuffer[ pos & ringbuffer_mask ] = + prev_byte1; + if ( + ( pos & ringbuffer_mask ) === + ringbuffer_mask + ) { + output.write( + ringbuffer, + ringbuffer_size + ); + } + ++pos; + } + meta_block_remaining_len -= insert_length; + if ( meta_block_remaining_len <= 0 ) break; + + if ( distance_code < 0 ) { + var context; + + br.readMoreInput(); + if ( block_length[ 2 ] === 0 ) { + DecodeBlockType( + num_block_types[ 2 ], + block_type_trees, + 2, + block_type, + block_type_rb, + block_type_rb_index, + br + ); + block_length[ 2 ] = ReadBlockLength( + block_len_trees, + 2 * HUFFMAN_MAX_TABLE_SIZE, + br + ); + dist_context_offset = + block_type[ 2 ] << + kDistanceContextBits; + dist_context_map_slice = + dist_context_offset; + } + --block_length[ 2 ]; + context = + ( copy_length > 4 + ? 3 + : copy_length - 2 ) & 0xff; + dist_htree_index = + dist_context_map[ + dist_context_map_slice + context + ]; + distance_code = ReadSymbol( + hgroup[ 2 ].codes, + hgroup[ 2 ].htrees[ dist_htree_index ], + br + ); + if ( + distance_code >= + num_direct_distance_codes + ) { + var nbits; + var postfix; + var offset; + distance_code -= + num_direct_distance_codes; + postfix = + distance_code & + distance_postfix_mask; + distance_code >>= distance_postfix_bits; + nbits = ( distance_code >> 1 ) + 1; + offset = + ( ( 2 + ( distance_code & 1 ) ) << + nbits ) - + 4; + distance_code = + num_direct_distance_codes + + ( ( offset + + br.readBits( nbits ) ) << + distance_postfix_bits ) + + postfix; + } + } + + /* Convert the distance code to the actual distance by possibly looking */ + /* up past distnaces from the ringbuffer. */ + distance = TranslateShortCodes( + distance_code, + dist_rb, + dist_rb_idx + ); + if ( distance < 0 ) { + throw new Error( + '[BrotliDecompress] invalid distance' + ); + } + + if ( + pos < max_backward_distance && + max_distance !== max_backward_distance + ) { + max_distance = pos; + } else { + max_distance = max_backward_distance; + } + + copy_dst = pos & ringbuffer_mask; + + if ( distance > max_distance ) { + if ( + copy_length >= + BrotliDictionary.minDictionaryWordLength && + copy_length <= + BrotliDictionary.maxDictionaryWordLength + ) { + var offset = + BrotliDictionary.offsetsByLength[ + copy_length + ]; + var word_id = + distance - max_distance - 1; + var shift = + BrotliDictionary.sizeBitsByLength[ + copy_length + ]; + var mask = ( 1 << shift ) - 1; + var word_idx = word_id & mask; + var transform_idx = word_id >> shift; + offset += word_idx * copy_length; + if ( + transform_idx < + Transform.kNumTransforms + ) { + var len = + Transform.transformDictionaryWord( + ringbuffer, + copy_dst, + offset, + copy_length, + transform_idx + ); + copy_dst += len; + pos += len; + meta_block_remaining_len -= len; + if ( copy_dst >= ringbuffer_end ) { + output.write( + ringbuffer, + ringbuffer_size + ); + + for ( + var _x = 0; + _x < + copy_dst - ringbuffer_end; + _x++ + ) + ringbuffer[ _x ] = + ringbuffer[ + ringbuffer_end + _x + ]; + } + } else { + throw new Error( + 'Invalid backward reference. pos: ' + + pos + + ' distance: ' + + distance + + ' len: ' + + copy_length + + ' bytes left: ' + + meta_block_remaining_len + ); + } + } else { + throw new Error( + 'Invalid backward reference. pos: ' + + pos + + ' distance: ' + + distance + + ' len: ' + + copy_length + + ' bytes left: ' + + meta_block_remaining_len + ); + } + } else { + if ( distance_code > 0 ) { + dist_rb[ dist_rb_idx & 3 ] = distance; + ++dist_rb_idx; + } + + if ( + copy_length > meta_block_remaining_len + ) { + throw new Error( + 'Invalid backward reference. pos: ' + + pos + + ' distance: ' + + distance + + ' len: ' + + copy_length + + ' bytes left: ' + + meta_block_remaining_len + ); + } + + for ( j = 0; j < copy_length; ++j ) { + ringbuffer[ pos & ringbuffer_mask ] = + ringbuffer[ + ( pos - distance ) & + ringbuffer_mask + ]; + if ( + ( pos & ringbuffer_mask ) === + ringbuffer_mask + ) { + output.write( + ringbuffer, + ringbuffer_size + ); + } + ++pos; + --meta_block_remaining_len; + } + } + + /* When we get here, we must have inserted at least one literal and */ + /* made a copy of at least length two, therefore accessing the last 2 */ + /* bytes is valid. */ + prev_byte1 = + ringbuffer[ ( pos - 1 ) & ringbuffer_mask ]; + prev_byte2 = + ringbuffer[ ( pos - 2 ) & ringbuffer_mask ]; + } + + /* Protect pos from overflow, wrap it around at every GB of input data */ + pos &= 0x3fffffff; + } + + output.write( ringbuffer, pos & ringbuffer_mask ); + } + + exports.BrotliDecompress = BrotliDecompress; + + BrotliDictionary.init(); + }, + { + './bit_reader': 1, + './context': 2, + './dictionary': 6, + './huffman': 7, + './prefix': 9, + './streams': 10, + './transform': 11, + }, + ], + 4: [ + function ( require, module, exports ) { + var base64 = require( 'base64-js' ); + //var fs = require('fs'); + + /** + * The normal dictionary-data.js is quite large, which makes it + * unsuitable for browser usage. In order to make it smaller, + * we read dictionary.bin, which is a compressed version of + * the dictionary, and on initial load, Brotli decompresses + * it's own dictionary. 😜 + */ + exports.init = function () { + var BrotliDecompressBuffer = + require( './decode' ).BrotliDecompressBuffer; + var compressed = base64.toByteArray( + require( './dictionary.bin.js' ) + ); + return BrotliDecompressBuffer( compressed ); + }; + }, + { './decode': 3, './dictionary.bin.js': 5, 'base64-js': 8 }, + ], + 5: [ + function ( require, module, exports ) { + module.exports = + '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'; + }, + {}, + ], + 6: [ + function ( require, module, exports ) { + /* Copyright 2013 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Collection of static dictionary words. +*/ + + var data = require( './dictionary-browser' ); + exports.init = function () { + exports.dictionary = data.init(); + }; + + exports.offsetsByLength = new Uint32Array( [ + 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, + 63488, 74752, 87040, 93696, 100864, 104704, 106752, + 108928, 113536, 115968, 118528, 119872, 121280, 122016, + ] ); + + exports.sizeBitsByLength = new Uint8Array( [ + 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, + 7, 7, 8, 7, 7, 6, 6, 5, 5, + ] ); + + exports.minDictionaryWordLength = 4; + exports.maxDictionaryWordLength = 24; + }, + { './dictionary-browser': 4 }, + ], + 7: [ + function ( require, module, exports ) { + function HuffmanCode( bits, value ) { + this.bits = + bits; /* number of bits used for this symbol */ + this.value = value; /* symbol value or table offset */ + } + + exports.HuffmanCode = HuffmanCode; + + var MAX_LENGTH = 15; + + /* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the + bit-wise reversal of the len least significant bits of key. */ + function GetNextKey( key, len ) { + var step = 1 << ( len - 1 ); + while ( key & step ) { + step >>= 1; + } + return ( key & ( step - 1 ) ) + step; + } + + /* Stores code in table[0], table[step], table[2*step], ..., table[end] */ + /* Assumes that end is an integer multiple of step */ + function ReplicateValue( table, i, step, end, code ) { + do { + end -= step; + table[ i + end ] = new HuffmanCode( + code.bits, + code.value + ); + } while ( end > 0 ); + } + + /* Returns the table width of the next 2nd level table. count is the histogram + of bit lengths for the remaining symbols, len is the code length of the next + processed symbol */ + function NextTableBitSize( count, len, root_bits ) { + var left = 1 << ( len - root_bits ); + while ( len < MAX_LENGTH ) { + left -= count[ len ]; + if ( left <= 0 ) break; + ++len; + left <<= 1; + } + return len - root_bits; + } + + exports.BrotliBuildHuffmanTable = function ( + root_table, + table, + root_bits, + code_lengths, + code_lengths_size + ) { + var start_table = table; + var code; /* current table entry */ + var len; /* current code length */ + var symbol; /* symbol index in original or sorted table */ + var key; /* reversed prefix code */ + var step; /* step size to replicate values in current table */ + var low; /* low bits for current root entry */ + var mask; /* mask for low bits */ + var table_bits; /* key length of current table */ + var table_size; /* size of current table */ + var total_size; /* sum of root table size and 2nd level table sizes */ + var sorted; /* symbols sorted by code length */ + var count = new Int32Array( + MAX_LENGTH + 1 + ); /* number of codes of each length */ + var offset = new Int32Array( + MAX_LENGTH + 1 + ); /* offsets in sorted table for each length */ + + sorted = new Int32Array( code_lengths_size ); + + /* build histogram of code lengths */ + for ( + symbol = 0; + symbol < code_lengths_size; + symbol++ + ) { + count[ code_lengths[ symbol ] ]++; + } + + /* generate offsets into sorted symbol table by code length */ + offset[ 1 ] = 0; + for ( len = 1; len < MAX_LENGTH; len++ ) { + offset[ len + 1 ] = offset[ len ] + count[ len ]; + } + + /* sort symbols by length, by symbol order within each length */ + for ( + symbol = 0; + symbol < code_lengths_size; + symbol++ + ) { + if ( code_lengths[ symbol ] !== 0 ) { + sorted[ offset[ code_lengths[ symbol ] ]++ ] = + symbol; + } + } + + table_bits = root_bits; + table_size = 1 << table_bits; + total_size = table_size; + + /* special case code with only one value */ + if ( offset[ MAX_LENGTH ] === 1 ) { + for ( key = 0; key < total_size; ++key ) { + root_table[ table + key ] = new HuffmanCode( + 0, + sorted[ 0 ] & 0xffff + ); + } + + return total_size; + } + + /* fill in root table */ + key = 0; + symbol = 0; + for ( + len = 1, step = 2; + len <= root_bits; + ++len, step <<= 1 + ) { + for ( ; count[ len ] > 0; --count[ len ] ) { + code = new HuffmanCode( + len & 0xff, + sorted[ symbol++ ] & 0xffff + ); + ReplicateValue( + root_table, + table + key, + step, + table_size, + code + ); + key = GetNextKey( key, len ); + } + } + + /* fill in 2nd level tables and add pointers to root table */ + mask = total_size - 1; + low = -1; + for ( + len = root_bits + 1, step = 2; + len <= MAX_LENGTH; + ++len, step <<= 1 + ) { + for ( ; count[ len ] > 0; --count[ len ] ) { + if ( ( key & mask ) !== low ) { + table += table_size; + table_bits = NextTableBitSize( + count, + len, + root_bits + ); + table_size = 1 << table_bits; + total_size += table_size; + low = key & mask; + root_table[ start_table + low ] = + new HuffmanCode( + ( table_bits + root_bits ) & 0xff, + ( table - start_table - low ) & + 0xffff + ); + } + code = new HuffmanCode( + ( len - root_bits ) & 0xff, + sorted[ symbol++ ] & 0xffff + ); + ReplicateValue( + root_table, + table + ( key >> root_bits ), + step, + table_size, + code + ); + key = GetNextKey( key, len ); + } + } + + return total_size; + }; + }, + {}, + ], + 8: [ + function ( require, module, exports ) { + 'use strict'; + + exports.byteLength = byteLength; + exports.toByteArray = toByteArray; + exports.fromByteArray = fromByteArray; + + var lookup = []; + var revLookup = []; + var Arr = + typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + + var code = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for ( var i = 0, len = code.length; i < len; ++i ) { + lookup[ i ] = code[ i ]; + revLookup[ code.charCodeAt( i ) ] = i; + } + + // Support decoding URL-safe base64 strings, as Node.js does. + // See: https://en.wikipedia.org/wiki/Base64#URL_applications + revLookup[ '-'.charCodeAt( 0 ) ] = 62; + revLookup[ '_'.charCodeAt( 0 ) ] = 63; + + function getLens( b64 ) { + var len = b64.length; + + if ( len % 4 > 0 ) { + throw new Error( + 'Invalid string. Length must be a multiple of 4' + ); + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf( '=' ); + if ( validLen === -1 ) validLen = len; + + var placeHoldersLen = + validLen === len ? 0 : 4 - ( validLen % 4 ); + + return [ validLen, placeHoldersLen ]; + } + + // base64 is 4/3 + up to two characters of the original data + function byteLength( b64 ) { + var lens = getLens( b64 ); + var validLen = lens[ 0 ]; + var placeHoldersLen = lens[ 1 ]; + return ( + ( ( validLen + placeHoldersLen ) * 3 ) / 4 - + placeHoldersLen + ); + } + + function _byteLength( b64, validLen, placeHoldersLen ) { + return ( + ( ( validLen + placeHoldersLen ) * 3 ) / 4 - + placeHoldersLen + ); + } + + function toByteArray( b64 ) { + var tmp; + var lens = getLens( b64 ); + var validLen = lens[ 0 ]; + var placeHoldersLen = lens[ 1 ]; + + var arr = new Arr( + _byteLength( b64, validLen, placeHoldersLen ) + ); + + var curByte = 0; + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 ? validLen - 4 : validLen; + + for ( var i = 0; i < len; i += 4 ) { + tmp = + ( revLookup[ b64.charCodeAt( i ) ] << 18 ) | + ( revLookup[ b64.charCodeAt( i + 1 ) ] << 12 ) | + ( revLookup[ b64.charCodeAt( i + 2 ) ] << 6 ) | + revLookup[ b64.charCodeAt( i + 3 ) ]; + arr[ curByte++ ] = ( tmp >> 16 ) & 0xff; + arr[ curByte++ ] = ( tmp >> 8 ) & 0xff; + arr[ curByte++ ] = tmp & 0xff; + } + + if ( placeHoldersLen === 2 ) { + tmp = + ( revLookup[ b64.charCodeAt( i ) ] << 2 ) | + ( revLookup[ b64.charCodeAt( i + 1 ) ] >> 4 ); + arr[ curByte++ ] = tmp & 0xff; + } + + if ( placeHoldersLen === 1 ) { + tmp = + ( revLookup[ b64.charCodeAt( i ) ] << 10 ) | + ( revLookup[ b64.charCodeAt( i + 1 ) ] << 4 ) | + ( revLookup[ b64.charCodeAt( i + 2 ) ] >> 2 ); + arr[ curByte++ ] = ( tmp >> 8 ) & 0xff; + arr[ curByte++ ] = tmp & 0xff; + } + + return arr; + } + + function tripletToBase64( num ) { + return ( + lookup[ ( num >> 18 ) & 0x3f ] + + lookup[ ( num >> 12 ) & 0x3f ] + + lookup[ ( num >> 6 ) & 0x3f ] + + lookup[ num & 0x3f ] + ); + } + + function encodeChunk( uint8, start, end ) { + var tmp; + var output = []; + for ( var i = start; i < end; i += 3 ) { + tmp = + ( ( uint8[ i ] << 16 ) & 0xff0000 ) + + ( ( uint8[ i + 1 ] << 8 ) & 0xff00 ) + + ( uint8[ i + 2 ] & 0xff ); + output.push( tripletToBase64( tmp ) ); + } + return output.join( '' ); + } + + function fromByteArray( uint8 ) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for ( + var i = 0, len2 = len - extraBytes; + i < len2; + i += maxChunkLength + ) { + parts.push( + encodeChunk( + uint8, + i, + i + maxChunkLength > len2 + ? len2 + : i + maxChunkLength + ) + ); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if ( extraBytes === 1 ) { + tmp = uint8[ len - 1 ]; + parts.push( + lookup[ tmp >> 2 ] + + lookup[ ( tmp << 4 ) & 0x3f ] + + '==' + ); + } else if ( extraBytes === 2 ) { + tmp = ( uint8[ len - 2 ] << 8 ) + uint8[ len - 1 ]; + parts.push( + lookup[ tmp >> 10 ] + + lookup[ ( tmp >> 4 ) & 0x3f ] + + lookup[ ( tmp << 2 ) & 0x3f ] + + '=' + ); + } + + return parts.join( '' ); + } + }, + {}, + ], + 9: [ + function ( require, module, exports ) { + /* Copyright 2013 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Lookup tables to map prefix codes to value ranges. This is used during + decoding of the block lengths, literal insertion lengths and copy lengths. +*/ + + /* Represents the range of values belonging to a prefix code: */ + /* [offset, offset + 2^nbits) */ + function PrefixCodeRange( offset, nbits ) { + this.offset = offset; + this.nbits = nbits; + } + + exports.kBlockLengthPrefixCode = [ + new PrefixCodeRange( 1, 2 ), + new PrefixCodeRange( 5, 2 ), + new PrefixCodeRange( 9, 2 ), + new PrefixCodeRange( 13, 2 ), + new PrefixCodeRange( 17, 3 ), + new PrefixCodeRange( 25, 3 ), + new PrefixCodeRange( 33, 3 ), + new PrefixCodeRange( 41, 3 ), + new PrefixCodeRange( 49, 4 ), + new PrefixCodeRange( 65, 4 ), + new PrefixCodeRange( 81, 4 ), + new PrefixCodeRange( 97, 4 ), + new PrefixCodeRange( 113, 5 ), + new PrefixCodeRange( 145, 5 ), + new PrefixCodeRange( 177, 5 ), + new PrefixCodeRange( 209, 5 ), + new PrefixCodeRange( 241, 6 ), + new PrefixCodeRange( 305, 6 ), + new PrefixCodeRange( 369, 7 ), + new PrefixCodeRange( 497, 8 ), + new PrefixCodeRange( 753, 9 ), + new PrefixCodeRange( 1265, 10 ), + new PrefixCodeRange( 2289, 11 ), + new PrefixCodeRange( 4337, 12 ), + new PrefixCodeRange( 8433, 13 ), + new PrefixCodeRange( 16625, 24 ), + ]; + + exports.kInsertLengthPrefixCode = [ + new PrefixCodeRange( 0, 0 ), + new PrefixCodeRange( 1, 0 ), + new PrefixCodeRange( 2, 0 ), + new PrefixCodeRange( 3, 0 ), + new PrefixCodeRange( 4, 0 ), + new PrefixCodeRange( 5, 0 ), + new PrefixCodeRange( 6, 1 ), + new PrefixCodeRange( 8, 1 ), + new PrefixCodeRange( 10, 2 ), + new PrefixCodeRange( 14, 2 ), + new PrefixCodeRange( 18, 3 ), + new PrefixCodeRange( 26, 3 ), + new PrefixCodeRange( 34, 4 ), + new PrefixCodeRange( 50, 4 ), + new PrefixCodeRange( 66, 5 ), + new PrefixCodeRange( 98, 5 ), + new PrefixCodeRange( 130, 6 ), + new PrefixCodeRange( 194, 7 ), + new PrefixCodeRange( 322, 8 ), + new PrefixCodeRange( 578, 9 ), + new PrefixCodeRange( 1090, 10 ), + new PrefixCodeRange( 2114, 12 ), + new PrefixCodeRange( 6210, 14 ), + new PrefixCodeRange( 22594, 24 ), + ]; + + exports.kCopyLengthPrefixCode = [ + new PrefixCodeRange( 2, 0 ), + new PrefixCodeRange( 3, 0 ), + new PrefixCodeRange( 4, 0 ), + new PrefixCodeRange( 5, 0 ), + new PrefixCodeRange( 6, 0 ), + new PrefixCodeRange( 7, 0 ), + new PrefixCodeRange( 8, 0 ), + new PrefixCodeRange( 9, 0 ), + new PrefixCodeRange( 10, 1 ), + new PrefixCodeRange( 12, 1 ), + new PrefixCodeRange( 14, 2 ), + new PrefixCodeRange( 18, 2 ), + new PrefixCodeRange( 22, 3 ), + new PrefixCodeRange( 30, 3 ), + new PrefixCodeRange( 38, 4 ), + new PrefixCodeRange( 54, 4 ), + new PrefixCodeRange( 70, 5 ), + new PrefixCodeRange( 102, 5 ), + new PrefixCodeRange( 134, 6 ), + new PrefixCodeRange( 198, 7 ), + new PrefixCodeRange( 326, 8 ), + new PrefixCodeRange( 582, 9 ), + new PrefixCodeRange( 1094, 10 ), + new PrefixCodeRange( 2118, 24 ), + ]; + + exports.kInsertRangeLut = [ 0, 0, 8, 8, 0, 16, 8, 16, 16 ]; + + exports.kCopyRangeLut = [ 0, 8, 0, 8, 16, 0, 16, 8, 16 ]; + }, + {}, + ], + 10: [ + function ( require, module, exports ) { + function BrotliInput( buffer ) { + this.buffer = buffer; + this.pos = 0; + } + + BrotliInput.prototype.read = function ( buf, i, count ) { + if ( this.pos + count > this.buffer.length ) { + count = this.buffer.length - this.pos; + } + + for ( var p = 0; p < count; p++ ) + buf[ i + p ] = this.buffer[ this.pos + p ]; + + this.pos += count; + return count; + }; + + exports.BrotliInput = BrotliInput; + + function BrotliOutput( buf ) { + this.buffer = buf; + this.pos = 0; + } + + BrotliOutput.prototype.write = function ( buf, count ) { + if ( this.pos + count > this.buffer.length ) + throw new Error( + 'Output buffer is not large enough' + ); + + this.buffer.set( buf.subarray( 0, count ), this.pos ); + this.pos += count; + return count; + }; + + exports.BrotliOutput = BrotliOutput; + }, + {}, + ], + 11: [ + function ( require, module, exports ) { + /* Copyright 2013 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Transformations on dictionary words. +*/ + + var BrotliDictionary = require( './dictionary' ); + + var kIdentity = 0; + var kOmitLast1 = 1; + var kOmitLast2 = 2; + var kOmitLast3 = 3; + var kOmitLast4 = 4; + var kOmitLast5 = 5; + var kOmitLast6 = 6; + var kOmitLast7 = 7; + var kOmitLast8 = 8; + var kOmitLast9 = 9; + var kUppercaseFirst = 10; + var kUppercaseAll = 11; + var kOmitFirst1 = 12; + var kOmitFirst2 = 13; + var kOmitFirst3 = 14; + var kOmitFirst4 = 15; + var kOmitFirst5 = 16; + var kOmitFirst6 = 17; + var kOmitFirst7 = 18; + var kOmitFirst8 = 19; + var kOmitFirst9 = 20; + + function Transform( prefix, transform, suffix ) { + this.prefix = new Uint8Array( prefix.length ); + this.transform = transform; + this.suffix = new Uint8Array( suffix.length ); + + for ( var i = 0; i < prefix.length; i++ ) + this.prefix[ i ] = prefix.charCodeAt( i ); + + for ( var i = 0; i < suffix.length; i++ ) + this.suffix[ i ] = suffix.charCodeAt( i ); + } + + var kTransforms = [ + new Transform( '', kIdentity, '' ), + new Transform( '', kIdentity, ' ' ), + new Transform( ' ', kIdentity, ' ' ), + new Transform( '', kOmitFirst1, '' ), + new Transform( '', kUppercaseFirst, ' ' ), + new Transform( '', kIdentity, ' the ' ), + new Transform( ' ', kIdentity, '' ), + new Transform( 's ', kIdentity, ' ' ), + new Transform( '', kIdentity, ' of ' ), + new Transform( '', kUppercaseFirst, '' ), + new Transform( '', kIdentity, ' and ' ), + new Transform( '', kOmitFirst2, '' ), + new Transform( '', kOmitLast1, '' ), + new Transform( ', ', kIdentity, ' ' ), + new Transform( '', kIdentity, ', ' ), + new Transform( ' ', kUppercaseFirst, ' ' ), + new Transform( '', kIdentity, ' in ' ), + new Transform( '', kIdentity, ' to ' ), + new Transform( 'e ', kIdentity, ' ' ), + new Transform( '', kIdentity, '"' ), + new Transform( '', kIdentity, '.' ), + new Transform( '', kIdentity, '">' ), + new Transform( '', kIdentity, '\n' ), + new Transform( '', kOmitLast3, '' ), + new Transform( '', kIdentity, ']' ), + new Transform( '', kIdentity, ' for ' ), + new Transform( '', kOmitFirst3, '' ), + new Transform( '', kOmitLast2, '' ), + new Transform( '', kIdentity, ' a ' ), + new Transform( '', kIdentity, ' that ' ), + new Transform( ' ', kUppercaseFirst, '' ), + new Transform( '', kIdentity, '. ' ), + new Transform( '.', kIdentity, '' ), + new Transform( ' ', kIdentity, ', ' ), + new Transform( '', kOmitFirst4, '' ), + new Transform( '', kIdentity, ' with ' ), + new Transform( '', kIdentity, "'" ), + new Transform( '', kIdentity, ' from ' ), + new Transform( '', kIdentity, ' by ' ), + new Transform( '', kOmitFirst5, '' ), + new Transform( '', kOmitFirst6, '' ), + new Transform( ' the ', kIdentity, '' ), + new Transform( '', kOmitLast4, '' ), + new Transform( '', kIdentity, '. The ' ), + new Transform( '', kUppercaseAll, '' ), + new Transform( '', kIdentity, ' on ' ), + new Transform( '', kIdentity, ' as ' ), + new Transform( '', kIdentity, ' is ' ), + new Transform( '', kOmitLast7, '' ), + new Transform( '', kOmitLast1, 'ing ' ), + new Transform( '', kIdentity, '\n\t' ), + new Transform( '', kIdentity, ':' ), + new Transform( ' ', kIdentity, '. ' ), + new Transform( '', kIdentity, 'ed ' ), + new Transform( '', kOmitFirst9, '' ), + new Transform( '', kOmitFirst7, '' ), + new Transform( '', kOmitLast6, '' ), + new Transform( '', kIdentity, '(' ), + new Transform( '', kUppercaseFirst, ', ' ), + new Transform( '', kOmitLast8, '' ), + new Transform( '', kIdentity, ' at ' ), + new Transform( '', kIdentity, 'ly ' ), + new Transform( ' the ', kIdentity, ' of ' ), + new Transform( '', kOmitLast5, '' ), + new Transform( '', kOmitLast9, '' ), + new Transform( ' ', kUppercaseFirst, ', ' ), + new Transform( '', kUppercaseFirst, '"' ), + new Transform( '.', kIdentity, '(' ), + new Transform( '', kUppercaseAll, ' ' ), + new Transform( '', kUppercaseFirst, '">' ), + new Transform( '', kIdentity, '="' ), + new Transform( ' ', kIdentity, '.' ), + new Transform( '.com/', kIdentity, '' ), + new Transform( ' the ', kIdentity, ' of the ' ), + new Transform( '', kUppercaseFirst, "'" ), + new Transform( '', kIdentity, '. This ' ), + new Transform( '', kIdentity, ',' ), + new Transform( '.', kIdentity, ' ' ), + new Transform( '', kUppercaseFirst, '(' ), + new Transform( '', kUppercaseFirst, '.' ), + new Transform( '', kIdentity, ' not ' ), + new Transform( ' ', kIdentity, '="' ), + new Transform( '', kIdentity, 'er ' ), + new Transform( ' ', kUppercaseAll, ' ' ), + new Transform( '', kIdentity, 'al ' ), + new Transform( ' ', kUppercaseAll, '' ), + new Transform( '', kIdentity, "='" ), + new Transform( '', kUppercaseAll, '"' ), + new Transform( '', kUppercaseFirst, '. ' ), + new Transform( ' ', kIdentity, '(' ), + new Transform( '', kIdentity, 'ful ' ), + new Transform( ' ', kUppercaseFirst, '. ' ), + new Transform( '', kIdentity, 'ive ' ), + new Transform( '', kIdentity, 'less ' ), + new Transform( '', kUppercaseAll, "'" ), + new Transform( '', kIdentity, 'est ' ), + new Transform( ' ', kUppercaseFirst, '.' ), + new Transform( '', kUppercaseAll, '">' ), + new Transform( ' ', kIdentity, "='" ), + new Transform( '', kUppercaseFirst, ',' ), + new Transform( '', kIdentity, 'ize ' ), + new Transform( '', kUppercaseAll, '.' ), + new Transform( '\xc2\xa0', kIdentity, '' ), + new Transform( ' ', kIdentity, ',' ), + new Transform( '', kUppercaseFirst, '="' ), + new Transform( '', kUppercaseAll, '="' ), + new Transform( '', kIdentity, 'ous ' ), + new Transform( '', kUppercaseAll, ', ' ), + new Transform( '', kUppercaseFirst, "='" ), + new Transform( ' ', kUppercaseFirst, ',' ), + new Transform( ' ', kUppercaseAll, '="' ), + new Transform( ' ', kUppercaseAll, ', ' ), + new Transform( '', kUppercaseAll, ',' ), + new Transform( '', kUppercaseAll, '(' ), + new Transform( '', kUppercaseAll, '. ' ), + new Transform( ' ', kUppercaseAll, '.' ), + new Transform( '', kUppercaseAll, "='" ), + new Transform( ' ', kUppercaseAll, '. ' ), + new Transform( ' ', kUppercaseFirst, '="' ), + new Transform( ' ', kUppercaseAll, "='" ), + new Transform( ' ', kUppercaseFirst, "='" ), + ]; + + exports.kTransforms = kTransforms; + exports.kNumTransforms = kTransforms.length; + + function ToUpperCase( p, i ) { + if ( p[ i ] < 0xc0 ) { + if ( p[ i ] >= 97 && p[ i ] <= 122 ) { + p[ i ] ^= 32; + } + return 1; + } + + /* An overly simplified uppercasing model for utf-8. */ + if ( p[ i ] < 0xe0 ) { + p[ i + 1 ] ^= 32; + return 2; + } + + /* An arbitrary transform for three byte characters. */ + p[ i + 2 ] ^= 5; + return 3; + } + + exports.transformDictionaryWord = function ( + dst, + idx, + word, + len, + transform + ) { + var prefix = kTransforms[ transform ].prefix; + var suffix = kTransforms[ transform ].suffix; + var t = kTransforms[ transform ].transform; + var skip = + t < kOmitFirst1 ? 0 : t - ( kOmitFirst1 - 1 ); + var i = 0; + var start_idx = idx; + var uppercase; + + if ( skip > len ) { + skip = len; + } + + var prefix_pos = 0; + while ( prefix_pos < prefix.length ) { + dst[ idx++ ] = prefix[ prefix_pos++ ]; + } + + word += skip; + len -= skip; + + if ( t <= kOmitLast9 ) { + len -= t; + } + + for ( i = 0; i < len; i++ ) { + dst[ idx++ ] = + BrotliDictionary.dictionary[ word + i ]; + } + + uppercase = idx - len; + + if ( t === kUppercaseFirst ) { + ToUpperCase( dst, uppercase ); + } else if ( t === kUppercaseAll ) { + while ( len > 0 ) { + var step = ToUpperCase( dst, uppercase ); + uppercase += step; + len -= step; + } + } + + var suffix_pos = 0; + while ( suffix_pos < suffix.length ) { + dst[ idx++ ] = suffix[ suffix_pos++ ]; + } + + return idx - start_idx; + }; + }, + { './dictionary': 6 }, + ], + 12: [ + function ( require, module, exports ) { + module.exports = + require( './dec/decode' ).BrotliDecompressBuffer; + }, + { './dec/decode': 3 }, + ], + }, + {}, + [ 12 ] + )( 12 ); +} ); +/* eslint-enable */ /***/ }), -/***/ 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; -}; +/***/ 9681: +/***/ ((module) => { + +var characterMap = { + "À": "A", + "Á": "A", + "Â": "A", + "Ã": "A", + "Ä": "A", + "Å": "A", + "Ấ": "A", + "Ắ": "A", + "Ẳ": "A", + "Ẵ": "A", + "Ặ": "A", + "Æ": "AE", + "Ầ": "A", + "Ằ": "A", + "Ȃ": "A", + "Ả": "A", + "Ạ": "A", + "Ẩ": "A", + "Ẫ": "A", + "Ậ": "A", + "Ç": "C", + "Ḉ": "C", + "È": "E", + "É": "E", + "Ê": "E", + "Ë": "E", + "Ế": "E", + "Ḗ": "E", + "Ề": "E", + "Ḕ": "E", + "Ḝ": "E", + "Ȇ": "E", + "Ẻ": "E", + "Ẽ": "E", + "Ẹ": "E", + "Ể": "E", + "Ễ": "E", + "Ệ": "E", + "Ì": "I", + "Í": "I", + "Î": "I", + "Ï": "I", + "Ḯ": "I", + "Ȋ": "I", + "Ỉ": "I", + "Ị": "I", + "Ð": "D", + "Ñ": "N", + "Ò": "O", + "Ó": "O", + "Ô": "O", + "Õ": "O", + "Ö": "O", + "Ø": "O", + "Ố": "O", + "Ṍ": "O", + "Ṓ": "O", + "Ȏ": "O", + "Ỏ": "O", + "Ọ": "O", + "Ổ": "O", + "Ỗ": "O", + "Ộ": "O", + "Ờ": "O", + "Ở": "O", + "Ỡ": "O", + "Ớ": "O", + "Ợ": "O", + "Ù": "U", + "Ú": "U", + "Û": "U", + "Ü": "U", + "Ủ": "U", + "Ụ": "U", + "Ử": "U", + "Ữ": "U", + "Ự": "U", + "Ý": "Y", + "à": "a", + "á": "a", + "â": "a", + "ã": "a", + "ä": "a", + "å": "a", + "ấ": "a", + "ắ": "a", + "ẳ": "a", + "ẵ": "a", + "ặ": "a", + "æ": "ae", + "ầ": "a", + "ằ": "a", + "ȃ": "a", + "ả": "a", + "ạ": "a", + "ẩ": "a", + "ẫ": "a", + "ậ": "a", + "ç": "c", + "ḉ": "c", + "è": "e", + "é": "e", + "ê": "e", + "ë": "e", + "ế": "e", + "ḗ": "e", + "ề": "e", + "ḕ": "e", + "ḝ": "e", + "ȇ": "e", + "ẻ": "e", + "ẽ": "e", + "ẹ": "e", + "ể": "e", + "ễ": "e", + "ệ": "e", + "ì": "i", + "í": "i", + "î": "i", + "ï": "i", + "ḯ": "i", + "ȋ": "i", + "ỉ": "i", + "ị": "i", + "ð": "d", + "ñ": "n", + "ò": "o", + "ó": "o", + "ô": "o", + "õ": "o", + "ö": "o", + "ø": "o", + "ố": "o", + "ṍ": "o", + "ṓ": "o", + "ȏ": "o", + "ỏ": "o", + "ọ": "o", + "ổ": "o", + "ỗ": "o", + "ộ": "o", + "ờ": "o", + "ở": "o", + "ỡ": "o", + "ớ": "o", + "ợ": "o", + "ù": "u", + "ú": "u", + "û": "u", + "ü": "u", + "ủ": "u", + "ụ": "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, ''); + +function matcher(match) { + return characterMap[match]; +} + +var removeAccents = function(string) { + return string.replace(allAccents, matcher); +}; + +var hasAccents = function(string) { + return !!string.match(firstAccent); +}; + +module.exports = removeAccents; +module.exports.has = hasAccents; +module.exports.remove = removeAccents; /***/ }), -/***/ 2652: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/** - * Copyright (c) 2013-present, Facebook, Inc. +/***/ 8477: +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/** + * @license React + * use-sync-external-store-shim.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ - -if (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; +var e=__webpack_require__(1609);function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k="function"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d} +function r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u="undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u; /***/ }), -/***/ 5438: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +/***/ 422: +/***/ ((module, __unused_webpack_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 })); -}); + +if (true) { + module.exports = __webpack_require__(8477); +} else {} /***/ }), -/***/ 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; - - -/***/ }), - -/***/ 9196: -/***/ (function(module) { +/***/ 1609: +/***/ ((module) => { "use strict"; module.exports = window["React"]; @@ -948,7 +7296,7 @@ /******/ }; /******/ /******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; @@ -956,165 +7304,844 @@ /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ -/******/ !function() { +/******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { +/******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? -/******/ function() { return module['default']; } : -/******/ function() { return module; }; +/******/ () => (module['default']) : +/******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; -/******/ }(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ (() => { +/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); +/******/ } +/******/ def['default'] = () => (value); +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ -/******/ !function() { +/******/ (() => { /******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { +/******/ __webpack_require__.d = (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_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ -/******/ !function() { +/******/ (() => { /******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { +/******/ __webpack_require__.r = (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__, { - "PluginMoreMenuItem": function() { return /* reexport */ plugin_more_menu_item; }, - "PluginSidebar": function() { return /* reexport */ PluginSidebarEditSite; }, - "PluginSidebarMoreMenuItem": function() { return /* reexport */ PluginSidebarMoreMenuItem; }, - "__experimentalMainDashboardButton": function() { return /* reexport */ main_dashboard_button; }, - "__experimentalNavigationToggle": function() { return /* reexport */ navigation_toggle; }, - "initializeEditor": function() { return /* binding */ initializeEditor; }, - "reinitializeEditor": function() { return /* binding */ reinitializeEditor; } -}); - -// NAMESPACE OBJECT: ./node_modules/@wordpress/interface/build-module/store/actions.js + PluginMoreMenuItem: () => (/* reexport */ PluginMoreMenuItem), + PluginSidebar: () => (/* reexport */ PluginSidebar), + PluginSidebarMoreMenuItem: () => (/* reexport */ PluginSidebarMoreMenuItem), + PluginTemplateSettingPanel: () => (/* reexport */ plugin_template_setting_panel), + initializeEditor: () => (/* binding */ initializeEditor), + reinitializeEditor: () => (/* binding */ reinitializeEditor), + store: () => (/* reexport */ store) +}); + +// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/actions.js var actions_namespaceObject = {}; __webpack_require__.r(actions_namespaceObject); __webpack_require__.d(actions_namespaceObject, { - "disableComplementaryArea": function() { return disableComplementaryArea; }, - "enableComplementaryArea": function() { return enableComplementaryArea; }, - "pinItem": function() { return pinItem; }, - "setFeatureDefaults": function() { return setFeatureDefaults; }, - "setFeatureValue": function() { return setFeatureValue; }, - "toggleFeature": function() { return toggleFeature; }, - "unpinItem": function() { return unpinItem; } -}); - -// NAMESPACE OBJECT: ./node_modules/@wordpress/interface/build-module/store/selectors.js -var selectors_namespaceObject = {}; -__webpack_require__.r(selectors_namespaceObject); -__webpack_require__.d(selectors_namespaceObject, { - "getActiveComplementaryArea": function() { return getActiveComplementaryArea; }, - "isFeatureActive": function() { return isFeatureActive; }, - "isItemPinned": function() { return isItemPinned; } -}); - -// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/actions.js -var store_actions_namespaceObject = {}; -__webpack_require__.r(store_actions_namespaceObject); -__webpack_require__.d(store_actions_namespaceObject, { - "__experimentalSetPreviewDeviceType": function() { return __experimentalSetPreviewDeviceType; }, - "addTemplate": function() { return addTemplate; }, - "closeGeneralSidebar": function() { return closeGeneralSidebar; }, - "openGeneralSidebar": function() { return openGeneralSidebar; }, - "openNavigationPanelToMenu": function() { return openNavigationPanelToMenu; }, - "removeTemplate": function() { return removeTemplate; }, - "revertTemplate": function() { return revertTemplate; }, - "setHomeTemplateId": function() { return setHomeTemplateId; }, - "setIsInserterOpened": function() { return setIsInserterOpened; }, - "setIsListViewOpened": function() { return setIsListViewOpened; }, - "setIsNavigationPanelOpened": function() { return setIsNavigationPanelOpened; }, - "setNavigationPanelActiveMenu": function() { return setNavigationPanelActiveMenu; }, - "setPage": function() { return setPage; }, - "setTemplate": function() { return setTemplate; }, - "setTemplatePart": function() { return setTemplatePart; }, - "switchEditorMode": function() { return switchEditorMode; }, - "toggleFeature": function() { return actions_toggleFeature; }, - "updateSettings": function() { return updateSettings; } + __experimentalSetPreviewDeviceType: () => (__experimentalSetPreviewDeviceType), + addTemplate: () => (addTemplate), + closeGeneralSidebar: () => (closeGeneralSidebar), + openGeneralSidebar: () => (openGeneralSidebar), + openNavigationPanelToMenu: () => (openNavigationPanelToMenu), + removeTemplate: () => (removeTemplate), + revertTemplate: () => (revertTemplate), + setEditedEntity: () => (setEditedEntity), + setEditedPostContext: () => (setEditedPostContext), + setHasPageContentFocus: () => (setHasPageContentFocus), + setHomeTemplateId: () => (setHomeTemplateId), + setIsInserterOpened: () => (setIsInserterOpened), + setIsListViewOpened: () => (setIsListViewOpened), + setIsNavigationPanelOpened: () => (setIsNavigationPanelOpened), + setIsSaveViewOpened: () => (setIsSaveViewOpened), + setNavigationMenu: () => (setNavigationMenu), + setNavigationPanelActiveMenu: () => (setNavigationPanelActiveMenu), + setPage: () => (setPage), + setTemplate: () => (setTemplate), + setTemplatePart: () => (setTemplatePart), + switchEditorMode: () => (switchEditorMode), + toggleDistractionFree: () => (toggleDistractionFree), + toggleFeature: () => (toggleFeature), + updateSettings: () => (updateSettings) +}); + +// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/private-actions.js +var private_actions_namespaceObject = {}; +__webpack_require__.r(private_actions_namespaceObject); +__webpack_require__.d(private_actions_namespaceObject, { + setCanvasMode: () => (setCanvasMode), + setEditorCanvasContainerView: () => (setEditorCanvasContainerView) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/selectors.js -var store_selectors_namespaceObject = {}; -__webpack_require__.r(store_selectors_namespaceObject); -__webpack_require__.d(store_selectors_namespaceObject, { - "__experimentalGetInsertionPoint": function() { return __experimentalGetInsertionPoint; }, - "__experimentalGetPreviewDeviceType": function() { return __experimentalGetPreviewDeviceType; }, - "__unstableGetPreference": function() { return __unstableGetPreference; }, - "getCanUserCreateMedia": function() { return getCanUserCreateMedia; }, - "getCurrentTemplateNavigationPanelSubMenu": function() { return getCurrentTemplateNavigationPanelSubMenu; }, - "getCurrentTemplateTemplateParts": function() { return getCurrentTemplateTemplateParts; }, - "getEditedPostId": function() { return getEditedPostId; }, - "getEditedPostType": function() { return getEditedPostType; }, - "getEditorMode": function() { return getEditorMode; }, - "getHomeTemplateId": function() { return getHomeTemplateId; }, - "getNavigationPanelActiveMenu": function() { return getNavigationPanelActiveMenu; }, - "getPage": function() { return getPage; }, - "getReusableBlocks": function() { return getReusableBlocks; }, - "getSettings": function() { return getSettings; }, - "isFeatureActive": function() { return selectors_isFeatureActive; }, - "isInserterOpened": function() { return isInserterOpened; }, - "isListViewOpened": function() { return isListViewOpened; }, - "isNavigationOpened": function() { return isNavigationOpened; } -}); - -;// CONCATENATED MODULE: external ["wp","element"] -var external_wp_element_namespaceObject = window["wp"]["element"]; +var selectors_namespaceObject = {}; +__webpack_require__.r(selectors_namespaceObject); +__webpack_require__.d(selectors_namespaceObject, { + __experimentalGetInsertionPoint: () => (__experimentalGetInsertionPoint), + __experimentalGetPreviewDeviceType: () => (__experimentalGetPreviewDeviceType), + getCanUserCreateMedia: () => (getCanUserCreateMedia), + getCurrentTemplateNavigationPanelSubMenu: () => (getCurrentTemplateNavigationPanelSubMenu), + getCurrentTemplateTemplateParts: () => (getCurrentTemplateTemplateParts), + getEditedPostContext: () => (getEditedPostContext), + getEditedPostId: () => (getEditedPostId), + getEditedPostType: () => (getEditedPostType), + getEditorMode: () => (getEditorMode), + getHomeTemplateId: () => (getHomeTemplateId), + getNavigationPanelActiveMenu: () => (getNavigationPanelActiveMenu), + getPage: () => (getPage), + getReusableBlocks: () => (getReusableBlocks), + getSettings: () => (getSettings), + hasPageContentFocus: () => (hasPageContentFocus), + isFeatureActive: () => (isFeatureActive), + isInserterOpened: () => (isInserterOpened), + isListViewOpened: () => (isListViewOpened), + isNavigationOpened: () => (isNavigationOpened), + isPage: () => (isPage), + isSaveViewOpened: () => (isSaveViewOpened) +}); + +// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/private-selectors.js +var private_selectors_namespaceObject = {}; +__webpack_require__.r(private_selectors_namespaceObject); +__webpack_require__.d(private_selectors_namespaceObject, { + getCanvasMode: () => (getCanvasMode), + getEditorCanvasContainerView: () => (getEditorCanvasContainerView) +}); + ;// CONCATENATED MODULE: external ["wp","blocks"] -var external_wp_blocks_namespaceObject = window["wp"]["blocks"]; +const external_wp_blocks_namespaceObject = window["wp"]["blocks"]; ;// CONCATENATED MODULE: external ["wp","blockLibrary"] -var external_wp_blockLibrary_namespaceObject = window["wp"]["blockLibrary"]; +const external_wp_blockLibrary_namespaceObject = window["wp"]["blockLibrary"]; ;// 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"]; +const external_wp_data_namespaceObject = window["wp"]["data"]; +;// CONCATENATED MODULE: external ["wp","deprecated"] +const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"]; +var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject); +;// CONCATENATED MODULE: external ["wp","element"] +const external_wp_element_namespaceObject = window["wp"]["element"]; ;// CONCATENATED MODULE: external ["wp","editor"] -var external_wp_editor_namespaceObject = window["wp"]["editor"]; +const external_wp_editor_namespaceObject = window["wp"]["editor"]; ;// CONCATENATED MODULE: external ["wp","preferences"] -var external_wp_preferences_namespaceObject = window["wp"]["preferences"]; +const external_wp_preferences_namespaceObject = window["wp"]["preferences"]; +;// CONCATENATED MODULE: external ["wp","widgets"] +const external_wp_widgets_namespaceObject = window["wp"]["widgets"]; +;// CONCATENATED MODULE: external ["wp","hooks"] +const external_wp_hooks_namespaceObject = window["wp"]["hooks"]; +;// CONCATENATED MODULE: external ["wp","compose"] +const external_wp_compose_namespaceObject = window["wp"]["compose"]; +;// CONCATENATED MODULE: external ["wp","blockEditor"] +const external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"]; +;// CONCATENATED MODULE: external ["wp","components"] +const external_wp_components_namespaceObject = window["wp"]["components"]; ;// CONCATENATED MODULE: external ["wp","i18n"] -var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; -;// CONCATENATED MODULE: external ["wp","viewport"] -var external_wp_viewport_namespaceObject = window["wp"]["viewport"]; -;// CONCATENATED MODULE: external ["wp","url"] -var external_wp_url_namespaceObject = window["wp"]["url"]; -;// CONCATENATED MODULE: external ["wp","hooks"] -var external_wp_hooks_namespaceObject = window["wp"]["hooks"]; -;// CONCATENATED MODULE: external ["wp","mediaUtils"] -var external_wp_mediaUtils_namespaceObject = window["wp"]["mediaUtils"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/hooks/components.js -/** - * WordPress dependencies - */ - - -(0,external_wp_hooks_namespaceObject.addFilter)('editor.MediaUpload', 'core/edit-site/components/media-upload', () => external_wp_mediaUtils_namespaceObject.MediaUpload); +const external_wp_i18n_namespaceObject = window["wp"]["i18n"]; +;// CONCATENATED MODULE: external ["wp","notices"] +const external_wp_notices_namespaceObject = window["wp"]["notices"]; +;// CONCATENATED MODULE: external ["wp","coreData"] +const external_wp_coreData_namespaceObject = window["wp"]["coreData"]; +;// CONCATENATED MODULE: ./node_modules/colord/index.mjs +var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?"0"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,colord_p=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,m=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(t){var n=l.exec(t)||colord_p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u="deg"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},"hsl"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},"rgb"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},"hsl"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},"hsv"]]},N=function(r,t){for(var n=0;n=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):"","#"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?"rgba("+t+", "+n+", "+e+", "+u+")":"rgb("+t+", "+n+", "+e+")";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?"hsla("+t+", "+n+"%, "+e+"%, "+u+")":"hsl("+t+", "+n+"%, "+e+"%)";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return"number"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return"number"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof colord_j?r:new colord_j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(colord_j,y),S.push(r))})},E=function(){return new colord_j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})}; + +;// CONCATENATED MODULE: ./node_modules/colord/plugins/a11y.mjs +var a11y_o=function(o){var t=o/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},a11y_t=function(t){return.2126*a11y_o(t.r)+.7152*a11y_o(t.g)+.0722*a11y_o(t.b)};/* harmony default export */ function a11y(o){o.prototype.luminance=function(){return o=a11y_t(this.rgba),void 0===(r=2)&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*o)/n+0;var o,r,n},o.prototype.contrast=function(r){void 0===r&&(r="#FFF");var n,a,i,e,v,u,d,c=r instanceof o?r:new o(r);return e=this.rgba,v=c.toRgb(),u=a11y_t(e),d=a11y_t(v),n=u>d?(u+.05)/(d+.05):(d+.05)/(u+.05),void 0===(a=2)&&(a=0),void 0===i&&(i=Math.pow(10,a)),Math.floor(i*n)/i+0},o.prototype.isReadable=function(o,t){return void 0===o&&(o="#FFF"),void 0===t&&(t={}),this.contrast(o)>=(e=void 0===(i=(r=t).size)?"normal":i,"AAA"===(a=void 0===(n=r.level)?"AA":n)&&"normal"===e?7:"AA"===a&&"large"===e?3:4.5);var r,n,a,i,e}} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/utils/clone-deep.js +/** + * Makes a copy of an object without storing any references to the original object. + * @param {Object} object + * @return {Object} The cloned object. + */ +function cloneDeep(object) { + return !object ? {} : JSON.parse(JSON.stringify(object)); +} + +;// CONCATENATED MODULE: external ["wp","privateApis"] +const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/lock-unlock.js +/** + * WordPress dependencies + */ + +const { + lock, + unlock: lock_unlock_unlock +} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/edit-site'); + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +/** + * WordPress dependencies + */ + + + + + + + +/** + * Internal dependencies + */ + + +const { + GlobalStylesContext +} = lock_unlock_unlock(external_wp_blockEditor_namespaceObject.privateApis); +const { + mergeBaseAndUserConfigs +} = lock_unlock_unlock(external_wp_editor_namespaceObject.privateApis); + +/** + * Removes all instances of a property from an object. + * + * @param {Object} object The object to remove the property from. + * @param {string} property The property to remove. + * @return {Object} The modified object. + */ +function removePropertyFromObject(object, property) { + if (!property || typeof property !== 'string') { + return object; + } + if (typeof object !== 'object' || !object || !Object.keys(object).length) { + return object; + } + for (const key in object) { + if (key === property) { + delete object[key]; + } else if (typeof object[key] === 'object') { + removePropertyFromObject(object[key], property); + } + } + return object; +} + +/** + * Fetches the current theme style variations that contain only the specified property + * and merges them with the user config. + * + * @param {Object} props Object of hook args. + * @param {string} props.property The property to filter by. + * @return {Object[]|*} The merged object. + */ +function useCurrentMergeThemeStyleVariationsWithUserConfig({ + property +}) { + const { + variationsFromTheme + } = (0,external_wp_data_namespaceObject.useSelect)(select => { + const _variationsFromTheme = select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentThemeGlobalStylesVariations(); + return { + variationsFromTheme: _variationsFromTheme || [] + }; + }, []); + const { + user: userVariation + } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext); + return (0,external_wp_element_namespaceObject.useMemo)(() => { + const clonedUserVariation = cloneDeep(userVariation); + + // Get user variation and remove the settings for the given property. + const userVariationWithoutProperty = removePropertyFromObject(clonedUserVariation, property); + userVariationWithoutProperty.title = (0,external_wp_i18n_namespaceObject.__)('Default'); + const variationsWithSinglePropertyAndBase = variationsFromTheme.filter(variation => { + return isVariationWithSingleProperty(variation, property); + }).map(variation => { + return mergeBaseAndUserConfigs(userVariationWithoutProperty, variation); + }); + return [userVariationWithoutProperty, ...variationsWithSinglePropertyAndBase]; + }, [property, userVariation, variationsFromTheme]); +} + +/** + * Returns a new object, with properties specified in `property`, + * maintain the original object tree structure. + * The function is recursive, so it will perform a deep search for the given property. + * E.g., the function will return `{ a: { b: { c: { test: 1 } } } }` if the property is `test`. + * + * @param {Object} object The object to filter + * @param {Object} property The property to filter by + * @return {Object} The merged object. + */ +const filterObjectByProperty = (object, property) => { + if (!object) { + return {}; + } + const newObject = {}; + Object.keys(object).forEach(key => { + if (key === property) { + newObject[key] = object[key]; + } else if (typeof object[key] === 'object') { + const newFilter = filterObjectByProperty(object[key], property); + if (Object.keys(newFilter).length) { + newObject[key] = newFilter; + } + } + }); + return newObject; +}; + +/** + * Compares a style variation to the same variation filtered by a single property. + * Returns true if the variation contains only the property specified. + * + * @param {Object} variation The variation to compare. + * @param {string} property The property to compare. + * @return {boolean} Whether the variation contains only a single property. + */ +function isVariationWithSingleProperty(variation, property) { + const variationWithProperty = filterObjectByProperty(cloneDeep(variation), property); + return JSON.stringify(variationWithProperty?.styles) === JSON.stringify(variation?.styles) && JSON.stringify(variationWithProperty?.settings) === JSON.stringify(variation?.settings); +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/hooks.js +/** + * External dependencies + */ + + + +/** + * WordPress dependencies + */ + + + + +/** + * Internal dependencies + */ + + + +const { + useGlobalSetting, + useGlobalStyle +} = lock_unlock_unlock(external_wp_blockEditor_namespaceObject.privateApis); + +// Enable colord's a11y plugin. +k([a11y]); +function useColorRandomizer(name) { + const [themeColors, setThemeColors] = useGlobalSetting('color.palette.theme', name); + function randomizeColors() { + /* eslint-disable no-restricted-syntax */ + const randomRotationValue = Math.floor(Math.random() * 225); + /* eslint-enable no-restricted-syntax */ + + const newColors = themeColors.map(colorObject => { + const { + color + } = colorObject; + const newColor = w(color).rotate(randomRotationValue).toHex(); + return { + ...colorObject, + color: newColor + }; + }); + setThemeColors(newColors); + } + return window.__experimentalEnableColorRandomizer ? [randomizeColors] : []; +} +function useStylesPreviewColors() { + const [textColor = 'black'] = useGlobalStyle('color.text'); + const [backgroundColor = 'white'] = useGlobalStyle('color.background'); + const [headingColor = textColor] = useGlobalStyle('elements.h1.color.text'); + const [linkColor = headingColor] = useGlobalStyle('elements.link.color.text'); + const [buttonBackgroundColor = linkColor] = useGlobalStyle('elements.button.color.background'); + const [coreColors] = useGlobalSetting('color.palette.core'); + const [themeColors] = useGlobalSetting('color.palette.theme'); + const [customColors] = useGlobalSetting('color.palette.custom'); + const paletteColors = (themeColors !== null && themeColors !== void 0 ? themeColors : []).concat(customColors !== null && customColors !== void 0 ? customColors : []).concat(coreColors !== null && coreColors !== void 0 ? coreColors : []); + const textColorObject = paletteColors.filter(({ + color + }) => color === textColor); + const buttonBackgroundColorObject = paletteColors.filter(({ + color + }) => color === buttonBackgroundColor); + const highlightedColors = textColorObject.concat(buttonBackgroundColorObject).concat(paletteColors).filter( + // we exclude these background color because it is already visible in the preview. + ({ + color + }) => color !== backgroundColor).slice(0, 2); + return { + paletteColors, + highlightedColors + }; +} +function useSupportedStyles(name, element) { + const { + supportedPanels + } = (0,external_wp_data_namespaceObject.useSelect)(select => { + return { + supportedPanels: lock_unlock_unlock(select(external_wp_blocks_namespaceObject.store)).getSupportedStyles(name, element) + }; + }, [name, element]); + return supportedPanels; +} +function useColorVariations() { + const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig({ + property: 'color' + }); + /* + * Filter out variations with no settings or styles. + */ + return colorVariations?.length ? colorVariations.filter(variation => { + const { + settings, + styles, + title + } = variation; + return title === (0,external_wp_i18n_namespaceObject.__)('Default') || + // Always preseve the default variation. + Object.keys(settings).length > 0 || Object.keys(styles).length > 0; + }) : []; +} +function useTypographyVariations() { + const typographyVariations = useCurrentMergeThemeStyleVariationsWithUserConfig({ + property: 'typography' + }); + /* + * Filter out variations with no settings or styles. + */ + return typographyVariations?.length ? typographyVariations.filter(variation => { + const { + settings, + styles, + title + } = variation; + return title === (0,external_wp_i18n_namespaceObject.__)('Default') || + // Always preseve the default variation. + Object.keys(settings).length > 0 || Object.keys(styles).length > 0; + }) : []; +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/utils/set-nested-value.js +/** + * Sets the value at path of object. + * If a portion of path doesn’t exist, it’s created. + * Arrays are created for missing index properties while objects are created + * for all other missing properties. + * + * This function intentionally mutates the input object. + * + * Inspired by _.set(). + * + * @see https://lodash.com/docs/4.17.15#set + * + * @todo Needs to be deduplicated with its copy in `@wordpress/core-data`. + * + * @param {Object} object Object to modify + * @param {Array} path Path of the property to set. + * @param {*} value Value to set. + */ +function setNestedValue(object, path, value) { + if (!object || typeof object !== 'object') { + return object; + } + path.reduce((acc, key, idx) => { + if (acc[key] === undefined) { + if (Number.isInteger(path[idx + 1])) { + acc[key] = []; + } else { + acc[key] = {}; + } + } + if (idx === path.length - 1) { + acc[key] = value; + } + return acc[key]; + }, object); + return object; +} + +;// CONCATENATED MODULE: external "ReactJSXRuntime" +const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/hooks/push-changes-to-global-styles/index.js +/** + * WordPress dependencies + */ + + + + + + + + + + + +/** + * Internal dependencies + */ + + + + + + + +const { + cleanEmptyObject, + GlobalStylesContext: push_changes_to_global_styles_GlobalStylesContext +} = lock_unlock_unlock(external_wp_blockEditor_namespaceObject.privateApis); + +// Block Gap is a special case and isn't defined within the blocks +// style properties config. We'll add it here to allow it to be pushed +// to global styles as well. +const STYLE_PROPERTY = { + ...external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY, + blockGap: { + value: ['spacing', 'blockGap'] + } +}; + +// TODO: Temporary duplication of constant in @wordpress/block-editor. Can be +// removed by moving PushChangesToGlobalStylesControl to +// @wordpress/block-editor. +const STYLE_PATH_TO_CSS_VAR_INFIX = { + 'border.color': 'color', + 'color.background': 'color', + 'color.text': 'color', + 'elements.link.color.text': 'color', + 'elements.link.:hover.color.text': 'color', + 'elements.link.typography.fontFamily': 'font-family', + 'elements.link.typography.fontSize': 'font-size', + 'elements.button.color.text': 'color', + 'elements.button.color.background': 'color', + 'elements.button.typography.fontFamily': 'font-family', + 'elements.button.typography.fontSize': 'font-size', + 'elements.caption.color.text': 'color', + 'elements.heading.color': 'color', + 'elements.heading.color.background': 'color', + 'elements.heading.typography.fontFamily': 'font-family', + 'elements.heading.gradient': 'gradient', + 'elements.heading.color.gradient': 'gradient', + 'elements.h1.color': 'color', + 'elements.h1.color.background': 'color', + 'elements.h1.typography.fontFamily': 'font-family', + 'elements.h1.color.gradient': 'gradient', + 'elements.h2.color': 'color', + 'elements.h2.color.background': 'color', + 'elements.h2.typography.fontFamily': 'font-family', + 'elements.h2.color.gradient': 'gradient', + 'elements.h3.color': 'color', + 'elements.h3.color.background': 'color', + 'elements.h3.typography.fontFamily': 'font-family', + 'elements.h3.color.gradient': 'gradient', + 'elements.h4.color': 'color', + 'elements.h4.color.background': 'color', + 'elements.h4.typography.fontFamily': 'font-family', + 'elements.h4.color.gradient': 'gradient', + 'elements.h5.color': 'color', + 'elements.h5.color.background': 'color', + 'elements.h5.typography.fontFamily': 'font-family', + 'elements.h5.color.gradient': 'gradient', + 'elements.h6.color': 'color', + 'elements.h6.color.background': 'color', + 'elements.h6.typography.fontFamily': 'font-family', + 'elements.h6.color.gradient': 'gradient', + 'color.gradient': 'gradient', + blockGap: 'spacing', + 'typography.fontSize': 'font-size', + 'typography.fontFamily': 'font-family' +}; + +// TODO: Temporary duplication of constant in @wordpress/block-editor. Can be +// removed by moving PushChangesToGlobalStylesControl to +// @wordpress/block-editor. +const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = { + 'border.color': 'borderColor', + 'color.background': 'backgroundColor', + 'color.text': 'textColor', + 'color.gradient': 'gradient', + 'typography.fontSize': 'fontSize', + 'typography.fontFamily': 'fontFamily' +}; +const SUPPORTED_STYLES = ['border', 'color', 'spacing', 'typography']; +const getValueFromObjectPath = (object, path) => { + let value = object; + path.forEach(fieldName => { + value = value?.[fieldName]; + }); + return value; +}; +const flatBorderProperties = ['borderColor', 'borderWidth', 'borderStyle']; +const sides = ['top', 'right', 'bottom', 'left']; +function getBorderStyleChanges(border, presetColor, userStyle) { + if (!border && !presetColor) { + return []; + } + const changes = [...getFallbackBorderStyleChange('top', border, userStyle), ...getFallbackBorderStyleChange('right', border, userStyle), ...getFallbackBorderStyleChange('bottom', border, userStyle), ...getFallbackBorderStyleChange('left', border, userStyle)]; + + // Handle a flat border i.e. all sides the same, CSS shorthand. + const { + color: customColor, + style, + width + } = border || {}; + const hasColorOrWidth = presetColor || customColor || width; + if (hasColorOrWidth && !style) { + // Global Styles need individual side configurations to overcome + // theme.json configurations which are per side as well. + sides.forEach(side => { + // Only add fallback border-style if global styles don't already + // have something set. + if (!userStyle?.[side]?.style) { + changes.push({ + path: ['border', side, 'style'], + value: 'solid' + }); + } + }); + } + return changes; +} +function getFallbackBorderStyleChange(side, border, globalBorderStyle) { + if (!border?.[side] || globalBorderStyle?.[side]?.style) { + return []; + } + const { + color, + style, + width + } = border[side]; + const hasColorOrWidth = color || width; + if (!hasColorOrWidth || style) { + return []; + } + return [{ + path: ['border', side, 'style'], + value: 'solid' + }]; +} +function useChangesToPush(name, attributes, userConfig) { + const supports = useSupportedStyles(name); + const blockUserConfig = userConfig?.styles?.blocks?.[name]; + return (0,external_wp_element_namespaceObject.useMemo)(() => { + const changes = supports.flatMap(key => { + if (!STYLE_PROPERTY[key]) { + return []; + } + const { + value: path + } = STYLE_PROPERTY[key]; + const presetAttributeKey = path.join('.'); + const presetAttributeValue = attributes[STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE[presetAttributeKey]]; + const value = presetAttributeValue ? `var:preset|${STYLE_PATH_TO_CSS_VAR_INFIX[presetAttributeKey]}|${presetAttributeValue}` : getValueFromObjectPath(attributes.style, path); + + // Links only have a single support entry but have two element + // style properties, color and hover color. The following check + // will add the hover color to the changes if required. + if (key === 'linkColor') { + const linkChanges = value ? [{ + path, + value + }] : []; + const hoverPath = ['elements', 'link', ':hover', 'color', 'text']; + const hoverValue = getValueFromObjectPath(attributes.style, hoverPath); + if (hoverValue) { + linkChanges.push({ + path: hoverPath, + value: hoverValue + }); + } + return linkChanges; + } + + // The shorthand border styles can't be mapped directly as global + // styles requires longhand config. + if (flatBorderProperties.includes(key) && value) { + // The shorthand config path is included to clear the block attribute. + const borderChanges = [{ + path, + value + }]; + sides.forEach(side => { + const currentPath = [...path]; + currentPath.splice(-1, 0, side); + borderChanges.push({ + path: currentPath, + value + }); + }); + return borderChanges; + } + return value ? [{ + path, + value + }] : []; + }); + + // To ensure display of a visible border, global styles require a + // default border style if a border color or width is present. + getBorderStyleChanges(attributes.style?.border, attributes.borderColor, blockUserConfig?.border).forEach(change => changes.push(change)); + return changes; + }, [supports, attributes, blockUserConfig]); +} +function PushChangesToGlobalStylesControl({ + name, + attributes, + setAttributes +}) { + const { + user: userConfig, + setUserConfig + } = (0,external_wp_element_namespaceObject.useContext)(push_changes_to_global_styles_GlobalStylesContext); + const changes = useChangesToPush(name, attributes, userConfig); + const { + __unstableMarkNextChangeAsNotPersistent + } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); + const { + createSuccessNotice + } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); + const pushChanges = (0,external_wp_element_namespaceObject.useCallback)(() => { + if (changes.length === 0) { + return; + } + if (changes.length > 0) { + const { + style: blockStyles + } = attributes; + const newBlockStyles = cloneDeep(blockStyles); + const newUserConfig = cloneDeep(userConfig); + for (const { + path, + value + } of changes) { + setNestedValue(newBlockStyles, path, undefined); + setNestedValue(newUserConfig, ['styles', 'blocks', name, ...path], value); + } + const newBlockAttributes = { + borderColor: undefined, + backgroundColor: undefined, + textColor: undefined, + gradient: undefined, + fontSize: undefined, + fontFamily: undefined, + style: cleanEmptyObject(newBlockStyles) + }; + + // @wordpress/core-data doesn't support editing multiple entity types in + // a single undo level. So for now, we disable @wordpress/core-data undo + // tracking and implement our own Undo button in the snackbar + // notification. + __unstableMarkNextChangeAsNotPersistent(); + setAttributes(newBlockAttributes); + setUserConfig(newUserConfig, { + undoIgnore: true + }); + createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)( + // translators: %s: Title of the block e.g. 'Heading'. + (0,external_wp_i18n_namespaceObject.__)('%s styles applied.'), (0,external_wp_blocks_namespaceObject.getBlockType)(name).title), { + type: 'snackbar', + actions: [{ + label: (0,external_wp_i18n_namespaceObject.__)('Undo'), + onClick() { + __unstableMarkNextChangeAsNotPersistent(); + setAttributes(attributes); + setUserConfig(userConfig, { + undoIgnore: true + }); + } + }] + }); + } + }, [__unstableMarkNextChangeAsNotPersistent, attributes, changes, createSuccessNotice, name, setAttributes, setUserConfig, userConfig]); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.BaseControl, { + className: "edit-site-push-changes-to-global-styles-control", + help: (0,external_wp_i18n_namespaceObject.sprintf)( + // translators: %s: Title of the block e.g. 'Heading'. + (0,external_wp_i18n_namespaceObject.__)('Apply this block’s typography, spacing, dimensions, and color styles to all %s blocks.'), (0,external_wp_blocks_namespaceObject.getBlockType)(name).title), + children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, { + children: (0,external_wp_i18n_namespaceObject.__)('Styles') + }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + __next40pxDefaultSize: true, + variant: "secondary", + __experimentalIsFocusable: true, + disabled: changes.length === 0, + onClick: pushChanges, + children: (0,external_wp_i18n_namespaceObject.__)('Apply globally') + })] + }); +} +function PushChangesToGlobalStyles(props) { + const blockEditingMode = (0,external_wp_blockEditor_namespaceObject.useBlockEditingMode)(); + const isBlockBasedTheme = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.is_block_theme, []); + const supportsStyles = SUPPORTED_STYLES.some(feature => (0,external_wp_blocks_namespaceObject.hasBlockSupport)(props.name, feature)); + const isDisplayed = blockEditingMode === 'default' && supportsStyles && isBlockBasedTheme; + if (!isDisplayed) { + return null; + } + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InspectorAdvancedControls, { + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PushChangesToGlobalStylesControl, { + ...props + }) + }); +} +const withPushChangesToGlobalStyles = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(BlockEdit => props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { + children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockEdit, { + ...props + }), props.isSelected && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PushChangesToGlobalStyles, { + ...props + })] +})); +(0,external_wp_hooks_namespaceObject.addFilter)('editor.BlockEdit', 'core/edit-site/push-changes-to-global-styles', withPushChangesToGlobalStyles); ;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/hooks/index.js /** @@ -1122,98 +8149,12 @@ */ -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/constants.js -/** - * The identifier for the data store. - * - * @type {string} - */ -const STORE_NAME = 'core/edit-site'; -const TEMPLATE_PART_AREA_HEADER = 'header'; -const TEMPLATE_PART_AREA_FOOTER = 'footer'; -const TEMPLATE_PART_AREA_SIDEBAR = 'sidebar'; -const TEMPLATE_PART_AREA_GENERAL = 'uncategorized'; - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/navigation-sidebar/navigation-panel/constants.js -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - -const TEMPLATES_PRIMARY = ['index', 'singular', 'archive', 'single', 'page', 'home', '404', 'search']; -const TEMPLATES_SECONDARY = ['author', 'category', 'taxonomy', 'date', 'tag', 'attachment', 'single-post', 'front-page']; -const TEMPLATES_TOP_LEVEL = [...TEMPLATES_PRIMARY, ...TEMPLATES_SECONDARY]; -const TEMPLATES_GENERAL = ['page-home']; -const TEMPLATES_POSTS_PREFIXES = ['post-', 'author-', 'single-post-', 'tag-']; -const TEMPLATES_PAGES_PREFIXES = ['page-']; -const TEMPLATE_OVERRIDES = { - singular: ['single', 'page'], - index: ['archive', '404', 'search', 'singular', 'home'], - home: ['front-page'] -}; -const MENU_ROOT = 'root'; -const MENU_TEMPLATE_PARTS = 'template-parts'; -const MENU_TEMPLATES = 'templates'; -const MENU_TEMPLATES_GENERAL = 'templates-general'; -const MENU_TEMPLATES_PAGES = 'templates-pages'; -const MENU_TEMPLATES_POSTS = 'templates-posts'; -const MENU_TEMPLATES_UNUSED = 'templates-unused'; -const MENU_TEMPLATE_PARTS_HEADERS = 'template-parts-headers'; -const MENU_TEMPLATE_PARTS_FOOTERS = 'template-parts-footers'; -const MENU_TEMPLATE_PARTS_SIDEBARS = 'template-parts-sidebars'; -const MENU_TEMPLATE_PARTS_GENERAL = 'template-parts-general'; -const TEMPLATE_PARTS_SUB_MENUS = [{ - area: TEMPLATE_PART_AREA_HEADER, - menu: MENU_TEMPLATE_PARTS_HEADERS, - title: (0,external_wp_i18n_namespaceObject.__)('headers') -}, { - area: TEMPLATE_PART_AREA_FOOTER, - menu: MENU_TEMPLATE_PARTS_FOOTERS, - title: (0,external_wp_i18n_namespaceObject.__)('footers') -}, { - area: TEMPLATE_PART_AREA_SIDEBAR, - menu: MENU_TEMPLATE_PARTS_SIDEBARS, - title: (0,external_wp_i18n_namespaceObject.__)('sidebars') -}, { - area: TEMPLATE_PART_AREA_GENERAL, - menu: MENU_TEMPLATE_PARTS_GENERAL, - title: (0,external_wp_i18n_namespaceObject.__)('general') -}]; - ;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/reducer.js /** * WordPress dependencies */ -/** - * Internal dependencies - */ - - -/** - * Reducer returning the editing canvas device type. - * - * @param {Object} state Current state. - * @param {Object} action Dispatched action. - * - * @return {Object} Updated state. - */ - -function deviceType() { - let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Desktop'; - let action = arguments.length > 1 ? arguments[1] : undefined; - - switch (action.type) { - case 'SET_PREVIEW_DEVICE_TYPE': - return action.deviceType; - } - - return state; -} + /** * Reducer returning the settings. * @@ -1222,20 +8163,17 @@ * * @return {Object} Updated state. */ - -function settings() { - let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let action = arguments.length > 1 ? arguments[1] : undefined; - +function settings(state = {}, action) { switch (action.type) { case 'UPDATE_SETTINGS': - return { ...state, + return { + ...state, ...action.settings }; } - return state; } + /** * Reducer keeping track of the currently edited Post Type, * Post Id and the context provided to fill the content of the block editor. @@ -1245,1436 +8183,130 @@ * * @return {Object} Updated state. */ - -function editedPost() { - let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let action = arguments.length > 1 ? arguments[1] : undefined; - +function editedPost(state = {}, action) { switch (action.type) { - case 'SET_TEMPLATE': - case 'SET_PAGE': + case 'SET_EDITED_POST': return { - type: 'wp_template', - id: action.templateId, - page: action.page + postType: action.postType, + id: action.id, + context: action.context }; - - case 'SET_TEMPLATE_PART': + case 'SET_EDITED_POST_CONTEXT': return { - type: 'wp_template_part', - id: action.templatePartId + ...state, + context: action.context }; } - return state; } -/** - * Reducer for information about the site's homepage. - * - * @param {Object} state Current state. - * @param {Object} action Dispatched action. - * - * @return {Object} Updated state. - */ - -function homeTemplateId(state, action) { - switch (action.type) { - case 'SET_HOME_TEMPLATE': - return action.homeTemplateId; - } - - return state; -} -/** - * Reducer for information about the navigation panel, such as its active menu - * and whether it should be opened or closed. - * - * Note: this reducer interacts with the inserter and list view panels reducers - * to make sure that only one of the three panels is open at the same time. + +/** + * Reducer to set the save view panel open or closed. * * @param {Object} state Current state. * @param {Object} action Dispatched action. */ - -function navigationPanel() { - let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { - menu: MENU_ROOT, - isOpen: false - }; - let action = arguments.length > 1 ? arguments[1] : undefined; - +function saveViewPanel(state = false, action) { switch (action.type) { - case 'SET_NAVIGATION_PANEL_ACTIVE_MENU': - return { ...state, - menu: action.menu - }; - - case 'OPEN_NAVIGATION_PANEL_TO_MENU': - return { ...state, - isOpen: true, - menu: action.menu - }; - - case 'SET_IS_NAVIGATION_PANEL_OPENED': - return { ...state, - menu: !action.isOpen ? MENU_ROOT : state.menu, - // Set menu to root when closing panel. - isOpen: action.isOpen - }; - - case 'SET_IS_LIST_VIEW_OPENED': - return { ...state, - menu: state.isOpen && action.isOpen ? MENU_ROOT : state.menu, - // Set menu to root when closing panel. - isOpen: action.isOpen ? false : state.isOpen - }; - - case 'SET_IS_INSERTER_OPENED': - return { ...state, - menu: state.isOpen && action.value ? MENU_ROOT : state.menu, - // Set menu to root when closing panel. - isOpen: action.value ? false : state.isOpen - }; - } - + case 'SET_IS_SAVE_VIEW_OPENED': + return action.isOpen; + case 'SET_CANVAS_MODE': + return false; + } return state; } -/** - * Reducer to set the block inserter panel open or closed. - * - * Note: this reducer interacts with the navigation and list view panels reducers - * to make sure that only one of the three panels is open at the same time. - * - * @param {boolean|Object} state Current state. - * @param {Object} action Dispatched action. - */ - -function blockInserterPanel() { - let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - let action = arguments.length > 1 ? arguments[1] : undefined; - - switch (action.type) { - case 'OPEN_NAVIGATION_PANEL_TO_MENU': - return false; - - case 'SET_IS_NAVIGATION_PANEL_OPENED': - case 'SET_IS_LIST_VIEW_OPENED': - return action.isOpen ? false : state; - - case 'SET_IS_INSERTER_OPENED': - return action.value; - } - - return state; -} -/** - * Reducer to set the list view panel open or closed. - * - * Note: this reducer interacts with the navigation and inserter panels reducers - * to make sure that only one of the three panels is open at the same time. + +/** + * Reducer used to track the site editor canvas mode (edit or view). * * @param {Object} state Current state. * @param {Object} action Dispatched action. */ - -function listViewPanel() { - let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - let action = arguments.length > 1 ? arguments[1] : undefined; - +function canvasMode(state = 'init', action) { switch (action.type) { - case 'OPEN_NAVIGATION_PANEL_TO_MENU': - return false; - - case 'SET_IS_NAVIGATION_PANEL_OPENED': - return action.isOpen ? false : state; - - case 'SET_IS_INSERTER_OPENED': - return action.value ? false : state; - - case 'SET_IS_LIST_VIEW_OPENED': - return action.isOpen; - } - + case 'SET_CANVAS_MODE': + return action.mode; + } return state; } -/* harmony default export */ var reducer = ((0,external_wp_data_namespaceObject.combineReducers)({ - deviceType, + +/** + * Reducer used to track the site editor canvas container view. + * Default is `undefined`, denoting the default, visual block editor. + * This could be, for example, `'style-book'` (the style book). + * + * @param {string|undefined} state Current state. + * @param {Object} action Dispatched action. + */ +function editorCanvasContainerView(state = undefined, action) { + switch (action.type) { + case 'SET_EDITOR_CANVAS_CONTAINER_VIEW': + return action.view; + } + return state; +} +/* harmony default export */ const reducer = ((0,external_wp_data_namespaceObject.combineReducers)({ settings, editedPost, - homeTemplateId, - navigationPanel, - blockInserterPanel, - listViewPanel -})); - -;// 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","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","notices"] -var external_wp_notices_namespaceObject = window["wp"]["notices"]; -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -function extends_extends() { - 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_extends.apply(this, arguments); -} -// EXTERNAL MODULE: ./node_modules/classnames/index.js -var classnames = __webpack_require__(4403); -var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); -;// CONCATENATED MODULE: external ["wp","components"] -var external_wp_components_namespaceObject = window["wp"]["components"]; -;// CONCATENATED MODULE: external ["wp","primitives"] -var external_wp_primitives_namespaceObject = window["wp"]["primitives"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/check.js - - -/** - * WordPress dependencies - */ - -const 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); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/star-filled.js - - -/** - * WordPress dependencies - */ - -const starFilled = (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: "M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z" -})); -/* harmony default export */ var star_filled = (starFilled); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/star-empty.js - - -/** - * WordPress dependencies - */ - -const starEmpty = (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: "M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z", - clipRule: "evenodd" -})); -/* harmony default export */ var star_empty = (starEmpty); - -;// 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: external "lodash" -var external_lodash_namespaceObject = window["lodash"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/store/actions.js -/** - * WordPress dependencies - */ - - -/** - * Enable the complementary area. - * - * @param {string} scope Complementary area scope. - * @param {string} area Area identifier. - */ - -const enableComplementaryArea = (scope, area) => _ref => { - let { - registry - } = _ref; - - // Return early if there's no area. - if (!area) { - return; - } - - registry.dispatch(external_wp_preferences_namespaceObject.store).set(scope, 'complementaryArea', area); -}; -/** - * Disable the complementary area. - * - * @param {string} scope Complementary area scope. - */ - -const disableComplementaryArea = scope => _ref2 => { - let { - registry - } = _ref2; - registry.dispatch(external_wp_preferences_namespaceObject.store).set(scope, 'complementaryArea', null); -}; -/** - * Pins an item. - * - * @param {string} scope Item scope. - * @param {string} item Item identifier. - * - * @return {Object} Action object. - */ - -const pinItem = (scope, item) => _ref3 => { - let { - registry - } = _ref3; - - // Return early if there's no item. - if (!item) { - return; - } - - const pinnedItems = registry.select(external_wp_preferences_namespaceObject.store).get(scope, 'pinnedItems'); // The item is already pinned, there's nothing to do. - - if ((pinnedItems === null || pinnedItems === void 0 ? void 0 : pinnedItems[item]) === true) { - return; - } - - registry.dispatch(external_wp_preferences_namespaceObject.store).set(scope, 'pinnedItems', { ...pinnedItems, - [item]: true - }); -}; -/** - * Unpins an item. - * - * @param {string} scope Item scope. - * @param {string} item Item identifier. - */ - -const unpinItem = (scope, item) => _ref4 => { - let { - registry - } = _ref4; - - // Return early if there's no item. - if (!item) { - return; - } - - const pinnedItems = registry.select(external_wp_preferences_namespaceObject.store).get(scope, 'pinnedItems'); - registry.dispatch(external_wp_preferences_namespaceObject.store).set(scope, 'pinnedItems', { ...pinnedItems, - [item]: false - }); -}; -/** - * Returns an action object used in signalling that a feature should be toggled. - * - * @param {string} scope The feature scope (e.g. core/edit-post). - * @param {string} featureName The feature name. - */ - -function toggleFeature(scope, featureName) { - return function (_ref5) { - let { - registry - } = _ref5; - external_wp_deprecated_default()(`dispatch( 'core/interface' ).toggleFeature`, { - since: '6.0', - alternative: `dispatch( 'core/preferences' ).toggle` - }); - registry.dispatch(external_wp_preferences_namespaceObject.store).toggle(scope, featureName); - }; -} -/** - * Returns an action object used in signalling that a feature should be set to - * a true or false value - * - * @param {string} scope The feature scope (e.g. core/edit-post). - * @param {string} featureName The feature name. - * @param {boolean} value The value to set. - * - * @return {Object} Action object. - */ - -function setFeatureValue(scope, featureName, value) { - return function (_ref6) { - let { - registry - } = _ref6; - external_wp_deprecated_default()(`dispatch( 'core/interface' ).setFeatureValue`, { - since: '6.0', - alternative: `dispatch( 'core/preferences' ).set` - }); - registry.dispatch(external_wp_preferences_namespaceObject.store).set(scope, featureName, !!value); - }; -} -/** - * Returns an action object used in signalling that defaults should be set for features. - * - * @param {string} scope The feature scope (e.g. core/edit-post). - * @param {Object} defaults A key/value map of feature names to values. - * - * @return {Object} Action object. - */ - -function setFeatureDefaults(scope, defaults) { - return function (_ref7) { - let { - registry - } = _ref7; - external_wp_deprecated_default()(`dispatch( 'core/interface' ).setFeatureDefaults`, { - since: '6.0', - alternative: `dispatch( 'core/preferences' ).setDefaults` - }); - registry.dispatch(external_wp_preferences_namespaceObject.store).setDefaults(scope, defaults); - }; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/store/selectors.js -/** - * WordPress dependencies - */ - - - -/** - * Returns the complementary area that is active in a given scope. - * - * @param {Object} state Global application state. - * @param {string} scope Item scope. - * - * @return {string} The complementary area that is active in the given scope. - */ - -const getActiveComplementaryArea = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, scope) => { - return select(external_wp_preferences_namespaceObject.store).get(scope, 'complementaryArea'); -}); -/** - * Returns a boolean indicating if an item is pinned or not. - * - * @param {Object} state Global application state. - * @param {string} scope Scope. - * @param {string} item Item to check. - * - * @return {boolean} True if the item is pinned and false otherwise. - */ - -const isItemPinned = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, scope, item) => { - var _pinnedItems$item; - - const pinnedItems = select(external_wp_preferences_namespaceObject.store).get(scope, 'pinnedItems'); - return (_pinnedItems$item = pinnedItems === null || pinnedItems === void 0 ? void 0 : pinnedItems[item]) !== null && _pinnedItems$item !== void 0 ? _pinnedItems$item : true; -}); -/** - * Returns a boolean indicating whether a feature is active for a particular - * scope. - * - * @param {Object} state The store state. - * @param {string} scope The scope of the feature (e.g. core/edit-post). - * @param {string} featureName The name of the feature. - * - * @return {boolean} Is the feature enabled? - */ - -const isFeatureActive = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, scope, featureName) => { - external_wp_deprecated_default()(`select( 'core/interface' ).isFeatureActive( scope, featureName )`, { - since: '6.0', - alternative: `select( 'core/preferences' ).get( scope, featureName )` - }); - return !!select(external_wp_preferences_namespaceObject.store).get(scope, featureName); -}); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/store/constants.js -/** - * The identifier for the data store. - * - * @type {string} - */ -const constants_STORE_NAME = 'core/interface'; - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/store/index.js -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - - - -/** - * Store definition for the interface namespace. - * - * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore - * - * @type {Object} - */ - -const store = (0,external_wp_data_namespaceObject.createReduxStore)(constants_STORE_NAME, { - reducer: () => {}, - actions: actions_namespaceObject, - selectors: selectors_namespaceObject -}); // Once we build a more generic persistence plugin that works across types of stores -// we'd be able to replace this with a register call. - -(0,external_wp_data_namespaceObject.register)(store); - -;// CONCATENATED MODULE: external ["wp","plugins"] -var external_wp_plugins_namespaceObject = window["wp"]["plugins"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/complementary-area-context/index.js -/** - * WordPress dependencies - */ - -/* harmony default export */ var complementary_area_context = ((0,external_wp_plugins_namespaceObject.withPluginContext)((context, ownProps) => { - return { - icon: ownProps.icon || context.icon, - identifier: ownProps.identifier || `${context.name}/${ownProps.name}` - }; + saveViewPanel, + canvasMode, + editorCanvasContainerView })); -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/complementary-area-toggle/index.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - - -function ComplementaryAreaToggle(_ref) { - let { - as = external_wp_components_namespaceObject.Button, - scope, - identifier, - icon, - selectedIcon, - ...props - } = _ref; - const ComponentToUse = as; - const isSelected = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getActiveComplementaryArea(scope) === identifier, [identifier]); - const { - enableComplementaryArea, - disableComplementaryArea - } = (0,external_wp_data_namespaceObject.useDispatch)(store); - return (0,external_wp_element_namespaceObject.createElement)(ComponentToUse, extends_extends({ - icon: selectedIcon && isSelected ? selectedIcon : icon, - onClick: () => { - if (isSelected) { - disableComplementaryArea(scope); - } else { - enableComplementaryArea(scope, identifier); - } - } - }, (0,external_lodash_namespaceObject.omit)(props, ['name']))); -} - -/* harmony default export */ var complementary_area_toggle = (complementary_area_context(ComplementaryAreaToggle)); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/complementary-area-header/index.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - -const ComplementaryAreaHeader = _ref => { - let { - smallScreenTitle, - children, - className, - toggleButtonProps - } = _ref; - const toggleButton = (0,external_wp_element_namespaceObject.createElement)(complementary_area_toggle, extends_extends({ - icon: close_small - }, toggleButtonProps)); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "components-panel__header interface-complementary-area-header__small" - }, smallScreenTitle && (0,external_wp_element_namespaceObject.createElement)("span", { - className: "interface-complementary-area-header__small-title" - }, smallScreenTitle), toggleButton), (0,external_wp_element_namespaceObject.createElement)("div", { - className: classnames_default()('components-panel__header', 'interface-complementary-area-header', className), - tabIndex: -1 - }, children, toggleButton)); -}; - -/* harmony default export */ var complementary_area_header = (ComplementaryAreaHeader); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/action-item/index.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - -function ActionItemSlot(_ref) { - let { - name, - as: Component = external_wp_components_namespaceObject.ButtonGroup, - fillProps = {}, - bubblesVirtually, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Slot, { - name: name, - bubblesVirtually: bubblesVirtually, - fillProps: fillProps - }, fills => { - if ((0,external_lodash_namespaceObject.isEmpty)(external_wp_element_namespaceObject.Children.toArray(fills))) { - return null; - } // Special handling exists for backward compatibility. - // It ensures that menu items created by plugin authors aren't - // duplicated with automatically injected menu items coming - // from pinnable plugin sidebars. - // @see https://github.com/WordPress/gutenberg/issues/14457 - - - const initializedByPlugins = []; - external_wp_element_namespaceObject.Children.forEach(fills, _ref2 => { - let { - props: { - __unstableExplicitMenuItem, - __unstableTarget - } - } = _ref2; - - if (__unstableTarget && __unstableExplicitMenuItem) { - initializedByPlugins.push(__unstableTarget); - } - }); - const children = external_wp_element_namespaceObject.Children.map(fills, child => { - if (!child.props.__unstableExplicitMenuItem && initializedByPlugins.includes(child.props.__unstableTarget)) { - return null; - } - - return child; - }); - return (0,external_wp_element_namespaceObject.createElement)(Component, props, children); - }); -} - -function ActionItem(_ref3) { - let { - name, - as: Component = external_wp_components_namespaceObject.Button, - onClick, - ...props - } = _ref3; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Fill, { - name: name - }, _ref4 => { - let { - onClick: fpOnClick - } = _ref4; - return (0,external_wp_element_namespaceObject.createElement)(Component, extends_extends({ - onClick: onClick || fpOnClick ? function () { - (onClick || external_lodash_namespaceObject.noop)(...arguments); - (fpOnClick || external_lodash_namespaceObject.noop)(...arguments); - } : undefined - }, props)); - }); -} - -ActionItem.Slot = ActionItemSlot; -/* harmony default export */ var action_item = (ActionItem); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/complementary-area-more-menu-item/index.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - - -const PluginsMenuItem = props => // Menu item is marked with unstable prop for backward compatibility. -// They are removed so they don't leak to DOM elements. -// @see https://github.com/WordPress/gutenberg/issues/14457 -(0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, (0,external_lodash_namespaceObject.omit)(props, ['__unstableExplicitMenuItem', '__unstableTarget'])); - -function ComplementaryAreaMoreMenuItem(_ref) { - let { - scope, - target, - __unstableExplicitMenuItem, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(complementary_area_toggle, extends_extends({ - as: toggleProps => { - return (0,external_wp_element_namespaceObject.createElement)(action_item, extends_extends({ - __unstableExplicitMenuItem: __unstableExplicitMenuItem, - __unstableTarget: `${scope}/${target}`, - as: PluginsMenuItem, - name: `${scope}/plugin-more-menu` - }, toggleProps)); - }, - role: "menuitemcheckbox", - selectedIcon: library_check, - name: target, - scope: scope - }, props)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/pinned-items/index.js - - - -/** - * External dependencies - */ - - -/** - * WordPress dependencies - */ - - - -function PinnedItems(_ref) { - let { - scope, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Fill, extends_extends({ - name: `PinnedItems/${scope}` - }, props)); -} - -function PinnedItemsSlot(_ref2) { - let { - scope, - className, - ...props - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Slot, extends_extends({ - name: `PinnedItems/${scope}` - }, props), fills => !(0,external_lodash_namespaceObject.isEmpty)(fills) && (0,external_wp_element_namespaceObject.createElement)("div", { - className: classnames_default()(className, 'interface-pinned-items') - }, fills)); -} - -PinnedItems.Slot = PinnedItemsSlot; -/* harmony default export */ var pinned_items = (PinnedItems); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/complementary-area/index.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - - - - -/** - * Internal dependencies - */ - - - - - - - - -function ComplementaryAreaSlot(_ref) { - let { - scope, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Slot, extends_extends({ - name: `ComplementaryArea/${scope}` - }, props)); -} - -function ComplementaryAreaFill(_ref2) { - let { - scope, - children, - className - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Fill, { - name: `ComplementaryArea/${scope}` - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: className - }, children)); -} - -function useAdjustComplementaryListener(scope, identifier, activeArea, isActive, isSmall) { - const previousIsSmall = (0,external_wp_element_namespaceObject.useRef)(false); - const shouldOpenWhenNotSmall = (0,external_wp_element_namespaceObject.useRef)(false); - const { - enableComplementaryArea, - disableComplementaryArea - } = (0,external_wp_data_namespaceObject.useDispatch)(store); - (0,external_wp_element_namespaceObject.useEffect)(() => { - // If the complementary area is active and the editor is switching from a big to a small window size. - if (isActive && isSmall && !previousIsSmall.current) { - // Disable the complementary area. - disableComplementaryArea(scope); // Flag the complementary area to be reopened when the window size goes from small to big. - - shouldOpenWhenNotSmall.current = true; - } else if ( // If there is a flag indicating the complementary area should be enabled when we go from small to big window size - // and we are going from a small to big window size. - shouldOpenWhenNotSmall.current && !isSmall && previousIsSmall.current) { - // Remove the flag indicating the complementary area should be enabled. - shouldOpenWhenNotSmall.current = false; // Enable the complementary area. - - enableComplementaryArea(scope, identifier); - } else if ( // If the flag is indicating the current complementary should be reopened but another complementary area becomes active, - // remove the flag. - shouldOpenWhenNotSmall.current && activeArea && activeArea !== identifier) { - shouldOpenWhenNotSmall.current = false; - } - - if (isSmall !== previousIsSmall.current) { - previousIsSmall.current = isSmall; - } - }, [isActive, isSmall, scope, identifier, activeArea]); -} - -function ComplementaryArea(_ref3) { - let { - children, - className, - closeLabel = (0,external_wp_i18n_namespaceObject.__)('Close plugin'), - identifier, - header, - headerClassName, - icon, - isPinnable = true, - panelClassName, - scope, - name, - smallScreenTitle, - title, - toggleShortcut, - isActiveByDefault, - showIconLabels = false - } = _ref3; - const { - isActive, - isPinned, - activeArea, - isSmall, - isLarge - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - getActiveComplementaryArea, - isItemPinned - } = select(store); - - const _activeArea = getActiveComplementaryArea(scope); - - return { - isActive: _activeArea === identifier, - isPinned: isItemPinned(scope, identifier), - activeArea: _activeArea, - isSmall: select(external_wp_viewport_namespaceObject.store).isViewportMatch('< medium'), - isLarge: select(external_wp_viewport_namespaceObject.store).isViewportMatch('large') - }; - }, [identifier, scope]); - useAdjustComplementaryListener(scope, identifier, activeArea, isActive, isSmall); - const { - enableComplementaryArea, - disableComplementaryArea, - pinItem, - unpinItem - } = (0,external_wp_data_namespaceObject.useDispatch)(store); - (0,external_wp_element_namespaceObject.useEffect)(() => { - if (isActiveByDefault && activeArea === undefined && !isSmall) { - enableComplementaryArea(scope, identifier); - } - }, [activeArea, isActiveByDefault, scope, identifier, isSmall]); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, isPinnable && (0,external_wp_element_namespaceObject.createElement)(pinned_items, { - scope: scope - }, isPinned && (0,external_wp_element_namespaceObject.createElement)(complementary_area_toggle, { - scope: scope, - identifier: identifier, - isPressed: isActive && (!showIconLabels || isLarge), - "aria-expanded": isActive, - label: title, - icon: showIconLabels ? library_check : icon, - showTooltip: !showIconLabels, - variant: showIconLabels ? 'tertiary' : undefined - })), name && isPinnable && (0,external_wp_element_namespaceObject.createElement)(ComplementaryAreaMoreMenuItem, { - target: name, - scope: scope, - icon: icon - }, title), isActive && (0,external_wp_element_namespaceObject.createElement)(ComplementaryAreaFill, { - className: classnames_default()('interface-complementary-area', className), - scope: scope - }, (0,external_wp_element_namespaceObject.createElement)(complementary_area_header, { - className: headerClassName, - closeLabel: closeLabel, - onClose: () => disableComplementaryArea(scope), - smallScreenTitle: smallScreenTitle, - toggleButtonProps: { - label: closeLabel, - shortcut: toggleShortcut, - scope, - identifier - } - }, header || (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("strong", null, title), isPinnable && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - className: "interface-complementary-area__pin-unpin-item", - icon: isPinned ? star_filled : star_empty, - label: isPinned ? (0,external_wp_i18n_namespaceObject.__)('Unpin from toolbar') : (0,external_wp_i18n_namespaceObject.__)('Pin to toolbar'), - onClick: () => (isPinned ? unpinItem : pinItem)(scope, identifier), - isPressed: isPinned, - "aria-expanded": isPinned - }))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Panel, { - className: panelClassName - }, children))); -} - -const ComplementaryAreaWrapped = complementary_area_context(ComplementaryArea); -ComplementaryAreaWrapped.Slot = ComplementaryAreaSlot; -/* harmony default export */ var complementary_area = (ComplementaryAreaWrapped); - -;// CONCATENATED MODULE: external ["wp","compose"] -var external_wp_compose_namespaceObject = window["wp"]["compose"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/interface-skeleton/index.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - -/** - * WordPress dependencies - */ - - - - - - -function useHTMLClass(className) { - (0,external_wp_element_namespaceObject.useEffect)(() => { - const element = document && document.querySelector(`html:not(.${className})`); - - if (!element) { - return; - } - - element.classList.toggle(className); - return () => { - element.classList.toggle(className); - }; - }, [className]); -} - -function InterfaceSkeleton(_ref, ref) { - let { - footer, - header, - sidebar, - secondarySidebar, - notices, - content, - drawer, - actions, - labels, - className, - shortcuts - } = _ref; - const navigateRegionsProps = (0,external_wp_components_namespaceObject.__unstableUseNavigateRegions)(shortcuts); - useHTMLClass('interface-interface-skeleton__html-container'); - const defaultLabels = { - /* translators: accessibility text for the nav bar landmark region. */ - drawer: (0,external_wp_i18n_namespaceObject.__)('Drawer'), - - /* translators: accessibility text for the top bar landmark region. */ - header: (0,external_wp_i18n_namespaceObject.__)('Header'), - - /* translators: accessibility text for the content landmark region. */ - body: (0,external_wp_i18n_namespaceObject.__)('Content'), - - /* translators: accessibility text for the secondary sidebar landmark region. */ - secondarySidebar: (0,external_wp_i18n_namespaceObject.__)('Block Library'), - - /* translators: accessibility text for the settings landmark region. */ - sidebar: (0,external_wp_i18n_namespaceObject.__)('Settings'), - - /* translators: accessibility text for the publish landmark region. */ - actions: (0,external_wp_i18n_namespaceObject.__)('Publish'), - - /* translators: accessibility text for the footer landmark region. */ - footer: (0,external_wp_i18n_namespaceObject.__)('Footer') - }; - const mergedLabels = { ...defaultLabels, - ...labels - }; - return (0,external_wp_element_namespaceObject.createElement)("div", extends_extends({}, navigateRegionsProps, { - ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([ref, navigateRegionsProps.ref]), - className: classnames_default()(className, 'interface-interface-skeleton', navigateRegionsProps.className, !!footer && 'has-footer') - }), !!drawer && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__drawer", - role: "region", - "aria-label": mergedLabels.drawer, - tabIndex: "-1" - }, drawer), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__editor" - }, !!header && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__header", - role: "region", - "aria-label": mergedLabels.header, - tabIndex: "-1" - }, header), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__body" - }, !!secondarySidebar && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__secondary-sidebar", - role: "region", - "aria-label": mergedLabels.secondarySidebar, - tabIndex: "-1" - }, secondarySidebar), !!notices && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__notices" - }, notices), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__content", - role: "region", - "aria-label": mergedLabels.body, - tabIndex: "-1" - }, content), !!sidebar && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__sidebar", - role: "region", - "aria-label": mergedLabels.sidebar, - tabIndex: "-1" - }, sidebar), !!actions && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__actions", - role: "region", - "aria-label": mergedLabels.actions, - tabIndex: "-1" - }, actions))), !!footer && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-interface-skeleton__footer", - role: "region", - "aria-label": mergedLabels.footer, - tabIndex: "-1" - }, footer)); -} - -/* harmony default export */ var interface_skeleton = ((0,external_wp_element_namespaceObject.forwardRef)(InterfaceSkeleton)); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/more-vertical.js - - -/** - * WordPress dependencies - */ - -const moreVertical = (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: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" -})); -/* harmony default export */ var more_vertical = (moreVertical); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/more-menu-dropdown/index.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - -function MoreMenuDropdown(_ref) { - let { - as: DropdownComponent = external_wp_components_namespaceObject.DropdownMenu, - className, - - /* translators: button label text should, if possible, be under 16 characters. */ - label = (0,external_wp_i18n_namespaceObject.__)('Options'), - popoverProps, - toggleProps, - children - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(DropdownComponent, { - className: classnames_default()('interface-more-menu-dropdown', className), - icon: more_vertical, - label: label, - popoverProps: { - position: 'bottom left', - ...popoverProps, - className: classnames_default()('interface-more-menu-dropdown__content', popoverProps === null || popoverProps === void 0 ? void 0 : popoverProps.className) - }, - toggleProps: { - tooltipPosition: 'bottom', - ...toggleProps - } - }, onClose => children(onClose)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/preferences-modal/index.js - - -/** - * WordPress dependencies - */ - - -function PreferencesModal(_ref) { - let { - closeModal, - children - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Modal, { - className: "interface-preferences-modal", - title: (0,external_wp_i18n_namespaceObject.__)('Preferences'), - closeLabel: (0,external_wp_i18n_namespaceObject.__)('Close'), - onRequestClose: closeModal - }, children); -} - -;// 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/chevron-left.js - - -/** - * WordPress dependencies - */ - -const chevronLeft = (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: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z" -})); -/* harmony default export */ var chevron_left = (chevronLeft); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-right.js - - -/** - * WordPress dependencies - */ - -const chevronRight = (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: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z" -})); -/* harmony default export */ var chevron_right = (chevronRight); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/preferences-modal-tabs/index.js - - -/** - * WordPress dependencies - */ - - - - - -const PREFERENCES_MENU = 'preferences-menu'; -function PreferencesModalTabs(_ref) { - let { - sections - } = _ref; - const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium'); // This is also used to sync the two different rendered components - // between small and large viewports. - - const [activeMenu, setActiveMenu] = (0,external_wp_element_namespaceObject.useState)(PREFERENCES_MENU); - /** - * Create helper objects from `sections` for easier data handling. - * `tabs` is used for creating the `TabPanel` and `sectionsContentMap` - * is used for easier access to active tab's content. - */ - - const { - tabs, - sectionsContentMap - } = (0,external_wp_element_namespaceObject.useMemo)(() => { - let mappedTabs = { - tabs: [], - sectionsContentMap: {} - }; - - if (sections.length) { - mappedTabs = sections.reduce((accumulator, _ref2) => { - let { - name, - tabLabel: title, - content - } = _ref2; - accumulator.tabs.push({ - name, - title - }); - accumulator.sectionsContentMap[name] = content; - return accumulator; - }, { - tabs: [], - sectionsContentMap: {} - }); - } - - return mappedTabs; - }, [sections]); - const getCurrentTab = (0,external_wp_element_namespaceObject.useCallback)(tab => sectionsContentMap[tab.name] || null, [sectionsContentMap]); - let modalContent; // We render different components based on the viewport size. - - if (isLargeViewport) { - modalContent = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TabPanel, { - className: "interface-preferences__tabs", - tabs: tabs, - initialTabName: activeMenu !== PREFERENCES_MENU ? activeMenu : undefined, - onSelect: setActiveMenu, - orientation: "vertical" - }, getCurrentTab); - } else { - modalContent = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorProvider, { - initialPath: "/", - className: "interface-preferences__provider" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorScreen, { - path: "/" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Card, { - isBorderless: true, - size: "small" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardBody, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItemGroup, null, tabs.map(tab => { - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorButton, { - key: tab.name, - path: tab.name, - as: external_wp_components_namespaceObject.__experimentalItem, - isAction: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "space-between" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalTruncate, null, tab.title)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(icon, { - icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right - })))); - }))))), sections.length && sections.map(section => { - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorScreen, { - key: `${section.name}-menu`, - path: section.name - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Card, { - isBorderless: true, - size: "large" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardHeader, { - isBorderless: false, - justify: "left", - size: "small", - gap: "6" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorBackButton, { - icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left, - "aria-label": (0,external_wp_i18n_namespaceObject.__)('Navigate to the previous view') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalText, { - size: "16" - }, section.tabLabel)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardBody, null, section.content))); - })); - } - - return modalContent; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/preferences-modal-section/index.js - - -const Section = _ref => { - let { - description, - title, - children - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)("fieldset", { - className: "interface-preferences-modal__section" - }, (0,external_wp_element_namespaceObject.createElement)("legend", null, (0,external_wp_element_namespaceObject.createElement)("h2", { - className: "interface-preferences-modal__section-title" - }, title), description && (0,external_wp_element_namespaceObject.createElement)("p", { - className: "interface-preferences-modal__section-description" - }, description)), children); -}; - -/* harmony default export */ var preferences_modal_section = (Section); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/preferences-modal-base-option/index.js - - -/** - * WordPress dependencies - */ - - -function BaseOption(_ref) { - let { - help, - label, - isChecked, - onChange, - children - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: "interface-preferences-modal__option" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ToggleControl, { - help: help, - label: label, - checked: isChecked, - onChange: onChange - }), children); -} - -/* harmony default export */ var preferences_modal_base_option = (BaseOption); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/components/index.js - - - - - - - - - - - - - -;// CONCATENATED MODULE: ./node_modules/@wordpress/interface/build-module/index.js - - - -;// CONCATENATED MODULE: external ["wp","blockEditor"] -var external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"]; -;// CONCATENATED MODULE: external ["wp","a11y"] -var external_wp_a11y_namespaceObject = window["wp"]["a11y"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/utils/is-template-revertable.js -/** - * Check if a template is revertable to its original theme-provided template file. - * - * @param {Object} template The template entity to check. - * @return {boolean} Whether the template is revertable. - */ -function isTemplateRevertable(template) { - if (!template) { - return false; - } - /* eslint-disable camelcase */ - - - return (template === null || template === void 0 ? void 0 : template.source) === 'custom' && (template === null || template === void 0 ? void 0 : template.has_theme_file); - /* eslint-enable camelcase */ -} +;// CONCATENATED MODULE: external ["wp","patterns"] +const external_wp_patterns_namespaceObject = window["wp"]["patterns"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/utils/constants.js +/** + * WordPress dependencies + */ + + + +/** + * Internal dependencies + */ + + +// Navigation +const NAVIGATION_POST_TYPE = 'wp_navigation'; + +// Templates. +const TEMPLATE_POST_TYPE = 'wp_template'; +const TEMPLATE_PART_POST_TYPE = 'wp_template_part'; +const TEMPLATE_ORIGINS = { + custom: 'custom', + theme: 'theme', + plugin: 'plugin' +}; +const TEMPLATE_PART_AREA_DEFAULT_CATEGORY = 'uncategorized'; +const TEMPLATE_PART_ALL_AREAS_CATEGORY = 'all-parts'; + +// Patterns. +const { + PATTERN_TYPES, + PATTERN_DEFAULT_CATEGORY, + PATTERN_USER_CATEGORY, + EXCLUDED_PATTERN_SOURCES, + PATTERN_SYNC_TYPES +} = lock_unlock_unlock(external_wp_patterns_namespaceObject.privateApis); + +// Entities that are editable in focus mode. +const FOCUSABLE_ENTITIES = [TEMPLATE_PART_POST_TYPE, NAVIGATION_POST_TYPE, PATTERN_TYPES.user]; +const POST_TYPE_LABELS = { + [TEMPLATE_POST_TYPE]: (0,external_wp_i18n_namespaceObject.__)('Template'), + [TEMPLATE_PART_POST_TYPE]: (0,external_wp_i18n_namespaceObject.__)('Template part'), + [PATTERN_TYPES.user]: (0,external_wp_i18n_namespaceObject.__)('Pattern'), + [NAVIGATION_POST_TYPE]: (0,external_wp_i18n_namespaceObject.__)('Navigation') +}; + +// DataViews constants +const LAYOUT_GRID = 'grid'; +const LAYOUT_TABLE = 'table'; +const LAYOUT_LIST = 'list'; +const OPERATOR_IS = 'is'; +const OPERATOR_IS_NOT = 'isNot'; +const OPERATOR_IS_ANY = 'isAny'; +const OPERATOR_IS_NONE = 'isNone'; ;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/actions.js /** @@ -2687,143 +8319,112 @@ - - - - -/** - * Internal dependencies - */ - - +/** + * Internal dependencies + */ + + +const { + interfaceStore +} = lock_unlock_unlock(external_wp_editor_namespaceObject.privateApis); /** * Dispatches an action that toggles a feature flag. * * @param {string} featureName Feature name. */ - -function actions_toggleFeature(featureName) { - return function (_ref) { - let { - registry - } = _ref; - external_wp_deprecated_default()("select( 'core/edit-site' ).toggleFeature( featureName )", { +function toggleFeature(featureName) { + return function ({ + registry + }) { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).toggleFeature( featureName )", { since: '6.0', - alternative: "select( 'core/preferences').toggle( 'core/edit-site', featureName )" + alternative: "dispatch( 'core/preferences').toggle( 'core/edit-site', featureName )" }); registry.dispatch(external_wp_preferences_namespaceObject.store).toggle('core/edit-site', featureName); }; } + /** * Action that changes the width of the editing canvas. * + * @deprecated + * * @param {string} deviceType * * @return {Object} Action object. */ - -function __experimentalSetPreviewDeviceType(deviceType) { - return { - type: 'SET_PREVIEW_DEVICE_TYPE', - deviceType - }; -} +const __experimentalSetPreviewDeviceType = deviceType => ({ + registry +}) => { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).__experimentalSetPreviewDeviceType", { + since: '6.5', + version: '6.7', + hint: 'registry.dispatch( editorStore ).setDeviceType' + }); + registry.dispatch(external_wp_editor_namespaceObject.store).setDeviceType(deviceType); +}; + /** * Action that sets a template, optionally fetching it from REST API. * - * @param {number} templateId The template ID. - * @param {string} templateSlug The template slug. * @return {Object} Action object. */ - -const setTemplate = (templateId, templateSlug) => async _ref2 => { - let { - dispatch, - registry - } = _ref2; - - if (!templateSlug) { - const template = await registry.resolveSelect(external_wp_coreData_namespaceObject.store).getEntityRecord('postType', 'wp_template', templateId); - templateSlug = template === null || template === void 0 ? void 0 : template.slug; - } - - dispatch({ - type: 'SET_TEMPLATE', - templateId, - page: { - context: { - templateSlug - } - } - }); -}; +function setTemplate() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setTemplate", { + since: '6.5', + version: '6.8', + hint: 'The setTemplate is not needed anymore, the correct entity is resolved from the URL automatically.' + }); + return { + type: 'NOTHING' + }; +} + /** * Action that adds a new template and sets it as the current template. * * @param {Object} template The template. * + * @deprecated + * * @return {Object} Action object used to set the current template. */ - -const addTemplate = template => async _ref3 => { - let { - dispatch, - registry - } = _ref3; - const newTemplate = await registry.dispatch(external_wp_coreData_namespaceObject.store).saveEntityRecord('postType', 'wp_template', template); - +const addTemplate = template => async ({ + dispatch, + registry +}) => { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).addTemplate", { + since: '6.5', + version: '6.8', + hint: 'use saveEntityRecord directly' + }); + const newTemplate = await registry.dispatch(external_wp_coreData_namespaceObject.store).saveEntityRecord('postType', TEMPLATE_POST_TYPE, template); if (template.content) { - registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', 'wp_template', newTemplate.id, { + registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', TEMPLATE_POST_TYPE, newTemplate.id, { blocks: (0,external_wp_blocks_namespaceObject.parse)(template.content) }, { undoIgnore: true }); } - dispatch({ - type: 'SET_TEMPLATE', - templateId: newTemplate.id, - page: { - context: { - templateSlug: newTemplate.slug - } - } - }); -}; + type: 'SET_EDITED_POST', + postType: TEMPLATE_POST_TYPE, + id: newTemplate.id + }); +}; + /** * Action that removes a template. * * @param {Object} template The template object. */ - -const removeTemplate = template => async _ref4 => { - let { - registry - } = _ref4; - - try { - await registry.dispatch(external_wp_coreData_namespaceObject.store).deleteEntityRecord('postType', template.type, template.id, { - force: true - }); - const lastError = registry.select(external_wp_coreData_namespaceObject.store).getLastEntityDeleteError('postType', template.type, template.id); - - if (lastError) { - throw lastError; - } - - registry.dispatch(external_wp_notices_namespaceObject.store).createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)( - /* translators: The template/part's name. */ - (0,external_wp_i18n_namespaceObject.__)('"%s" deleted.'), template.title.rendered), { - type: 'snackbar' - }); - } catch (error) { - const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('An error occurred while deleting the template.'); - registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(errorMessage, { - type: 'snackbar' - }); - } -}; +const removeTemplate = template => ({ + registry +}) => { + return lock_unlock_unlock(registry.dispatch(external_wp_editor_namespaceObject.store)).removeTemplates([template]); +}; + /** * Action that sets a template part. * @@ -2831,128 +8432,174 @@ * * @return {Object} Action object. */ - function setTemplatePart(templatePartId) { return { - type: 'SET_TEMPLATE_PART', - templatePartId - }; -} -/** - * Action that sets the home template ID to the template ID of the page resolved - * from a given path. - * - * @param {number} homeTemplateId The template ID for the homepage. - */ - -function setHomeTemplateId(homeTemplateId) { - return { - type: 'SET_HOME_TEMPLATE', - homeTemplateId - }; -} + type: 'SET_EDITED_POST', + postType: TEMPLATE_PART_POST_TYPE, + id: templatePartId + }; +} + +/** + * Action that sets a navigation menu. + * + * @param {string} navigationMenuId The Navigation Menu Post ID. + * + * @return {Object} Action object. + */ +function setNavigationMenu(navigationMenuId) { + return { + type: 'SET_EDITED_POST', + postType: NAVIGATION_POST_TYPE, + id: navigationMenuId + }; +} + +/** + * Action that sets an edited entity. + * + * @param {string} postType The entity's post type. + * @param {string} postId The entity's ID. + * @param {Object} context The entity's context. + * + * @return {Object} Action object. + */ +function setEditedEntity(postType, postId, context) { + return { + type: 'SET_EDITED_POST', + postType, + id: postId, + context + }; +} + +/** + * @deprecated + */ +function setHomeTemplateId() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setHomeTemplateId", { + since: '6.2', + version: '6.4' + }); + return { + type: 'NOTHING' + }; +} + +/** + * Set's the current block editor context. + * + * @param {Object} context The context object. + * + * @return {Object} Action object. + */ +function setEditedPostContext(context) { + return { + type: 'SET_EDITED_POST_CONTEXT', + context + }; +} + /** * Resolves the template for a page and displays both. If no path is given, attempts * to use the postId to generate a path like `?p=${ postId }`. * - * @param {Object} page The page object. - * @param {string} page.type The page type. - * @param {string} page.slug The page slug. - * @param {string} page.path The page path. - * @param {Object} page.context The page context. - * - * @return {number} The resolved template ID for the page route. - */ - -const setPage = page => async _ref5 => { - var _page$context; - - let { - dispatch, - registry - } = _ref5; - - if (!page.path && (_page$context = page.context) !== null && _page$context !== void 0 && _page$context.postId) { - const entity = await registry.resolveSelect(external_wp_coreData_namespaceObject.store).getEntityRecord('postType', page.context.postType || 'post', page.context.postId); // If the entity is undefined for some reason, path will resolve to "/" - - page.path = (0,external_wp_url_namespaceObject.getPathAndQueryString)(entity === null || entity === void 0 ? void 0 : entity.link); - } - - const template = await registry.resolveSelect(external_wp_coreData_namespaceObject.store).__experimentalGetTemplateForLink(page.path); - - if (!template) { - return; - } - - dispatch({ - type: 'SET_PAGE', - page: template.slug ? { ...page, - context: { ...page.context, - templateSlug: template.slug - } - } : page, - templateId: template.id - }); - return template.id; -}; + * @deprecated + * + * @return {Object} Action object. + */ +function setPage() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setPage", { + since: '6.5', + version: '6.8', + hint: 'The setPage is not needed anymore, the correct entity is resolved from the URL automatically.' + }); + return { + type: 'NOTHING' + }; +} + /** * Action that sets the active navigation panel menu. * - * @param {string} menu Menu prop of active menu. + * @deprecated * * @return {Object} Action object. */ - -function setNavigationPanelActiveMenu(menu) { - return { - type: 'SET_NAVIGATION_PANEL_ACTIVE_MENU', - menu - }; -} +function setNavigationPanelActiveMenu() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setNavigationPanelActiveMenu", { + since: '6.2', + version: '6.4' + }); + return { + type: 'NOTHING' + }; +} + /** * Opens the navigation panel and sets its active menu at the same time. * - * @param {string} menu Identifies the menu to open. - */ - -function openNavigationPanelToMenu(menu) { - return { - type: 'OPEN_NAVIGATION_PANEL_TO_MENU', - menu - }; -} + * @deprecated + */ +function openNavigationPanelToMenu() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).openNavigationPanelToMenu", { + since: '6.2', + version: '6.4' + }); + return { + type: 'NOTHING' + }; +} + /** * Sets whether the navigation panel should be open. * - * @param {boolean} isOpen If true, opens the nav panel. If false, closes it. It - * does not toggle the state, but sets it directly. - */ - -function setIsNavigationPanelOpened(isOpen) { - return { - type: 'SET_IS_NAVIGATION_PANEL_OPENED', - isOpen - }; -} -/** - * Opens or closes the inserter. - * - * @param {boolean|Object} value Whether the inserter should be - * opened (true) or closed (false). - * To specify an insertion point, - * use an object. - * @param {string} value.rootClientId The root client ID to insert at. - * @param {number} value.insertionIndex The index to insert at. - * - * @return {Object} Action object. - */ - -function setIsInserterOpened(value) { - return { - type: 'SET_IS_INSERTER_OPENED', - value - }; -} + * @deprecated + */ +function setIsNavigationPanelOpened() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setIsNavigationPanelOpened", { + since: '6.2', + version: '6.4' + }); + return { + type: 'NOTHING' + }; +} + +/** + * Returns an action object used to open/close the inserter. + * + * @deprecated + * + * @param {boolean|Object} value Whether the inserter should be opened (true) or closed (false). + */ +const setIsInserterOpened = value => ({ + registry +}) => { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setIsInserterOpened", { + since: '6.5', + alternative: "dispatch( 'core/editor').setIsInserterOpened" + }); + registry.dispatch(external_wp_editor_namespaceObject.store).setIsInserterOpened(value); +}; + +/** + * Returns an action object used to open/close the list view. + * + * @deprecated + * + * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed. + */ +const setIsListViewOpened = isOpen => ({ + registry +}) => { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setIsListViewOpened", { + since: '6.5', + alternative: "dispatch( 'core/editor').setIsListViewOpened" + }); + registry.dispatch(external_wp_editor_namespaceObject.store).setIsListViewOpened(isOpen); +}; + /** * Returns an action object used to update the settings. * @@ -2960,26 +8607,26 @@ * * @return {Object} Action object. */ - function updateSettings(settings) { return { type: 'UPDATE_SETTINGS', settings }; } -/** - * Sets whether the list view panel should be open. - * - * @param {boolean} isOpen If true, opens the list view. If false, closes it. + +/** + * Sets whether the save view panel should be open. + * + * @param {boolean} isOpen If true, opens the save view. If false, closes it. * It does not toggle the state, but sets it directly. */ - -function setIsListViewOpened(isOpen) { - return { - type: 'SET_IS_LIST_VIEW_OPENED', +function setIsSaveViewOpened(isOpen) { + return { + type: 'SET_IS_SAVE_VIEW_OPENED', isOpen }; } + /** * Reverts a template to its original theme-provided file. * @@ -2988,508 +8635,177 @@ * @param {boolean} [options.allowUndo] Whether to allow the user to undo * reverting the template. Default true. */ - -const revertTemplate = function (template) { - let { - allowUndo = true - } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - return async _ref6 => { - let { - registry - } = _ref6; - - if (!isTemplateRevertable(template)) { - registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice((0,external_wp_i18n_namespaceObject.__)('This template is not revertable.'), { - type: 'snackbar' - }); - return; - } - - try { - var _fileTemplate$content; - - const templateEntityConfig = registry.select(external_wp_coreData_namespaceObject.store).getEntityConfig('postType', template.type); - - if (!templateEntityConfig) { - registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice((0,external_wp_i18n_namespaceObject.__)('The editor has encountered an unexpected error. Please reload.'), { - type: 'snackbar' - }); - return; - } - - const fileTemplatePath = (0,external_wp_url_namespaceObject.addQueryArgs)(`${templateEntityConfig.baseURL}/${template.id}`, { - context: 'edit', - source: 'theme' - }); - const fileTemplate = await external_wp_apiFetch_default()({ - path: fileTemplatePath - }); - - if (!fileTemplate) { - registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice((0,external_wp_i18n_namespaceObject.__)('The editor has encountered an unexpected error. Please reload.'), { - type: 'snackbar' - }); - return; - } - - const serializeBlocks = _ref7 => { - let { - blocks: blocksForSerialization = [] - } = _ref7; - return (0,external_wp_blocks_namespaceObject.__unstableSerializeAndClean)(blocksForSerialization); - }; - - const edited = registry.select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', template.type, template.id); // We are fixing up the undo level here to make sure we can undo - // the revert in the header toolbar correctly. - - registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', template.type, template.id, { - content: serializeBlocks, - // Required to make the `undo` behave correctly. - blocks: edited.blocks, - // Required to revert the blocks in the editor. - source: 'custom' // required to avoid turning the editor into a dirty state - - }, { - undoIgnore: true // Required to merge this edit with the last undo level. - - }); - const blocks = (0,external_wp_blocks_namespaceObject.parse)(fileTemplate === null || fileTemplate === void 0 ? void 0 : (_fileTemplate$content = fileTemplate.content) === null || _fileTemplate$content === void 0 ? void 0 : _fileTemplate$content.raw); - registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', template.type, fileTemplate.id, { - content: serializeBlocks, - blocks, - source: 'theme' - }); - - if (allowUndo) { - const undoRevert = () => { - registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', template.type, edited.id, { - content: serializeBlocks, - blocks: edited.blocks, - source: 'custom' - }); - }; - - registry.dispatch(external_wp_notices_namespaceObject.store).createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Template reverted.'), { - type: 'snackbar', - actions: [{ - label: (0,external_wp_i18n_namespaceObject.__)('Undo'), - onClick: undoRevert - }] - }); - } else { - registry.dispatch(external_wp_notices_namespaceObject.store).createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Template reverted.')); - } - } catch (error) { - const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('Template revert failed. Please reload.'); - registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(errorMessage, { - type: 'snackbar' - }); - } - }; -}; +const revertTemplate = (template, options) => ({ + registry +}) => { + return lock_unlock_unlock(registry.dispatch(external_wp_editor_namespaceObject.store)).revertTemplate(template, options); +}; + /** * Action that opens an editor sidebar. * * @param {?string} name Sidebar name to be opened. */ - -const openGeneralSidebar = name => _ref8 => { - let { - registry - } = _ref8; - registry.dispatch(store).enableComplementaryArea(STORE_NAME, name); -}; +const openGeneralSidebar = name => ({ + registry +}) => { + registry.dispatch(interfaceStore).enableComplementaryArea('core', name); +}; + /** * Action that closes the sidebar. */ - -const closeGeneralSidebar = () => _ref9 => { - let { - registry - } = _ref9; - registry.dispatch(store).disableComplementaryArea(STORE_NAME); -}; -const switchEditorMode = mode => _ref10 => { - let { - registry - } = _ref10; - registry.dispatch('core/preferences').set('core/edit-site', 'editorMode', mode); // Unselect blocks when we switch to a non visual mode. - - if (mode !== 'visual') { +const closeGeneralSidebar = () => ({ + registry +}) => { + registry.dispatch(interfaceStore).disableComplementaryArea('core'); +}; + +/** + * Triggers an action used to switch editor mode. + * + * @deprecated + * + * @param {string} mode The editor mode. + */ +const switchEditorMode = mode => ({ + registry +}) => { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).switchEditorMode", { + since: '6.6', + alternative: "dispatch( 'core/editor').switchEditorMode" + }); + registry.dispatch(external_wp_editor_namespaceObject.store).switchEditorMode(mode); +}; + +/** + * Sets whether or not the editor allows only page content to be edited. + * + * @param {boolean} hasPageContentFocus True to allow only page content to be + * edited, false to allow template to be + * edited. + */ +const setHasPageContentFocus = hasPageContentFocus => ({ + dispatch, + registry +}) => { + external_wp_deprecated_default()(`dispatch( 'core/edit-site' ).setHasPageContentFocus`, { + since: '6.5' + }); + if (hasPageContentFocus) { registry.dispatch(external_wp_blockEditor_namespaceObject.store).clearSelectedBlock(); } - - if (mode === 'visual') { - (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Visual editor selected'), 'assertive'); - } else if (mode === 'mosaic') { - (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Mosaic view selected'), 'assertive'); - } -}; - -;// CONCATENATED MODULE: ./node_modules/rememo/es/rememo.js - - -var LEAF_KEY, hasWeakMap; - -/** - * Arbitrary value used as key for referencing cache object in WeakMap tree. - * - * @type {Object} - */ -LEAF_KEY = {}; - -/** - * Whether environment supports WeakMap. - * - * @type {boolean} - */ -hasWeakMap = typeof WeakMap !== 'undefined'; - -/** - * Returns the first argument as the sole entry in an array. - * - * @param {*} value Value to return. - * - * @return {Array} 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 {Object} Cache object. - */ -function createCache() { - 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 {Array} a First array. - * @param {Array} 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. - * - * @param {Function} selector Selector function. - * @param {Function} getDependants Dependant getter returning an immutable - * reference or array of reference used in - * cache bust consideration. - * - * @return {Function} Memoized selector. - */ -/* harmony default export */ function rememo(selector, getDependants ) { - var rootCache, getCache; - - // Use object source as dependant if getter not provided - if ( ! getDependants ) { - getDependants = arrayOf; - } - - /** - * Returns the root cache. If WeakMap is supported, this is assigned to the - * root WeakMap cache set, otherwise it is a shared instance of the default - * cache object. - * - * @return {(WeakMap|Object)} Root cache object. - */ - function getRootCache() { - return rootCache; - } - - /** - * 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 {Array} dependants Selector dependants. - * - * @return {Object} Cache object. - */ - function getWeakMapCache( 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 ); - } - - // Assign cache handler by availability of WeakMap - getCache = hasWeakMap ? getWeakMapCache : getRootCache; - - /** - * Resets root memoization cache. - */ - function clear() { - rootCache = hasWeakMap ? new WeakMap() : createCache(); - } - - // eslint-disable-next-line jsdoc/check-param-names - /** - * The augmented selector call, considering first whether dependants have - * changed before passing it to underlying memoize function. - * - * @param {Object} source Source object for derivation. - * @param {...*} extraArgs Additional arguments to pass to selector. - * - * @return {*} Selector result. - */ - 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 = getDependants.apply( null, args ); - cache = getCache( dependants ); - - // If not guaranteed uniqueness by dependants (primitive type or lack - // of WeakMap support), 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. - node.prev.next = node.next; - if ( node.next ) { - node.next.prev = node.prev; - } - - node.next = cache.head; - node.prev = null; - cache.head.prev = node; - cache.head = node; - } - - // Return immediately - return node.val; - } - - // No cached value found. Continue to insertion phase: - - node = { - // 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 = getDependants; - callSelector.clear = clear; - clear(); - - return callSelector; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/navigation-sidebar/navigation-panel/template-hierarchy.js -/** - * External dependencies - */ - -/** - * Internal dependencies - */ - - -function isTemplateSuperseded(slug, existingSlugs, showOnFront) { - if (!TEMPLATE_OVERRIDES[slug]) { - return false; - } // `home` template is unused if it is superseded by `front-page` - // or "show on front" is set to show a page rather than blog posts. - - - if (slug === 'home' && showOnFront !== 'posts') { - return true; - } - - return TEMPLATE_OVERRIDES[slug].every(overrideSlug => existingSlugs.includes(overrideSlug) || isTemplateSuperseded(overrideSlug, existingSlugs, showOnFront)); -} -function getTemplateLocation(slug) { - const isTopLevelTemplate = TEMPLATES_TOP_LEVEL.includes(slug); - - if (isTopLevelTemplate) { - return MENU_TEMPLATES; - } - - const isGeneralTemplate = TEMPLATES_GENERAL.includes(slug); - - if (isGeneralTemplate) { - return MENU_TEMPLATES_GENERAL; - } - - const isPostsTemplate = TEMPLATES_POSTS_PREFIXES.some(prefix => slug.startsWith(prefix)); - - if (isPostsTemplate) { - return MENU_TEMPLATES_POSTS; - } - - const isPagesTemplate = TEMPLATES_PAGES_PREFIXES.some(prefix => slug.startsWith(prefix)); - - if (isPagesTemplate) { - return MENU_TEMPLATES_PAGES; - } - - return MENU_TEMPLATES_GENERAL; -} -function getUnusedTemplates(templates, showOnFront) { - const templateSlugs = map(templates, 'slug'); - const supersededTemplates = templates.filter(_ref => { - let { - slug - } = _ref; - return isTemplateSuperseded(slug, templateSlugs, showOnFront); - }); - return supersededTemplates; -} -function getTemplatesLocationMap(templates) { - return templates.reduce((obj, template) => { - obj[template.slug] = getTemplateLocation(template.slug); - return obj; - }, {}); -} + dispatch({ + type: 'SET_HAS_PAGE_CONTENT_FOCUS', + hasPageContentFocus + }); +}; + +/** + * Action that toggles Distraction free mode. + * Distraction free mode expects there are no sidebars, as due to the + * z-index values set, you can't close sidebars. + * + * @deprecated + */ +const toggleDistractionFree = () => ({ + registry +}) => { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).toggleDistractionFree", { + since: '6.6', + alternative: "dispatch( 'core/editor').toggleDistractionFree" + }); + registry.dispatch(external_wp_editor_namespaceObject.store).toggleDistractionFree(); +}; + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/private-actions.js +/** + * WordPress dependencies + */ + + + + +/** + * Action that switches the canvas mode. + * + * @param {?string} mode Canvas mode. + */ +const setCanvasMode = mode => ({ + registry, + dispatch +}) => { + const isMediumOrBigger = window.matchMedia('(min-width: 782px)').matches; + const switchCanvasMode = () => { + registry.batch(() => { + registry.dispatch(external_wp_blockEditor_namespaceObject.store).clearSelectedBlock(); + registry.dispatch(external_wp_editor_namespaceObject.store).setDeviceType('Desktop'); + registry.dispatch(external_wp_blockEditor_namespaceObject.store).__unstableSetEditorMode('edit'); + const isPublishSidebarOpened = registry.select(external_wp_editor_namespaceObject.store).isPublishSidebarOpened(); + dispatch({ + type: 'SET_CANVAS_MODE', + mode + }); + const isEditMode = mode === 'edit'; + if (isPublishSidebarOpened && !isEditMode) { + registry.dispatch(external_wp_editor_namespaceObject.store).closePublishSidebar(); + } + + // Check if the block list view should be open by default. + // If `distractionFree` mode is enabled, the block list view should not be open. + // This behavior is disabled for small viewports. + if (isMediumOrBigger && isEditMode && registry.select(external_wp_preferences_namespaceObject.store).get('core', 'showListViewByDefault') && !registry.select(external_wp_preferences_namespaceObject.store).get('core', 'distractionFree')) { + registry.dispatch(external_wp_editor_namespaceObject.store).setIsListViewOpened(true); + } else { + registry.dispatch(external_wp_editor_namespaceObject.store).setIsListViewOpened(false); + } + registry.dispatch(external_wp_editor_namespaceObject.store).setIsInserterOpened(false); + }); + }; + + /* + * Skip transition in mobile, otherwise it crashes the browser. + * See: https://github.com/WordPress/gutenberg/pull/63002. + */ + if (!isMediumOrBigger || !document.startViewTransition) { + switchCanvasMode(); + } else { + document.documentElement.classList.add(`canvas-mode-${mode}-transition`); + const transition = document.startViewTransition(() => switchCanvasMode()); + transition.finished.finally(() => { + document.documentElement.classList.remove(`canvas-mode-${mode}-transition`); + }); + } +}; + +/** + * Action that switches the editor canvas container view. + * + * @param {?string} view Editor canvas container view. + */ +const setEditorCanvasContainerView = view => ({ + dispatch +}) => { + dispatch({ + type: 'SET_EDITOR_CANVAS_CONTAINER_VIEW', + view + }); +}; ;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/selectors.js /** - * External dependencies - */ - - -/** - * WordPress dependencies - */ - - - - - - - - -/** - * Internal dependencies - */ - + * WordPress dependencies + */ + + + + + + + +/** + * Internal dependencies + */ /** @@ -3497,43 +8813,40 @@ */ /** - * Helper for getting a preference from the preferences store. - * - * This is only present so that `getSettings` doesn't need to be made a - * registry selector. - * - * It's unstable because the selector needs to be exported and so part of the - * public API to work. - */ - -const __unstableGetPreference = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, name) => select(external_wp_preferences_namespaceObject.store).get('core/edit-site', name)); -/** * Returns whether the given feature is enabled or not. * + * @deprecated * @param {Object} state Global application state. * @param {string} featureName Feature slug. * * @return {boolean} Is active. */ - -function selectors_isFeatureActive(state, featureName) { - external_wp_deprecated_default()(`select( 'core/interface' ).isFeatureActive`, { +const isFeatureActive = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (_, featureName) => { + external_wp_deprecated_default()(`select( 'core/edit-site' ).isFeatureActive`, { since: '6.0', alternative: `select( 'core/preferences' ).get` }); - return !!__unstableGetPreference(state, featureName); -} + return !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', featureName); +}); + /** * Returns the current editing canvas device type. * + * @deprecated + * * @param {Object} state Global application state. * * @return {string} Device type. */ - -function __experimentalGetPreviewDeviceType(state) { - return state.deviceType; -} +const __experimentalGetPreviewDeviceType = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + external_wp_deprecated_default()(`select( 'core/edit-site' ).__experimentalGetPreviewDeviceType`, { + since: '6.5', + version: '6.7', + alternative: `select( 'core/editor' ).getDeviceType` + }); + return select(external_wp_editor_namespaceObject.store).getDeviceType(); +}); + /** * Returns whether the current user can create media or not. * @@ -3541,8 +8854,8 @@ * * @return {Object} Whether the current user can create media or not. */ - const getCanUserCreateMedia = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => select(external_wp_coreData_namespaceObject.store).canUser('create', 'media')); + /** * Returns any available Reusable blocks. * @@ -3550,241 +8863,159 @@ * * @return {Array} The available reusable blocks. */ - const getReusableBlocks = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + external_wp_deprecated_default()("select( 'core/core' ).getEntityRecords( 'postType', 'wp_block' )", { + since: '6.5', + version: '6.8' + }); const isWeb = external_wp_element_namespaceObject.Platform.OS === 'web'; return isWeb ? select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', 'wp_block', { per_page: -1 }) : []; }); -/** - * Returns the settings, taking into account active features and permissions. - * - * @param {Object} state Global application state. - * @param {Function} setIsInserterOpen Setter for the open state of the global inserter. + +/** + * Returns the site editor settings. + * + * @param {Object} state Global application state. * * @return {Object} Settings. */ - -const getSettings = rememo((state, setIsInserterOpen) => { - const settings = { ...state.settings, - outlineMode: true, - focusMode: !!__unstableGetPreference(state, 'focusMode'), - hasFixedToolbar: !!__unstableGetPreference(state, 'fixedToolbar'), - keepCaretInsideBlock: !!__unstableGetPreference(state, 'keepCaretInsideBlock'), - showIconLabels: !!__unstableGetPreference(state, 'showIconLabels'), - __experimentalSetIsInserterOpened: setIsInserterOpen, - __experimentalReusableBlocks: getReusableBlocks(state), - __experimentalPreferPatternsOnRoot: 'wp_template' === getEditedPostType(state) - }; - const canUserCreateMedia = getCanUserCreateMedia(state); - - if (!canUserCreateMedia) { - return settings; - } - - settings.mediaUpload = _ref => { - let { - onError, - ...rest - } = _ref; - (0,external_wp_mediaUtils_namespaceObject.uploadMedia)({ - wpAllowedMimeTypes: state.settings.allowedMimeTypes, - onError: _ref2 => { - let { - message - } = _ref2; - return onError(message); - }, - ...rest - }); - }; - - return settings; -}, state => [getCanUserCreateMedia(state), state.settings, __unstableGetPreference(state, 'focusMode'), __unstableGetPreference(state, 'fixedToolbar'), __unstableGetPreference(state, 'keepCaretInsideBlock'), __unstableGetPreference(state, 'showIconLabels'), getReusableBlocks(state), getEditedPostType(state)]); -/** - * Returns the current home template ID. - * - * @param {Object} state Global application state. - * - * @return {number?} Home template ID. - */ - -function getHomeTemplateId(state) { - return state.homeTemplateId; -} - -function getCurrentEditedPost(state) { - return state.editedPost; -} +function getSettings(state) { + // It is important that we don't inject anything into these settings locally. + // The reason for this is that we have an effect in place that calls setSettings based on the previous value of getSettings. + // If we add computed settings here, we'll be adding these computed settings to the state which is very unexpected. + return state.settings; +} + +/** + * @deprecated + */ +function getHomeTemplateId() { + external_wp_deprecated_default()("select( 'core/edit-site' ).getHomeTemplateId", { + since: '6.2', + version: '6.4' + }); +} + /** * Returns the current edited post type (wp_template or wp_template_part). * * @param {Object} state Global application state. * - * @return {TemplateType?} Template type. - */ - - + * @return {?TemplateType} Template type. + */ function getEditedPostType(state) { - return getCurrentEditedPost(state).type; -} + return state.editedPost.postType; +} + /** * Returns the ID of the currently edited template or template part. * * @param {Object} state Global application state. * - * @return {string?} Post ID. - */ - + * @return {?string} Post ID. + */ function getEditedPostId(state) { - return getCurrentEditedPost(state).id; -} + return state.editedPost.id; +} + +/** + * Returns the edited post's context object. + * + * @deprecated + * @param {Object} state Global application state. + * + * @return {Object} Page. + */ +function getEditedPostContext(state) { + return state.editedPost.context; +} + /** * Returns the current page object. * + * @deprecated * @param {Object} state Global application state. * * @return {Object} Page. */ - function getPage(state) { - return getCurrentEditedPost(state).page; -} -/** - * Returns the active menu in the navigation panel. - * - * @param {Object} state Global application state. - * - * @return {string} Active menu. - */ - -function getNavigationPanelActiveMenu(state) { - return state.navigationPanel.menu; -} -/** - * Returns the current template or template part's corresponding - * navigation panel's sub menu, to be used with `openNavigationPanelToMenu`. + return { + context: state.editedPost.context + }; +} + +/** + * Returns true if the inserter is opened. + * + * @deprecated * * @param {Object} state Global application state. * - * @return {string} The current template or template part's sub menu. - */ - -const getCurrentTemplateNavigationPanelSubMenu = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { - const templateType = getEditedPostType(state); - const templateId = getEditedPostId(state); - const template = templateId ? select(external_wp_coreData_namespaceObject.store).getEntityRecord('postType', templateType, templateId) : null; - - if (!template) { - return MENU_ROOT; - } - - if ('wp_template_part' === templateType) { - var _TEMPLATE_PARTS_SUB_M; - - return ((_TEMPLATE_PARTS_SUB_M = TEMPLATE_PARTS_SUB_MENUS.find(submenu => submenu.area === (template === null || template === void 0 ? void 0 : template.area))) === null || _TEMPLATE_PARTS_SUB_M === void 0 ? void 0 : _TEMPLATE_PARTS_SUB_M.menu) || MENU_TEMPLATE_PARTS; - } - - const templates = select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', 'wp_template'); - const showOnFront = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('root', 'site').show_on_front; - - if (isTemplateSuperseded(template.slug, (0,external_lodash_namespaceObject.map)(templates, 'slug'), showOnFront)) { - return MENU_TEMPLATES_UNUSED; - } - - return getTemplateLocation(template.slug); -}); -/** - * Returns the current opened/closed state of the navigation panel. - * - * @param {Object} state Global application state. - * - * @return {boolean} True if the navigation panel should be open; false if closed. - */ - -function isNavigationOpened(state) { - return state.navigationPanel.isOpen; -} -/** - * Returns the current opened/closed state of the inserter panel. - * - * @param {Object} state Global application state. - * - * @return {boolean} True if the inserter panel should be open; false if closed. - */ - -function isInserterOpened(state) { - return !!state.blockInserterPanel; -} + * @return {boolean} Whether the inserter is opened. + */ +const isInserterOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + external_wp_deprecated_default()(`select( 'core/edit-site' ).isInserterOpened`, { + since: '6.5', + alternative: `select( 'core/editor' ).isInserterOpened` + }); + return select(external_wp_editor_namespaceObject.store).isInserterOpened(); +}); + /** * Get the insertion point for the inserter. * + * @deprecated + * * @param {Object} state Global application state. * * @return {Object} The root client ID, index to insert at and starting filter value. */ - -function __experimentalGetInsertionPoint(state) { - const { - rootClientId, - insertionIndex, - filterValue - } = state.blockInserterPanel; - return { - rootClientId, - insertionIndex, - filterValue - }; -} -/** - * Returns the current opened/closed state of the list view panel. +const __experimentalGetInsertionPoint = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + external_wp_deprecated_default()(`select( 'core/edit-site' ).__experimentalGetInsertionPoint`, { + since: '6.5', + version: '6.7' + }); + return lock_unlock_unlock(select(external_wp_editor_namespaceObject.store)).getInsertionPoint(); +}); + +/** + * Returns true if the list view is opened. * * @param {Object} state Global application state. * - * @return {boolean} True if the list view panel should be open; false if closed. - */ - -function isListViewOpened(state) { - return state.listViewPanel; -} + * @return {boolean} Whether the list view is opened. + */ +const isListViewOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + external_wp_deprecated_default()(`select( 'core/edit-site' ).isListViewOpened`, { + since: '6.5', + alternative: `select( 'core/editor' ).isListViewOpened` + }); + return select(external_wp_editor_namespaceObject.store).isListViewOpened(); +}); + +/** + * Returns the current opened/closed state of the save panel. + * + * @param {Object} state Global application state. + * + * @return {boolean} True if the save panel should be open; false if closed. + */ +function isSaveViewOpened(state) { + return state.saveViewPanel; +} + /** * Returns the template parts and their blocks for the current edited template. * * @param {Object} state Global application state. * @return {Array} Template parts and their blocks in an array. */ - -const getCurrentTemplateTemplateParts = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { - var _template$blocks; - - const templateType = getEditedPostType(state); - const templateId = getEditedPostId(state); - const template = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', templateType, templateId); - const templateParts = select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', 'wp_template_part', { - per_page: -1 - }); - const templatePartsById = (0,external_lodash_namespaceObject.keyBy)(templateParts, templatePart => templatePart.id); - return ((_template$blocks = template.blocks) !== null && _template$blocks !== void 0 ? _template$blocks : []).filter(block => (0,external_wp_blocks_namespaceObject.isTemplatePart)(block)).map(block => { - const { - attributes: { - theme, - slug - } - } = block; - const templatePartId = `${theme}//${slug}`; - const templatePart = templatePartsById[templatePartId]; - return { - templatePart, - block - }; - }).filter(_ref3 => { - let { - templatePart - } = _ref3; - return !!templatePart; - }); -}); +const getCurrentTemplateTemplateParts = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + return lock_unlock_unlock(select(external_wp_editor_namespaceObject.store)).getCurrentTemplateTemplateParts(); +}); + /** * Returns the current editing mode. * @@ -3792,19 +9023,109 @@ * * @return {string} Editing mode. */ - -function getEditorMode(state) { - return __unstableGetPreference(state, 'editorMode'); -} +const getEditorMode = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { + return select(external_wp_preferences_namespaceObject.store).get('core', 'editorMode'); +}); + +/** + * @deprecated + */ +function getCurrentTemplateNavigationPanelSubMenu() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).getCurrentTemplateNavigationPanelSubMenu", { + since: '6.2', + version: '6.4' + }); +} + +/** + * @deprecated + */ +function getNavigationPanelActiveMenu() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).getNavigationPanelActiveMenu", { + since: '6.2', + version: '6.4' + }); +} + +/** + * @deprecated + */ +function isNavigationOpened() { + external_wp_deprecated_default()("dispatch( 'core/edit-site' ).isNavigationOpened", { + since: '6.2', + version: '6.4' + }); +} + +/** + * Whether or not the editor has a page loaded into it. + * + * @see setPage + * + * @param {Object} state Global application state. + * + * @return {boolean} Whether or not the editor has a page loaded into it. + */ +function isPage(state) { + return !!state.editedPost.context?.postId; +} + +/** + * Whether or not the editor allows only page content to be edited. + * + * @deprecated + * + * @return {boolean} Whether or not focus is on editing page content. + */ +function hasPageContentFocus() { + external_wp_deprecated_default()(`select( 'core/edit-site' ).hasPageContentFocus`, { + since: '6.5' + }); + return false; +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/private-selectors.js +/** + * Returns the current canvas mode. + * + * @param {Object} state Global application state. + * + * @return {string} Canvas mode. + */ +function getCanvasMode(state) { + return state.canvasMode; +} + +/** + * Returns the editor canvas container view. + * + * @param {Object} state Global application state. + * + * @return {string} Editor canvas container view. + */ +function getEditorCanvasContainerView(state) { + return state.editorCanvasContainerView; +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/constants.js +/** + * The identifier for the data store. + * + * @type {string} + */ +const STORE_NAME = 'core/edit-site'; ;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/store/index.js /** * WordPress dependencies */ -/** - * Internal dependencies - */ + +/** + * Internal dependencies + */ + + @@ -3812,7099 +9133,688 @@ const storeConfig = { reducer: reducer, - actions: store_actions_namespaceObject, - selectors: store_selectors_namespaceObject -}; -const store_store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, storeConfig); -(0,external_wp_data_namespaceObject.register)(store_store); - -;// CONCATENATED MODULE: ./node_modules/history/index.js - - -/** - * Actions represent the type of change to a location value. - * - * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#action - */ -var Action; - -(function (Action) { - /** - * A POP indicates a change to an arbitrary index in the history stack, such - * as a back or forward navigation. It does not describe the direction of the - * navigation, only that the current index changed. - * - * Note: This is the default action for newly created history objects. - */ - Action["Pop"] = "POP"; - /** - * A PUSH indicates a new entry being added to the history stack, such as when - * a link is clicked and a new page loads. When this happens, all subsequent - * entries in the stack are lost. - */ - - Action["Push"] = "PUSH"; - /** - * A REPLACE indicates the entry at the current index in the history stack - * being replaced by a new one. - */ - - Action["Replace"] = "REPLACE"; -})(Action || (Action = {})); - -var readOnly = false ? 0 : function (obj) { - return obj; -}; - -function warning(cond, message) { - if (!cond) { - // eslint-disable-next-line no-console - if (typeof console !== 'undefined') console.warn(message); - - try { - // Welcome to debugging history! - // - // This error is thrown as a convenience so you can more easily - // find the source for a warning that appears in the console by - // enabling "pause on exceptions" in your JavaScript debugger. - throw new Error(message); // eslint-disable-next-line no-empty - } catch (e) {} - } -} - -var BeforeUnloadEventType = 'beforeunload'; -var HashChangeEventType = 'hashchange'; -var PopStateEventType = 'popstate'; -/** - * Browser history stores the location in regular URLs. This is the standard for - * most web apps, but it requires some configuration on the server to ensure you - * serve the same app at multiple URLs. - * - * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory - */ - -function createBrowserHistory(options) { - if (options === void 0) { - options = {}; - } - - var _options = options, - _options$window = _options.window, - window = _options$window === void 0 ? document.defaultView : _options$window; - var globalHistory = window.history; - - function getIndexAndLocation() { - var _window$location = window.location, - pathname = _window$location.pathname, - search = _window$location.search, - hash = _window$location.hash; - var state = globalHistory.state || {}; - return [state.idx, readOnly({ - pathname: pathname, - search: search, - hash: hash, - state: state.usr || null, - key: state.key || 'default' - })]; - } - - var blockedPopTx = null; - - function handlePop() { - if (blockedPopTx) { - blockers.call(blockedPopTx); - blockedPopTx = null; - } else { - var nextAction = Action.Pop; - - var _getIndexAndLocation = getIndexAndLocation(), - nextIndex = _getIndexAndLocation[0], - nextLocation = _getIndexAndLocation[1]; - - if (blockers.length) { - if (nextIndex != null) { - var delta = index - nextIndex; - - if (delta) { - // Revert the POP - blockedPopTx = { - action: nextAction, - location: nextLocation, - retry: function retry() { - go(delta * -1); - } - }; - go(delta); - } - } else { - // Trying to POP to a location with no index. We did not create - // this location, so we can't effectively block the navigation. - false ? 0 : void 0; - } - } else { - applyTx(nextAction); - } - } - } - - window.addEventListener(PopStateEventType, handlePop); - var action = Action.Pop; - - var _getIndexAndLocation2 = getIndexAndLocation(), - index = _getIndexAndLocation2[0], - location = _getIndexAndLocation2[1]; - - var listeners = createEvents(); - var blockers = createEvents(); - - if (index == null) { - index = 0; - globalHistory.replaceState(extends_extends({}, globalHistory.state, { - idx: index - }), ''); - } - - function createHref(to) { - return typeof to === 'string' ? to : createPath(to); - } // state defaults to `null` because `window.history.state` does - - - function getNextLocation(to, state) { - if (state === void 0) { - state = null; - } - - return readOnly(extends_extends({ - pathname: location.pathname, - hash: '', - search: '' - }, typeof to === 'string' ? parsePath(to) : to, { - state: state, - key: createKey() - })); - } - - function getHistoryStateAndUrl(nextLocation, index) { - return [{ - usr: nextLocation.state, - key: nextLocation.key, - idx: index - }, createHref(nextLocation)]; - } - - function allowTx(action, location, retry) { - return !blockers.length || (blockers.call({ - action: action, - location: location, - retry: retry - }), false); - } - - function applyTx(nextAction) { - action = nextAction; - - var _getIndexAndLocation3 = getIndexAndLocation(); - - index = _getIndexAndLocation3[0]; - location = _getIndexAndLocation3[1]; - listeners.call({ - action: action, - location: location - }); - } - - function push(to, state) { - var nextAction = Action.Push; - var nextLocation = getNextLocation(to, state); - - function retry() { - push(to, state); - } - - if (allowTx(nextAction, nextLocation, retry)) { - var _getHistoryStateAndUr = getHistoryStateAndUrl(nextLocation, index + 1), - historyState = _getHistoryStateAndUr[0], - url = _getHistoryStateAndUr[1]; // TODO: Support forced reloading - // try...catch because iOS limits us to 100 pushState calls :/ - - - try { - globalHistory.pushState(historyState, '', url); - } catch (error) { - // They are going to lose state here, but there is no real - // way to warn them about it since the page will refresh... - window.location.assign(url); - } - - applyTx(nextAction); - } - } - - function replace(to, state) { - var nextAction = Action.Replace; - var nextLocation = getNextLocation(to, state); - - function retry() { - replace(to, state); - } - - if (allowTx(nextAction, nextLocation, retry)) { - var _getHistoryStateAndUr2 = getHistoryStateAndUrl(nextLocation, index), - historyState = _getHistoryStateAndUr2[0], - url = _getHistoryStateAndUr2[1]; // TODO: Support forced reloading - - - globalHistory.replaceState(historyState, '', url); - applyTx(nextAction); - } - } - - function go(delta) { - globalHistory.go(delta); - } - - var history = { - get action() { - return action; - }, - - get location() { - return location; - }, - - createHref: createHref, - push: push, - replace: replace, - go: go, - back: function back() { - go(-1); - }, - forward: function forward() { - go(1); - }, - listen: function listen(listener) { - return listeners.push(listener); - }, - block: function block(blocker) { - var unblock = blockers.push(blocker); - - if (blockers.length === 1) { - window.addEventListener(BeforeUnloadEventType, promptBeforeUnload); - } - - return function () { - unblock(); // Remove the beforeunload listener so the document may - // still be salvageable in the pagehide event. - // See https://html.spec.whatwg.org/#unloading-documents - - if (!blockers.length) { - window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload); - } - }; - } - }; - return history; -} -/** - * Hash history stores the location in window.location.hash. This makes it ideal - * for situations where you don't want to send the location to the server for - * some reason, either because you do cannot configure it or the URL space is - * reserved for something else. - * - * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory - */ - -function createHashHistory(options) { - if (options === void 0) { - options = {}; - } - - var _options2 = options, - _options2$window = _options2.window, - window = _options2$window === void 0 ? document.defaultView : _options2$window; - var globalHistory = window.history; - - function getIndexAndLocation() { - var _parsePath = parsePath(window.location.hash.substr(1)), - _parsePath$pathname = _parsePath.pathname, - pathname = _parsePath$pathname === void 0 ? '/' : _parsePath$pathname, - _parsePath$search = _parsePath.search, - search = _parsePath$search === void 0 ? '' : _parsePath$search, - _parsePath$hash = _parsePath.hash, - hash = _parsePath$hash === void 0 ? '' : _parsePath$hash; - - var state = globalHistory.state || {}; - return [state.idx, readOnly({ - pathname: pathname, - search: search, - hash: hash, - state: state.usr || null, - key: state.key || 'default' - })]; - } - - var blockedPopTx = null; - - function handlePop() { - if (blockedPopTx) { - blockers.call(blockedPopTx); - blockedPopTx = null; - } else { - var nextAction = Action.Pop; - - var _getIndexAndLocation4 = getIndexAndLocation(), - nextIndex = _getIndexAndLocation4[0], - nextLocation = _getIndexAndLocation4[1]; - - if (blockers.length) { - if (nextIndex != null) { - var delta = index - nextIndex; - - if (delta) { - // Revert the POP - blockedPopTx = { - action: nextAction, - location: nextLocation, - retry: function retry() { - go(delta * -1); - } - }; - go(delta); - } - } else { - // Trying to POP to a location with no index. We did not create - // this location, so we can't effectively block the navigation. - false ? 0 : void 0; - } - } else { - applyTx(nextAction); - } - } - } - - window.addEventListener(PopStateEventType, handlePop); // popstate does not fire on hashchange in IE 11 and old (trident) Edge - // https://developer.mozilla.org/de/docs/Web/API/Window/popstate_event - - window.addEventListener(HashChangeEventType, function () { - var _getIndexAndLocation5 = getIndexAndLocation(), - nextLocation = _getIndexAndLocation5[1]; // Ignore extraneous hashchange events. - - - if (createPath(nextLocation) !== createPath(location)) { - handlePop(); - } - }); - var action = Action.Pop; - - var _getIndexAndLocation6 = getIndexAndLocation(), - index = _getIndexAndLocation6[0], - location = _getIndexAndLocation6[1]; - - var listeners = createEvents(); - var blockers = createEvents(); - - if (index == null) { - index = 0; - globalHistory.replaceState(_extends({}, globalHistory.state, { - idx: index - }), ''); - } - - function getBaseHref() { - var base = document.querySelector('base'); - var href = ''; - - if (base && base.getAttribute('href')) { - var url = window.location.href; - var hashIndex = url.indexOf('#'); - href = hashIndex === -1 ? url : url.slice(0, hashIndex); - } - - return href; - } - - function createHref(to) { - return getBaseHref() + '#' + (typeof to === 'string' ? to : createPath(to)); - } - - function getNextLocation(to, state) { - if (state === void 0) { - state = null; - } - - return readOnly(_extends({ - pathname: location.pathname, - hash: '', - search: '' - }, typeof to === 'string' ? parsePath(to) : to, { - state: state, - key: createKey() - })); - } - - function getHistoryStateAndUrl(nextLocation, index) { - return [{ - usr: nextLocation.state, - key: nextLocation.key, - idx: index - }, createHref(nextLocation)]; - } - - function allowTx(action, location, retry) { - return !blockers.length || (blockers.call({ - action: action, - location: location, - retry: retry - }), false); - } - - function applyTx(nextAction) { - action = nextAction; - - var _getIndexAndLocation7 = getIndexAndLocation(); - - index = _getIndexAndLocation7[0]; - location = _getIndexAndLocation7[1]; - listeners.call({ - action: action, - location: location - }); - } - - function push(to, state) { - var nextAction = Action.Push; - var nextLocation = getNextLocation(to, state); - - function retry() { - push(to, state); - } - - false ? 0 : void 0; - - if (allowTx(nextAction, nextLocation, retry)) { - var _getHistoryStateAndUr3 = getHistoryStateAndUrl(nextLocation, index + 1), - historyState = _getHistoryStateAndUr3[0], - url = _getHistoryStateAndUr3[1]; // TODO: Support forced reloading - // try...catch because iOS limits us to 100 pushState calls :/ - - - try { - globalHistory.pushState(historyState, '', url); - } catch (error) { - // They are going to lose state here, but there is no real - // way to warn them about it since the page will refresh... - window.location.assign(url); - } - - applyTx(nextAction); - } - } - - function replace(to, state) { - var nextAction = Action.Replace; - var nextLocation = getNextLocation(to, state); - - function retry() { - replace(to, state); - } - - false ? 0 : void 0; - - if (allowTx(nextAction, nextLocation, retry)) { - var _getHistoryStateAndUr4 = getHistoryStateAndUrl(nextLocation, index), - historyState = _getHistoryStateAndUr4[0], - url = _getHistoryStateAndUr4[1]; // TODO: Support forced reloading - - - globalHistory.replaceState(historyState, '', url); - applyTx(nextAction); - } - } - - function go(delta) { - globalHistory.go(delta); - } - - var history = { - get action() { - return action; - }, - - get location() { - return location; - }, - - createHref: createHref, - push: push, - replace: replace, - go: go, - back: function back() { - go(-1); - }, - forward: function forward() { - go(1); - }, - listen: function listen(listener) { - return listeners.push(listener); - }, - block: function block(blocker) { - var unblock = blockers.push(blocker); - - if (blockers.length === 1) { - window.addEventListener(BeforeUnloadEventType, promptBeforeUnload); - } - - return function () { - unblock(); // Remove the beforeunload listener so the document may - // still be salvageable in the pagehide event. - // See https://html.spec.whatwg.org/#unloading-documents - - if (!blockers.length) { - window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload); - } - }; - } - }; - return history; -} -/** - * Memory history stores the current location in memory. It is designed for use - * in stateful non-browser environments like tests and React Native. - * - * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#creatememoryhistory - */ - -function createMemoryHistory(options) { - if (options === void 0) { - options = {}; - } - - var _options3 = options, - _options3$initialEntr = _options3.initialEntries, - initialEntries = _options3$initialEntr === void 0 ? ['/'] : _options3$initialEntr, - initialIndex = _options3.initialIndex; - var entries = initialEntries.map(function (entry) { - var location = readOnly(_extends({ - pathname: '/', - search: '', - hash: '', - state: null, - key: createKey() - }, typeof entry === 'string' ? parsePath(entry) : entry)); - false ? 0 : void 0; - return location; - }); - var index = clamp(initialIndex == null ? entries.length - 1 : initialIndex, 0, entries.length - 1); - var action = Action.Pop; - var location = entries[index]; - var listeners = createEvents(); - var blockers = createEvents(); - - function createHref(to) { - return typeof to === 'string' ? to : createPath(to); - } - - function getNextLocation(to, state) { - if (state === void 0) { - state = null; - } - - return readOnly(_extends({ - pathname: location.pathname, - search: '', - hash: '' - }, typeof to === 'string' ? parsePath(to) : to, { - state: state, - key: createKey() - })); - } - - function allowTx(action, location, retry) { - return !blockers.length || (blockers.call({ - action: action, - location: location, - retry: retry - }), false); - } - - function applyTx(nextAction, nextLocation) { - action = nextAction; - location = nextLocation; - listeners.call({ - action: action, - location: location - }); - } - - function push(to, state) { - var nextAction = Action.Push; - var nextLocation = getNextLocation(to, state); - - function retry() { - push(to, state); - } - - false ? 0 : void 0; - - if (allowTx(nextAction, nextLocation, retry)) { - index += 1; - entries.splice(index, entries.length, nextLocation); - applyTx(nextAction, nextLocation); - } - } - - function replace(to, state) { - var nextAction = Action.Replace; - var nextLocation = getNextLocation(to, state); - - function retry() { - replace(to, state); - } - - false ? 0 : void 0; - - if (allowTx(nextAction, nextLocation, retry)) { - entries[index] = nextLocation; - applyTx(nextAction, nextLocation); - } - } - - function go(delta) { - var nextIndex = clamp(index + delta, 0, entries.length - 1); - var nextAction = Action.Pop; - var nextLocation = entries[nextIndex]; - - function retry() { - go(delta); - } - - if (allowTx(nextAction, nextLocation, retry)) { - index = nextIndex; - applyTx(nextAction, nextLocation); - } - } - - var history = { - get index() { - return index; - }, - - get action() { - return action; - }, - - get location() { - return location; - }, - - createHref: createHref, - push: push, - replace: replace, - go: go, - back: function back() { - go(-1); - }, - forward: function forward() { - go(1); - }, - listen: function listen(listener) { - return listeners.push(listener); - }, - block: function block(blocker) { - return blockers.push(blocker); - } - }; - return history; -} //////////////////////////////////////////////////////////////////////////////// -// UTILS -//////////////////////////////////////////////////////////////////////////////// - -function clamp(n, lowerBound, upperBound) { - return Math.min(Math.max(n, lowerBound), upperBound); -} - -function promptBeforeUnload(event) { - // Cancel the event. - event.preventDefault(); // Chrome (and legacy IE) requires returnValue to be set. - - event.returnValue = ''; -} - -function createEvents() { - var handlers = []; - return { - get length() { - return handlers.length; - }, - - push: function push(fn) { - handlers.push(fn); - return function () { - handlers = handlers.filter(function (handler) { - return handler !== fn; - }); - }; - }, - call: function call(arg) { - handlers.forEach(function (fn) { - return fn && fn(arg); - }); - } - }; -} - -function createKey() { - return Math.random().toString(36).substr(2, 8); -} -/** - * Creates a string URL path from the given pathname, search, and hash components. - * - * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createpath - */ - - -function createPath(_ref) { - var _ref$pathname = _ref.pathname, - pathname = _ref$pathname === void 0 ? '/' : _ref$pathname, - _ref$search = _ref.search, - search = _ref$search === void 0 ? '' : _ref$search, - _ref$hash = _ref.hash, - hash = _ref$hash === void 0 ? '' : _ref$hash; - if (search && search !== '?') pathname += search.charAt(0) === '?' ? search : '?' + search; - if (hash && hash !== '#') pathname += hash.charAt(0) === '#' ? hash : '#' + hash; - return pathname; -} -/** - * Parses a string URL path into its separate pathname, search, and hash components. - * - * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#parsepath - */ - -function parsePath(path) { - var parsedPath = {}; - - if (path) { - var hashIndex = path.indexOf('#'); - - if (hashIndex >= 0) { - parsedPath.hash = path.substr(hashIndex); - path = path.substr(0, hashIndex); - } - - var searchIndex = path.indexOf('?'); - - if (searchIndex >= 0) { - parsedPath.search = path.substr(searchIndex); - path = path.substr(0, searchIndex); - } - - if (path) { - parsedPath.pathname = path; - } - } - - return parsedPath; -} - - - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/utils/history.js -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - -const history_history = createBrowserHistory(); -const originalHistoryPush = history_history.push; -const originalHistoryReplace = history_history.replace; - -function push(params, state) { - return originalHistoryPush.call(history_history, (0,external_wp_url_namespaceObject.addQueryArgs)(window.location.href, params), state); -} - -function replace(params, state) { - return originalHistoryReplace.call(history_history, (0,external_wp_url_namespaceObject.addQueryArgs)(window.location.href, params), state); -} - -history_history.push = push; -history_history.replace = replace; -/* harmony default export */ var utils_history = (history_history); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/routes/index.js - - -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - -const RoutesContext = (0,external_wp_element_namespaceObject.createContext)(); -const HistoryContext = (0,external_wp_element_namespaceObject.createContext)(); -function useLocation() { - return (0,external_wp_element_namespaceObject.useContext)(RoutesContext); -} -function useHistory() { - return (0,external_wp_element_namespaceObject.useContext)(HistoryContext); -} - -function getLocationWithParams(location) { - const searchParams = new URLSearchParams(location.search); - return { ...location, - params: Object.fromEntries(searchParams.entries()) - }; -} - -function Routes(_ref) { - let { - children - } = _ref; - const [location, setLocation] = (0,external_wp_element_namespaceObject.useState)(() => getLocationWithParams(utils_history.location)); - (0,external_wp_element_namespaceObject.useEffect)(() => { - return utils_history.listen(_ref2 => { - let { - location: updatedLocation - } = _ref2; - setLocation(getLocationWithParams(updatedLocation)); - }); - }, []); - return (0,external_wp_element_namespaceObject.createElement)(HistoryContext.Provider, { - value: utils_history - }, (0,external_wp_element_namespaceObject.createElement)(RoutesContext.Provider, { - value: location - }, children(location))); -} - + actions: actions_namespaceObject, + selectors: selectors_namespaceObject +}; +const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, storeConfig); +(0,external_wp_data_namespaceObject.register)(store); +lock_unlock_unlock(store).registerPrivateSelectors(private_selectors_namespaceObject); +lock_unlock_unlock(store).registerPrivateActions(private_actions_namespaceObject); + +;// CONCATENATED MODULE: external ["wp","plugins"] +const external_wp_plugins_namespaceObject = window["wp"]["plugins"]; +;// CONCATENATED MODULE: external ["wp","router"] +const external_wp_router_namespaceObject = window["wp"]["router"]; +;// CONCATENATED MODULE: ./node_modules/clsx/dist/clsx.mjs +function clsx_r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t { - if (character === '+') { - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, { - key: index - }, character); - } - - return (0,external_wp_element_namespaceObject.createElement)("kbd", { - key: index, - className: "edit-site-keyboard-shortcut-help-modal__shortcut-key" - }, character); - })); -} - -function Shortcut(_ref2) { - let { - description, - keyCombination, - aliases = [], - ariaLabel - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-keyboard-shortcut-help-modal__shortcut-description" - }, description), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-keyboard-shortcut-help-modal__shortcut-term" - }, (0,external_wp_element_namespaceObject.createElement)(KeyCombination, { - keyCombination: keyCombination, - forceAriaLabel: ariaLabel - }), aliases.map((alias, index) => (0,external_wp_element_namespaceObject.createElement)(KeyCombination, { - keyCombination: alias, - forceAriaLabel: ariaLabel, - key: index - })))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - -function DynamicShortcut(_ref) { - let { - name - } = _ref; - const { - keyCombination, - description, - aliases - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - getShortcutKeyCombination, - getShortcutDescription, - getShortcutAliases - } = select(external_wp_keyboardShortcuts_namespaceObject.store); - return { - keyCombination: getShortcutKeyCombination(name), - aliases: getShortcutAliases(name), - description: getShortcutDescription(name) - }; - }, [name]); - - if (!keyCombination) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(Shortcut, { - keyCombination: keyCombination, - description: description, - aliases: aliases - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/keyboard-shortcut-help-modal/index.js - - -/** - * External dependencies - */ - - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - - - - - -const ShortcutList = _ref => { - let { - shortcuts - } = _ref; - 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)("ul", { - className: "edit-site-keyboard-shortcut-help-modal__shortcut-list", - role: "list" - }, shortcuts.map((shortcut, index) => (0,external_wp_element_namespaceObject.createElement)("li", { - className: "edit-site-keyboard-shortcut-help-modal__shortcut", - key: index - }, (0,external_lodash_namespaceObject.isString)(shortcut) ? (0,external_wp_element_namespaceObject.createElement)(DynamicShortcut, { - name: shortcut - }) : (0,external_wp_element_namespaceObject.createElement)(Shortcut, shortcut)))) - /* eslint-enable jsx-a11y/no-redundant-roles */ - - ); -}; - -const ShortcutSection = _ref2 => { - let { - title, - shortcuts, - className - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)("section", { - className: classnames_default()('edit-site-keyboard-shortcut-help-modal__section', className) - }, !!title && (0,external_wp_element_namespaceObject.createElement)("h2", { - className: "edit-site-keyboard-shortcut-help-modal__section-title" - }, title), (0,external_wp_element_namespaceObject.createElement)(ShortcutList, { - shortcuts: shortcuts - })); -}; - -const ShortcutCategorySection = _ref3 => { - let { - title, - categoryName, - additionalShortcuts = [] - } = _ref3; - const categoryShortcuts = (0,external_wp_data_namespaceObject.useSelect)(select => { - return select(external_wp_keyboardShortcuts_namespaceObject.store).getCategoryShortcuts(categoryName); - }, [categoryName]); - return (0,external_wp_element_namespaceObject.createElement)(ShortcutSection, { - title: title, - shortcuts: categoryShortcuts.concat(additionalShortcuts) - }); -}; - -function KeyboardShortcutHelpModal(_ref4) { - let { - isModalActive, - toggleModal - } = _ref4; - - if (!isModalActive) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Modal, { - className: "edit-site-keyboard-shortcut-help-modal", - title: (0,external_wp_i18n_namespaceObject.__)('Keyboard shortcuts'), - closeLabel: (0,external_wp_i18n_namespaceObject.__)('Close'), - onRequestClose: toggleModal - }, (0,external_wp_element_namespaceObject.createElement)(ShortcutSection, { - className: "edit-site-keyboard-shortcut-help-modal__main-shortcuts", - shortcuts: ['core/edit-site/keyboard-shortcuts'] - }), (0,external_wp_element_namespaceObject.createElement)(ShortcutCategorySection, { - title: (0,external_wp_i18n_namespaceObject.__)('Global shortcuts'), - categoryName: "global" - }), (0,external_wp_element_namespaceObject.createElement)(ShortcutCategorySection, { - title: (0,external_wp_i18n_namespaceObject.__)('Selection shortcuts'), - categoryName: "selection" - }), (0,external_wp_element_namespaceObject.createElement)(ShortcutCategorySection, { - title: (0,external_wp_i18n_namespaceObject.__)('Block shortcuts'), - categoryName: "block", - additionalShortcuts: [{ - keyCombination: { - character: '/' - }, - description: (0,external_wp_i18n_namespaceObject.__)('Change the block type after adding a new paragraph.'), - - /* translators: The forward-slash character. e.g. '/'. */ - ariaLabel: (0,external_wp_i18n_namespaceObject.__)('Forward-slash') - }] - }), (0,external_wp_element_namespaceObject.createElement)(ShortcutSection, { - title: (0,external_wp_i18n_namespaceObject.__)('Text formatting'), - shortcuts: textFormattingShortcuts - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/preferences-modal/enable-feature.js - - - -/** - * WordPress dependencies - */ - - - -function EnableFeature(props) { - const { - featureName, - ...remainingProps - } = props; - const isChecked = (0,external_wp_data_namespaceObject.useSelect)(select => !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', featureName), [featureName]); - const { - toggle - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store); - - const onChange = () => toggle('core/edit-site', featureName); - - return (0,external_wp_element_namespaceObject.createElement)(preferences_modal_base_option, extends_extends({ - onChange: onChange, - isChecked: isChecked - }, remainingProps)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/preferences-modal/index.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - -function EditSitePreferencesModal(_ref) { - let { - isModalActive, - toggleModal - } = _ref; - const sections = (0,external_wp_element_namespaceObject.useMemo)(() => [{ - name: 'general', - tabLabel: (0,external_wp_i18n_namespaceObject.__)('General'), - content: (0,external_wp_element_namespaceObject.createElement)(preferences_modal_section, { - title: (0,external_wp_i18n_namespaceObject.__)('Appearance'), - description: (0,external_wp_i18n_namespaceObject.__)('Customize options related to the block editor interface and editing flow.') - }, (0,external_wp_element_namespaceObject.createElement)(EnableFeature, { - featureName: "focusMode", - help: (0,external_wp_i18n_namespaceObject.__)('Highlights the current block and fades other content.'), - label: (0,external_wp_i18n_namespaceObject.__)('Spotlight mode') - }), (0,external_wp_element_namespaceObject.createElement)(EnableFeature, { - featureName: "showIconLabels", - label: (0,external_wp_i18n_namespaceObject.__)('Show button text labels'), - help: (0,external_wp_i18n_namespaceObject.__)('Show text instead of icons on buttons') - })) - }, { - name: 'blocks', - tabLabel: (0,external_wp_i18n_namespaceObject.__)('Blocks'), - content: (0,external_wp_element_namespaceObject.createElement)(preferences_modal_section, { - title: (0,external_wp_i18n_namespaceObject.__)('Block interactions'), - description: (0,external_wp_i18n_namespaceObject.__)('Customize how you interact with blocks in the block library and editing canvas.') - }, (0,external_wp_element_namespaceObject.createElement)(EnableFeature, { - featureName: "keepCaretInsideBlock", - help: (0,external_wp_i18n_namespaceObject.__)('Aids screen readers by stopping text caret from leaving blocks.'), - label: (0,external_wp_i18n_namespaceObject.__)('Contain text cursor inside block') - })) - }]); - - if (!isModalActive) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(PreferencesModal, { - closeModal: toggleModal - }, (0,external_wp_element_namespaceObject.createElement)(PreferencesModalTabs, { - sections: sections - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/tools-more-menu-group/index.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - -const { - Fill: ToolsMoreMenuGroup, - Slot -} = (0,external_wp_components_namespaceObject.createSlotFill)('EditSiteToolsMoreMenuGroup'); - -ToolsMoreMenuGroup.Slot = _ref => { - let { - fillProps - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(Slot, { - fillProps: fillProps - }, fills => !(0,external_lodash_namespaceObject.isEmpty)(fills) && fills); -}; - -/* harmony default export */ var tools_more_menu_group = (ToolsMoreMenuGroup); - -// EXTERNAL MODULE: ./node_modules/downloadjs/download.js -var download = __webpack_require__(8981); -var download_default = /*#__PURE__*/__webpack_require__.n(download); -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/download.js - - -/** - * WordPress dependencies - */ - -const download_download = (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 11.3l-1-1.1-4 4V3h-1.5v11.3L7 10.2l-1 1.1 6.2 5.8 5.8-5.8zm.5 3.7v3.5h-13V15H4v5h16v-5h-1.5z" -})); -/* harmony default export */ var library_download = (download_download); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/more-menu/site-export.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - - - - -function SiteExport() { - const { - createErrorNotice - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); - - async function handleExport() { - try { - const response = await external_wp_apiFetch_default()({ - path: '/wp-block-editor/v1/export', - parse: false - }); - const blob = await response.blob(); - const contentDisposition = response.headers.get('content-disposition'); - const contentDispositionMatches = contentDisposition.match(/=(.+)\.zip/); - const fileName = contentDispositionMatches[1] ? contentDispositionMatches[1] : 'edit-site-export'; - download_default()(blob, fileName + '.zip', 'application/zip'); - } catch (errorResponse) { - let error = {}; - - try { - error = await errorResponse.json(); - } catch (e) {} - - const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('An error occurred while creating the site export.'); - createErrorNotice(errorMessage, { - type: 'snackbar' - }); - } - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - role: "menuitem", - icon: library_download, - onClick: handleExport, - info: (0,external_wp_i18n_namespaceObject.__)('Download your theme with updated templates and styles.') - }, (0,external_wp_i18n_namespaceObject._x)('Export', 'site exporter menu item')); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/more-menu/welcome-guide-menu-item.js - - -/** - * WordPress dependencies - */ - - - - -function WelcomeGuideMenuItem() { - const { - toggle - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - onClick: () => toggle('core/edit-site', 'welcomeGuide') - }, (0,external_wp_i18n_namespaceObject.__)('Welcome Guide')); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/more-menu/copy-content-menu-item.js - - -/** - * WordPress dependencies - */ - - - - - - - -/** - * Internal dependencies - */ - - -function CopyContentMenuItem() { - const { - createNotice - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); - const getText = (0,external_wp_data_namespaceObject.useSelect)(select => { - return () => { - const { - getEditedPostId, - getEditedPostType - } = select(store_store); - const { - getEditedEntityRecord - } = select(external_wp_coreData_namespaceObject.store); - const record = getEditedEntityRecord('postType', getEditedPostType(), getEditedPostId()); - - 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 ''; - }; - }, []); - - function onSuccess() { - createNotice('info', (0,external_wp_i18n_namespaceObject.__)('All content copied.'), { - isDismissible: true, - type: 'snackbar' - }); - } - - const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(getText, onSuccess); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - ref: ref - }, (0,external_wp_i18n_namespaceObject.__)('Copy all content')); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/mode-switcher/index.js - - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - -/** - * Internal dependencies - */ - - -/** - * Set of available mode options. - * - * @type {Array} - */ - -const MODES = [{ - value: 'visual', - label: (0,external_wp_i18n_namespaceObject.__)('Visual editor') -}, { - value: 'text', - label: (0,external_wp_i18n_namespaceObject.__)('Code editor') -}]; - -function ModeSwitcher() { - const { - shortcut, - mode - } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ - shortcut: select(external_wp_keyboardShortcuts_namespaceObject.store).getShortcutRepresentation('core/edit-site/toggle-mode'), - isRichEditingEnabled: select(store_store).getSettings().richEditingEnabled, - isCodeEditingEnabled: select(store_store).getSettings().codeEditingEnabled, - mode: select(store_store).getEditorMode() - }), []); - const { - switchEditorMode - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - const choices = MODES.map(choice => { - if (choice.value !== mode) { - return { ...choice, - shortcut - }; - } - - return choice; - }); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, { - label: (0,external_wp_i18n_namespaceObject.__)('Editor') - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItemsChoice, { - choices: choices, - value: mode, - onSelect: switchEditorMode - })); -} - -/* harmony default export */ var mode_switcher = (ModeSwitcher); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/more-menu/index.js - - -/** - * WordPress dependencies - */ - - - - - - - - -/** - * Internal dependencies - */ - - - - - - - - -function MoreMenu() { - const [isModalActive, toggleModal] = (0,external_wp_element_namespaceObject.useReducer)(isActive => !isActive, false); - const [isPreferencesModalActive, togglePreferencesModal] = (0,external_wp_element_namespaceObject.useReducer)(isActive => !isActive, false); - (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/edit-site/keyboard-shortcuts', toggleModal); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(MoreMenuDropdown, null, _ref => { - let { - onClose - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, { - label: (0,external_wp_i18n_namespaceObject._x)('View', 'noun') - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_preferences_namespaceObject.PreferenceToggleMenuItem, { - scope: "core/edit-site", - name: "fixedToolbar", - label: (0,external_wp_i18n_namespaceObject.__)('Top toolbar'), - info: (0,external_wp_i18n_namespaceObject.__)('Access all block and document tools in a single place'), - messageActivated: (0,external_wp_i18n_namespaceObject.__)('Top toolbar activated'), - messageDeactivated: (0,external_wp_i18n_namespaceObject.__)('Top toolbar deactivated') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_preferences_namespaceObject.PreferenceToggleMenuItem, { - scope: "core/edit-site", - name: "focusMode", - label: (0,external_wp_i18n_namespaceObject.__)('Spotlight mode'), - info: (0,external_wp_i18n_namespaceObject.__)('Focus on one block at a time'), - messageActivated: (0,external_wp_i18n_namespaceObject.__)('Spotlight mode activated'), - messageDeactivated: (0,external_wp_i18n_namespaceObject.__)('Spotlight mode deactivated') - }), (0,external_wp_element_namespaceObject.createElement)(mode_switcher, null), (0,external_wp_element_namespaceObject.createElement)(action_item.Slot, { - name: "core/edit-site/plugin-more-menu", - label: (0,external_wp_i18n_namespaceObject.__)('Plugins'), - as: external_wp_components_namespaceObject.MenuGroup, - fillProps: { - onClick: onClose - } - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, { - label: (0,external_wp_i18n_namespaceObject.__)('Tools') - }, (0,external_wp_element_namespaceObject.createElement)(SiteExport, null), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - onClick: toggleModal, - shortcut: external_wp_keycodes_namespaceObject.displayShortcut.access('h') - }, (0,external_wp_i18n_namespaceObject.__)('Keyboard shortcuts')), (0,external_wp_element_namespaceObject.createElement)(WelcomeGuideMenuItem, null), (0,external_wp_element_namespaceObject.createElement)(CopyContentMenuItem, null), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - icon: library_external, - role: "menuitem", - href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/support/article/site-editor/'), - target: "_blank", - rel: "noopener noreferrer" - }, (0,external_wp_i18n_namespaceObject.__)('Help'), (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)'))), (0,external_wp_element_namespaceObject.createElement)(tools_more_menu_group.Slot, { - fillProps: { - onClose - } - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - onClick: togglePreferencesModal - }, (0,external_wp_i18n_namespaceObject.__)('Preferences')))); - }), (0,external_wp_element_namespaceObject.createElement)(KeyboardShortcutHelpModal, { - isModalActive: isModalActive, - toggleModal: toggleModal - }), (0,external_wp_element_namespaceObject.createElement)(EditSitePreferencesModal, { - isModalActive: isPreferencesModalActive, - toggleModal: togglePreferencesModal - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/save-button/index.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - - -function SaveButton(_ref) { - let { - openEntitiesSavedStates, - isEntitiesSavedStatesOpen - } = _ref; - const { - isDirty, - isSaving - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - __experimentalGetDirtyEntityRecords, - isSavingEntityRecord - } = select(external_wp_coreData_namespaceObject.store); - - const dirtyEntityRecords = __experimentalGetDirtyEntityRecords(); - - return { - isDirty: dirtyEntityRecords.length > 0, - isSaving: (0,external_lodash_namespaceObject.some)(dirtyEntityRecords, record => isSavingEntityRecord(record.kind, record.name, record.key)) - }; - }, []); - const disabled = !isDirty || isSaving; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - variant: "primary", - className: "edit-site-save-button__button", - "aria-disabled": disabled, - "aria-expanded": isEntitiesSavedStatesOpen, - disabled: disabled, - isBusy: isSaving, - onClick: disabled ? undefined : openEntitiesSavedStates - }, (0,external_wp_i18n_namespaceObject.__)('Save'))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/undo.js - - -/** - * WordPress dependencies - */ - -const 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); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/redo.js - - -/** - * WordPress dependencies - */ - -const 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); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/undo-redo/undo.js - - -/** - * WordPress dependencies - */ - - - - - - -function UndoButton() { - const hasUndo = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).hasUndo(), []); - const { - undo - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_undo : library_redo, - 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 - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/undo-redo/redo.js - - -/** - * WordPress dependencies - */ - - - - - - -function RedoButton() { - const hasRedo = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).hasRedo(), []); - const { - redo - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_redo : library_undo, - label: (0,external_wp_i18n_namespaceObject.__)('Redo'), - shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primaryShift('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": !hasRedo, - onClick: hasRedo ? redo : undefined - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-down.js - - -/** - * WordPress dependencies - */ - -const chevronDown = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { - viewBox: "0 0 24 24", - xmlns: "http://www.w3.org/2000/svg" -}, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { - d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z" -})); -/* harmony default export */ var chevron_down = (chevronDown); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/document-actions/index.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - - - - - - -function getBlockDisplayText(block) { - if (block) { - const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(block.name); - return blockType ? (0,external_wp_blocks_namespaceObject.__experimentalGetBlockLabel)(blockType, block.attributes) : null; - } - - return null; -} - -function useSecondaryText() { - const { - getBlock - } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blockEditor_namespaceObject.store); - const activeEntityBlockId = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).__experimentalGetActiveBlockIdByBlockNames(['core/template-part']), []); - - if (activeEntityBlockId) { - return { - label: getBlockDisplayText(getBlock(activeEntityBlockId)), - isActive: true - }; - } - - return {}; -} -/** - * @param {Object} props Props for the DocumentActions component. - * @param {string} props.entityTitle The title to display. - * @param {string} props.entityLabel A label to use for entity-related options. - * E.g. "template" would be used for "edit - * template" and "show template details". - * @param {boolean} props.isLoaded Whether the data is available. - * @param {Function} props.children React component to use for the - * information dropdown area. Should be a - * function which accepts dropdown props. - * @param {boolean} props.showIconLabels Whether buttons display icons or text labels. - */ - - -function DocumentActions(_ref) { - let { - entityTitle, - entityLabel, - isLoaded, - children: dropdownContent, - showIconLabels - } = _ref; - const { - label - } = useSecondaryText(); // The title ref is passed to the popover as the anchorRef so that the - // dropdown is centered over the whole title area rather than just one - // part of it. - - const titleRef = (0,external_wp_element_namespaceObject.useRef)(); // Return a simple loading indicator until we have information to show. - - if (!isLoaded) { - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-document-actions" - }, (0,external_wp_i18n_namespaceObject.__)('Loading…')); - } // Return feedback that the template does not seem to exist. - - - if (!entityTitle) { - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-document-actions" - }, (0,external_wp_i18n_namespaceObject.__)('Template not found')); - } - - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: classnames_default()('edit-site-document-actions', { - 'has-secondary-label': !!label - }) - }, (0,external_wp_element_namespaceObject.createElement)("div", { - ref: titleRef, - className: "edit-site-document-actions__title-wrapper" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalText, { - size: "body", - className: "edit-site-document-actions__title", - as: "h1" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, { - as: "span" - }, (0,external_wp_i18n_namespaceObject.sprintf)( - /* translators: %s: the entity being edited, like "template"*/ - (0,external_wp_i18n_namespaceObject.__)('Editing %s: '), entityLabel)), entityTitle), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalText, { - size: "body", - className: "edit-site-document-actions__secondary-item" - }, label !== null && label !== void 0 ? label : ''), dropdownContent && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Dropdown, { - popoverProps: { - anchorRef: titleRef.current - }, - position: "bottom center", - renderToggle: _ref2 => { - let { - isOpen, - onToggle - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - className: "edit-site-document-actions__get-info", - icon: chevron_down, - "aria-expanded": isOpen, - "aria-haspopup": "true", - onClick: onToggle, - label: (0,external_wp_i18n_namespaceObject.sprintf)( - /* translators: %s: the entity to see details about, like "template"*/ - (0,external_wp_i18n_namespaceObject.__)('Show %s details'), entityLabel) - }, showIconLabels && (0,external_wp_i18n_namespaceObject.__)('Details')); - }, - contentClassName: "edit-site-document-actions__info-dropdown", - renderContent: dropdownContent - }))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/routes/link.js - - - -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - -function useLink() { - let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let state = arguments.length > 1 ? arguments[1] : undefined; - let shouldReplace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - const history = useHistory(); - - function onClick(event) { - event.preventDefault(); - - if (shouldReplace) { - history.replace(params, state); - } else { - history.push(params, state); - } - } - - return { - href: (0,external_wp_url_namespaceObject.addQueryArgs)(window.location.href, params), - onClick - }; -} -function Link(_ref) { - let { - params = {}, - state, - replace: shouldReplace = false, - children, - ...props - } = _ref; - const { - href, - onClick - } = useLink(params, state, shouldReplace); - return (0,external_wp_element_namespaceObject.createElement)("a", extends_extends({ - href: href, - onClick: onClick - }, props), children); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/template-details/template-areas.js - - - -/** - * WordPress dependencies - */ - - - - - - -/** - * Internal dependencies - */ - - - - - - -function TemplatePartItemMore(_ref) { - var _templatePart$title; - - let { - onClose, - templatePart, - closeTemplateDetailsDropdown - } = _ref; - const { - revertTemplate - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - const { - params - } = useLocation(); - const editLinkProps = useLink({ - postId: templatePart.id, - postType: templatePart.type - }, { - fromTemplateId: params.postId - }); - - function editTemplatePart(event) { - editLinkProps.onClick(event); - onClose(); - closeTemplateDetailsDropdown(); - } - - function clearCustomizations() { - revertTemplate(templatePart); - onClose(); - closeTemplateDetailsDropdown(); - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, extends_extends({}, editLinkProps, { - onClick: editTemplatePart - }), (0,external_wp_i18n_namespaceObject.sprintf)( - /* translators: %s: template part title */ - (0,external_wp_i18n_namespaceObject.__)('Edit %s'), (_templatePart$title = templatePart.title) === null || _templatePart$title === void 0 ? void 0 : _templatePart$title.rendered))), isTemplateRevertable(templatePart) && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - info: (0,external_wp_i18n_namespaceObject.__)('Restore template to default state'), - onClick: clearCustomizations - }, (0,external_wp_i18n_namespaceObject.__)('Clear customizations')))); -} - -function TemplatePartItem(_ref2) { - let { - templatePart, - clientId, - closeTemplateDetailsDropdown - } = _ref2; - const { - selectBlock, - toggleBlockHighlight - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); - const templatePartArea = (0,external_wp_data_namespaceObject.useSelect)(select => { - const defaultAreas = select(external_wp_editor_namespaceObject.store).__experimentalGetDefaultTemplatePartAreas(); - - return defaultAreas.find(defaultArea => defaultArea.area === templatePart.area); - }, [templatePart.area]); - - const highlightBlock = () => toggleBlockHighlight(clientId, true); - - const cancelHighlightBlock = () => toggleBlockHighlight(clientId, false); - - return (0,external_wp_element_namespaceObject.createElement)("div", { - role: "menuitem", - className: "edit-site-template-details__template-areas-item" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - role: "button", - icon: templatePartArea === null || templatePartArea === void 0 ? void 0 : templatePartArea.icon, - iconPosition: "left", - onClick: () => { - selectBlock(clientId); - }, - onMouseOver: highlightBlock, - onMouseLeave: cancelHighlightBlock, - onFocus: highlightBlock, - onBlur: cancelHighlightBlock - }, templatePartArea === null || templatePartArea === void 0 ? void 0 : templatePartArea.label), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DropdownMenu, { - icon: more_vertical, - label: (0,external_wp_i18n_namespaceObject.__)('More options'), - className: "edit-site-template-details__template-areas-item-more" - }, _ref3 => { - let { - onClose - } = _ref3; - return (0,external_wp_element_namespaceObject.createElement)(TemplatePartItemMore, { - onClose: onClose, - templatePart: templatePart, - closeTemplateDetailsDropdown: closeTemplateDetailsDropdown - }); - })); -} - -function TemplateAreas(_ref4) { - let { - closeTemplateDetailsDropdown - } = _ref4; - const templateParts = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getCurrentTemplateTemplateParts(), []); - - if (!templateParts.length) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, { - label: (0,external_wp_i18n_namespaceObject.__)('Areas'), - className: "edit-site-template-details__group edit-site-template-details__template-areas" - }, templateParts.map(_ref5 => { - let { - templatePart, - block - } = _ref5; - return (0,external_wp_element_namespaceObject.createElement)(TemplatePartItem, { - key: templatePart.slug, - clientId: block.clientId, - templatePart: templatePart, - closeTemplateDetailsDropdown: closeTemplateDetailsDropdown - }); - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/template-details/edit-template-title.js - - -/** - * WordPress dependencies - */ - - - -function EditTemplateTitle(_ref) { - let { - template - } = _ref; - const [title, setTitle] = (0,external_wp_coreData_namespaceObject.useEntityProp)('postType', template.type, 'title', template.id); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { - label: (0,external_wp_i18n_namespaceObject.__)('Title'), - value: title, - help: (0,external_wp_i18n_namespaceObject.__)('Give the template a title that indicates its purpose, e.g. "Full Width".'), - onChange: newTitle => { - setTitle(newTitle || template.slug); - } - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/template-details/index.js - - - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - - - - - - - -function TemplateDetails(_ref) { - let { - template, - onClose - } = _ref; - const { - title, - description - } = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_editor_namespaceObject.store).__experimentalGetTemplateInfo(template), []); - const { - revertTemplate - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - const templateSubMenu = (0,external_wp_element_namespaceObject.useMemo)(() => { - if ((template === null || template === void 0 ? void 0 : template.type) === 'wp_template') { - return { - title: (0,external_wp_i18n_namespaceObject.__)('templates'), - menu: MENU_TEMPLATES - }; - } - - return TEMPLATE_PARTS_SUB_MENUS.find(_ref2 => { - let { - area - } = _ref2; - return area === (template === null || template === void 0 ? void 0 : template.area); - }); - }, [template]); - const browseAllLinkProps = useLink({ - // TODO: We should update this to filter by template part's areas as well. - postType: template.type, - postId: undefined - }); // Only user-created and non-default templates can change the name. - - const canEditTitle = template.is_custom && !template.has_theme_file; - - if (!template) { - return null; - } - - const revert = () => { - revertTemplate(template); - onClose(); - }; - - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-template-details" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-template-details__group" - }, canEditTitle ? (0,external_wp_element_namespaceObject.createElement)(EditTemplateTitle, { - template: template - }) : (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHeading, { - level: 4, - weight: 600, - className: "edit-site-template-details__title" - }, title), description && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalText, { - size: "body", - className: "edit-site-template-details__description", - as: "p" - }, description)), (0,external_wp_element_namespaceObject.createElement)(TemplateAreas, { - closeTemplateDetailsDropdown: onClose - }), isTemplateRevertable(template) && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, { - className: "edit-site-template-details__group edit-site-template-details__revert" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - className: "edit-site-template-details__revert-button", - info: (0,external_wp_i18n_namespaceObject.__)('Restore template to default state'), - onClick: revert - }, (0,external_wp_i18n_namespaceObject.__)('Clear customizations'))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, extends_extends({ - className: "edit-site-template-details__show-all-button" - }, browseAllLinkProps), (0,external_wp_i18n_namespaceObject.sprintf)( - /* translators: the template part's area name ("Headers", "Sidebars") or "templates". */ - (0,external_wp_i18n_namespaceObject.__)('Browse all %s'), templateSubMenu.title))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/header/index.js - - -/** - * WordPress dependencies - */ - - - - - - - - - - - -/** - * Internal dependencies - */ - - - - - - - - - -const preventDefault = event => { - event.preventDefault(); -}; - -function Header(_ref) { - let { - openEntitiesSavedStates, - isEntitiesSavedStatesOpen, - showIconLabels - } = _ref; - const inserterButton = (0,external_wp_element_namespaceObject.useRef)(); - const { - deviceType, - entityTitle, - template, - templateType, - isInserterOpen, - isListViewOpen, - listViewShortcut, - isLoaded, - isVisualMode - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - __experimentalGetPreviewDeviceType, - getEditedPostType, - getEditedPostId, - isInserterOpened, - isListViewOpened, - getEditorMode - } = select(store_store); - const { - getEditedEntityRecord +const external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"]; +;// CONCATENATED MODULE: external ["wp","commands"] +const external_wp_commands_namespaceObject = window["wp"]["commands"]; +;// CONCATENATED MODULE: external ["wp","coreCommands"] +const external_wp_coreCommands_namespaceObject = window["wp"]["coreCommands"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/error-boundary/warning.js +/** + * WordPress dependencies + */ + + + + + +function CopyButton({ + text, + children +}) { + const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(text); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + variant: "secondary", + ref: ref, + children: children + }); +} +function ErrorBoundaryWarning({ + message, + error +}) { + const actions = [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CopyButton, { + text: error.stack, + children: (0,external_wp_i18n_namespaceObject.__)('Copy Error') + }, "copy-error")]; + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.Warning, { + className: "editor-error-boundary", + actions: actions, + children: message + }); +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/error-boundary/index.js +/** + * WordPress dependencies + */ + + + + +/** + * Internal dependencies + */ + + +class ErrorBoundary extends external_wp_element_namespaceObject.Component { + constructor() { + super(...arguments); + this.state = { + error: null + }; + } + componentDidCatch(error) { + (0,external_wp_hooks_namespaceObject.doAction)('editor.ErrorBoundary.errorLogged', error); + } + static getDerivedStateFromError(error) { + return { + error + }; + } + render() { + if (!this.state.error) { + return this.props.children; + } + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ErrorBoundaryWarning, { + message: (0,external_wp_i18n_namespaceObject.__)('The editor has encountered an unexpected error.'), + error: this.state.error + }); + } +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +/** + * WordPress dependencies + */ + + + + + +/** + * Internal dependencies + */ + + + +const { + useLocation +} = lock_unlock_unlock(external_wp_router_namespaceObject.privateApis); +const postTypesWithoutParentTemplate = [TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE, NAVIGATION_POST_TYPE, PATTERN_TYPES.user]; +const authorizedPostTypes = ['page']; +function useResolveEditedEntityAndContext({ + postId, + postType +}) { + const { + hasLoadedAllDependencies, + homepageId, + postsPageId, + url, + frontPageTemplateId + } = (0,external_wp_data_namespaceObject.useSelect)(select => { + const { + getSite, + getUnstableBase, + getEntityRecords } = select(external_wp_coreData_namespaceObject.store); - const { - __experimentalGetTemplateInfo: getTemplateInfo - } = select(external_wp_editor_namespaceObject.store); - const { - getShortcutRepresentation - } = select(external_wp_keyboardShortcuts_namespaceObject.store); - const postType = getEditedPostType(); - const postId = getEditedPostId(); - const record = getEditedEntityRecord('postType', postType, postId); - - const _isLoaded = !!postId; - - return { - deviceType: __experimentalGetPreviewDeviceType(), - entityTitle: getTemplateInfo(record).title, - isLoaded: _isLoaded, - template: record, - templateType: postType, - isInserterOpen: isInserterOpened(), - isListViewOpen: isListViewOpened(), - listViewShortcut: getShortcutRepresentation('core/edit-site/toggle-list-view'), - isVisualMode: getEditorMode() === 'visual' - }; - }, []); - const { - __experimentalSetPreviewDeviceType: setPreviewDeviceType, - setIsInserterOpened, - setIsListViewOpened - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium'); - const openInserter = (0,external_wp_element_namespaceObject.useCallback)(() => { - if (isInserterOpen) { - // Focusing the inserter button closes the inserter popover. - inserterButton.current.focus(); - } else { - setIsInserterOpened(true); - } - }, [isInserterOpen, setIsInserterOpened]); - const toggleListView = (0,external_wp_element_namespaceObject.useCallback)(() => setIsListViewOpened(!isListViewOpen), [setIsListViewOpened, isListViewOpen]); - const isFocusMode = templateType === 'wp_template_part'; - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-header" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-header_start" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-header__toolbar" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - ref: inserterButton, - variant: "primary", - isPressed: isInserterOpen, - className: "edit-site-header-toolbar__inserter-toggle", - disabled: !isVisualMode, - onMouseDown: preventDefault, - onClick: openInserter, - icon: library_plus, - label: (0,external_wp_i18n_namespaceObject._x)('Toggle block inserter', 'Generic label for block inserter button') - }, showIconLabels && (!isInserterOpen ? (0,external_wp_i18n_namespaceObject.__)('Add') : (0,external_wp_i18n_namespaceObject.__)('Close'))), isLargeViewport && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ToolbarItem, { - as: external_wp_blockEditor_namespaceObject.ToolSelector, - disabled: !isVisualMode - }), (0,external_wp_element_namespaceObject.createElement)(UndoButton, null), (0,external_wp_element_namespaceObject.createElement)(RedoButton, null), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - className: "edit-site-header-toolbar__list-view-toggle", - disabled: !isVisualMode, - icon: list_view, - isPressed: isListViewOpen - /* translators: button label text should, if possible, be under 16 characters. */ - , - label: (0,external_wp_i18n_namespaceObject.__)('List View'), - onClick: toggleListView, - shortcut: listViewShortcut - })))), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-header_center" - }, (0,external_wp_element_namespaceObject.createElement)(DocumentActions, { - entityTitle: entityTitle, - entityLabel: templateType === 'wp_template_part' ? 'template part' : 'template', - isLoaded: isLoaded, - showIconLabels: showIconLabels - }, _ref2 => { - let { - onClose - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(TemplateDetails, { - template: template, - onClose: onClose - }); - })), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-header_end" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-header__actions" - }, !isFocusMode && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalPreviewOptions, { - deviceType: deviceType, - setDeviceType: setPreviewDeviceType - }), (0,external_wp_element_namespaceObject.createElement)(SaveButton, { - openEntitiesSavedStates: openEntitiesSavedStates, - isEntitiesSavedStatesOpen: isEntitiesSavedStatesOpen - }), (0,external_wp_element_namespaceObject.createElement)(pinned_items.Slot, { - scope: "core/edit-site" - }), (0,external_wp_element_namespaceObject.createElement)(MoreMenu, null)))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/cog.js - - -/** - * WordPress dependencies - */ - -const cog = (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: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z", - clipRule: "evenodd" -})); -/* harmony default export */ var library_cog = (cog); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/default-sidebar.js - - -/** - * WordPress dependencies - */ - -function default_sidebar_DefaultSidebar(_ref) { - let { - className, - identifier, - title, - icon, - children, - closeLabel, - header, - headerClassName, - panelClassName - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(complementary_area, { - className: className, - scope: "core/edit-site", - identifier: identifier, - title: title, - icon: icon, - closeLabel: closeLabel, - header: header, - headerClassName: headerClassName, - panelClassName: panelClassName - }, children), (0,external_wp_element_namespaceObject.createElement)(ComplementaryAreaMoreMenuItem, { - scope: "core/edit-site", - identifier: identifier, - icon: icon - }, title)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/styles.js - - -/** - * WordPress dependencies - */ - -const styles = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { - viewBox: "0 0 24 24", - xmlns: "http://www.w3.org/2000/svg" -}, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { - d: "M12 4c-4.4 0-8 3.6-8 8v.1c0 4.1 3.2 7.5 7.2 7.9h.8c4.4 0 8-3.6 8-8s-3.6-8-8-8zm0 15V5c3.9 0 7 3.1 7 7s-3.1 7-7 7z" -})); -/* harmony default export */ var library_styles = (styles); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/icon-with-current-color.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - -function IconWithCurrentColor(_ref) { - let { - className, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, extends_extends({ - className: classnames_default()(className, 'edit-site-global-styles-icon-with-current-color') - }, props)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/navigation-button.js - - - -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - - -function GenericNavigationButton(_ref) { - let { - icon, - children, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItem, props, icon && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)(IconWithCurrentColor, { - icon: icon, - size: 24 - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, children)), !icon && children); -} - -function NavigationButton(props) { - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorButton, extends_extends({ - as: GenericNavigationButton - }, props)); -} - -function NavigationBackButton(props) { - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorBackButton, extends_extends({ - as: GenericNavigationButton - }, props)); -} - - - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/typography.js - - -/** - * WordPress dependencies - */ - -const typography = (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: "M6.9 7L3 17.8h1.7l1-2.8h4.1l1 2.8h1.7L8.6 7H6.9zm-.7 6.6l1.5-4.3 1.5 4.3h-3zM21.6 17c-.1.1-.2.2-.3.2-.1.1-.2.1-.4.1s-.3-.1-.4-.2c-.1-.1-.1-.3-.1-.6V12c0-.5 0-1-.1-1.4-.1-.4-.3-.7-.5-1-.2-.2-.5-.4-.9-.5-.4 0-.8-.1-1.3-.1s-1 .1-1.4.2c-.4.1-.7.3-1 .4-.2.2-.4.3-.6.5-.1.2-.2.4-.2.7 0 .3.1.5.2.8.2.2.4.3.8.3.3 0 .6-.1.8-.3.2-.2.3-.4.3-.7 0-.3-.1-.5-.2-.7-.2-.2-.4-.3-.6-.4.2-.2.4-.3.7-.4.3-.1.6-.1.8-.1.3 0 .6 0 .8.1.2.1.4.3.5.5.1.2.2.5.2.9v1.1c0 .3-.1.5-.3.6-.2.2-.5.3-.9.4-.3.1-.7.3-1.1.4-.4.1-.8.3-1.1.5-.3.2-.6.4-.8.7-.2.3-.3.7-.3 1.2 0 .6.2 1.1.5 1.4.3.4.9.5 1.6.5.5 0 1-.1 1.4-.3.4-.2.8-.6 1.1-1.1 0 .4.1.7.3 1 .2.3.6.4 1.2.4.4 0 .7-.1.9-.2.2-.1.5-.3.7-.4h-.3zm-3-.9c-.2.4-.5.7-.8.8-.3.2-.6.2-.8.2-.4 0-.6-.1-.9-.3-.2-.2-.3-.6-.3-1.1 0-.5.1-.9.3-1.2s.5-.5.8-.7c.3-.2.7-.3 1-.5.3-.1.6-.3.7-.6v3.4z" -})); -/* harmony default export */ var library_typography = (typography); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/color.js - - -/** - * WordPress dependencies - */ - -const color = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { - viewBox: "0 0 24 24", - xmlns: "http://www.w3.org/2000/svg" -}, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { - d: "M17.2 10.9c-.5-1-1.2-2.1-2.1-3.2-.6-.9-1.3-1.7-2.1-2.6L12 4l-1 1.1c-.6.9-1.3 1.7-2 2.6-.8 1.2-1.5 2.3-2 3.2-.6 1.2-1 2.2-1 3 0 3.4 2.7 6.1 6.1 6.1s6.1-2.7 6.1-6.1c0-.8-.3-1.8-1-3zm-5.1 7.6c-2.5 0-4.6-2.1-4.6-4.6 0-.3.1-1 .8-2.3.5-.9 1.1-1.9 2-3.1.7-.9 1.3-1.7 1.8-2.3.7.8 1.3 1.6 1.8 2.3.8 1.1 1.5 2.2 2 3.1.7 1.3.8 2 .8 2.3 0 2.5-2.1 4.6-4.6 4.6z" -})); -/* harmony default export */ var library_color = (color); - -;// 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: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/utils.js -/** - * External dependencies - */ - -/* Supporting data. */ - -const ROOT_BLOCK_NAME = 'root'; -const ROOT_BLOCK_SELECTOR = 'body'; -const ROOT_BLOCK_SUPPORTS = (/* unused pure expression or super */ null && (['background', 'backgroundColor', 'color', 'linkColor', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'lineHeight', 'textDecoration', 'textTransform', 'padding'])); -const PRESET_METADATA = [{ - path: ['color', 'palette'], - valueKey: 'color', - cssVarInfix: 'color', - classes: [{ - classSuffix: 'color', - propertyName: 'color' - }, { - classSuffix: 'background-color', - propertyName: 'background-color' - }, { - classSuffix: 'border-color', - propertyName: 'border-color' - }] -}, { - path: ['color', 'gradients'], - valueKey: 'gradient', - cssVarInfix: 'gradient', - classes: [{ - classSuffix: 'gradient-background', - propertyName: 'background' - }] -}, { - path: ['color', 'duotone'], - cssVarInfix: 'duotone', - valueFunc: _ref => { - let { - slug - } = _ref; - return `url( '#wp-duotone-${slug}' )`; - }, - classes: [] -}, { - path: ['typography', 'fontSizes'], - valueKey: 'size', - cssVarInfix: 'font-size', - classes: [{ - classSuffix: 'font-size', - propertyName: 'font-size' - }] -}, { - path: ['typography', 'fontFamilies'], - valueKey: 'fontFamily', - cssVarInfix: 'font-family', - classes: [{ - classSuffix: 'font-family', - propertyName: 'font-family' - }] -}]; -const STYLE_PATH_TO_CSS_VAR_INFIX = { - 'color.background': 'color', - 'color.text': 'color', - 'elements.link.color.text': 'color', - 'color.gradient': 'gradient', - 'typography.fontSize': 'font-size', - 'typography.fontFamily': 'font-family' -}; - -function findInPresetsBy(features, blockName, presetPath, presetProperty, presetValueValue) { - // Block presets take priority above root level presets. - const orderedPresetsByOrigin = [(0,external_lodash_namespaceObject.get)(features, ['blocks', blockName, ...presetPath]), (0,external_lodash_namespaceObject.get)(features, presetPath)]; - - for (const presetByOrigin of orderedPresetsByOrigin) { - if (presetByOrigin) { - // Preset origins ordered by priority. - const origins = ['custom', 'theme', 'default']; - - for (const origin of origins) { - const presets = presetByOrigin[origin]; - - if (presets) { - const presetObject = (0,external_lodash_namespaceObject.find)(presets, preset => preset[presetProperty] === presetValueValue); - - if (presetObject) { - if (presetProperty === 'slug') { - return presetObject; - } // If there is a highest priority preset with the same slug but different value the preset we found was overwritten and should be ignored. - - - const highestPresetObjectWithSameSlug = findInPresetsBy(features, blockName, presetPath, 'slug', presetObject.slug); - - if (highestPresetObjectWithSameSlug[presetProperty] === presetObject[presetProperty]) { - return presetObject; - } - - return undefined; - } - } - } - } - } -} - -function getPresetVariableFromValue(features, blockName, variableStylePath, presetPropertyValue) { - if (!presetPropertyValue) { - return presetPropertyValue; - } - - const cssVarInfix = STYLE_PATH_TO_CSS_VAR_INFIX[variableStylePath]; - const metadata = (0,external_lodash_namespaceObject.find)(PRESET_METADATA, ['cssVarInfix', cssVarInfix]); - - if (!metadata) { - // The property doesn't have preset data - // so the value should be returned as it is. - return presetPropertyValue; - } - - const { - valueKey, - path - } = metadata; - const presetObject = findInPresetsBy(features, blockName, path, valueKey, presetPropertyValue); - - if (!presetObject) { - // Value wasn't found in the presets, - // so it must be a custom value. - return presetPropertyValue; - } - - return `var:preset|${cssVarInfix}|${presetObject.slug}`; -} - -function getValueFromPresetVariable(features, blockName, variable, _ref2) { - let [presetType, slug] = _ref2; - const metadata = (0,external_lodash_namespaceObject.find)(PRESET_METADATA, ['cssVarInfix', presetType]); - - if (!metadata) { - return variable; - } - - const presetObject = findInPresetsBy(features, blockName, metadata.path, 'slug', slug); - - if (presetObject) { - const { - valueKey - } = metadata; - const result = presetObject[valueKey]; - return getValueFromVariable(features, blockName, result); - } - - return variable; -} - -function getValueFromCustomVariable(features, blockName, variable, path) { - var _get; - - const result = (_get = (0,external_lodash_namespaceObject.get)(features, ['blocks', blockName, 'custom', ...path])) !== null && _get !== void 0 ? _get : (0,external_lodash_namespaceObject.get)(features, ['custom', ...path]); - - if (!result) { - return variable; - } // A variable may reference another variable so we need recursion until we find the value. - - - return getValueFromVariable(features, blockName, result); -} - -function getValueFromVariable(features, blockName, variable) { - if (!variable || !(0,external_lodash_namespaceObject.isString)(variable)) { - return variable; - } - - const USER_VALUE_PREFIX = 'var:'; - const THEME_VALUE_PREFIX = 'var(--wp--'; - const THEME_VALUE_SUFFIX = ')'; - let parsedVar; - - if (variable.startsWith(USER_VALUE_PREFIX)) { - parsedVar = variable.slice(USER_VALUE_PREFIX.length).split('|'); - } else if (variable.startsWith(THEME_VALUE_PREFIX) && variable.endsWith(THEME_VALUE_SUFFIX)) { - parsedVar = variable.slice(THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length).split('--'); - } else { - // We don't know how to parse the value: either is raw of uses complex CSS such as `calc(1px * var(--wp--variable) )` - return variable; - } - - const [type, ...path] = parsedVar; - - if (type === 'preset') { - return getValueFromPresetVariable(features, blockName, variable, path); - } - - if (type === 'custom') { - return getValueFromCustomVariable(features, blockName, variable, path); - } - - return variable; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/context.js -/** - * WordPress dependencies - */ - -const DEFAULT_GLOBAL_STYLES_CONTEXT = { - user: {}, - base: {}, - merged: {}, - setUserConfig: () => {} -}; -const GlobalStylesContext = (0,external_wp_element_namespaceObject.createContext)(DEFAULT_GLOBAL_STYLES_CONTEXT); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/hooks.js -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - - - -const EMPTY_CONFIG = { - settings: {}, - styles: {} -}; -const useGlobalStylesReset = () => { - const { - user: config, - setUserConfig - } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext); - const canReset = !!config && !(0,external_lodash_namespaceObject.isEqual)(config, EMPTY_CONFIG); - return [canReset, (0,external_wp_element_namespaceObject.useCallback)(() => setUserConfig(() => EMPTY_CONFIG), [setUserConfig])]; -}; -function useSetting(path, blockName) { - var _getSettingValueForCo; - - let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'all'; - const { - merged: mergedConfig, - base: baseConfig, - user: userConfig, - setUserConfig - } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext); - const fullPath = !blockName ? `settings.${path}` : `settings.blocks.${blockName}.${path}`; - - const setSetting = newValue => { - setUserConfig(currentConfig => { - const newUserConfig = (0,external_lodash_namespaceObject.cloneDeep)(currentConfig); - const pathToSet = external_wp_blocks_namespaceObject.__EXPERIMENTAL_PATHS_WITH_MERGE[path] ? fullPath + '.custom' : fullPath; - (0,external_lodash_namespaceObject.set)(newUserConfig, pathToSet, newValue); - return newUserConfig; - }); - }; - - const getSettingValueForContext = name => { - const currentPath = !name ? `settings.${path}` : `settings.blocks.${name}.${path}`; - - const getSettingValue = configToUse => { - const result = (0,external_lodash_namespaceObject.get)(configToUse, currentPath); - - if (external_wp_blocks_namespaceObject.__EXPERIMENTAL_PATHS_WITH_MERGE[path]) { - var _ref, _result$custom; - - return (_ref = (_result$custom = result === null || result === void 0 ? void 0 : result.custom) !== null && _result$custom !== void 0 ? _result$custom : result === null || result === void 0 ? void 0 : result.theme) !== null && _ref !== void 0 ? _ref : result === null || result === void 0 ? void 0 : result.default; - } - - return result; - }; - - let result; - - switch (source) { - case 'all': - result = getSettingValue(mergedConfig); - break; - - case 'user': - result = getSettingValue(userConfig); - break; - - case 'base': - result = getSettingValue(baseConfig); - break; - - default: - throw 'Unsupported source'; - } - - return result; - }; // Unlike styles settings get inherited from top level settings. - - - const resultWithFallback = (_getSettingValueForCo = getSettingValueForContext(blockName)) !== null && _getSettingValueForCo !== void 0 ? _getSettingValueForCo : getSettingValueForContext(); - return [resultWithFallback, setSetting]; -} -function useStyle(path, blockName) { - var _get; - - let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'all'; - const { - merged: mergedConfig, - base: baseConfig, - user: userConfig, - setUserConfig - } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext); - const finalPath = !blockName ? `styles.${path}` : `styles.blocks.${blockName}.${path}`; - - const setStyle = newValue => { - setUserConfig(currentConfig => { - const newUserConfig = (0,external_lodash_namespaceObject.cloneDeep)(currentConfig); - (0,external_lodash_namespaceObject.set)(newUserConfig, finalPath, getPresetVariableFromValue(mergedConfig.settings, blockName, path, newValue)); - return newUserConfig; - }); - }; - - let result; - - switch (source) { - case 'all': - result = getValueFromVariable(mergedConfig.settings, blockName, (_get = (0,external_lodash_namespaceObject.get)(userConfig, finalPath)) !== null && _get !== void 0 ? _get : (0,external_lodash_namespaceObject.get)(baseConfig, finalPath)); - break; - - case 'user': - result = getValueFromVariable(mergedConfig.settings, blockName, (0,external_lodash_namespaceObject.get)(userConfig, finalPath)); - break; - - case 'base': - result = getValueFromVariable(baseConfig.settings, blockName, (0,external_lodash_namespaceObject.get)(baseConfig, finalPath)); - break; - - default: - throw 'Unsupported source'; - } - - return [result, setStyle]; -} -const hooks_ROOT_BLOCK_SUPPORTS = ['background', 'backgroundColor', 'color', 'linkColor', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'lineHeight', 'textDecoration', 'textTransform', 'padding']; -function getSupportedGlobalStylesPanels(name) { - if (!name) { - return hooks_ROOT_BLOCK_SUPPORTS; - } - - const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(name); - - if (!blockType) { - return []; - } - - const supportKeys = []; - Object.keys(external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY).forEach(styleName => { - if (!external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY[styleName].support) { - return; - } // Opting out means that, for certain support keys like background color, - // blocks have to explicitly set the support value false. If the key is - // unset, we still enable it. - - - if (external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY[styleName].requiresOptOut) { - if ((0,external_lodash_namespaceObject.has)(blockType.supports, external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY[styleName].support[0]) && (0,external_lodash_namespaceObject.get)(blockType.supports, external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY[styleName].support) !== false) { - return supportKeys.push(styleName); - } - } - - if ((0,external_lodash_namespaceObject.get)(blockType.supports, external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY[styleName].support, false)) { - return supportKeys.push(styleName); - } - }); - return supportKeys; -} -function useColorsPerOrigin(name) { - const [customColors] = useSetting('color.palette.custom', name); - const [themeColors] = useSetting('color.palette.theme', name); - const [defaultColors] = useSetting('color.palette.default', name); - const [shouldDisplayDefaultColors] = useSetting('color.defaultPalette'); - return (0,external_wp_element_namespaceObject.useMemo)(() => { - const result = []; - - if (themeColors && themeColors.length) { - result.push({ - name: (0,external_wp_i18n_namespaceObject._x)('Theme', 'Indicates this palette comes from the theme.'), - colors: themeColors - }); - } - - if (shouldDisplayDefaultColors && defaultColors && defaultColors.length) { - result.push({ - name: (0,external_wp_i18n_namespaceObject._x)('Default', 'Indicates this palette comes from WordPress.'), - colors: defaultColors - }); - } - - if (customColors && customColors.length) { - result.push({ - name: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Indicates this palette is created by the user.'), - colors: customColors - }); - } - - return result; - }, [customColors, themeColors, defaultColors]); -} -function useGradientsPerOrigin(name) { - const [customGradients] = useSetting('color.gradients.custom', name); - const [themeGradients] = useSetting('color.gradients.theme', name); - const [defaultGradients] = useSetting('color.gradients.default', name); - const [shouldDisplayDefaultGradients] = useSetting('color.defaultGradients'); - return (0,external_wp_element_namespaceObject.useMemo)(() => { - const result = []; - - if (themeGradients && themeGradients.length) { - result.push({ - name: (0,external_wp_i18n_namespaceObject._x)('Theme', 'Indicates this palette comes from the theme.'), - gradients: themeGradients - }); - } - - if (shouldDisplayDefaultGradients && defaultGradients && defaultGradients.length) { - result.push({ - name: (0,external_wp_i18n_namespaceObject._x)('Default', 'Indicates this palette comes from WordPress.'), - gradients: defaultGradients - }); - } - - if (customGradients && customGradients.length) { - result.push({ - name: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Indicates this palette is created by the user.'), - gradients: customGradients - }); - } - - return result; - }, [customGradients, themeGradients, defaultGradients]); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/border-panel.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - -const MIN_BORDER_WIDTH = 0; -function useHasBorderPanel(name) { - const controls = [useHasBorderColorControl(name), useHasBorderRadiusControl(name), useHasBorderStyleControl(name), useHasBorderWidthControl(name)]; - return controls.some(Boolean); -} - -function useHasBorderColorControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - return useSetting('border.color', name)[0] && supports.includes('borderColor'); -} - -function useHasBorderRadiusControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - return useSetting('border.radius', name)[0] && supports.includes('borderRadius'); -} - -function useHasBorderStyleControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - return useSetting('border.style', name)[0] && supports.includes('borderStyle'); -} - -function useHasBorderWidthControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - return useSetting('border.width', name)[0] && supports.includes('borderWidth'); -} - -function BorderPanel(_ref) { - let { - name - } = _ref; - // To better reflect if the user has customized a value we need to - // ensure the style value being checked is from the `user` origin. - const [userBorderStyles] = useStyle('border', name, 'user'); - - const createHasValueCallback = feature => () => !!(userBorderStyles !== null && userBorderStyles !== void 0 && userBorderStyles[feature]); - - const createResetCallback = setStyle => () => setStyle(undefined); - - const handleOnChange = setStyle => value => { - setStyle(value || undefined); - }; - - const units = (0,external_wp_components_namespaceObject.__experimentalUseCustomUnits)({ - availableUnits: useSetting('spacing.units')[0] || ['px', 'em', 'rem'] - }); // Border width. - - const showBorderWidth = useHasBorderWidthControl(name); - const [borderWidthValue, setBorderWidth] = useStyle('border.width', name); // Border style. - - const showBorderStyle = useHasBorderStyleControl(name); - const [borderStyle, setBorderStyle] = useStyle('border.style', name); // When we set a border color or width ensure we have a style so the user - // can see a visible border. - - const handleOnChangeWithStyle = setStyle => value => { - if (!!value && !borderStyle) { - setBorderStyle('solid'); - } - - setStyle(value || undefined); - }; // Border color. - - - const showBorderColor = useHasBorderColorControl(name); - const [borderColor, setBorderColor] = useStyle('border.color', name); - const disableCustomColors = !useSetting('color.custom')[0]; - const disableCustomGradients = !useSetting('color.customGradient')[0]; - const borderColorSettings = [{ - label: (0,external_wp_i18n_namespaceObject.__)('Color'), - colors: useColorsPerOrigin(name), - colorValue: borderColor, - onColorChange: handleOnChangeWithStyle(setBorderColor), - clearable: false - }]; // Border radius. - - const showBorderRadius = useHasBorderRadiusControl(name); - const [borderRadiusValues, setBorderRadius] = useStyle('border.radius', name); - - const hasBorderRadius = () => { - const borderValues = userBorderStyles === null || userBorderStyles === void 0 ? void 0 : userBorderStyles.radius; - - if (typeof borderValues === 'object') { - return Object.entries(borderValues).some(Boolean); - } - - return !!borderValues; - }; - - const resetAll = () => { - setBorderColor(undefined); - setBorderRadius(undefined); - setBorderStyle(undefined); - setBorderWidth(undefined); - }; - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanel, { - label: (0,external_wp_i18n_namespaceObject.__)('Border'), - resetAll: resetAll - }, showBorderWidth && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - className: "single-column", - hasValue: createHasValueCallback('width'), - label: (0,external_wp_i18n_namespaceObject.__)('Width'), - onDeselect: createResetCallback(setBorderWidth), - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalUnitControl, { - value: borderWidthValue, - label: (0,external_wp_i18n_namespaceObject.__)('Width'), - min: MIN_BORDER_WIDTH, - onChange: handleOnChangeWithStyle(setBorderWidth), - units: units - })), showBorderStyle && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - className: "single-column", - hasValue: createHasValueCallback('style'), - label: (0,external_wp_i18n_namespaceObject.__)('Style'), - onDeselect: createResetCallback(setBorderStyle), - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalBorderStyleControl, { - value: borderStyle, - onChange: handleOnChange(setBorderStyle) - })), showBorderColor && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - hasValue: createHasValueCallback('color'), - label: (0,external_wp_i18n_namespaceObject.__)('Color'), - onDeselect: createResetCallback(setBorderColor), - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalColorGradientSettingsDropdown, { - __experimentalHasMultipleOrigins: true, - __experimentalIsRenderedInSidebar: true, - disableCustomColors: disableCustomColors, - disableCustomGradients: disableCustomGradients, - enableAlpha: true, - settings: borderColorSettings - })), showBorderRadius && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - hasValue: hasBorderRadius, - label: (0,external_wp_i18n_namespaceObject.__)('Radius'), - onDeselect: createResetCallback(setBorderRadius), - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalBorderRadiusControl, { - values: borderRadiusValues, - onChange: handleOnChange(setBorderRadius) - }))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/color-utils.js -/** - * Internal dependencies - */ - -function useHasColorPanel(name) { - const supports = getSupportedGlobalStylesPanels(name); - return supports.includes('color') || supports.includes('backgroundColor') || supports.includes('background') || supports.includes('linkColor'); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/dimensions-panel.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - -const AXIAL_SIDES = ['horizontal', 'vertical']; -function useHasDimensionsPanel(name) { - const hasPadding = useHasPadding(name); - const hasMargin = useHasMargin(name); - const hasGap = useHasGap(name); - return hasPadding || hasMargin || hasGap; -} - -function useHasPadding(name) { - const supports = getSupportedGlobalStylesPanels(name); - const [settings] = useSetting('spacing.padding', name); - return settings && supports.includes('padding'); -} - -function useHasMargin(name) { - const supports = getSupportedGlobalStylesPanels(name); - const [settings] = useSetting('spacing.margin', name); - return settings && supports.includes('margin'); -} - -function useHasGap(name) { - const supports = getSupportedGlobalStylesPanels(name); - const [settings] = useSetting('spacing.blockGap', name); // Do not show the gap control panel for block-level global styles - // as they do not work on the frontend. - // See: https://github.com/WordPress/gutenberg/pull/39845. - // We can revert this condition when they're working again. - - return !!name ? false : settings && supports.includes('--wp--style--block-gap'); -} - -function filterValuesBySides(values, sides) { - if (!sides) { - // If no custom side configuration all sides are opted into by default. - return values; - } // Only include sides opted into within filtered values. - - - const filteredValues = {}; - sides.forEach(side => { - if (side === 'vertical') { - filteredValues.top = values.top; - filteredValues.bottom = values.bottom; - } - - if (side === 'horizontal') { - filteredValues.left = values.left; - filteredValues.right = values.right; - } - - filteredValues[side] = values[side]; - }); - return filteredValues; -} - -function splitStyleValue(value) { - // Check for shorthand value ( a string value ). - if (value && typeof value === 'string') { - // Convert to value for individual sides for BoxControl. - return { - top: value, - right: value, - bottom: value, - left: value - }; - } - - return value; -} - -function DimensionsPanel(_ref) { - let { - name - } = _ref; - const showPaddingControl = useHasPadding(name); - const showMarginControl = useHasMargin(name); - const showGapControl = useHasGap(name); - const units = (0,external_wp_components_namespaceObject.__experimentalUseCustomUnits)({ - availableUnits: useSetting('spacing.units', name)[0] || ['%', 'px', 'em', 'rem', 'vw'] - }); - const [rawPadding, setRawPadding] = useStyle('spacing.padding', name); - const paddingValues = splitStyleValue(rawPadding); - const paddingSides = (0,external_wp_blockEditor_namespaceObject.__experimentalUseCustomSides)(name, 'padding'); - const isAxialPadding = paddingSides && paddingSides.some(side => AXIAL_SIDES.includes(side)); - - const setPaddingValues = newPaddingValues => { - const padding = filterValuesBySides(newPaddingValues, paddingSides); - setRawPadding(padding); - }; - - const resetPaddingValue = () => setPaddingValues({}); - - const hasPaddingValue = () => !!paddingValues && Object.keys(paddingValues).length; - - const [rawMargin, setRawMargin] = useStyle('spacing.margin', name); - const marginValues = splitStyleValue(rawMargin); - const marginSides = (0,external_wp_blockEditor_namespaceObject.__experimentalUseCustomSides)(name, 'margin'); - const isAxialMargin = marginSides && marginSides.some(side => AXIAL_SIDES.includes(side)); - - const setMarginValues = newMarginValues => { - const margin = filterValuesBySides(newMarginValues, marginSides); - setRawMargin(margin); - }; - - const resetMarginValue = () => setMarginValues({}); - - const hasMarginValue = () => !!marginValues && Object.keys(marginValues).length; - - const [gapValue, setGapValue] = useStyle('spacing.blockGap', name); - - const resetGapValue = () => setGapValue(undefined); - - const hasGapValue = () => !!gapValue; - - const resetAll = () => { - resetPaddingValue(); - resetMarginValue(); - resetGapValue(); - }; - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanel, { - label: (0,external_wp_i18n_namespaceObject.__)('Dimensions'), - resetAll: resetAll - }, showPaddingControl && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - hasValue: hasPaddingValue, - label: (0,external_wp_i18n_namespaceObject.__)('Padding'), - onDeselect: resetPaddingValue, - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalBoxControl, { - values: paddingValues, - onChange: setPaddingValues, - label: (0,external_wp_i18n_namespaceObject.__)('Padding'), - sides: paddingSides, - units: units, - allowReset: false, - splitOnAxis: isAxialPadding - })), showMarginControl && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - hasValue: hasMarginValue, - label: (0,external_wp_i18n_namespaceObject.__)('Margin'), - onDeselect: resetMarginValue, - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalBoxControl, { - values: marginValues, - onChange: setMarginValues, - label: (0,external_wp_i18n_namespaceObject.__)('Margin'), - sides: marginSides, - units: units, - allowReset: false, - splitOnAxis: isAxialMargin - })), showGapControl && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, { - hasValue: hasGapValue, - label: (0,external_wp_i18n_namespaceObject.__)('Block spacing'), - onDeselect: resetGapValue, - isShownByDefault: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalUnitControl, { - label: (0,external_wp_i18n_namespaceObject.__)('Block spacing'), - __unstableInputWidth: "80px", - min: 0, - onChange: setGapValue, - units: units, - value: gapValue - }))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/typography-panel.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - -function useHasTypographyPanel(name) { - const hasLineHeight = useHasLineHeightControl(name); - const hasFontAppearance = useHasAppearanceControl(name); - const hasLetterSpacing = useHasLetterSpacingControl(name); - const supports = getSupportedGlobalStylesPanels(name); - return hasLineHeight || hasFontAppearance || hasLetterSpacing || supports.includes('fontSize'); -} - -function useHasLineHeightControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - return useSetting('typography.lineHeight', name)[0] && supports.includes('lineHeight'); -} - -function useHasAppearanceControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - const hasFontStyles = useSetting('typography.fontStyle', name)[0] && supports.includes('fontStyle'); - const hasFontWeights = useSetting('typography.fontWeight', name)[0] && supports.includes('fontWeight'); - return hasFontStyles || hasFontWeights; -} - -function useHasLetterSpacingControl(name) { - const supports = getSupportedGlobalStylesPanels(name); - return useSetting('typography.letterSpacing', name)[0] && supports.includes('letterSpacing'); -} - -function TypographyPanel(_ref) { - let { - name, - element - } = _ref; - const supports = getSupportedGlobalStylesPanels(name); - const prefix = element === 'text' || !element ? '' : `elements.${element}.`; - const [fontSizes] = useSetting('typography.fontSizes', name); - const disableCustomFontSizes = !useSetting('typography.customFontSize', name)[0]; - const [fontFamilies] = useSetting('typography.fontFamilies', name); - const hasFontStyles = useSetting('typography.fontStyle', name)[0] && supports.includes('fontStyle'); - const hasFontWeights = useSetting('typography.fontWeight', name)[0] && supports.includes('fontWeight'); - const hasLineHeightEnabled = useHasLineHeightControl(name); - const hasAppearanceControl = useHasAppearanceControl(name); - const hasLetterSpacingControl = useHasLetterSpacingControl(name); - const [fontFamily, setFontFamily] = useStyle(prefix + 'typography.fontFamily', name); - const [fontSize, setFontSize] = useStyle(prefix + 'typography.fontSize', name); - const [fontStyle, setFontStyle] = useStyle(prefix + 'typography.fontStyle', name); - const [fontWeight, setFontWeight] = useStyle(prefix + 'typography.fontWeight', name); - const [lineHeight, setLineHeight] = useStyle(prefix + 'typography.lineHeight', name); - const [letterSpacing, setLetterSpacing] = useStyle(prefix + 'typography.letterSpacing', name); - const [backgroundColor] = useStyle(prefix + 'color.background', name); - const [gradientValue] = useStyle(prefix + 'color.gradient', name); - const [color] = useStyle(prefix + 'color.text', name); - const extraStyles = element === 'link' ? { - textDecoration: 'underline' - } : {}; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { - className: "edit-site-typography-panel", - initialOpen: true - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-typography-panel__preview", - style: { - fontFamily: fontFamily !== null && fontFamily !== void 0 ? fontFamily : 'serif', - background: gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor, - color, - fontSize, - fontStyle, - fontWeight, - letterSpacing, - ...extraStyles - } - }, "Aa"), supports.includes('fontFamily') && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalFontFamilyControl, { - fontFamilies: fontFamilies, - value: fontFamily, - onChange: setFontFamily - }), supports.includes('fontSize') && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FontSizePicker, { - value: fontSize, - onChange: setFontSize, - fontSizes: fontSizes, - disableCustomFontSizes: disableCustomFontSizes - }), hasLineHeightEnabled && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalSpacer, { - marginBottom: 6 - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.LineHeightControl, { - __nextHasNoMarginBottom: true, - value: lineHeight, - onChange: setLineHeight - })), hasAppearanceControl && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalFontAppearanceControl, { - value: { - fontStyle, - fontWeight - }, - onChange: _ref2 => { - let { - fontStyle: newFontStyle, - fontWeight: newFontWeight - } = _ref2; - setFontStyle(newFontStyle); - setFontWeight(newFontWeight); - }, - hasFontStyles: hasFontStyles, - hasFontWeights: hasFontWeights - }), hasLetterSpacingControl && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalLetterSpacingControl, { - value: letterSpacing, - onChange: setLetterSpacing - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/context-menu.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - - - - - -function ContextMenu(_ref) { - let { - name, - parentMenu = '' - } = _ref; - const hasTypographyPanel = useHasTypographyPanel(name); - const hasColorPanel = useHasColorPanel(name); - const hasBorderPanel = useHasBorderPanel(name); - const hasDimensionsPanel = useHasDimensionsPanel(name); - const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItemGroup, null, hasTypographyPanel && (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - icon: library_typography, - path: parentMenu + '/typography' - }, (0,external_wp_i18n_namespaceObject.__)('Typography')), hasColorPanel && (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - icon: library_color, - path: parentMenu + '/colors' - }, (0,external_wp_i18n_namespaceObject.__)('Colors')), hasLayoutPanel && (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - icon: library_layout, - path: parentMenu + '/layout' - }, (0,external_wp_i18n_namespaceObject.__)('Layout'))); -} - -/* harmony default export */ var context_menu = (ContextMenu); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/style-engine/build-module/styles/utils.js -/** - * External dependencies - */ - -/** - * Internal dependencies - */ - -function generateBoxRules(style, options, path, ruleKey) { - const boxStyle = (0,external_lodash_namespaceObject.get)(style, path); - - if (!boxStyle) { - return []; - } - - const rules = []; - - if (typeof boxStyle === 'string') { - rules.push({ - selector: options.selector, - key: ruleKey, - value: boxStyle - }); - } else { - const sideRules = ['top', 'right', 'bottom', 'left'].reduce((acc, side) => { - const value = (0,external_lodash_namespaceObject.get)(boxStyle, [side]); - - if (value) { - acc.push({ - selector: options.selector, - key: `${ruleKey}${(0,external_lodash_namespaceObject.upperFirst)(side)}`, - value - }); - } - - return acc; - }, []); - rules.push(...sideRules); - } - - return rules; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/style-engine/build-module/styles/padding.js -/** - * Internal dependencies - */ - -const padding = { - name: 'padding', - generate: (style, options) => { - return generateBoxRules(style, options, ['spacing', 'padding'], 'padding'); - } -}; -/* harmony default export */ var styles_padding = (padding); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/style-engine/build-module/styles/margin.js -/** - * Internal dependencies - */ - -const margin = { - name: 'margin', - generate: (style, options) => { - return generateBoxRules(style, options, ['spacing', 'margin'], 'margin'); - } -}; -/* harmony default export */ var styles_margin = (margin); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/style-engine/build-module/styles/index.js -/** - * Internal dependencies - */ - - -const styleDefinitions = [styles_margin, styles_padding]; - -;// CONCATENATED MODULE: ./node_modules/@wordpress/style-engine/build-module/index.js -/** - * External dependencies - */ - -/** - * Internal dependencies - */ - - -/** - * Generates a stylesheet for a given style object and selector. - * - * @param style Style object. - * @param options Options object with settings to adjust how the styles are generated. - * - * @return generated stylesheet. - */ - -function generate(style, options) { - const rules = getCSSRules(style, options); - const groupedRules = groupBy(rules, 'selector'); - const selectorRules = Object.keys(groupedRules).reduce((acc, subSelector) => { - acc.push(`${subSelector} { ${groupedRules[subSelector].map(rule => `${kebabCase(rule.key)}: ${rule.value};`).join(' ')} }`); - return acc; - }, []); - return selectorRules.join('\n'); -} -/** - * Returns a JSON representation of the generated CSS rules. - * - * @param style Style object. - * @param options Options object with settings to adjust how the styles are generated. - * - * @return generated styles. - */ - -function getCSSRules(style, options) { - const rules = []; - styleDefinitions.forEach(definition => { - rules.push(...definition.generate(style, options)); - }); - return rules; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/use-global-styles-output.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - -/** - * Internal dependencies - */ - - - - -function compileStyleValue(uncompiledValue) { - const VARIABLE_REFERENCE_PREFIX = 'var:'; - const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|'; - const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--'; - - if ((0,external_lodash_namespaceObject.startsWith)(uncompiledValue, VARIABLE_REFERENCE_PREFIX)) { - const variable = uncompiledValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE); - return `var(--wp--${variable})`; - } - - return uncompiledValue; -} -/** - * Transform given preset tree into a set of style declarations. - * - * @param {Object} blockPresets - * - * @return {Array} An array of style declarations. - */ - - -function getPresetsDeclarations() { - let blockPresets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return (0,external_lodash_namespaceObject.reduce)(PRESET_METADATA, (declarations, _ref) => { - let { - path, - valueKey, - valueFunc, - cssVarInfix - } = _ref; - const presetByOrigin = (0,external_lodash_namespaceObject.get)(blockPresets, path, []); - ['default', 'theme', 'custom'].forEach(origin => { - if (presetByOrigin[origin]) { - presetByOrigin[origin].forEach(value => { - if (valueKey) { - declarations.push(`--wp--preset--${cssVarInfix}--${(0,external_lodash_namespaceObject.kebabCase)(value.slug)}: ${value[valueKey]}`); - } else if (valueFunc && typeof valueFunc === 'function') { - declarations.push(`--wp--preset--${cssVarInfix}--${(0,external_lodash_namespaceObject.kebabCase)(value.slug)}: ${valueFunc(value)}`); - } - }); - } - }); - return declarations; - }, []); -} -/** - * Transform given preset tree into a set of preset class declarations. - * - * @param {string} blockSelector - * @param {Object} blockPresets - * @return {string} CSS declarations for the preset classes. - */ - - -function getPresetsClasses(blockSelector) { - let blockPresets = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - return (0,external_lodash_namespaceObject.reduce)(PRESET_METADATA, (declarations, _ref2) => { - let { - path, - cssVarInfix, - classes - } = _ref2; - - if (!classes) { - return declarations; - } - - const presetByOrigin = (0,external_lodash_namespaceObject.get)(blockPresets, path, []); - ['default', 'theme', 'custom'].forEach(origin => { - if (presetByOrigin[origin]) { - presetByOrigin[origin].forEach(_ref3 => { - let { - slug - } = _ref3; - classes.forEach(_ref4 => { - let { - classSuffix, - propertyName - } = _ref4; - const classSelectorToUse = `.has-${(0,external_lodash_namespaceObject.kebabCase)(slug)}-${classSuffix}`; - const selectorToUse = blockSelector.split(',') // Selector can be "h1, h2, h3" - .map(selector => `${selector}${classSelectorToUse}`).join(','); - const value = `var(--wp--preset--${cssVarInfix}--${(0,external_lodash_namespaceObject.kebabCase)(slug)})`; - declarations += `${selectorToUse}{${propertyName}: ${value} !important;}`; - }); - }); - } - }); - return declarations; - }, ''); -} - -function getPresetsSvgFilters() { - let blockPresets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return PRESET_METADATA.filter( // Duotone are the only type of filters for now. - metadata => metadata.path.at(-1) === 'duotone').flatMap(metadata => { - const presetByOrigin = (0,external_lodash_namespaceObject.get)(blockPresets, metadata.path, {}); - return ['default', 'theme'].filter(origin => presetByOrigin[origin]).flatMap(origin => presetByOrigin[origin].map(preset => (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstablePresetDuotoneFilter, { - preset: preset, - key: preset.slug - }))); - }); -} - -function flattenTree() { - let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let prefix = arguments.length > 1 ? arguments[1] : undefined; - let token = arguments.length > 2 ? arguments[2] : undefined; - let result = []; - Object.keys(input).forEach(key => { - const newKey = prefix + (0,external_lodash_namespaceObject.kebabCase)(key.replace('/', '-')); - const newLeaf = input[key]; - - if (newLeaf instanceof Object) { - const newPrefix = newKey + token; - result = [...result, ...flattenTree(newLeaf, newPrefix, token)]; - } else { - result.push(`${newKey}: ${newLeaf}`); - } - }); - return result; -} -/** - * Transform given style tree into a set of style declarations. - * - * @param {Object} blockStyles Block styles. - * - * @return {Array} An array of style declarations. - */ - - -function getStylesDeclarations() { - let blockStyles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - const output = (0,external_lodash_namespaceObject.reduce)(external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY, (declarations, _ref5, key) => { - let { - value, - properties, - useEngine - } = _ref5; - const pathToValue = value; - - if ((0,external_lodash_namespaceObject.first)(pathToValue) === 'elements' || useEngine) { - return declarations; - } - - const styleValue = (0,external_lodash_namespaceObject.get)(blockStyles, pathToValue); - - if (!!properties && !(0,external_lodash_namespaceObject.isString)(styleValue)) { - Object.entries(properties).forEach(entry => { - const [name, prop] = entry; - - if (!(0,external_lodash_namespaceObject.get)(styleValue, [prop], false)) { - // Do not create a declaration - // for sub-properties that don't have any value. - return; - } - - const cssProperty = (0,external_lodash_namespaceObject.kebabCase)(name); - declarations.push(`${cssProperty}: ${compileStyleValue((0,external_lodash_namespaceObject.get)(styleValue, [prop]))}`); - }); - } else if ((0,external_lodash_namespaceObject.get)(blockStyles, pathToValue, false)) { - const cssProperty = key.startsWith('--') ? key : (0,external_lodash_namespaceObject.kebabCase)(key); - declarations.push(`${cssProperty}: ${compileStyleValue((0,external_lodash_namespaceObject.get)(blockStyles, pathToValue))}`); - } - - return declarations; - }, []); // The goal is to move everything to server side generated engine styles - // This is temporary as we absorb more and more styles into the engine. - - const extraRules = getCSSRules(blockStyles, { - selector: 'self' - }); - extraRules.forEach(rule => { - if (rule.selector !== 'self') { - throw "This style can't be added as inline style"; - } - - const cssProperty = rule.key.startsWith('--') ? rule.key : (0,external_lodash_namespaceObject.kebabCase)(rule.key); - output.push(`${cssProperty}: ${compileStyleValue(rule.value)}`); - }); - return output; -} - -const getNodesWithStyles = (tree, blockSelectors) => { - var _tree$styles, _tree$styles2; - - const nodes = []; - - if (!(tree !== null && tree !== void 0 && tree.styles)) { - return nodes; - } - - const pickStyleKeys = treeToPickFrom => (0,external_lodash_namespaceObject.pickBy)(treeToPickFrom, (value, key) => ['border', 'color', 'spacing', 'typography', 'filter'].includes(key)); // Top-level. - - - const styles = pickStyleKeys(tree.styles); - - if (!!styles) { - nodes.push({ - styles, - selector: ROOT_BLOCK_SELECTOR - }); - } - - (0,external_lodash_namespaceObject.forEach)((_tree$styles = tree.styles) === null || _tree$styles === void 0 ? void 0 : _tree$styles.elements, (value, key) => { - if (!!value && !!external_wp_blocks_namespaceObject.__EXPERIMENTAL_ELEMENTS[key]) { - nodes.push({ - styles: value, - selector: external_wp_blocks_namespaceObject.__EXPERIMENTAL_ELEMENTS[key] - }); - } - }); // Iterate over blocks: they can have styles & elements. - - (0,external_lodash_namespaceObject.forEach)((_tree$styles2 = tree.styles) === null || _tree$styles2 === void 0 ? void 0 : _tree$styles2.blocks, (node, blockName) => { - var _blockSelectors$block; - - const blockStyles = pickStyleKeys(node); - - if (!!blockStyles && !!(blockSelectors !== null && blockSelectors !== void 0 && (_blockSelectors$block = blockSelectors[blockName]) !== null && _blockSelectors$block !== void 0 && _blockSelectors$block.selector)) { - nodes.push({ - styles: blockStyles, - selector: blockSelectors[blockName].selector, - duotoneSelector: blockSelectors[blockName].duotoneSelector - }); - } - - (0,external_lodash_namespaceObject.forEach)(node === null || node === void 0 ? void 0 : node.elements, (value, elementName) => { - if (!!value && !!(blockSelectors !== null && blockSelectors !== void 0 && blockSelectors[blockName]) && !!(external_wp_blocks_namespaceObject.__EXPERIMENTAL_ELEMENTS !== null && external_wp_blocks_namespaceObject.__EXPERIMENTAL_ELEMENTS !== void 0 && external_wp_blocks_namespaceObject.__EXPERIMENTAL_ELEMENTS[elementName])) { - nodes.push({ - styles: value, - selector: blockSelectors[blockName].selector.split(',').map(sel => sel + ' ' + external_wp_blocks_namespaceObject.__EXPERIMENTAL_ELEMENTS[elementName]).join(',') - }); - } - }); - }); - return nodes; -}; -const getNodesWithSettings = (tree, blockSelectors) => { - var _tree$settings, _tree$settings2; - - const nodes = []; - - if (!(tree !== null && tree !== void 0 && tree.settings)) { - return nodes; - } - - const pickPresets = treeToPickFrom => { - const presets = {}; - PRESET_METADATA.forEach(_ref6 => { - let { - path - } = _ref6; - const value = (0,external_lodash_namespaceObject.get)(treeToPickFrom, path, false); - - if (value !== false) { - (0,external_lodash_namespaceObject.set)(presets, path, value); - } - }); - return presets; - }; // Top-level. - - - const presets = pickPresets(tree.settings); - const custom = (_tree$settings = tree.settings) === null || _tree$settings === void 0 ? void 0 : _tree$settings.custom; - - if (!(0,external_lodash_namespaceObject.isEmpty)(presets) || !!custom) { - nodes.push({ - presets, - custom, - selector: ROOT_BLOCK_SELECTOR - }); - } // Blocks. - - - (0,external_lodash_namespaceObject.forEach)((_tree$settings2 = tree.settings) === null || _tree$settings2 === void 0 ? void 0 : _tree$settings2.blocks, (node, blockName) => { - const blockPresets = pickPresets(node); - const blockCustom = node.custom; - - if (!(0,external_lodash_namespaceObject.isEmpty)(blockPresets) || !!blockCustom) { - nodes.push({ - presets: blockPresets, - custom: blockCustom, - selector: blockSelectors[blockName].selector - }); - } - }); - return nodes; -}; -const toCustomProperties = (tree, blockSelectors) => { - const settings = getNodesWithSettings(tree, blockSelectors); - let ruleset = ''; - settings.forEach(_ref7 => { - let { - presets, - custom, - selector - } = _ref7; - const declarations = getPresetsDeclarations(presets); - const customProps = flattenTree(custom, '--wp--custom--', '--'); - - if (customProps.length > 0) { - declarations.push(...customProps); - } - - if (declarations.length > 0) { - ruleset = ruleset + `${selector}{${declarations.join(';')};}`; - } - }); - return ruleset; -}; -const toStyles = (tree, blockSelectors) => { - const nodesWithStyles = getNodesWithStyles(tree, blockSelectors); - const nodesWithSettings = getNodesWithSettings(tree, blockSelectors); - /* - * Reset default browser margin on the root body element. - * This is set on the root selector **before** generating the ruleset - * from the `theme.json`. This is to ensure that if the `theme.json` declares - * `margin` in its `spacing` declaration for the `body` element then these - * user-generated values take precedence in the CSS cascade. - * @link https://github.com/WordPress/gutenberg/issues/36147. + const siteData = getSite(); + const base = getUnstableBase(); + const templates = getEntityRecords('postType', TEMPLATE_POST_TYPE, { + per_page: -1 + }); + const _homepageId = siteData?.show_on_front === 'page' && ['number', 'string'].includes(typeof siteData.page_on_front) && !!+siteData.page_on_front // We also need to check if it's not zero(`0`). + ? siteData.page_on_front.toString() : null; + const _postsPageId = siteData?.show_on_front === 'page' && ['number', 'string'].includes(typeof siteData.page_for_posts) ? siteData.page_for_posts.toString() : null; + let _frontPageTemplateId; + if (templates) { + const frontPageTemplate = templates.find(t => t.slug === 'front-page'); + _frontPageTemplateId = frontPageTemplate ? frontPageTemplate.id : false; + } + return { + hasLoadedAllDependencies: !!base && !!siteData, + homepageId: _homepageId, + postsPageId: _postsPageId, + url: base?.home, + frontPageTemplateId: _frontPageTemplateId + }; + }, []); + + /** + * This is a hook that recreates the logic to resolve a template for a given WordPress postID postTypeId + * in order to match the frontend as closely as possible in the site editor. + * + * It is not possible to rely on the server logic because there maybe unsaved changes that impact the template resolution. */ - - let ruleset = 'body {margin: 0;}'; - nodesWithStyles.forEach(_ref8 => { - let { - selector, - duotoneSelector, - styles - } = _ref8; - const duotoneStyles = {}; - - if (styles !== null && styles !== void 0 && styles.filter) { - duotoneStyles.filter = styles.filter; - delete styles.filter; - } // Process duotone styles (they use color.__experimentalDuotone selector). - - - if (duotoneSelector) { - const duotoneDeclarations = getStylesDeclarations(duotoneStyles); - - if (duotoneDeclarations.length === 0) { - return; - } - - ruleset = ruleset + `${duotoneSelector}{${duotoneDeclarations.join(';')};}`; - } // Process the remaning block styles (they use either normal block class or __experimentalSelector). - - - const declarations = getStylesDeclarations(styles); - - if (declarations.length === 0) { - return; - } - - ruleset = ruleset + `${selector}{${declarations.join(';')};}`; - }); - nodesWithSettings.forEach(_ref9 => { - let { - selector, - presets - } = _ref9; - - if (ROOT_BLOCK_SELECTOR === selector) { - // Do not add extra specificity for top-level classes. - selector = ''; - } - - const classes = getPresetsClasses(selector, presets); - - if (!(0,external_lodash_namespaceObject.isEmpty)(classes)) { - ruleset = ruleset + classes; - } - }); - return ruleset; -}; -function toSvgFilters(tree, blockSelectors) { - const nodesWithSettings = getNodesWithSettings(tree, blockSelectors); - return nodesWithSettings.flatMap(_ref10 => { - let { - presets - } = _ref10; - return getPresetsSvgFilters(presets); - }); -} - -const getBlockSelectors = blockTypes => { - const result = {}; - blockTypes.forEach(blockType => { - var _blockType$supports$_, _blockType$supports, _blockType$supports$c, _blockType$supports2, _blockType$supports2$; - - const name = blockType.name; - const selector = (_blockType$supports$_ = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports = blockType.supports) === null || _blockType$supports === void 0 ? void 0 : _blockType$supports.__experimentalSelector) !== null && _blockType$supports$_ !== void 0 ? _blockType$supports$_ : '.wp-block-' + name.replace('core/', '').replace('/', '-'); - const duotoneSelector = (_blockType$supports$c = blockType === null || blockType === void 0 ? void 0 : (_blockType$supports2 = blockType.supports) === null || _blockType$supports2 === void 0 ? void 0 : (_blockType$supports2$ = _blockType$supports2.color) === null || _blockType$supports2$ === void 0 ? void 0 : _blockType$supports2$.__experimentalDuotone) !== null && _blockType$supports$c !== void 0 ? _blockType$supports$c : null; - result[name] = { - name, - selector, - duotoneSelector - }; - }); - return result; -}; - -function useGlobalStylesOutput() { - const [stylesheets, setStylesheets] = (0,external_wp_element_namespaceObject.useState)([]); - const [settings, setSettings] = (0,external_wp_element_namespaceObject.useState)({}); - const [svgFilters, setSvgFilters] = (0,external_wp_element_namespaceObject.useState)({}); - const { - merged: mergedConfig - } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext); - (0,external_wp_element_namespaceObject.useEffect)(() => { - if (!(mergedConfig !== null && mergedConfig !== void 0 && mergedConfig.styles) || !(mergedConfig !== null && mergedConfig !== void 0 && mergedConfig.settings)) { - return; - } - - const blockSelectors = getBlockSelectors((0,external_wp_blocks_namespaceObject.getBlockTypes)()); - const customProperties = toCustomProperties(mergedConfig, blockSelectors); - const globalStyles = toStyles(mergedConfig, blockSelectors); - const filters = toSvgFilters(mergedConfig, blockSelectors); - setStylesheets([{ - css: customProperties, - isGlobalStyles: true - }, { - css: globalStyles, - isGlobalStyles: true - }]); - setSettings(mergedConfig.settings); - setSvgFilters(filters); - }, [mergedConfig]); - return [stylesheets, settings, svgFilters]; -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/preview.js - - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - - - -const firstFrame = { - start: { - opacity: 1, - display: 'block' - }, - hover: { - opacity: 0, - display: 'none' - } -}; -const secondFrame = { - hover: { - opacity: 1, - display: 'block' - }, - start: { - opacity: 0, - display: 'none' - } -}; -const normalizedWidth = 248; -const normalizedHeight = 152; -const normalizedColorSwatchSize = 32; - -const StylesPreview = _ref => { - let { - label, - isFocused - } = _ref; - const [fontWeight] = useStyle('typography.fontWeight'); - const [fontFamily = 'serif'] = useStyle('typography.fontFamily'); - const [headingFontFamily = fontFamily] = useStyle('elements.h1.typography.fontFamily'); - const [headingFontWeight = fontWeight] = useStyle('elements.h1.typography.fontWeight'); - const [textColor = 'black'] = useStyle('color.text'); - const [headingColor = textColor] = useStyle('elements.h1.color.text'); - const [linkColor = 'blue'] = useStyle('elements.link.color.text'); - const [backgroundColor = 'white'] = useStyle('color.background'); - const [gradientValue] = useStyle('color.gradient'); - const [styles] = useGlobalStylesOutput(); - const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)(); - const [coreColors] = useSetting('color.palette.core'); - const [themeColors] = useSetting('color.palette.theme'); - const [customColors] = useSetting('color.palette.custom'); - const [isHovered, setIsHovered] = (0,external_wp_element_namespaceObject.useState)(false); - const [containerResizeListener, { - width - }] = (0,external_wp_compose_namespaceObject.useResizeObserver)(); - const ratio = width ? width / normalizedWidth : 1; - const paletteColors = (themeColors !== null && themeColors !== void 0 ? themeColors : []).concat(customColors !== null && customColors !== void 0 ? customColors : []).concat(coreColors !== null && coreColors !== void 0 ? coreColors : []); - const highlightedColors = paletteColors.filter( // we exclude these two colors because they are already visible in the preview. - _ref2 => { - let { - color - } = _ref2; - return color !== backgroundColor && color !== headingColor; - }).slice(0, 2); // Reset leaked styles from WP common.css. - - const editorStyles = (0,external_wp_element_namespaceObject.useMemo)(() => { - if (styles) { - return [...styles, { - css: 'body{min-width: 0;}', - isGlobalStyles: true - }]; - } - - return styles; - }, [styles]); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstableIframe, { - className: "edit-site-global-styles-preview__iframe", - head: (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstableEditorStyles, { - styles: editorStyles - }), - style: { - height: normalizedHeight * ratio, - visibility: !width ? 'hidden' : 'visible' - }, - onMouseEnter: () => setIsHovered(true), - onMouseLeave: () => setIsHovered(false), - tabIndex: -1 - }, containerResizeListener, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableMotion.div, { - style: { - height: normalizedHeight * ratio, - width: '100%', - background: gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor, - cursor: 'pointer' - }, - initial: "start", - animate: (isHovered || isFocused) && !disableMotion ? 'hover' : 'start' - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableMotion.div, { - variants: firstFrame, - style: { - height: '100%', - overflow: 'hidden' - } - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - spacing: 10 * ratio, - justify: "center", - style: { - height: '100%', - overflow: 'hidden' - } - }, (0,external_wp_element_namespaceObject.createElement)("div", { - style: { - fontFamily: headingFontFamily, - fontSize: 65 * ratio, - color: headingColor, - fontWeight: headingFontWeight - } - }, "Aa"), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 4 * ratio - }, highlightedColors.map(_ref3 => { - let { - slug, - color - } = _ref3; - return (0,external_wp_element_namespaceObject.createElement)("div", { - key: slug, - style: { - height: normalizedColorSwatchSize * ratio, - width: normalizedColorSwatchSize * ratio, - background: color, - borderRadius: normalizedColorSwatchSize * ratio / 2 - } - }); - })))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableMotion.div, { - variants: secondFrame, - style: { - height: '100%', - overflow: 'hidden' - } - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 3 * ratio, - justify: "center", - style: { - height: '100%', - overflow: 'hidden', - padding: 10 * ratio, - boxSizing: 'border-box' - } - }, label && (0,external_wp_element_namespaceObject.createElement)("div", { - style: { - fontSize: 35 * ratio, - fontFamily: headingFontFamily, - color: headingColor, - fontWeight: headingFontWeight, - lineHeight: '1em' - } - }, label), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - spacing: 2 * ratio, - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - style: { - fontFamily, - fontSize: 24 * ratio, - color: textColor - } - }, "Aa"), (0,external_wp_element_namespaceObject.createElement)("div", { - style: { - fontFamily, - fontSize: 24 * ratio, - color: linkColor - } - }, "Aa")), paletteColors && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - spacing: 0 - }, paletteColors.slice(0, 4).map((_ref4, index) => { - let { - color - } = _ref4; - return (0,external_wp_element_namespaceObject.createElement)("div", { - key: index, - style: { - height: 10 * ratio, - width: 30 * ratio, - background: color, - flexGrow: 1 - } - }); - })))))); -}; - -/* harmony default export */ var preview = (StylesPreview); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-root.js - - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - - - - - - -function ScreenRoot() { - const { - variations - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - return { - variations: select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentThemeGlobalStylesVariations() - }; - }, []); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Card, { - size: "small" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardBody, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 2 - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Card, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardMedia, null, (0,external_wp_element_namespaceObject.createElement)(preview, null))), !!(variations !== null && variations !== void 0 && variations.length) && (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: "/variations" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "space-between" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_i18n_namespaceObject.__)('Browse styles')), (0,external_wp_element_namespaceObject.createElement)(IconWithCurrentColor, { - icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right - }))))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardBody, null, (0,external_wp_element_namespaceObject.createElement)(context_menu, null)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardDivider, null), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardBody, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItemGroup, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItem, null, (0,external_wp_i18n_namespaceObject.__)('Customize the appearance of specific blocks for the whole site.')), (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: "/blocks" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "space-between" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_i18n_namespaceObject.__)('Blocks')), (0,external_wp_element_namespaceObject.createElement)(IconWithCurrentColor, { - icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right - })))))); -} - -/* harmony default export */ var screen_root = (ScreenRoot); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/header.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - -function ScreenHeader(_ref) { - let { - title, - description - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 2 - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - spacing: 2 - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalView, null, (0,external_wp_element_namespaceObject.createElement)(NavigationBackButton, { - icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left, - size: "small", - "aria-label": (0,external_wp_i18n_namespaceObject.__)('Navigate to the previous view') - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalSpacer, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHeading, { - level: 5 - }, title))), description && (0,external_wp_element_namespaceObject.createElement)("p", { - className: "edit-site-global-styles-header__description" - }, description)); -} - -/* harmony default export */ var header = (ScreenHeader); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-block-list.js - - -/** - * WordPress dependencies - */ - - - - - - - - -/** - * Internal dependencies - */ - - - - - - - - -function useSortedBlockTypes() { - const blockItems = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blocks_namespaceObject.store).getBlockTypes(), []); // Ensure core blocks are prioritized in the returned results, - // because third party blocks can be registered earlier than - // the core blocks (usually by using the `init` action), - // thus affecting the display order. - // We don't sort reusable blocks as they are handled differently. - - const groupByType = (blocks, block) => { - const { - core, - noncore - } = blocks; - const type = block.name.startsWith('core/') ? core : noncore; - type.push(block); - return blocks; - }; - - const { - core: coreItems, - noncore: nonCoreItems - } = blockItems.reduce(groupByType, { - core: [], - noncore: [] - }); - return [...coreItems, ...nonCoreItems]; -} - -function BlockMenuItem(_ref) { - let { - block - } = _ref; - const hasTypographyPanel = useHasTypographyPanel(block.name); - const hasColorPanel = useHasColorPanel(block.name); - const hasBorderPanel = useHasBorderPanel(block.name); - const hasDimensionsPanel = useHasDimensionsPanel(block.name); - const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel; - const hasBlockMenuItem = hasTypographyPanel || hasColorPanel || hasLayoutPanel; - - if (!hasBlockMenuItem) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: '/blocks/' + block.name - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockIcon, { - icon: block.icon - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, block.title))); -} - -function ScreenBlockList() { - const sortedBlockTypes = useSortedBlockTypes(); - const [filterValue, setFilterValue] = (0,external_wp_element_namespaceObject.useState)(''); - const debouncedSpeak = (0,external_wp_compose_namespaceObject.useDebounce)(external_wp_a11y_namespaceObject.speak, 500); - const isMatchingSearchTerm = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blocks_namespaceObject.store).isMatchingSearchTerm, []); - const filteredBlockTypes = (0,external_wp_element_namespaceObject.useMemo)(() => { - if (!filterValue) { - return sortedBlockTypes; - } - - return sortedBlockTypes.filter(blockType => isMatchingSearchTerm(blockType, filterValue)); - }, [filterValue, sortedBlockTypes, isMatchingSearchTerm]); - const blockTypesListRef = (0,external_wp_element_namespaceObject.useRef)(); // Announce search results on change - - (0,external_wp_element_namespaceObject.useEffect)(() => { - if (!filterValue) { - return; - } // We extract the results from the wrapper div's `ref` because - // filtered items can contain items that will eventually not - // render and there is no reliable way to detect when a child - // will return `null`. - // TODO: We should find a better way of handling this as it's - // fragile and depends on the number of rendered elements of `BlockMenuItem`, - // which is now one. - // @see https://github.com/WordPress/gutenberg/pull/39117#discussion_r816022116 - - - const count = blockTypesListRef.current.childElementCount; - 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.', count), count); - debouncedSpeak(resultsFoundMessage, count); - }, [filterValue, debouncedSpeak]); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Blocks'), - description: (0,external_wp_i18n_namespaceObject.__)('Customize the appearance of specific blocks and for the whole site.') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SearchControl, { - className: "edit-site-block-types-search", - onChange: setFilterValue, - value: filterValue, - label: (0,external_wp_i18n_namespaceObject.__)('Search for blocks'), - placeholder: (0,external_wp_i18n_namespaceObject.__)('Search') - }), (0,external_wp_element_namespaceObject.createElement)("div", { - ref: blockTypesListRef, - className: "edit-site-block-types-item-list" - }, filteredBlockTypes.map(block => (0,external_wp_element_namespaceObject.createElement)(BlockMenuItem, { - block: block, - key: 'menu-itemblock-' + block.name - })))); -} - -/* harmony default export */ var screen_block_list = (ScreenBlockList); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-block.js - - -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - - - -function ScreenBlock(_ref) { - let { - name - } = _ref; - const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(name); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: blockType.title - }), (0,external_wp_element_namespaceObject.createElement)(context_menu, { - parentMenu: '/blocks/' + name, - name: name - })); -} - -/* harmony default export */ var screen_block = (ScreenBlock); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/subtitle.js - - -/** - * WordPress dependencies - */ - - -function Subtitle(_ref) { - let { - children - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHeading, { - className: "edit-site-global-styles-subtitle", - level: 2 - }, children); -} - -/* harmony default export */ var subtitle = (Subtitle); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-typography.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - - - - - -function Item(_ref) { - let { - name, - parentMenu, - element, - label - } = _ref; - const hasSupport = !name; - const prefix = element === 'text' || !element ? '' : `elements.${element}.`; - const extraStyles = element === 'link' ? { - textDecoration: 'underline' - } : {}; - const [fontFamily] = useStyle(prefix + 'typography.fontFamily', name); - const [fontStyle] = useStyle(prefix + 'typography.fontStyle', name); - const [fontWeight] = useStyle(prefix + 'typography.fontWeight', name); - const [letterSpacing] = useStyle(prefix + 'typography.letterSpacing', name); - const [backgroundColor] = useStyle(prefix + 'color.background', name); - const [gradientValue] = useStyle(prefix + 'color.gradient', name); - const [color] = useStyle(prefix + 'color.text', name); - - if (!hasSupport) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: parentMenu + '/typography/' + element - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, { - className: "edit-site-global-styles-screen-typography__indicator", - style: { - fontFamily: fontFamily !== null && fontFamily !== void 0 ? fontFamily : 'serif', - background: gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor, - color, - fontStyle, - fontWeight, - letterSpacing, - ...extraStyles - } - }, (0,external_wp_i18n_namespaceObject.__)('Aa')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, label))); -} - -function ScreenTypography(_ref2) { - let { - name - } = _ref2; - const parentMenu = name === undefined ? '' : '/blocks/' + name; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Typography'), - description: (0,external_wp_i18n_namespaceObject.__)('Manage the typography settings for different elements.') - }), !name && (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-global-styles-screen-typography" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 3 - }, (0,external_wp_element_namespaceObject.createElement)(subtitle, null, (0,external_wp_i18n_namespaceObject.__)('Elements')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItemGroup, { - isBordered: true, - isSeparated: true - }, (0,external_wp_element_namespaceObject.createElement)(Item, { - name: name, - parentMenu: parentMenu, - element: "text", - label: (0,external_wp_i18n_namespaceObject.__)('Text') - }), (0,external_wp_element_namespaceObject.createElement)(Item, { - name: name, - parentMenu: parentMenu, - element: "link", - label: (0,external_wp_i18n_namespaceObject.__)('Links') - })))), !!name && (0,external_wp_element_namespaceObject.createElement)(TypographyPanel, { - name: name, - element: "text" - })); -} - -/* harmony default export */ var screen_typography = (ScreenTypography); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-typography-element.js - - -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - - -const screen_typography_element_elements = { - text: { - description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts used on the site.'), - title: (0,external_wp_i18n_namespaceObject.__)('Text') - }, - link: { - description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts and typography used on the links.'), - title: (0,external_wp_i18n_namespaceObject.__)('Links') - } -}; - -function ScreenTypographyElement(_ref) { - let { - name, - element - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: screen_typography_element_elements[element].title, - description: screen_typography_element_elements[element].description - }), (0,external_wp_element_namespaceObject.createElement)(TypographyPanel, { - name: name, - element: element - })); -} - -/* harmony default export */ var screen_typography_element = (ScreenTypographyElement); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/color-indicator-wrapper.js - - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - -function ColorIndicatorWrapper(_ref) { - let { - className, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, extends_extends({ - className: classnames_default()('edit-site-global-styles__color-indicator-wrapper', className) - }, props)); -} - -/* harmony default export */ var color_indicator_wrapper = (ColorIndicatorWrapper); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/palette.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - - - -const EMPTY_COLORS = []; - -function Palette(_ref) { - let { - name - } = _ref; - const [customColors] = useSetting('color.palette.custom'); - const [themeColors] = useSetting('color.palette.theme'); - const [defaultColors] = useSetting('color.palette.default'); - const [defaultPaletteEnabled] = useSetting('color.defaultPalette', name); - const colors = (0,external_wp_element_namespaceObject.useMemo)(() => [...(customColors || EMPTY_COLORS), ...(themeColors || EMPTY_COLORS), ...(defaultColors && defaultPaletteEnabled ? defaultColors : EMPTY_COLORS)], [customColors, themeColors, defaultColors, defaultPaletteEnabled]); - const screenPath = !name ? '/colors/palette' : '/blocks/' + name + '/colors/palette'; - const paletteButtonText = colors.length > 0 ? (0,external_wp_i18n_namespaceObject.sprintf)( // Translators: %d: Number of palette colors. - (0,external_wp_i18n_namespaceObject._n)('%d color', '%d colors', colors.length), colors.length) : (0,external_wp_i18n_namespaceObject.__)('Add custom colors'); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 3 - }, (0,external_wp_element_namespaceObject.createElement)(subtitle, null, (0,external_wp_i18n_namespaceObject.__)('Palette')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItemGroup, { - isBordered: true, - isSeparated: true - }, (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: screenPath - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - direction: colors.length === 0 ? 'row-reverse' : 'row' - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalZStack, { - isLayered: false, - offset: -8 - }, colors.slice(0, 5).map(_ref2 => { - let { - color - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(color_indicator_wrapper, { - key: color - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ColorIndicator, { - colorValue: color - })); - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, paletteButtonText))))); -} - -/* harmony default export */ var palette = (Palette); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-colors.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - - - - - - -function BackgroundColorItem(_ref) { - let { - name, - parentMenu - } = _ref; - const supports = getSupportedGlobalStylesPanels(name); - const hasSupport = supports.includes('backgroundColor') || supports.includes('background'); - const [backgroundColor] = useStyle('color.background', name); - const [gradientValue] = useStyle('color.gradient', name); - - if (!hasSupport) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: parentMenu + '/colors/background' - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)(color_indicator_wrapper, { - expanded: false - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ColorIndicator, { - colorValue: gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_i18n_namespaceObject.__)('Background')))); -} - -function TextColorItem(_ref2) { - let { - name, - parentMenu - } = _ref2; - const supports = getSupportedGlobalStylesPanels(name); - const hasSupport = supports.includes('color'); - const [color] = useStyle('color.text', name); - - if (!hasSupport) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: parentMenu + '/colors/text' - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)(color_indicator_wrapper, { - expanded: false - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ColorIndicator, { - colorValue: color - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_i18n_namespaceObject.__)('Text')))); -} - -function LinkColorItem(_ref3) { - let { - name, - parentMenu - } = _ref3; - const supports = getSupportedGlobalStylesPanels(name); - const hasSupport = supports.includes('linkColor'); - const [color] = useStyle('elements.link.color.text', name); - - if (!hasSupport) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(NavigationButton, { - path: parentMenu + '/colors/link' - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHStack, { - justify: "flex-start" - }, (0,external_wp_element_namespaceObject.createElement)(color_indicator_wrapper, { - expanded: false - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ColorIndicator, { - colorValue: color - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_i18n_namespaceObject.__)('Links')))); -} - -function ScreenColors(_ref4) { - let { - name - } = _ref4; - const parentMenu = name === undefined ? '' : '/blocks/' + name; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Colors'), - description: (0,external_wp_i18n_namespaceObject.__)('Manage palettes and the default color of different global elements on the site.') - }), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-global-styles-screen-colors" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 10 - }, (0,external_wp_element_namespaceObject.createElement)(palette, { - name: name - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - spacing: 3 - }, (0,external_wp_element_namespaceObject.createElement)(subtitle, null, (0,external_wp_i18n_namespaceObject.__)('Elements')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalItemGroup, { - isBordered: true, - isSeparated: true - }, (0,external_wp_element_namespaceObject.createElement)(BackgroundColorItem, { - name: name, - parentMenu: parentMenu - }), (0,external_wp_element_namespaceObject.createElement)(TextColorItem, { - name: name, - parentMenu: parentMenu - }), (0,external_wp_element_namespaceObject.createElement)(LinkColorItem, { - name: name, - parentMenu: parentMenu - })))))); -} - -/* harmony default export */ var screen_colors = (ScreenColors); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/color-palette-panel.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - -function ColorPalettePanel(_ref) { - let { - name - } = _ref; - const [themeColors, setThemeColors] = useSetting('color.palette.theme', name); - const [baseThemeColors] = useSetting('color.palette.theme', name, 'base'); - const [defaultColors, setDefaultColors] = useSetting('color.palette.default', name); - const [baseDefaultColors] = useSetting('color.palette.default', name, 'base'); - const [customColors, setCustomColors] = useSetting('color.palette.custom', name); - const [defaultPaletteEnabled] = useSetting('color.defaultPalette', name); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - className: "edit-site-global-styles-color-palette-panel", - spacing: 10 - }, !!themeColors && !!themeColors.length && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalPaletteEdit, { - canReset: themeColors !== baseThemeColors, - canOnlyChangeValues: true, - colors: themeColors, - onChange: setThemeColors, - paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Theme') - }), !!defaultColors && !!defaultColors.length && !!defaultPaletteEnabled && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalPaletteEdit, { - canReset: defaultColors !== baseDefaultColors, - canOnlyChangeValues: true, - colors: defaultColors, - onChange: setDefaultColors, - paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Default') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalPaletteEdit, { - colors: customColors, - onChange: setCustomColors, - paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Custom'), - emptyMessage: (0,external_wp_i18n_namespaceObject.__)('Custom colors are empty! Add some colors to create your own color palette.'), - slugPrefix: "custom-" - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/gradients-palette-panel.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - -function GradientPalettePanel(_ref) { - let { - name - } = _ref; - const [themeGradients, setThemeGradients] = useSetting('color.gradients.theme', name); - const [baseThemeGradients] = useSetting('color.gradients.theme', name, 'base'); - const [defaultGradients, setDefaultGradients] = useSetting('color.gradients.default', name); - const [baseDefaultGradients] = useSetting('color.gradients.default', name, 'base'); - const [customGradients, setCustomGradients] = useSetting('color.gradients.custom', name); - const [defaultPaletteEnabled] = useSetting('color.defaultGradients', name); - const [duotonePalette] = useSetting('color.duotone') || []; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalVStack, { - className: "edit-site-global-styles-gradient-palette-panel", - spacing: 10 - }, !!themeGradients && !!themeGradients.length && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalPaletteEdit, { - canReset: themeGradients !== baseThemeGradients, - canOnlyChangeValues: true, - gradients: themeGradients, - onChange: setThemeGradients, - paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Theme') - }), !!defaultGradients && !!defaultGradients.length && !!defaultPaletteEnabled && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalPaletteEdit, { - canReset: defaultGradients !== baseDefaultGradients, - canOnlyChangeValues: true, - gradients: defaultGradients, - onChange: setDefaultGradients, - paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Default') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalPaletteEdit, { - gradients: customGradients, - onChange: setCustomGradients, - paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Custom'), - emptyMessage: (0,external_wp_i18n_namespaceObject.__)('Custom gradients are empty! Add some gradients to create your own palette.'), - slugPrefix: "custom-" - }), (0,external_wp_element_namespaceObject.createElement)("div", null, (0,external_wp_element_namespaceObject.createElement)(subtitle, null, (0,external_wp_i18n_namespaceObject.__)('Duotone')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalSpacer, { - margin: 3 - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DuotonePicker, { - duotonePalette: duotonePalette, - disableCustomDuotone: true, - disableCustomColors: true, - clearable: false, - onChange: external_lodash_namespaceObject.noop - }))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-color-palette.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - - - -function ScreenColorPalette(_ref) { - let { - name - } = _ref; - const [currentTab, setCurrentTab] = (0,external_wp_element_namespaceObject.useState)('solid'); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Palette'), - description: (0,external_wp_i18n_namespaceObject.__)('Palettes are used to provide default color options for blocks and various design tools. Here you can edit the colors with their labels.') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, { - className: "edit-site-screen-color-palette-toggle", - value: currentTab, - onChange: setCurrentTab, - label: (0,external_wp_i18n_namespaceObject.__)('Select palette type'), - hideLabelFromVision: true, - isBlock: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, { - value: "solid", - label: (0,external_wp_i18n_namespaceObject.__)('Solid') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, { - value: "gradient", - label: (0,external_wp_i18n_namespaceObject.__)('Gradient') - })), currentTab === 'solid' && (0,external_wp_element_namespaceObject.createElement)(ColorPalettePanel, { - name: name - }), currentTab === 'gradient' && (0,external_wp_element_namespaceObject.createElement)(GradientPalettePanel, { - name: name - })); -} - -/* harmony default export */ var screen_color_palette = (ScreenColorPalette); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-background-color.js - - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - - -function ScreenBackgroundColor(_ref) { - let { - name - } = _ref; - const supports = getSupportedGlobalStylesPanels(name); - const [solids] = useSetting('color.palette', name); - const [gradients] = useSetting('color.gradients', name); - const [areCustomSolidsEnabled] = useSetting('color.custom', name); - const [areCustomGradientsEnabled] = useSetting('color.customGradient', name); - const colorsPerOrigin = useColorsPerOrigin(name); - const gradientsPerOrigin = useGradientsPerOrigin(name); - const [isBackgroundEnabled] = useSetting('color.background', name); - const hasBackgroundColor = supports.includes('backgroundColor') && isBackgroundEnabled && (solids.length > 0 || areCustomSolidsEnabled); - const hasGradientColor = supports.includes('background') && (gradients.length > 0 || areCustomGradientsEnabled); - const [backgroundColor, setBackgroundColor] = useStyle('color.background', name); - const [userBackgroundColor] = useStyle('color.background', name, 'user'); - const [gradient, setGradient] = useStyle('color.gradient', name); - const [userGradient] = useStyle('color.gradient', name, 'user'); - - if (!hasBackgroundColor && !hasGradientColor) { - return null; - } - - let backgroundSettings = {}; - - if (hasBackgroundColor) { - backgroundSettings = { - colorValue: backgroundColor, - onColorChange: setBackgroundColor - }; - - if (backgroundColor) { - backgroundSettings.clearable = backgroundColor === userBackgroundColor; - } - } - - let gradientSettings = {}; - - if (hasGradientColor) { - gradientSettings = { - gradientValue: gradient, - onGradientChange: setGradient - }; - - if (gradient) { - gradientSettings.clearable = gradient === userGradient; - } - } - - const controlProps = { ...backgroundSettings, - ...gradientSettings - }; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Background'), - description: (0,external_wp_i18n_namespaceObject.__)('Set a background color or gradient for the whole site.') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalColorGradientControl, extends_extends({ - className: "edit-site-screen-background-color__control", - colors: colorsPerOrigin, - gradients: gradientsPerOrigin, - disableCustomColors: !areCustomSolidsEnabled, - disableCustomGradients: !areCustomGradientsEnabled, - __experimentalHasMultipleOrigins: true, - showTitle: false, - enableAlpha: true, - __experimentalIsRenderedInSidebar: true - }, controlProps))); -} - -/* harmony default export */ var screen_background_color = (ScreenBackgroundColor); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-text-color.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - - -function ScreenTextColor(_ref) { - let { - name - } = _ref; - const supports = getSupportedGlobalStylesPanels(name); - const [solids] = useSetting('color.palette', name); - const [areCustomSolidsEnabled] = useSetting('color.custom', name); - const [isTextEnabled] = useSetting('color.text', name); - const colorsPerOrigin = useColorsPerOrigin(name); - const hasTextColor = supports.includes('color') && isTextEnabled && (solids.length > 0 || areCustomSolidsEnabled); - const [color, setColor] = useStyle('color.text', name); - const [userColor] = useStyle('color.text', name, 'user'); - - if (!hasTextColor) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Text'), - description: (0,external_wp_i18n_namespaceObject.__)('Set the default color used for text across the site.') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalColorGradientControl, { - className: "edit-site-screen-text-color__control", - colors: colorsPerOrigin, - disableCustomColors: !areCustomSolidsEnabled, - __experimentalHasMultipleOrigins: true, - showTitle: false, - enableAlpha: true, - __experimentalIsRenderedInSidebar: true, - colorValue: color, - onColorChange: setColor, - clearable: color === userColor - })); -} - -/* harmony default export */ var screen_text_color = (ScreenTextColor); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-link-color.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - - -function ScreenLinkColor(_ref) { - let { - name - } = _ref; - const supports = getSupportedGlobalStylesPanels(name); - const [solids] = useSetting('color.palette', name); - const [areCustomSolidsEnabled] = useSetting('color.custom', name); - const colorsPerOrigin = useColorsPerOrigin(name); - const [isLinkEnabled] = useSetting('color.link', name); - const hasLinkColor = supports.includes('linkColor') && isLinkEnabled && (solids.length > 0 || areCustomSolidsEnabled); - const [linkColor, setLinkColor] = useStyle('elements.link.color.text', name); - const [userLinkColor] = useStyle('elements.link.color.text', name, 'user'); - - if (!hasLinkColor) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Links'), - description: (0,external_wp_i18n_namespaceObject.__)('Set the default color used for links across the site.') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalColorGradientControl, { - className: "edit-site-screen-link-color__control", - colors: colorsPerOrigin, - disableCustomColors: !areCustomSolidsEnabled, - __experimentalHasMultipleOrigins: true, - showTitle: false, - enableAlpha: true, - __experimentalIsRenderedInSidebar: true, - colorValue: linkColor, - onColorChange: setLinkColor, - clearable: linkColor === userLinkColor - })); -} - -/* harmony default export */ var screen_link_color = (ScreenLinkColor); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-layout.js - - -/** - * WordPress dependencies - */ - -/** - * Internal dependencies - */ - - - - - -function ScreenLayout(_ref) { - let { - name - } = _ref; - const hasBorderPanel = useHasBorderPanel(name); - const hasDimensionsPanel = useHasDimensionsPanel(name); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - title: (0,external_wp_i18n_namespaceObject.__)('Layout') - }), hasDimensionsPanel && (0,external_wp_element_namespaceObject.createElement)(DimensionsPanel, { - name: name - }), hasBorderPanel && (0,external_wp_element_namespaceObject.createElement)(BorderPanel, { - name: name - })); -} - -/* harmony default export */ var screen_layout = (ScreenLayout); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/global-styles-provider.js - - -/** - * External dependencies - */ - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - - - -function mergeTreesCustomizer(_, srcValue) { - // We only pass as arrays the presets, - // in which case we want the new array of values - // to override the old array (no merging). - if (Array.isArray(srcValue)) { - return srcValue; - } -} - -function mergeBaseAndUserConfigs(base, user) { - return (0,external_lodash_namespaceObject.mergeWith)({}, base, user, mergeTreesCustomizer); -} - -const cleanEmptyObject = object => { - if (!(0,external_lodash_namespaceObject.isObject)(object) || Array.isArray(object)) { - return object; - } - - const cleanedNestedObjects = (0,external_lodash_namespaceObject.pickBy)((0,external_lodash_namespaceObject.mapValues)(object, cleanEmptyObject), external_lodash_namespaceObject.identity); - return (0,external_lodash_namespaceObject.isEmpty)(cleanedNestedObjects) ? undefined : cleanedNestedObjects; -}; - -function useGlobalStylesUserConfig() { - const { - globalStylesId, - settings, - styles - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const _globalStylesId = select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentGlobalStylesId(); - - const record = _globalStylesId ? select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('root', 'globalStyles', _globalStylesId) : undefined; - return { - globalStylesId: _globalStylesId, - settings: record === null || record === void 0 ? void 0 : record.settings, - styles: record === null || record === void 0 ? void 0 : record.styles - }; - }, []); - const { - getEditedEntityRecord - } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_coreData_namespaceObject.store); - const { - editEntityRecord - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); - const config = (0,external_wp_element_namespaceObject.useMemo)(() => { - return { - settings: settings !== null && settings !== void 0 ? settings : {}, - styles: styles !== null && styles !== void 0 ? styles : {} - }; - }, [settings, styles]); - const setConfig = (0,external_wp_element_namespaceObject.useCallback)(callback => { - var _record$styles, _record$settings; - - const record = getEditedEntityRecord('root', 'globalStyles', globalStylesId); - const currentConfig = { - styles: (_record$styles = record === null || record === void 0 ? void 0 : record.styles) !== null && _record$styles !== void 0 ? _record$styles : {}, - settings: (_record$settings = record === null || record === void 0 ? void 0 : record.settings) !== null && _record$settings !== void 0 ? _record$settings : {} - }; - const updatedConfig = callback(currentConfig); - editEntityRecord('root', 'globalStyles', globalStylesId, { - styles: cleanEmptyObject(updatedConfig.styles) || {}, - settings: cleanEmptyObject(updatedConfig.settings) || {} - }); - }, [globalStylesId]); - return [!!settings || !!styles, config, setConfig]; -} - -function useGlobalStylesBaseConfig() { - const baseConfig = (0,external_wp_data_namespaceObject.useSelect)(select => { - return select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentThemeBaseGlobalStyles(); - }, []); - return [!!baseConfig, baseConfig]; -} - -function useGlobalStylesContext() { - const [isUserConfigReady, userConfig, setUserConfig] = useGlobalStylesUserConfig(); - const [isBaseConfigReady, baseConfig] = useGlobalStylesBaseConfig(); - const mergedConfig = (0,external_wp_element_namespaceObject.useMemo)(() => { - if (!baseConfig || !userConfig) { + const resolvedTemplateId = (0,external_wp_data_namespaceObject.useSelect)(select => { + // If we're rendering a post type that doesn't have a template + // no need to resolve its template. + if (postTypesWithoutParentTemplate.includes(postType) && postId) { + return undefined; + } + const { + getEditedEntityRecord, + getEntityRecords, + getDefaultTemplateId, + __experimentalGetTemplateForLink + } = select(external_wp_coreData_namespaceObject.store); + function resolveTemplateForPostTypeAndId(postTypeToResolve, postIdToResolve) { + // For the front page, we always use the front page template if existing. + if (postTypeToResolve === 'page' && homepageId === postIdToResolve) { + // We're still checking whether the front page template exists. + // Don't resolve the template yet. + if (frontPageTemplateId === undefined) { + return undefined; + } + if (!!frontPageTemplateId) { + return frontPageTemplateId; + } + } + const editedEntity = getEditedEntityRecord('postType', postTypeToResolve, postIdToResolve); + if (!editedEntity) { + return undefined; + } + // Check if the current page is the posts page. + if (postTypeToResolve === 'page' && postsPageId === postIdToResolve) { + return __experimentalGetTemplateForLink(editedEntity.link)?.id; + } + // First see if the post/page has an assigned template and fetch it. + const currentTemplateSlug = editedEntity.template; + if (currentTemplateSlug) { + const currentTemplate = getEntityRecords('postType', TEMPLATE_POST_TYPE, { + per_page: -1 + })?.find(({ + slug + }) => slug === currentTemplateSlug); + if (currentTemplate) { + return currentTemplate.id; + } + } + // If no template is assigned, use the default template. + let slugToCheck; + // In `draft` status we might not have a slug available, so we use the `single` + // post type templates slug(ex page, single-post, single-product etc..). + // Pages do not need the `single` prefix in the slug to be prioritized + // through template hierarchy. + if (editedEntity.slug) { + slugToCheck = postTypeToResolve === 'page' ? `${postTypeToResolve}-${editedEntity.slug}` : `single-${postTypeToResolve}-${editedEntity.slug}`; + } else { + slugToCheck = postTypeToResolve === 'page' ? 'page' : `single-${postTypeToResolve}`; + } + return getDefaultTemplateId({ + slug: slugToCheck + }); + } + if (!hasLoadedAllDependencies) { + return undefined; + } + + // If we're rendering a specific page, we need to resolve its template. + // The site editor only supports pages for now, not other CPTs. + if (postType && postId && authorizedPostTypes.includes(postType)) { + return resolveTemplateForPostTypeAndId(postType, postId); + } + + // If we're rendering the home page, and we have a static home page, resolve its template. + if (homepageId) { + return resolveTemplateForPostTypeAndId('page', homepageId); + } + + // If we're not rendering a specific page, use the front page template. + if (url) { + const template = __experimentalGetTemplateForLink(url); + return template?.id; + } + }, [homepageId, postsPageId, hasLoadedAllDependencies, url, postId, postType, frontPageTemplateId]); + const context = (0,external_wp_element_namespaceObject.useMemo)(() => { + if (postTypesWithoutParentTemplate.includes(postType) && postId) { return {}; } - - return mergeBaseAndUserConfigs(baseConfig, userConfig); - }, [userConfig, baseConfig]); - const context = (0,external_wp_element_namespaceObject.useMemo)(() => { - return { - isReady: isUserConfigReady && isBaseConfigReady, - user: userConfig, - base: baseConfig, - merged: mergedConfig, - setUserConfig - }; - }, [mergedConfig, userConfig, baseConfig, setUserConfig, isUserConfigReady, isBaseConfigReady]); - return context; -} - -function GlobalStylesProvider(_ref) { - let { - children - } = _ref; - const context = useGlobalStylesContext(); - - if (!context.isReady) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(GlobalStylesContext.Provider, { - value: context - }, children); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-style-variations.js - - -/** - * External dependencies - */ - - -/** - * WordPress dependencies - */ - - - - - - - -/** - * Internal dependencies - */ - - - - - - -function compareVariations(a, b) { - return (0,external_lodash_namespaceObject.isEqual)(a.styles, b.styles) && (0,external_lodash_namespaceObject.isEqual)(a.settings, b.settings); -} - -function Variation(_ref) { - let { - variation - } = _ref; - const [isFocused, setIsFocused] = (0,external_wp_element_namespaceObject.useState)(false); - const { - base, - user, - setUserConfig - } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext); - const context = (0,external_wp_element_namespaceObject.useMemo)(() => { - var _variation$settings, _variation$styles; - - return { - user: { - settings: (_variation$settings = variation.settings) !== null && _variation$settings !== void 0 ? _variation$settings : {}, - styles: (_variation$styles = variation.styles) !== null && _variation$styles !== void 0 ? _variation$styles : {} - }, - base, - merged: mergeBaseAndUserConfigs(base, variation), - setUserConfig: () => {} - }; - }, [variation, base]); - - const selectVariation = () => { - setUserConfig(() => { + if (postType && postId && authorizedPostTypes.includes(postType)) { return { - settings: variation.settings, - styles: variation.styles + postType, + postId + }; + } + if (homepageId) { + return { + postType: 'page', + postId: homepageId }; - }); - }; - - const selectOnEnter = event => { - if (event.keyCode === external_wp_keycodes_namespaceObject.ENTER) { - event.preventDefault(); - selectVariation(); - } - }; - - const isActive = (0,external_wp_element_namespaceObject.useMemo)(() => { - return compareVariations(user, variation); - }, [user, variation]); - return (0,external_wp_element_namespaceObject.createElement)(GlobalStylesContext.Provider, { - value: context - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: classnames_default()('edit-site-global-styles-variations_item', { - 'is-active': isActive - }), - role: "button", - onClick: selectVariation, - onKeyDown: selectOnEnter, - tabIndex: "0", - "aria-label": variation === null || variation === void 0 ? void 0 : variation.title, - onFocus: () => setIsFocused(true), - onBlur: () => setIsFocused(false) - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-global-styles-variations_item-preview" - }, (0,external_wp_element_namespaceObject.createElement)(preview, { - label: variation === null || variation === void 0 ? void 0 : variation.title, - isFocused: isFocused - })))); -} - -function ScreenStyleVariations() { - const { - variations - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - return { - variations: select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentThemeGlobalStylesVariations() - }; - }, []); - const withEmptyVariation = (0,external_wp_element_namespaceObject.useMemo)(() => { - return [{ - title: (0,external_wp_i18n_namespaceObject.__)('Default'), - settings: {}, - styles: {} - }, ...variations]; - }, [variations]); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(header, { - back: "/", - title: (0,external_wp_i18n_namespaceObject.__)('Browse styles'), - description: (0,external_wp_i18n_namespaceObject.__)('Choose a different style combination for the theme styles') - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Card, { - size: "small", - isBorderless: true - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CardBody, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalGrid, { - columns: 2 - }, withEmptyVariation === null || withEmptyVariation === void 0 ? void 0 : withEmptyVariation.map((variation, index) => (0,external_wp_element_namespaceObject.createElement)(Variation, { - key: index, - variation: variation - })))))); -} - -/* harmony default export */ var screen_style_variations = (ScreenStyleVariations); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/ui.js - - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - - - - - - - - - - - - -function GlobalStylesNavigationScreen(_ref) { - let { - className, - ...props - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorScreen, extends_extends({ - className: ['edit-site-global-styles-sidebar__navigator-screen', className].filter(Boolean).join(' ') - }, props)); -} - -function ContextScreens(_ref2) { - let { - name - } = _ref2; - const parentMenu = name === undefined ? '' : '/blocks/' + name; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/typography' - }, (0,external_wp_element_namespaceObject.createElement)(screen_typography, { - name: name - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/typography/text' - }, (0,external_wp_element_namespaceObject.createElement)(screen_typography_element, { - name: name, - element: "text" - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/typography/link' - }, (0,external_wp_element_namespaceObject.createElement)(screen_typography_element, { - name: name, - element: "link" - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/colors' - }, (0,external_wp_element_namespaceObject.createElement)(screen_colors, { - name: name - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/colors/palette' - }, (0,external_wp_element_namespaceObject.createElement)(screen_color_palette, { - name: name - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/colors/background' - }, (0,external_wp_element_namespaceObject.createElement)(screen_background_color, { - name: name - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/colors/text' - }, (0,external_wp_element_namespaceObject.createElement)(screen_text_color, { - name: name - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/colors/link' - }, (0,external_wp_element_namespaceObject.createElement)(screen_link_color, { - name: name - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: parentMenu + '/layout' - }, (0,external_wp_element_namespaceObject.createElement)(screen_layout, { - name: name - }))); -} - -function GlobalStylesUI() { - const blocks = (0,external_wp_blocks_namespaceObject.getBlockTypes)(); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigatorProvider, { - className: "edit-site-global-styles-sidebar__navigator-provider", - initialPath: "/" - }, (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: "/" - }, (0,external_wp_element_namespaceObject.createElement)(screen_root, null)), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: "/variations" - }, (0,external_wp_element_namespaceObject.createElement)(screen_style_variations, null)), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - path: "/blocks" - }, (0,external_wp_element_namespaceObject.createElement)(screen_block_list, null)), blocks.map(block => (0,external_wp_element_namespaceObject.createElement)(GlobalStylesNavigationScreen, { - key: 'menu-block-' + block.name, - path: '/blocks/' + block.name - }, (0,external_wp_element_namespaceObject.createElement)(screen_block, { - name: block.name - }))), (0,external_wp_element_namespaceObject.createElement)(ContextScreens, null), blocks.map(block => (0,external_wp_element_namespaceObject.createElement)(ContextScreens, { - key: 'screens-block-' + block.name, - name: block.name - }))); -} - -/* harmony default export */ var ui = (GlobalStylesUI); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/global-styles/index.js - - - - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/global-styles-sidebar.js - - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - - - -function GlobalStylesSidebar() { - const [canReset, onReset] = useGlobalStylesReset(); - const { - toggle - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store); - return (0,external_wp_element_namespaceObject.createElement)(default_sidebar_DefaultSidebar, { - className: "edit-site-global-styles-sidebar", - identifier: "edit-site/global-styles", - title: (0,external_wp_i18n_namespaceObject.__)('Styles'), - icon: library_styles, - closeLabel: (0,external_wp_i18n_namespaceObject.__)('Close global styles sidebar'), - panelClassName: "edit-site-global-styles-sidebar__panel", - header: (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexBlock, null, (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_i18n_namespaceObject.__)('Styles')), (0,external_wp_element_namespaceObject.createElement)("span", { - className: "edit-site-global-styles-sidebar__beta" - }, (0,external_wp_i18n_namespaceObject.__)('Beta'))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DropdownMenu, { - icon: more_vertical, - label: (0,external_wp_i18n_namespaceObject.__)('More Global Styles Actions'), - controls: [{ - title: (0,external_wp_i18n_namespaceObject.__)('Reset to defaults'), - onClick: onReset, - isDisabled: !canReset - }, { - title: (0,external_wp_i18n_namespaceObject.__)('Welcome Guide'), - onClick: () => toggle('core/edit-site', 'welcomeGuideStyles') - }] - }))) - }, (0,external_wp_element_namespaceObject.createElement)(ui, null)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/navigation-menu-sidebar/navigation-menu.js - - -/** - * WordPress dependencies - */ - - - -const ALLOWED_BLOCKS = { - 'core/navigation': ['core/navigation-link', 'core/search', 'core/social-links', 'core/page-list', 'core/spacer', 'core/home-link', 'core/site-title', 'core/site-logo', 'core/navigation-submenu'], - 'core/social-links': ['core/social-link'], - 'core/navigation-submenu': ['core/navigation-link', 'core/navigation-submenu'], - 'core/navigation-link': ['core/navigation-link', 'core/navigation-submenu'] -}; -function navigation_menu_NavigationMenu(_ref) { - let { - innerBlocks, - id - } = _ref; - const { - updateBlockListSettings - } = useDispatch(blockEditorStore); //TODO: Block settings are normally updated as a side effect of rendering InnerBlocks in BlockList - //Think through a better way of doing this, possible with adding allowed blocks to block library metadata - - useEffect(() => { - updateBlockListSettings('', { - allowedBlocks: ALLOWED_BLOCKS['core/navigation'] - }); - innerBlocks.forEach(block => { - if (ALLOWED_BLOCKS[block.name]) { - updateBlockListSettings(block.clientId, { - allowedBlocks: ALLOWED_BLOCKS[block.name] - }); - } - }); - }, [updateBlockListSettings, innerBlocks]); - return createElement(Fragment, null, createElement(ListView, { - id: id, - showNestedBlocks: true, - expandNested: false, - __experimentalFeatures: true, - __experimentalPersistentListViewFeatures: true - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/navigation-menu-sidebar/navigation-inspector.js - - -/** - * WordPress dependencies - */ - - - - - - - - -/** - * Internal dependencies - */ - - -const NAVIGATION_MENUS_QUERY = [{ - per_page: -1, - status: 'publish' -}]; -function navigation_inspector_NavigationInspector() { - var _navigationMenus$; - - const { - selectedNavigationBlockId, - clientIdToRef, - navigationMenus, - isResolvingNavigationMenus, - hasResolvedNavigationMenus, - firstNavigationBlockId - } = useSelect(select => { - const { - __experimentalGetActiveBlockIdByBlockNames, - __experimentalGetGlobalBlocksByName, - getBlock - } = select(blockEditorStore); - const { - getEntityRecords, - hasFinishedResolution, - isResolving - } = select(coreStore); - const navigationMenusQuery = ['postType', 'wp_navigation', NAVIGATION_MENUS_QUERY[0]]; // Get the active Navigation block (if present). - - const selectedNavId = __experimentalGetActiveBlockIdByBlockNames('core/navigation'); // Get all Navigation blocks currently within the editor canvas. - - - const navBlockIds = __experimentalGetGlobalBlocksByName('core/navigation'); - - const idToRef = {}; - navBlockIds.forEach(id => { - var _getBlock, _getBlock$attributes; - - idToRef[id] = (_getBlock = getBlock(id)) === null || _getBlock === void 0 ? void 0 : (_getBlock$attributes = _getBlock.attributes) === null || _getBlock$attributes === void 0 ? void 0 : _getBlock$attributes.ref; - }); - return { - selectedNavigationBlockId: selectedNavId, - firstNavigationBlockId: navBlockIds === null || navBlockIds === void 0 ? void 0 : navBlockIds[0], - clientIdToRef: idToRef, - navigationMenus: getEntityRecords(...navigationMenusQuery), - isResolvingNavigationMenus: isResolving('getEntityRecords', navigationMenusQuery), - hasResolvedNavigationMenus: hasFinishedResolution('getEntityRecords', navigationMenusQuery) - }; - }, []); - const navMenuListId = useInstanceId(NavigationMenu, 'edit-site-navigation-inspector-menu'); - const firstNavRefInTemplate = clientIdToRef[firstNavigationBlockId]; - const firstNavigationMenuRef = navigationMenus === null || navigationMenus === void 0 ? void 0 : (_navigationMenus$ = navigationMenus[0]) === null || _navigationMenus$ === void 0 ? void 0 : _navigationMenus$.id; // Default Navigation Menu is either: - // - the Navigation Menu referenced by the first Nav block within the template. - // - the first of the available Navigation Menus (`wp_navigation`) posts. - - const defaultNavigationMenuId = firstNavRefInTemplate || firstNavigationMenuRef; // The Navigation Menu manually selected by the user within the Nav inspector. - - const [currentMenuId, setCurrentMenuId] = useState(firstNavRefInTemplate); // If a Nav block is selected within the canvas then set the - // Navigation Menu referenced by it's `ref` attribute to be - // active within the Navigation sidebar. - - useEffect(() => { - if (selectedNavigationBlockId) { - setCurrentMenuId(clientIdToRef[selectedNavigationBlockId]); - } - }, [selectedNavigationBlockId]); - let options = []; - - if (navigationMenus) { - options = navigationMenus.map(_ref => { - let { - id, - title - } = _ref; - return { - value: id, - label: title.rendered - }; - }); - } - - const [innerBlocks, onInput, onChange] = useEntityBlockEditor('postType', 'wp_navigation', { - id: currentMenuId || defaultNavigationMenuId - }); - const { - isLoadingInnerBlocks, - hasLoadedInnerBlocks - } = useSelect(select => { - const { - isResolving, - hasFinishedResolution - } = select(coreStore); - return { - isLoadingInnerBlocks: isResolving('getEntityRecord', ['postType', 'wp_navigation', currentMenuId || defaultNavigationMenuId]), - hasLoadedInnerBlocks: hasFinishedResolution('getEntityRecord', ['postType', 'wp_navigation', currentMenuId || defaultNavigationMenuId]) - }; - }, [currentMenuId, defaultNavigationMenuId]); - const isLoading = !(hasResolvedNavigationMenus && hasLoadedInnerBlocks); - const hasMoreThanOneNavigationMenu = (navigationMenus === null || navigationMenus === void 0 ? void 0 : navigationMenus.length) > 1; - const hasNavigationMenus = !!(navigationMenus !== null && navigationMenus !== void 0 && navigationMenus.length); // Entity block editor will return entities that are not currently published. - // Guard by only allowing their usage if there are published Nav Menus. - - const publishedInnerBlocks = hasNavigationMenus ? innerBlocks : []; - const hasInnerBlocks = !!(publishedInnerBlocks !== null && publishedInnerBlocks !== void 0 && publishedInnerBlocks.length); - useEffect(() => { - if (isResolvingNavigationMenus) { - speak('Loading Navigation sidebar menus.'); - } - - if (hasResolvedNavigationMenus) { - speak('Navigation sidebar menus have loaded.'); - } - }, [isResolvingNavigationMenus, hasResolvedNavigationMenus]); - useEffect(() => { - if (isLoadingInnerBlocks) { - speak('Loading Navigation sidebar selected menu items.'); - } - - if (hasLoadedInnerBlocks) { - speak('Navigation sidebar selected menu items have loaded.'); - } - }, [isLoadingInnerBlocks, hasLoadedInnerBlocks]); - return createElement("div", { - className: "edit-site-navigation-inspector" - }, hasResolvedNavigationMenus && !hasNavigationMenus && createElement("p", { - className: "edit-site-navigation-inspector__empty-msg" - }, __('There are no Navigation Menus.')), !hasResolvedNavigationMenus && createElement("div", { - className: "edit-site-navigation-inspector__placeholder" - }), hasResolvedNavigationMenus && hasMoreThanOneNavigationMenu && createElement(SelectControl, { - "aria-controls": // aria-controls should only apply when referenced element is in DOM - hasLoadedInnerBlocks ? navMenuListId : undefined, - value: currentMenuId || defaultNavigationMenuId, - options: options, - onChange: newMenuId => setCurrentMenuId(Number(newMenuId)) - }), isLoading && createElement(Fragment, null, createElement("div", { - className: "edit-site-navigation-inspector__placeholder is-child" - }), createElement("div", { - className: "edit-site-navigation-inspector__placeholder is-child" - }), createElement("div", { - className: "edit-site-navigation-inspector__placeholder is-child" - })), hasInnerBlocks && !isLoading && createElement(BlockEditorProvider, { - value: publishedInnerBlocks, - onChange: onChange, - onInput: onInput - }, createElement(NavigationMenu, { - id: navMenuListId, - innerBlocks: publishedInnerBlocks - })), !hasInnerBlocks && !isLoading && createElement("p", { - className: "edit-site-navigation-inspector__empty-msg" - }, __('Navigation Menu is empty.'))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/navigation-menu-sidebar/index.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - -function NavigationMenuSidebar() { - return createElement(DefaultSidebar, { - className: "edit-site-navigation-menu-sidebar", - identifier: "edit-site/navigation-menu", - title: __('Navigation Menus'), - icon: navigation, - closeLabel: __('Close navigation menu sidebar'), - panelClassName: "edit-site-navigation-menu-sidebar__panel", - header: createElement(Flex, null, createElement(FlexBlock, null, createElement("strong", null, __('Navigation Menus')))) - }, createElement(NavigationInspector, null)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/constants.js -const SIDEBAR_TEMPLATE = 'edit-site/template'; -const SIDEBAR_BLOCK = 'edit-site/block-inspector'; - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/settings-header/index.js - - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - - - - -const SettingsHeader = _ref => { - let { - sidebarName - } = _ref; - const { - enableComplementaryArea + } + return {}; + }, [homepageId, postType, postId]); + if (postTypesWithoutParentTemplate.includes(postType) && postId) { + return { + isReady: true, + postType, + postId, + context + }; + } + if (hasLoadedAllDependencies) { + return { + isReady: resolvedTemplateId !== undefined, + postType: TEMPLATE_POST_TYPE, + postId: resolvedTemplateId, + context + }; + } + return { + isReady: false + }; +} +function useInitEditedEntityFromURL() { + const { + params = {} + } = useLocation(); + const { + postType, + postId, + context, + isReady + } = useResolveEditedEntityAndContext(params); + const { + setEditedEntity } = (0,external_wp_data_namespaceObject.useDispatch)(store); - - const openTemplateSettings = () => enableComplementaryArea(STORE_NAME, SIDEBAR_TEMPLATE); - - const openBlockSettings = () => enableComplementaryArea(STORE_NAME, SIDEBAR_BLOCK); - - const [templateAriaLabel, templateActiveClass] = sidebarName === SIDEBAR_TEMPLATE ? // translators: ARIA label for the Template sidebar tab, selected. - [(0,external_wp_i18n_namespaceObject.__)('Template (selected)'), 'is-active'] : // translators: ARIA label for the Template Settings Sidebar tab, not selected. - [(0,external_wp_i18n_namespaceObject.__)('Template'), '']; - const [blockAriaLabel, blockActiveClass] = sidebarName === SIDEBAR_BLOCK ? // translators: ARIA label for the Block Settings Sidebar tab, selected. - [(0,external_wp_i18n_namespaceObject.__)('Block (selected)'), 'is-active'] : // translators: ARIA label for the Block Settings Sidebar tab, not selected. - [(0,external_wp_i18n_namespaceObject.__)('Block'), '']; - /* Use a list so screen readers will announce how many tabs there are. */ - - return (0,external_wp_element_namespaceObject.createElement)("ul", null, (0,external_wp_element_namespaceObject.createElement)("li", null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - onClick: openTemplateSettings, - className: `edit-site-sidebar__panel-tab ${templateActiveClass}`, - "aria-label": templateAriaLabel // translators: Data label for the Template Settings Sidebar tab. - , - "data-label": (0,external_wp_i18n_namespaceObject.__)('Template') - }, // translators: Text label for the Template Settings Sidebar tab. - (0,external_wp_i18n_namespaceObject.__)('Template'))), (0,external_wp_element_namespaceObject.createElement)("li", null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - onClick: openBlockSettings, - className: `edit-site-sidebar__panel-tab ${blockActiveClass}`, - "aria-label": blockAriaLabel // translators: Data label for the Block Settings Sidebar tab. - , - "data-label": (0,external_wp_i18n_namespaceObject.__)('Block') - }, // translators: Text label for the Block Settings Sidebar tab. - (0,external_wp_i18n_namespaceObject.__)('Block')))); -}; - -/* harmony default export */ var settings_header = (SettingsHeader); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/template-card/template-areas.js - - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - - - -function TemplateAreaItem(_ref) { - let { - area, - clientId - } = _ref; - const { - selectBlock, - toggleBlockHighlight - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); - const templatePartArea = (0,external_wp_data_namespaceObject.useSelect)(select => { - const defaultAreas = select(external_wp_editor_namespaceObject.store).__experimentalGetDefaultTemplatePartAreas(); - - return defaultAreas.find(defaultArea => defaultArea.area === area); - }, [area]); - - const highlightBlock = () => toggleBlockHighlight(clientId, true); - - const cancelHighlightBlock = () => toggleBlockHighlight(clientId, false); - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - className: "edit-site-template-card__template-areas-item", - icon: templatePartArea === null || templatePartArea === void 0 ? void 0 : templatePartArea.icon, - onMouseOver: highlightBlock, - onMouseLeave: cancelHighlightBlock, - onFocus: highlightBlock, - onBlur: cancelHighlightBlock, - onClick: () => { - selectBlock(clientId); - } - }, templatePartArea === null || templatePartArea === void 0 ? void 0 : templatePartArea.label); -} - -function template_areas_TemplateAreas() { - const templateParts = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getCurrentTemplateTemplateParts(), []); - - if (!templateParts.length) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)("section", { - className: "edit-site-template-card__template-areas" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalHeading, { - level: 3, - className: "edit-site-template-card__template-areas-title" - }, (0,external_wp_i18n_namespaceObject.__)('Areas')), (0,external_wp_element_namespaceObject.createElement)("ul", { - className: "edit-site-template-card__template-areas-list" - }, templateParts.map(_ref2 => { - let { - templatePart, - block - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)("li", { - key: templatePart.slug - }, (0,external_wp_element_namespaceObject.createElement)(TemplateAreaItem, { - area: templatePart.area, - clientId: block.clientId - })); - }))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/template-card/index.js - - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - - - -function TemplateCard() { - const { - title, - description, - icon - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - getEditedPostType, - getEditedPostId - } = select(store_store); - const { - getEntityRecord - } = select(external_wp_coreData_namespaceObject.store); - const { - __experimentalGetTemplateInfo: getTemplateInfo - } = select(external_wp_editor_namespaceObject.store); - const postType = getEditedPostType(); - const postId = getEditedPostId(); - const record = getEntityRecord('postType', postType, postId); - const info = record ? getTemplateInfo(record) : {}; - return info; - }, []); - - if (!title && !description) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-template-card" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, { - className: "edit-site-template-card__icon", - icon: icon - }), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-template-card__content" - }, (0,external_wp_element_namespaceObject.createElement)("h2", { - className: "edit-site-template-card__title" - }, title), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-template-card__description" - }, description), (0,external_wp_element_namespaceObject.createElement)(template_areas_TemplateAreas, null))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/index.js - - -/** - * WordPress dependencies - */ - - - - - - - -/** - * Internal dependencies - */ - - - - - - - - -const { - Slot: InspectorSlot, - Fill: InspectorFill -} = (0,external_wp_components_namespaceObject.createSlotFill)('EditSiteSidebarInspector'); -const SidebarInspectorFill = InspectorFill; -function SidebarComplementaryAreaFills() { - const { - sidebar, - isEditorSidebarOpened, - hasBlockSelection - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const _sidebar = select(store).getActiveComplementaryArea(STORE_NAME); - - const _isEditorSidebarOpened = [SIDEBAR_BLOCK, SIDEBAR_TEMPLATE].includes(_sidebar); - - return { - sidebar: _sidebar, - isEditorSidebarOpened: _isEditorSidebarOpened, - hasBlockSelection: !!select(external_wp_blockEditor_namespaceObject.store).getBlockSelectionStart() - }; - }, []); - const { - enableComplementaryArea - } = (0,external_wp_data_namespaceObject.useDispatch)(store); - (0,external_wp_element_namespaceObject.useEffect)(() => { - if (!isEditorSidebarOpened) return; - - if (hasBlockSelection) { - enableComplementaryArea(STORE_NAME, SIDEBAR_BLOCK); - } else { - enableComplementaryArea(STORE_NAME, SIDEBAR_TEMPLATE); - } - }, [hasBlockSelection, isEditorSidebarOpened]); - let sidebarName = sidebar; - - if (!isEditorSidebarOpened) { - sidebarName = hasBlockSelection ? SIDEBAR_BLOCK : SIDEBAR_TEMPLATE; - } // Conditionally include NavMenu sidebar in Plugin only. - // Optimise for dead code elimination. - // See https://github.com/WordPress/gutenberg/blob/trunk/docs/how-to-guides/feature-flags.md#dead-code-elimination. - - - let MaybeNavigationMenuSidebar = external_wp_element_namespaceObject.Fragment; - - if (false) {} - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(default_sidebar_DefaultSidebar, { - identifier: sidebarName, - title: (0,external_wp_i18n_namespaceObject.__)('Settings'), - icon: library_cog, - closeLabel: (0,external_wp_i18n_namespaceObject.__)('Close settings sidebar'), - header: (0,external_wp_element_namespaceObject.createElement)(settings_header, { - sidebarName: sidebarName - }), - headerClassName: "edit-site-sidebar__panel-tabs" - }, sidebarName === SIDEBAR_TEMPLATE && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, null, (0,external_wp_element_namespaceObject.createElement)(TemplateCard, null)), sidebarName === SIDEBAR_BLOCK && (0,external_wp_element_namespaceObject.createElement)(InspectorSlot, { - bubblesVirtually: true - })), (0,external_wp_element_namespaceObject.createElement)(GlobalStylesSidebar, null), (0,external_wp_element_namespaceObject.createElement)(MaybeNavigationMenuSidebar, null)); + (0,external_wp_element_namespaceObject.useEffect)(() => { + if (isReady) { + setEditedEntity(postType, postId, context); + } + }, [isReady, postType, postId, context, setEditedEntity]); } ;// CONCATENATED MODULE: external ["wp","htmlEntities"] -var external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/home.js - - -/** - * WordPress dependencies - */ - -const home = (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 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z" -})); -/* harmony default export */ var library_home = (home); - -;// 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/edit-site/build-module/components/main-dashboard-button/index.js - - -/** - * WordPress dependencies - */ - -const slotName = '__experimentalMainDashboardButton'; -const { - Fill, - Slot: MainDashboardButtonSlot -} = (0,external_wp_components_namespaceObject.createSlotFill)(slotName); -const MainDashboardButton = Fill; - -const main_dashboard_button_Slot = _ref => { - let { - children - } = _ref; - const slot = (0,external_wp_components_namespaceObject.__experimentalUseSlot)(slotName); - const hasFills = Boolean(slot.fills && slot.fills.length); - - if (!hasFills) { - return children; - } - - return (0,external_wp_element_namespaceObject.createElement)(MainDashboardButtonSlot, { - bubblesVirtually: true - }); -}; - -MainDashboardButton.Slot = main_dashboard_button_Slot; -/* harmony default export */ var main_dashboard_button = (MainDashboardButton); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/navigation-sidebar/navigation-panel/index.js - - - +const external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"]; +;// CONCATENATED MODULE: external ["wp","primitives"] +const external_wp_primitives_namespaceObject = window["wp"]["primitives"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/search.js +/** + * WordPress dependencies + */ + + +const search = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 24 24", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { + d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" + }) +}); +/* harmony default export */ const library_search = (search); + +;// CONCATENATED MODULE: external ["wp","keycodes"] +const external_wp_keycodes_namespaceObject = window["wp"]["keycodes"]; +;// CONCATENATED MODULE: external ["wp","url"] +const external_wp_url_namespaceObject = window["wp"]["url"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/wordpress.js +/** + * WordPress dependencies + */ + + +const wordpress = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { + xmlns: "http://www.w3.org/2000/svg", + viewBox: "-2 -2 24 24", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(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 */ const library_wordpress = (wordpress); + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/site-icon/index.js /** * External dependencies */ -/** - * WordPress dependencies - */ - - - - - - - - -/** - * Internal dependencies - */ - - - - -const SITE_EDITOR_KEY = 'site-editor'; - -function NavLink(_ref) { - let { - params, - replace, - ...props - } = _ref; - const linkProps = useLink(params, replace); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigationItem, extends_extends({}, linkProps, props)); -} - -const NavigationPanel = _ref2 => { - let { - activeItem = SITE_EDITOR_KEY - } = _ref2; - const { - homeTemplate, - isNavigationOpen, - siteTitle + +/** + * WordPress dependencies + */ + + + + + + +function SiteIcon({ + className +}) { + const { + isRequestingSite, + siteIconUrl } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEntityRecord } = select(external_wp_coreData_namespaceObject.store); - const { - getSettings, - isNavigationOpened - } = select(store_store); - const siteData = getEntityRecord('root', '__unstableBase', undefined) || {}; - return { - siteTitle: siteData.name, - homeTemplate: getSettings().__unstableHomeTemplate, - isNavigationOpen: isNavigationOpened() - }; - }, []); - const { - setIsNavigationPanelOpened - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - - const closeOnEscape = event => { - if (event.keyCode === external_wp_keycodes_namespaceObject.ESCAPE && !event.defaultPrevented) { - event.preventDefault(); - setIsNavigationPanelOpened(false); - } - }; - - return (// eslint-disable-next-line jsx-a11y/no-static-element-interactions - (0,external_wp_element_namespaceObject.createElement)("div", { - className: classnames_default()(`edit-site-navigation-panel`, { - 'is-open': isNavigationOpen - }), - onKeyDown: closeOnEscape - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-navigation-panel__inner" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-navigation-panel__site-title-container" - }, (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-navigation-panel__site-title" - }, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle))), (0,external_wp_element_namespaceObject.createElement)("div", { - className: "edit-site-navigation-panel__scroll-container" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigation, { - activeItem: activeItem - }, (0,external_wp_element_namespaceObject.createElement)(main_dashboard_button.Slot, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigationBackButton, { - backButtonLabel: (0,external_wp_i18n_namespaceObject.__)('Dashboard'), - className: "edit-site-navigation-panel__back-to-dashboard", - href: "index.php" - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigationMenu, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalNavigationGroup, { - title: (0,external_wp_i18n_namespaceObject.__)('Editor') - }, (0,external_wp_element_namespaceObject.createElement)(NavLink, { - icon: library_home, - title: (0,external_wp_i18n_namespaceObject.__)('Site'), - item: SITE_EDITOR_KEY, - params: { - postId: homeTemplate === null || homeTemplate === void 0 ? void 0 : homeTemplate.postId, - postType: homeTemplate === null || homeTemplate === void 0 ? void 0 : homeTemplate.postType - } - }), (0,external_wp_element_namespaceObject.createElement)(NavLink, { - icon: library_layout, - title: (0,external_wp_i18n_namespaceObject.__)('Templates'), - item: "wp_template", - params: { - postId: undefined, - postType: 'wp_template' - } - }), (0,external_wp_element_namespaceObject.createElement)(NavLink, { - icon: symbol_filled, - title: (0,external_wp_i18n_namespaceObject.__)('Template Parts'), - item: "wp_template_part", - params: { - postId: undefined, - postType: 'wp_template_part' - } - }))))))) - ); -}; - -/* harmony default export */ var navigation_panel = (NavigationPanel); - -;// 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/edit-site/build-module/components/navigation-sidebar/navigation-toggle/index.js - - + const siteData = getEntityRecord('root', '__unstableBase', undefined); + return { + isRequestingSite: !siteData, + siteIconUrl: siteData?.site_icon_url + }; + }, []); + if (isRequestingSite && !siteIconUrl) { + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: "edit-site-site-icon__image" + }); + } + const icon = siteIconUrl ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", { + className: "edit-site-site-icon__image", + alt: (0,external_wp_i18n_namespaceObject.__)('Site Icon'), + src: siteIconUrl + }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, { + className: "edit-site-site-icon__icon", + icon: library_wordpress, + size: 48 + }); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: dist_clsx(className, 'edit-site-site-icon'), + children: icon + }); +} +/* harmony default export */ const site_icon = (SiteIcon); + +;// CONCATENATED MODULE: external ["wp","dom"] +const external_wp_dom_namespaceObject = window["wp"]["dom"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/sidebar/index.js /** * External dependencies */ -/** - * WordPress dependencies - */ - - - - - - - - -/** - * Internal dependencies - */ - - - -function NavigationToggle(_ref) { - let { - icon - } = _ref; - const { - isNavigationOpen, - isRequestingSiteIcon, - siteIconUrl - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - getEntityRecord, - isResolving - } = select(external_wp_coreData_namespaceObject.store); - const siteData = getEntityRecord('root', '__unstableBase', undefined) || {}; - return { - isNavigationOpen: select(store_store).isNavigationOpened(), - isRequestingSiteIcon: isResolving('core', 'getEntityRecord', ['root', '__unstableBase', undefined]), - siteIconUrl: siteData.site_icon_url - }; - }, []); - const { - setIsNavigationPanelOpened - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)(); - const navigationToggleRef = (0,external_wp_element_namespaceObject.useRef)(); - (0,external_wp_element_namespaceObject.useEffect)(() => { - // TODO: Remove this effect when alternative solution is merged. - // See: https://github.com/WordPress/gutenberg/pull/37314 - if (!isNavigationOpen) { - navigationToggleRef.current.focus(); - } - }, [isNavigationOpen]); - - const toggleNavigationPanel = () => setIsNavigationPanelOpened(!isNavigationOpen); - - let buttonIcon = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, { - size: "36px", - icon: library_wordpress - }); - const effect = { - expand: { - scale: 1.25, - transition: { - type: 'tween', - duration: '0.3' - } - } - }; - - if (siteIconUrl) { - buttonIcon = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableMotion.img, { - variants: !disableMotion && effect, - alt: (0,external_wp_i18n_namespaceObject.__)('Site Icon'), - className: "edit-site-navigation-toggle__site-icon", - src: siteIconUrl - }); - } else if (isRequestingSiteIcon) { - buttonIcon = null; - } else if (icon) { - buttonIcon = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, { - size: "36px", - icon: icon - }); - } - - const classes = classnames_default()({ - 'edit-site-navigation-toggle__button': true, - 'has-icon': siteIconUrl - }); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableMotion.div, { - className: 'edit-site-navigation-toggle' + (isNavigationOpen ? ' is-open' : ''), - whileHover: "expand" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - className: classes, - label: (0,external_wp_i18n_namespaceObject.__)('Toggle navigation'), - ref: navigationToggleRef // isPressed will add unwanted styles. - , - "aria-pressed": isNavigationOpen, - onClick: toggleNavigationPanel, - showTooltip: true - }, buttonIcon)); -} - -/* harmony default export */ var navigation_toggle = (NavigationToggle); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/navigation-sidebar/index.js - - -/** - * WordPress dependencies - */ - - - - -/** - * Internal dependencies - */ - - - - -const { - Fill: NavigationPanelPreviewFill, - Slot: NavigationPanelPreviewSlot -} = (0,external_wp_components_namespaceObject.createSlotFill)('EditSiteNavigationPanelPreview'); -const { - Fill: NavigationSidebarFill, - Slot: NavigationSidebarSlot -} = (0,external_wp_components_namespaceObject.createSlotFill)('EditSiteNavigationSidebar'); - -function NavigationSidebar(_ref) { - let { - isDefaultOpen = false, - activeTemplateType - } = _ref; - const isDesktopViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium'); - const { - setIsNavigationPanelOpened - } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); - (0,external_wp_element_namespaceObject.useEffect)(function autoOpenNavigationPanelOnViewportChange() { - setIsNavigationPanelOpened(isDefaultOpen && isDesktopViewport); - }, [isDefaultOpen, isDesktopViewport, setIsNavigationPanelOpened]); - return (0,external_wp_element_namespaceObject.createElement)(NavigationSidebarFill, null, (0,external_wp_element_namespaceObject.createElement)(navigation_toggle, null), (0,external_wp_element_namespaceObject.createElement)(navigation_panel, { - activeItem: activeTemplateType - }), (0,external_wp_element_namespaceObject.createElement)(NavigationPanelPreviewSlot, null)); -} - -NavigationSidebar.Slot = NavigationSidebarSlot; -/* harmony default export */ var navigation_sidebar = (NavigationSidebar); - -;// CONCATENATED MODULE: external ["wp","reusableBlocks"] -var external_wp_reusableBlocks_namespaceObject = window["wp"]["reusableBlocks"]; -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/template-part-converter/convert-to-regular.js - - -/** - * WordPress dependencies - */ - - - - -function ConvertToRegularBlocks(_ref) { - let { - clientId - } = _ref; - const { - getBlocks - } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blockEditor_namespaceObject.store); - const { - replaceBlocks - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); - const canRemove = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).canRemoveBlock(clientId), [clientId]); - - if (!canRemove) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockSettingsMenuControls, null, _ref2 => { - let { - onClose - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - onClick: () => { - replaceBlocks(clientId, getBlocks(clientId)); - onClose(); - } - }, (0,external_wp_i18n_namespaceObject.__)('Detach blocks from template part')); - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/create-template-part-modal/index.js - - -/** - * WordPress dependencies - */ - - - - - - - -/** - * Internal dependencies - */ - - -function CreateTemplatePartModal(_ref) { - let { - closeModal, - onCreate - } = _ref; - const [title, setTitle] = (0,external_wp_element_namespaceObject.useState)(''); - const [area, setArea] = (0,external_wp_element_namespaceObject.useState)(TEMPLATE_PART_AREA_GENERAL); - const [isSubmitting, setIsSubmitting] = (0,external_wp_element_namespaceObject.useState)(false); - const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(CreateTemplatePartModal); - const templatePartAreas = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_editor_namespaceObject.store).__experimentalGetDefaultTemplatePartAreas(), []); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Modal, { - title: (0,external_wp_i18n_namespaceObject.__)('Create a template part'), - closeLabel: (0,external_wp_i18n_namespaceObject.__)('Close'), - onRequestClose: closeModal, - overlayClassName: "edit-site-create-template-part-modal" - }, (0,external_wp_element_namespaceObject.createElement)("form", { - onSubmit: async event => { - event.preventDefault(); - - if (!title) { - return; - } - - setIsSubmitting(true); - await onCreate({ - title, - area - }); - } - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { - label: (0,external_wp_i18n_namespaceObject.__)('Name'), - value: title, - onChange: setTitle, - required: true - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.BaseControl, { - label: (0,external_wp_i18n_namespaceObject.__)('Area'), - id: `edit-site-create-template-part-modal__area-selection-${instanceId}`, - className: "edit-site-create-template-part-modal__area-base-control" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalRadioGroup, { - label: (0,external_wp_i18n_namespaceObject.__)('Area'), - className: "edit-site-create-template-part-modal__area-radio-group", - id: `edit-site-create-template-part-modal__area-selection-${instanceId}`, - onChange: setArea, - checked: area - }, templatePartAreas.map(_ref2 => { - let { - icon, - label, - area: value, - description - } = _ref2; - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalRadio, { - key: label, - value: value, - className: "edit-site-create-template-part-modal__area-radio" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, { - align: "start", - justify: "start" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, { - icon: icon - })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexBlock, { - className: "edit-site-create-template-part-modal__option-label" - }, label, (0,external_wp_element_namespaceObject.createElement)("div", null, description)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, { - className: "edit-site-create-template-part-modal__checkbox" - }, area === value && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, { - icon: library_check - })))); - }))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, { - className: "edit-site-create-template-part-modal__modal-actions", - justify: "flex-end" - }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - variant: "secondary", - onClick: () => { - closeModal(); - } - }, (0,external_wp_i18n_namespaceObject.__)('Cancel'))), (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", - type: "submit", - disabled: !title, - isBusy: isSubmitting - }, (0,external_wp_i18n_namespaceObject.__)('Create')))))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/template-part-converter/convert-to-template-part.js - - + +/** + * WordPress dependencies + */ + + + +const SidebarNavigationContext = (0,external_wp_element_namespaceObject.createContext)(() => {}); +// Focus a sidebar element after a navigation. The element to focus is either +// specified by `focusSelector` (when navigating back) or it is the first +// tabbable element (usually the "Back" button). +function focusSidebarElement(el, direction, focusSelector) { + let elementToFocus; + if (direction === 'back' && focusSelector) { + elementToFocus = el.querySelector(focusSelector); + } + if (direction !== null && !elementToFocus) { + const [firstTabbable] = external_wp_dom_namespaceObject.focus.tabbable.find(el); + elementToFocus = firstTabbable !== null && firstTabbable !== void 0 ? firstTabbable : el; + } + elementToFocus?.focus(); +} + +// Navigation state that is updated when navigating back or forward. Helps us +// manage the animations and also focus. +function createNavState() { + let state = { + direction: null, + focusSelector: null + }; + return { + get() { + return state; + }, + navigate(direction, focusSelector = null) { + state = { + direction, + focusSelector: direction === 'forward' && focusSelector ? focusSelector : state.focusSelector + }; + } + }; +} +function SidebarContentWrapper({ + children +}) { + const navState = (0,external_wp_element_namespaceObject.useContext)(SidebarNavigationContext); + const wrapperRef = (0,external_wp_element_namespaceObject.useRef)(); + const [navAnimation, setNavAnimation] = (0,external_wp_element_namespaceObject.useState)(null); + (0,external_wp_element_namespaceObject.useLayoutEffect)(() => { + const { + direction, + focusSelector + } = navState.get(); + focusSidebarElement(wrapperRef.current, direction, focusSelector); + setNavAnimation(direction); + }, [navState]); + const wrapperCls = dist_clsx('edit-site-sidebar__screen-wrapper', { + 'slide-from-left': navAnimation === 'back', + 'slide-from-right': navAnimation === 'forward' + }); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + ref: wrapperRef, + className: wrapperCls, + children: children + }); +} +function SidebarContent({ + routeKey, + children +}) { + const [navState] = (0,external_wp_element_namespaceObject.useState)(createNavState); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationContext.Provider, { + value: navState, + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: "edit-site-sidebar__content", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarContentWrapper, { + children: children + }, routeKey) + }) + }); +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/site-hub/index.js /** * External dependencies */ -/** - * WordPress dependencies - */ - - - - - - - - - -/** - * Internal dependencies - */ - - -function ConvertToTemplatePart(_ref) { - let { - clientIds, - blocks - } = _ref; - const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(false); - const { - replaceBlocks - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); - const { - saveEntityRecord - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); - const { - createSuccessNotice - } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); - - const onConvert = async _ref2 => { - let { - title, - area - } = _ref2; - // Currently template parts only allow latin chars. - // Fallback slug will receive suffix by default. - const cleanSlug = (0,external_lodash_namespaceObject.kebabCase)(title).replace(/[^\w-]+/g, '') || 'wp-custom-part'; - const templatePart = await saveEntityRecord('postType', 'wp_template_part', { - slug: cleanSlug, - title, - content: (0,external_wp_blocks_namespaceObject.serialize)(blocks), - area - }); - replaceBlocks(clientIds, (0,external_wp_blocks_namespaceObject.createBlock)('core/template-part', { - slug: templatePart.slug, - theme: templatePart.theme - })); - createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Template part created.'), { - type: 'snackbar' - }); // The modal and this component will be unmounted because of `replaceBlocks` above, - // so no need to call `closeModal` or `onClose`. - }; - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockSettingsMenuControls, null, () => (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - onClick: () => { - setIsModalOpen(true); - } - }, (0,external_wp_i18n_namespaceObject.__)('Make template part'))), isModalOpen && (0,external_wp_element_namespaceObject.createElement)(CreateTemplatePartModal, { - closeModal: () => { - setIsModalOpen(false); - }, - onCreate: onConvert - })); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/template-part-converter/index.js - - -/** - * WordPress dependencies - */ - - -/** - * Internal dependencies - */ - - - -function TemplatePartConverter() { - var _blocks$; - - const { - clientIds, - blocks - } = (0,external_wp_data_namespaceObject.useSelect)(select => { - const { - getSelectedBlockClientIds, - getBlocksByClientId - } = select(external_wp_blockEditor_namespaceObject.store); - const selectedBlockClientIds = getSelectedBlockClientIds(); - return { - clientIds: selectedBlockClientIds, - blocks: getBlocksByClientId(selectedBlockClientIds) - }; - }, []); // Allow converting a single template part to standard blocks. - - if (blocks.length === 1 && ((_blocks$ = blocks[0]) === null || _blocks$ === void 0 ? void 0 : _blocks$.name) === 'core/template-part') { - return (0,external_wp_element_namespaceObject.createElement)(ConvertToRegularBlocks, { - clientId: clientIds[0] - }); - } - - return (0,external_wp_element_namespaceObject.createElement)(ConvertToTemplatePart, { - clientIds: clientIds, - blocks: blocks - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/pencil.js - - -/** - * WordPress dependencies - */ - -const pencil = (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: "M20.1 5.1L16.9 2 6.2 12.7l-1.3 4.4 4.5-1.3L20.1 5.1zM4 20.8h8v-1.5H4v1.5z" + +/** + * WordPress dependencies + */ + + + + + + + + + + + + +/** + * Internal dependencies + */ + + + +const { + useHistory +} = lock_unlock_unlock(external_wp_router_namespaceObject.privateApis); + + + +const SiteHub = (0,external_wp_element_namespaceObject.memo)((0,external_wp_element_namespaceObject.forwardRef)(({ + isTransparent +}, ref) => { + const { + dashboardLink, + homeUrl, + siteTitle + } = (0,external_wp_data_namespaceObject.useSelect)(select => { + const { + getSettings + } = lock_unlock_unlock(select(store)); + const { + getSite, + getUnstableBase // Site index. + } = select(external_wp_coreData_namespaceObject.store); + const _site = getSite(); + return { + dashboardLink: getSettings().__experimentalDashboardLink || 'index.php', + homeUrl: getUnstableBase()?.home, + siteTitle: !_site?.title && !!_site?.url ? (0,external_wp_url_namespaceObject.filterURLForDisplay)(_site?.url) : _site?.title + }; + }, []); + const { + open: openCommandCenter + } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_commands_namespaceObject.store); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: "edit-site-site-hub", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, { + justify: "flex-start", + spacing: "0", + children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: dist_clsx('edit-site-site-hub__view-mode-toggle-container', { + 'has-transparent-background': isTransparent + }), + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + ref: ref, + href: dashboardLink, + label: (0,external_wp_i18n_namespaceObject.__)('Go to the Dashboard'), + className: "edit-site-layout__view-mode-toggle", + style: { + transform: 'scale(0.5)', + borderRadius: 4 + }, + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(site_icon, { + className: "edit-site-layout__view-mode-toggle-icon" + }) + }) + }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, { + children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: "edit-site-site-hub__title", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + variant: "link", + href: homeUrl, + target: "_blank", + label: (0,external_wp_i18n_namespaceObject.__)('View site (opens in a new tab)'), + children: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle) + }) + }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, { + spacing: 0, + expanded: false, + className: "edit-site-site-hub__actions", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + className: "edit-site-site-hub_toggle-command-center", + icon: library_search, + onClick: () => openCommandCenter(), + label: (0,external_wp_i18n_namespaceObject.__)('Open command palette'), + shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('k') + }) + })] + })] + }) + }); })); -/* harmony default export */ var library_pencil = (pencil); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/edit.js -/** - * Internal dependencies - */ - -/* harmony default export */ var edit = (library_pencil); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/navigate-to-link/index.js - - -/** - * WordPress dependencies - */ - - - - - - - -function NavigateToLink(_ref) { - let { - type, - id, - activePage, - onActivePageChange - } = _ref; - const post = (0,external_wp_data_namespaceObject.useSelect)(select => type && id && type !== 'URL' && select(external_wp_coreData_namespaceObject.store).getEntityRecord('postType', type, id), [type, id]); - const onClick = (0,external_wp_element_namespaceObject.useMemo)(() => { - if (!(post !== null && post !== void 0 && post.link)) return null; - const path = (0,external_wp_url_namespaceObject.getPathAndQueryString)(post.link); - if (path === (activePage === null || activePage === void 0 ? void 0 : activePage.path)) return null; - return () => onActivePageChange({ - type, - slug: post.slug, - path, - context: { - postType: post.type, - postId: post.id - } - }); - }, [post, activePage === null || activePage === void 0 ? void 0 : activePage.path, onActivePageChange]); - return onClick && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - icon: edit, - label: (0,external_wp_i18n_namespaceObject.__)('Edit Page Template'), - onClick: onClick - }); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/block-editor/block-inspector-button.js - - -/** - * WordPress dependencies - */ - - - - - - -/** - * Internal dependencies - */ - - - - -function BlockInspectorButton(_ref) { - let { - onClick = () => {} - } = _ref; - const { - shortcut, - isBlockInspectorOpen - } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ - shortcut: select(external_wp_keyboardShortcuts_namespaceObject.store).getShortcutRepresentation('core/edit-site/toggle-block-settings-sidebar'), - isBlockInspectorOpen: select(store).getActiveComplementaryArea(store_store.name) === SIDEBAR_BLOCK - }), []); - const { - enableComplementaryArea, - disableComplementaryArea - } = (0,external_wp_data_namespaceObject.useDispatch)(store); - const label = isBlockInspectorOpen ? (0,external_wp_i18n_namespaceObject.__)('Hide more settings') : (0,external_wp_i18n_namespaceObject.__)('Show more settings'); - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, { - onClick: () => { - if (isBlockInspectorOpen) { - disableComplementaryArea(STORE_NAME); - (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Block settings closed')); - } else { - enableComplementaryArea(STORE_NAME, SIDEBAR_BLOCK); - (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Additional settings are now available in the Editor block settings sidebar')); - } // Close dropdown menu. - - - onClick(); - }, - shortcut: shortcut - }, label); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/edit-template-part-menu-button/index.js - - - -/** - * WordPress dependencies - */ - - - - - - -/** - * Internal dependencies - */ - - - -function EditTemplatePartMenuButton() { - return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockSettingsMenuControls, null, _ref => { - let { - selectedClientIds, - onClose - } = _ref; - return (0,external_wp_element_namespaceObject.createElement)(EditTemplatePartMenuItem, { - selectedClientId: selectedClientIds[0], - onClose: onClose - }); - }); -} - -function EditTemplatePartMenuItem(_ref2) { - let { - selectedClientId, - onClose - } = _ref2; - const { - params - } = useLocation(); - const selectedTemplatePart = (0,external_wp_data_namespaceObject.useSelect)(select => { - const block = select(external_wp_blockEditor_namespaceObject.store).getBlock(selectedClientId); - - if (block && (0,external_wp_blocks_namespaceObject.isTemplatePart)(block)) { - const { - theme, - slug - } = block.attributes; - return select(external_wp_coreData_namespaceObject.store).getEntityRecord('postType', 'wp_template_part', // Ideally this should be an official public API. - `${theme}//${slug}`); - } - }, [selectedClientId]); - const linkProps = useLink({ - postId: selectedTemplatePart === null || selectedTemplatePart === void 0 ? void 0 : selectedTemplatePart.id, - postType: selectedTemplatePart === null || selectedTemplatePart === void 0 ? void 0 : selectedTemplatePart.type - }, { - fromTemplateId: params.postId - }); - - if (!selectedTemplatePart) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItem, extends_extends({}, linkProps, { - onClick: event => { - linkProps.onClick(event); - onClose(); - } - }), - /* translators: %s: template part title */ - (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Edit %s'), selectedTemplatePart.slug)); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/arrow-left.js - - -/** - * WordPress dependencies - */ - -const arrowLeft = (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: "M20 10.8H6.7l4.1-4.5-1.1-1.1-5.8 6.3 5.8 5.8 1.1-1.1-4-3.9H20z" +/* harmony default export */ const site_hub = (SiteHub); +const SiteHubMobile = (0,external_wp_element_namespaceObject.memo)((0,external_wp_element_namespaceObject.forwardRef)(({ + isTransparent +}, ref) => { + const history = useHistory(); + const { + navigate + } = (0,external_wp_element_namespaceObject.useContext)(SidebarNavigationContext); + const { + homeUrl, + siteTitle + } = (0,external_wp_data_namespaceObject.useSelect)(select => { + const { + getSite, + getUnstableBase // Site index. + } = select(external_wp_coreData_namespaceObject.store); + const _site = getSite(); + return { + homeUrl: getUnstableBase()?.home, + siteTitle: !_site?.title && !!_site?.url ? (0,external_wp_url_namespaceObject.filterURLForDisplay)(_site?.url) : _site?.title + }; + }, []); + const { + open: openCommandCenter + } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_commands_namespaceObject.store); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: "edit-site-site-hub", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, { + justify: "flex-start", + spacing: "0", + children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: dist_clsx('edit-site-site-hub__view-mode-toggle-container', { + 'has-transparent-background': isTransparent + }), + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + ref: ref, + label: (0,external_wp_i18n_namespaceObject.__)('Go to Site Editor'), + className: "edit-site-layout__view-mode-toggle", + style: { + transform: 'scale(0.5)', + borderRadius: 4 + }, + onClick: () => { + history.push({}); + navigate('back'); + }, + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(site_icon, { + className: "edit-site-layout__view-mode-toggle-icon" + }) + }) + }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, { + children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { + className: "edit-site-site-hub__title", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + variant: "link", + href: homeUrl, + target: "_blank", + label: (0,external_wp_i18n_namespaceObject.__)('View site (opens in a new tab)'), + children: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle) + }) + }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, { + spacing: 0, + expanded: false, + className: "edit-site-site-hub__actions", + children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, { + className: "edit-site-site-hub_toggle-command-center", + icon: library_search, + onClick: () => openCommandCenter(), + label: (0,external_wp_i18n_namespaceObject.__)('Open command palette'), + shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('k') + }) + })] + })] + }) + }); })); -/* harmony default export */ var arrow_left = (arrowLeft); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/block-editor/back-button.js - - -/** - * WordPress dependencies - */ - - - -/** - * Internal dependencies - */ - - - -function BackButton() { - var _location$state; - - const location = useLocation(); - const history = useHistory(); - const isTemplatePart = location.params.postType === 'wp_template_part'; - const previousTemplateId = (_location$state = location.state) === null || _location$state === void 0 ? void 0 : _location$state.fromTemplateId; - - if (!isTemplatePart || !previousTemplateId) { - return null; - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { - className: "edit-site-visual-editor__back-button", - icon: arrow_left, - onClick: () => { - history.back(); - } - }, (0,external_wp_i18n_namespaceObject.__)('Back')); -} - -/* harmony default export */ var back_button = (BackButton); - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/block-editor/resize-handle.js - - -/** - * WordPress dependencies - */ - - - -const DELTA_DISTANCE = 20; // The distance to resize per keydown in pixels. - -function ResizeHandle(_ref) { - let { - direction, - resizeWidthBy - } = _ref; - - function handleKeyDown(event) { - const { - keyCode - } = event; - - if (direction === 'left' && keyCode === external_wp_keycodes_namespaceObject.LEFT || direction === 'right' && keyCode === external_wp_keycodes_namespaceObject.RIGHT) { - resizeWidthBy(DELTA_DISTANCE); - } else if (direction === 'left' && keyCode === external_wp_keycodes_namespaceObject.RIGHT || direction === 'right' && keyCode === external_wp_keycodes_namespaceObject.LEFT) { - resizeWidthBy(-DELTA_DISTANCE); - } - } - - return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("button", { - className: `resizable-editor__drag-handle is-${direction}`, - "aria-label": (0,external_wp_i18n_namespaceObject.__)('Drag to resize'), - "aria-describedby": `resizable-editor__resize-help-${direction}`, - onKeyDown: handleKeyDown - }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, { - id: `resizable-editor__resize-help-${direction}` - }, (0,external_wp_i18n_namespaceObject.__)('Use left and right arrow keys to resize the canvas.'))); -} - -;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/block-editor/resizable-editor.js - - - -/** - * WordPress dependencies - */ - - - - - -/** - * Internal dependencies - */ - - - -const DEFAULT_STYLES = { - width: '100%', - height: '100%' -}; // Removes the inline styles in the drag handles. + +;// CONCATENATED MODULE: ./node_modules/@wordpress/edit-site/build-module/components/resizable-frame/index.js +/** + * External dependencies + */ + + +/** + * WordPress dependencies + */ + + + + + + +/** + * Internal dependencies + */ + + + +// Removes the inline styles in the drag handles. + + const HANDLE_STYLES_OVERRIDE = { position: undefined, @@ -10918,512 +9828,315 @@ left: undefined }; -function ResizableEditor(_ref) { - let { - enableResizing, - settings, - children, - ...props - } = _ref; - const deviceType = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).__experimentalGetPreviewDeviceType(), []); - const deviceStyles = (0,external_wp_blockEditor_namespaceObject.__experimentalUseResizeCanvas)(deviceType); - const [width, setWidth] = (0,external_wp_element_namespaceObject.useState)(DEFAULT_STYLES.width); - const [height, setHeight] = (0,external_wp_element_namespaceObject.useState)(DEFAULT_STYLES.height); - const iframeRef = (0,external_wp_element_namespaceObject.useRef)(); - const mouseMoveTypingResetRef = (0,external_wp_blockEditor_namespaceObject.__unstableUseMouseMoveTypingReset)(); - const ref = (0,external_wp_compose_namespaceObject.useMergeRefs)([iframeRef, mouseMoveTypingResetRef]); - (0,external_wp_element_namespaceObject.useEffect)(function autoResizeIframeHeight() { - const iframe = iframeRef.current; - - if (!iframe || !enableResizing) { - return; - } - - let animationFrame = null; - - function resizeHeight() { - if (!animationFrame) { - // Throttle the updates on animation frame. - animationFrame = iframe.contentWindow.requestAnimationFrame(() => { - setHeight(iframe.contentDocument.documentElement.scrollHeight); - animationFrame = null; +// The minimum width of the frame (in px) while resizing. +const FRAME_MIN_WIDTH = 320; +// The reference width of the frame (in px) used to calculate the aspect ratio. +const FRAME_REFERENCE_WIDTH = 1300; +// 9 : 19.5 is the target aspect ratio enforced (when possible) while resizing. +const FRAME_TARGET_ASPECT_RATIO = 9 / 19.5; +// The minimum distance (in px) between the frame resize handle and the +// viewport's edge. If the frame is resized to be closer to the viewport's edge +// than this distance, then "canvas mode" will be enabled. +const SNAP_TO_EDIT_CANVAS_MODE_THRESHOLD = 200; +// Default size for the `frameSize` state. +const INITIAL_FRAME_SIZE = { + width: '100%', + height: '100%' +}; +function calculateNewHeight(width, initialAspectRatio) { + const lerp = (a, b, amount) => { + return a + (b - a) * amount; + }; + + // Calculate the intermediate aspect ratio based on the current width. + const lerpFactor = 1 - Math.max(0, Math.min(1, (width - FRAME_MIN_WIDTH) / (FRAME_REFERENCE_WIDTH - FRAME_MIN_WIDTH))); + + // Calculate the height based on the intermediate aspect ratio + // ensuring the frame arrives at the target aspect ratio. + const intermediateAspectRatio = lerp(initialAspectRatio, FRAME_TARGET_ASPECT_RATIO, lerpFactor); + return width / intermediateAspectRatio; +} +function ResizableFrame({ + isFullWidth, + isOversized, + setIsOversized, + isReady, + children, + /** The default (unresized) width/height of the frame, based on the space availalbe in the viewport. */ + defaultSize, + innerContentStyle +}) { + const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)(); + const [frameSize, setFrameSize] = (0,external_wp_element_namespaceObject.useState)(INITIAL_FRAME_SIZE); + // The width of the resizable frame when a new resize gesture starts. + const [startingWidth, setStartingWidth] = (0,external_wp_element_namespaceObject.useState)(); + const [isResizing, setIsResizing] = (0,external_wp_element_namespaceObject.useState)(false); + const [shouldShowHandle, setShouldShowHandle] = (0,external_wp_element_namespaceObject.useState)(false); + const [resizeRatio, setResizeRatio] = (0,external_wp_element_namespaceObject.useState)(1); + const canvasMode = (0,external_wp_data_namespaceObject.useSelect)(select => lock_unlock_unlock(select(store)).getCanvasMode(), []); + const { + setCanvasMode + } = lock_unlock_unlock((0,external_wp_data_namespaceObject.useDispatch)(store)); + const FRAME_TRANSITION = { + type: 'tween', + duration: isResizing ? 0 : 0.5 + }; + const frameRef = (0,external_wp_element_namespaceObject.useRef)(null); + const resizableHandleHelpId = (0,external_wp_compose_namespaceObject.useInstanceId)(ResizableFrame, 'edit-site-resizable-frame-handle-help'); + const defaultAspectRatio = defaultSize.width / defaultSize.height; + const handleResizeStart = (_event, _direction, ref) => { + // Remember the starting width so we don't have to get `ref.offsetWidth` on + // every resize event thereafter, which will cause layout thrashing. + setStartingWidth(ref.offsetWidth); + setIsResizing(true); + }; + + // Calculate the frame size based on the window width as its resized. + const handleResize = (_event, _direction, _ref, delta) => { + const normalizedDelta = delta.width / resizeRatio; + const deltaAbs = Math.abs(normalizedDelta); + const maxDoubledDelta = delta.width < 0 // is shrinking + ? deltaAbs : (defaultSize.width - startingWidth) / 2; + const deltaToDouble = Math.min(deltaAbs, maxDoubledDelta); + const doubleSegment = deltaAbs === 0 ? 0 : deltaToDouble / deltaAbs; + const singleSegment = 1 - doubleSegment; + setResizeRatio(singleSegment + doubleSegment * 2); + const updatedWidth = startingWidth + delta.width; + setIsOversized(updatedWidth > defaultSize.width); + + // Width will be controlled by the library (via `resizeRatio`), + // so we only need to update the height. + setFrameSize({ + height: isOversized ? '100%' : calculateNewHeight(updatedWidth, defaultAspectRatio) + }); + }; + const handleResizeStop = (_event, _direction, ref) => { + setIsResizing(false); + if (!isOversized) { + return; + } + setIsOversized(false); + const remainingWidth = ref.ownerDocument.documentElement.offsetWidth - ref.offsetWidth; + if (remainingWidth > SNAP_TO_EDIT_CANVAS_MODE_THRESHOLD) { + // Reset the initial aspect ratio if the frame is resized slightly + // above the sidebar but not far enough to trigger full screen. + setFrameSize(INITIAL_FRAME_SIZE); + } else { + // Trigger full screen if the frame is resized far enough to the left. + setCanvasMode('edit'); + } + }; + + // Handle resize by arrow keys + const handleResizableHandleKeyDown = event => { + if (!['ArrowLeft', 'ArrowRight'].includes(event.key)) { + return; + } + event.preventDefault(); + const step = 20 * (event.shiftKey ? 5 : 1); + const delta = step * (event.key === 'ArrowLeft' ? 1 : -1); + const newWidth = Math.min(Math.max(FRAME_MIN_WIDTH, frameRef.current.resizable.offsetWidth + delta), defaultSize.width); + setFrameSize({ + width: newWidth, + height: calculateNewHeight(newWidth, defaultAspectRatio) + }); + }; + const frameAnimationVariants = { + default: { + flexGrow: 0, + height: frameSize.height + }, + fullWidth: { + flexGrow: 1, + height: frameSize.height + } + }; + const resizeHandleVariants = { + hidden: { + opacity: 0, + left: 0 + }, + visible: { + opacity: 1, + left: -14 // Account for the handle's width. + }, + active: { + opacity: 1, + left: -14, + // Account for the handle's width. + scaleY: 1.3 + } + }; + const currentResizeHandleVariant = (() => { + if (isResizing) { + return 'active'; + } + return shouldShowHandle ? 'visible' : 'hidden'; + })(); + return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ResizableBox, { + as: external_wp_components_namespaceObject.__unstableMotion.div, + ref: frameRef, + initial: false, + variants: frameAnimationVariants, + animate: isFullWidth ? 'fullWidth' : 'default', + onAnimationComplete: definition => { + if (definition === 'fullWidth') { + setFrameSize({ + width: '100%', + height: '100%' }); } - } - - let resizeObserver; - - function registerObserver() { - var _resizeObserver; - - (_resizeObserver = resizeObserver) === null || _resizeObserver === void 0 ? void 0 : _resizeObserver.disconnect(); - resizeObserver = new iframe.contentWindow.ResizeObserver(resizeHeight); // Observing the rather than the because the latter - // gets destroyed and remounted after initialization in