s).forEach((t=>{const n=t.getAsFile();n&&!e.find((({name:t,type:e,size:r})=>t===n.name&&e===n.type&&r===n.size))&&e.push(n)})),e}const st={focusable:n,tabbable:r};(window.wp=window.wp||{}).dom=e})();/*! This file is auto-generated */ (()=>{"use strict";var e={n:n=>{var r=n&&n.__esModule?()=>n.default:()=>n;return e.d(r,{a:r}),r},d:(n,r)=>{for(var t in r)e.o(r,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:r[t]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};e.r(n),e.d(n,{PluginArea:()=>P,getPlugin:()=>h,getPlugins:()=>y,registerPlugin:()=>f,unregisterPlugin:()=>w,usePluginContext:()=>c,withPluginContext:()=>p});const r=window.React;const t=window.wp.element,o=window.wp.hooks,i=window.wp.isShallowEqual;var l=e.n(i);const s=window.wp.compose,u=(0,t.createContext)({name:null,icon:null}),a=u.Provider;function c(){return(0,t.useContext)(u)}const p=e=>(0,s.createHigherOrderComponent)((n=>t=>(0,r.createElement)(u.Consumer,null,(o=>(0,r.createElement)(n,{...t,...e(o,t)})))),"withPluginContext");class g extends t.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){const{name:n,onError:r}=this.props;r&&r(n,e)}render(){return this.state.hasError?null:this.props.children}}const d=window.wp.primitives,m=(0,r.createElement)(d.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,r.createElement)(d.Path,{d:"M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z"})),v={};function f(e,n){if("object"!=typeof n)return console.error("No settings object provided!"),null;if("string"!=typeof e)return console.error("Plugin name must be string."),null;if(!/^[a-z][a-z0-9-]*$/.test(e))return console.error('Plugin name must include only lowercase alphanumeric characters or dashes, and start with a letter. Example: "my-plugin".'),null;v[e]&&console.error(`Plugin "${e}" is already registered.`),n=(0,o.applyFilters)("plugins.registerPlugin",n,e);const{render:r,scope:t}=n;if("function"!=typeof r)return console.error('The "render" property must be specified and must be a valid function.'),null;if(t){if("string"!=typeof t)return console.error("Plugin scope must be string."),null;if(!/^[a-z][a-z0-9-]*$/.test(t))return console.error('Plugin scope must include only lowercase alphanumeric characters or dashes, and start with a letter. Example: "my-page".'),null}return v[e]={name:e,icon:m,...n},(0,o.doAction)("plugins.pluginRegistered",n,e),n}function w(e){if(!v[e])return void console.error('Plugin "'+e+'" is not registered.');const n=v[e];return delete v[e],(0,o.doAction)("plugins.pluginUnregistered",n,e),n}function h(e){return v[e]}function y(e){return Object.values(v).filter((n=>n.scope===e))}const x=function(e,n){var r,t,o=0;function i(){var i,l,s=r,u=arguments.length;e:for(;s;){if(s.args.length===arguments.length){for(l=0;l({icon:e,name:n})));const P=function({scope:e,onError:n}){const i=(0,t.useMemo)((()=>{let n=[];return{subscribe:e=>((0,o.addAction)("plugins.pluginRegistered","core/plugins/plugin-area/plugins-registered",e),(0,o.addAction)("plugins.pluginUnregistered","core/plugins/plugin-area/plugins-unregistered",e),()=>{(0,o.removeAction)("plugins.pluginRegistered","core/plugins/plugin-area/plugins-registered"),(0,o.removeAction)("plugins.pluginUnregistered","core/plugins/plugin-area/plugins-unregistered")}),getValue(){const r=y(e);return l()(n,r)||(n=r),n}}}),[e]),s=(0,t.useSyncExternalStore)(i.subscribe,i.getValue);return(0,r.createElement)("div",{style:{display:"none"}},s.map((({icon:e,name:t,render:o})=>(0,r.createElement)(a,{key:t,value:x(e,t)},(0,r.createElement)(g,{name:t,onError:n},(0,r.createElement)(o,null))))))};(window.wp=window.wp||{}).plugins=n})();/*! This file is auto-generated */ (()=>{"use strict";var e={r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t);const n=window.wp.richText,o=window.React,r=window.wp.i18n,a=window.wp.blockEditor,l=window.wp.primitives,i=(0,o.createElement)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(l.Path,{d:"M14.7 11.3c1-.6 1.5-1.6 1.5-3 0-2.3-1.3-3.4-4-3.4H7v14h5.8c1.4 0 2.5-.3 3.3-1 .8-.7 1.2-1.7 1.2-2.9.1-1.9-.8-3.1-2.6-3.7zm-5.1-4h2.3c.6 0 1.1.1 1.4.4.3.3.5.7.5 1.2s-.2 1-.5 1.2c-.3.3-.8.4-1.4.4H9.6V7.3zm4.6 9c-.4.3-1 .4-1.7.4H9.6v-3.9h2.9c.7 0 1.3.2 1.7.5.4.3.6.8.6 1.5s-.2 1.2-.6 1.5z"})),c="core/bold",s=(0,r.__)("Bold"),u={name:c,title:s,tagName:"strong",className:null,edit({isActive:e,value:t,onChange:r,onFocus:l}){function u(){r((0,n.toggleFormat)(t,{type:c,title:s}))}return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(a.RichTextShortcut,{type:"primary",character:"b",onUse:u}),(0,o.createElement)(a.RichTextToolbarButton,{name:"bold",icon:i,title:s,onClick:function(){r((0,n.toggleFormat)(t,{type:c})),l()},isActive:e,shortcutType:"primary",shortcutCharacter:"b"}),(0,o.createElement)(a.__unstableRichTextInputEvent,{inputType:"formatBold",onInput:u}))}},m=(0,o.createElement)(l.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)(l.Path,{d:"M20.8 10.7l-4.3-4.3-1.1 1.1 4.3 4.3c.1.1.1.3 0 .4l-4.3 4.3 1.1 1.1 4.3-4.3c.7-.8.7-1.9 0-2.6zM4.2 11.8l4.3-4.3-1-1-4.3 4.3c-.7.7-.7 1.8 0 2.5l4.3 4.3 1.1-1.1-4.3-4.3c-.2-.1-.2-.3-.1-.4z"})),p="core/code",h=(0,r.__)("Inline code"),g={name:p,title:h,tagName:"code",className:null,__unstableInputRule(e){const{start:t,text:o}=e;if("`"!==o[t-1])return e;if(t-2<0)return e;const r=o.lastIndexOf("`",t-2);if(-1===r)return e;const a=r,l=t-2;return a===l?e:(e=(0,n.remove)(e,a,a+1),e=(0,n.remove)(e,l,l+1),e=(0,n.applyFormat)(e,{type:p},a,l))},edit({value:e,onChange:t,onFocus:r,isActive:l}){function i(){t((0,n.toggleFormat)(e,{type:p,title:h})),r()}return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(a.RichTextShortcut,{type:"access",character:"x",onUse:i}),(0,o.createElement)(a.RichTextToolbarButton,{icon:m,title:h,onClick:i,isActive:l,role:"menuitemcheckbox"}))}},d=window.wp.components,v=window.wp.element,b=(0,o.createElement)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"-2 -2 24 24"},(0,o.createElement)(l.Path,{d:"M6.734 16.106l2.176-2.38-1.093-1.028-3.846 4.158 3.846 4.157 1.093-1.027-2.176-2.38h2.811c1.125 0 2.25.03 3.374 0 1.428-.001 3.362-.25 4.963-1.277 1.66-1.065 2.868-2.906 2.868-5.859 0-2.479-1.327-4.896-3.65-5.93-1.82-.813-3.044-.8-4.806-.788l-.567.002v1.5c.184 0 .368 0 .553-.002 1.82-.007 2.704-.014 4.21.657 1.854.827 2.76 2.657 2.76 4.561 0 2.472-.973 3.824-2.178 4.596-1.258.807-2.864 1.04-4.163 1.04h-.02c-1.115.03-2.229 0-3.344 0H6.734z"})),f=["image"],w="core/image",y=(0,r.__)("Inline image"),E={name:w,title:y,keywords:[(0,r.__)("photo"),(0,r.__)("media")],object:!0,tagName:"img",className:null,attributes:{className:"class",style:"style",url:"src",alt:"alt"},edit:function({value:e,onChange:t,onFocus:r,isObjectActive:l,activeObjectAttributes:i,contentRef:c}){const[s,u]=(0,v.useState)(!1);function m(){u(!1)}return(0,o.createElement)(a.MediaUploadCheck,null,(0,o.createElement)(a.RichTextToolbarButton,{icon:(0,o.createElement)(d.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(d.Path,{d:"M4 18.5h16V17H4v1.5zM16 13v1.5h4V13h-4zM5.1 15h7.8c.6 0 1.1-.5 1.1-1.1V6.1c0-.6-.5-1.1-1.1-1.1H5.1C4.5 5 4 5.5 4 6.1v7.8c0 .6.5 1.1 1.1 1.1zm.4-8.5h7V10l-1-1c-.3-.3-.8-.3-1 0l-1.6 1.5-1.2-.7c-.3-.2-.6-.2-.9 0l-1.3 1V6.5zm0 6.1l1.8-1.3 1.3.8c.3.2.7.2.9-.1l1.5-1.4 1.5 1.4v1.5h-7v-.9z"})),title:y,onClick:function(){u(!0)},isActive:l}),s&&(0,o.createElement)(a.MediaUpload,{allowedTypes:f,onSelect:({id:o,url:a,alt:l,widtu=[];let c=!1,l=!1;for(let t=0;t{const[,o,i="default"]=kn.exec(e);var s;return t[o]||(t[o]=[]),t[o].push({namespace:null!=n?n:null!==(s=bn[bn.length-1])&&void 0!==s?s:null,value:r,suffix:i}),t}),{})),"template"===i)s.content=[...n.content.childNodes].map((t=>En(t)));else{let n=e.firstChild();if(n){for(;n;){const[r,o]=t(n);r&&_.push(r),n=o||e.nextSibling()}e.parentNode()}}return l&&bn.pop(),[y(i,s,_)]}(e.currentNode)}const Pn=new WeakMap,Cn=t=>(Pn.has(t)||Pn.set(t,((t,e)=>{const n=(e=[].concat(e))[e.length-1].nextSibling;function r(e,r){t.insertBefore(e,r||n)}return t.__k={nodeType:1,parentNode:t,firstChild:e[0],childNodes:e,insertBefore:r,appendChild:r,removeChild(e){t.removeChild(e)}}})(t.parentElement,t)),Pn.get(t));function $n(){return new Promise((t=>{setTimeout(t,0)}))}const Mn=new WeakMap,On=t=>{if("I acknowledge that using private APIs means my theme or plugin will inevitably break in the next version of WordPress."===t)return{directivePrefix:yn,getRegionRootFragment:Cn,initialVdom:Mn,toVdom:En,directive:Ie,getNamespace:De,h:y,cloneElement:V,render:F,deepSignal:Zt,parseInitialData:xe,populateInitialData:Se,batch:bt};throw new Error("Forbidden access.")};document.addEventListener("DOMContentLoaded",(async()=>{dn(),await(async()=>{const t=document.querySelectorAll(`[data-${yn}-interactive]`);for(const e of t)if(!Sn.has(e)){await $n();const t=Cn(e),n=En(e);Mn.set(e,n),await $n(),R(n,t)}})()}));var Nn=e.zj,jn=e.SD,Hn=e.V6,Tn=e.jb,Wn=e.M_,Un=e.hb,An=e.vJ,Dn=e.ip,Ln=e.Nf,Fn=e.Kr,Rn=e.li,Vn=e.J0,In=e.FH,zn=e.v4;export{Nn as getConfig,jn as getContext,Hn as getElement,Tn as privateApis,Wn as store,Un as useCallback,An as useEffect,Dn as useInit,Ln as useLayoutEffect,Fn as useMemo,Rn as useRef,Vn as useState,In as useWatch,zn as withScope};/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __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 */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on 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__ = {}; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { __unstableCreatePersistenceLayer: () => (/* binding */ __unstableCreatePersistenceLayer), create: () => (/* reexport */ create) }); ;// CONCATENATED MODULE: external ["wp","apiFetch"] const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"]; var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject); ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/create/debounce-async.js /** * Performs a leading edge debounce of async functions. * * If three functions are throttled at the same time: * - The first happens immediately. * - The second is never called. * - The third happens `delayMS` milliseconds after the first has resolved. * * This is distinct from `{ debounce } from @wordpress/compose` in that it * waits for promise resolution. * * @param {Function} func A function that returns a promise. * @param {number} delayMS A delay in milliseconds. * * @return {Function} A function that debounce whatever function is passed * to it. */ function debounceAsync(func, delayMS) { let timeoutId; let activePromise; return async function debounced(...args) { // This is a leading edge debounce. If there's no promise or timeout // in progress, call the debounced function immediately. if (!activePromise && !timeoutId) { return new Promise((resolve, reject) => { // Keep a reference to the promise. activePromise = func(...args).then((...thenArgs) => { resolve(...thenArgs); }).catch(error => { reject(error); }).finally(() => { // As soon this promise is complete, clear the way for the // next one to happen immediately. activePromise = null; }); }); } if (activePromise) { // Let any active promises finish before queuing the next request. await activePromise; } // Clear any active timeouts, abandoning any requests that have // been queued but not been made. if (timeoutId) { clearTimeout(timeoutId); timeoutId = null; } // Trigger any trailing edge calls to the function. return new Promise((resolve, reject) => { // Schedule the next request but with a delay. timeoutId = setTimeout(() => { activePromise = func(...args).then((...thenArgs) => { resolve(...thenArgs); }).catch(error => { reject(error); }).finally(() => { // As soon this promise is complete, clear the way for the // next one to happen immediately. activePromise = null; timeoutId = null; }); }, delayMS); }); }; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/create/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const EMPTY_OBJECT = {}; const localStorage = window.localStorage; /** * Creates a persistence layer that stores data in WordPress user meta via the * REST API. * * @param {Object} options * @param {?Object} options.preloadedData Any persisted preferences data that should be preloaded. * When set, the persistence layer will avoid fetching data * from the REST API. * @param {?string} options.localStorageRestoreKey The key to use for restoring the localStorage backup, used * when the persistence layer calls `localStorage.getItem` or * `localStorage.setItem`. * @param {?number} options.requestDebou pendants from previous invocation. */ /** * Arbitrary value used as key for referencing cache object in WeakMap tree. * * @type {{}} */ var LEAF_KEY = {}; /** * Returns the first argument as the sole entry in an array. * * @template T * * @param {T} value Value to return. * * @return {[T]} Value returned as entry in array. */ function arrayOf(value) { return [value]; } /** * Returns true if the value passed is object-like, or false otherwise. A value * is object-like if it can support property assignment, e.g. object or array. * * @param {*} value Value to test. * * @return {boolean} Whether value is object-like. */ function isObjectLike(value) { return !!value && 'object' === typeof value; } /** * Creates and returns a new cache object. * * @return {Cache} Cache object. */ function createCache() { /** @type {Cache} */ var cache = { clear: function () { cache.head = null; }, }; return cache; } /** * Returns true if entries within the two arrays are strictly equal by * reference from a starting index. * * @param {*[]} a First array. * @param {*[]} b Second array. * @param {number} fromIndex Index from which to start comparison. * * @return {boolean} Whether arrays are shallowly equal. */ function isShallowEqual(a, b, fromIndex) { var i; if (a.length !== b.length) { return false; } for (i = fromIndex; i < a.length; i++) { if (a[i] !== b[i]) { return false; } } return true; } /** * Returns a memoized selector function. The getDependants function argument is * called before the memoized selector and is expected to return an immutable * reference or array of references on which the selector depends for computing * its own return value. The memoize cache is preserved only as long as those * dependant references remain the same. If getDependants returns a different * reference(s), the cache is cleared and the selector value regenerated. * * @template {(...args: *[]) => *} S * * @param {S} selector Selector function. * @param {GetDependants=} getDependants Dependant getter returning an array of * references used in cache bust consideration. */ /* harmony default export */ function rememo(selector, getDependants) { /** @type {WeakMap<*,*>} */ var rootCache; /** @type {GetDependants} */ var normalizedGetDependants = getDependants ? getDependants : arrayOf; /** * Returns the cache for a given dependants array. When possible, a WeakMap * will be used to create a unique cache for each set of dependants. This * is feasible due to the nature of WeakMap in allowing garbage collection * to occur on entries where the key object is no longer referenced. Since * WeakMap requires the key to be an object, this is only possible when the * dependant is object-like. The root cache is created as a hierarchy where * each top-level key is the first entry in a dependants set, the value a * WeakMap where each key is the next dependant, and so on. This continues * so long as the dependants are object-like. If no dependants are object- * like, then the cache is shared across all invocations. * * @see isObjectLike * * @param {*[]} dependants Selector dependants. * * @return {Cache} Cache object. */ function getCache(dependants) { var caches = rootCache, isUniqueByDependants = true, i, dependant, map, cache; for (i = 0; i < dependants.length; i++) { dependant = dependants[i]; // Can only compose WeakMap from object-like key. if (!isObjectLike(dependant)) { isUniqueByDependants = false; break; } // Does current segment of cache already have a WeakMap? if (caches.has(dependant)) { // Traverse into nested WeakMap. caches = caches.get(dependant); } else { // Create, set, and traverse into a new one. map = new WeakMap(); caches.set(dependant, map); caches = map; } } // We use an arbitrary (but consistent) object as key for the last item // in the WeakMap to serve as our running cache. if (!caches.has(LEAF_KEY)) { cache = createCache(); cache.isUniqueByDependants = isUniqueByDependants; caches.set(LEAF_KEY, cache); } return caches.get(LEAF_KEY); } /** * Resets root memoization cache. */ function clear() { rootCache = new WeakMap(); } /* eslint-disable jsdoc/check-param-names */ /** * The augmented selector call, considering first whether dependants have * changed before passing it to underlying memoize function. * * @param {*} source Source object for derivation. * @param {...*} extraArgs Additional arguments to pass to selector. * * @return {*} Selector result. */ /* eslint-enable jsdoc/check-param-names */ function callSelector(/* source, ...extraArgs */) { var len = arguments.length, cache, node, i, args, dependants; // Create copy of arguments (avoid leaking deoptimization). args = new Array(len); for (i = 0; i < len; i++) { args[i] = arguments[i]; } dependants = normalizedGetDependants.apply(null, args); cache = getCache(dependants); // If not guaranteed uniqueness by dependants (primitive type), shallow // compare against last dependants and, if references have changed, // destroy cache to recalculate result. if (!cache.isUniqueByDependants) { if ( cache.lastDependants && !isShallowEqual(dependants, cache.lastDependants, 0) ) { cache.clear(); } cache.lastDependants = dependants; } node = cache.head; while (node) { // Check whether node arguments match arguments if (!isShallowEqual(node.args, args, 1)) { node = node.next; continue; } // At this point we can assume we've found a match // Surface matched node to head if not already if (node !== cache.head) { // Adjust siblings to point to each other. /** @type {CacheNode} */ (node.prev).next = node.next; if (node.next) { node.next.prev = node.prev; } node.next = cache.head; node.prev = null; /** @type {CacheNode} */ (cache.head).prev = node; cache.head = node; } // Return immediately return node.val; } // No cached value found. Continue to insertion phase: node = /** @type {CacheNode} */ ({ // Generate the result from original function val: selector.apply(null, args), }); // Avoid including the source object in the cache. args[0] = null; node.args = args; // Don't need to check whether node is already head, since it would // have been returned above already if it was // Shift existing head down list if (cache.head) { cache.head.prev = node; node.next = cache.head; } cache.head = node; return node.val; } callSelector.getDependants = normalizedGetDependants; callSelector.clear = clear; clear(); return /** @type {S & EnhancedSelector} */ (callSelector); } ;// CONCATENATED MODULE: external ["wp","keycodes"] const external_wp_keycodes_namespaceObject = window["wp"]["keycodes"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/store/selectors.js /** * External dependencies */ /** * WordPress dependencies */ /** @typedef {import('./actions').WPShortcutKeyCombination} WPShortcutKeyCombination */ /** @typedef {import('@wordpress/keycodes').WPKeycodeHandlerByModifier} WPKeycodeHandlerByModifier */ /** * Shared reference to an empty array for cases where it is important to avoid * returning a new array reference on every invocation. * * @type {Array} */ const EMPTY_ARRAY = []; /** * Shortcut formatting methods. * * @property {WPKeycodeHandlerByModifier} display Display formatting. * @property {WPKeycodeHandlerByModifier} rawShortcut Raw shortcut formatting. * @property {WPKeycodeHandlerByModifier} ariaLabel ARIA label formatting. */ const FORMATTING_METHODS = { display: external_wp_keycodes_namespaceObject.displayShortcut, raw: external_wp_keycodes_namespaceObject.rawShortcut, ariaLabel: external_wp_keycodes_namespaceObject.shortcutAriaLabel }; /** * Returns a string representing the key combination. * * @param {?WPShortcutKeyCombination} shortcut Key combination. * @param {keyof FORMATTING_METHODS} representation Type of representation * (display, raw, ariaLabel). * * @return {string?} Shortcut representation. */ function getKeyCombinationRepresentation(shortcut, representation) { if (!shortcut) { return null; } return shortcut.modifier ? FORMATTING_METHODS[representation][shortcut.modifier](shortcut.character) : shortcut.character; } /** * Returns the main key combination for a given shortcut name. * * @param {Object} state Global state. * @param {string} name Shortcut name. * * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * import { createInterpolateElement } from '@wordpress/element'; * import { sprintf } from '@wordpress/i18n'; * const ExampleComponent = () => { * const {character, modifier} = useSelect( * ( select ) => * select( keyboardShortcutsStore ).getShortcutKeyCombination( * 'core/edit-post/next-region' * ), * [] * ); * * return ( *
* { createInterpolateElement( * sprintf( * 'Character: %s / Modifier: %s', * character, * modifier * ), * { * code: , * } * ) } *
* ); * }; *``` * * @return {WPShortcutKeyCombination?} Key combination. */ function getShortcutKeyCombination(state, name) { return state[name] ? state[name].keyCombination : null; } /** * Returns a string representing the main key combination for a given shortcut name. * * @param {Object} state Global state. * @param {string} name Shortcut name. * @param {keyof FORMATTING_METHODS} representation Type of representation * (display, raw, ariaLabel). * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * import { sprintf } from '@wordpress/i18n'; * * const ExampleComponent = () => { * const {display, raw, ariaLabel} = useSelect( * ( select ) =>{ * return { * display: select( keyboardShortcutsStore ).getShortcutRepresentation('core/edit-post/next-region' ), * raw: select( keyboardShortcutsStore ).getShortcutRepresentation('core/edit-post/next-region','raw' ), * ariaLabel: select( keyboardShortcutsStore ).getShortcutRepresentation('core/edit-post/next-region', 'ariaLabel') * } * }, * [] * ); * * return ( *
    *
  • { sprintf( 'display string: %s', display ) }
  • *
  • { sprintf( 'raw string: %s', raw ) }
  • *
  • { sprintf( 'ariaLabel string: %s', ariaLabel ) }
  • *
* ); * }; *``` * * @return {string?} Shortcut representation. */ function getShortcutRepresentation(state, name, representation = 'display') { const shortcut = getShortcutKeyCombination(state, name); return getKeyCombinationRepresentation(shortcut, representation); } /** * Returns the shortcut description given its name. * * @param {Object} state Global state. * @param {string} name Shortcut name. * * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * import { __ } from '@wordpress/i18n'; * const ExampleComponent = () => { * const shortcutDescription = useSelect( * ( select ) => * select( keyboardShortcutsStore ).getShortcutDescription( 'core/edit-post/next-region' ), * [] * ); * * return shortcutDescription ? ( *
{ shortcutDescription }
* ) : ( *
{ __( 'No description.' ) }
* ); * }; *``` * @return {string?} Shortcut description. */ function getShortcutDescription(state, name) { return state[name] ? state[name].description : null; } /** * Returns the aliases for a given shortcut name. * * @param {Object} state Global state. * @param {string} name Shortcut name. * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * import { createInterpolateElement } from '@wordpress/element'; * import { sprintf } from '@wordpress/i18n'; * const ExampleComponent = () => { * const shortcutAliases = useSelect( * ( select ) => * select( keyboardShortcutsStore ).getShortcutAliases( * 'core/edit-post/next-region' * ), * [] * ); * * return ( * shortcutAliases.length > 0 && ( *
    * { shortcutAliases.map( ( { character, modifier }, index ) => ( *
  • * { createInterpolateElement( * sprintf( * 'Character: %s / Modifier: %s', * character, * modifier * ), * { * code: , * } * ) } *
  • * ) ) } *
* ) * ); * }; *``` * * @return {WPShortcutKeyCombination[]} Key combinations. */ function getShortcutAliases(state, name) { return state[name] && state[name].aliases ? state[name].aliases : EMPTY_ARRAY; } /** * Returns the shortcuts that include aliases for a given shortcut name. * * @param {Object} state Global state. * @param {string} name Shortcut name. * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * import { createInterpolateElement } from '@wordpress/element'; * import { sprintf } from '@wordpress/i18n'; * * const ExampleComponent = () => { * const allShortcutKeyCombinations = useSelect( * ( select ) => * select( keyboardShortcutsStore ).getAllShortcutKeyCombinations( * 'core/edit-post/next-region' * ), * [] * ); * * return ( * allShortcutKeyCombinations.length > 0 && ( *
    * { allShortcutKeyCombinations.map( * ( { character, modifier }, index ) => ( *
  • * { createInterpolateElement( * sprintf( * 'Character: %s / Modifier: %s', * character, * modifier * ), * { * code: , * } * ) } *
  • * ) * ) } *
* ) * ); * }; *``` * * @return {WPShortcutKeyCombination[]} Key combinations. */ const getAllShortcutKeyCombinations = rememo((state, name) => { return [getShortcutKeyCombination(state, name), ...getShortcutAliases(state, name)].filter(Boolean); }, (state, name) => [state[name]]); /** * Returns the raw representation of all the keyboard combinations of a given shortcut name. * * @param {Object} state Global state. * @param {string} name Shortcut name. * * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * import { createInterpolateElement } from '@wordpress/element'; * import { sprintf } from '@wordpress/i18n'; * * const ExampleComponent = () => { * const allShortcutRawKeyCombinations = useSelect( * ( select ) => * select( keyboardShortcutsStore ).getAllShortcutRawKeyCombinations( * 'core/edit-post/next-region' * ), * [] * ); * * return ( * allShortcutRawKeyCombinations.length > 0 && ( *
    * { allShortcutRawKeyCombinations.map( * ( shortcutRawKeyCombination, index ) => ( *
  • * { createInterpolateElement( * sprintf( * ' %s', * shortcutRawKeyCombination * ), * { * code: , * } * ) } *
  • * ) * ) } *
* ) * ); * }; *``` * * @return {string[]} Shortcuts. */ const getAllShortcutRawKeyCombinations = rememo((state, name) => { return getAllShortcutKeyCombinations(state, name).map(combination => getKeyCombinationRepresentation(combination, 'raw')); }, (state, name) => [state[name]]); /** * Returns the shortcut names list for a given category name. * * @param {Object} state Global state. * @param {string} name Category name. * @example * *```js * import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts'; * import { useSelect } from '@wordpress/data'; * * const ExampleComponent = () => { * const categoryShortcuts = useSelect( * ( select ) => * select( keyboardShortcutsStore ).getCategoryShortcuts( * 'block' * ), * [] * ); * * return ( * categoryShortcuts.length > 0 && ( *
    * { categoryShortcuts.map( ( categoryShortcut ) => ( *
  • { categoryShortcut }
  • * ) ) } *
* ) * ); * }; *``` * @return {string[]} Shortcut names. */ const getCategoryShortcuts = rememo((state, categoryName) => { return Object.entries(state).filter(([, shortcut]) => shortcut.category === categoryName).map(([name]) => name); }, state => [state]); ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/store/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const STORE_NAME = 'core/keyboard-shortcuts'; /** * Store definition for the keyboard shortcuts namespace. * * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore * * @type {Object} */ const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, { reducer: store_reducer, actions: actions_namespaceObject, selectors: selectors_namespaceObject }); (0,external_wp_data_namespaceObject.register)(store); ;// CONCATENATED MODULE: external ["wp","element"] const external_wp_element_namespaceObject = window["wp"]["element"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/hooks/use-shortcut-event-match.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Returns a function to check if a keyboard event matches a shortcut name. * * @return {Function} A function to check if a keyboard event matches a * predefined shortcut combination. */ function useShortcutEventMatch() { const { getAllShortcutKeyCombinations } = (0,external_wp_data_namespaceObject.useSelect)(store); /** * A function to check if a keyboard event matches a predefined shortcut * combination. * * @param {string} name Shortcut name. * @param {KeyboardEvent} event Event to check. * * @return {boolean} True if the event matches any shortcuts, false if not. */ function isMatch(name, event) { return getAllShortcutKeyCombinations(name).some(({ modifier, character }) => { return external_wp_keycodes_namespaceObject.isKeyboardEvent[modifier](event, character); }); } return isMatch; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/context.js /** * WordPress dependencies */ const globalShortcuts = new Set(); const globalListener = event => { for (const keyboardShortcut of globalShortcuts) { keyboardShortcut(event); } }; const context = (0,external_wp_element_namespaceObject.createContext)({ add: shortcut => { if (globalShortcuts.size === 0) { document.addEventListener('keydown', globalListener); } globalShortcuts.add(shortcut); }, delete: shortcut => { globalShortcuts.delete(shortcut); if (globalShortcuts.size === 0) { document.removeEventListener('keydown', globalListener); } } }); ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/hooks/use-shortcut.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Attach a keyboard shortcut handler. * * @param {string} name Shortcut name. * @param {Function} callback Shortcut callback. * @param {Object} options Shortcut options. * @param {boolean} options.isDisabled Whether to disable to shortut. */ function useShortcut(name, callback, { isDisabled = false } = {}) { const shortcuts = (0,external_wp_element_namespaceObject.useContext)(context); const isMatch = useShortcutEventMatch(); const callbackRef = (0,external_wp_element_namespaceObject.useRef)(); (0,external_wp_element_namespaceObject.useEffect)(() => { callbackRef.current = callback; }, [callback]); (0,external_wp_element_namespaceObject.useEffect)(() => { if (isDisabled) { return; } function _callback(event) { if (isMatch(name, event)) { callbackRef.current(event); } } shortcuts.add(_callback); return () => { shortcuts.delete(_callback); }; }, [name, isDisabled, shortcuts]); } ;// CONCATENATED MODULE: external "React" const external_React_namespaceObject = window["React"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/components/shortcut-provider.js /** * WordPress dependencies */ /** * Internal dependencies */ const { Provider } = context; /** * Handles callbacks added to context by `useShortcut`. * Adding a provider allows to register contextual shortcuts * that are only active when a certain part of the UI is focused. * * @param {Object} props Props to pass to `div`. * * @return {Element} Component. */ function ShortcutProvider(props) { const [keyboardShortcuts] = (0,external_wp_element_namespaceObject.useState)(() => new Set()); function onKeyDown(event) { if (props.onKeyDown) props.onKeyDown(event); for (const keyboardShortcut of keyboardShortcuts) { keyboardShortcut(event); } } /* eslint-disable jsx-a11y/no-static-element-interactions */ return (0,external_React_namespaceObject.createElement)(Provider, { value: keyboardShortcuts }, (0,external_React_namespaceObject.createElement)("div", { ...props, onKeyDown: onKeyDown })); /* eslint-enable jsx-a11y/no-static-element-interactions */ } ;// CONCATENATED MODULE: ./node_modules/@wordpress/keyboard-shortcuts/build-module/index.js (window.wp = window.wp || {}).keyboardShortcuts = __webpack_exports__; /******/ })() ;/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __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 */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on 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__ = {}; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { store: () => (/* reexport */ store) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/annotations/build-module/store/selectors.js var selectors_namespaceObject = {}; __webpack_require__.r(selectors_namespaceObject); __webpack_require__.d(selectors_namespaceObject, { __experimentalGetAllAnnotationsForBlock: () => (__experimentalGetAllAnnotationsForBlock), __experimentalGetAnnotations: () => (__experimentalGetAnnotations), __experimentalGetAnnotationsForBlock: () => (__experimentalGetAnnotationsForBlock), __experimentalGetAnnotationsForRichText: () => (__experimentalGetAnnotationsForRichText) }); // NAMESPACE OBJECT: ./node_modules/@wordpress/annotations/build-module/store/actions.js var actions_namespaceObject = {}; __webpack_require__.r(actions_namespaceObject); __webpack_require__.d(actions_namespaceObject, { __experimentalAddAnnotation: () => (__experimentalAddAnnotation), __experimentalRemoveAnnotation: () => (__experimentalRemoveAnnotation), __experimentalRemoveAnnotationsBySource: () => (__experimentalRemoveAnnotationsBySource), __experimentalUpdateAnnotationRange: () => (__experimentalUpdateAnnotationRange) }); ;// CONCATENATED MODULE: external ["wp","richText"] const external_wp_richText_namespaceObject = window["wp"]["richText"]; ;// CONCATENATED MODULE: external ["wp","i18n"] const external_wp_i18n_namespaceObject = window["wp"]["i18n"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/store/constants.js /** * The identifier for the data store. * * @type {string} */ const STORE_NAME = 'core/annotations'; ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/format/annotation.js /** * WordPress dependencies */ const