From 25ff804c775a813bafa5e45cd13fe5a754069f41 Mon Sep 17 00:00:00 2001 From: Mario Santos <34552881+SantosGuillamot@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:46:48 +1000 Subject: [PATCH] Only pass usesContext properties to block bindings editor APIs (#65661) Co-authored-by: SantosGuillamot Co-authored-by: gziolo Source: https://github.com/WordPress/gutenberg/commit/87b1251e3bc7cca989a928e0f290654332ea2174 --- build/block-editor/index.js | 9 +++++---- build/block-editor/index.min.asset.php | 2 +- build/block-editor/index.min.js | 2 +- build/block-editor/index.min.js.map | 2 +- gutenberg.php | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/build/block-editor/index.js b/build/block-editor/index.js index e8049de5..5e4576cf 100644 --- a/build/block-editor/index.js +++ b/build/block-editor/index.js @@ -42610,9 +42610,7 @@ const withBlockBindingSupport = (0,external_wp_compose_namespaceObject.createHig // used purposely here to ensure `boundAttributes` is updated whenever // there are attribute updates. // `source.getValues` may also call a selector via `registry.select`. - const updatedContext = { - ...context - }; + const updatedContext = {}; const boundAttributes = (0,external_wp_data_namespaceObject.useSelect)(() => { if (!blockBindings) { return; @@ -42732,7 +42730,10 @@ const withBlockBindingSupport = (0,external_wp_compose_namespaceObject.createHig ...boundAttributes }, setAttributes: _setAttributes, - context: updatedContext + context: { + ...context, + ...updatedContext + } }) }); }, 'withBlockBindingSupport'); diff --git a/build/block-editor/index.min.asset.php b/build/block-editor/index.min.asset.php index 03aa061e..012b5226 100644 --- a/build/block-editor/index.min.asset.php +++ b/build/block-editor/index.min.asset.php @@ -1 +1 @@ - array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '0f5bbe841dd0819b797c'); + array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '78f8dfe309f6e1f4853e'); diff --git a/build/block-editor/index.min.js b/build/block-editor/index.min.js index 720a359e..1562a220 100644 --- a/build/block-editor/index.min.js +++ b/build/block-editor/index.min.js @@ -54,7 +54,7 @@ r.wide=(0,C.sprintf)((0,C.__)("Max %s wide"),n)),r}const vs=(0,$.jsx)(G.SVG,{xml title:(0,C._x)("Resolve","imperative verb"),onClick:()=>s(!0)},n&&{title:(0,C.__)("Convert to HTML"),onClick:d.toHTML},o&&{title:(0,C.__)("Convert to Classic Block"),onClick:d.toClassic}].filter(Boolean)),[n,o,d]);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Zf,{actions:[(0,$.jsx)(es.Button,{__next40pxDefaultSize:!0,onClick:d.toRecoveredBlock,variant:"primary",children:(0,C.__)("Attempt recovery")},"recover")],secondaryActions:p,children:(0,C.__)("Block contains unexpected or invalid content.")}),i&&(0,$.jsx)(es.Modal,{title: // translators: Dialog title to fix block content // translators: Dialog title to fix block content -(0,C.__)("Resolve Block"),onRequestClose:u,className:"block-editor-block-compare",children:(0,$.jsx)(eb,{block:t,onKeep:d.toHTML,onConvert:d.toBlocks,convertor:tb,convertButtonText:(0,C.__)("Convert to Blocks")})})]})}const ob=(0,$.jsx)(Zf,{className:"block-editor-block-list__block-crash-warning",children:(0,C.__)("This block has encountered an error and cannot be previewed.")}),rb=()=>ob;class ib extends a.Component{constructor(){super(...arguments),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?this.props.fallback:this.props.children}}const sb=ib;var lb=n(773);const ab=function({clientId:e}){const[t,n]=(0,a.useState)(""),o=(0,c.useSelect)((t=>t(ri).getBlock(e)),[e]),{updateBlock:r}=(0,c.useDispatch)(ri);return(0,a.useEffect)((()=>{n((0,l.getBlockContent)(o))}),[o]),(0,$.jsx)(lb.Z,{className:"block-editor-block-list__block-html-textarea",value:t,onBlur:()=>{const i=(0,l.getBlockType)(o.name);if(!i)return;const s=(0,l.getBlockAttributes)(i,t,o.attributes),a=t||(0,l.getSaveContent)(i,s),[c]=t?(0,l.validateBlock)({...o,attributes:s,originalContent:a}):[!0];r(e,{attributes:s,originalContent:a,isValid:c}),t||n(a)},onChange:e=>n(e.target.value)})};let cb=Cb();const ub=e=>xb(e,cb);let db=Cb();ub.write=e=>xb(e,db);let pb=Cb();ub.onStart=e=>xb(e,pb);let hb=Cb();ub.onFrame=e=>xb(e,hb);let gb=Cb();ub.onFinish=e=>xb(e,gb);let mb=[];ub.setTimeout=(e,t)=>{let n=ub.now()+t,o=()=>{let e=mb.findIndex((e=>e.cancel==o));~e&&mb.splice(e,1),vb-=~e?1:0},r={time:n,handler:e,cancel:o};return mb.splice(fb(n),0,r),vb+=1,yb(),r};let fb=e=>~(~mb.findIndex((t=>t.time>e))||~mb.length);ub.cancel=e=>{pb.delete(e),hb.delete(e),gb.delete(e),cb.delete(e),db.delete(e)},ub.sync=e=>{_b=!0,ub.batchedUpdates(e),_b=!1},ub.throttle=e=>{let t;function n(){try{e(...t)}finally{t=null}}function o(...e){t=e,ub.onStart(n)}return o.handler=e,o.cancel=()=>{pb.delete(n),t=null},o};let bb="undefined"!=typeof window?window.requestAnimationFrame:()=>{};ub.use=e=>bb=e,ub.now="undefined"!=typeof performance?()=>performance.now():Date.now,ub.batchedUpdates=e=>e(),ub.catch=console.error,ub.frameLoop="always",ub.advance=()=>{"demand"!==ub.frameLoop?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):wb()};let kb=-1,vb=0,_b=!1;function xb(e,t){_b?(t.delete(e),e(0)):(t.add(e),yb())}function yb(){kb<0&&(kb=0,"demand"!==ub.frameLoop&&bb(Sb))}function Sb(){~kb&&(bb(Sb),ub.batchedUpdates(wb))}function wb(){let e=kb;kb=ub.now();let t=fb(kb);t&&(Bb(mb.splice(0,t),(e=>e.handler())),vb-=t),vb?(pb.flush(),cb.flush(e?Math.min(64,kb-e):16.667),hb.flush(),db.flush(),gb.flush()):kb=-1}function Cb(){let e=new Set,t=e;return{add(n){vb+=t!=e||e.has(n)?0:1,e.add(n)},delete:n=>(vb-=t==e&&e.has(n)?1:0,e.delete(n)),flush(n){t.size&&(e=new Set,vb-=t.size,Bb(t,(t=>t(n)&&e.add(t))),vb+=e.size,t=e)}}}function Bb(e,t){e.forEach((e=>{try{t(e)}catch(e){ub.catch(e)}}))}function Ib(){}const jb={arr:Array.isArray,obj:e=>!!e&&"Object"===e.constructor.name,fun:e=>"function"==typeof e,str:e=>"string"==typeof e,num:e=>"number"==typeof e,und:e=>void 0===e};function Eb(e,t){if(jb.arr(e)){if(!jb.arr(t)||e.length!==t.length)return!1;for(let n=0;ne.forEach(t);function Mb(e,t,n){if(jb.arr(e))for(let o=0;ojb.und(e)?[]:jb.arr(e)?e:[e];function Rb(e,t){if(e.size){const n=Array.from(e);e.clear(),Tb(n,t)}}const Nb=(e,...t)=>Rb(e,(e=>e(...t))),Lb=()=>"undefined"==typeof window||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);let Ab,Db,Ob=null,zb=!1,Vb=Ib;var Fb=Object.freeze({__proto__:null,get createStringInterpolator(){return Ab},get to(){return Db},get colors(){return Ob},get skipAnimation(){return zb},get willAdvance(){return Vb},assign:e=>{e.to&&(Db=e.to),e.now&&(ub.now=e.now),void 0!==e.colors&&(Ob=e.colors),null!=e.skipAnimation&&(zb=e.skipAnimation),e.createStringInterpolator&&(Ab=e.createStringInterpolator),e.requestAnimationFrame&&ub.use(e.requestAnimationFrame),e.batchedUpdates&&(ub.batchedUpdates=e.batchedUpdates),e.willAdvance&&(Vb=e.willAdvance),e.frameLoop&&(ub.frameLoop=e.frameLoop)}});const Hb=new Set;let Gb=[],$b=[],Ub=0;const Wb={get idle(){return!Hb.size&&!Gb.length},start(e){Ub>e.priority?(Hb.add(e),ub.onStart(Kb)):(Zb(e),ub(Yb))},advance:Yb,sort(e){if(Ub)ub.onFrame((()=>Wb.sort(e)));else{const t=Gb.indexOf(e);~t&&(Gb.splice(t,1),qb(e))}},clear(){Gb=[],Hb.clear()}};function Kb(){Hb.forEach(Zb),Hb.clear(),ub(Yb)}function Zb(e){Gb.includes(e)||qb(e)}function qb(e){Gb.splice(function(t){const n=t.findIndex((t=>t.priority>e.priority));return n<0?t.length:n}(Gb),0,e)}function Yb(e){const t=$b;for(let n=0;n0}const Xb="[-+]?\\d*\\.?\\d+",Qb=Xb+"%";function Jb(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}const ek=new RegExp("rgb"+Jb(Xb,Xb,Xb)),tk=new RegExp("rgba"+Jb(Xb,Xb,Xb,Xb)),nk=new RegExp("hsl"+Jb(Xb,Qb,Qb)),ok=new RegExp("hsla"+Jb(Xb,Qb,Qb,Xb)),rk=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,ik=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,sk=/^#([0-9a-fA-F]{6})$/,lk=/^#([0-9a-fA-F]{8})$/;function ak(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function ck(e,t,n){const o=n<.5?n*(1+t):n+t-n*t,r=2*n-o,i=ak(r,o,e+1/3),s=ak(r,o,e),l=ak(r,o,e-1/3);return Math.round(255*i)<<24|Math.round(255*s)<<16|Math.round(255*l)<<8}function uk(e){const t=parseInt(e,10);return t<0?0:t>255?255:t}function dk(e){return(parseFloat(e)%360+360)%360/360}function pk(e){const t=parseFloat(e);return t<0?0:t>1?255:Math.round(255*t)}function hk(e){const t=parseFloat(e);return t<0?0:t>100?1:t/100}function gk(e){let t=function(e){let t;return"number"==typeof e?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=sk.exec(e))?parseInt(t[1]+"ff",16)>>>0:Ob&&void 0!==Ob[e]?Ob[e]:(t=ek.exec(e))?(uk(t[1])<<24|uk(t[2])<<16|uk(t[3])<<8|255)>>>0:(t=tk.exec(e))?(uk(t[1])<<24|uk(t[2])<<16|uk(t[3])<<8|pk(t[4]))>>>0:(t=rk.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=lk.exec(e))?parseInt(t[1],16)>>>0:(t=ik.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=nk.exec(e))?(255|ck(dk(t[1]),hk(t[2]),hk(t[3])))>>>0:(t=ok.exec(e))?(ck(dk(t[1]),hk(t[2]),hk(t[3]))|pk(t[4]))>>>0:null}(e);return null===t?e:(t=t||0,`rgba(${(4278190080&t)>>>24}, ${(16711680&t)>>>16}, ${(65280&t)>>>8}, ${(255&t)/255})`)}const mk=(e,t,n)=>{if(jb.fun(e))return e;if(jb.arr(e))return mk({range:e,output:t,extrapolate:n});if(jb.str(e.output[0]))return Ab(e);const o=e,r=o.output,i=o.range||[0,1],s=o.extrapolateLeft||o.extrapolate||"extend",l=o.extrapolateRight||o.extrapolate||"extend",a=o.easing||(e=>e);return e=>{const t=function(e,t){for(var n=1;n=e);++n);return n-1}(e,i);return function(e,t,n,o,r,i,s,l,a){let c=a?a(e):e;if(cn){if("identity"===l)return c;"clamp"===l&&(c=n)}return o===r?o:t===n?e<=t?o:r:(t===-1/0?c=-c:n===1/0?c-=t:c=(c-t)/(n-t),c=i(c),o===-1/0?c=-c:r===1/0?c+=o:c=c*(r-o)+o,c)}(e,i[t],i[t+1],r[t],r[t+1],a,s,l,o.map)}};function fk(){return fk=Object.assign?Object.assign.bind():function(e){for(var t=1;tBoolean(e&&e[bk]),_k=e=>e&&e[bk]?e[bk]():e,xk=e=>e[kk]||null;function yk(e,t){let n=e[kk];n&&n.forEach((e=>{!function(e,t){e.eventObserved?e.eventObserved(t):e(t)}(e,t)}))}class Sk{constructor(e){if(this[bk]=void 0,this[kk]=void 0,!e&&!(e=this.get))throw Error("Unknown getter");wk(this,e)}}const wk=(e,t)=>Ik(e,bk,t);function Ck(e,t){if(e[bk]){let n=e[kk];n||Ik(e,kk,n=new Set),n.has(t)||(n.add(t),e.observerAdded&&e.observerAdded(n.size,t))}return t}function Bk(e,t){let n=e[kk];if(n&&n.has(t)){const o=n.size-1;o?n.delete(t):e[kk]=null,e.observerRemoved&&e.observerRemoved(o,t)}}const Ik=(e,t,n)=>Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0}),jk=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,Ek=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,Tk=new RegExp(`(${jk.source})(%|[a-z]+)`,"i"),Mk=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,Pk=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Rk=e=>{const[t,n]=Nk(e);if(!t||Lb())return e;const o=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(o)return o.trim();if(n&&n.startsWith("--")){return window.getComputedStyle(document.documentElement).getPropertyValue(n)||e}return n&&Pk.test(n)?Rk(n):n||e},Nk=e=>{const t=Pk.exec(e);if(!t)return[,];const[,n,o]=t;return[n,o]};let Lk;const Ak=(e,t,n,o,r)=>`rgba(${Math.round(t)}, ${Math.round(n)}, ${Math.round(o)}, ${r})`,Dk=e=>{Lk||(Lk=Ob?new RegExp(`(${Object.keys(Ob).join("|")})(?!\\w)`,"g"):/^\b$/);const t=e.output.map((e=>_k(e).replace(Pk,Rk).replace(Ek,gk).replace(Lk,gk))),n=t.map((e=>e.match(jk).map(Number))),o=n[0].map(((e,t)=>n.map((e=>{if(!(t in e))throw Error('The arity of each "output" value must be equal');return e[t]})))),r=o.map((t=>mk(fk({},e,{output:t}))));return e=>{var n;const o=!Tk.test(t[0])&&(null==(n=t.find((e=>Tk.test(e))))?void 0:n.replace(jk,""));let i=0;return t[0].replace(jk,(()=>`${r[i++](e)}${o||""}`)).replace(Mk,Ak)}},Ok="react-spring: ",zk=e=>{const t=e;let n=!1;if("function"!=typeof t)throw new TypeError(`${Ok}once requires a function parameter`);return(...e)=>{n||(t(...e),n=!0)}},Vk=zk(console.warn);function Fk(e){return jb.str(e)&&("#"==e[0]||/\d/.test(e)||!Lb()&&Pk.test(e)||e in(Ob||{}))}zk(console.warn);const Hk=Lb()?Ea.useEffect:Ea.useLayoutEffect;const Gk=[],$k=Symbol.for("Animated:node"),Uk=e=>e&&e[$k],Wk=(e,t)=>{return n=e,o=$k,r=t,Object.defineProperty(n,o,{value:r,writable:!0,configurable:!0});var n,o,r},Kk=e=>e&&e[$k]&&e[$k].getPayload();class Zk{constructor(){this.payload=void 0,Wk(this,this)}getPayload(){return this.payload||[]}}class qk extends Zk{constructor(e){super(),this.done=!0,this.elapsedTime=void 0,this.lastPosition=void 0,this.lastVelocity=void 0,this.v0=void 0,this.durationProgress=0,this._value=e,jb.num(this._value)&&(this.lastPosition=this._value)}static create(e){return new qk(e)}getPayload(){return[this]}getValue(){return this._value}setValue(e,t){return jb.num(e)&&(this.lastPosition=e,t&&(e=Math.round(e/t)*t,this.done&&(this.lastPosition=e))),this._value!==e&&(this._value=e,!0)}reset(){const{done:e}=this;this.done=!1,jb.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,e&&(this.lastVelocity=null),this.v0=null)}}class Yk extends qk{constructor(e){super(0),this._string=null,this._toString=void 0,this._toString=mk({output:[e,e]})}static create(e){return new Yk(e)}getValue(){let e=this._string;return null==e?this._string=this._toString(this._value):e}setValue(e){if(jb.str(e)){if(e==this._string)return!1;this._string=e,this._value=1}else{if(!super.setValue(e))return!1;this._string=null}return!0}reset(e){e&&(this._toString=mk({output:[this.getValue(),e]})),this._value=0,super.reset()}}const Xk={dependencies:null};class Qk extends Zk{constructor(e){super(),this.source=e,this.setValue(e)}getValue(e){const t={};return Mb(this.source,((n,o)=>{var r;(r=n)&&r[$k]===r?t[o]=n.getValue(e):vk(n)?t[o]=_k(n):e||(t[o]=n)})),t}setValue(e){this.source=e,this.payload=this._makePayload(e)}reset(){this.payload&&Tb(this.payload,(e=>e.reset()))}_makePayload(e){if(e){const t=new Set;return Mb(e,this._addToPayload,t),Array.from(t)}}_addToPayload(e){Xk.dependencies&&vk(e)&&Xk.dependencies.add(e);const t=Kk(e);t&&Tb(t,(e=>this.add(e)))}}class Jk extends Qk{constructor(e){super(e)}static create(e){return new Jk(e)}getValue(){return this.source.map((e=>e.getValue()))}setValue(e){const t=this.getPayload();return e.length==t.length?t.map(((t,n)=>t.setValue(e[n]))).some(Boolean):(super.setValue(e.map(ev)),!0)}}function ev(e){return(Fk(e)?Yk:qk).create(e)}function tv(e){const t=Uk(e);return t?t.constructor:jb.arr(e)?Jk:Fk(e)?Yk:qk}function nv(){return nv=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const n=!jb.fun(e)||e.prototype&&e.prototype.isReactComponent;return(0,Ea.forwardRef)(((o,r)=>{const i=(0,Ea.useRef)(null),s=n&&(0,Ea.useCallback)((e=>{i.current=function(e,t){return e&&(jb.fun(e)?e(t):e.current=t),t}(r,e)}),[r]),[l,a]=function(e,t){const n=new Set;return Xk.dependencies=n,e.style&&(e=nv({},e,{style:t.createAnimatedStyle(e.style)})),e=new Qk(e),Xk.dependencies=null,[e,n]}(o,t),c=function(){const e=(0,Ea.useState)()[1],t=(()=>{const e=(0,Ea.useRef)(!1);return Hk((()=>(e.current=!0,()=>{e.current=!1})),[]),e})();return()=>{t.current&&e(Math.random())}}(),u=()=>{const e=i.current;n&&!e||!1===(!!e&&t.applyAnimatedValues(e,l.getValue(!0)))&&c()},d=new rv(u,a),p=(0,Ea.useRef)();var h;Hk((()=>(p.current=d,Tb(a,(e=>Ck(e,d))),()=>{p.current&&(Tb(p.current.deps,(e=>Bk(e,p.current))),ub.cancel(p.current.update))}))),(0,Ea.useEffect)(u,[]),h=()=>()=>{const e=p.current;Tb(e.deps,(t=>Bk(t,e)))},(0,Ea.useEffect)(h,Gk);const g=t.getComponentProps(l.getValue());return Ea.createElement(e,nv({},g,{ref:s}))}))};class rv{constructor(e,t){this.update=e,this.deps=t}eventObserved(e){"change"==e.type&&ub.write(this.update)}}const iv=Symbol.for("AnimatedComponent"),sv=e=>jb.str(e)?e:e&&jb.str(e.displayName)?e.displayName:jb.fun(e)&&e.name||null;function lv(){return lv=Object.assign?Object.assign.bind():function(e){for(var t=1;t!0===e||!!(t&&e&&(jb.fun(e)?e(t):Pb(e).includes(t))),uv=(e,t)=>jb.obj(e)?t&&e[t]:e,dv=(e,t)=>!0===e.default?e[t]:e.default?e.default[t]:void 0,pv=e=>e,hv=(e,t=pv)=>{let n=gv;e.default&&!0!==e.default&&(e=e.default,n=Object.keys(e));const o={};for(const r of n){const n=t(e[r],r);jb.und(n)||(o[r]=n)}return o},gv=["config","onProps","onStart","onChange","onPause","onResume","onRest"],mv={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function fv(e){const t=function(e){const t={};let n=0;if(Mb(e,((e,o)=>{mv[o]||(t[o]=e,n++)})),n)return t}(e);if(t){const n={to:t};return Mb(e,((e,o)=>o in t||(n[o]=e))),n}return lv({},e)}function bv(e){return e=_k(e),jb.arr(e)?e.map(bv):Fk(e)?Fb.createStringInterpolator({range:[0,1],output:[e,e]})(1):e}function kv(e){return jb.fun(e)||jb.arr(e)&&jb.obj(e[0])}const vv=1.70158,_v=1.525*vv,xv=vv+1,yv=2*Math.PI/3,Sv=2*Math.PI/4.5,wv=e=>{const t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},Cv={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>1-(1-e)*(1-e),easeInOutQuad:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,easeInCubic:e=>e*e*e,easeOutCubic:e=>1-Math.pow(1-e,3),easeInOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1-Math.pow(1-e,4),easeInOutQuart:e=>e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1-Math.pow(1-e,5),easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2,easeInSine:e=>1-Math.cos(e*Math.PI/2),easeOutSine:e=>Math.sin(e*Math.PI/2),easeInOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,easeInExpo:e=>0===e?0:Math.pow(2,10*e-10),easeOutExpo:e=>1===e?1:1-Math.pow(2,-10*e),easeInOutExpo:e=>0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2,easeInCirc:e=>1-Math.sqrt(1-Math.pow(e,2)),easeOutCirc:e=>Math.sqrt(1-Math.pow(e-1,2)),easeInOutCirc:e=>e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2,easeInBack:e=>xv*e*e*e-vv*e*e,easeOutBack:e=>1+xv*Math.pow(e-1,3)+vv*Math.pow(e-1,2),easeInOutBack:e=>e<.5?Math.pow(2*e,2)*(7.189819*e-_v)/2:(Math.pow(2*e-2,2)*((_v+1)*(2*e-2)+_v)+2)/2,easeInElastic:e=>0===e?0:1===e?1:-Math.pow(2,10*e-10)*Math.sin((10*e-10.75)*yv),easeOutElastic:e=>0===e?0:1===e?1:Math.pow(2,-10*e)*Math.sin((10*e-.75)*yv)+1,easeInOutElastic:e=>0===e?0:1===e?1:e<.5?-Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*Sv)/2:Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*Sv)/2+1,easeInBounce:e=>1-wv(1-e),easeOutBounce:wv,easeInOutBounce:e=>e<.5?(1-wv(1-2*e))/2:(1+wv(2*e-1))/2},Bv=lv({},{tension:170,friction:26},{mass:1,damping:1,easing:Cv.linear,clamp:!1});class Iv{constructor(){this.tension=void 0,this.friction=void 0,this.frequency=void 0,this.damping=void 0,this.mass=void 0,this.velocity=0,this.restVelocity=void 0,this.precision=void 0,this.progress=void 0,this.duration=void 0,this.easing=void 0,this.clamp=void 0,this.bounce=void 0,this.decay=void 0,this.round=void 0,Object.assign(this,Bv)}}function jv(e,t){if(jb.und(t.decay)){const n=!jb.und(t.tension)||!jb.und(t.friction);!n&&jb.und(t.frequency)&&jb.und(t.damping)&&jb.und(t.mass)||(e.duration=void 0,e.decay=void 0),n&&(e.frequency=void 0)}else e.duration=void 0}const Ev=[];class Tv{constructor(){this.changed=!1,this.values=Ev,this.toValues=null,this.fromValues=Ev,this.to=void 0,this.from=void 0,this.config=new Iv,this.immediate=!1}}function Mv(e,{key:t,props:n,defaultProps:o,state:r,actions:i}){return new Promise(((s,l)=>{var a;let c,u,d=cv(null!=(a=n.cancel)?a:null==o?void 0:o.cancel,t);if(d)g();else{jb.und(n.pause)||(r.paused=cv(n.pause,t));let e=null==o?void 0:o.pause;!0!==e&&(e=r.paused||cv(e,t)),c=av(n.delay||0,t),e?(r.resumeQueue.add(h),i.pause()):(i.resume(),h())}function p(){r.resumeQueue.add(h),r.timeouts.delete(u),u.cancel(),c=u.time-ub.now()}function h(){c>0&&!Fb.skipAnimation?(r.delayed=!0,u=ub.setTimeout(g,c),r.pauseQueue.add(p),r.timeouts.add(u)):g()}function g(){r.delayed&&(r.delayed=!1),r.pauseQueue.delete(p),r.timeouts.delete(u),e<=(r.cancelId||0)&&(d=!0);try{i.start(lv({},n,{callId:e,cancel:d}),s)}catch(e){l(e)}}}))}const Pv=(e,t)=>1==t.length?t[0]:t.some((e=>e.cancelled))?Lv(e.get()):t.every((e=>e.noop))?Rv(e.get()):Nv(e.get(),t.every((e=>e.finished))),Rv=e=>({value:e,noop:!0,finished:!0,cancelled:!1}),Nv=(e,t,n=!1)=>({value:e,finished:t,cancelled:n}),Lv=e=>({value:e,cancelled:!0,finished:!1});function Av(e,t,n,o){const{callId:r,parentId:i,onRest:s}=t,{asyncTo:l,promise:a}=n;return i||e!==l||t.reset?n.promise=(async()=>{n.asyncId=r,n.asyncTo=e;const c=hv(t,((e,t)=>"onRest"===t?void 0:e));let u,d;const p=new Promise(((e,t)=>(u=e,d=t))),h=e=>{const t=r<=(n.cancelId||0)&&Lv(o)||r!==n.asyncId&&Nv(o,!1);if(t)throw e.result=t,d(e),e},g=(e,t)=>{const i=new Ov,s=new zv;return(async()=>{if(Fb.skipAnimation)throw Dv(n),s.result=Nv(o,!1),d(s),s;h(i);const l=jb.obj(e)?lv({},e):lv({},t,{to:e});l.parentId=r,Mb(c,((e,t)=>{jb.und(l[t])&&(l[t]=e)}));const a=await o.start(l);return h(i),n.paused&&await new Promise((e=>{n.resumeQueue.add(e)})),a})()};let m;if(Fb.skipAnimation)return Dv(n),Nv(o,!1);try{let t;t=jb.arr(e)?(async e=>{for(const t of e)await g(t)})(e):Promise.resolve(e(g,o.stop.bind(o))),await Promise.all([t.then(u),p]),m=Nv(o.get(),!0,!1)}catch(e){if(e instanceof Ov)m=e.result;else{if(!(e instanceof zv))throw e;m=e.result}}finally{r==n.asyncId&&(n.asyncId=i,n.asyncTo=i?l:void 0,n.promise=i?a:void 0)}return jb.fun(s)&&ub.batchedUpdates((()=>{s(m,o,o.item)})),m})():a}function Dv(e,t){Rb(e.timeouts,(e=>e.cancel())),e.pauseQueue.clear(),e.resumeQueue.clear(),e.asyncId=e.asyncTo=e.promise=void 0,t&&(e.cancelId=t)}class Ov extends Error{constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise."),this.result=void 0}}class zv extends Error{constructor(){super("SkipAnimationSignal"),this.result=void 0}}const Vv=e=>e instanceof Hv;let Fv=1;class Hv extends Sk{constructor(...e){super(...e),this.id=Fv++,this.key=void 0,this._priority=0}get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){const e=Uk(this);return e&&e.getValue()}to(...e){return Fb.to(this,e)}interpolate(...e){return Vk(`${Ok}The "interpolate" function is deprecated in v9 (use "to" instead)`),Fb.to(this,e)}toJSON(){return this.get()}observerAdded(e){1==e&&this._attach()}observerRemoved(e){0==e&&this._detach()}_attach(){}_detach(){}_onChange(e,t=!1){yk(this,{type:"change",parent:this,value:e,idle:t})}_onPriorityChange(e){this.idle||Wb.sort(this),yk(this,{type:"priority",parent:this,priority:e})}}const Gv=Symbol.for("SpringPhase"),$v=e=>(1&e[Gv])>0,Uv=e=>(2&e[Gv])>0,Wv=e=>(4&e[Gv])>0,Kv=(e,t)=>t?e[Gv]|=3:e[Gv]&=-3,Zv=(e,t)=>t?e[Gv]|=4:e[Gv]&=-5;class qv extends Hv{constructor(e,t){if(super(),this.key=void 0,this.animation=new Tv,this.queue=void 0,this.defaultProps={},this._state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._pendingCalls=new Set,this._lastCallId=0,this._lastToId=0,this._memoizedDuration=0,!jb.und(e)||!jb.und(t)){const n=jb.obj(e)?lv({},e):lv({},t,{from:e});jb.und(n.default)&&(n.default=!0),this.start(n)}}get idle(){return!(Uv(this)||this._state.asyncTo)||Wv(this)}get goal(){return _k(this.animation.to)}get velocity(){const e=Uk(this);return e instanceof qk?e.lastVelocity||0:e.getPayload().map((e=>e.lastVelocity||0))}get hasAnimated(){return $v(this)}get isAnimating(){return Uv(this)}get isPaused(){return Wv(this)}get isDelayed(){return this._state.delayed}advance(e){let t=!0,n=!1;const o=this.animation;let{config:r,toValues:i}=o;const s=Kk(o.to);!s&&vk(o.to)&&(i=Pb(_k(o.to))),o.values.forEach(((l,a)=>{if(l.done)return;const c=l.constructor==Yk?1:s?s[a].lastPosition:i[a];let u=o.immediate,d=c;if(!u){if(d=l.lastPosition,r.tension<=0)return void(l.done=!0);let t=l.elapsedTime+=e;const n=o.fromValues[a],i=null!=l.v0?l.v0:l.v0=jb.arr(r.velocity)?r.velocity[a]:r.velocity;let s;const p=r.precision||(n==c?.005:Math.min(1,.001*Math.abs(c-n)));if(jb.und(r.duration))if(r.decay){const e=!0===r.decay?.998:r.decay,o=Math.exp(-(1-e)*t);d=n+i/(1-e)*(1-o),u=Math.abs(l.lastPosition-d)<=p,s=i*o}else{s=null==l.lastVelocity?i:l.lastVelocity;const t=r.restVelocity||p/10,o=r.clamp?0:r.bounce,a=!jb.und(o),h=n==c?l.v0>0:nt,g||(u=Math.abs(c-d)<=p,!u));++e)a&&(m=d==c||d>c==h,m&&(s=-s*o,d=c)),s+=(1e-6*-r.tension*(d-c)+.001*-r.friction*s)/r.mass*f,d+=s*f}else{let o=1;r.duration>0&&(this._memoizedDuration!==r.duration&&(this._memoizedDuration=r.duration,l.durationProgress>0&&(l.elapsedTime=r.duration*l.durationProgress,t=l.elapsedTime+=e)),o=(r.progress||0)+t/this._memoizedDuration,o=o>1?1:o<0?0:o,l.durationProgress=o),d=n+r.easing(o)*(c-n),s=(d-l.lastPosition)/e,u=1==o}l.lastVelocity=s,Number.isNaN(d)&&(console.warn("Got NaN while animating:",this),u=!0)}s&&!s[a].done&&(u=!1),u?l.done=!0:t=!1,l.setValue(d,r.round)&&(n=!0)}));const l=Uk(this),a=l.getValue();if(t){const e=_k(o.to);a===e&&!n||r.decay?n&&r.decay&&this._onChange(a):(l.setValue(e),this._onChange(e)),this._stop()}else n&&this._onChange(a)}set(e){return ub.batchedUpdates((()=>{this._stop(),this._focus(e),this._set(e)})),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(Uv(this)){const{to:e,config:t}=this.animation;ub.batchedUpdates((()=>{this._onStart(),t.decay||this._set(e,!1),this._stop()}))}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,t){let n;return jb.und(e)?(n=this.queue||[],this.queue=[]):n=[jb.obj(e)?e:lv({},t,{to:e})],Promise.all(n.map((e=>this._update(e)))).then((e=>Pv(this,e)))}stop(e){const{to:t}=this.animation;return this._focus(this.get()),Dv(this._state,e&&this._lastCallId),ub.batchedUpdates((()=>this._stop(t,e))),this}reset(){this._update({reset:!0})}eventObserved(e){"change"==e.type?this._start():"priority"==e.type&&(this.priority=e.priority+1)}_prepareNode(e){const t=this.key||"";let{to:n,from:o}=e;n=jb.obj(n)?n[t]:n,(null==n||kv(n))&&(n=void 0),o=jb.obj(o)?o[t]:o,null==o&&(o=void 0);const r={to:n,from:o};return $v(this)||(e.reverse&&([n,o]=[o,n]),o=_k(o),jb.und(o)?Uk(this)||this._set(n):this._set(o)),r}_update(e,t){let n=lv({},e);const{key:o,defaultProps:r}=this;n.default&&Object.assign(r,hv(n,((e,t)=>/^on/.test(t)?uv(e,o):e))),t_(this,n,"onProps"),n_(this,"onProps",n,this);const i=this._prepareNode(n);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");const s=this._state;return Mv(++this._lastCallId,{key:o,props:n,defaultProps:r,state:s,actions:{pause:()=>{Wv(this)||(Zv(this,!0),Nb(s.pauseQueue),n_(this,"onPause",Nv(this,Yv(this,this.animation.to)),this))},resume:()=>{Wv(this)&&(Zv(this,!1),Uv(this)&&this._resume(),Nb(s.resumeQueue),n_(this,"onResume",Nv(this,Yv(this,this.animation.to)),this))},start:this._merge.bind(this,i)}}).then((e=>{if(n.loop&&e.finished&&(!t||!e.noop)){const e=Xv(n);if(e)return this._update(e,!0)}return e}))}_merge(e,t,n){if(t.cancel)return this.stop(!0),n(Lv(this));const o=!jb.und(e.to),r=!jb.und(e.from);if(o||r){if(!(t.callId>this._lastToId))return n(Lv(this));this._lastToId=t.callId}const{key:i,defaultProps:s,animation:l}=this,{to:a,from:c}=l;let{to:u=a,from:d=c}=e;!r||o||t.default&&!jb.und(u)||(u=d),t.reverse&&([u,d]=[d,u]);const p=!Eb(d,c);p&&(l.from=d),d=_k(d);const h=!Eb(u,a);h&&this._focus(u);const g=kv(t.to),{config:m}=l,{decay:f,velocity:b}=m;(o||r)&&(m.velocity=0),t.config&&!g&&function(e,t,n){n&&(jv(n=lv({},n),t),t=lv({},n,t)),jv(e,t),Object.assign(e,t);for(const t in Bv)null==e[t]&&(e[t]=Bv[t]);let{mass:o,frequency:r,damping:i}=e;jb.und(r)||(r<.01&&(r=.01),i<0&&(i=0),e.tension=Math.pow(2*Math.PI/r,2)*o,e.friction=4*Math.PI*i*o/r)}(m,av(t.config,i),t.config!==s.config?av(s.config,i):void 0);let k=Uk(this);if(!k||jb.und(u))return n(Nv(this,!0));const v=jb.und(t.reset)?r&&!t.default:!jb.und(d)&&cv(t.reset,i),_=v?d:this.get(),x=bv(u),y=jb.num(x)||jb.arr(x)||Fk(x),S=!g&&(!y||cv(s.immediate||t.immediate,i));if(h){const e=tv(u);if(e!==k.constructor){if(!S)throw Error(`Cannot animate between ${k.constructor.name} and ${e.name}, as the "to" prop suggests`);k=this._set(x)}}const w=k.constructor;let C=vk(u),B=!1;if(!C){const e=v||!$v(this)&&p;(h||e)&&(B=Eb(bv(_),x),C=!B),(Eb(l.immediate,S)||S)&&Eb(m.decay,f)&&Eb(m.velocity,b)||(C=!0)}if(B&&Uv(this)&&(l.changed&&!v?C=!0:C||this._stop(a)),!g&&((C||vk(a))&&(l.values=k.getPayload(),l.toValues=vk(u)?null:w==Yk?[1]:Pb(x)),l.immediate!=S&&(l.immediate=S,S||v||this._set(a)),C)){const{onRest:e}=l;Tb(e_,(e=>t_(this,t,e)));const o=Nv(this,Yv(this,a));Nb(this._pendingCalls,o),this._pendingCalls.add(n),l.changed&&ub.batchedUpdates((()=>{l.changed=!v,null==e||e(o,this),v?av(s.onRest,o):null==l.onStart||l.onStart(o,this)}))}v&&this._set(_),g?n(Av(t.to,t,this._state,this)):C?this._start():Uv(this)&&!h?this._pendingCalls.add(n):n(Rv(_))}_focus(e){const t=this.animation;e!==t.to&&(xk(this)&&this._detach(),t.to=e,xk(this)&&this._attach())}_attach(){let e=0;const{to:t}=this.animation;vk(t)&&(Ck(t,this),Vv(t)&&(e=t.priority+1)),this.priority=e}_detach(){const{to:e}=this.animation;vk(e)&&Bk(e,this)}_set(e,t=!0){const n=_k(e);if(!jb.und(n)){const e=Uk(this);if(!e||!Eb(n,e.getValue())){const o=tv(n);e&&e.constructor==o?e.setValue(n):Wk(this,o.create(n)),e&&ub.batchedUpdates((()=>{this._onChange(n,t)}))}}return Uk(this)}_onStart(){const e=this.animation;e.changed||(e.changed=!0,n_(this,"onStart",Nv(this,Yv(this,e.to)),this))}_onChange(e,t){t||(this._onStart(),av(this.animation.onChange,e,this)),av(this.defaultProps.onChange,e,this),super._onChange(e,t)}_start(){const e=this.animation;Uk(this).reset(_k(e.to)),e.immediate||(e.fromValues=e.values.map((e=>e.lastPosition))),Uv(this)||(Kv(this,!0),Wv(this)||this._resume())}_resume(){Fb.skipAnimation?this.finish():Wb.start(this)}_stop(e,t){if(Uv(this)){Kv(this,!1);const n=this.animation;Tb(n.values,(e=>{e.done=!0})),n.toValues&&(n.onChange=n.onPause=n.onResume=void 0),yk(this,{type:"idle",parent:this});const o=t?Lv(this.get()):Nv(this.get(),Yv(this,null!=e?e:n.to));Nb(this._pendingCalls,o),n.changed&&(n.changed=!1,n_(this,"onRest",o,this))}}}function Yv(e,t){const n=bv(t);return Eb(bv(e.get()),n)}function Xv(e,t=e.loop,n=e.to){let o=av(t);if(o){const r=!0!==o&&fv(o),i=(r||e).reverse,s=!r||r.reset;return Qv(lv({},e,{loop:t,default:!1,pause:void 0,to:!i||kv(n)?n:void 0,from:s?e.from:void 0,reset:s},r))}}function Qv(e){const{to:t,from:n}=e=fv(e),o=new Set;return jb.obj(t)&&Jv(t,o),jb.obj(n)&&Jv(n,o),e.keys=o.size?Array.from(o):null,e}function Jv(e,t){Mb(e,((e,n)=>null!=e&&t.add(n)))}const e_=["onStart","onRest","onChange","onPause","onResume"];function t_(e,t,n){e.animation[n]=t[n]!==dv(t,n)?uv(t[n],e.key):void 0}function n_(e,t,...n){var o,r,i,s;null==(o=(r=e.animation)[t])||o.call(r,...n),null==(i=(s=e.defaultProps)[t])||i.call(s,...n)}const o_=["onStart","onChange","onRest"];let r_=1;class i_{constructor(e,t){this.id=r_++,this.springs={},this.queue=[],this.ref=void 0,this._flush=void 0,this._initialProps=void 0,this._lastAsyncId=0,this._active=new Set,this._changed=new Set,this._started=!1,this._item=void 0,this._state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._events={onStart:new Map,onChange:new Map,onRest:new Map},this._onFrame=this._onFrame.bind(this),t&&(this._flush=t),e&&this.start(lv({default:!0},e))}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every((e=>e.idle&&!e.isDelayed&&!e.isPaused))}get item(){return this._item}set item(e){this._item=e}get(){const e={};return this.each(((t,n)=>e[n]=t.get())),e}set(e){for(const t in e){const n=e[t];jb.und(n)||this.springs[t].set(n)}}update(e){return e&&this.queue.push(Qv(e)),this}start(e){let{queue:t}=this;return e?t=Pb(e).map(Qv):this.queue=[],this._flush?this._flush(this,t):(l_(this,t),function(e,t){return Promise.all(t.map((t=>s_(e,t)))).then((t=>Pv(e,t)))}(this,t))}stop(e,t){if(e!==!!e&&(t=e),t){const n=this.springs;Tb(Pb(t),(t=>n[t].stop(!!e)))}else Dv(this._state,this._lastAsyncId),this.each((t=>t.stop(!!e)));return this}pause(e){if(jb.und(e))this.start({pause:!0});else{const t=this.springs;Tb(Pb(e),(e=>t[e].pause()))}return this}resume(e){if(jb.und(e))this.start({pause:!1});else{const t=this.springs;Tb(Pb(e),(e=>t[e].resume()))}return this}each(e){Mb(this.springs,e)}_onFrame(){const{onStart:e,onChange:t,onRest:n}=this._events,o=this._active.size>0,r=this._changed.size>0;(o&&!this._started||r&&!this._started)&&(this._started=!0,Rb(e,(([e,t])=>{t.value=this.get(),e(t,this,this._item)})));const i=!o&&this._started,s=r||i&&n.size?this.get():null;r&&t.size&&Rb(t,(([e,t])=>{t.value=s,e(t,this,this._item)})),i&&(this._started=!1,Rb(n,(([e,t])=>{t.value=s,e(t,this,this._item)})))}eventObserved(e){if("change"==e.type)this._changed.add(e.parent),e.idle||this._active.add(e.parent);else{if("idle"!=e.type)return;this._active.delete(e.parent)}ub.onFrame(this._onFrame)}}async function s_(e,t,n){const{keys:o,to:r,from:i,loop:s,onRest:l,onResolve:a}=t,c=jb.obj(t.default)&&t.default;s&&(t.loop=!1),!1===r&&(t.to=null),!1===i&&(t.from=null);const u=jb.arr(r)||jb.fun(r)?r:void 0;u?(t.to=void 0,t.onRest=void 0,c&&(c.onRest=void 0)):Tb(o_,(n=>{const o=t[n];if(jb.fun(o)){const r=e._events[n];t[n]=({finished:e,cancelled:t})=>{const n=r.get(o);n?(e||(n.finished=!1),t&&(n.cancelled=!0)):r.set(o,{value:null,finished:e||!1,cancelled:t||!1})},c&&(c[n]=t[n])}}));const d=e._state;t.pause===!d.paused?(d.paused=t.pause,Nb(t.pause?d.pauseQueue:d.resumeQueue)):d.paused&&(t.pause=!0);const p=(o||Object.keys(e.springs)).map((n=>e.springs[n].start(t))),h=!0===t.cancel||!0===dv(t,"cancel");(u||h&&d.asyncId)&&p.push(Mv(++e._lastAsyncId,{props:t,state:d,actions:{pause:Ib,resume:Ib,start(t,n){h?(Dv(d,e._lastAsyncId),n(Lv(e))):(t.onRest=l,n(Av(u,t,d,e)))}}})),d.paused&&await new Promise((e=>{d.resumeQueue.add(e)}));const g=Pv(e,await Promise.all(p));if(s&&g.finished&&(!n||!g.noop)){const n=Xv(t,s,r);if(n)return l_(e,[n]),s_(e,n,!0)}return a&&ub.batchedUpdates((()=>a(g,e,e.item))),g}function l_(e,t){Tb(t,(t=>{!function(e,t,n){t.keys&&Tb(t.keys,(o=>{(e[o]||(e[o]=n(o)))._prepareNode(t)}))}(e.springs,t,(t=>function(e,t){const n=new qv;return n.key=e,t&&Ck(n,t),n}(t,e)))}))}const a_=["children"],c_=e=>{let{children:t}=e,n=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,a_);const o=(0,Ea.useContext)(u_),r=n.pause||!!o.pause,i=n.immediate||!!o.immediate;n=function(e,t){const[n]=(0,Ea.useState)((()=>({inputs:t,result:e()}))),o=(0,Ea.useRef)(),r=o.current;let i=r;if(i){const n=Boolean(t&&i.inputs&&function(e,t){if(e.length!==t.length)return!1;for(let n=0;n{o.current=i,r==n&&(n.inputs=n.result=void 0)}),[i]),i.result}((()=>({pause:r,immediate:i})),[r,i]);const{Provider:s}=u_;return Ea.createElement(s,{value:n},t)},u_=(d_=c_,p_={},Object.assign(d_,Ea.createContext(p_)),d_.Provider._context=d_,d_.Consumer._context=d_,d_);var d_,p_;let h_;c_.Provider=u_.Provider,c_.Consumer=u_.Consumer,function(e){e.MOUNT="mount",e.ENTER="enter",e.UPDATE="update",e.LEAVE="leave"}(h_||(h_={}));class g_ extends Hv{constructor(e,t){super(),this.key=void 0,this.idle=!0,this.calc=void 0,this._active=new Set,this.source=e,this.calc=mk(...t);const n=this._get(),o=tv(n);Wk(this,o.create(n))}advance(e){const t=this._get();Eb(t,this.get())||(Uk(this).setValue(t),this._onChange(t,this.idle)),!this.idle&&f_(this._active)&&b_(this)}_get(){const e=jb.arr(this.source)?this.source.map(_k):Pb(_k(this.source));return this.calc(...e)}_start(){this.idle&&!f_(this._active)&&(this.idle=!1,Tb(Kk(this),(e=>{e.done=!1})),Fb.skipAnimation?(ub.batchedUpdates((()=>this.advance())),b_(this)):Wb.start(this))}_attach(){let e=1;Tb(Pb(this.source),(t=>{vk(t)&&Ck(t,this),Vv(t)&&(t.idle||this._active.add(t),e=Math.max(e,t.priority+1))})),this.priority=e,this._start()}_detach(){Tb(Pb(this.source),(e=>{vk(e)&&Bk(e,this)})),this._active.clear(),b_(this)}eventObserved(e){"change"==e.type?e.idle?this.advance():(this._active.add(e.parent),this._start()):"idle"==e.type?this._active.delete(e.parent):"priority"==e.type&&(this.priority=Pb(this.source).reduce(((e,t)=>Math.max(e,(Vv(t)?t.priority:0)+1)),0))}}function m_(e){return!1!==e.idle}function f_(e){return!e.size||Array.from(e).every(m_)}function b_(e){e.idle||(e.idle=!0,Tb(Kk(e),(e=>{e.done=!0})),yk(e,{type:"idle",parent:e}))}Fb.assign({createStringInterpolator:Dk,to:(e,t)=>new g_(e,t)}),Wb.advance;const k_=window.ReactDOM;function v_(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}const x_=["style","children","scrollTop","scrollLeft"],y_=/^--/;function S_(e,t){return null==t||"boolean"==typeof t||""===t?"":"number"!=typeof t||0===t||y_.test(e)||C_.hasOwnProperty(e)&&C_[e]?(""+t).trim():t+"px"}const w_={};let C_={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0};const B_=["Webkit","Ms","Moz","O"];C_=Object.keys(C_).reduce(((e,t)=>(B_.forEach((n=>e[((e,t)=>e+t.charAt(0).toUpperCase()+t.substring(1))(n,t)]=e[t])),e)),C_);const I_=["x","y","z"],j_=/^(matrix|translate|scale|rotate|skew)/,E_=/^(translate)/,T_=/^(rotate|skew)/,M_=(e,t)=>jb.num(e)&&0!==e?e+t:e,P_=(e,t)=>jb.arr(e)?e.every((e=>P_(e,t))):jb.num(e)?e===t:parseFloat(e)===t;class R_ extends Qk{constructor(e){let{x:t,y:n,z:o}=e,r=v_(e,I_);const i=[],s=[];(t||n||o)&&(i.push([t||0,n||0,o||0]),s.push((e=>[`translate3d(${e.map((e=>M_(e,"px"))).join(",")})`,P_(e,0)]))),Mb(r,((e,t)=>{if("transform"===t)i.push([e||""]),s.push((e=>[e,""===e]));else if(j_.test(t)){if(delete r[t],jb.und(e))return;const n=E_.test(t)?"px":T_.test(t)?"deg":"";i.push(Pb(e)),s.push("rotate3d"===t?([e,t,o,r])=>[`rotate3d(${e},${t},${o},${M_(r,n)})`,P_(r,0)]:e=>[`${t}(${e.map((e=>M_(e,n))).join(",")})`,P_(e,t.startsWith("scale")?1:0)])}})),i.length&&(r.transform=new N_(i,s)),super(r)}}class N_ extends Sk{constructor(e,t){super(),this._value=null,this.inputs=e,this.transforms=t}get(){return this._value||(this._value=this._get())}_get(){let e="",t=!0;return Tb(this.inputs,((n,o)=>{const r=_k(n[0]),[i,s]=this.transforms[o](jb.arr(r)?r:n.map(_k));e+=" "+i,t=t&&s})),t?"none":e}observerAdded(e){1==e&&Tb(this.inputs,(e=>Tb(e,(e=>vk(e)&&Ck(e,this)))))}observerRemoved(e){0==e&&Tb(this.inputs,(e=>Tb(e,(e=>vk(e)&&Bk(e,this)))))}eventObserved(e){"change"==e.type&&(this._value=null),yk(this,e)}}const L_=["scrollTop","scrollLeft"];Fb.assign({batchedUpdates:k_.unstable_batchedUpdates,createStringInterpolator:Dk,colors:{transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199}});const A_=((e,{applyAnimatedValues:t=()=>!1,createAnimatedStyle:n=e=>new Qk(e),getComponentProps:o=e=>e}={})=>{const r={applyAnimatedValues:t,createAnimatedStyle:n,getComponentProps:o},i=e=>{const t=sv(e)||"Anonymous";return(e=jb.str(e)?i[e]||(i[e]=ov(e,r)):e[iv]||(e[iv]=ov(e,r))).displayName=`Animated(${t})`,e};return Mb(e,((t,n)=>{jb.arr(e)&&(n=sv(t)),i[n]=i(t)})),{animated:i}})(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],{applyAnimatedValues:function(e,t){if(!e.nodeType||!e.setAttribute)return!1;const n="filter"===e.nodeName||e.parentNode&&"filter"===e.parentNode.nodeName,o=t,{style:r,children:i,scrollTop:s,scrollLeft:l}=o,a=v_(o,x_),c=Object.values(a),u=Object.keys(a).map((t=>n||e.hasAttribute(t)?t:w_[t]||(w_[t]=t.replace(/([A-Z])/g,(e=>"-"+e.toLowerCase())))));void 0!==i&&(e.textContent=i);for(let t in r)if(r.hasOwnProperty(t)){const n=S_(t,r[t]);y_.test(t)?e.style.setProperty(t,n):e.style[t]=n}u.forEach(((t,n)=>{e.setAttribute(t,c[n])})),void 0!==s&&(e.scrollTop=s),void 0!==l&&(e.scrollLeft=l)},createAnimatedStyle:e=>new R_(e),getComponentProps:e=>v_(e,L_)}),D_=A_.animated;function O_(e){return{top:e.offsetTop,left:e.offsetLeft}}const z_=function({triggerAnimationOnChange:e,clientId:t}){const n=(0,a.useRef)(),{isTyping:o,getGlobalBlockCount:r,isBlockSelected:i,isFirstMultiSelectedBlock:s,isBlockMultiSelected:l,isAncestorMultiSelected:u}=(0,c.useSelect)(ri),{previous:d,prevRect:p}=(0,a.useMemo)((()=>({previous:n.current&&O_(n.current),prevRect:n.current&&n.current.getBoundingClientRect()})),[e]);return(0,a.useLayoutEffect)((()=>{if(!d||!n.current)return;const e=(0,ga.getScrollContainer)(n.current),a=i(t),c=a||s(t);function h(){if(c&&p){const t=n.current.getBoundingClientRect().top-p.top;t&&(e.scrollTop+=t)}}if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||o()||r()>200)return void h();const g=a||l(t)||u(t)?"1":"",m=new i_({x:0,y:0,config:{mass:5,tension:2e3,friction:200},onChange({value:e}){if(!n.current)return;let{x:t,y:o}=e;t=Math.round(t),o=Math.round(o);const r=0===t&&0===o;n.current.style.transformOrigin="center center",n.current.style.transform=r?null:`translate3d(${t}px,${o}px,0)`,n.current.style.zIndex=g,h()}});n.current.style.transform=void 0;const f=O_(n.current),b=Math.round(d.left-f.left),k=Math.round(d.top-f.top);return m.start({x:0,y:0,from:{x:b,y:k}}),()=>{m.stop(),m.set({x:0,y:0})}}),[d,p,t,o,r,i,s,l,u]),n};function V_({clientId:e,initialPosition:t}){const n=(0,a.useRef)(),{isBlockSelected:o,isMultiSelecting:r,__unstableGetEditorMode:i}=(0,c.useSelect)(ri);return(0,a.useEffect)((()=>{if(!o(e)||r()||"zoom-out"===i())return;if(null==t)return;if(!n.current)return;const{ownerDocument:s}=n.current;if(Ag(n.current,s.activeElement))return;const l=ga.focus.tabbable.find(n.current).filter((e=>(0,ga.isTextField)(e))),a=-1===t,c=l[a?l.length-1:0]||n.current;if(Ag(n.current,c)){if(!n.current.getAttribute("contenteditable")){const e=ga.focus.tabbable.findNext(n.current);if(e&&Ag(n.current,e)&&(0,ga.isFormElement)(e))return void e.focus()}(0,ga.placeCaretAtHorizontalEdge)(c,a)}else n.current.focus()}),[t,e]),n}function F_({clientId:e}){const{hoverBlock:t}=(0,c.useDispatch)(ri);function n(n){if(n.defaultPrevented)return;const o="mouseover"===n.type?"add":"remove";n.preventDefault(),n.currentTarget.classList[o]("is-hovered"),t("add"===o?e:null)}return(0,u.useRefEffect)((e=>(e.addEventListener("mouseout",n),e.addEventListener("mouseover",n),()=>{e.removeEventListener("mouseout",n),e.removeEventListener("mouseover",n),e.classList.remove("is-hovered"),t(null)})),[])}function H_(e){const{isBlockSelected:t}=(0,c.useSelect)(ri),{selectBlock:n,selectionChange:o}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((r=>{function i(i){r.parentElement.closest('[contenteditable="true"]')||(t(e)?i.target.isContentEditable||o(e):Ag(r,i.target)&&n(e))}return r.addEventListener("focusin",i),()=>{r.removeEventListener("focusin",i)}}),[t,n])}function G_({clientId:e,isSelected:t}){const{getBlockRootClientId:n,getBlockIndex:o}=(0,c.useSelect)(ri),{insertAfterBlock:r,removeBlock:i}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((n=>{if(t)return n.addEventListener("keydown",o),n.addEventListener("dragstart",s),()=>{n.removeEventListener("keydown",o),n.removeEventListener("dragstart",s)};function o(t){const{keyCode:o,target:s}=t;o!==fa.ENTER&&o!==fa.BACKSPACE&&o!==fa.DELETE||s!==n||(0,ga.isTextField)(s)||(t.preventDefault(),o===fa.ENTER?r(e):i(e))}function s(e){e.preventDefault()}}),[e,t,n,o,r,i])}function $_(e){const{isNavigationMode:t,isBlockSelected:n}=(0,c.useSelect)(ri),{setNavigationMode:o,selectBlock:r}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((i=>{function s(i){t()&&!i.defaultPrevented&&(i.preventDefault(),n(e)?o(!1):r(e))}return i.addEventListener("mousedown",s),()=>{i.removeEventListener("mousedown",s)}}),[e,t,n,o])}function U_({editorMode:e}){const{getSettings:t,isZoomOut:n}=te((0,c.useSelect)(ri)),{__unstableSetEditorMode:o,resetZoomLevel:r}=te((0,c.useDispatch)(ri));return(0,u.useRefEffect)((i=>{if("zoom-out"===e&&n())return i.addEventListener("dblclick",s),()=>{i.removeEventListener("dblclick",s)};function s(e){if(!e.defaultPrevented){e.preventDefault();const{__experimentalSetIsInserterOpened:n}=t();"function"==typeof n&&n(!1),o("edit"),r()}}}),[e,t,o])}function W_(){const e=(0,a.useContext)(Gx);return(0,u.useRefEffect)((t=>{if(e)return e.observe(t),()=>{e.unobserve(t)}}),[e])}function K_({isSelected:e}){const t=(0,u.useReducedMotion)();return(0,u.useRefEffect)((n=>{if(e){const{ownerDocument:e}=n,{defaultView:o}=e;if(!o.IntersectionObserver)return;const r=new o.IntersectionObserver((e=>{e[0].isIntersecting||n.scrollIntoView({behavior:t?"instant":"smooth"}),r.disconnect()}));return r.observe(n),()=>{r.disconnect()}}}),[e])}function Z_({clientId:e="",isEnabled:t=!0}={}){const{getEnabledClientIdsTree:n}=te((0,c.useSelect)(ri));return(0,u.useRefEffect)((o=>{if(!t)return;const r=t=>{(t.target===o||t.target.classList.contains("is-root-container"))&&(t.defaultPrevented||(t.preventDefault(),n(e).forEach((({clientId:e})=>{const t=o.querySelector(`[data-block="${e}"]`);t&&(t.classList.remove("has-editable-outline"),t.offsetWidth,t.classList.add("has-editable-outline"))}))))};return o.addEventListener("click",r),()=>o.removeEventListener("click",r)}),[t])}const q_={"core/paragraph":["content"],"core/heading":["content"],"core/image":["id","url","title","alt"],"core/button":["url","text","linkTarget","rel"]},Y_="__default";function X_(e){return e in q_}function Q_(e,t){return X_(e)&&q_[e].includes(t)}const J_=(0,u.createHigherOrderComponent)((e=>t=>{const n=(0,c.useRegistry)(),o=(0,a.useContext)(Gf),r=(0,c.useSelect)((e=>te(e(l.store)).getAllBlockBindingsSources())),{name:i,clientId:s,context:u,setAttributes:d}=t,p=(0,a.useMemo)((()=>function(e,t){if("core/pattern-overrides"===t?.[Y_]?.source){const n=q_[e],o={};for(const e of n){const n=t[e]?t[e]:{source:"core/pattern-overrides"};o[e]=n}return o}return t}(i,t.attributes.metadata?.bindings)),[t.attributes.metadata?.bindings,i]),h={...u},g=(0,c.useSelect)((()=>{if(!p)return;const e={},t=new Map;for(const[e,n]of Object.entries(p)){const{source:s,args:l}=n,a=r[s];if(a&&Q_(i,e)){for(const e of a.usesContext||[])h[e]=o[e];t.set(a,{...t.get(a),[e]:{args:l}})}}if(t.size)for(const[o,r]of t){let t={};o.getValues?t=o.getValues({registry:n,context:h,clientId:s,bindings:r}):Object.keys(r).forEach((e=>{t[e]=o.label}));for(const[n,o]of Object.entries(t))"url"!==n||o&&nc(o)?e[n]=o:e[n]=null}return e}),[p,i,s,h,n,r]),m=!!h["pattern/overrides"],f="core/pattern-overrides"===t.attributes.metadata?.bindings?.[Y_]?.source,b=(0,a.useCallback)((e=>{n.batch((()=>{if(!p)return void d(e);const t={...e},o=new Map;for(const[e,n]of Object.entries(t)){if(!p[e]||!Q_(i,e))continue;const s=p[e],l=r[s?.source];l?.setValues&&(o.set(l,{...o.get(l),[e]:{args:s.args,newValue:n}}),delete t[e])}if(o.size)for(const[e,t]of o)e.setValues({registry:n,context:h,clientId:s,bindings:t});f&&m||!Object.keys(t).length||(f&&(delete t?.caption,delete t?.href),d(t))}))}),[n,p,i,s,h,d,r,f,m]);return(0,$.jsx)($.Fragment,{children:(0,$.jsx)(e,{...t,attributes:{...t.attributes,...g},setAttributes:b,context:h})})}),"withBlockBindingSupport");function ex(e={},{__unstableIsHtml:t}={}){const{clientId:n,className:o,wrapperProps:r={},isAligned:i,index:s,mode:l,name:c,blockApiVersion:d,blockTitle:p,editorMode:h,isSelected:g,isSubtreeDisabled:f,hasOverlay:b,initialPosition:k,blockEditingMode:v,isHighlighted:x,isMultiSelected:y,isPartiallySelected:S,isReusable:w,isDragging:B,hasChildSelected:I,isBlockMovingMode:j,canInsertMovingBlock:E,isEditingDisabled:T,hasEditableOutline:M,isTemporarilyEditingAsBlocks:P,defaultClassName:R,templateLock:N}=(0,a.useContext)(Yf),L=(0,C.sprintf)((0,C.__)("Block: %s"),p),A="html"!==l||t?"":"-visual",D=(0,u.useMergeRefs)([e.ref,V_({clientId:n,initialPosition:k}),up(n),H_(n),G_({clientId:n,isSelected:g}),$_(n),U_({editorMode:h}),F_({clientId:n}),W_(),z_({triggerAnimationOnChange:s,clientId:n}),(0,u.useDisabled)({isDisabled:!b}),Z_({clientId:n,isEnabled:"core/block"===c||"contentOnly"===N}),K_({isSelected:g})]),O=_(),z=O[m]&&X_(c)?{"--wp-admin-theme-color":"var(--wp-block-synced-color)","--wp-admin-theme-color--rgb":"var(--wp-block-synced-color--rgb)"}:{}; +(0,C.__)("Resolve Block"),onRequestClose:u,className:"block-editor-block-compare",children:(0,$.jsx)(eb,{block:t,onKeep:d.toHTML,onConvert:d.toBlocks,convertor:tb,convertButtonText:(0,C.__)("Convert to Blocks")})})]})}const ob=(0,$.jsx)(Zf,{className:"block-editor-block-list__block-crash-warning",children:(0,C.__)("This block has encountered an error and cannot be previewed.")}),rb=()=>ob;class ib extends a.Component{constructor(){super(...arguments),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?this.props.fallback:this.props.children}}const sb=ib;var lb=n(773);const ab=function({clientId:e}){const[t,n]=(0,a.useState)(""),o=(0,c.useSelect)((t=>t(ri).getBlock(e)),[e]),{updateBlock:r}=(0,c.useDispatch)(ri);return(0,a.useEffect)((()=>{n((0,l.getBlockContent)(o))}),[o]),(0,$.jsx)(lb.Z,{className:"block-editor-block-list__block-html-textarea",value:t,onBlur:()=>{const i=(0,l.getBlockType)(o.name);if(!i)return;const s=(0,l.getBlockAttributes)(i,t,o.attributes),a=t||(0,l.getSaveContent)(i,s),[c]=t?(0,l.validateBlock)({...o,attributes:s,originalContent:a}):[!0];r(e,{attributes:s,originalContent:a,isValid:c}),t||n(a)},onChange:e=>n(e.target.value)})};let cb=Cb();const ub=e=>xb(e,cb);let db=Cb();ub.write=e=>xb(e,db);let pb=Cb();ub.onStart=e=>xb(e,pb);let hb=Cb();ub.onFrame=e=>xb(e,hb);let gb=Cb();ub.onFinish=e=>xb(e,gb);let mb=[];ub.setTimeout=(e,t)=>{let n=ub.now()+t,o=()=>{let e=mb.findIndex((e=>e.cancel==o));~e&&mb.splice(e,1),vb-=~e?1:0},r={time:n,handler:e,cancel:o};return mb.splice(fb(n),0,r),vb+=1,yb(),r};let fb=e=>~(~mb.findIndex((t=>t.time>e))||~mb.length);ub.cancel=e=>{pb.delete(e),hb.delete(e),gb.delete(e),cb.delete(e),db.delete(e)},ub.sync=e=>{_b=!0,ub.batchedUpdates(e),_b=!1},ub.throttle=e=>{let t;function n(){try{e(...t)}finally{t=null}}function o(...e){t=e,ub.onStart(n)}return o.handler=e,o.cancel=()=>{pb.delete(n),t=null},o};let bb="undefined"!=typeof window?window.requestAnimationFrame:()=>{};ub.use=e=>bb=e,ub.now="undefined"!=typeof performance?()=>performance.now():Date.now,ub.batchedUpdates=e=>e(),ub.catch=console.error,ub.frameLoop="always",ub.advance=()=>{"demand"!==ub.frameLoop?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):wb()};let kb=-1,vb=0,_b=!1;function xb(e,t){_b?(t.delete(e),e(0)):(t.add(e),yb())}function yb(){kb<0&&(kb=0,"demand"!==ub.frameLoop&&bb(Sb))}function Sb(){~kb&&(bb(Sb),ub.batchedUpdates(wb))}function wb(){let e=kb;kb=ub.now();let t=fb(kb);t&&(Bb(mb.splice(0,t),(e=>e.handler())),vb-=t),vb?(pb.flush(),cb.flush(e?Math.min(64,kb-e):16.667),hb.flush(),db.flush(),gb.flush()):kb=-1}function Cb(){let e=new Set,t=e;return{add(n){vb+=t!=e||e.has(n)?0:1,e.add(n)},delete:n=>(vb-=t==e&&e.has(n)?1:0,e.delete(n)),flush(n){t.size&&(e=new Set,vb-=t.size,Bb(t,(t=>t(n)&&e.add(t))),vb+=e.size,t=e)}}}function Bb(e,t){e.forEach((e=>{try{t(e)}catch(e){ub.catch(e)}}))}function Ib(){}const jb={arr:Array.isArray,obj:e=>!!e&&"Object"===e.constructor.name,fun:e=>"function"==typeof e,str:e=>"string"==typeof e,num:e=>"number"==typeof e,und:e=>void 0===e};function Eb(e,t){if(jb.arr(e)){if(!jb.arr(t)||e.length!==t.length)return!1;for(let n=0;ne.forEach(t);function Mb(e,t,n){if(jb.arr(e))for(let o=0;ojb.und(e)?[]:jb.arr(e)?e:[e];function Rb(e,t){if(e.size){const n=Array.from(e);e.clear(),Tb(n,t)}}const Nb=(e,...t)=>Rb(e,(e=>e(...t))),Lb=()=>"undefined"==typeof window||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);let Ab,Db,Ob=null,zb=!1,Vb=Ib;var Fb=Object.freeze({__proto__:null,get createStringInterpolator(){return Ab},get to(){return Db},get colors(){return Ob},get skipAnimation(){return zb},get willAdvance(){return Vb},assign:e=>{e.to&&(Db=e.to),e.now&&(ub.now=e.now),void 0!==e.colors&&(Ob=e.colors),null!=e.skipAnimation&&(zb=e.skipAnimation),e.createStringInterpolator&&(Ab=e.createStringInterpolator),e.requestAnimationFrame&&ub.use(e.requestAnimationFrame),e.batchedUpdates&&(ub.batchedUpdates=e.batchedUpdates),e.willAdvance&&(Vb=e.willAdvance),e.frameLoop&&(ub.frameLoop=e.frameLoop)}});const Hb=new Set;let Gb=[],$b=[],Ub=0;const Wb={get idle(){return!Hb.size&&!Gb.length},start(e){Ub>e.priority?(Hb.add(e),ub.onStart(Kb)):(Zb(e),ub(Yb))},advance:Yb,sort(e){if(Ub)ub.onFrame((()=>Wb.sort(e)));else{const t=Gb.indexOf(e);~t&&(Gb.splice(t,1),qb(e))}},clear(){Gb=[],Hb.clear()}};function Kb(){Hb.forEach(Zb),Hb.clear(),ub(Yb)}function Zb(e){Gb.includes(e)||qb(e)}function qb(e){Gb.splice(function(t){const n=t.findIndex((t=>t.priority>e.priority));return n<0?t.length:n}(Gb),0,e)}function Yb(e){const t=$b;for(let n=0;n0}const Xb="[-+]?\\d*\\.?\\d+",Qb=Xb+"%";function Jb(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}const ek=new RegExp("rgb"+Jb(Xb,Xb,Xb)),tk=new RegExp("rgba"+Jb(Xb,Xb,Xb,Xb)),nk=new RegExp("hsl"+Jb(Xb,Qb,Qb)),ok=new RegExp("hsla"+Jb(Xb,Qb,Qb,Xb)),rk=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,ik=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,sk=/^#([0-9a-fA-F]{6})$/,lk=/^#([0-9a-fA-F]{8})$/;function ak(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function ck(e,t,n){const o=n<.5?n*(1+t):n+t-n*t,r=2*n-o,i=ak(r,o,e+1/3),s=ak(r,o,e),l=ak(r,o,e-1/3);return Math.round(255*i)<<24|Math.round(255*s)<<16|Math.round(255*l)<<8}function uk(e){const t=parseInt(e,10);return t<0?0:t>255?255:t}function dk(e){return(parseFloat(e)%360+360)%360/360}function pk(e){const t=parseFloat(e);return t<0?0:t>1?255:Math.round(255*t)}function hk(e){const t=parseFloat(e);return t<0?0:t>100?1:t/100}function gk(e){let t=function(e){let t;return"number"==typeof e?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=sk.exec(e))?parseInt(t[1]+"ff",16)>>>0:Ob&&void 0!==Ob[e]?Ob[e]:(t=ek.exec(e))?(uk(t[1])<<24|uk(t[2])<<16|uk(t[3])<<8|255)>>>0:(t=tk.exec(e))?(uk(t[1])<<24|uk(t[2])<<16|uk(t[3])<<8|pk(t[4]))>>>0:(t=rk.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=lk.exec(e))?parseInt(t[1],16)>>>0:(t=ik.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=nk.exec(e))?(255|ck(dk(t[1]),hk(t[2]),hk(t[3])))>>>0:(t=ok.exec(e))?(ck(dk(t[1]),hk(t[2]),hk(t[3]))|pk(t[4]))>>>0:null}(e);return null===t?e:(t=t||0,`rgba(${(4278190080&t)>>>24}, ${(16711680&t)>>>16}, ${(65280&t)>>>8}, ${(255&t)/255})`)}const mk=(e,t,n)=>{if(jb.fun(e))return e;if(jb.arr(e))return mk({range:e,output:t,extrapolate:n});if(jb.str(e.output[0]))return Ab(e);const o=e,r=o.output,i=o.range||[0,1],s=o.extrapolateLeft||o.extrapolate||"extend",l=o.extrapolateRight||o.extrapolate||"extend",a=o.easing||(e=>e);return e=>{const t=function(e,t){for(var n=1;n=e);++n);return n-1}(e,i);return function(e,t,n,o,r,i,s,l,a){let c=a?a(e):e;if(cn){if("identity"===l)return c;"clamp"===l&&(c=n)}return o===r?o:t===n?e<=t?o:r:(t===-1/0?c=-c:n===1/0?c-=t:c=(c-t)/(n-t),c=i(c),o===-1/0?c=-c:r===1/0?c+=o:c=c*(r-o)+o,c)}(e,i[t],i[t+1],r[t],r[t+1],a,s,l,o.map)}};function fk(){return fk=Object.assign?Object.assign.bind():function(e){for(var t=1;tBoolean(e&&e[bk]),_k=e=>e&&e[bk]?e[bk]():e,xk=e=>e[kk]||null;function yk(e,t){let n=e[kk];n&&n.forEach((e=>{!function(e,t){e.eventObserved?e.eventObserved(t):e(t)}(e,t)}))}class Sk{constructor(e){if(this[bk]=void 0,this[kk]=void 0,!e&&!(e=this.get))throw Error("Unknown getter");wk(this,e)}}const wk=(e,t)=>Ik(e,bk,t);function Ck(e,t){if(e[bk]){let n=e[kk];n||Ik(e,kk,n=new Set),n.has(t)||(n.add(t),e.observerAdded&&e.observerAdded(n.size,t))}return t}function Bk(e,t){let n=e[kk];if(n&&n.has(t)){const o=n.size-1;o?n.delete(t):e[kk]=null,e.observerRemoved&&e.observerRemoved(o,t)}}const Ik=(e,t,n)=>Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0}),jk=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,Ek=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,Tk=new RegExp(`(${jk.source})(%|[a-z]+)`,"i"),Mk=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,Pk=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Rk=e=>{const[t,n]=Nk(e);if(!t||Lb())return e;const o=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(o)return o.trim();if(n&&n.startsWith("--")){return window.getComputedStyle(document.documentElement).getPropertyValue(n)||e}return n&&Pk.test(n)?Rk(n):n||e},Nk=e=>{const t=Pk.exec(e);if(!t)return[,];const[,n,o]=t;return[n,o]};let Lk;const Ak=(e,t,n,o,r)=>`rgba(${Math.round(t)}, ${Math.round(n)}, ${Math.round(o)}, ${r})`,Dk=e=>{Lk||(Lk=Ob?new RegExp(`(${Object.keys(Ob).join("|")})(?!\\w)`,"g"):/^\b$/);const t=e.output.map((e=>_k(e).replace(Pk,Rk).replace(Ek,gk).replace(Lk,gk))),n=t.map((e=>e.match(jk).map(Number))),o=n[0].map(((e,t)=>n.map((e=>{if(!(t in e))throw Error('The arity of each "output" value must be equal');return e[t]})))),r=o.map((t=>mk(fk({},e,{output:t}))));return e=>{var n;const o=!Tk.test(t[0])&&(null==(n=t.find((e=>Tk.test(e))))?void 0:n.replace(jk,""));let i=0;return t[0].replace(jk,(()=>`${r[i++](e)}${o||""}`)).replace(Mk,Ak)}},Ok="react-spring: ",zk=e=>{const t=e;let n=!1;if("function"!=typeof t)throw new TypeError(`${Ok}once requires a function parameter`);return(...e)=>{n||(t(...e),n=!0)}},Vk=zk(console.warn);function Fk(e){return jb.str(e)&&("#"==e[0]||/\d/.test(e)||!Lb()&&Pk.test(e)||e in(Ob||{}))}zk(console.warn);const Hk=Lb()?Ea.useEffect:Ea.useLayoutEffect;const Gk=[],$k=Symbol.for("Animated:node"),Uk=e=>e&&e[$k],Wk=(e,t)=>{return n=e,o=$k,r=t,Object.defineProperty(n,o,{value:r,writable:!0,configurable:!0});var n,o,r},Kk=e=>e&&e[$k]&&e[$k].getPayload();class Zk{constructor(){this.payload=void 0,Wk(this,this)}getPayload(){return this.payload||[]}}class qk extends Zk{constructor(e){super(),this.done=!0,this.elapsedTime=void 0,this.lastPosition=void 0,this.lastVelocity=void 0,this.v0=void 0,this.durationProgress=0,this._value=e,jb.num(this._value)&&(this.lastPosition=this._value)}static create(e){return new qk(e)}getPayload(){return[this]}getValue(){return this._value}setValue(e,t){return jb.num(e)&&(this.lastPosition=e,t&&(e=Math.round(e/t)*t,this.done&&(this.lastPosition=e))),this._value!==e&&(this._value=e,!0)}reset(){const{done:e}=this;this.done=!1,jb.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,e&&(this.lastVelocity=null),this.v0=null)}}class Yk extends qk{constructor(e){super(0),this._string=null,this._toString=void 0,this._toString=mk({output:[e,e]})}static create(e){return new Yk(e)}getValue(){let e=this._string;return null==e?this._string=this._toString(this._value):e}setValue(e){if(jb.str(e)){if(e==this._string)return!1;this._string=e,this._value=1}else{if(!super.setValue(e))return!1;this._string=null}return!0}reset(e){e&&(this._toString=mk({output:[this.getValue(),e]})),this._value=0,super.reset()}}const Xk={dependencies:null};class Qk extends Zk{constructor(e){super(),this.source=e,this.setValue(e)}getValue(e){const t={};return Mb(this.source,((n,o)=>{var r;(r=n)&&r[$k]===r?t[o]=n.getValue(e):vk(n)?t[o]=_k(n):e||(t[o]=n)})),t}setValue(e){this.source=e,this.payload=this._makePayload(e)}reset(){this.payload&&Tb(this.payload,(e=>e.reset()))}_makePayload(e){if(e){const t=new Set;return Mb(e,this._addToPayload,t),Array.from(t)}}_addToPayload(e){Xk.dependencies&&vk(e)&&Xk.dependencies.add(e);const t=Kk(e);t&&Tb(t,(e=>this.add(e)))}}class Jk extends Qk{constructor(e){super(e)}static create(e){return new Jk(e)}getValue(){return this.source.map((e=>e.getValue()))}setValue(e){const t=this.getPayload();return e.length==t.length?t.map(((t,n)=>t.setValue(e[n]))).some(Boolean):(super.setValue(e.map(ev)),!0)}}function ev(e){return(Fk(e)?Yk:qk).create(e)}function tv(e){const t=Uk(e);return t?t.constructor:jb.arr(e)?Jk:Fk(e)?Yk:qk}function nv(){return nv=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const n=!jb.fun(e)||e.prototype&&e.prototype.isReactComponent;return(0,Ea.forwardRef)(((o,r)=>{const i=(0,Ea.useRef)(null),s=n&&(0,Ea.useCallback)((e=>{i.current=function(e,t){return e&&(jb.fun(e)?e(t):e.current=t),t}(r,e)}),[r]),[l,a]=function(e,t){const n=new Set;return Xk.dependencies=n,e.style&&(e=nv({},e,{style:t.createAnimatedStyle(e.style)})),e=new Qk(e),Xk.dependencies=null,[e,n]}(o,t),c=function(){const e=(0,Ea.useState)()[1],t=(()=>{const e=(0,Ea.useRef)(!1);return Hk((()=>(e.current=!0,()=>{e.current=!1})),[]),e})();return()=>{t.current&&e(Math.random())}}(),u=()=>{const e=i.current;n&&!e||!1===(!!e&&t.applyAnimatedValues(e,l.getValue(!0)))&&c()},d=new rv(u,a),p=(0,Ea.useRef)();var h;Hk((()=>(p.current=d,Tb(a,(e=>Ck(e,d))),()=>{p.current&&(Tb(p.current.deps,(e=>Bk(e,p.current))),ub.cancel(p.current.update))}))),(0,Ea.useEffect)(u,[]),h=()=>()=>{const e=p.current;Tb(e.deps,(t=>Bk(t,e)))},(0,Ea.useEffect)(h,Gk);const g=t.getComponentProps(l.getValue());return Ea.createElement(e,nv({},g,{ref:s}))}))};class rv{constructor(e,t){this.update=e,this.deps=t}eventObserved(e){"change"==e.type&&ub.write(this.update)}}const iv=Symbol.for("AnimatedComponent"),sv=e=>jb.str(e)?e:e&&jb.str(e.displayName)?e.displayName:jb.fun(e)&&e.name||null;function lv(){return lv=Object.assign?Object.assign.bind():function(e){for(var t=1;t!0===e||!!(t&&e&&(jb.fun(e)?e(t):Pb(e).includes(t))),uv=(e,t)=>jb.obj(e)?t&&e[t]:e,dv=(e,t)=>!0===e.default?e[t]:e.default?e.default[t]:void 0,pv=e=>e,hv=(e,t=pv)=>{let n=gv;e.default&&!0!==e.default&&(e=e.default,n=Object.keys(e));const o={};for(const r of n){const n=t(e[r],r);jb.und(n)||(o[r]=n)}return o},gv=["config","onProps","onStart","onChange","onPause","onResume","onRest"],mv={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function fv(e){const t=function(e){const t={};let n=0;if(Mb(e,((e,o)=>{mv[o]||(t[o]=e,n++)})),n)return t}(e);if(t){const n={to:t};return Mb(e,((e,o)=>o in t||(n[o]=e))),n}return lv({},e)}function bv(e){return e=_k(e),jb.arr(e)?e.map(bv):Fk(e)?Fb.createStringInterpolator({range:[0,1],output:[e,e]})(1):e}function kv(e){return jb.fun(e)||jb.arr(e)&&jb.obj(e[0])}const vv=1.70158,_v=1.525*vv,xv=vv+1,yv=2*Math.PI/3,Sv=2*Math.PI/4.5,wv=e=>{const t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},Cv={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>1-(1-e)*(1-e),easeInOutQuad:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,easeInCubic:e=>e*e*e,easeOutCubic:e=>1-Math.pow(1-e,3),easeInOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1-Math.pow(1-e,4),easeInOutQuart:e=>e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1-Math.pow(1-e,5),easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2,easeInSine:e=>1-Math.cos(e*Math.PI/2),easeOutSine:e=>Math.sin(e*Math.PI/2),easeInOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,easeInExpo:e=>0===e?0:Math.pow(2,10*e-10),easeOutExpo:e=>1===e?1:1-Math.pow(2,-10*e),easeInOutExpo:e=>0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2,easeInCirc:e=>1-Math.sqrt(1-Math.pow(e,2)),easeOutCirc:e=>Math.sqrt(1-Math.pow(e-1,2)),easeInOutCirc:e=>e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2,easeInBack:e=>xv*e*e*e-vv*e*e,easeOutBack:e=>1+xv*Math.pow(e-1,3)+vv*Math.pow(e-1,2),easeInOutBack:e=>e<.5?Math.pow(2*e,2)*(7.189819*e-_v)/2:(Math.pow(2*e-2,2)*((_v+1)*(2*e-2)+_v)+2)/2,easeInElastic:e=>0===e?0:1===e?1:-Math.pow(2,10*e-10)*Math.sin((10*e-10.75)*yv),easeOutElastic:e=>0===e?0:1===e?1:Math.pow(2,-10*e)*Math.sin((10*e-.75)*yv)+1,easeInOutElastic:e=>0===e?0:1===e?1:e<.5?-Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*Sv)/2:Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*Sv)/2+1,easeInBounce:e=>1-wv(1-e),easeOutBounce:wv,easeInOutBounce:e=>e<.5?(1-wv(1-2*e))/2:(1+wv(2*e-1))/2},Bv=lv({},{tension:170,friction:26},{mass:1,damping:1,easing:Cv.linear,clamp:!1});class Iv{constructor(){this.tension=void 0,this.friction=void 0,this.frequency=void 0,this.damping=void 0,this.mass=void 0,this.velocity=0,this.restVelocity=void 0,this.precision=void 0,this.progress=void 0,this.duration=void 0,this.easing=void 0,this.clamp=void 0,this.bounce=void 0,this.decay=void 0,this.round=void 0,Object.assign(this,Bv)}}function jv(e,t){if(jb.und(t.decay)){const n=!jb.und(t.tension)||!jb.und(t.friction);!n&&jb.und(t.frequency)&&jb.und(t.damping)&&jb.und(t.mass)||(e.duration=void 0,e.decay=void 0),n&&(e.frequency=void 0)}else e.duration=void 0}const Ev=[];class Tv{constructor(){this.changed=!1,this.values=Ev,this.toValues=null,this.fromValues=Ev,this.to=void 0,this.from=void 0,this.config=new Iv,this.immediate=!1}}function Mv(e,{key:t,props:n,defaultProps:o,state:r,actions:i}){return new Promise(((s,l)=>{var a;let c,u,d=cv(null!=(a=n.cancel)?a:null==o?void 0:o.cancel,t);if(d)g();else{jb.und(n.pause)||(r.paused=cv(n.pause,t));let e=null==o?void 0:o.pause;!0!==e&&(e=r.paused||cv(e,t)),c=av(n.delay||0,t),e?(r.resumeQueue.add(h),i.pause()):(i.resume(),h())}function p(){r.resumeQueue.add(h),r.timeouts.delete(u),u.cancel(),c=u.time-ub.now()}function h(){c>0&&!Fb.skipAnimation?(r.delayed=!0,u=ub.setTimeout(g,c),r.pauseQueue.add(p),r.timeouts.add(u)):g()}function g(){r.delayed&&(r.delayed=!1),r.pauseQueue.delete(p),r.timeouts.delete(u),e<=(r.cancelId||0)&&(d=!0);try{i.start(lv({},n,{callId:e,cancel:d}),s)}catch(e){l(e)}}}))}const Pv=(e,t)=>1==t.length?t[0]:t.some((e=>e.cancelled))?Lv(e.get()):t.every((e=>e.noop))?Rv(e.get()):Nv(e.get(),t.every((e=>e.finished))),Rv=e=>({value:e,noop:!0,finished:!0,cancelled:!1}),Nv=(e,t,n=!1)=>({value:e,finished:t,cancelled:n}),Lv=e=>({value:e,cancelled:!0,finished:!1});function Av(e,t,n,o){const{callId:r,parentId:i,onRest:s}=t,{asyncTo:l,promise:a}=n;return i||e!==l||t.reset?n.promise=(async()=>{n.asyncId=r,n.asyncTo=e;const c=hv(t,((e,t)=>"onRest"===t?void 0:e));let u,d;const p=new Promise(((e,t)=>(u=e,d=t))),h=e=>{const t=r<=(n.cancelId||0)&&Lv(o)||r!==n.asyncId&&Nv(o,!1);if(t)throw e.result=t,d(e),e},g=(e,t)=>{const i=new Ov,s=new zv;return(async()=>{if(Fb.skipAnimation)throw Dv(n),s.result=Nv(o,!1),d(s),s;h(i);const l=jb.obj(e)?lv({},e):lv({},t,{to:e});l.parentId=r,Mb(c,((e,t)=>{jb.und(l[t])&&(l[t]=e)}));const a=await o.start(l);return h(i),n.paused&&await new Promise((e=>{n.resumeQueue.add(e)})),a})()};let m;if(Fb.skipAnimation)return Dv(n),Nv(o,!1);try{let t;t=jb.arr(e)?(async e=>{for(const t of e)await g(t)})(e):Promise.resolve(e(g,o.stop.bind(o))),await Promise.all([t.then(u),p]),m=Nv(o.get(),!0,!1)}catch(e){if(e instanceof Ov)m=e.result;else{if(!(e instanceof zv))throw e;m=e.result}}finally{r==n.asyncId&&(n.asyncId=i,n.asyncTo=i?l:void 0,n.promise=i?a:void 0)}return jb.fun(s)&&ub.batchedUpdates((()=>{s(m,o,o.item)})),m})():a}function Dv(e,t){Rb(e.timeouts,(e=>e.cancel())),e.pauseQueue.clear(),e.resumeQueue.clear(),e.asyncId=e.asyncTo=e.promise=void 0,t&&(e.cancelId=t)}class Ov extends Error{constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise."),this.result=void 0}}class zv extends Error{constructor(){super("SkipAnimationSignal"),this.result=void 0}}const Vv=e=>e instanceof Hv;let Fv=1;class Hv extends Sk{constructor(...e){super(...e),this.id=Fv++,this.key=void 0,this._priority=0}get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){const e=Uk(this);return e&&e.getValue()}to(...e){return Fb.to(this,e)}interpolate(...e){return Vk(`${Ok}The "interpolate" function is deprecated in v9 (use "to" instead)`),Fb.to(this,e)}toJSON(){return this.get()}observerAdded(e){1==e&&this._attach()}observerRemoved(e){0==e&&this._detach()}_attach(){}_detach(){}_onChange(e,t=!1){yk(this,{type:"change",parent:this,value:e,idle:t})}_onPriorityChange(e){this.idle||Wb.sort(this),yk(this,{type:"priority",parent:this,priority:e})}}const Gv=Symbol.for("SpringPhase"),$v=e=>(1&e[Gv])>0,Uv=e=>(2&e[Gv])>0,Wv=e=>(4&e[Gv])>0,Kv=(e,t)=>t?e[Gv]|=3:e[Gv]&=-3,Zv=(e,t)=>t?e[Gv]|=4:e[Gv]&=-5;class qv extends Hv{constructor(e,t){if(super(),this.key=void 0,this.animation=new Tv,this.queue=void 0,this.defaultProps={},this._state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._pendingCalls=new Set,this._lastCallId=0,this._lastToId=0,this._memoizedDuration=0,!jb.und(e)||!jb.und(t)){const n=jb.obj(e)?lv({},e):lv({},t,{from:e});jb.und(n.default)&&(n.default=!0),this.start(n)}}get idle(){return!(Uv(this)||this._state.asyncTo)||Wv(this)}get goal(){return _k(this.animation.to)}get velocity(){const e=Uk(this);return e instanceof qk?e.lastVelocity||0:e.getPayload().map((e=>e.lastVelocity||0))}get hasAnimated(){return $v(this)}get isAnimating(){return Uv(this)}get isPaused(){return Wv(this)}get isDelayed(){return this._state.delayed}advance(e){let t=!0,n=!1;const o=this.animation;let{config:r,toValues:i}=o;const s=Kk(o.to);!s&&vk(o.to)&&(i=Pb(_k(o.to))),o.values.forEach(((l,a)=>{if(l.done)return;const c=l.constructor==Yk?1:s?s[a].lastPosition:i[a];let u=o.immediate,d=c;if(!u){if(d=l.lastPosition,r.tension<=0)return void(l.done=!0);let t=l.elapsedTime+=e;const n=o.fromValues[a],i=null!=l.v0?l.v0:l.v0=jb.arr(r.velocity)?r.velocity[a]:r.velocity;let s;const p=r.precision||(n==c?.005:Math.min(1,.001*Math.abs(c-n)));if(jb.und(r.duration))if(r.decay){const e=!0===r.decay?.998:r.decay,o=Math.exp(-(1-e)*t);d=n+i/(1-e)*(1-o),u=Math.abs(l.lastPosition-d)<=p,s=i*o}else{s=null==l.lastVelocity?i:l.lastVelocity;const t=r.restVelocity||p/10,o=r.clamp?0:r.bounce,a=!jb.und(o),h=n==c?l.v0>0:nt,g||(u=Math.abs(c-d)<=p,!u));++e)a&&(m=d==c||d>c==h,m&&(s=-s*o,d=c)),s+=(1e-6*-r.tension*(d-c)+.001*-r.friction*s)/r.mass*f,d+=s*f}else{let o=1;r.duration>0&&(this._memoizedDuration!==r.duration&&(this._memoizedDuration=r.duration,l.durationProgress>0&&(l.elapsedTime=r.duration*l.durationProgress,t=l.elapsedTime+=e)),o=(r.progress||0)+t/this._memoizedDuration,o=o>1?1:o<0?0:o,l.durationProgress=o),d=n+r.easing(o)*(c-n),s=(d-l.lastPosition)/e,u=1==o}l.lastVelocity=s,Number.isNaN(d)&&(console.warn("Got NaN while animating:",this),u=!0)}s&&!s[a].done&&(u=!1),u?l.done=!0:t=!1,l.setValue(d,r.round)&&(n=!0)}));const l=Uk(this),a=l.getValue();if(t){const e=_k(o.to);a===e&&!n||r.decay?n&&r.decay&&this._onChange(a):(l.setValue(e),this._onChange(e)),this._stop()}else n&&this._onChange(a)}set(e){return ub.batchedUpdates((()=>{this._stop(),this._focus(e),this._set(e)})),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(Uv(this)){const{to:e,config:t}=this.animation;ub.batchedUpdates((()=>{this._onStart(),t.decay||this._set(e,!1),this._stop()}))}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,t){let n;return jb.und(e)?(n=this.queue||[],this.queue=[]):n=[jb.obj(e)?e:lv({},t,{to:e})],Promise.all(n.map((e=>this._update(e)))).then((e=>Pv(this,e)))}stop(e){const{to:t}=this.animation;return this._focus(this.get()),Dv(this._state,e&&this._lastCallId),ub.batchedUpdates((()=>this._stop(t,e))),this}reset(){this._update({reset:!0})}eventObserved(e){"change"==e.type?this._start():"priority"==e.type&&(this.priority=e.priority+1)}_prepareNode(e){const t=this.key||"";let{to:n,from:o}=e;n=jb.obj(n)?n[t]:n,(null==n||kv(n))&&(n=void 0),o=jb.obj(o)?o[t]:o,null==o&&(o=void 0);const r={to:n,from:o};return $v(this)||(e.reverse&&([n,o]=[o,n]),o=_k(o),jb.und(o)?Uk(this)||this._set(n):this._set(o)),r}_update(e,t){let n=lv({},e);const{key:o,defaultProps:r}=this;n.default&&Object.assign(r,hv(n,((e,t)=>/^on/.test(t)?uv(e,o):e))),t_(this,n,"onProps"),n_(this,"onProps",n,this);const i=this._prepareNode(n);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");const s=this._state;return Mv(++this._lastCallId,{key:o,props:n,defaultProps:r,state:s,actions:{pause:()=>{Wv(this)||(Zv(this,!0),Nb(s.pauseQueue),n_(this,"onPause",Nv(this,Yv(this,this.animation.to)),this))},resume:()=>{Wv(this)&&(Zv(this,!1),Uv(this)&&this._resume(),Nb(s.resumeQueue),n_(this,"onResume",Nv(this,Yv(this,this.animation.to)),this))},start:this._merge.bind(this,i)}}).then((e=>{if(n.loop&&e.finished&&(!t||!e.noop)){const e=Xv(n);if(e)return this._update(e,!0)}return e}))}_merge(e,t,n){if(t.cancel)return this.stop(!0),n(Lv(this));const o=!jb.und(e.to),r=!jb.und(e.from);if(o||r){if(!(t.callId>this._lastToId))return n(Lv(this));this._lastToId=t.callId}const{key:i,defaultProps:s,animation:l}=this,{to:a,from:c}=l;let{to:u=a,from:d=c}=e;!r||o||t.default&&!jb.und(u)||(u=d),t.reverse&&([u,d]=[d,u]);const p=!Eb(d,c);p&&(l.from=d),d=_k(d);const h=!Eb(u,a);h&&this._focus(u);const g=kv(t.to),{config:m}=l,{decay:f,velocity:b}=m;(o||r)&&(m.velocity=0),t.config&&!g&&function(e,t,n){n&&(jv(n=lv({},n),t),t=lv({},n,t)),jv(e,t),Object.assign(e,t);for(const t in Bv)null==e[t]&&(e[t]=Bv[t]);let{mass:o,frequency:r,damping:i}=e;jb.und(r)||(r<.01&&(r=.01),i<0&&(i=0),e.tension=Math.pow(2*Math.PI/r,2)*o,e.friction=4*Math.PI*i*o/r)}(m,av(t.config,i),t.config!==s.config?av(s.config,i):void 0);let k=Uk(this);if(!k||jb.und(u))return n(Nv(this,!0));const v=jb.und(t.reset)?r&&!t.default:!jb.und(d)&&cv(t.reset,i),_=v?d:this.get(),x=bv(u),y=jb.num(x)||jb.arr(x)||Fk(x),S=!g&&(!y||cv(s.immediate||t.immediate,i));if(h){const e=tv(u);if(e!==k.constructor){if(!S)throw Error(`Cannot animate between ${k.constructor.name} and ${e.name}, as the "to" prop suggests`);k=this._set(x)}}const w=k.constructor;let C=vk(u),B=!1;if(!C){const e=v||!$v(this)&&p;(h||e)&&(B=Eb(bv(_),x),C=!B),(Eb(l.immediate,S)||S)&&Eb(m.decay,f)&&Eb(m.velocity,b)||(C=!0)}if(B&&Uv(this)&&(l.changed&&!v?C=!0:C||this._stop(a)),!g&&((C||vk(a))&&(l.values=k.getPayload(),l.toValues=vk(u)?null:w==Yk?[1]:Pb(x)),l.immediate!=S&&(l.immediate=S,S||v||this._set(a)),C)){const{onRest:e}=l;Tb(e_,(e=>t_(this,t,e)));const o=Nv(this,Yv(this,a));Nb(this._pendingCalls,o),this._pendingCalls.add(n),l.changed&&ub.batchedUpdates((()=>{l.changed=!v,null==e||e(o,this),v?av(s.onRest,o):null==l.onStart||l.onStart(o,this)}))}v&&this._set(_),g?n(Av(t.to,t,this._state,this)):C?this._start():Uv(this)&&!h?this._pendingCalls.add(n):n(Rv(_))}_focus(e){const t=this.animation;e!==t.to&&(xk(this)&&this._detach(),t.to=e,xk(this)&&this._attach())}_attach(){let e=0;const{to:t}=this.animation;vk(t)&&(Ck(t,this),Vv(t)&&(e=t.priority+1)),this.priority=e}_detach(){const{to:e}=this.animation;vk(e)&&Bk(e,this)}_set(e,t=!0){const n=_k(e);if(!jb.und(n)){const e=Uk(this);if(!e||!Eb(n,e.getValue())){const o=tv(n);e&&e.constructor==o?e.setValue(n):Wk(this,o.create(n)),e&&ub.batchedUpdates((()=>{this._onChange(n,t)}))}}return Uk(this)}_onStart(){const e=this.animation;e.changed||(e.changed=!0,n_(this,"onStart",Nv(this,Yv(this,e.to)),this))}_onChange(e,t){t||(this._onStart(),av(this.animation.onChange,e,this)),av(this.defaultProps.onChange,e,this),super._onChange(e,t)}_start(){const e=this.animation;Uk(this).reset(_k(e.to)),e.immediate||(e.fromValues=e.values.map((e=>e.lastPosition))),Uv(this)||(Kv(this,!0),Wv(this)||this._resume())}_resume(){Fb.skipAnimation?this.finish():Wb.start(this)}_stop(e,t){if(Uv(this)){Kv(this,!1);const n=this.animation;Tb(n.values,(e=>{e.done=!0})),n.toValues&&(n.onChange=n.onPause=n.onResume=void 0),yk(this,{type:"idle",parent:this});const o=t?Lv(this.get()):Nv(this.get(),Yv(this,null!=e?e:n.to));Nb(this._pendingCalls,o),n.changed&&(n.changed=!1,n_(this,"onRest",o,this))}}}function Yv(e,t){const n=bv(t);return Eb(bv(e.get()),n)}function Xv(e,t=e.loop,n=e.to){let o=av(t);if(o){const r=!0!==o&&fv(o),i=(r||e).reverse,s=!r||r.reset;return Qv(lv({},e,{loop:t,default:!1,pause:void 0,to:!i||kv(n)?n:void 0,from:s?e.from:void 0,reset:s},r))}}function Qv(e){const{to:t,from:n}=e=fv(e),o=new Set;return jb.obj(t)&&Jv(t,o),jb.obj(n)&&Jv(n,o),e.keys=o.size?Array.from(o):null,e}function Jv(e,t){Mb(e,((e,n)=>null!=e&&t.add(n)))}const e_=["onStart","onRest","onChange","onPause","onResume"];function t_(e,t,n){e.animation[n]=t[n]!==dv(t,n)?uv(t[n],e.key):void 0}function n_(e,t,...n){var o,r,i,s;null==(o=(r=e.animation)[t])||o.call(r,...n),null==(i=(s=e.defaultProps)[t])||i.call(s,...n)}const o_=["onStart","onChange","onRest"];let r_=1;class i_{constructor(e,t){this.id=r_++,this.springs={},this.queue=[],this.ref=void 0,this._flush=void 0,this._initialProps=void 0,this._lastAsyncId=0,this._active=new Set,this._changed=new Set,this._started=!1,this._item=void 0,this._state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._events={onStart:new Map,onChange:new Map,onRest:new Map},this._onFrame=this._onFrame.bind(this),t&&(this._flush=t),e&&this.start(lv({default:!0},e))}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every((e=>e.idle&&!e.isDelayed&&!e.isPaused))}get item(){return this._item}set item(e){this._item=e}get(){const e={};return this.each(((t,n)=>e[n]=t.get())),e}set(e){for(const t in e){const n=e[t];jb.und(n)||this.springs[t].set(n)}}update(e){return e&&this.queue.push(Qv(e)),this}start(e){let{queue:t}=this;return e?t=Pb(e).map(Qv):this.queue=[],this._flush?this._flush(this,t):(l_(this,t),function(e,t){return Promise.all(t.map((t=>s_(e,t)))).then((t=>Pv(e,t)))}(this,t))}stop(e,t){if(e!==!!e&&(t=e),t){const n=this.springs;Tb(Pb(t),(t=>n[t].stop(!!e)))}else Dv(this._state,this._lastAsyncId),this.each((t=>t.stop(!!e)));return this}pause(e){if(jb.und(e))this.start({pause:!0});else{const t=this.springs;Tb(Pb(e),(e=>t[e].pause()))}return this}resume(e){if(jb.und(e))this.start({pause:!1});else{const t=this.springs;Tb(Pb(e),(e=>t[e].resume()))}return this}each(e){Mb(this.springs,e)}_onFrame(){const{onStart:e,onChange:t,onRest:n}=this._events,o=this._active.size>0,r=this._changed.size>0;(o&&!this._started||r&&!this._started)&&(this._started=!0,Rb(e,(([e,t])=>{t.value=this.get(),e(t,this,this._item)})));const i=!o&&this._started,s=r||i&&n.size?this.get():null;r&&t.size&&Rb(t,(([e,t])=>{t.value=s,e(t,this,this._item)})),i&&(this._started=!1,Rb(n,(([e,t])=>{t.value=s,e(t,this,this._item)})))}eventObserved(e){if("change"==e.type)this._changed.add(e.parent),e.idle||this._active.add(e.parent);else{if("idle"!=e.type)return;this._active.delete(e.parent)}ub.onFrame(this._onFrame)}}async function s_(e,t,n){const{keys:o,to:r,from:i,loop:s,onRest:l,onResolve:a}=t,c=jb.obj(t.default)&&t.default;s&&(t.loop=!1),!1===r&&(t.to=null),!1===i&&(t.from=null);const u=jb.arr(r)||jb.fun(r)?r:void 0;u?(t.to=void 0,t.onRest=void 0,c&&(c.onRest=void 0)):Tb(o_,(n=>{const o=t[n];if(jb.fun(o)){const r=e._events[n];t[n]=({finished:e,cancelled:t})=>{const n=r.get(o);n?(e||(n.finished=!1),t&&(n.cancelled=!0)):r.set(o,{value:null,finished:e||!1,cancelled:t||!1})},c&&(c[n]=t[n])}}));const d=e._state;t.pause===!d.paused?(d.paused=t.pause,Nb(t.pause?d.pauseQueue:d.resumeQueue)):d.paused&&(t.pause=!0);const p=(o||Object.keys(e.springs)).map((n=>e.springs[n].start(t))),h=!0===t.cancel||!0===dv(t,"cancel");(u||h&&d.asyncId)&&p.push(Mv(++e._lastAsyncId,{props:t,state:d,actions:{pause:Ib,resume:Ib,start(t,n){h?(Dv(d,e._lastAsyncId),n(Lv(e))):(t.onRest=l,n(Av(u,t,d,e)))}}})),d.paused&&await new Promise((e=>{d.resumeQueue.add(e)}));const g=Pv(e,await Promise.all(p));if(s&&g.finished&&(!n||!g.noop)){const n=Xv(t,s,r);if(n)return l_(e,[n]),s_(e,n,!0)}return a&&ub.batchedUpdates((()=>a(g,e,e.item))),g}function l_(e,t){Tb(t,(t=>{!function(e,t,n){t.keys&&Tb(t.keys,(o=>{(e[o]||(e[o]=n(o)))._prepareNode(t)}))}(e.springs,t,(t=>function(e,t){const n=new qv;return n.key=e,t&&Ck(n,t),n}(t,e)))}))}const a_=["children"],c_=e=>{let{children:t}=e,n=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,a_);const o=(0,Ea.useContext)(u_),r=n.pause||!!o.pause,i=n.immediate||!!o.immediate;n=function(e,t){const[n]=(0,Ea.useState)((()=>({inputs:t,result:e()}))),o=(0,Ea.useRef)(),r=o.current;let i=r;if(i){const n=Boolean(t&&i.inputs&&function(e,t){if(e.length!==t.length)return!1;for(let n=0;n{o.current=i,r==n&&(n.inputs=n.result=void 0)}),[i]),i.result}((()=>({pause:r,immediate:i})),[r,i]);const{Provider:s}=u_;return Ea.createElement(s,{value:n},t)},u_=(d_=c_,p_={},Object.assign(d_,Ea.createContext(p_)),d_.Provider._context=d_,d_.Consumer._context=d_,d_);var d_,p_;let h_;c_.Provider=u_.Provider,c_.Consumer=u_.Consumer,function(e){e.MOUNT="mount",e.ENTER="enter",e.UPDATE="update",e.LEAVE="leave"}(h_||(h_={}));class g_ extends Hv{constructor(e,t){super(),this.key=void 0,this.idle=!0,this.calc=void 0,this._active=new Set,this.source=e,this.calc=mk(...t);const n=this._get(),o=tv(n);Wk(this,o.create(n))}advance(e){const t=this._get();Eb(t,this.get())||(Uk(this).setValue(t),this._onChange(t,this.idle)),!this.idle&&f_(this._active)&&b_(this)}_get(){const e=jb.arr(this.source)?this.source.map(_k):Pb(_k(this.source));return this.calc(...e)}_start(){this.idle&&!f_(this._active)&&(this.idle=!1,Tb(Kk(this),(e=>{e.done=!1})),Fb.skipAnimation?(ub.batchedUpdates((()=>this.advance())),b_(this)):Wb.start(this))}_attach(){let e=1;Tb(Pb(this.source),(t=>{vk(t)&&Ck(t,this),Vv(t)&&(t.idle||this._active.add(t),e=Math.max(e,t.priority+1))})),this.priority=e,this._start()}_detach(){Tb(Pb(this.source),(e=>{vk(e)&&Bk(e,this)})),this._active.clear(),b_(this)}eventObserved(e){"change"==e.type?e.idle?this.advance():(this._active.add(e.parent),this._start()):"idle"==e.type?this._active.delete(e.parent):"priority"==e.type&&(this.priority=Pb(this.source).reduce(((e,t)=>Math.max(e,(Vv(t)?t.priority:0)+1)),0))}}function m_(e){return!1!==e.idle}function f_(e){return!e.size||Array.from(e).every(m_)}function b_(e){e.idle||(e.idle=!0,Tb(Kk(e),(e=>{e.done=!0})),yk(e,{type:"idle",parent:e}))}Fb.assign({createStringInterpolator:Dk,to:(e,t)=>new g_(e,t)}),Wb.advance;const k_=window.ReactDOM;function v_(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}const x_=["style","children","scrollTop","scrollLeft"],y_=/^--/;function S_(e,t){return null==t||"boolean"==typeof t||""===t?"":"number"!=typeof t||0===t||y_.test(e)||C_.hasOwnProperty(e)&&C_[e]?(""+t).trim():t+"px"}const w_={};let C_={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0};const B_=["Webkit","Ms","Moz","O"];C_=Object.keys(C_).reduce(((e,t)=>(B_.forEach((n=>e[((e,t)=>e+t.charAt(0).toUpperCase()+t.substring(1))(n,t)]=e[t])),e)),C_);const I_=["x","y","z"],j_=/^(matrix|translate|scale|rotate|skew)/,E_=/^(translate)/,T_=/^(rotate|skew)/,M_=(e,t)=>jb.num(e)&&0!==e?e+t:e,P_=(e,t)=>jb.arr(e)?e.every((e=>P_(e,t))):jb.num(e)?e===t:parseFloat(e)===t;class R_ extends Qk{constructor(e){let{x:t,y:n,z:o}=e,r=v_(e,I_);const i=[],s=[];(t||n||o)&&(i.push([t||0,n||0,o||0]),s.push((e=>[`translate3d(${e.map((e=>M_(e,"px"))).join(",")})`,P_(e,0)]))),Mb(r,((e,t)=>{if("transform"===t)i.push([e||""]),s.push((e=>[e,""===e]));else if(j_.test(t)){if(delete r[t],jb.und(e))return;const n=E_.test(t)?"px":T_.test(t)?"deg":"";i.push(Pb(e)),s.push("rotate3d"===t?([e,t,o,r])=>[`rotate3d(${e},${t},${o},${M_(r,n)})`,P_(r,0)]:e=>[`${t}(${e.map((e=>M_(e,n))).join(",")})`,P_(e,t.startsWith("scale")?1:0)])}})),i.length&&(r.transform=new N_(i,s)),super(r)}}class N_ extends Sk{constructor(e,t){super(),this._value=null,this.inputs=e,this.transforms=t}get(){return this._value||(this._value=this._get())}_get(){let e="",t=!0;return Tb(this.inputs,((n,o)=>{const r=_k(n[0]),[i,s]=this.transforms[o](jb.arr(r)?r:n.map(_k));e+=" "+i,t=t&&s})),t?"none":e}observerAdded(e){1==e&&Tb(this.inputs,(e=>Tb(e,(e=>vk(e)&&Ck(e,this)))))}observerRemoved(e){0==e&&Tb(this.inputs,(e=>Tb(e,(e=>vk(e)&&Bk(e,this)))))}eventObserved(e){"change"==e.type&&(this._value=null),yk(this,e)}}const L_=["scrollTop","scrollLeft"];Fb.assign({batchedUpdates:k_.unstable_batchedUpdates,createStringInterpolator:Dk,colors:{transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199}});const A_=((e,{applyAnimatedValues:t=()=>!1,createAnimatedStyle:n=e=>new Qk(e),getComponentProps:o=e=>e}={})=>{const r={applyAnimatedValues:t,createAnimatedStyle:n,getComponentProps:o},i=e=>{const t=sv(e)||"Anonymous";return(e=jb.str(e)?i[e]||(i[e]=ov(e,r)):e[iv]||(e[iv]=ov(e,r))).displayName=`Animated(${t})`,e};return Mb(e,((t,n)=>{jb.arr(e)&&(n=sv(t)),i[n]=i(t)})),{animated:i}})(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],{applyAnimatedValues:function(e,t){if(!e.nodeType||!e.setAttribute)return!1;const n="filter"===e.nodeName||e.parentNode&&"filter"===e.parentNode.nodeName,o=t,{style:r,children:i,scrollTop:s,scrollLeft:l}=o,a=v_(o,x_),c=Object.values(a),u=Object.keys(a).map((t=>n||e.hasAttribute(t)?t:w_[t]||(w_[t]=t.replace(/([A-Z])/g,(e=>"-"+e.toLowerCase())))));void 0!==i&&(e.textContent=i);for(let t in r)if(r.hasOwnProperty(t)){const n=S_(t,r[t]);y_.test(t)?e.style.setProperty(t,n):e.style[t]=n}u.forEach(((t,n)=>{e.setAttribute(t,c[n])})),void 0!==s&&(e.scrollTop=s),void 0!==l&&(e.scrollLeft=l)},createAnimatedStyle:e=>new R_(e),getComponentProps:e=>v_(e,L_)}),D_=A_.animated;function O_(e){return{top:e.offsetTop,left:e.offsetLeft}}const z_=function({triggerAnimationOnChange:e,clientId:t}){const n=(0,a.useRef)(),{isTyping:o,getGlobalBlockCount:r,isBlockSelected:i,isFirstMultiSelectedBlock:s,isBlockMultiSelected:l,isAncestorMultiSelected:u}=(0,c.useSelect)(ri),{previous:d,prevRect:p}=(0,a.useMemo)((()=>({previous:n.current&&O_(n.current),prevRect:n.current&&n.current.getBoundingClientRect()})),[e]);return(0,a.useLayoutEffect)((()=>{if(!d||!n.current)return;const e=(0,ga.getScrollContainer)(n.current),a=i(t),c=a||s(t);function h(){if(c&&p){const t=n.current.getBoundingClientRect().top-p.top;t&&(e.scrollTop+=t)}}if(window.matchMedia("(prefers-reduced-motion: reduce)").matches||o()||r()>200)return void h();const g=a||l(t)||u(t)?"1":"",m=new i_({x:0,y:0,config:{mass:5,tension:2e3,friction:200},onChange({value:e}){if(!n.current)return;let{x:t,y:o}=e;t=Math.round(t),o=Math.round(o);const r=0===t&&0===o;n.current.style.transformOrigin="center center",n.current.style.transform=r?null:`translate3d(${t}px,${o}px,0)`,n.current.style.zIndex=g,h()}});n.current.style.transform=void 0;const f=O_(n.current),b=Math.round(d.left-f.left),k=Math.round(d.top-f.top);return m.start({x:0,y:0,from:{x:b,y:k}}),()=>{m.stop(),m.set({x:0,y:0})}}),[d,p,t,o,r,i,s,l,u]),n};function V_({clientId:e,initialPosition:t}){const n=(0,a.useRef)(),{isBlockSelected:o,isMultiSelecting:r,__unstableGetEditorMode:i}=(0,c.useSelect)(ri);return(0,a.useEffect)((()=>{if(!o(e)||r()||"zoom-out"===i())return;if(null==t)return;if(!n.current)return;const{ownerDocument:s}=n.current;if(Ag(n.current,s.activeElement))return;const l=ga.focus.tabbable.find(n.current).filter((e=>(0,ga.isTextField)(e))),a=-1===t,c=l[a?l.length-1:0]||n.current;if(Ag(n.current,c)){if(!n.current.getAttribute("contenteditable")){const e=ga.focus.tabbable.findNext(n.current);if(e&&Ag(n.current,e)&&(0,ga.isFormElement)(e))return void e.focus()}(0,ga.placeCaretAtHorizontalEdge)(c,a)}else n.current.focus()}),[t,e]),n}function F_({clientId:e}){const{hoverBlock:t}=(0,c.useDispatch)(ri);function n(n){if(n.defaultPrevented)return;const o="mouseover"===n.type?"add":"remove";n.preventDefault(),n.currentTarget.classList[o]("is-hovered"),t("add"===o?e:null)}return(0,u.useRefEffect)((e=>(e.addEventListener("mouseout",n),e.addEventListener("mouseover",n),()=>{e.removeEventListener("mouseout",n),e.removeEventListener("mouseover",n),e.classList.remove("is-hovered"),t(null)})),[])}function H_(e){const{isBlockSelected:t}=(0,c.useSelect)(ri),{selectBlock:n,selectionChange:o}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((r=>{function i(i){r.parentElement.closest('[contenteditable="true"]')||(t(e)?i.target.isContentEditable||o(e):Ag(r,i.target)&&n(e))}return r.addEventListener("focusin",i),()=>{r.removeEventListener("focusin",i)}}),[t,n])}function G_({clientId:e,isSelected:t}){const{getBlockRootClientId:n,getBlockIndex:o}=(0,c.useSelect)(ri),{insertAfterBlock:r,removeBlock:i}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((n=>{if(t)return n.addEventListener("keydown",o),n.addEventListener("dragstart",s),()=>{n.removeEventListener("keydown",o),n.removeEventListener("dragstart",s)};function o(t){const{keyCode:o,target:s}=t;o!==fa.ENTER&&o!==fa.BACKSPACE&&o!==fa.DELETE||s!==n||(0,ga.isTextField)(s)||(t.preventDefault(),o===fa.ENTER?r(e):i(e))}function s(e){e.preventDefault()}}),[e,t,n,o,r,i])}function $_(e){const{isNavigationMode:t,isBlockSelected:n}=(0,c.useSelect)(ri),{setNavigationMode:o,selectBlock:r}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((i=>{function s(i){t()&&!i.defaultPrevented&&(i.preventDefault(),n(e)?o(!1):r(e))}return i.addEventListener("mousedown",s),()=>{i.removeEventListener("mousedown",s)}}),[e,t,n,o])}function U_({editorMode:e}){const{getSettings:t,isZoomOut:n}=te((0,c.useSelect)(ri)),{__unstableSetEditorMode:o,resetZoomLevel:r}=te((0,c.useDispatch)(ri));return(0,u.useRefEffect)((i=>{if("zoom-out"===e&&n())return i.addEventListener("dblclick",s),()=>{i.removeEventListener("dblclick",s)};function s(e){if(!e.defaultPrevented){e.preventDefault();const{__experimentalSetIsInserterOpened:n}=t();"function"==typeof n&&n(!1),o("edit"),r()}}}),[e,t,o])}function W_(){const e=(0,a.useContext)(Gx);return(0,u.useRefEffect)((t=>{if(e)return e.observe(t),()=>{e.unobserve(t)}}),[e])}function K_({isSelected:e}){const t=(0,u.useReducedMotion)();return(0,u.useRefEffect)((n=>{if(e){const{ownerDocument:e}=n,{defaultView:o}=e;if(!o.IntersectionObserver)return;const r=new o.IntersectionObserver((e=>{e[0].isIntersecting||n.scrollIntoView({behavior:t?"instant":"smooth"}),r.disconnect()}));return r.observe(n),()=>{r.disconnect()}}}),[e])}function Z_({clientId:e="",isEnabled:t=!0}={}){const{getEnabledClientIdsTree:n}=te((0,c.useSelect)(ri));return(0,u.useRefEffect)((o=>{if(!t)return;const r=t=>{(t.target===o||t.target.classList.contains("is-root-container"))&&(t.defaultPrevented||(t.preventDefault(),n(e).forEach((({clientId:e})=>{const t=o.querySelector(`[data-block="${e}"]`);t&&(t.classList.remove("has-editable-outline"),t.offsetWidth,t.classList.add("has-editable-outline"))}))))};return o.addEventListener("click",r),()=>o.removeEventListener("click",r)}),[t])}const q_={"core/paragraph":["content"],"core/heading":["content"],"core/image":["id","url","title","alt"],"core/button":["url","text","linkTarget","rel"]},Y_="__default";function X_(e){return e in q_}function Q_(e,t){return X_(e)&&q_[e].includes(t)}const J_=(0,u.createHigherOrderComponent)((e=>t=>{const n=(0,c.useRegistry)(),o=(0,a.useContext)(Gf),r=(0,c.useSelect)((e=>te(e(l.store)).getAllBlockBindingsSources())),{name:i,clientId:s,context:u,setAttributes:d}=t,p=(0,a.useMemo)((()=>function(e,t){if("core/pattern-overrides"===t?.[Y_]?.source){const n=q_[e],o={};for(const e of n){const n=t[e]?t[e]:{source:"core/pattern-overrides"};o[e]=n}return o}return t}(i,t.attributes.metadata?.bindings)),[t.attributes.metadata?.bindings,i]),h={},g=(0,c.useSelect)((()=>{if(!p)return;const e={},t=new Map;for(const[e,n]of Object.entries(p)){const{source:s,args:l}=n,a=r[s];if(a&&Q_(i,e)){for(const e of a.usesContext||[])h[e]=o[e];t.set(a,{...t.get(a),[e]:{args:l}})}}if(t.size)for(const[o,r]of t){let t={};o.getValues?t=o.getValues({registry:n,context:h,clientId:s,bindings:r}):Object.keys(r).forEach((e=>{t[e]=o.label}));for(const[n,o]of Object.entries(t))"url"!==n||o&&nc(o)?e[n]=o:e[n]=null}return e}),[p,i,s,h,n,r]),m=!!h["pattern/overrides"],f="core/pattern-overrides"===t.attributes.metadata?.bindings?.[Y_]?.source,b=(0,a.useCallback)((e=>{n.batch((()=>{if(!p)return void d(e);const t={...e},o=new Map;for(const[e,n]of Object.entries(t)){if(!p[e]||!Q_(i,e))continue;const s=p[e],l=r[s?.source];l?.setValues&&(o.set(l,{...o.get(l),[e]:{args:s.args,newValue:n}}),delete t[e])}if(o.size)for(const[e,t]of o)e.setValues({registry:n,context:h,clientId:s,bindings:t});f&&m||!Object.keys(t).length||(f&&(delete t?.caption,delete t?.href),d(t))}))}),[n,p,i,s,h,d,r,f,m]);return(0,$.jsx)($.Fragment,{children:(0,$.jsx)(e,{...t,attributes:{...t.attributes,...g},setAttributes:b,context:{...u,...h}})})}),"withBlockBindingSupport");function ex(e={},{__unstableIsHtml:t}={}){const{clientId:n,className:o,wrapperProps:r={},isAligned:i,index:s,mode:l,name:c,blockApiVersion:d,blockTitle:p,editorMode:h,isSelected:g,isSubtreeDisabled:f,hasOverlay:b,initialPosition:k,blockEditingMode:v,isHighlighted:x,isMultiSelected:y,isPartiallySelected:S,isReusable:w,isDragging:B,hasChildSelected:I,isBlockMovingMode:j,canInsertMovingBlock:E,isEditingDisabled:T,hasEditableOutline:M,isTemporarilyEditingAsBlocks:P,defaultClassName:R,templateLock:N}=(0,a.useContext)(Yf),L=(0,C.sprintf)((0,C.__)("Block: %s"),p),A="html"!==l||t?"":"-visual",D=(0,u.useMergeRefs)([e.ref,V_({clientId:n,initialPosition:k}),up(n),H_(n),G_({clientId:n,isSelected:g}),$_(n),U_({editorMode:h}),F_({clientId:n}),W_(),z_({triggerAnimationOnChange:s,clientId:n}),(0,u.useDisabled)({isDisabled:!b}),Z_({clientId:n,isEnabled:"core/block"===c||"contentOnly"===N}),K_({isSelected:g})]),O=_(),z=O[m]&&X_(c)?{"--wp-admin-theme-color":"var(--wp-block-synced-color)","--wp-admin-theme-color--rgb":"var(--wp-block-synced-color--rgb)"}:{}; // translators: %s: Type of block (i.e. Text, Image etc) d<2&&O.clientId;let V=!1;return"-"!==r?.style?.marginTop?.charAt(0)&&"-"!==r?.style?.marginBottom?.charAt(0)&&"-"!==r?.style?.marginLeft?.charAt(0)&&"-"!==r?.style?.marginRight?.charAt(0)||(V=!0),{tabIndex:"disabled"===v?-1:0,...r,...e,ref:D,id:`block-${n}${A}`,role:"document","aria-label":L,"data-block":n,"data-type":c,"data-title":p,inert:f?"true":void 0,className:Ui("block-editor-block-list__block",{"wp-block":!i,"has-block-overlay":b,"is-selected":g,"is-highlighted":x,"is-multi-selected":y,"is-partially-selected":S,"is-reusable":w,"is-dragging":B,"has-child-selected":I,"is-block-moving-mode":j,"can-insert-moving-block":E,"is-editing-disabled":T,"has-editable-outline":M,"has-negative-margin":V,"is-content-locked-temporarily-editing-as-blocks":P},o,e.className,r.className,R),style:{...r.style,...e.style,...z}}}function tx({children:e,isHtml:t,...n}){return(0,$.jsx)("div",{...ex(n,{__unstableIsHtml:t}),children:e})}function nx({block:{__unstableBlockSource:e},mode:t,isLocked:n,canRemove:o,clientId:r,isSelected:i,isSelectionEnabled:s,className:u,__unstableLayoutClassNames:d,name:p,isValid:h,attributes:g,wrapperProps:m,setAttributes:f,onReplace:b,onInsertBlocksAfter:k,onMerge:v,toggleSelection:_}){var x;const{mayDisplayControls:y,mayDisplayParentControls:S,themeSupportsLayout:w,...C}=(0,a.useContext)(Yf),{removeBlock:B}=(0,c.useDispatch)(ri),I=(0,a.useCallback)((()=>B(r)),[r,B]),j=Il()||{};let E=(0,$.jsx)(Xf,{name:p,isSelected:i,attributes:g,setAttributes:f,insertBlocksAfter:n?void 0:k,onReplace:o?b:void 0,onRemove:o?I:void 0,mergeBlocks:o?v:void 0,clientId:r,isSelectionEnabled:s,toggleSelection:_,__unstableLayoutClassNames:d,__unstableParentLayout:Object.keys(j).length?j:void 0,mayDisplayControls:y,mayDisplayParentControls:S,blockEditingMode:C.blockEditingMode,isPreviewMode:C.isPreviewMode});const T=(0,l.getBlockType)(p);T?.getEditWrapperProps&&(m=function(e,t){const n={...e,...t};return e?.hasOwnProperty("className")&&t?.hasOwnProperty("className")&&(n.className=Ui(e.className,t.className)),e?.hasOwnProperty("style")&&t?.hasOwnProperty("style")&&(n.style={...e.style,...t.style}),n}(m,T.getEditWrapperProps(g)));const M=m&&!!m["data-align"]&&!w,P=u?.includes("is-position-sticky");let R;if(M&&(E=(0,$.jsx)("div",{className:Ui("wp-block",P&&u),"data-align":m["data-align"],children:E})),h)R="html"===t?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)("div",{style:{display:"none"},children:E}),(0,$.jsx)(tx,{isHtml:!0,children:(0,$.jsx)(ab,{clientId:r})})]}):T?.apiVersion>1?E:(0,$.jsx)(tx,{children:E});else{const t=e?(0,l.serializeRawBlock)(e):(0,l.getSaveContent)(T,g);R=(0,$.jsxs)(tx,{className:"has-warning",children:[(0,$.jsx)(nb,{clientId:r}),(0,$.jsx)(a.RawHTML,{children:(0,ga.safeHTML)(t)})]})}const{"data-align":N,...L}=null!==(x=m)&&void 0!==x?x:{},A={...L,className:Ui(L.className,N&&w&&`align${N}`,!(N&&P)&&u)};return(0,$.jsx)(Yf.Provider,{value:{wrapperProps:A,isAligned:M,...C},children:(0,$.jsx)(sb,{fallback:(0,$.jsx)(tx,{className:"has-warning",children:(0,$.jsx)(rb,{})}),children:R})})}(0,d.addFilter)("blocks.registerBlockType","core/editor/custom-sources-backwards-compatibility/shim-attribute-source",(function(e,t){return X_(t)?{...e,edit:J_(e.edit)}:e})),ex.save=l.__unstableGetBlockProps;const ox=(0,c.withDispatch)(((e,t,n)=>{const{updateBlockAttributes:o,insertBlocks:r,mergeBlocks:i,replaceBlocks:s,toggleSelection:a,__unstableMarkLastChangeAsPersistent:c,moveBlocksToPosition:u,removeBlock:d,selectBlock:p}=e(ri);return{setAttributes(e){const{getMultiSelectedBlockClientIds:r}=n.select(ri),i=r(),{clientId:s}=t,l=i.length?i:[s];o(l,e)},onInsertBlocks(e,n){const{rootClientId:o}=t;r(e,n,o)},onInsertBlocksAfter(e){const{clientId:o,rootClientId:i}=t,{getBlockIndex:s}=n.select(ri),l=s(o);r(e,l+1,i)},onMerge(e){const{clientId:o,rootClientId:a}=t,{getPreviousBlockClientId:c,getNextBlockClientId:h,getBlock:g,getBlockAttributes:m,getBlockName:f,getBlockOrder:b,getBlockIndex:k,getBlockRootClientId:v,canInsertBlockType:_}=n.select(ri);function x(){const e=g(o),t=(0,l.getDefaultBlockName)();if(f(o)!==t){const n=(0,l.switchToBlockType)(e,t);n&&n.length&&s(o,n)}else if((0,l.isUnmodifiedDefaultBlock)(e)){const e=h(o);e&&n.batch((()=>{d(o),p(e)}))}}function y(e,t=!0){const o=v(e),i=b(e),[s]=i;1===i.length&&(0,l.isUnmodifiedBlock)(g(s))?d(e):n.batch((()=>{if(_(f(s),o))u([s],e,o,k(e));else{const n=(0,l.switchToBlockType)(g(s),(0,l.getDefaultBlockName)());n&&n.length&&n.every((e=>_(e.name,o)))?(r(n,k(e),o,t),d(s,!1)):x()}!b(e).length&&(0,l.isUnmodifiedBlock)(g(e))&&d(e,!1)}))}if(e){if(a){const e=h(a);if(e){if(f(a)!==f(e))return void i(a,e);{const t=m(a),o=m(e);if(Object.keys(t).every((e=>t[e]===o[e])))return void n.batch((()=>{u(b(e),e,a),d(e,!1)}))}}}const e=h(o);if(!e)return;b(e).length?y(e,!1):i(o,e)}else{const e=c(o);if(e)i(e,o);else if(a){const e=c(a);if(e&&f(a)===f(e)){const t=m(a),o=m(e);if(Object.keys(t).every((e=>t[e]===o[e])))return void n.batch((()=>{u(b(a),a,e),d(a,!1)}))}y(a)}else x()}},onReplace(e,n,o){e.length&&!(0,l.isUnmodifiedDefaultBlock)(e[e.length-1])&&c();const r=1===e?.length&&Array.isArray(e[0])?e[0]:e;s([t.clientId],r,n,o)},toggleSelection(e){a(e)}}}));nx=(0,u.compose)(ox,(0,es.withFilters)("editor.BlockListBlock"))(nx);const rx=(0,a.memo)((function(e){const{clientId:t,rootClientId:n}=e,o=(0,c.useSelect)((e=>{const{isBlockSelected:o,getBlockMode:r,isSelectionEnabled:i,getTemplateLock:s,getBlockWithoutAttributes:a,getBlockAttributes:c,canRemoveBlock:u,canMoveBlock:d,getSettings:p,getTemporarilyEditingAsBlocks:h,getBlockEditingMode:g,getBlockName:m,isFirstMultiSelectedBlock:f,getMultiSelectedBlockClientIds:b,hasSelectedInnerBlock:k,getBlocksByName:v,getBlockIndex:_,isBlockMultiSelected:x,isBlockSubtreeDisabled:y,isBlockHighlighted:S,__unstableIsFullySelected:w,__unstableSelectionHasUnmergeableBlock:C,isBlockBeingDragged:B,isDragging:I,hasBlockMovingClientId:j,canInsertBlockType:E,__unstableHasActiveBlockOverlayActive:T,__unstableGetEditorMode:M,getSelectedBlocksInitialCaretPosition:P}=te(e(ri)),R=a(t);if(!R)return;const{hasBlockSupport:N,getActiveBlockVariation:L}=e(l.store),A=c(t),{name:D,isValid:O}=R,z=(0,l.getBlockType)(D),{supportsLayout:V,__unstableIsPreviewMode:F}=p(),H=z?.apiVersion>1,G={isPreviewMode:F,blockWithoutAttributes:R,name:D,attributes:A,isValid:O,themeSupportsLayout:V,index:_(t),isReusable:(0,l.isReusableBlock)(z),className:H?A.className:void 0,defaultClassName:H?(0,l.getBlockDefaultClassName)(D):void 0,blockTitle:z?.title};if(F)return G;const $=o(t),U=u(t),W=d(t),K=L(D,A),Z=x(t),q=k(t,!0),Y=j(),X=g(t),Q=(0,l.hasBlockSupport)(D,"multiple",!0)?[]:v(D),J=Q.length&&Q[0]!==t,ee=M();return{...G,mode:r(t),isSelectionEnabled:i(),isLocked:!!s(n),templateLock:s(t),canRemove:U,canMove:W,isSelected:$,isTemporarilyEditingAsBlocks:h()===t,blockEditingMode:X,mayDisplayControls:$||f(t)&&b().every((e=>m(e)===D)),mayDisplayParentControls:N(m(t),"__experimentalExposeControlsToChildren",!1)&&k(t),blockApiVersion:z?.apiVersion||1,blockTitle:K?.title||z?.title,editorMode:ee,isSubtreeDisabled:"disabled"===X&&y(t),hasOverlay:T(t)&&!I(),initialPosition:!$||"edit"!==ee&&"zoom-out"!==ee?void 0:P(),isHighlighted:S(t),isMultiSelected:Z,isPartiallySelected:Z&&!w()&&!C(),isDragging:B(t),hasChildSelected:q,isBlockMovingMode:!!Y,canInsertMovingBlock:Y&&E(m(Y),n),isEditingDisabled:"disabled"===X,hasEditableOutline:"disabled"!==X&&"disabled"===g(n),originalBlockClientId:!!J&&Q[0]}}),[t,n]),{isPreviewMode:r,mode:i="visual",isSelectionEnabled:s=!1,isLocked:u=!1,canRemove:d=!1,canMove:p=!1,blockWithoutAttributes:h,name:g,attributes:m,isValid:f,isSelected:b=!1,themeSupportsLayout:k,isTemporarilyEditingAsBlocks:v,blockEditingMode:_,editorMode:x,mayDisplayControls:y,mayDisplayParentControls:S,index:w,blockApiVersion:C,blockTitle:B,isSubtreeDisabled:I,hasOverlay:j,initialPosition:E,isHighlighted:T,isMultiSelected:M,isPartiallySelected:P,isReusable:R,isDragging:N,hasChildSelected:L,isBlockMovingMode:A,canInsertMovingBlock:D,templateLock:O,isEditingDisabled:z,hasEditableOutline:V,className:F,defaultClassName:H,originalBlockClientId:G}=o,U=(0,a.useMemo)((()=>({...h,attributes:m})),[h,m]);if(!o)return null;const W={isPreviewMode:r,clientId:t,className:F,index:w,mode:i,name:g,blockApiVersion:C,blockTitle:B,isSelected:b,isSubtreeDisabled:I,hasOverlay:j,initialPosition:E,blockEditingMode:_,editorMode:x,isHighlighted:T,isMultiSelected:M,isPartiallySelected:P,isReusable:R,isDragging:N,hasChildSelected:L,isBlockMovingMode:A,canInsertMovingBlock:D,templateLock:O,isEditingDisabled:z,hasEditableOutline:V,isTemporarilyEditingAsBlocks:v,defaultClassName:H,mayDisplayControls:y,mayDisplayParentControls:S,originalBlockClientId:G,themeSupportsLayout:k};return(0,$.jsx)(Yf.Provider,{value:W,children:(0,$.jsx)(nx,{...e,mode:i,isSelectionEnabled:s,isLocked:u,canRemove:d,canMove:p,block:U,name:g,attributes:m,isValid:f,isSelected:b})})})),ix=window.wp.htmlEntities,sx="\ufeff";function lx({rootClientId:e}){const{showPrompt:t,isLocked:n,placeholder:o,isManualGrid:r}=(0,c.useSelect)((t=>{const{getBlockCount:n,getSettings:o,getTemplateLock:r,getBlockAttributes:i}=t(ri),s=!n(e),{bodyPlaceholder:l}=o();return{showPrompt:s,isLocked:!!r(e),placeholder:l,isManualGrid:i(e)?.layout?.isManualPlacement}}),[e]),{insertDefaultBlock:i,startTyping:s}=(0,c.useDispatch)(ri);if(n||r)return null;const l=(0,ix.decodeEntities)(o)||(0,C.__)("Type / to choose a block"),a=()=>{i(void 0,e),s()};return(0,$.jsxs)("div",{"data-root-client-id":e||"",className:Ui("block-editor-default-block-appender",{"has-visible-prompt":t}),children:[(0,$.jsx)("p",{tabIndex:"0",role:"button","aria-label":(0,C.__)("Add default block"),className:"block-editor-default-block-appender__content",onKeyDown:e=>{fa.ENTER!==e.keyCode&&fa.SPACE!==e.keyCode||a()},onClick:()=>a(),onFocus:()=>{t&&a()},children:t?l:sx}),(0,$.jsx)(Ow,{rootClientId:e,position:"bottom right",isAppender:!0,__experimentalIsQuick:!0})]})}function ax({rootClientId:e}){return(0,c.useSelect)((t=>t(ri).canInsertBlockType((0,l.getDefaultBlockName)(),e)))?(0,$.jsx)(lx,{rootClientId:e}):(0,$.jsx)(Fw,{rootClientId:e,className:"block-list-appender__toggle"})}function cx({rootClientId:e,CustomAppender:t,className:n,tagName:o="div"}){const r=(0,c.useSelect)((t=>{const{getBlockInsertionPoint:n,isBlockInsertionPointVisible:o,getBlockCount:r}=t(ri),i=n();return o()&&e===i?.rootClientId&&0===r(e)}),[e]);return(0,$.jsx)(o,{tabIndex:-1,className:Ui("block-list-appender wp-block",n,{"is-drag-over":r}),contentEditable:!1,"data-block":!0,children:t?(0,$.jsx)(t,{}):(0,$.jsx)(ax,{rootClientId:e})})}const ux=Number.MAX_SAFE_INTEGER;(0,a.createContext)();const dx=function({previousClientId:e,nextClientId:t,children:n,__unstablePopoverSlot:o,__unstableContentRef:r,operation:i="insert",nearestSide:s="right",...l}){const[u,d]=(0,a.useReducer)((e=>(e+1)%ux),0),{orientation:p,rootClientId:h,isVisible:g}=(0,c.useSelect)((n=>{const{getBlockListSettings:o,getBlockRootClientId:r,isBlockVisible:i}=n(ri),s=r(null!=e?e:t);return{orientation:o(s)?.orientation||"vertical",rootClientId:s,isVisible:i(e)&&i(t)}}),[e,t]),m=hp(e),f=hp(t),b="vertical"===p,k=(0,a.useMemo)((()=>{if(!(u<0||!m&&!f)&&g)return{contextElement:"group"===i?f||m:m||f,getBoundingClientRect(){const e=m?m.getBoundingClientRect():null,t=f?f.getBoundingClientRect():null;let n=0,o=0,r=0,l=0;if("group"===i){const i=t||e;o=i.top,r=0,l=i.bottom-i.top,n="left"===s?i.left-2:i.right-2}else b?(o=e?e.bottom:t.top,r=e?e.width:t.width,l=t&&e?t.top-e.bottom:0,n=e?e.left:t.left):(o=e?e.top:t.top,l=e?e.height:t.height,(0,C.isRTL)()?(n=t?t.right:e.left,r=e&&t?e.left-t.right:0):(n=e?e.right:t.left,r=e&&t?t.left-e.right:0));return new window.DOMRect(n,o,r,l)}}}),[m,f,u,b,g,i,s]),v=Mg(r);return(0,a.useLayoutEffect)((()=>{if(!m)return;const e=new window.MutationObserver(d);return e.observe(m,{attributes:!0}),()=>{e.disconnect()}}),[m]),(0,a.useLayoutEffect)((()=>{if(!f)return;const e=new window.MutationObserver(d);return e.observe(f,{attributes:!0}),()=>{e.disconnect()}}),[f]),(0,a.useLayoutEffect)((()=>{if(m)return m.ownerDocument.defaultView.addEventListener("resize",d),()=>{m.ownerDocument.defaultView?.removeEventListener("resize",d)}}),[m]),(m||f)&&g?(0,$.jsx)(es.Popover,{ref:v,animate:!1,anchor:k,focusOnMount:!1,__unstableSlotName:o,inline:!o,...l,className:Ui("block-editor-block-popover","block-editor-block-popover__inbetween",l.className),resize:!1,flip:!1,placement:"overlay",variant:"unstyled",children:(0,$.jsx)("div",{className:"block-editor-block-popover__inbetween-container",children:n})},t+"--"+h):null},px={hide:{opacity:0,scaleY:.75},show:{opacity:1,scaleY:1},exit:{opacity:0,scaleY:.9}},hx=function({__unstablePopoverSlot:e,__unstableContentRef:t}){const{clientId:n}=(0,c.useSelect)((e=>{const{getBlockOrder:t,getBlockInsertionPoint:n}=e(ri),o=n(),r=t(o.rootClientId);return r.length?{clientId:r[o.index]}:{}}),[]),o=(0,u.useReducedMotion)();return(0,$.jsx)(Ug,{clientId:n,__unstablePopoverSlot:e,__unstableContentRef:t,className:"block-editor-block-popover__drop-zone",children:(0,$.jsx)(es.__unstableMotion.div,{"data-testid":"block-popover-drop-zone",initial:o?px.show:px.hide,animate:px.show,exit:o?px.show:px.exit,className:"block-editor-block-popover__drop-zone-foreground"})})},gx=(0,a.createContext)();function mx({__unstablePopoverSlot:e,__unstableContentRef:t,operation:n="insert",nearestSide:o="right"}){const{selectBlock:r,hideInsertionPoint:i}=(0,c.useDispatch)(ri),s=(0,a.useContext)(gx),l=(0,a.useRef)(),{orientation:d,previousClientId:p,nextClientId:h,rootClientId:g,isInserterShown:m,isDistractionFree:f,isNavigationMode:b,isZoomOutMode:k}=(0,c.useSelect)((e=>{const{getBlockOrder:t,getBlockListSettings:n,getBlockInsertionPoint:o,isBlockBeingDragged:r,getPreviousBlockClientId:i,getNextBlockClientId:s,getSettings:l,isNavigationMode:a,__unstableGetEditorMode:c}=e(ri),u=o(),d=t(u.rootClientId);if(!d.length)return{};let p=d[u.index-1],h=d[u.index];for(;r(p);)p=i(p);for(;r(h);)h=s(h);const g=l();return{previousClientId:p,nextClientId:h,orientation:n(u.rootClientId)?.orientation||"vertical",rootClientId:u.rootClientId,isNavigationMode:a(),isDistractionFree:g.isDistractionFree,isInserterShown:u?.__unstableWithInserter,isZoomOutMode:"zoom-out"===c()}}),[]),{getBlockEditingMode:v}=(0,c.useSelect)(ri),_=(0,u.useReducedMotion)(),x={start:{opacity:0,scale:0},rest:{opacity:1,scale:1,transition:{delay:m?.5:0,type:"tween"}},hover:{opacity:1,scale:1,transition:{delay:.5,type:"tween"}}},y={start:{scale:_?1:0},rest:{scale:1,transition:{delay:.4,type:"tween"}}};if(f&&!b)return null;if(k&&"insert"!==n)return null;const S=Ui("block-editor-block-list__insertion-point","horizontal"===d||"group"===n?"is-horizontal":"is-vertical");return(0,$.jsx)(dx,{previousClientId:p,nextClientId:h,__unstablePopoverSlot:e,__unstableContentRef:t,operation:n,nearestSide:o,children:(0,$.jsxs)(es.__unstableMotion.div,{layout:!_,initial:_?"rest":"start",animate:"rest",whileHover:"hover",whileTap:"pressed",exit:"start",ref:l,tabIndex:-1,onClick:function(e){e.target===l.current&&h&&"disabled"!==v(h)&&r(h,-1)},onFocus:function(e){e.target!==l.current&&(s.current=!0)},className:Ui(S,{"is-with-inserter":m}),onHoverEnd:function(e){e.target!==l.current||s.current||i()},children:[(0,$.jsx)(es.__unstableMotion.div,{variants:x,className:"block-editor-block-list__insertion-point-indicator","data-testid":"block-list-insertion-point-indicator"}),m&&(0,$.jsx)(es.__unstableMotion.div,{variants:y,className:Ui("block-editor-block-list__insertion-point-inserter"),children:(0,$.jsx)(Ow,{position:"bottom center",clientId:h,rootClientId:g,__experimentalIsQuick:!0,onToggle:e=>{s.current=e},onSelectOrClose:()=>{s.current=!1}})})]})})}function fx(e){const{insertionPoint:t,isVisible:n,isBlockListEmpty:o}=(0,c.useSelect)((e=>{const{getBlockInsertionPoint:t,isBlockInsertionPointVisible:n,getBlockCount:o}=e(ri),r=t();return{insertionPoint:r,isVisible:n(),isBlockListEmpty:0===o(r?.rootClientId)}}),[]);return!n||o?null:"replace"===t.operation?(0,$.jsx)(hx,{...e},`${t.rootClientId}-${t.index}`):(0,$.jsx)(mx,{operation:t.operation,nearestSide:t.nearestSide,...e})}function bx(){const e=(0,a.useContext)(gx),t=(0,c.useSelect)((e=>e(ri).getSettings().isDistractionFree||"zoom-out"===e(ri).__unstableGetEditorMode()),[]),{getBlockListSettings:n,getBlockIndex:o,isMultiSelecting:r,getSelectedBlockClientIds:i,getSettings:s,getTemplateLock:l,__unstableIsWithinBlockOverlay:d,getBlockEditingMode:p,getBlockName:h,getBlockAttributes:g}=(0,c.useSelect)(ri),{showInsertionPoint:m,hideInsertionPoint:f}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((a=>{if(!t)return a.addEventListener("mousemove",c),()=>{a.removeEventListener("mousemove",c)};function c(t){if(void 0===e||e.current)return;if(t.target.nodeType===t.target.TEXT_NODE)return;if(r())return;if(!t.target.classList.contains("block-editor-block-list__layout"))return void f();let a;if(t.target.classList.contains("is-root-container")||(a=(t.target.getAttribute("data-block")?t.target:t.target.closest("[data-block]")).getAttribute("data-block")),l(a)||"disabled"===p(a)||"core/block"===h(a)||a&&g(a).layout?.isManualPlacement)return;const c=n(a),u=c?.orientation||"vertical",b=!!c?.__experimentalCaptureToolbars,k=t.clientY,v=t.clientX;let _=Array.from(t.target.children).find((e=>{const t=e.getBoundingClientRect();return e.classList.contains("wp-block")&&"vertical"===u&&t.top>k||e.classList.contains("wp-block")&&"horizontal"===u&&((0,C.isRTL)()?t.rightv)}));if(!_)return void f();if(!_.id&&(_=_.firstElementChild,!_))return void f();const x=_.id.slice(6);if(!x||d(x))return;if(i().includes(x)&&"vertical"===u&&!b&&!s().hasFixedToolbar)return;const y=_.getBoundingClientRect();if("horizontal"===u&&(t.clientY>y.bottom||t.clientYy.right||t.clientX{if(r)return e.addEventListener("mousedown",i),()=>{e.removeEventListener("mousedown",i)};function i(r){(t()||n())&&r.target===e&&o()}}),[t,n,o,r])}function vx(e){return(0,$.jsx)("div",{ref:kx(),...e})}const xx=new WeakMap;function yx(e,t,n={}){const{operation:o="insert",nearestSide:r="right"}=n,{canInsertBlockType:i,getBlockIndex:s,getClientIdsOfDescendants:u,getBlockOrder:d,getBlocksByClientId:p,getSettings:h,getBlock:g}=(0,c.useSelect)(ri),{getGroupingBlockName:m}=(0,c.useSelect)(l.store),{insertBlocks:f,moveBlocksToPosition:b,updateBlockAttributes:k,clearSelectedBlock:v,replaceBlocks:_,removeBlocks:x}=(0,c.useDispatch)(ri),y=(0,c.useRegistry)(),S=(0,a.useCallback)(((n,s=!0,a=0,c=[])=>{Array.isArray(n)||(n=[n]);const u=d(e)[t];if("replace"===o)_(u,n,void 0,a);else if("group"===o){const t=g(u);"left"===r?n.push(t):n.unshift(t);const o=n.map((e=>(0,l.createBlock)(e.name,e.attributes,e.innerBlocks))),s=n.every((e=>"core/image"===e.name)),d=i("core/gallery",e),p=(0,l.createBlock)(s&&d?"core/gallery":m(),{layout:{type:"flex",flexWrap:s&&d?null:"nowrap"}},o);_([u,...c],p,void 0,a)}else f(n,t,e,s,a)}),[d,e,t,o,_,g,r,i,m,f]),w=(0,a.useCallback)(((n,r,i)=>{if("replace"===o){const o=p(n),r=d(e)[t];y.batch((()=>{x(n,!1),_(r,o,void 0,0)}))}else b(n,r,e,i)}),[o,d,p,b,y,x,_,t,e]),C=function(e,t,n,o,r,i,s,a,c){return u=>{const{srcRootClientId:d,srcClientIds:p,type:h,blocks:g}=function(e){let t={srcRootClientId:null,srcClientIds:null,srcIndex:null,type:null,blocks:null};if(!e.dataTransfer)return t;try{t=Object.assign(t,JSON.parse(e.dataTransfer.getData("wp-blocks")))}catch(e){return t}return t}(u);if("inserter"===h){s();const e=g.map((e=>(0,l.cloneBlock)(e)));i(e,!0,null)}if("block"===h){const s=n(p[0]);if(d===e&&s===t)return;if(p.includes(e)||o(p).some((t=>t===e)))return;if("group"===a){const e=p.map((e=>c(e)));return void i(e,!0,null,p)}const l=d===e,u=p.length;r(p,d,l&&s{if(!t().mediaUpload)return;const s=(0,l.findTransform)((0,l.getBlockTransforms)("from"),(t=>"files"===t.type&&o(t.blockName,e)&&t.isMatch(i)));if(s){const e=s.transform(i,n);r(e)}}}(e,h,k,i,S),I=function(e){return t=>{const n=(0,l.pasteHandler)({HTML:t,mode:"BLOCKS"});n.length&&e(n)}}(S);return e=>{const t=(0,ga.getFilesFromDataTransfer)(e.dataTransfer),n=e.dataTransfer.getData("text/html");n?I(n):t.length?B(t):C(e)}}function Sx(e,t,n=["top","bottom","left","right"]){let o,r;return n.forEach((n=>{const i=function(e,t,n){const o="top"===n||"bottom"===n,{x:r,y:i}=e,s=o?r:i,l=o?i:r,a=o?t.left:t.top,c=o?t.right:t.bottom,u=t[n];let d;return d=s>=a&&s<=c?s:s=e.x&&t.top<=e.y&&t.bottom>=e.y}const Cx=30,Bx=120,Ix=120;function jx(e,t,n,o){let r=!0;if(t){const e=t?.map((({name:e})=>e));r=n.every((t=>e?.includes(t)))}const i=n.map((t=>e(t))).every((e=>{const[t]=e?.parent||[];return!t||t===o}));return r&&i}function Ex(e,t){const{defaultView:n}=t;return!!(n&&e instanceof n.HTMLElement&&e.dataset.isInsertionPoint)}const Tx={};function Mx({children:e,clientId:t}){const n=function(e){return(0,c.useSelect)((t=>{const n=t(ri).getBlock(e);if(!n)return;const o=t(l.store).getBlockType(n.name);return o&&0!==Object.keys(o.providesContext).length?Object.fromEntries(Object.entries(o.providesContext).map((([e,t])=>[e,n.attributes[t]]))):void 0}),[e])}(t);return(0,$.jsx)(Hf,{value:n,children:e})}const Px=(0,a.memo)(Xx);function Rx(e){const{clientId:t,allowedBlocks:n,prioritizedInserterBlocks:o,defaultBlock:r,directInsert:i,__experimentalDefaultBlock:s,__experimentalDirectInsert:u,template:d,templateLock:p,wrapperRef:h,templateInsertUpdatesSelection:g,__experimentalCaptureToolbars:m,__experimentalAppenderTagName:f,renderAppender:b,orientation:k,placeholder:v,layout:_,name:x,blockType:S,parentLock:C,defaultLayout:B}=e;(function(e,t,n,o,r,i,s,l,u,d,p,h){const g=(0,c.useRegistry)(),m=function(e){const[t,n]=(0,a.useState)(e);return Sa()(t,e)||n(e),t}(n),f=(0,a.useMemo)((()=>o),o),b=void 0===u||"contentOnly"===t?t:u;(0,a.useLayoutEffect)((()=>{const t={allowedBlocks:m,prioritizedInserterBlocks:f,templateLock:b};if(void 0!==d&&(t.__experimentalCaptureToolbars=d),void 0!==p)t.orientation=p;else{const e=Sl(h?.type);t.orientation=e.getOrientation(h)}void 0!==s&&(y()("__experimentalDefaultBlock",{alternative:"defaultBlock",since:"6.3",version:"6.4"}),t.defaultBlock=s),void 0!==r&&(t.defaultBlock=r),void 0!==l&&(y()("__experimentalDirectInsert",{alternative:"directInsert",since:"6.3",version:"6.4"}),t.directInsert=l),void 0!==i&&(t.directInsert=i),void 0!==t.directInsert&&"boolean"!=typeof t.directInsert&&y()("Using `Function` as a `directInsert` argument",{alternative:"`boolean` values",since:"6.5"}),xx.get(g)||xx.set(g,{}),xx.get(g)[e]=t,window.queueMicrotask((()=>{const e=xx.get(g);if(Object.keys(e).length){const{updateBlockListSettings:t}=g.dispatch(ri);t(e),xx.set(g,{})}}))}),[e,m,f,b,r,i,s,l,d,p,h,g])})(t,C,n,o,r,i,s,u,p,m,k,_),function(e,t,n,o){const{getBlocks:r,getSelectedBlocksInitialCaretPosition:i,isBlockSelected:s}=(0,c.useSelect)(ri),{replaceInnerBlocks:u,__unstableMarkNextChangeAsNotPersistent:d}=(0,c.useDispatch)(ri),p=(0,a.useRef)(null);(0,a.useLayoutEffect)((()=>{let a=!1;return window.queueMicrotask((()=>{if(a)return;const c=r(e),h=0===c.length||"all"===n||"contentOnly"===n,g=!w()(t,p.current);if(!h||!g)return;p.current=t;const m=(0,l.synchronizeBlocksWithTemplate)(c,t);w()(m,c)||(d(),u(e,m,0===c.length&&o&&0!==m.length&&s(e),i()))})),()=>{a=!0}}),[t,n,e])}(t,d,p,g);const I=(0,l.getBlockSupport)(x,"layout")||(0,l.getBlockSupport)(x,"__experimentalLayout")||Tx,{allowSizingOnChildren:j=!1}=I,E=_||I,T=(0,a.useMemo)((()=>({...B,...E,...j&&{allowSizingOnChildren:!0}})),[B,E,j]),M=(0,$.jsx)(Px,{rootClientId:t,renderAppender:b,__experimentalAppenderTagName:f,layout:T,wrapperRef:h,placeholder:v});return S?.providesContext&&0!==Object.keys(S.providesContext).length?(0,$.jsx)(Mx,{clientId:t,children:M}):M}function Nx(e){return Lf(e),(0,$.jsx)(Rx,{...e})}const Lx=(0,a.forwardRef)(((e,t)=>{const n=Ax({ref:t},e);return(0,$.jsx)("div",{className:"block-editor-inner-blocks",children:(0,$.jsx)("div",{...n})})}));function Ax(e={},t={}){const{__unstableDisableLayoutClassNames:n,__unstableDisableDropZone:o,dropZoneElement:r}=t,{clientId:i,layout:s=null,__unstableLayoutClassNames:d=""}=_(),p=(0,c.useSelect)((e=>{const{getBlockName:t,isBlockSelected:n,hasSelectedInnerBlock:o,__unstableGetEditorMode:r,getTemplateLock:s,getBlockRootClientId:a,getBlockEditingMode:c,getBlockSettings:u,isDragging:d,getSectionRootClientId:p}=te(e(ri));let h;if(!i)return{isDropZoneDisabled:h};const{hasBlockSupport:g,getBlockType:m}=e(l.store),f=t(i),b="navigation"===r(),k=c(i),v=a(i),[_]=u(i,"layout");if(h="disabled"===k,"zoom-out"===r()){const e=p();h=i!==e}return{__experimentalCaptureToolbars:g(f,"__experimentalExposeControlsToChildren",!1),hasOverlay:"core/template"!==f&&!n(i)&&!o(i,!0)&&b&&!d(),name:f,blockType:m(f),parentLock:s(v),parentClientId:v,isDropZoneDisabled:h,defaultLayout:_}}),[i]),{__experimentalCaptureToolbars:h,hasOverlay:g,name:m,blockType:f,parentLock:b,parentClientId:k,isDropZoneDisabled:v,defaultLayout:x}=p,y=function({dropZoneElement:e,rootClientId:t="",parentClientId:n="",isDisabled:o=!1}={}){const r=(0,c.useRegistry)(),[i,s]=(0,a.useState)({index:null,operation:"insert"}),{getBlockType:d,getBlockVariations:p,getGroupingBlockName:h}=(0,c.useSelect)(l.store),{canInsertBlockType:g,getBlockListSettings:m,getBlocks:f,getBlockIndex:b,getDraggedBlockClientIds:k,getBlockNamesByClientId:v,getAllowedBlocks:_,isDragging:x,isGroupable:y,isZoomOutMode:S,getSectionRootClientId:w}=te((0,c.useSelect)(ri)),{showInsertionPoint:B,hideInsertionPoint:I,startDragging:j,stopDragging:E}=te((0,c.useDispatch)(ri)),T=yx("before"===i.operation||"after"===i.operation?n:t,i.index,{operation:i.operation,nearestSide:i.nearestSide}),M=(0,u.useThrottle)((0,a.useCallback)(((o,i)=>{x()||j();const a=_(t),c=v([t])[0],u=v(k());if(!jx(d,a,u,c))return;const I=w();if(S()&&I!==t)return;const E=f(t);if(0===E.length)return void r.batch((()=>{s({index:0,operation:"insert"}),B(t,0,{operation:"insert"})}));const T=E.map((e=>{const t=e.clientId;return{isUnmodifiedDefaultBlock:(0,l.isUnmodifiedDefaultBlock)(e),getBoundingClientRect:()=>i.getElementById(`block-${t}`).getBoundingClientRect(),blockIndex:b(t),blockOrientation:m(t)?.orientation}})),M=function(e,t,n="vertical",o={}){const r="horizontal"===n?["left","right"]:["top","bottom"];let i=0,s="before",l=1/0,a=null,c="right";const{dropZoneElement:u,parentBlockOrientation:d,rootBlockIndex:p=0}=o;if(u&&"horizontal"!==d){const e=u.getBoundingClientRect(),[n,o]=Sx(t,e,["top","bottom"]);if(e.height>Bx&&nIx&&n{const p=o();let[g,m]=Sx(t,p,r);const[f,b]=Sx(t,p,["left","right"]),k=wx(t,p);e&&k?g=0:"vertical"===n&&"horizontal"!==d&&(k&&f=e.y}(t,p))&&(a=u,c=b),g"core/image"===e)),o=g("core/gallery",t),r=y([e.clientId,k()]),i=p(h(),"block"),s=i&&i.find((({name:e})=>"group-row"===e));if(n&&!o&&(!r||!s))return;if(!(n||r&&s))return}r.batch((()=>{s({index:P,operation:R,nearestSide:N});const e=["before","after"].includes(R)?n:t;B(e,P,{operation:R,nearestSide:N})}))}}),[x,_,t,v,k,d,w,S,f,m,e,n,b,r,j,B,g,y,p,h]),200);return(0,u.__experimentalUseDropZone)({dropZoneElement:e,isDisabled:o,onDrop:T,onDragOver(e){M(e,e.currentTarget.ownerDocument)},onDragLeave(e){const{ownerDocument:t}=e.currentTarget;Ex(e.relatedTarget,t)||Ex(e.target,t)||(M.cancel(),I())},onDragEnd(){M.cancel(),E(),I()}})}({dropZoneElement:r,rootClientId:i,parentClientId:k}),S=(0,u.useMergeRefs)([e.ref,o||v||s?.isManualPlacement&&window.__experimentalEnableGridInteractivity?null:y]),w={__experimentalCaptureToolbars:h,layout:s,name:m,blockType:f,parentLock:b,defaultLayout:x,...t},B=w.value&&w.onChange?Nx:Rx;return{...e,ref:S,className:Ui(e.className,"block-editor-block-list__layout",n?"":d,{"has-overlay":g}),children:i?(0,$.jsx)(B,{...w,clientId:i}):(0,$.jsx)(Xx,{...t})}}Ax.save=l.__unstableGetInnerBlocksProps,Lx.DefaultBlockAppender=function(){const{clientId:e}=_();return(0,$.jsx)(lx,{rootClientId:e})},Lx.ButtonBlockAppender=function({showSeparator:e,isFloating:t,onAddBlock:n,isToggle:o}){const{clientId:r}=_();return(0,$.jsx)(Fw,{className:Ui({"block-list-appender__toggle":o}),rootClientId:r,showSeparator:e,isFloating:t,onAddBlock:n})},Lx.Content=()=>Ax.save().children;const Dx=Lx,Ox=new Set([fa.UP,fa.RIGHT,fa.DOWN,fa.LEFT,fa.ENTER,fa.BACKSPACE]);function zx(){const e=(0,c.useSelect)((e=>e(ri).isTyping()),[]),{stopTyping:t}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((n=>{if(!e)return;const{ownerDocument:o}=n;let r,i;function s(e){const{clientX:n,clientY:o}=e;r&&i&&(r!==n||i!==o)&&t(),r=n,i=o}return o.addEventListener("mousemove",s),()=>{o.removeEventListener("mousemove",s)}}),[e,t])}function Vx(){const{isTyping:e}=(0,c.useSelect)((e=>{const{isTyping:t}=e(ri);return{isTyping:t()}}),[]),{startTyping:t,stopTyping:n}=(0,c.useDispatch)(ri),o=zx(),r=(0,u.useRefEffect)((o=>{const{ownerDocument:r}=o,{defaultView:i}=r,s=i.getSelection();if(e){let a;function c(e){const{target:t}=e;a=i.setTimeout((()=>{(0,ga.isTextField)(t)||n()}))}function u(e){const{keyCode:t}=e;t!==fa.ESCAPE&&t!==fa.TAB||n()}function d(){s.isCollapsed||n()}return o.addEventListener("focus",c),o.addEventListener("keydown",u),r.addEventListener("selectionchange",d),()=>{i.clearTimeout(a),o.removeEventListener("focus",c),o.removeEventListener("keydown",u),r.removeEventListener("selectionchange",d)}}function l(e){const{type:n,target:r}=e;(0,ga.isTextField)(r)&&o.contains(r)&&("keydown"!==n||function(e){const{keyCode:t,shiftKey:n}=e;return!n&&Ox.has(t)}(e))&&t()}return o.addEventListener("keypress",l),o.addEventListener("keydown",l),()=>{o.removeEventListener("keypress",l),o.removeEventListener("keydown",l)}}),[e,t,n]);return(0,u.useMergeRefs)([o,r])}const Fx=function({children:e}){return(0,$.jsx)("div",{ref:Vx(),children:e})};function Hx({clientId:e,rootClientId:t="",position:n="top"}){const[o,r]=(0,a.useState)(!1),{sectionRootClientId:i,sectionClientIds:s,blockInsertionPoint:l,blockInsertionPointVisible:d}=(0,c.useSelect)((e=>{const{getBlockInsertionPoint:t,getBlockOrder:n,isBlockInsertionPointVisible:o,getSectionRootClientId:r}=te(e(ri)),i=r();return{sectionRootClientId:i,sectionClientIds:n(i),blockOrder:n(i),blockInsertionPoint:t(),blockInsertionPointVisible:o()}}),[]),p=(0,u.useReducedMotion)();if(!e)return;let h=!1;return t===i&&s&&s.includes(e)?("top"===n&&(h=d&&0===l.index&&e===s[l.index]),"bottom"===n&&(h=d&&e===s[l.index-1]),(0,$.jsx)(es.__unstableAnimatePresence,{children:h&&(0,$.jsx)(es.__unstableMotion.div,{as:"button",layout:!p,initial:{height:0},animate:{height:"120px"},exit:{height:0},transition:{type:"tween",duration:.2,ease:[.6,0,.4,1]},className:Ui("block-editor-block-list__zoom-out-separator",{"is-dragged-over":o}),"data-is-insertion-point":"true",onDragOver:()=>r(!0),onDragLeave:()=>r(!1)})})):null}const Gx=(0,a.createContext)(),$x=new WeakMap;function Ux({className:e,...t}){const n=(0,u.useViewportMatch)("medium"),{isOutlineMode:o,isFocusMode:r,editorMode:i,temporarilyEditingAsBlocks:s}=(0,c.useSelect)((e=>{const{getSettings:t,__unstableGetEditorMode:n,getTemporarilyEditingAsBlocks:o,isTyping:r}=te(e(ri)),{outlineMode:i,focusMode:s}=t();return{isOutlineMode:i&&!r(),isFocusMode:s,editorMode:n(),temporarilyEditingAsBlocks:o()}}),[]),l=(0,c.useRegistry)(),{setBlockVisibility:d}=(0,c.useDispatch)(ri),p=(0,u.useDebounce)((0,a.useCallback)((()=>{const e={};$x.get(l).forEach((([t,n])=>{e[t]=n})),d(e)}),[l]),300,{trailing:!0}),h=(0,a.useMemo)((()=>{const{IntersectionObserver:e}=window;if(e)return new e((e=>{$x.get(l)||$x.set(l,[]);for(const t of e){const e=t.target.getAttribute("data-block");$x.get(l).push([e,t.isIntersecting])}p()}))}),[]),g=Ax({ref:(0,u.useMergeRefs)([kx(),bx(),Vx()]),className:Ui("is-root-container",e,{"is-outline-mode":o,"is-focus-mode":r&&n,"is-navigate-mode":"navigation"===i})},t);return(0,$.jsxs)(Gx.Provider,{value:h,children:[(0,$.jsx)("div",{...g}),!!s&&(0,$.jsx)(Wx,{clientId:s})]})}function Wx({clientId:e}){const{stopEditingAsBlocks:t}=te((0,c.useDispatch)(ri)),n=(0,c.useSelect)((t=>{const{isBlockSelected:n,hasSelectedInnerBlock:o}=t(ri);return n(e)||o(e,!0)}),[e]);return(0,a.useEffect)((()=>{n||t(e)}),[n,e,t]),null}function Kx(e){return(0,$.jsx)(v,{value:b,children:(0,$.jsx)(Ux,{...e})})}const Zx=[],qx=new Set;function Yx({placeholder:e,rootClientId:t,renderAppender:n,__experimentalAppenderTagName:o,layout:r=wl}){const i=!1!==n,s=!!n,{order:l,isZoomOut:a,selectedBlocks:u,visibleBlocks:d,shouldRenderAppender:p}=(0,c.useSelect)((e=>{const{getSettings:n,getBlockOrder:o,getSelectedBlockClientId:r,getSelectedBlockClientIds:l,__unstableGetVisibleBlocks:a,getTemplateLock:c,getBlockEditingMode:u,__unstableGetEditorMode:d}=e(ri),p=o(t);if(n().__unstableIsPreviewMode)return{order:p,selectedBlocks:Zx,visibleBlocks:qx};const h=r();return{order:p,selectedBlocks:l(),visibleBlocks:a(),isZoomOut:"zoom-out"===d(),shouldRenderAppender:i&&"zoom-out"!==d()&&(s?!c(t)&&"disabled"!==u(t):t===h||!t&&!h&&!p.length)}}),[t,i,s]);return(0,$.jsxs)(Bl,{value:r,children:[l.map((e=>(0,$.jsxs)(c.AsyncModeProvider,{value:!d.has(e)&&!u.includes(e),children:[a&&(0,$.jsx)(Hx,{clientId:e,rootClientId:t,position:"top"}),(0,$.jsx)(rx,{rootClientId:t,clientId:e}),a&&(0,$.jsx)(Hx,{clientId:e,rootClientId:t,position:"bottom"})]},e))),l.length<1&&e,p&&(0,$.jsx)(cx,{tagName:o,rootClientId:t,CustomAppender:n})]})}function Xx(e){return(0,$.jsx)(c.AsyncModeProvider,{value:!1,children:(0,$.jsx)(Yx,{...e})})}function Qx(e){const{isMultiSelecting:t,getMultiSelectedBlockClientIds:n,hasMultiSelection:o,getSelectedBlockClientId:r,getSelectedBlocksInitialCaretPosition:i,__unstableIsFullySelected:s}=e(ri);return{isMultiSelecting:t(),multiSelectedBlockClientIds:n(),hasMultiSelection:o(),selectedBlockClientId:r(),initialPosition:i(),isFullSelection:s()}}function Jx(){const{initialPosition:e,isMultiSelecting:t,multiSelectedBlockClientIds:n,hasMultiSelection:o,selectedBlockClientId:r,isFullSelection:i}=(0,c.useSelect)(Qx,[]);return(0,u.useRefEffect)((r=>{const{ownerDocument:s}=r,{defaultView:l}=s;if(null==e)return;if(!o||t)return;const{length:a}=n;a<2||i&&(r.contentEditable=!0,r.focus(),l.getSelection().removeAllRanges())}),[o,t,n,r,e,i])}function ey(e,t,n,o){let r,i=ga.focus.focusable.find(n);return t&&i.reverse(),i=i.slice(i.indexOf(e)+1),o&&(r=e.getBoundingClientRect()),i.find((function(e){if(!(e.closest("[inert]")||1===e.children.length&&Lg(e,e.firstElementChild)&&"true"===e.firstElementChild.getAttribute("contenteditable"))){if(!ga.focus.tabbable.isTabbableIndex(e))return!1;if(e.isContentEditable&&"true"!==e.contentEditable)return!1;if(o){const t=e.getBoundingClientRect();if(t.left>=r.right||t.right<=r.left)return!1}return!0}}))}function ty(){const{getMultiSelectedBlocksStartClientId:e,getMultiSelectedBlocksEndClientId:t,getSettings:n,hasMultiSelection:o,__unstableIsFullySelected:r}=(0,c.useSelect)(ri),{selectBlock:i}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((s=>{let l;function a(){l=null}function c(a){if(a.defaultPrevented)return;const{keyCode:c,target:u,shiftKey:d,ctrlKey:p,altKey:h,metaKey:g}=a,m=c===fa.UP,f=c===fa.DOWN,b=c===fa.LEFT,k=c===fa.RIGHT,v=m||b,_=b||k,x=m||f,y=_||x,S=d||p||h||g,w=x?ga.isVerticalEdge:ga.isHorizontalEdge,{ownerDocument:C}=s,{defaultView:B}=C;if(!y)return;if(o()){if(d)return;if(!r())return;return a.preventDefault(),void(v?i(e()):i(t(),-1))}if(!function(e,t,n){const o=t===fa.UP||t===fa.DOWN,{tagName:r}=e,i=e.getAttribute("type");return o&&!n?"INPUT"!==r||!["date","datetime-local","month","number","range","time","week"].includes(i):"INPUT"===r?["button","checkbox","number","color","file","image","radio","reset","submit"].includes(i):"TEXTAREA"!==r}(u,c,S))return;x?l||(l=(0,ga.computeCaretRect)(B)):l=null;const I=(0,ga.isRTL)(u)?!v:v,{keepCaretInsideBlock:j}=n();if(d)(function(e,t){const n=ey(e,t,s);return n&&Dg(n)})(u,v)&&w(u,v)&&(s.contentEditable=!0,s.focus());else if(!x||!(0,ga.isVerticalEdge)(u,v)||h&&!(0,ga.isHorizontalEdge)(u,I)||j){if(_&&B.getSelection().isCollapsed&&(0,ga.isHorizontalEdge)(u,I)&&!j){const e=ey(u,I,s);(0,ga.placeCaretAtHorizontalEdge)(e,v),a.preventDefault()}}else{const e=ey(u,v,s,!0);e&&((0,ga.placeCaretAtVerticalEdge)(e,h?!v:v,h?void 0:l),a.preventDefault())}}return s.addEventListener("mousedown",a),s.addEventListener("keydown",c),()=>{s.removeEventListener("mousedown",a),s.removeEventListener("keydown",c)}}),[])}function ny(){const{getBlockOrder:e,getSelectedBlockClientIds:t,getBlockRootClientId:n}=(0,c.useSelect)(ri),{multiSelect:o,selectBlock:r}=(0,c.useDispatch)(ri),i=(0,Af.__unstableUseShortcutEventMatch)();return(0,u.useRefEffect)((s=>{function l(l){if(!i("core/block-editor/select-all",l))return;const a=t();if(a.length<2&&!(0,ga.isEntirelySelected)(l.target))return;l.preventDefault();const[c]=a,u=n(c),d=e(u);a.length!==d.length?o(d[0],d[d.length-1]):u&&(s.ownerDocument.defaultView.getSelection().removeAllRanges(),r(u))}return s.addEventListener("keydown",l),()=>{s.removeEventListener("keydown",l)}}),[])}function oy(e,t){e.contentEditable=t,t&&e.focus()}function ry(){const{startMultiSelect:e,stopMultiSelect:t}=(0,c.useDispatch)(ri),{isSelectionEnabled:n,hasSelectedBlock:o,isDraggingBlocks:r,isMultiSelecting:i}=(0,c.useSelect)(ri);return(0,u.useRefEffect)((s=>{const{ownerDocument:l}=s,{defaultView:a}=l;let c,u;function d(){t(),a.removeEventListener("mouseup",d),u=a.requestAnimationFrame((()=>{if(!o())return;oy(s,!1);const e=a.getSelection();if(e.rangeCount){const t=e.getRangeAt(0),{commonAncestorContainer:n}=t,o=t.cloneRange();c.contains(n)&&(c.focus(),e.removeAllRanges(),e.addRange(o))}}))}function p({buttons:t,target:o,relatedTarget:l}){o.contains(l)||r()||1===t&&(i()||s!==o&&"true"===o.getAttribute("contenteditable")&&n()&&(c=o,e(),a.addEventListener("mouseup",d),oy(s,!0)))}return s.addEventListener("mouseout",p),()=>{s.removeEventListener("mouseout",p),a.removeEventListener("mouseup",d),a.cancelAnimationFrame(u)}}),[e,t,n,o])}function iy(e,t){e.contentEditable!==String(t)&&(e.contentEditable=t,t&&e.focus())}function sy(e){const t=e.nodeType===e.ELEMENT_NODE?e:e.parentElement;return t?.closest("[data-wp-block-attribute-key]")}function ly(){const{multiSelect:e,selectBlock:t,selectionChange:n}=(0,c.useDispatch)(ri),{getBlockParents:o,getBlockSelectionStart:r,isMultiSelecting:i}=(0,c.useSelect)(ri);return(0,u.useRefEffect)((s=>{const{ownerDocument:l}=s,{defaultView:a}=l;function c(l){const c=a.getSelection();if(!c.rangeCount)return;const u=function(e){const{anchorNode:t,anchorOffset:n}=e;return t.nodeType===t.TEXT_NODE||0===n?t:t.childNodes[n-1]}(c),d=function(e){const{focusNode:t,focusOffset:n}=e;return t.nodeType===t.TEXT_NODE||n===t.childNodes.length?t:0===n&&(0,ga.isSelectionForward)(e)?null!==(o=t.previousSibling)&&void 0!==o?o:t.parentElement:t.childNodes[n];var o}(c);if(!s.contains(u)||!s.contains(d))return;const p=l.shiftKey&&"mouseup"===l.type;if(c.isCollapsed&&!p){if("true"===s.contentEditable&&!i()){iy(s,!1);let e=u.nodeType===u.ELEMENT_NODE?u:u.parentElement;e=e?.closest("[contenteditable]"),e?.focus()}return}let h=Dg(u),g=Dg(d);if(p){const e=r(),t=Dg(l.target),n=t!==g;(h===g&&c.isCollapsed||!g||n)&&(g=t),h!==e&&(h=e)}if(void 0!==h||void 0!==g)if(h===g)i()?e(h,h):t(h);else{const t=[...o(h),h],r=[...o(g),g],i=function(e,t){let n=0;for(;e[n]===t[n];)n++;return n}(t,r);if(t[i]!==h||r[i]!==g)return void e(t[i],r[i]);const s=sy(u),l=sy(d);if(s&&l){var m,f;const e=c.getRangeAt(0),t=(0,W.create)({element:s,range:e,__unstableIsEditableTree:!0}),o=(0,W.create)({element:l,range:e,__unstableIsEditableTree:!0}),r=null!==(m=t.start)&&void 0!==m?m:t.end,i=null!==(f=o.start)&&void 0!==f?f:o.end;n({start:{clientId:h,attributeKey:s.dataset.wpBlockAttributeKey,offset:r},end:{clientId:g,attributeKey:l.dataset.wpBlockAttributeKey,offset:i}})}else e(h,g)}else iy(s,!1)}return l.addEventListener("selectionchange",c),a.addEventListener("mouseup",c),()=>{l.removeEventListener("selectionchange",c),a.removeEventListener("mouseup",c)}}),[e,t,n,o])}function ay(){const{selectBlock:e}=(0,c.useDispatch)(ri),{isSelectionEnabled:t,getBlockSelectionStart:n,hasMultiSelection:o}=(0,c.useSelect)(ri);return(0,u.useRefEffect)((r=>{function i(i){if(!t()||0!==i.button)return;const s=n(),l=Dg(i.target);i.shiftKey?s!==l&&(r.contentEditable=!0,r.focus()):o()&&e(l)}return r.addEventListener("mousedown",i),()=>{r.removeEventListener("mousedown",i)}}),[e,t,n,o])}function cy(){const{__unstableIsFullySelected:e,getSelectedBlockClientIds:t,getSelectedBlockClientId:n,__unstableIsSelectionMergeable:o,hasMultiSelection:r,getBlockName:i,canInsertBlockType:s,getBlockRootClientId:a,getSelectionStart:d,getSelectionEnd:p,getBlockAttributes:h}=(0,c.useSelect)(ri),{replaceBlocks:g,__unstableSplitSelection:m,removeBlocks:f,__unstableDeleteSelection:b,__unstableExpandSelection:k,__unstableMarkAutomaticChange:v}=(0,c.useDispatch)(ri);return(0,u.useRefEffect)((c=>{function u(e){"true"===c.contentEditable&&e.preventDefault()}function _(u){if(!u.defaultPrevented)if(r())u.keyCode===fa.ENTER?(c.contentEditable=!1,u.preventDefault(),e()?g(t(),(0,l.createBlock)((0,l.getDefaultBlockName)())):m()):u.keyCode===fa.BACKSPACE||u.keyCode===fa.DELETE?(c.contentEditable=!1,u.preventDefault(),e()?f(t()):o()?b(u.keyCode===fa.DELETE):k()):1!==u.key.length||u.metaKey||u.ctrlKey||(c.contentEditable=!1,o()?b(u.keyCode===fa.DELETE):(u.preventDefault(),c.ownerDocument.defaultView.getSelection().removeAllRanges()));else if(u.keyCode===fa.ENTER){if(u.shiftKey||e())return;const t=n(),o=i(t),r=d(),c=p();if(r.attributeKey===c.attributeKey){const e=h(t)[r.attributeKey],n=(0,l.getBlockTransforms)("from").filter((({type:e})=>"enter"===e)),o=(0,l.findTransform)(n,(t=>t.regExp.test(e)));if(o)return g(t,o.transform({content:e})),void v()}if(!(0,l.hasBlockSupport)(o,"splitting",!1)&&!u.__deprecatedOnSplit)return;s(o,a(t))&&(m(),u.preventDefault())}}function x(e){r()&&(c.contentEditable=!1,o()?b():(e.preventDefault(),c.ownerDocument.defaultView.getSelection().removeAllRanges()))}return c.addEventListener("beforeinput",u),c.addEventListener("keydown",_),c.addEventListener("compositionstart",x),()=>{c.removeEventListener("beforeinput",u),c.removeEventListener("keydown",_),c.removeEventListener("compositionstart",x)}}),[])}function uy(){const{getBlockName:e}=(0,c.useSelect)(ri),{getBlockType:t}=(0,c.useSelect)(l.store),{createSuccessNotice:n}=(0,c.useDispatch)(Ho.store);return(0,a.useCallback)(((o,r)=>{let i="";if(1===r.length){const n=r[0],s=t(e(n))?.title;i="copy"===o?(0,C.sprintf)( // Translators: Name of the block being copied, e.g. "Paragraph". diff --git a/build/block-editor/index.min.js.map b/build/block-editor/index.min.js.map index a0ce1ed3..fb46f73c 100644 --- a/build/block-editor/index.min.js.map +++ b/build/block-editor/index.min.js.map @@ -1 +1 @@ -{"version":3,"file":"./build/block-editor/index.min.js","mappings":"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EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAI,IACJ,EAAI,IACJ,EAAI,IACJ,EAAI,KAGD3tB,EAAQhH,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,EACAC,EACApyD,EACAqyD,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAzL,EACA0L,EACAC,EACAC,EACAC,EACAC,EACAtE,EACAN,EACAQ,EACAC,EACAE,EACAZ,EACA8E,EACAC,EACAC,EACAC,EACAC,EACAC,EACAnE,EACAoE,EACAC,EACAC,GACAC,GACAC,GACAC,GACAjL,IACG3G,GACH,6BACA,4BACA,iCACA,kCACA,gCACA,8BACA,8BACA,+BACA,6BACA,4BACA,uBACA,wBACA,wBACA,uBACA,yBACA,4BACA,yBACA,2BACA,2BACA,kBACA,iBACA,mBACA,8BACA,4BACA,8BACA,+BACA,6BACA,gBACA,yBACA,uBACA,SACA,eACA,gBACA,eACA,eACA,eACA,uBACA,sBACA,sBACA,wBACA,uBACA,uBACA,uBACA,sBACA,wBACA,yBACA,wBACA,0BACA,yBACA,uBACA,mBACA,aACA,aACA,gBACA,eACA,UAmJD,OAAOoL,IAhJahB,EAAAA,EAAAA,UAAS,KACrB,CACNyB,WAAY,CACXyD,kBACAC,kBAED3jD,MAAO,CACN+gD,QAAS,CACRhhC,OAAQ+gC,EACRvvB,MAAOyvB,EACP/0D,QAASg1D,GAEVn9B,UAAW,CACV/D,OAAQylC,EACRj0B,MAAOk0B,EACPx5D,QAASy5D,GAEVO,QAAS,CACRlmC,OAAQslC,EACR9zB,MAAO+zB,EACPr5D,QAASs5D,GAEVhE,mBACAJ,iBACAZ,iBACAxgC,OAAQqlC,EACR9E,eAAgBqF,EAChBnF,gBACAP,WAAY2F,EACZxF,KAAMyF,GACN1F,QAAS4F,GACT7F,OAAQ8F,GACRpoD,KAAMkoD,IAEP5M,WAAY,CACX8G,aAAc,CACbjgC,OAAQ6jC,EACR33D,QAAS43D,EACTtyB,MAAOuyB,GAERrhC,UAAW,CACV1C,OAAQikC,EACR/3D,QAAS8zD,EACTxuB,MAAO0yB,GAERnE,iBACAC,iBAAkBgE,EAClBxL,YACAf,aACA9lD,aACAkvD,YACAH,cACAyD,iBACAE,gBACAC,gBACAF,eAEDtjD,QA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","sources":["webpack://wp/./node_modules/autosize/dist/autosize.js","webpack://wp/./node_modules/computed-style/dist/computedStyle.commonjs.js","webpack://wp/./node_modules/diff/src/diff/base.js","webpack://wp/./node_modules/diff/src/diff/character.js","webpack://wp/./node_modules/fast-deep-equal/es6/index.js","webpack://wp/./node_modules/fast-deep-equal/index.js","webpack://wp/./node_modules/line-height/lib/line-height.js","webpack://wp/./node_modules/normalize-wheel/index.js","webpack://wp/./node_modules/normalize-wheel/src/ExecutionEnvironment.js","webpack://wp/./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","webpack://wp/./node_modules/normalize-wheel/src/isEventSupported.js","webpack://wp/./node_modules/normalize-wheel/src/normalizeWheel.js","webpack://wp/./node_modules/picocolors/picocolors.browser.js","webpack://wp/./node_modules/postcss-prefix-selector/index.js","webpack://wp/./node_modules/postcss/lib/at-rule.js","webpack://wp/./node_modules/postcss/lib/comment.js","webpack://wp/./node_modules/postcss/lib/container.js","webpack://wp/./node_modules/postcss/lib/css-syntax-error.js","webpack://wp/./node_modules/postcss/lib/declaration.js","webpack://wp/./node_modules/postcss/lib/document.js","webpack://wp/./node_modules/postcss/lib/fromJSON.js","webpack://wp/./node_modules/postcss/lib/input.js","webpack://wp/./node_modules/postcss/lib/lazy-result.js","webpack://wp/./node_modules/postcss/lib/list.js","webpack://wp/./node_modules/postcss/lib/map-generator.js","webpack://wp/./node_modules/postcss/lib/no-work-result.js","webpack://wp/./node_modules/postcss/lib/node.js","webpack://wp/./node_modules/postcss/lib/parse.js","webpack://wp/./node_modules/postcss/lib/parser.js","webpack://wp/./node_modules/postcss/lib/postcss.js","webpack://wp/./node_modules/postcss/lib/previous-map.js","webpack://wp/./node_modules/postcss/lib/processor.js","webpack://wp/./node_modules/postcss/lib/result.js","webpack://wp/./node_modules/postcss/lib/root.js","webpack://wp/./node_modules/postcss/lib/rule.js","webpack://wp/./node_modules/postcss/lib/stringifier.js","webpack://wp/./node_modules/postcss/lib/stringify.js","webpack://wp/./node_modules/postcss/lib/symbols.js","webpack://wp/./node_modules/postcss/lib/tokenize.js","webpack://wp/./node_modules/postcss/lib/warn-once.js","webpack://wp/./node_modules/postcss/lib/warning.js","webpack://wp/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://wp/./node_modules/prop-types/index.js","webpack://wp/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://wp/./node_modules/react-autosize-textarea/lib/TextareaAutosize.js","webpack://wp/./node_modules/react-autosize-textarea/lib/index.js","webpack://wp/./node_modules/remove-accents/index.js","webpack://wp/./packages/block-editor/node_modules/postcss-urlrebase/index.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/index.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/parse.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/stringify.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/unit.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/walk.js","webpack://wp/external window \"React\"","webpack://wp/./node_modules/nanoid/non-secure/index.cjs","webpack://wp/webpack/bootstrap","webpack://wp/webpack/runtime/compat get default export","webpack://wp/webpack/runtime/define property getters","webpack://wp/webpack/runtime/hasOwnProperty shorthand","webpack://wp/webpack/runtime/make namespace object","webpack://wp/external window [\"wp\",\"blocks\"]","webpack://wp/external window [\"wp\",\"element\"]","webpack://wp/external window [\"wp\",\"data\"]","webpack://wp/external window [\"wp\",\"compose\"]","webpack://wp/external window [\"wp\",\"hooks\"]","../../packages/block-editor/src/components/block-edit/context.js","webpack://wp/external window [\"wp\",\"deprecated\"]","webpack://wp/external window [\"wp\",\"i18n\"]","../../packages/block-editor/src/store/defaults.js","../../packages/block-editor/src/store/array.js","../../packages/block-editor/src/store/reducer.js","webpack://wp/external window [\"wp\",\"primitives\"]","webpack://wp/external window \"ReactJSXRuntime\"","../../packages/icons/src/library/symbol.js","webpack://wp/external window [\"wp\",\"richText\"]","webpack://wp/external window [\"wp\",\"blockSerializationDefaultParser\"]","../../packages/block-editor/src/store/private-keys.js","webpack://wp/external window [\"wp\",\"privateApis\"]","../../packages/block-editor/src/lock-unlock.js","../../packages/block-editor/src/store/constants.js","../../packages/block-editor/src/store/utils.js","../../packages/block-editor/src/utils/sorting.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/utils.js","../../packages/block-editor/src/utils/object.js","../../packages/block-editor/src/store/get-block-settings.js","../../packages/block-editor/src/store/private-selectors.js","../../packages/block-editor/src/store/selectors.js","../../packages/block-editor/src/store/private-actions.js","webpack://wp/external window [\"wp\",\"a11y\"]","webpack://wp/external window [\"wp\",\"notices\"]","../../packages/block-editor/src/utils/selection.js","../../packages/block-editor/src/store/actions.js","../../packages/block-editor/src/store/index.js","../../packages/block-editor/src/components/use-settings/index.js","webpack://wp/external window [\"wp\",\"styleEngine\"]","../../packages/block-editor/src/components/font-sizes/fluid-utils.js","../../packages/block-editor/src/utils/format-font-weight.js","../../packages/block-editor/src/utils/get-font-styles-and-weights.js","../../packages/block-editor/src/utils/format-font-style.js","../../packages/block-editor/src/components/global-styles/typography-utils.js","../../packages/block-editor/src/components/global-styles/utils.js","../../packages/block-editor/src/components/global-styles/context.js","../../packages/block-editor/src/components/global-styles/hooks.js","webpack://wp/./node_modules/clsx/dist/clsx.mjs","../../packages/block-editor/src/hooks/utils.js","../../packages/block-editor/src/hooks/compat.js","webpack://wp/external window [\"wp\",\"components\"]","../../packages/block-editor/src/components/block-controls/groups.js","../../packages/block-editor/src/components/block-controls/fill.js","../../packages/block-editor/src/components/block-controls/hook.js","webpack://wp/external window [\"wp\",\"warning\"]","../../packages/block-editor/src/components/block-controls/slot.js","../../packages/block-editor/src/components/block-controls/index.js","../../packages/icons/src/library/justify-left.js","../../packages/icons/src/library/justify-center.js","../../packages/icons/src/library/justify-right.js","../../packages/icons/src/library/justify-space-between.js","../../packages/icons/src/library/justify-stretch.js","../../packages/icons/src/library/arrow-right.js","../../packages/icons/src/library/arrow-down.js","../../packages/block-editor/src/layouts/definitions.js","../../packages/block-editor/src/layouts/utils.js","../../packages/icons/src/library/sides-all.js","../../packages/icons/src/library/sides-horizontal.js","../../packages/icons/src/library/sides-vertical.js","../../packages/icons/src/library/sides-top.js","../../packages/icons/src/library/sides-right.js","../../packages/icons/src/library/sides-bottom.js","../../packages/icons/src/library/sides-left.js","../../packages/block-editor/src/components/spacing-sizes-control/utils.js","../../packages/block-editor/src/hooks/gap.js","../../packages/block-editor/src/components/block-vertical-alignment-control/icons.js","../../packages/block-editor/src/components/block-vertical-alignment-control/ui.js","../../packages/block-editor/src/components/block-vertical-alignment-control/index.js","../../packages/block-editor/src/components/justify-content-control/ui.js","../../packages/block-editor/src/components/justify-content-control/index.js","../../packages/block-editor/src/layouts/flex.js","../../packages/block-editor/src/layouts/flow.js","../../packages/icons/src/icon/index.js","../../packages/icons/src/library/align-none.js","../../packages/icons/src/library/stretch-wide.js","../../packages/block-editor/src/layouts/constrained.js","../../packages/block-editor/src/layouts/grid.js","../../packages/block-editor/src/layouts/index.js","../../packages/block-editor/src/components/block-list/layout.js","../../packages/block-editor/src/components/block-alignment-control/use-available-alignments.js","../../packages/icons/src/library/position-left.js","../../packages/icons/src/library/position-center.js","../../packages/icons/src/library/position-right.js","../../packages/icons/src/library/stretch-full-width.js","../../packages/block-editor/src/components/block-alignment-control/constants.js","../../packages/block-editor/src/components/block-alignment-control/ui.js","../../packages/block-editor/src/components/block-alignment-control/index.js","../../packages/block-editor/src/components/block-editing-mode/index.js","../../packages/block-editor/src/hooks/align.js","../../packages/block-editor/src/components/inspector-controls/groups.js","../../packages/block-editor/src/components/inspector-controls/fill.js","../../packages/block-editor/src/components/inspector-controls/block-support-tools-panel.js","../../packages/block-editor/src/components/inspector-controls/block-support-slot-container.js","../../packages/block-editor/src/components/inspector-controls/slot.js","../../packages/block-editor/src/components/inspector-controls/index.js","webpack://wp/external window [\"wp\",\"url\"]","webpack://wp/external window [\"wp\",\"dom\"]","webpack://wp/external window [\"wp\",\"blob\"]","webpack://wp/external window [\"wp\",\"keycodes\"]","../../packages/icons/src/library/media.js","../../packages/icons/src/library/upload.js","../../packages/icons/src/library/post-featured-image.js","../../packages/block-editor/src/components/media-upload/index.js","../../packages/block-editor/src/components/media-upload/check.js","webpack://wp/external window [\"wp\",\"isShallowEqual\"]","webpack://wp/external window [\"wp\",\"preferences\"]","../../packages/icons/src/library/keyboard-return.js","../../packages/icons/src/library/chevron-left-small.js","../../packages/icons/src/library/chevron-right-small.js","../../packages/block-editor/src/components/link-control/settings-drawer.js","../../packages/block-editor/src/components/url-input/index.js","../../packages/icons/src/library/plus.js","../../packages/block-editor/src/components/link-control/search-create-button.js","../../packages/icons/src/library/post-list.js","../../packages/icons/src/library/page.js","../../packages/icons/src/library/tag.js","../../packages/icons/src/library/category.js","../../packages/icons/src/library/file.js","../../packages/icons/src/library/globe.js","../../packages/icons/src/library/home.js","../../packages/icons/src/library/verse.js","../../packages/block-editor/src/components/link-control/search-item.js","../../packages/block-editor/src/components/link-control/constants.js","../../packages/block-editor/src/components/link-control/search-results.js","../../packages/block-editor/src/components/link-control/is-url-like.js","../../packages/block-editor/src/components/link-control/use-search-handler.js","../../packages/block-editor/src/components/link-control/search-input.js","../../packages/icons/src/library/info.js","../../packages/icons/src/library/edit.js","../../packages/icons/src/library/pencil.js","../../packages/icons/src/library/link-off.js","../../packages/icons/src/library/copy-small.js","../../packages/block-editor/src/components/link-control/viewer-slot.js","../../packages/block-editor/src/components/link-control/use-rich-url-data.js","../../packages/block-editor/src/components/link-control/link-preview.js","../../packages/block-editor/src/components/link-control/settings.js","../../packages/block-editor/src/components/link-control/index.js","../../packages/block-editor/src/components/link-control/use-internal-value.js","../../packages/block-editor/src/components/link-control/use-create-page.js","../../packages/block-editor/src/components/media-replace-flow/index.js","../../packages/block-editor/src/components/background-image-control/index.js","../../packages/block-editor/src/components/global-styles/background-panel.js","../../packages/block-editor/src/hooks/background.js","../../packages/block-editor/src/hooks/lock.js","../../packages/block-editor/src/hooks/anchor.js","../../packages/block-editor/src/hooks/aria-label.js","../../packages/block-editor/src/hooks/custom-class-name.js","../../packages/block-editor/src/hooks/generated-class-name.js","webpack://wp/./node_modules/colord/index.mjs","webpack://wp/./node_modules/colord/plugins/names.mjs","webpack://wp/./node_modules/colord/plugins/a11y.mjs","../../packages/block-editor/src/components/colors/utils.js","../../packages/block-editor/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js","../../packages/block-editor/src/components/border-radius-control/utils.js","../../packages/block-editor/src/components/border-radius-control/all-input-control.js","../../packages/block-editor/src/components/border-radius-control/input-controls.js","../../packages/icons/src/library/link.js","../../packages/block-editor/src/components/border-radius-control/linked-button.js","../../packages/block-editor/src/components/border-radius-control/index.js","../../packages/icons/src/library/check.js","../../packages/icons/src/library/shadow.js","../../packages/block-editor/src/components/global-styles/shadow-panel-components.js","../../packages/block-editor/src/components/global-styles/border-panel.js","../../packages/block-editor/src/hooks/border.js","../../packages/block-editor/src/components/gradients/use-gradient.js","../../packages/block-editor/src/components/colors-gradients/control.js","../../packages/block-editor/src/components/global-styles/color-panel.js","../../packages/block-editor/src/components/contrast-checker/index.js","../../packages/block-editor/src/components/provider/block-refs-provider.js","../../packages/block-editor/src/components/block-list/use-block-props/use-block-refs.js","../../packages/block-editor/src/hooks/contrast-checker.js","../../packages/block-editor/src/hooks/color.js","../../packages/block-editor/src/components/font-family/index.js","../../packages/block-editor/src/components/font-appearance-control/index.js","../../packages/block-editor/src/components/line-height-control/utils.js","../../packages/block-editor/src/components/line-height-control/index.js","../../packages/block-editor/src/components/letter-spacing-control/index.js","../../packages/icons/src/library/align-left.js","../../packages/icons/src/library/align-center.js","../../packages/icons/src/library/align-right.js","../../packages/icons/src/library/align-justify.js","../../packages/block-editor/src/components/text-alignment-control/index.js","../../packages/icons/src/library/reset.js","../../packages/icons/src/library/format-uppercase.js","../../packages/icons/src/library/format-lowercase.js","../../packages/icons/src/library/format-capitalize.js","../../packages/block-editor/src/components/text-transform-control/index.js","../../packages/icons/src/library/format-underline.js","../../packages/icons/src/library/format-strikethrough.js","../../packages/block-editor/src/components/text-decoration-control/index.js","../../packages/icons/src/library/text-horizontal.js","../../packages/icons/src/library/text-vertical.js","../../packages/block-editor/src/components/writing-mode-control/index.js","../../packages/block-editor/src/components/global-styles/typography-panel.js","../../packages/block-editor/src/hooks/line-height.js","webpack://wp/external window [\"wp\",\"tokenList\"]","../../packages/block-editor/src/hooks/font-family.js","../../packages/block-editor/src/components/font-sizes/utils.js","../../packages/block-editor/src/hooks/font-size.js","../../packages/block-editor/src/components/alignment-control/ui.js","../../packages/block-editor/src/components/alignment-control/index.js","../../packages/block-editor/src/hooks/text-align.js","../../packages/block-editor/src/hooks/typography.js","../../packages/icons/src/library/settings.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/spacing-input-control.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/axial.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/separated.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/single.js","../../packages/block-editor/src/components/spacing-sizes-control/linked-button.js","../../packages/block-editor/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js","../../packages/block-editor/src/components/spacing-sizes-control/index.js","../../packages/block-editor/src/components/height-control/index.js","../../packages/block-editor/src/components/grid/use-get-number-of-blocks-before-cell.js","../../packages/block-editor/src/components/child-layout-control/index.js","../../packages/block-editor/src/components/dimensions-tool/aspect-ratio-tool.js","../../packages/block-editor/src/components/global-styles/dimensions-panel.js","../../packages/block-editor/src/components/block-popover/use-popover-scroll.js","../../packages/block-editor/src/utils/dom.js","../../packages/block-editor/src/components/block-popover/index.js","../../packages/block-editor/src/components/block-popover/cover.js","../../packages/block-editor/src/hooks/spacing-visualizer.js","../../packages/block-editor/src/hooks/dimensions.js","../../packages/block-editor/src/hooks/style.js","../../packages/block-editor/src/hooks/settings.js","../../packages/icons/src/library/filter.js","../../packages/block-editor/src/components/duotone-control/index.js","../../packages/block-editor/src/components/duotone/utils.js","../../packages/block-editor/src/components/global-styles/get-block-css-selector.js","../../packages/block-editor/src/components/global-styles/filters-panel.js","../../packages/block-editor/src/hooks/duotone.js","../../packages/block-editor/src/components/use-block-display-information/index.js","../../packages/block-editor/src/hooks/position.js","../../packages/block-editor/src/components/global-styles/use-global-styles-output.js","../../packages/block-editor/src/hooks/block-style-variation.js","../../packages/block-editor/src/hooks/layout.js","../../packages/block-editor/src/components/grid/utils.js","../../packages/block-editor/src/components/inserter/tips.js","../../packages/icons/src/library/chevron-right.js","../../packages/icons/src/library/chevron-left.js","../../packages/icons/src/library/block-default.js","../../packages/block-editor/src/components/block-icon/index.js","../../packages/block-editor/src/components/block-card/index.js","../../packages/block-editor/src/components/provider/with-registry-provider.js","../../packages/block-editor/src/components/provider/use-block-sync.js","webpack://wp/external window [\"wp\",\"keyboardShortcuts\"]","../../packages/block-editor/src/components/keyboard-shortcuts/index.js","../../packages/block-editor/src/components/provider/index.js","../../packages/block-editor/src/components/block-context/index.js","../../packages/block-editor/src/components/block-edit/edit.js","../../packages/icons/src/library/more-vertical.js","../../packages/block-editor/src/components/warning/index.js","../../packages/block-editor/src/components/block-edit/multiple-usage-warning.js","../../packages/block-editor/src/components/block-list/private-block-context.js","../../packages/block-editor/src/components/block-edit/index.js","../../packages/block-editor/src/components/block-compare/block-view.js","../../packages/block-editor/src/components/block-compare/index.js","../../packages/block-editor/src/components/block-list/block-invalid-warning.js","../../packages/block-editor/src/components/block-list/block-crash-warning.js","../../packages/block-editor/src/components/block-list/block-crash-boundary.js","../../packages/block-editor/src/components/block-list/block-html.js","webpack://wp/./node_modules/@react-spring/rafz/dist/react-spring-rafz.esm.js","webpack://wp/./node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","webpack://wp/./node_modules/@react-spring/animated/dist/react-spring-animated.esm.js","webpack://wp/./node_modules/@react-spring/core/dist/react-spring-core.esm.js","webpack://wp/external window \"ReactDOM\"","webpack://wp/./node_modules/@react-spring/web/dist/react-spring-web.esm.js","../../packages/block-editor/src/components/use-moving-animation/index.js","../../packages/block-editor/src/components/block-list/use-block-props/use-focus-first-element.js","../../packages/block-editor/src/components/block-list/use-block-props/use-is-hovered.js","../../packages/block-editor/src/components/block-list/use-block-props/use-focus-handler.js","../../packages/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js","../../packages/block-editor/src/components/block-list/use-block-props/use-nav-mode-exit.js","../../packages/block-editor/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js","../../packages/block-editor/src/components/block-list/use-block-props/use-intersection-observer.js","../../packages/block-editor/src/components/block-list/use-block-props/use-scroll-into-view.js","../../packages/block-editor/src/components/use-flash-editable-blocks/index.js","../../packages/block-editor/src/hooks/use-bindings-attributes.js","../../packages/block-editor/src/components/block-list/use-block-props/index.js","../../packages/block-editor/src/components/block-list/block.js","webpack://wp/external window [\"wp\",\"htmlEntities\"]","../../packages/block-editor/src/components/default-block-appender/index.js","../../packages/block-editor/src/components/block-list-appender/index.js","../../packages/block-editor/src/components/block-popover/inbetween.js","../../packages/block-editor/src/components/block-popover/drop-zone.js","../../packages/block-editor/src/components/block-tools/insertion-point.js","../../packages/block-editor/src/components/block-list/use-in-between-inserter.js","../../packages/block-editor/src/components/block-selection-clearer/index.js","../../packages/block-editor/src/components/inner-blocks/use-nested-settings-update.js","../../packages/block-editor/src/components/use-on-block-drop/index.js","../../packages/block-editor/src/utils/math.js","../../packages/block-editor/src/components/use-block-drop-zone/index.js","../../packages/block-editor/src/components/inner-blocks/index.js","../../packages/block-editor/src/components/inner-blocks/use-block-context.js","../../packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js","../../packages/block-editor/src/components/inner-blocks/default-block-appender.js","../../packages/block-editor/src/components/inner-blocks/button-block-appender.js","../../packages/block-editor/src/components/observe-typing/index.js","../../packages/block-editor/src/components/block-list/zoom-out-separator.js","../../packages/block-editor/src/components/block-list/index.js","../../packages/block-editor/src/components/writing-flow/use-multi-selection.js","../../packages/block-editor/src/components/writing-flow/use-arrow-nav.js","../../packages/block-editor/src/components/writing-flow/use-select-all.js","../../packages/block-editor/src/components/writing-flow/use-drag-selection.js","../../packages/block-editor/src/components/writing-flow/use-selection-observer.js","../../packages/block-editor/src/components/writing-flow/use-click-selection.js","../../packages/block-editor/src/components/writing-flow/use-input.js","../../packages/block-editor/src/utils/use-notify-copy.js","../../packages/block-editor/src/utils/pasting.js","../../packages/block-editor/src/components/writing-flow/utils.js","../../packages/block-editor/src/components/writing-flow/use-clipboard-handler.js","../../packages/block-editor/src/components/writing-flow/index.js","../../packages/block-editor/src/components/writing-flow/use-tab-nav.js","../../packages/block-editor/src/components/iframe/get-compatibility-styles.js","../../packages/block-editor/src/components/iframe/index.js","webpack://wp/./node_modules/parsel-js/dist/parsel.js","webpack://wp/./node_modules/postcss/lib/postcss.mjs","../../packages/block-editor/src/utils/transform-styles/index.js","../../packages/block-editor/src/components/editor-styles/index.js","../../packages/block-editor/src/components/block-preview/auto.js","../../packages/block-editor/src/components/block-preview/index.js","../../packages/block-editor/src/components/inserter/preview-panel.js","../../packages/block-editor/src/components/inserter-listbox/item.js","../../packages/icons/src/library/drag-handle.js","../../packages/block-editor/src/components/block-draggable/draggable-chip.js","../../packages/block-editor/src/components/inserter-draggable-blocks/index.js","../../packages/block-editor/src/components/inserter-list-item/index.js","../../packages/block-editor/src/components/inserter-listbox/group.js","../../packages/block-editor/src/components/inserter-listbox/row.js","../../packages/block-editor/src/components/block-types-list/index.js","../../packages/block-editor/src/components/inserter/panel.js","../../packages/block-editor/src/components/inserter/hooks/use-block-types-state.js","../../packages/block-editor/src/components/inserter-listbox/index.js","../../packages/block-editor/src/components/inserter/no-results.js","../../packages/block-editor/src/components/inserter/block-types-tab.js","../../packages/block-editor/src/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js","../../packages/block-editor/src/components/block-patterns-paging/index.js","../../packages/block-editor/src/components/block-patterns-list/index.js","../../packages/block-editor/src/components/inserter/hooks/use-insertion-point.js","../../packages/block-editor/src/components/inserter/hooks/use-patterns-state.js","webpack://wp/./node_modules/lower-case/src/index.ts","webpack://wp/./node_modules/no-case/src/index.ts","../../packages/block-editor/src/components/inserter/search-items.js","../../packages/block-editor/src/components/inserter/hooks/use-patterns-paging.js","../../packages/block-editor/src/components/inserter/block-patterns-explorer/pattern-list.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/use-pattern-categories.js","../../packages/block-editor/src/components/inserter/block-patterns-explorer/index.js","../../packages/block-editor/src/components/inserter/mobile-tab-navigation.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/patterns-filter.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js","../../packages/block-editor/src/components/inserter/category-tabs/index.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/index.js","../../packages/icons/src/library/external.js","../../packages/block-editor/src/components/inserter/media-tab/utils.js","../../packages/block-editor/src/components/inserter/media-tab/media-preview.js","../../packages/block-editor/src/components/inserter/media-tab/media-list.js","../../packages/block-editor/src/components/inserter/media-tab/media-panel.js","../../packages/block-editor/src/components/inserter/media-tab/hooks.js","../../packages/block-editor/src/components/inserter/media-tab/media-tab.js","../../packages/block-editor/src/components/inserter-menu-extension/index.js","../../packages/block-editor/src/utils/order-inserter-block-items.js","../../packages/block-editor/src/components/inserter/search-results.js","../../packages/icons/src/library/close-small.js","../../packages/block-editor/src/components/tabbed-sidebar/index.js","../../packages/block-editor/src/components/inserter/menu.js","../../packages/block-editor/src/components/inserter/quick-inserter.js","../../packages/block-editor/src/components/inserter/index.js","../../packages/block-editor/src/components/button-block-appender/index.js","../../packages/block-editor/src/components/grid/grid-visualizer.js","../../packages/block-editor/src/components/grid/grid-item-resizer.js","../../packages/icons/src/library/chevron-up.js","../../packages/icons/src/library/chevron-down.js","../../packages/block-editor/src/components/grid/grid-item-movers.js","../../packages/block-editor/src/hooks/layout-child.js","../../packages/block-editor/src/hooks/content-lock-ui.js","../../packages/block-editor/src/hooks/metadata.js","../../packages/block-editor/src/hooks/block-hooks.js","../../packages/block-editor/src/utils/block-bindings.js","../../packages/block-editor/src/hooks/block-bindings.js","../../packages/block-editor/src/components/grid/use-grid-layout-sync.js","../../packages/block-editor/src/hooks/grid-visualizer.js","../../packages/block-editor/src/hooks/block-renaming.js","../../packages/block-editor/src/hooks/use-border-props.js","../../packages/block-editor/src/hooks/use-shadow-props.js","../../packages/block-editor/src/hooks/use-color-props.js","../../packages/block-editor/src/hooks/use-spacing-props.js","../../packages/block-editor/src/hooks/use-typography-props.js","../../packages/block-editor/src/hooks/use-cached-truthy.js","../../packages/block-editor/src/hooks/use-zoom-out.js","../../packages/block-editor/src/hooks/index.js","../../packages/block-editor/src/components/colors/with-colors.js","../../packages/block-editor/src/components/font-sizes/font-size-picker.js","../../packages/block-editor/src/components/font-sizes/with-font-sizes.js","../../packages/block-editor/src/autocompleters/block.js","webpack://wp/external window [\"wp\",\"apiFetch\"]","../../packages/icons/src/library/post.js","../../packages/block-editor/src/autocompleters/link.js","../../packages/block-editor/src/components/autocomplete/index.js","../../packages/icons/src/library/fullscreen.js","../../packages/block-editor/src/components/block-full-height-alignment-control/index.js","../../packages/block-editor/src/components/block-alignment-matrix-control/index.js","../../packages/block-editor/src/components/block-title/use-block-display-title.js","../../packages/block-editor/src/components/block-title/index.js","../../packages/block-editor/src/utils/get-editor-region.js","../../packages/block-editor/src/components/block-breadcrumb/index.js","../../packages/block-editor/src/components/block-content-overlay/index.js","../../packages/block-editor/src/components/block-tools/use-block-toolbar-popover-props.js","../../packages/block-editor/src/components/block-tools/use-selected-block-tool-props.js","../../packages/block-editor/src/components/block-tools/empty-block-inserter.js","../../packages/block-editor/src/components/block-draggable/index.js","../../packages/block-editor/src/components/block-draggable/use-scroll-when-dragging.js","../../packages/block-editor/src/components/block-mover/mover-description.js","../../packages/block-editor/src/components/block-mover/button.js","../../packages/block-editor/src/components/block-mover/index.js","../../packages/block-editor/src/components/block-toolbar/utils.js","../../packages/block-editor/src/components/block-parent-selector/index.js","../../packages/icons/src/library/copy.js","../../packages/block-editor/src/components/block-switcher/preview-block-popover.js","../../packages/block-editor/src/components/block-switcher/block-variation-transformations.js","../../packages/block-editor/src/components/block-switcher/block-transformations-menu.js","../../packages/block-editor/src/components/block-styles/utils.js","../../packages/block-editor/src/components/block-styles/use-styles-for-block.js","../../packages/block-editor/src/components/block-styles/menu-items.js","../../packages/block-editor/src/components/block-switcher/block-styles-menu.js","../../packages/block-editor/src/components/block-switcher/utils.js","../../packages/block-editor/src/components/block-switcher/use-transformed-patterns.js","../../packages/block-editor/src/components/block-switcher/pattern-transformations-menu.js","../../packages/block-editor/src/components/block-switcher/index.js","../../packages/block-editor/src/components/block-toolbar/block-toolbar-last-item.js","../../packages/block-editor/src/hooks/supports.js","../../packages/block-editor/src/components/use-paste-styles/index.js","../../packages/block-editor/src/components/block-actions/index.js","../../packages/block-editor/src/components/block-settings-menu/block-html-convert-button.js","../../packages/block-editor/src/components/block-settings-menu/block-settings-menu-first-item.js","../../packages/block-editor/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js","../../packages/block-editor/src/components/convert-to-group-buttons/index.js","../../packages/block-editor/src/components/block-lock/use-block-lock.js","../../packages/icons/src/library/unlock.js","../../packages/icons/src/library/lock-outline.js","../../packages/icons/src/library/lock.js","../../packages/block-editor/src/components/block-lock/modal.js","../../packages/block-editor/src/components/block-lock/menu-item.js","../../packages/block-editor/src/components/block-settings-menu/block-mode-toggle.js","../../packages/block-editor/src/components/content-lock/modify-content-lock-menu-item.js","../../packages/block-editor/src/components/block-rename/is-empty-string.js","../../packages/block-editor/src/components/block-rename/modal.js","../../packages/block-editor/src/components/block-rename/rename-control.js","../../packages/block-editor/src/components/block-settings-menu-controls/index.js","../../packages/block-editor/src/components/block-rename/use-block-rename.js","../../packages/block-editor/src/components/block-settings-menu/block-parent-selector-menu-item.js","../../packages/block-editor/src/components/block-settings-menu/block-settings-dropdown.js","../../packages/block-editor/src/components/block-settings-menu/index.js","../../packages/block-editor/src/components/block-lock/toolbar.js","../../packages/icons/src/library/group.js","../../packages/icons/src/library/row.js","../../packages/icons/src/library/stack.js","../../packages/icons/src/library/grid.js","../../packages/block-editor/src/components/convert-to-group-buttons/toolbar.js","../../packages/block-editor/src/components/block-edit-visually-button/index.js","../../packages/block-editor/src/components/block-toolbar/block-name-context.js","../../packages/block-editor/src/components/navigable-toolbar/index.js","../../packages/block-editor/src/components/block-controls/use-has-block-controls.js","../../packages/block-editor/src/components/block-toolbar/use-has-block-toolbar.js","../../packages/block-editor/src/components/block-toolbar/index.js","../../packages/block-editor/src/components/block-tools/block-toolbar-popover.js","../../packages/block-editor/src/components/block-tools/block-selection-button.js","../../packages/block-editor/src/components/block-tools/block-toolbar-breadcrumb.js","../../packages/icons/src/library/trash.js","../../packages/icons/src/library/shuffle.js","../../packages/block-editor/src/components/block-toolbar/shuffle.js","../../packages/block-editor/src/components/block-tools/zoom-out-toolbar.js","../../packages/block-editor/src/components/block-tools/zoom-out-popover.js","../../packages/block-editor/src/components/block-tools/zoom-out-mode-inserter-button.js","../../packages/block-editor/src/components/block-tools/zoom-out-mode-inserters.js","../../packages/block-editor/src/components/block-tools/index.js","../../packages/block-editor/src/components/block-tools/use-show-block-tools.js","webpack://wp/external window [\"wp\",\"commands\"]","../../packages/icons/src/library/move-to.js","../../packages/icons/src/library/ungroup.js","../../packages/block-editor/src/components/use-block-commands/index.js","../../packages/block-editor/src/components/block-canvas/index.js","../../packages/block-editor/src/components/color-style-selector/index.js","../../packages/icons/src/library/list-view.js","../../packages/block-editor/src/components/list-view/context.js","../../packages/block-editor/src/components/list-view/aria-referenced-text.js","../../packages/block-editor/src/components/list-view/appender.js","../../packages/block-editor/src/components/list-view/leaf.js","../../packages/icons/src/library/pin-small.js","../../packages/icons/src/library/lock-small.js","../../packages/block-editor/src/components/list-view/expander.js","../../packages/block-editor/src/components/list-view/use-list-view-images.js","../../packages/block-editor/src/components/list-view/block-select-button.js","../../packages/block-editor/src/components/list-view/block-contents.js","../../packages/block-editor/src/components/list-view/utils.js","../../packages/block-editor/src/components/list-view/block.js","../../packages/block-editor/src/components/list-view/use-list-view-scroll-into-view.js","../../packages/block-editor/src/components/list-view/branch.js","../../packages/block-editor/src/components/list-view/drop-indicator.js","../../packages/block-editor/src/components/list-view/use-list-view-drop-zone.js","../../packages/block-editor/src/components/list-view/index.js","../../packages/block-editor/src/components/list-view/use-list-view-client-ids.js","../../packages/block-editor/src/components/list-view/use-list-view-block-indexes.js","../../packages/block-editor/src/components/list-view/use-block-selection.js","../../packages/block-editor/src/components/list-view/use-list-view-expand-selected-item.js","../../packages/block-editor/src/components/list-view/use-clipboard-handler.js","../../packages/block-editor/src/components/list-view/use-list-view-collapse-items.js","../../packages/block-editor/src/components/block-navigation/dropdown.js","../../packages/block-editor/src/components/block-styles/preview-panel.js","../../packages/block-editor/src/components/block-styles/index.js","../../packages/block-editor/src/components/block-heading-level-dropdown/heading-level-icon.js","../../packages/icons/src/library/paragraph.js","../../packages/icons/src/library/heading-level-1.js","../../packages/icons/src/library/heading-level-2.js","../../packages/icons/src/library/heading-level-3.js","../../packages/icons/src/library/heading-level-4.js","../../packages/icons/src/library/heading-level-5.js","../../packages/icons/src/library/heading-level-6.js","../../packages/block-editor/src/components/block-heading-level-dropdown/index.js","../../packages/icons/src/library/layout.js","../../packages/block-editor/src/components/block-variation-picker/index.js","../../packages/block-editor/src/components/block-pattern-setup/constants.js","../../packages/block-editor/src/components/block-pattern-setup/setup-toolbar.js","../../packages/block-editor/src/components/block-pattern-setup/index.js","../../packages/block-editor/src/components/block-pattern-setup/use-patterns-setup.js","../../packages/block-editor/src/components/block-variation-transforms/index.js","../../packages/block-editor/src/components/color-palette/with-color-context.js","../../packages/block-editor/src/components/color-palette/index.js","../../packages/block-editor/src/components/color-palette/control.js","webpack://wp/external window [\"wp\",\"date\"]","../../packages/block-editor/src/components/date-format-picker/index.js","../../packages/block-editor/src/components/colors-gradients/dropdown.js","../../packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js","../../packages/icons/src/library/aspect-ratio.js","../../packages/block-editor/src/components/image-editor/constants.js","../../packages/block-editor/src/components/image-editor/context.js","../../packages/block-editor/src/components/image-editor/use-transform-image.js","../../packages/block-editor/src/components/image-editor/use-save-image.js","../../packages/block-editor/src/components/image-editor/aspect-ratio-dropdown.js","webpack://wp/./packages/block-editor/node_modules/tslib/tslib.es6.js","webpack://wp/./packages/block-editor/node_modules/src/helpers.ts","webpack://wp/./packages/block-editor/node_modules/src/Cropper.tsx","../../packages/block-editor/src/components/image-editor/cropper.js","../../packages/icons/src/library/search.js","../../packages/block-editor/src/components/image-editor/zoom-dropdown.js","../../packages/icons/src/library/rotate-right.js","../../packages/block-editor/src/components/image-editor/rotation-button.js","../../packages/block-editor/src/components/image-editor/form-controls.js","../../packages/block-editor/src/components/image-editor/index.js","../../packages/block-editor/src/components/image-size-control/index.js","../../packages/block-editor/src/components/image-size-control/use-dimension-handler.js","../../packages/block-editor/src/components/url-popover/link-viewer-url.js","../../packages/block-editor/src/components/url-popover/index.js","../../packages/block-editor/src/components/url-popover/link-editor.js","../../packages/block-editor/src/components/url-popover/link-viewer.js","../../packages/block-editor/src/components/media-placeholder/index.js","../../packages/block-editor/src/components/panel-color-settings/index.js","../../packages/block-editor/src/components/rich-text/format-toolbar/index.js","../../packages/block-editor/src/components/rich-text/format-toolbar-container.js","../../packages/block-editor/src/components/rich-text/use-format-types.js","../../packages/block-editor/src/components/rich-text/event-listeners/before-input-rules.js","../../packages/block-editor/src/components/rich-text/event-listeners/input-rules.js","../../packages/block-editor/src/components/rich-text/utils.js","../../packages/block-editor/src/components/rich-text/event-listeners/paste-handler.js","../../packages/block-editor/src/components/rich-text/event-listeners/index.js","../../packages/block-editor/src/components/rich-text/prevent-event-discovery.js","../../packages/block-editor/src/components/rich-text/event-listeners/insert-replacement-text.js","../../packages/block-editor/src/components/rich-text/event-listeners/remove-browser-shortcuts.js","../../packages/block-editor/src/components/rich-text/event-listeners/shortcuts.js","../../packages/block-editor/src/components/rich-text/event-listeners/input-events.js","../../packages/block-editor/src/components/rich-text/event-listeners/undo-automatic-change.js","../../packages/block-editor/src/components/rich-text/event-listeners/delete.js","../../packages/block-editor/src/components/rich-text/event-listeners/enter.js","../../packages/block-editor/src/components/rich-text/event-listeners/firefox-compat.js","../../packages/block-editor/src/components/rich-text/format-edit.js","../../packages/block-editor/src/components/rich-text/content.js","../../packages/block-editor/src/components/rich-text/multiline.js","../../packages/block-editor/src/components/rich-text/index.js","../../packages/block-editor/src/components/rich-text/use-mark-persistent.js","../../packages/block-editor/src/components/rich-text/with-deprecations.js","../../packages/block-editor/src/components/editable-text/index.js","../../packages/block-editor/src/components/plain-text/index.js","../../packages/block-editor/src/components/responsive-block-control/label.js","../../packages/block-editor/src/components/responsive-block-control/index.js","../../packages/block-editor/src/components/rich-text/shortcut.js","../../packages/block-editor/src/components/rich-text/toolbar-button.js","../../packages/block-editor/src/components/rich-text/input-event.js","../../packages/block-editor/src/components/tool-selector/index.js","../../packages/block-editor/src/components/unit-control/index.js","../../packages/icons/src/library/arrow-left.js","../../packages/block-editor/src/components/url-input/button.js","../../packages/icons/src/library/image.js","../../packages/block-editor/src/components/url-popover/image-url-input-ui.js","../../packages/block-editor/src/components/preview-options/index.js","../../packages/block-editor/src/components/use-resize-canvas/index.js","../../packages/block-editor/src/components/skip-to-selected-block/index.js","webpack://wp/external window [\"wp\",\"wordcount\"]","../../packages/block-editor/src/components/multi-selection-inspector/index.js","../../packages/icons/src/library/cog.js","../../packages/icons/src/library/styles.js","../../packages/block-editor/src/components/inspector-controls-tabs/utils.js","../../packages/block-editor/src/components/inspector-controls-tabs/advanced-controls-panel.js","../../packages/block-editor/src/components/inspector-controls-tabs/position-controls-panel.js","../../packages/block-editor/src/components/inspector-controls-tabs/settings-tab.js","../../packages/block-editor/src/components/inspector-controls-tabs/styles-tab.js","../../packages/block-editor/src/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js","../../packages/block-editor/src/components/inspector-controls-tabs/index.js","../../packages/block-editor/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js","../../packages/block-editor/src/components/block-info-slot-fill/index.js","../../packages/block-editor/src/components/block-quick-navigation/index.js","../../packages/block-editor/src/components/block-inspector/index.js","../../packages/block-editor/src/components/block-inspector/useBlockInspectorAnimationSettings.js","../../packages/block-editor/src/components/copy-handler/index.js","../../packages/block-editor/src/components/inserter/library.js","../../packages/block-editor/src/components/selection-scroll-into-view/index.js","../../packages/block-editor/src/components/typewriter/index.js","../../packages/block-editor/src/components/recursion-provider/index.js","../../packages/block-editor/src/components/inspector-popover-header/index.js","../../packages/block-editor/src/components/publish-date-time-picker/index.js","../../packages/block-editor/src/elements/index.js","../../packages/block-editor/src/utils/get-px-from-css-unit.js","../../packages/block-editor/src/components/global-styles/image-settings-panel.js","../../packages/block-editor/src/components/global-styles/advanced-panel.js","../../packages/block-editor/src/components/global-styles/get-global-styles-changes.js","webpack://wp/./node_modules/memize/dist/index.js","../../packages/block-editor/src/components/rich-text/get-rich-text-values.js","../../packages/block-editor/src/components/dimensions-tool/scale-tool.js","webpack://wp/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://wp/./node_modules/@emotion/styled/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://wp/./node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://wp/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","webpack://wp/./node_modules/stylis/src/Utility.js","webpack://wp/./node_modules/stylis/src/Tokenizer.js","webpack://wp/./node_modules/stylis/src/Enum.js","webpack://wp/./node_modules/stylis/src/Serializer.js","webpack://wp/./node_modules/stylis/src/Prefixer.js","webpack://wp/./node_modules/stylis/src/Parser.js","webpack://wp/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://wp/./node_modules/stylis/src/Middleware.js","webpack://wp/./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://wp/./node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://wp/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","webpack://wp/./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js","webpack://wp/./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","webpack://wp/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://wp/./node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../packages/block-editor/src/components/dimensions-tool/width-height-tool.js","../../packages/block-editor/src/components/dimensions-tool/index.js","../../packages/block-editor/src/components/resolution-tool/index.js","../../packages/block-editor/src/private-apis.js","../../packages/block-editor/src/components/resizable-box-popover/index.js","../../packages/block-editor/src/components/block-removal-warning-modal/index.js"],"sourcesContent":["/*!\n\tautosize 4.0.2\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'exports'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, exports);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, mod.exports);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (module, exports) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function createEvent(name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = null;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\t\t\tta.style.height = ta.scrollHeight + heightOffset + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that \n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight < styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap.delete(ta);\n\t\t}.bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function autosize(el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function autosize(el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\texports.default = autosize;\n\tmodule.exports = exports['default'];\n});","// This code has been refactored for 140 bytes\n// You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js\nvar computedStyle = function (el, prop, getComputedStyle) {\n getComputedStyle = window.getComputedStyle;\n\n // In one fell swoop\n return (\n // If we have getComputedStyle\n getComputedStyle ?\n // Query it\n // TODO: From CSS-Query notes, we might need (node, null) for FF\n getComputedStyle(el) :\n\n // Otherwise, we are in IE and use currentStyle\n el.currentStyle\n )[\n // Switch to camelCase for CSSOM\n // DEV: Grabbed from jQuery\n // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194\n // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597\n prop.replace(/-(\\w)/gi, function (word, letter) {\n return letter.toUpperCase();\n })\n ];\n};\n\nmodule.exports = computedStyle;\n","export default function Diff() {}\n\nDiff.prototype = {\n diff(oldString, newString, options = {}) {\n let callback = options.callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n this.options = options;\n\n let self = this;\n\n function done(value) {\n if (callback) {\n setTimeout(function() { callback(undefined, value); }, 0);\n return true;\n } else {\n return value;\n }\n }\n\n // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n\n let newLen = newString.length, oldLen = oldString.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n let bestPath = [{ newPos: -1, components: [] }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n let oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([{value: this.join(newString), count: newString.length}]);\n }\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (let diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n let basePath;\n let addPath = bestPath[diagonalPath - 1],\n removePath = bestPath[diagonalPath + 1],\n oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n let canAdd = addPath && addPath.newPos + 1 < newLen,\n canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);\n\n // If we have hit the end of both strings, then we are done\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n }\n\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced.\n if (callback) {\n (function exec() {\n setTimeout(function() {\n // This should not happen, but we want to be safe.\n /* istanbul ignore next */\n if (editLength > maxEditLength) {\n return callback();\n }\n\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n } else {\n while (editLength <= maxEditLength) {\n let ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n\n pushComponent(components, added, removed) {\n let last = components[components.length - 1];\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {count: last.count + 1, added: added, removed: removed };\n } else {\n components.push({count: 1, added: added, removed: removed });\n }\n },\n extractCommon(basePath, newString, oldString, diagonalPath) {\n let newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath,\n\n commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({count: commonCount});\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n\n equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right\n || (this.options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n },\n removeEmpty(array) {\n let ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput(value) {\n return value;\n },\n tokenize(value) {\n return value.split('');\n },\n join(chars) {\n return chars.join('');\n }\n};\n\nfunction buildValues(diff, components, newString, oldString, useLongestToken) {\n let componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n let component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n let value = newString.slice(newPos, newPos + component.count);\n value = value.map(function(value, i) {\n let oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n\n // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n if (componentPos && components[componentPos - 1].added) {\n let tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n }\n\n // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n let lastComponent = components[componentLen - 1];\n if (componentLen > 1\n && typeof lastComponent.value === 'string'\n && (lastComponent.added || lastComponent.removed)\n && diff.equals('', lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\n","import Diff from './base';\n\nexport const characterDiff = new Diff();\nexport function diffChars(oldStr, newStr, options) { return characterDiff.diff(oldStr, newStr, options); }\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","// Load in dependencies\nvar computedStyle = require('computed-style');\n\n/**\n * Calculate the `line-height` of a given node\n * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.\n * @returns {Number} `line-height` of the element in pixels\n */\nfunction lineHeight(node) {\n // Grab the line-height via style\n var lnHeightStr = computedStyle(node, 'line-height');\n var lnHeight = parseFloat(lnHeightStr, 10);\n\n // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')\n if (lnHeightStr === lnHeight + '') {\n // Save the old lineHeight style and update the em unit to the element\n var _lnHeightStyle = node.style.lineHeight;\n node.style.lineHeight = lnHeightStr + 'em';\n\n // Calculate the em based height\n lnHeightStr = computedStyle(node, 'line-height');\n lnHeight = parseFloat(lnHeightStr, 10);\n\n // Revert the lineHeight style\n if (_lnHeightStyle) {\n node.style.lineHeight = _lnHeightStyle;\n } else {\n delete node.style.lineHeight;\n }\n }\n\n // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)\n // DEV: `em` units are converted to `pt` in IE6\n // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length\n if (lnHeightStr.indexOf('pt') !== -1) {\n lnHeight *= 4;\n lnHeight /= 3;\n // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)\n } else if (lnHeightStr.indexOf('mm') !== -1) {\n lnHeight *= 96;\n lnHeight /= 25.4;\n // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)\n } else if (lnHeightStr.indexOf('cm') !== -1) {\n lnHeight *= 96;\n lnHeight /= 2.54;\n // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)\n } else if (lnHeightStr.indexOf('in') !== -1) {\n lnHeight *= 96;\n // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)\n } else if (lnHeightStr.indexOf('pc') !== -1) {\n lnHeight *= 16;\n }\n\n // Continue our computation\n lnHeight = Math.round(lnHeight);\n\n // If the line-height is \"normal\", calculate by font-size\n if (lnHeightStr === 'normal') {\n // Create a temporary node\n var nodeName = node.nodeName;\n var _node = document.createElement(nodeName);\n _node.innerHTML = ' ';\n\n // If we have a text area, reset it to only 1 row\n // https://github.com/twolfson/line-height/issues/4\n if (nodeName.toUpperCase() === 'TEXTAREA') {\n _node.setAttribute('rows', '1');\n }\n\n // Set the font-size of the element\n var fontSizeStr = computedStyle(node, 'font-size');\n _node.style.fontSize = fontSizeStr;\n\n // Remove default padding/border which can affect offset height\n // https://github.com/twolfson/line-height/issues/4\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight\n _node.style.padding = '0px';\n _node.style.border = '0px';\n\n // Append it to the body\n var body = document.body;\n body.appendChild(_node);\n\n // Assume the line height of the element is the height\n var height = _node.offsetHeight;\n lnHeight = height;\n\n // Remove our child from the DOM\n body.removeChild(_node);\n }\n\n // Return the calculated height\n return lnHeight;\n}\n\n// Export lineHeight\nmodule.exports = lineHeight;\n","module.exports = require('./src/normalizeWheel.js');\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","module.exports = function postcssPrefixSelector(options) {\r\n const prefix = options.prefix;\r\n const prefixWithSpace = /\\s+$/.test(prefix) ? prefix : `${prefix} `;\r\n const ignoreFiles = options.ignoreFiles ? [].concat(options.ignoreFiles) : [];\r\n const includeFiles = options.includeFiles\r\n ? [].concat(options.includeFiles)\r\n : [];\r\n\r\n return function (root) {\r\n if (\r\n ignoreFiles.length &&\r\n root.source.input.file &&\r\n isFileInArray(root.source.input.file, ignoreFiles)\r\n ) {\r\n return;\r\n }\r\n if (\r\n includeFiles.length &&\r\n root.source.input.file &&\r\n !isFileInArray(root.source.input.file, includeFiles)\r\n ) {\r\n return;\r\n }\r\n\r\n root.walkRules((rule) => {\r\n const keyframeRules = [\r\n 'keyframes',\r\n '-webkit-keyframes',\r\n '-moz-keyframes',\r\n '-o-keyframes',\r\n '-ms-keyframes',\r\n ];\r\n\r\n if (rule.parent && keyframeRules.includes(rule.parent.name)) {\r\n return;\r\n }\r\n\r\n rule.selectors = rule.selectors.map((selector) => {\r\n if (options.exclude && excludeSelector(selector, options.exclude)) {\r\n return selector;\r\n }\r\n\r\n if (options.transform) {\r\n return options.transform(\r\n prefix,\r\n selector,\r\n prefixWithSpace + selector,\r\n root.source.input.file,\r\n rule\r\n );\r\n }\r\n\r\n return prefixWithSpace + selector;\r\n });\r\n });\r\n };\r\n};\r\n\r\nfunction isFileInArray(file, arr) {\r\n return arr.some((ruleOrString) => {\r\n if (ruleOrString instanceof RegExp) {\r\n return ruleOrString.test(file);\r\n }\r\n\r\n return file.includes(ruleOrString);\r\n });\r\n}\r\n\r\nfunction excludeSelector(selector, excludeArr) {\r\n return excludeArr.some((excludeRule) => {\r\n if (excludeRule instanceof RegExp) {\r\n return excludeRule.test(selector);\r\n }\r\n\r\n return selector === excludeRule;\r\n });\r\n}\r\n","'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'atrule'\n }\n\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.append(...children)\n }\n\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.prepend(...children)\n }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n","'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n constructor(defaults) {\n super(defaults)\n this.type = 'comment'\n }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet Declaration = require('./declaration')\nlet Comment = require('./comment')\nlet Node = require('./node')\n\nlet parse, Rule, AtRule, Root\n\nfunction cleanSource(nodes) {\n return nodes.map(i => {\n if (i.nodes) i.nodes = cleanSource(i.nodes)\n delete i.source\n return i\n })\n}\n\nfunction markDirtyUp(node) {\n node[isClean] = false\n if (node.proxyOf.nodes) {\n for (let i of node.proxyOf.nodes) {\n markDirtyUp(i)\n }\n }\n}\n\nclass Container extends Node {\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last)\n for (let node of nodes) this.proxyOf.nodes.push(node)\n }\n\n this.markDirty()\n\n return this\n }\n\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween)\n if (this.nodes) {\n for (let node of this.nodes) node.cleanRaws(keepBetween)\n }\n }\n\n each(callback) {\n if (!this.proxyOf.nodes) return undefined\n let iterator = this.getIterator()\n\n let index, result\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index = this.indexes[iterator]\n result = callback(this.proxyOf.nodes[index], index)\n if (result === false) break\n\n this.indexes[iterator] += 1\n }\n\n delete this.indexes[iterator]\n return result\n }\n\n every(condition) {\n return this.nodes.every(condition)\n }\n\n getIterator() {\n if (!this.lastEach) this.lastEach = 0\n if (!this.indexes) this.indexes = {}\n\n this.lastEach += 1\n let iterator = this.lastEach\n this.indexes[iterator] = 0\n\n return iterator\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (!node[prop]) {\n return node[prop]\n } else if (\n prop === 'each' ||\n (typeof prop === 'string' && prop.startsWith('walk'))\n ) {\n return (...args) => {\n return node[prop](\n ...args.map(i => {\n if (typeof i === 'function') {\n return (child, index) => i(child.toProxy(), index)\n } else {\n return i\n }\n })\n )\n }\n } else if (prop === 'every' || prop === 'some') {\n return cb => {\n return node[prop]((child, ...other) =>\n cb(child.toProxy(), ...other)\n )\n }\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else if (prop === 'nodes') {\n return node.nodes.map(i => i.toProxy())\n } else if (prop === 'first' || prop === 'last') {\n return node[prop].toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (prop === 'name' || prop === 'params' || prop === 'selector') {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n index(child) {\n if (typeof child === 'number') return child\n if (child.proxyOf) child = child.proxyOf\n return this.proxyOf.nodes.indexOf(child)\n }\n\n insertAfter(exist, add) {\n let existIndex = this.index(exist)\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex < index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n insertBefore(exist, add) {\n let existIndex = this.index(exist)\n let type = existIndex === 0 ? 'prepend' : false\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex <= index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n normalize(nodes, sample) {\n if (typeof nodes === 'string') {\n nodes = cleanSource(parse(nodes).nodes)\n } else if (typeof nodes === 'undefined') {\n nodes = []\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type === 'root' && this.type !== 'document') {\n nodes = nodes.nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type) {\n nodes = [nodes]\n } else if (nodes.prop) {\n if (typeof nodes.value === 'undefined') {\n throw new Error('Value field is missed in node creation')\n } else if (typeof nodes.value !== 'string') {\n nodes.value = String(nodes.value)\n }\n nodes = [new Declaration(nodes)]\n } else if (nodes.selector) {\n nodes = [new Rule(nodes)]\n } else if (nodes.name) {\n nodes = [new AtRule(nodes)]\n } else if (nodes.text) {\n nodes = [new Comment(nodes)]\n } else {\n throw new Error('Unknown node type in node creation')\n }\n\n let processed = nodes.map(i => {\n /* c8 ignore next */\n if (!i[my]) Container.rebuild(i)\n i = i.proxyOf\n if (i.parent) i.parent.removeChild(i)\n if (i[isClean]) markDirtyUp(i)\n if (typeof i.raws.before === 'undefined') {\n if (sample && typeof sample.raws.before !== 'undefined') {\n i.raws.before = sample.raws.before.replace(/\\S/g, '')\n }\n }\n i.parent = this.proxyOf\n return i\n })\n\n return processed\n }\n\n prepend(...children) {\n children = children.reverse()\n for (let child of children) {\n let nodes = this.normalize(child, this.first, 'prepend').reverse()\n for (let node of nodes) this.proxyOf.nodes.unshift(node)\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n push(child) {\n child.parent = this\n this.proxyOf.nodes.push(child)\n return this\n }\n\n removeAll() {\n for (let node of this.proxyOf.nodes) node.parent = undefined\n this.proxyOf.nodes = []\n\n this.markDirty()\n\n return this\n }\n\n removeChild(child) {\n child = this.index(child)\n this.proxyOf.nodes[child].parent = undefined\n this.proxyOf.nodes.splice(child, 1)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (index >= child) {\n this.indexes[id] = index - 1\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts\n opts = {}\n }\n\n this.walkDecls(decl => {\n if (opts.props && !opts.props.includes(decl.prop)) return\n if (opts.fast && !decl.value.includes(opts.fast)) return\n\n decl.value = decl.value.replace(pattern, callback)\n })\n\n this.markDirty()\n\n return this\n }\n\n some(condition) {\n return this.nodes.some(condition)\n }\n\n walk(callback) {\n return this.each((child, i) => {\n let result\n try {\n result = callback(child, i)\n } catch (e) {\n throw child.addToError(e)\n }\n if (result !== false && child.walk) {\n result = child.walk(callback)\n }\n\n return result\n })\n }\n\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name\n return this.walk((child, i) => {\n if (child.type === 'atrule') {\n return callback(child, i)\n }\n })\n }\n if (name instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'atrule' && name.test(child.name)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'atrule' && child.name === name) {\n return callback(child, i)\n }\n })\n }\n\n walkComments(callback) {\n return this.walk((child, i) => {\n if (child.type === 'comment') {\n return callback(child, i)\n }\n })\n }\n\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop\n return this.walk((child, i) => {\n if (child.type === 'decl') {\n return callback(child, i)\n }\n })\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'decl' && prop.test(child.prop)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'decl' && child.prop === prop) {\n return callback(child, i)\n }\n })\n }\n\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector\n\n return this.walk((child, i) => {\n if (child.type === 'rule') {\n return callback(child, i)\n }\n })\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'rule' && selector.test(child.selector)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'rule' && child.selector === selector) {\n return callback(child, i)\n }\n })\n }\n\n get first() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[0]\n }\n\n get last() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n }\n}\n\nContainer.registerParse = dependant => {\n parse = dependant\n}\n\nContainer.registerRule = dependant => {\n Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n AtRule = dependant\n}\n\nContainer.registerRoot = dependant => {\n Root = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n/* c8 ignore start */\nContainer.rebuild = node => {\n if (node.type === 'atrule') {\n Object.setPrototypeOf(node, AtRule.prototype)\n } else if (node.type === 'rule') {\n Object.setPrototypeOf(node, Rule.prototype)\n } else if (node.type === 'decl') {\n Object.setPrototypeOf(node, Declaration.prototype)\n } else if (node.type === 'comment') {\n Object.setPrototypeOf(node, Comment.prototype)\n } else if (node.type === 'root') {\n Object.setPrototypeOf(node, Root.prototype)\n }\n\n node[my] = true\n\n if (node.nodes) {\n node.nodes.forEach(child => {\n Container.rebuild(child)\n })\n }\n}\n/* c8 ignore stop */\n","'use strict'\n\nlet pico = require('picocolors')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n constructor(message, line, column, source, file, plugin) {\n super(message)\n this.name = 'CssSyntaxError'\n this.reason = message\n\n if (file) {\n this.file = file\n }\n if (source) {\n this.source = source\n }\n if (plugin) {\n this.plugin = plugin\n }\n if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n if (typeof line === 'number') {\n this.line = line\n this.column = column\n } else {\n this.line = line.line\n this.column = line.column\n this.endLine = column.line\n this.endColumn = column.column\n }\n }\n\n this.setMessage()\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError)\n }\n }\n\n setMessage() {\n this.message = this.plugin ? this.plugin + ': ' : ''\n this.message += this.file ? this.file : ''\n if (typeof this.line !== 'undefined') {\n this.message += ':' + this.line + ':' + this.column\n }\n this.message += ': ' + this.reason\n }\n\n showSourceCode(color) {\n if (!this.source) return ''\n\n let css = this.source\n if (color == null) color = pico.isColorSupported\n if (terminalHighlight) {\n if (color) css = terminalHighlight(css)\n }\n\n let lines = css.split(/\\r?\\n/)\n let start = Math.max(this.line - 3, 0)\n let end = Math.min(this.line + 2, lines.length)\n\n let maxWidth = String(end).length\n\n let mark, aside\n if (color) {\n let { bold, gray, red } = pico.createColors(true)\n mark = text => bold(red(text))\n aside = text => gray(text)\n } else {\n mark = aside = str => str\n }\n\n return lines\n .slice(start, end)\n .map((line, index) => {\n let number = start + 1 + index\n let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n if (number === this.line) {\n let spacing =\n aside(gutter.replace(/\\d/g, ' ')) +\n line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n }\n return ' ' + aside(gutter) + line\n })\n .join('\\n')\n }\n\n toString() {\n let code = this.showSourceCode()\n if (code) {\n code = '\\n\\n' + code + '\\n'\n }\n return this.name + ': ' + this.message + code\n }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n","'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n constructor(defaults) {\n if (\n defaults &&\n typeof defaults.value !== 'undefined' &&\n typeof defaults.value !== 'string'\n ) {\n defaults = { ...defaults, value: String(defaults.value) }\n }\n super(defaults)\n this.type = 'decl'\n }\n\n get variable() {\n return this.prop.startsWith('--') || this.prop[0] === '$'\n }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n constructor(defaults) {\n // type needs to be passed to super, otherwise child roots won't be normalized correctly\n super({ type: 'document', ...defaults })\n\n if (!this.nodes) {\n this.nodes = []\n }\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n\n return lazy.stringify()\n }\n}\n\nDocument.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet PreviousMap = require('./previous-map')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Input = require('./input')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nfunction fromJSON(json, inputs) {\n if (Array.isArray(json)) return json.map(n => fromJSON(n))\n\n let { inputs: ownInputs, ...defaults } = json\n if (ownInputs) {\n inputs = []\n for (let input of ownInputs) {\n let inputHydrated = { ...input, __proto__: Input.prototype }\n if (inputHydrated.map) {\n inputHydrated.map = {\n ...inputHydrated.map,\n __proto__: PreviousMap.prototype\n }\n }\n inputs.push(inputHydrated)\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))\n }\n if (defaults.source) {\n let { inputId, ...source } = defaults.source\n defaults.source = source\n if (inputId != null) {\n defaults.source.input = inputs[inputId]\n }\n }\n if (defaults.type === 'root') {\n return new Root(defaults)\n } else if (defaults.type === 'decl') {\n return new Declaration(defaults)\n } else if (defaults.type === 'rule') {\n return new Rule(defaults)\n } else if (defaults.type === 'comment') {\n return new Comment(defaults)\n } else if (defaults.type === 'atrule') {\n return new AtRule(defaults)\n } else {\n throw new Error('Unknown node type: ' + json.type)\n }\n}\n\nmodule.exports = fromJSON\nfromJSON.default = fromJSON\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\nlet { isAbsolute, resolve } = require('path')\nlet { nanoid } = require('nanoid/non-secure')\n\nlet terminalHighlight = require('./terminal-highlight')\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\n\nlet fromOffsetCache = Symbol('fromOffsetCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nclass Input {\n constructor(css, opts = {}) {\n if (\n css === null ||\n typeof css === 'undefined' ||\n (typeof css === 'object' && !css.toString)\n ) {\n throw new Error(`PostCSS received ${css} instead of CSS string`)\n }\n\n this.css = css.toString()\n\n if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n this.hasBOM = true\n this.css = this.css.slice(1)\n } else {\n this.hasBOM = false\n }\n\n if (opts.from) {\n if (\n !pathAvailable ||\n /^\\w+:\\/\\//.test(opts.from) ||\n isAbsolute(opts.from)\n ) {\n this.file = opts.from\n } else {\n this.file = resolve(opts.from)\n }\n }\n\n if (pathAvailable && sourceMapAvailable) {\n let map = new PreviousMap(this.css, opts)\n if (map.text) {\n this.map = map\n let file = map.consumer().file\n if (!this.file && file) this.file = this.mapResolve(file)\n }\n }\n\n if (!this.file) {\n this.id = ''\n }\n if (this.map) this.map.file = this.from\n }\n\n error(message, line, column, opts = {}) {\n let result, endLine, endColumn\n\n if (line && typeof line === 'object') {\n let start = line\n let end = column\n if (typeof start.offset === 'number') {\n let pos = this.fromOffset(start.offset)\n line = pos.line\n column = pos.col\n } else {\n line = start.line\n column = start.column\n }\n if (typeof end.offset === 'number') {\n let pos = this.fromOffset(end.offset)\n endLine = pos.line\n endColumn = pos.col\n } else {\n endLine = end.line\n endColumn = end.column\n }\n } else if (!column) {\n let pos = this.fromOffset(line)\n line = pos.line\n column = pos.col\n }\n\n let origin = this.origin(line, column, endLine, endColumn)\n if (origin) {\n result = new CssSyntaxError(\n message,\n origin.endLine === undefined\n ? origin.line\n : { column: origin.column, line: origin.line },\n origin.endLine === undefined\n ? origin.column\n : { column: origin.endColumn, line: origin.endLine },\n origin.source,\n origin.file,\n opts.plugin\n )\n } else {\n result = new CssSyntaxError(\n message,\n endLine === undefined ? line : { column, line },\n endLine === undefined ? column : { column: endColumn, line: endLine },\n this.css,\n this.file,\n opts.plugin\n )\n }\n\n result.input = { column, endColumn, endLine, line, source: this.css }\n if (this.file) {\n if (pathToFileURL) {\n result.input.url = pathToFileURL(this.file).toString()\n }\n result.input.file = this.file\n }\n\n return result\n }\n\n fromOffset(offset) {\n let lastLine, lineToIndex\n if (!this[fromOffsetCache]) {\n let lines = this.css.split('\\n')\n lineToIndex = new Array(lines.length)\n let prevIndex = 0\n\n for (let i = 0, l = lines.length; i < l; i++) {\n lineToIndex[i] = prevIndex\n prevIndex += lines[i].length + 1\n }\n\n this[fromOffsetCache] = lineToIndex\n } else {\n lineToIndex = this[fromOffsetCache]\n }\n lastLine = lineToIndex[lineToIndex.length - 1]\n\n let min = 0\n if (offset >= lastLine) {\n min = lineToIndex.length - 1\n } else {\n let max = lineToIndex.length - 2\n let mid\n while (min < max) {\n mid = min + ((max - min) >> 1)\n if (offset < lineToIndex[mid]) {\n max = mid - 1\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1\n } else {\n min = mid\n break\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n }\n }\n\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file\n }\n return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n }\n\n origin(line, column, endLine, endColumn) {\n if (!this.map) return false\n let consumer = this.map.consumer()\n\n let from = consumer.originalPositionFor({ column, line })\n if (!from.source) return false\n\n let to\n if (typeof endLine === 'number') {\n to = consumer.originalPositionFor({ column: endColumn, line: endLine })\n }\n\n let fromUrl\n\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL(from.source)\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n )\n }\n\n let result = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n }\n\n if (fromUrl.protocol === 'file:') {\n if (fileURLToPath) {\n result.file = fileURLToPath(fromUrl)\n } else {\n /* c8 ignore next 2 */\n throw new Error(`file: protocol is not available in this PostCSS build`)\n }\n }\n\n let source = consumer.sourceContentFor(from.source)\n if (source) result.source = source\n\n return result\n }\n\n toJSON() {\n let json = {}\n for (let name of ['hasBOM', 'css', 'file', 'id']) {\n if (this[name] != null) {\n json[name] = this[name]\n }\n }\n if (this.map) {\n json.map = { ...this.map }\n if (json.map.consumerCache) {\n json.map.consumerCache = undefined\n }\n }\n return json\n }\n\n get from() {\n return this.file || this.id\n }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input)\n}\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet Container = require('./container')\nlet Document = require('./document')\nlet warnOnce = require('./warn-once')\nlet Result = require('./result')\nlet parse = require('./parse')\nlet Root = require('./root')\n\nconst TYPE_TO_CLASS_NAME = {\n atrule: 'AtRule',\n comment: 'Comment',\n decl: 'Declaration',\n document: 'Document',\n root: 'Root',\n rule: 'Rule'\n}\n\nconst PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n}\n\nconst NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n let key = false\n let type = TYPE_TO_CLASS_NAME[node.type]\n if (node.type === 'decl') {\n key = node.prop.toLowerCase()\n } else if (node.type === 'atrule') {\n key = node.name.toLowerCase()\n }\n\n if (key && node.append) {\n return [\n type,\n type + '-' + key,\n CHILDREN,\n type + 'Exit',\n type + 'Exit-' + key\n ]\n } else if (key) {\n return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n } else if (node.append) {\n return [type, CHILDREN, type + 'Exit']\n } else {\n return [type, type + 'Exit']\n }\n}\n\nfunction toStack(node) {\n let events\n if (node.type === 'document') {\n events = ['Document', CHILDREN, 'DocumentExit']\n } else if (node.type === 'root') {\n events = ['Root', CHILDREN, 'RootExit']\n } else {\n events = getEvents(node)\n }\n\n return {\n eventIndex: 0,\n events,\n iterator: 0,\n node,\n visitorIndex: 0,\n visitors: []\n }\n}\n\nfunction cleanMarks(node) {\n node[isClean] = false\n if (node.nodes) node.nodes.forEach(i => cleanMarks(i))\n return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n constructor(processor, css, opts) {\n this.stringified = false\n this.processed = false\n\n let root\n if (\n typeof css === 'object' &&\n css !== null &&\n (css.type === 'root' || css.type === 'document')\n ) {\n root = cleanMarks(css)\n } else if (css instanceof LazyResult || css instanceof Result) {\n root = cleanMarks(css.root)\n if (css.map) {\n if (typeof opts.map === 'undefined') opts.map = {}\n if (!opts.map.inline) opts.map.inline = false\n opts.map.prev = css.map\n }\n } else {\n let parser = parse\n if (opts.syntax) parser = opts.syntax.parse\n if (opts.parser) parser = opts.parser\n if (parser.parse) parser = parser.parse\n\n try {\n root = parser(css, opts)\n } catch (error) {\n this.processed = true\n this.error = error\n }\n\n if (root && !root[my]) {\n /* c8 ignore next 2 */\n Container.rebuild(root)\n }\n }\n\n this.result = new Result(processor, root, opts)\n this.helpers = { ...postcss, postcss, result: this.result }\n this.plugins = this.processor.plugins.map(plugin => {\n if (typeof plugin === 'object' && plugin.prepare) {\n return { ...plugin, ...plugin.prepare(this.result) }\n } else {\n return plugin\n }\n })\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n if (this.processed) return Promise.resolve(this.result)\n if (!this.processing) {\n this.processing = this.runAsync()\n }\n return this.processing\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n getAsyncError() {\n throw new Error('Use process(css).then(cb) to work with async plugins')\n }\n\n handleError(error, node) {\n let plugin = this.result.lastPlugin\n try {\n if (node) node.addToError(error)\n this.error = error\n if (error.name === 'CssSyntaxError' && !error.plugin) {\n error.plugin = plugin.postcssPlugin\n error.setMessage()\n } else if (plugin.postcssVersion) {\n if (process.env.NODE_ENV !== 'production') {\n let pluginName = plugin.postcssPlugin\n let pluginVer = plugin.postcssVersion\n let runtimeVer = this.result.processor.version\n let a = pluginVer.split('.')\n let b = runtimeVer.split('.')\n\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n // eslint-disable-next-line no-console\n console.error(\n 'Unknown error from PostCSS plugin. Your current PostCSS ' +\n 'version is ' +\n runtimeVer +\n ', but ' +\n pluginName +\n ' uses ' +\n pluginVer +\n '. Perhaps this is the source of the error below.'\n )\n }\n }\n }\n } catch (err) {\n /* c8 ignore next 3 */\n // eslint-disable-next-line no-console\n if (console && console.error) console.error(err)\n }\n return error\n }\n\n prepareVisitors() {\n this.listeners = {}\n let add = (plugin, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = []\n this.listeners[type].push([plugin, cb])\n }\n for (let plugin of this.plugins) {\n if (typeof plugin === 'object') {\n for (let event in plugin) {\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n `Try to update PostCSS (${this.processor.version} now).`\n )\n }\n if (!NOT_VISITORS[event]) {\n if (typeof plugin[event] === 'object') {\n for (let filter in plugin[event]) {\n if (filter === '*') {\n add(plugin, event, plugin[event][filter])\n } else {\n add(\n plugin,\n event + '-' + filter.toLowerCase(),\n plugin[event][filter]\n )\n }\n }\n } else if (typeof plugin[event] === 'function') {\n add(plugin, event, plugin[event])\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0\n }\n\n async runAsync() {\n this.plugin = 0\n for (let i = 0; i < this.plugins.length; i++) {\n let plugin = this.plugins[i]\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (error) {\n throw this.handleError(error)\n }\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n let stack = [toStack(root)]\n while (stack.length > 0) {\n let promise = this.visitTick(stack)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (e) {\n let node = stack[stack.length - 1].node\n throw this.handleError(e, node)\n }\n }\n }\n }\n\n if (this.listeners.OnceExit) {\n for (let [plugin, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin\n try {\n if (root.type === 'document') {\n let roots = root.nodes.map(subRoot =>\n visitor(subRoot, this.helpers)\n )\n\n await Promise.all(roots)\n } else {\n await visitor(root, this.helpers)\n }\n } catch (e) {\n throw this.handleError(e)\n }\n }\n }\n }\n\n this.processed = true\n return this.stringify()\n }\n\n runOnRoot(plugin) {\n this.result.lastPlugin = plugin\n try {\n if (typeof plugin === 'object' && plugin.Once) {\n if (this.result.root.type === 'document') {\n let roots = this.result.root.nodes.map(root =>\n plugin.Once(root, this.helpers)\n )\n\n if (isPromise(roots[0])) {\n return Promise.all(roots)\n }\n\n return roots\n }\n\n return plugin.Once(this.result.root, this.helpers)\n } else if (typeof plugin === 'function') {\n return plugin(this.result.root, this.result)\n }\n } catch (error) {\n throw this.handleError(error)\n }\n }\n\n stringify() {\n if (this.error) throw this.error\n if (this.stringified) return this.result\n this.stringified = true\n\n this.sync()\n\n let opts = this.result.opts\n let str = stringify\n if (opts.syntax) str = opts.syntax.stringify\n if (opts.stringifier) str = opts.stringifier\n if (str.stringify) str = str.stringify\n\n let map = new MapGenerator(str, this.result.root, this.result.opts)\n let data = map.generate()\n this.result.css = data[0]\n this.result.map = data[1]\n\n return this.result\n }\n\n sync() {\n if (this.error) throw this.error\n if (this.processed) return this.result\n this.processed = true\n\n if (this.processing) {\n throw this.getAsyncError()\n }\n\n for (let plugin of this.plugins) {\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n this.walkSync(root)\n }\n if (this.listeners.OnceExit) {\n if (root.type === 'document') {\n for (let subRoot of root.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot)\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root)\n }\n }\n }\n\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this.opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this.css\n }\n\n visitSync(visitors, node) {\n for (let [plugin, visitor] of visitors) {\n this.result.lastPlugin = plugin\n let promise\n try {\n promise = visitor(node, this.helpers)\n } catch (e) {\n throw this.handleError(e, node.proxyOf)\n }\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n return true\n }\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n }\n\n visitTick(stack) {\n let visit = stack[stack.length - 1]\n let { node, visitors } = visit\n\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n stack.pop()\n return\n }\n\n if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n let [plugin, visitor] = visitors[visit.visitorIndex]\n visit.visitorIndex += 1\n if (visit.visitorIndex === visitors.length) {\n visit.visitors = []\n visit.visitorIndex = 0\n }\n this.result.lastPlugin = plugin\n try {\n return visitor(node.toProxy(), this.helpers)\n } catch (e) {\n throw this.handleError(e, node)\n }\n }\n\n if (visit.iterator !== 0) {\n let iterator = visit.iterator\n let child\n while ((child = node.nodes[node.indexes[iterator]])) {\n node.indexes[iterator] += 1\n if (!child[isClean]) {\n child[isClean] = true\n stack.push(toStack(child))\n return\n }\n }\n visit.iterator = 0\n delete node.indexes[iterator]\n }\n\n let events = visit.events\n while (visit.eventIndex < events.length) {\n let event = events[visit.eventIndex]\n visit.eventIndex += 1\n if (event === CHILDREN) {\n if (node.nodes && node.nodes.length) {\n node[isClean] = true\n visit.iterator = node.getIterator()\n }\n return\n } else if (this.listeners[event]) {\n visit.visitors = this.listeners[event]\n return\n }\n }\n stack.pop()\n }\n\n walkSync(node) {\n node[isClean] = true\n let events = getEvents(node)\n for (let event of events) {\n if (event === CHILDREN) {\n if (node.nodes) {\n node.each(child => {\n if (!child[isClean]) this.walkSync(child)\n })\n }\n } else {\n let visitors = this.listeners[event]\n if (visitors) {\n if (this.visitSync(visitors, node.toProxy())) return\n }\n }\n }\n }\n\n warnings() {\n return this.sync().warnings()\n }\n\n get content() {\n return this.stringify().content\n }\n\n get css() {\n return this.stringify().css\n }\n\n get map() {\n return this.stringify().map\n }\n\n get messages() {\n return this.sync().messages\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n return this.sync().root\n }\n\n get [Symbol.toStringTag]() {\n return 'LazyResult'\n }\n}\n\nLazyResult.registerPostcss = dependant => {\n postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n","'use strict'\n\nlet list = {\n comma(string) {\n return list.split(string, [','], true)\n },\n\n space(string) {\n let spaces = [' ', '\\n', '\\t']\n return list.split(string, spaces)\n },\n\n split(string, separators, last) {\n let array = []\n let current = ''\n let split = false\n\n let func = 0\n let inQuote = false\n let prevQuote = ''\n let escape = false\n\n for (let letter of string) {\n if (escape) {\n escape = false\n } else if (letter === '\\\\') {\n escape = true\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true\n prevQuote = letter\n } else if (letter === '(') {\n func += 1\n } else if (letter === ')') {\n if (func > 0) func -= 1\n } else if (func === 0) {\n if (separators.includes(letter)) split = true\n }\n\n if (split) {\n if (current !== '') array.push(current.trim())\n current = ''\n split = false\n } else {\n current += letter\n }\n }\n\n if (last || current !== '') array.push(current.trim())\n return array\n }\n}\n\nmodule.exports = list\nlist.default = list\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { dirname, relative, resolve, sep } = require('path')\nlet { pathToFileURL } = require('url')\n\nlet Input = require('./input')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(dirname && resolve && relative && sep)\n\nclass MapGenerator {\n constructor(stringify, root, opts, cssString) {\n this.stringify = stringify\n this.mapOpts = opts.map || {}\n this.root = root\n this.opts = opts\n this.css = cssString\n this.originalCSS = cssString\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute\n\n this.memoizedFileURLs = new Map()\n this.memoizedPaths = new Map()\n this.memoizedURLs = new Map()\n }\n\n addAnnotation() {\n let content\n\n if (this.isInline()) {\n content =\n 'data:application/json;base64,' + this.toBase64(this.map.toString())\n } else if (typeof this.mapOpts.annotation === 'string') {\n content = this.mapOpts.annotation\n } else if (typeof this.mapOpts.annotation === 'function') {\n content = this.mapOpts.annotation(this.opts.to, this.root)\n } else {\n content = this.outputFile() + '.map'\n }\n let eol = '\\n'\n if (this.css.includes('\\r\\n')) eol = '\\r\\n'\n\n this.css += eol + '/*# sourceMappingURL=' + content + ' */'\n }\n\n applyPrevMaps() {\n for (let prev of this.previous()) {\n let from = this.toUrl(this.path(prev.file))\n let root = prev.root || dirname(prev.file)\n let map\n\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text)\n if (map.sourcesContent) {\n map.sourcesContent = null\n }\n } else {\n map = prev.consumer()\n }\n\n this.map.applySourceMap(map, from, this.toUrl(this.path(root)))\n }\n }\n\n clearAnnotation() {\n if (this.mapOpts.annotation === false) return\n\n if (this.root) {\n let node\n for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n node = this.root.nodes[i]\n if (node.type !== 'comment') continue\n if (node.text.indexOf('# sourceMappingURL=') === 0) {\n this.root.removeChild(i)\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, '')\n }\n }\n\n generate() {\n this.clearAnnotation()\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap()\n } else {\n let result = ''\n this.stringify(this.root, i => {\n result += i\n })\n return [result]\n }\n }\n\n generateMap() {\n if (this.root) {\n this.generateString()\n } else if (this.previous().length === 1) {\n let prev = this.previous()[0].consumer()\n prev.file = this.outputFile()\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n })\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n })\n this.map.addMapping({\n generated: { column: 0, line: 1 },\n original: { column: 0, line: 1 },\n source: this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : ''\n })\n }\n\n if (this.isSourcesContent()) this.setSourcesContent()\n if (this.root && this.previous().length > 0) this.applyPrevMaps()\n if (this.isAnnotation()) this.addAnnotation()\n\n if (this.isInline()) {\n return [this.css]\n } else {\n return [this.css, this.map]\n }\n }\n\n generateString() {\n this.css = ''\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n })\n\n let line = 1\n let column = 1\n\n let noSource = ''\n let mapping = {\n generated: { column: 0, line: 0 },\n original: { column: 0, line: 0 },\n source: ''\n }\n\n let lines, last\n this.stringify(this.root, (str, node, type) => {\n this.css += str\n\n if (node && type !== 'end') {\n mapping.generated.line = line\n mapping.generated.column = column - 1\n if (node.source && node.source.start) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.start.line\n mapping.original.column = node.source.start.column - 1\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n this.map.addMapping(mapping)\n }\n }\n\n lines = str.match(/\\n/g)\n if (lines) {\n line += lines.length\n last = str.lastIndexOf('\\n')\n column = str.length - last\n } else {\n column += str.length\n }\n\n if (node && type !== 'start') {\n let p = node.parent || { raws: {} }\n let childless =\n node.type === 'decl' || (node.type === 'atrule' && !node.nodes)\n if (!childless || node !== p.last || p.raws.semicolon) {\n if (node.source && node.source.end) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.end.line\n mapping.original.column = node.source.end.column - 1\n mapping.generated.line = line\n mapping.generated.column = column - 2\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n mapping.generated.line = line\n mapping.generated.column = column - 1\n this.map.addMapping(mapping)\n }\n }\n }\n })\n }\n\n isAnnotation() {\n if (this.isInline()) {\n return true\n }\n if (typeof this.mapOpts.annotation !== 'undefined') {\n return this.mapOpts.annotation\n }\n if (this.previous().length) {\n return this.previous().some(i => i.annotation)\n }\n return true\n }\n\n isInline() {\n if (typeof this.mapOpts.inline !== 'undefined') {\n return this.mapOpts.inline\n }\n\n let annotation = this.mapOpts.annotation\n if (typeof annotation !== 'undefined' && annotation !== true) {\n return false\n }\n\n if (this.previous().length) {\n return this.previous().some(i => i.inline)\n }\n return true\n }\n\n isMap() {\n if (typeof this.opts.map !== 'undefined') {\n return !!this.opts.map\n }\n return this.previous().length > 0\n }\n\n isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n return this.mapOpts.sourcesContent\n }\n if (this.previous().length) {\n return this.previous().some(i => i.withContent())\n }\n return true\n }\n\n outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to)\n } else if (this.opts.from) {\n return this.path(this.opts.from)\n } else {\n return 'to.css'\n }\n }\n\n path(file) {\n if (this.mapOpts.absolute) return file\n if (file.charCodeAt(0) === 60 /* `<` */) return file\n if (/^\\w+:\\/\\//.test(file)) return file\n let cached = this.memoizedPaths.get(file)\n if (cached) return cached\n\n let from = this.opts.to ? dirname(this.opts.to) : '.'\n\n if (typeof this.mapOpts.annotation === 'string') {\n from = dirname(resolve(from, this.mapOpts.annotation))\n }\n\n let path = relative(from, file)\n this.memoizedPaths.set(file, path)\n\n return path\n }\n\n previous() {\n if (!this.previousMaps) {\n this.previousMaps = []\n if (this.root) {\n this.root.walk(node => {\n if (node.source && node.source.input.map) {\n let map = node.source.input.map\n if (!this.previousMaps.includes(map)) {\n this.previousMaps.push(map)\n }\n }\n })\n } else {\n let input = new Input(this.originalCSS, this.opts)\n if (input.map) this.previousMaps.push(input.map)\n }\n }\n\n return this.previousMaps\n }\n\n setSourcesContent() {\n let already = {}\n if (this.root) {\n this.root.walk(node => {\n if (node.source) {\n let from = node.source.input.from\n if (from && !already[from]) {\n already[from] = true\n let fromUrl = this.usesFileUrls\n ? this.toFileUrl(from)\n : this.toUrl(this.path(from))\n this.map.setSourceContent(fromUrl, node.source.input.css)\n }\n }\n })\n } else if (this.css) {\n let from = this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : ''\n this.map.setSourceContent(from, this.css)\n }\n }\n\n sourcePath(node) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from)\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node.source.input.from)\n } else {\n return this.toUrl(this.path(node.source.input.from))\n }\n }\n\n toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString('base64')\n } else {\n return window.btoa(unescape(encodeURIComponent(str)))\n }\n }\n\n toFileUrl(path) {\n let cached = this.memoizedFileURLs.get(path)\n if (cached) return cached\n\n if (pathToFileURL) {\n let fileURL = pathToFileURL(path).toString()\n this.memoizedFileURLs.set(path, fileURL)\n\n return fileURL\n } else {\n throw new Error(\n '`map.absolute` option is not available in this PostCSS build'\n )\n }\n }\n\n toUrl(path) {\n let cached = this.memoizedURLs.get(path)\n if (cached) return cached\n\n if (sep === '\\\\') {\n path = path.replace(/\\\\/g, '/')\n }\n\n let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n this.memoizedURLs.set(path, url)\n\n return url\n }\n}\n\nmodule.exports = MapGenerator\n","'use strict'\n\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet warnOnce = require('./warn-once')\nlet parse = require('./parse')\nconst Result = require('./result')\n\nclass NoWorkResult {\n constructor(processor, css, opts) {\n css = css.toString()\n this.stringified = false\n\n this._processor = processor\n this._css = css\n this._opts = opts\n this._map = undefined\n let root\n\n let str = stringify\n this.result = new Result(this._processor, root, this._opts)\n this.result.css = css\n\n let self = this\n Object.defineProperty(this.result, 'root', {\n get() {\n return self.root\n }\n })\n\n let map = new MapGenerator(str, root, this._opts, css)\n if (map.isMap()) {\n let [generatedCSS, generatedMap] = map.generate()\n if (generatedCSS) {\n this.result.css = generatedCSS\n }\n if (generatedMap) {\n this.result.map = generatedMap\n }\n } else {\n map.clearAnnotation()\n this.result.css = map.css\n }\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n return Promise.resolve(this.result)\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n sync() {\n if (this.error) throw this.error\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this._opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this._css\n }\n\n warnings() {\n return []\n }\n\n get content() {\n return this.result.css\n }\n\n get css() {\n return this.result.css\n }\n\n get map() {\n return this.result.map\n }\n\n get messages() {\n return []\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n if (this._root) {\n return this._root\n }\n\n let root\n let parser = parse\n\n try {\n root = parser(this._css, this._opts)\n } catch (error) {\n this.error = error\n }\n\n if (this.error) {\n throw this.error\n } else {\n this._root = root\n return root\n }\n }\n\n get [Symbol.toStringTag]() {\n return 'NoWorkResult'\n }\n}\n\nmodule.exports = NoWorkResult\nNoWorkResult.default = NoWorkResult\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\n\nfunction cloneNode(obj, parent) {\n let cloned = new obj.constructor()\n\n for (let i in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n /* c8 ignore next 2 */\n continue\n }\n if (i === 'proxyCache') continue\n let value = obj[i]\n let type = typeof value\n\n if (i === 'parent' && type === 'object') {\n if (parent) cloned[i] = parent\n } else if (i === 'source') {\n cloned[i] = value\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(j => cloneNode(j, cloned))\n } else {\n if (type === 'object' && value !== null) value = cloneNode(value)\n cloned[i] = value\n }\n }\n\n return cloned\n}\n\nclass Node {\n constructor(defaults = {}) {\n this.raws = {}\n this[isClean] = false\n this[my] = true\n\n for (let name in defaults) {\n if (name === 'nodes') {\n this.nodes = []\n for (let node of defaults[name]) {\n if (typeof node.clone === 'function') {\n this.append(node.clone())\n } else {\n this.append(node)\n }\n }\n } else {\n this[name] = defaults[name]\n }\n }\n }\n\n addToError(error) {\n error.postcssNode = this\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s = this.source\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n )\n }\n return error\n }\n\n after(add) {\n this.parent.insertAfter(this, add)\n return this\n }\n\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name]\n }\n return this\n }\n\n before(add) {\n this.parent.insertBefore(this, add)\n return this\n }\n\n cleanRaws(keepBetween) {\n delete this.raws.before\n delete this.raws.after\n if (!keepBetween) delete this.raws.between\n }\n\n clone(overrides = {}) {\n let cloned = cloneNode(this)\n for (let name in overrides) {\n cloned[name] = overrides[name]\n }\n return cloned\n }\n\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertAfter(this, cloned)\n return cloned\n }\n\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertBefore(this, cloned)\n return cloned\n }\n\n error(message, opts = {}) {\n if (this.source) {\n let { end, start } = this.rangeBy(opts)\n return this.source.input.error(\n message,\n { column: start.column, line: start.line },\n { column: end.column, line: end.line },\n opts\n )\n }\n return new CssSyntaxError(message)\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (\n prop === 'prop' ||\n prop === 'value' ||\n prop === 'name' ||\n prop === 'params' ||\n prop === 'important' ||\n /* c8 ignore next */\n prop === 'text'\n ) {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n markDirty() {\n if (this[isClean]) {\n this[isClean] = false\n let next = this\n while ((next = next.parent)) {\n next[isClean] = false\n }\n }\n }\n\n next() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index + 1]\n }\n\n positionBy(opts, stringRepresentation) {\n let pos = this.source.start\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation)\n } else if (opts.word) {\n stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) pos = this.positionInside(index, stringRepresentation)\n }\n return pos\n }\n\n positionInside(index, stringRepresentation) {\n let string = stringRepresentation || this.toString()\n let column = this.source.start.column\n let line = this.source.start.line\n\n for (let i = 0; i < index; i++) {\n if (string[i] === '\\n') {\n column = 1\n line += 1\n } else {\n column += 1\n }\n }\n\n return { column, line }\n }\n\n prev() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index - 1]\n }\n\n rangeBy(opts) {\n let start = {\n column: this.source.start.column,\n line: this.source.start.line\n }\n let end = this.source.end\n ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n }\n : {\n column: start.column + 1,\n line: start.line\n }\n\n if (opts.word) {\n let stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) {\n start = this.positionInside(index, stringRepresentation)\n end = this.positionInside(index + opts.word.length, stringRepresentation)\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n }\n } else if (opts.index) {\n start = this.positionInside(opts.index)\n }\n\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n }\n } else if (typeof opts.endIndex === 'number') {\n end = this.positionInside(opts.endIndex)\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1)\n }\n }\n\n if (\n end.line < start.line ||\n (end.line === start.line && end.column <= start.column)\n ) {\n end = { column: start.column + 1, line: start.line }\n }\n\n return { end, start }\n }\n\n raw(prop, defaultType) {\n let str = new Stringifier()\n return str.raw(this, prop, defaultType)\n }\n\n remove() {\n if (this.parent) {\n this.parent.removeChild(this)\n }\n this.parent = undefined\n return this\n }\n\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this\n let foundSelf = false\n for (let node of nodes) {\n if (node === this) {\n foundSelf = true\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node)\n bookmark = node\n } else {\n this.parent.insertBefore(bookmark, node)\n }\n }\n\n if (!foundSelf) {\n this.remove()\n }\n }\n\n return this\n }\n\n root() {\n let result = this\n while (result.parent && result.parent.type !== 'document') {\n result = result.parent\n }\n return result\n }\n\n toJSON(_, inputs) {\n let fixed = {}\n let emitInputs = inputs == null\n inputs = inputs || new Map()\n let inputsNextIndex = 0\n\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n /* c8 ignore next 2 */\n continue\n }\n if (name === 'parent' || name === 'proxyCache') continue\n let value = this[name]\n\n if (Array.isArray(value)) {\n fixed[name] = value.map(i => {\n if (typeof i === 'object' && i.toJSON) {\n return i.toJSON(null, inputs)\n } else {\n return i\n }\n })\n } else if (typeof value === 'object' && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs)\n } else if (name === 'source') {\n let inputId = inputs.get(value.input)\n if (inputId == null) {\n inputId = inputsNextIndex\n inputs.set(value.input, inputsNextIndex)\n inputsNextIndex++\n }\n fixed[name] = {\n end: value.end,\n inputId,\n start: value.start\n }\n } else {\n fixed[name] = value\n }\n }\n\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n }\n\n return fixed\n }\n\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor())\n }\n return this.proxyCache\n }\n\n toString(stringifier = stringify) {\n if (stringifier.stringify) stringifier = stringifier.stringify\n let result = ''\n stringifier(this, i => {\n result += i\n })\n return result\n }\n\n warn(result, text, opts) {\n let data = { node: this }\n for (let i in opts) data[i] = opts[i]\n return result.warn(text, data)\n }\n\n get proxyOf() {\n return this\n }\n}\n\nmodule.exports = Node\nNode.default = Node\n","'use strict'\n\nlet Container = require('./container')\nlet Parser = require('./parser')\nlet Input = require('./input')\n\nfunction parse(css, opts) {\n let input = new Input(css, opts)\n let parser = new Parser(input)\n try {\n parser.parse()\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n if (e.name === 'CssSyntaxError' && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse SCSS with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-scss parser'\n } else if (/\\.sass/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Sass with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-sass parser'\n } else if (/\\.less$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Less with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-less parser'\n }\n }\n }\n throw e\n }\n\n return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet tokenizer = require('./tokenize')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nconst SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n}\n\nfunction findLastWithPosition(tokens) {\n for (let i = tokens.length - 1; i >= 0; i--) {\n let token = tokens[i]\n let pos = token[3] || token[2]\n if (pos) return pos\n }\n}\n\nclass Parser {\n constructor(input) {\n this.input = input\n\n this.root = new Root()\n this.current = this.root\n this.spaces = ''\n this.semicolon = false\n\n this.createTokenizer()\n this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }\n }\n\n atrule(token) {\n let node = new AtRule()\n node.name = token[1].slice(1)\n if (node.name === '') {\n this.unnamedAtrule(node, token)\n }\n this.init(node, token[2])\n\n let type\n let prev\n let shift\n let last = false\n let open = false\n let params = []\n let brackets = []\n\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n type = token[0]\n\n if (type === '(' || type === '[') {\n brackets.push(type === '(' ? ')' : ']')\n } else if (type === '{' && brackets.length > 0) {\n brackets.push('}')\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n }\n\n if (brackets.length === 0) {\n if (type === ';') {\n node.source.end = this.getPosition(token[2])\n node.source.end.offset++\n this.semicolon = true\n break\n } else if (type === '{') {\n open = true\n break\n } else if (type === '}') {\n if (params.length > 0) {\n shift = params.length - 1\n prev = params[shift]\n while (prev && prev[0] === 'space') {\n prev = params[--shift]\n }\n if (prev) {\n node.source.end = this.getPosition(prev[3] || prev[2])\n node.source.end.offset++\n }\n }\n this.end(token)\n break\n } else {\n params.push(token)\n }\n } else {\n params.push(token)\n }\n\n if (this.tokenizer.endOfFile()) {\n last = true\n break\n }\n }\n\n node.raws.between = this.spacesAndCommentsFromEnd(params)\n if (params.length) {\n node.raws.afterName = this.spacesAndCommentsFromStart(params)\n this.raw(node, 'params', params)\n if (last) {\n token = params[params.length - 1]\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n this.spaces = node.raws.between\n node.raws.between = ''\n }\n } else {\n node.raws.afterName = ''\n node.params = ''\n }\n\n if (open) {\n node.nodes = []\n this.current = node\n }\n }\n\n checkMissedSemicolon(tokens) {\n let colon = this.colon(tokens)\n if (colon === false) return\n\n let founded = 0\n let token\n for (let j = colon - 1; j >= 0; j--) {\n token = tokens[j]\n if (token[0] !== 'space') {\n founded += 1\n if (founded === 2) break\n }\n }\n // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n // And because we need it after that one we do +1 to get the next one.\n throw this.input.error(\n 'Missed semicolon',\n token[0] === 'word' ? token[3] + 1 : token[2]\n )\n }\n\n colon(tokens) {\n let brackets = 0\n let token, type, prev\n for (let [i, element] of tokens.entries()) {\n token = element\n type = token[0]\n\n if (type === '(') {\n brackets += 1\n }\n if (type === ')') {\n brackets -= 1\n }\n if (brackets === 0 && type === ':') {\n if (!prev) {\n this.doubleColon(token)\n } else if (prev[0] === 'word' && prev[1] === 'progid') {\n continue\n } else {\n return i\n }\n }\n\n prev = token\n }\n return false\n }\n\n comment(token) {\n let node = new Comment()\n this.init(node, token[2])\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n\n let text = token[1].slice(2, -2)\n if (/^\\s*$/.test(text)) {\n node.text = ''\n node.raws.left = text\n node.raws.right = ''\n } else {\n let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/)\n node.text = match[2]\n node.raws.left = match[1]\n node.raws.right = match[3]\n }\n }\n\n createTokenizer() {\n this.tokenizer = tokenizer(this.input)\n }\n\n decl(tokens, customProperty) {\n let node = new Declaration()\n this.init(node, tokens[0][2])\n\n let last = tokens[tokens.length - 1]\n if (last[0] === ';') {\n this.semicolon = true\n tokens.pop()\n }\n\n node.source.end = this.getPosition(\n last[3] || last[2] || findLastWithPosition(tokens)\n )\n node.source.end.offset++\n\n while (tokens[0][0] !== 'word') {\n if (tokens.length === 1) this.unknownWord(tokens)\n node.raws.before += tokens.shift()[1]\n }\n node.source.start = this.getPosition(tokens[0][2])\n\n node.prop = ''\n while (tokens.length) {\n let type = tokens[0][0]\n if (type === ':' || type === 'space' || type === 'comment') {\n break\n }\n node.prop += tokens.shift()[1]\n }\n\n node.raws.between = ''\n\n let token\n while (tokens.length) {\n token = tokens.shift()\n\n if (token[0] === ':') {\n node.raws.between += token[1]\n break\n } else {\n if (token[0] === 'word' && /\\w/.test(token[1])) {\n this.unknownWord([token])\n }\n node.raws.between += token[1]\n }\n }\n\n if (node.prop[0] === '_' || node.prop[0] === '*') {\n node.raws.before += node.prop[0]\n node.prop = node.prop.slice(1)\n }\n\n let firstSpaces = []\n let next\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n firstSpaces.push(tokens.shift())\n }\n\n this.precheckMissedSemicolon(tokens)\n\n for (let i = tokens.length - 1; i >= 0; i--) {\n token = tokens[i]\n if (token[1].toLowerCase() === '!important') {\n node.important = true\n let string = this.stringFrom(tokens, i)\n string = this.spacesFromEnd(tokens) + string\n if (string !== ' !important') node.raws.important = string\n break\n } else if (token[1].toLowerCase() === 'important') {\n let cache = tokens.slice(0)\n let str = ''\n for (let j = i; j > 0; j--) {\n let type = cache[j][0]\n if (str.trim().indexOf('!') === 0 && type !== 'space') {\n break\n }\n str = cache.pop()[1] + str\n }\n if (str.trim().indexOf('!') === 0) {\n node.important = true\n node.raws.important = str\n tokens = cache\n }\n }\n\n if (token[0] !== 'space' && token[0] !== 'comment') {\n break\n }\n }\n\n let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')\n\n if (hasWord) {\n node.raws.between += firstSpaces.map(i => i[1]).join('')\n firstSpaces = []\n }\n this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)\n\n if (node.value.includes(':') && !customProperty) {\n this.checkMissedSemicolon(tokens)\n }\n }\n\n doubleColon(token) {\n throw this.input.error(\n 'Double colon',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n\n emptyRule(token) {\n let node = new Rule()\n this.init(node, token[2])\n node.selector = ''\n node.raws.between = ''\n this.current = node\n }\n\n end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.semicolon = false\n\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.spaces = ''\n\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2])\n this.current.source.end.offset++\n this.current = this.current.parent\n } else {\n this.unexpectedClose(token)\n }\n }\n\n endFile() {\n if (this.current.parent) this.unclosedBlock()\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.root.source.end = this.getPosition(this.tokenizer.position())\n }\n\n freeSemicolon(token) {\n this.spaces += token[1]\n if (this.current.nodes) {\n let prev = this.current.nodes[this.current.nodes.length - 1]\n if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces\n this.spaces = ''\n }\n }\n }\n\n // Helpers\n\n getPosition(offset) {\n let pos = this.input.fromOffset(offset)\n return {\n column: pos.col,\n line: pos.line,\n offset\n }\n }\n\n init(node, offset) {\n this.current.push(node)\n node.source = {\n input: this.input,\n start: this.getPosition(offset)\n }\n node.raws.before = this.spaces\n this.spaces = ''\n if (node.type !== 'comment') this.semicolon = false\n }\n\n other(start) {\n let end = false\n let type = null\n let colon = false\n let bracket = null\n let brackets = []\n let customProperty = start[1].startsWith('--')\n\n let tokens = []\n let token = start\n while (token) {\n type = token[0]\n tokens.push(token)\n\n if (type === '(' || type === '[') {\n if (!bracket) bracket = token\n brackets.push(type === '(' ? ')' : ']')\n } else if (customProperty && colon && type === '{') {\n if (!bracket) bracket = token\n brackets.push('}')\n } else if (brackets.length === 0) {\n if (type === ';') {\n if (colon) {\n this.decl(tokens, customProperty)\n return\n } else {\n break\n }\n } else if (type === '{') {\n this.rule(tokens)\n return\n } else if (type === '}') {\n this.tokenizer.back(tokens.pop())\n end = true\n break\n } else if (type === ':') {\n colon = true\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n if (brackets.length === 0) bracket = null\n }\n\n token = this.tokenizer.nextToken()\n }\n\n if (this.tokenizer.endOfFile()) end = true\n if (brackets.length > 0) this.unclosedBracket(bracket)\n\n if (end && colon) {\n if (!customProperty) {\n while (tokens.length) {\n token = tokens[tokens.length - 1][0]\n if (token !== 'space' && token !== 'comment') break\n this.tokenizer.back(tokens.pop())\n }\n }\n this.decl(tokens, customProperty)\n } else {\n this.unknownWord(tokens)\n }\n }\n\n parse() {\n let token\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n\n switch (token[0]) {\n case 'space':\n this.spaces += token[1]\n break\n\n case ';':\n this.freeSemicolon(token)\n break\n\n case '}':\n this.end(token)\n break\n\n case 'comment':\n this.comment(token)\n break\n\n case 'at-word':\n this.atrule(token)\n break\n\n case '{':\n this.emptyRule(token)\n break\n\n default:\n this.other(token)\n break\n }\n }\n this.endFile()\n }\n\n precheckMissedSemicolon(/* tokens */) {\n // Hook for Safe Parser\n }\n\n raw(node, prop, tokens, customProperty) {\n let token, type\n let length = tokens.length\n let value = ''\n let clean = true\n let next, prev\n\n for (let i = 0; i < length; i += 1) {\n token = tokens[i]\n type = token[0]\n if (type === 'space' && i === length - 1 && !customProperty) {\n clean = false\n } else if (type === 'comment') {\n prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'\n next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === ',') {\n clean = false\n } else {\n value += token[1]\n }\n } else {\n clean = false\n }\n } else {\n value += token[1]\n }\n }\n if (!clean) {\n let raw = tokens.reduce((all, i) => all + i[1], '')\n node.raws[prop] = { raw, value }\n }\n node[prop] = value\n }\n\n rule(tokens) {\n tokens.pop()\n\n let node = new Rule()\n this.init(node, tokens[0][2])\n\n node.raws.between = this.spacesAndCommentsFromEnd(tokens)\n this.raw(node, 'selector', tokens)\n this.current = node\n }\n\n spacesAndCommentsFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n // Errors\n\n spacesAndCommentsFromStart(tokens) {\n let next\n let spaces = ''\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n spaces += tokens.shift()[1]\n }\n return spaces\n }\n\n spacesFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n stringFrom(tokens, from) {\n let result = ''\n for (let i = from; i < tokens.length; i++) {\n result += tokens[i][1]\n }\n tokens.splice(from, tokens.length - from)\n return result\n }\n\n unclosedBlock() {\n let pos = this.current.source.start\n throw this.input.error('Unclosed block', pos.line, pos.column)\n }\n\n unclosedBracket(bracket) {\n throw this.input.error(\n 'Unclosed bracket',\n { offset: bracket[2] },\n { offset: bracket[2] + 1 }\n )\n }\n\n unexpectedClose(token) {\n throw this.input.error(\n 'Unexpected }',\n { offset: token[2] },\n { offset: token[2] + 1 }\n )\n }\n\n unknownWord(tokens) {\n throw this.input.error(\n 'Unknown word',\n { offset: tokens[0][2] },\n { offset: tokens[0][2] + tokens[0][1].length }\n )\n }\n\n unnamedAtrule(node, token) {\n throw this.input.error(\n 'At-rule without name',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n}\n\nmodule.exports = Parser\n","'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet LazyResult = require('./lazy-result')\nlet Container = require('./container')\nlet Processor = require('./processor')\nlet stringify = require('./stringify')\nlet fromJSON = require('./fromJSON')\nlet Document = require('./document')\nlet Warning = require('./warning')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Result = require('./result.js')\nlet Input = require('./input')\nlet parse = require('./parse')\nlet list = require('./list')\nlet Rule = require('./rule')\nlet Root = require('./root')\nlet Node = require('./node')\n\nfunction postcss(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0]\n }\n return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n let warningPrinted = false\n function creator(...args) {\n // eslint-disable-next-line no-console\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': postcss.plugin was deprecated. Migration guide:\\n' +\n 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n )\n if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n /* c8 ignore next 7 */\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' +\n 'https://www.w3ctech.com/topic/2226'\n )\n }\n }\n let transformer = initializer(...args)\n transformer.postcssPlugin = name\n transformer.postcssVersion = new Processor().version\n return transformer\n }\n\n let cache\n Object.defineProperty(creator, 'postcss', {\n get() {\n if (!cache) cache = creator()\n return cache\n }\n })\n\n creator.process = function (css, processOpts, pluginOpts) {\n return postcss([creator(pluginOpts)]).process(css, processOpts)\n }\n\n return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Processor = Processor\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { existsSync, readFileSync } = require('fs')\nlet { dirname, join } = require('path')\n\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, 'base64').toString()\n } else {\n /* c8 ignore next 2 */\n return window.atob(str)\n }\n}\n\nclass PreviousMap {\n constructor(css, opts) {\n if (opts.map === false) return\n this.loadAnnotation(css)\n this.inline = this.startWith(this.annotation, 'data:')\n\n let prev = opts.map ? opts.map.prev : undefined\n let text = this.loadMap(opts.from, prev)\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from\n }\n if (this.mapFile) this.root = dirname(this.mapFile)\n if (text) this.text = text\n }\n\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer(this.text)\n }\n return this.consumerCache\n }\n\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n let baseUri = /^data:application\\/json;base64,/\n let charsetUri = /^data:application\\/json;charset=utf-?8,/\n let uri = /^data:application\\/json,/\n\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n }\n\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length))\n }\n\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1]\n throw new Error('Unsupported source map encoding ' + encoding)\n }\n\n getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n }\n\n isMap(map) {\n if (typeof map !== 'object') return false\n return (\n typeof map.mappings === 'string' ||\n typeof map._mappings === 'string' ||\n Array.isArray(map.sections)\n )\n }\n\n loadAnnotation(css) {\n let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm)\n if (!comments) return\n\n // sourceMappingURLs from comments, strings, etc.\n let start = css.lastIndexOf(comments.pop())\n let end = css.indexOf('*/', start)\n\n if (start > -1 && end > -1) {\n // Locate the last sourceMappingURL to avoid pickin\n this.annotation = this.getAnnotationURL(css.substring(start, end))\n }\n }\n\n loadFile(path) {\n this.root = dirname(path)\n if (existsSync(path)) {\n this.mapFile = path\n return readFileSync(path, 'utf-8').toString().trim()\n }\n }\n\n loadMap(file, prev) {\n if (prev === false) return false\n\n if (prev) {\n if (typeof prev === 'string') {\n return prev\n } else if (typeof prev === 'function') {\n let prevPath = prev(file)\n if (prevPath) {\n let map = this.loadFile(prevPath)\n if (!map) {\n throw new Error(\n 'Unable to load previous source map: ' + prevPath.toString()\n )\n }\n return map\n }\n } else if (prev instanceof SourceMapConsumer) {\n return SourceMapGenerator.fromSourceMap(prev).toString()\n } else if (prev instanceof SourceMapGenerator) {\n return prev.toString()\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev)\n } else {\n throw new Error(\n 'Unsupported previous source map format: ' + prev.toString()\n )\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation)\n } else if (this.annotation) {\n let map = this.annotation\n if (file) map = join(dirname(file), map)\n return this.loadFile(map)\n }\n }\n\n startWith(string, start) {\n if (!string) return false\n return string.substr(0, start.length) === start\n }\n\n withContent() {\n return !!(\n this.consumer().sourcesContent &&\n this.consumer().sourcesContent.length > 0\n )\n }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n","'use strict'\n\nlet NoWorkResult = require('./no-work-result')\nlet LazyResult = require('./lazy-result')\nlet Document = require('./document')\nlet Root = require('./root')\n\nclass Processor {\n constructor(plugins = []) {\n this.version = '8.4.38'\n this.plugins = this.normalize(plugins)\n }\n\n normalize(plugins) {\n let normalized = []\n for (let i of plugins) {\n if (i.postcss === true) {\n i = i()\n } else if (i.postcss) {\n i = i.postcss\n }\n\n if (typeof i === 'object' && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins)\n } else if (typeof i === 'object' && i.postcssPlugin) {\n normalized.push(i)\n } else if (typeof i === 'function') {\n normalized.push(i)\n } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n 'one of the syntax/parser/stringifier options as outlined ' +\n 'in your PostCSS runner documentation.'\n )\n }\n } else {\n throw new Error(i + ' is not a PostCSS plugin')\n }\n }\n return normalized\n }\n\n process(css, opts = {}) {\n if (\n !this.plugins.length &&\n !opts.parser &&\n !opts.stringifier &&\n !opts.syntax\n ) {\n return new NoWorkResult(this, css, opts)\n } else {\n return new LazyResult(this, css, opts)\n }\n }\n\n use(plugin) {\n this.plugins = this.plugins.concat(this.normalize([plugin]))\n return this\n }\n}\n\nmodule.exports = Processor\nProcessor.default = Processor\n\nRoot.registerProcessor(Processor)\nDocument.registerProcessor(Processor)\n","'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n constructor(processor, root, opts) {\n this.processor = processor\n this.messages = []\n this.root = root\n this.opts = opts\n this.css = undefined\n this.map = undefined\n }\n\n toString() {\n return this.css\n }\n\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin\n }\n }\n\n let warning = new Warning(text, opts)\n this.messages.push(warning)\n\n return warning\n }\n\n warnings() {\n return this.messages.filter(i => i.type === 'warning')\n }\n\n get content() {\n return this.css\n }\n}\n\nmodule.exports = Result\nResult.default = Result\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'root'\n if (!this.nodes) this.nodes = []\n }\n\n normalize(child, sample, type) {\n let nodes = super.normalize(child)\n\n if (sample) {\n if (type === 'prepend') {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before\n } else {\n delete sample.raws.before\n }\n } else if (this.first !== sample) {\n for (let node of nodes) {\n node.raws.before = sample.raws.before\n }\n }\n }\n\n return nodes\n }\n\n removeChild(child, ignore) {\n let index = this.index(child)\n\n if (!ignore && index === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index].raws.before\n }\n\n return super.removeChild(child)\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n return lazy.stringify()\n }\n}\n\nRoot.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n\nContainer.registerRoot(Root)\n","'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'rule'\n if (!this.nodes) this.nodes = []\n }\n\n get selectors() {\n return list.comma(this.selector)\n }\n\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null\n let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n this.selector = values.join(sep)\n }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n","'use strict'\n\nconst DEFAULT_RAW = {\n after: '\\n',\n beforeClose: '\\n',\n beforeComment: '\\n',\n beforeDecl: '\\n',\n beforeOpen: ' ',\n beforeRule: '\\n',\n colon: ': ',\n commentLeft: ' ',\n commentRight: ' ',\n emptyBody: '',\n indent: ' ',\n semicolon: false\n}\n\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\nclass Stringifier {\n constructor(builder) {\n this.builder = builder\n }\n\n atrule(node, semicolon) {\n let name = '@' + node.name\n let params = node.params ? this.rawValue(node, 'params') : ''\n\n if (typeof node.raws.afterName !== 'undefined') {\n name += node.raws.afterName\n } else if (params) {\n name += ' '\n }\n\n if (node.nodes) {\n this.block(node, name + params)\n } else {\n let end = (node.raws.between || '') + (semicolon ? ';' : '')\n this.builder(name + params + end, node)\n }\n }\n\n beforeAfter(node, detect) {\n let value\n if (node.type === 'decl') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (node.type === 'comment') {\n value = this.raw(node, null, 'beforeComment')\n } else if (detect === 'before') {\n value = this.raw(node, null, 'beforeRule')\n } else {\n value = this.raw(node, null, 'beforeClose')\n }\n\n let buf = node.parent\n let depth = 0\n while (buf && buf.type !== 'root') {\n depth += 1\n buf = buf.parent\n }\n\n if (value.includes('\\n')) {\n let indent = this.raw(node, null, 'indent')\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent\n }\n }\n\n return value\n }\n\n block(node, start) {\n let between = this.raw(node, 'between', 'beforeOpen')\n this.builder(start + between + '{', node, 'start')\n\n let after\n if (node.nodes && node.nodes.length) {\n this.body(node)\n after = this.raw(node, 'after')\n } else {\n after = this.raw(node, 'after', 'emptyBody')\n }\n\n if (after) this.builder(after)\n this.builder('}', node, 'end')\n }\n\n body(node) {\n let last = node.nodes.length - 1\n while (last > 0) {\n if (node.nodes[last].type !== 'comment') break\n last -= 1\n }\n\n let semicolon = this.raw(node, 'semicolon')\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i]\n let before = this.raw(child, 'before')\n if (before) this.builder(before)\n this.stringify(child, last !== i || semicolon)\n }\n }\n\n comment(node) {\n let left = this.raw(node, 'left', 'commentLeft')\n let right = this.raw(node, 'right', 'commentRight')\n this.builder('/*' + left + node.text + right + '*/', node)\n }\n\n decl(node, semicolon) {\n let between = this.raw(node, 'between', 'colon')\n let string = node.prop + between + this.rawValue(node, 'value')\n\n if (node.important) {\n string += node.raws.important || ' !important'\n }\n\n if (semicolon) string += ';'\n this.builder(string, node)\n }\n\n document(node) {\n this.body(node)\n }\n\n raw(node, own, detect) {\n let value\n if (!detect) detect = own\n\n // Already had\n if (own) {\n value = node.raws[own]\n if (typeof value !== 'undefined') return value\n }\n\n let parent = node.parent\n\n if (detect === 'before') {\n // Hack for first rule in CSS\n if (!parent || (parent.type === 'root' && parent.first === node)) {\n return ''\n }\n\n // `root` nodes in `document` should use only their own raws\n if (parent && parent.type === 'document') {\n return ''\n }\n }\n\n // Floating child without parent\n if (!parent) return DEFAULT_RAW[detect]\n\n // Detect style by other nodes\n let root = node.root()\n if (!root.rawCache) root.rawCache = {}\n if (typeof root.rawCache[detect] !== 'undefined') {\n return root.rawCache[detect]\n }\n\n if (detect === 'before' || detect === 'after') {\n return this.beforeAfter(node, detect)\n } else {\n let method = 'raw' + capitalize(detect)\n if (this[method]) {\n value = this[method](root, node)\n } else {\n root.walk(i => {\n value = i.raws[own]\n if (typeof value !== 'undefined') return false\n })\n }\n }\n\n if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n root.rawCache[detect] = value\n return value\n }\n\n rawBeforeClose(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== 'undefined') {\n value = i.raws.after\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawBeforeComment(root, node) {\n let value\n root.walkComments(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeDecl(root, node) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeRule')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeOpen(root) {\n let value\n root.walk(i => {\n if (i.type !== 'decl') {\n value = i.raws.between\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawBeforeRule(root) {\n let value\n root.walk(i => {\n if (i.nodes && (i.parent !== root || root.first !== i)) {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawColon(root) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.between !== 'undefined') {\n value = i.raws.between.replace(/[^\\s:]/g, '')\n return false\n }\n })\n return value\n }\n\n rawEmptyBody(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawIndent(root) {\n if (root.raws.indent) return root.raws.indent\n let value\n root.walk(i => {\n let p = i.parent\n if (p && p !== root && p.parent && p.parent === root) {\n if (typeof i.raws.before !== 'undefined') {\n let parts = i.raws.before.split('\\n')\n value = parts[parts.length - 1]\n value = value.replace(/\\S/g, '')\n return false\n }\n }\n })\n return value\n }\n\n rawSemicolon(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n value = i.raws.semicolon\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawValue(node, prop) {\n let value = node[prop]\n let raw = node.raws[prop]\n if (raw && raw.value === value) {\n return raw.raw\n }\n\n return value\n }\n\n root(node) {\n this.body(node)\n if (node.raws.after) this.builder(node.raws.after)\n }\n\n rule(node) {\n this.block(node, this.rawValue(node, 'selector'))\n if (node.raws.ownSemicolon) {\n this.builder(node.raws.ownSemicolon, node, 'end')\n }\n }\n\n stringify(node, semicolon) {\n /* c8 ignore start */\n if (!this[node.type]) {\n throw new Error(\n 'Unknown AST node type ' +\n node.type +\n '. ' +\n 'Maybe you need to change PostCSS stringifier.'\n )\n }\n /* c8 ignore stop */\n this[node.type](node, semicolon)\n }\n}\n\nmodule.exports = Stringifier\nStringifier.default = Stringifier\n","'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n let str = new Stringifier(builder)\n str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n","'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n","'use strict'\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0)\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0)\nconst BACKSLASH = '\\\\'.charCodeAt(0)\nconst SLASH = '/'.charCodeAt(0)\nconst NEWLINE = '\\n'.charCodeAt(0)\nconst SPACE = ' '.charCodeAt(0)\nconst FEED = '\\f'.charCodeAt(0)\nconst TAB = '\\t'.charCodeAt(0)\nconst CR = '\\r'.charCodeAt(0)\nconst OPEN_SQUARE = '['.charCodeAt(0)\nconst CLOSE_SQUARE = ']'.charCodeAt(0)\nconst OPEN_PARENTHESES = '('.charCodeAt(0)\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0)\nconst OPEN_CURLY = '{'.charCodeAt(0)\nconst CLOSE_CURLY = '}'.charCodeAt(0)\nconst SEMICOLON = ';'.charCodeAt(0)\nconst ASTERISK = '*'.charCodeAt(0)\nconst COLON = ':'.charCodeAt(0)\nconst AT = '@'.charCodeAt(0)\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/\nconst RE_HEX_ESCAPE = /[\\da-f]/i\n\nmodule.exports = function tokenizer(input, options = {}) {\n let css = input.css.valueOf()\n let ignore = options.ignoreErrors\n\n let code, next, quote, content, escape\n let escaped, escapePos, prev, n, currentToken\n\n let length = css.length\n let pos = 0\n let buffer = []\n let returned = []\n\n function position() {\n return pos\n }\n\n function unclosed(what) {\n throw input.error('Unclosed ' + what, pos)\n }\n\n function endOfFile() {\n return returned.length === 0 && pos >= length\n }\n\n function nextToken(opts) {\n if (returned.length) return returned.pop()\n if (pos >= length) return\n\n let ignoreUnclosed = opts ? opts.ignoreUnclosed : false\n\n code = css.charCodeAt(pos)\n\n switch (code) {\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED: {\n next = pos\n do {\n next += 1\n code = css.charCodeAt(next)\n } while (\n code === SPACE ||\n code === NEWLINE ||\n code === TAB ||\n code === CR ||\n code === FEED\n )\n\n currentToken = ['space', css.slice(pos, next)]\n pos = next - 1\n break\n }\n\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES: {\n let controlChar = String.fromCharCode(code)\n currentToken = [controlChar, controlChar, pos]\n break\n }\n\n case OPEN_PARENTHESES: {\n prev = buffer.length ? buffer.pop()[1] : ''\n n = css.charCodeAt(pos + 1)\n if (\n prev === 'url' &&\n n !== SINGLE_QUOTE &&\n n !== DOUBLE_QUOTE &&\n n !== SPACE &&\n n !== NEWLINE &&\n n !== TAB &&\n n !== FEED &&\n n !== CR\n ) {\n next = pos\n do {\n escaped = false\n next = css.indexOf(')', next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos\n break\n } else {\n unclosed('bracket')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['brackets', css.slice(pos, next + 1), pos, next]\n\n pos = next\n } else {\n next = css.indexOf(')', pos + 1)\n content = css.slice(pos, next + 1)\n\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = ['(', '(', pos]\n } else {\n currentToken = ['brackets', content, pos, next]\n pos = next\n }\n }\n\n break\n }\n\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE: {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"'\n next = pos\n do {\n escaped = false\n next = css.indexOf(quote, next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1\n break\n } else {\n unclosed('string')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['string', css.slice(pos, next + 1), pos, next]\n pos = next\n break\n }\n\n case AT: {\n RE_AT_END.lastIndex = pos + 1\n RE_AT_END.test(css)\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_AT_END.lastIndex - 2\n }\n\n currentToken = ['at-word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n case BACKSLASH: {\n next = pos\n escape = true\n while (css.charCodeAt(next + 1) === BACKSLASH) {\n next += 1\n escape = !escape\n }\n code = css.charCodeAt(next + 1)\n if (\n escape &&\n code !== SLASH &&\n code !== SPACE &&\n code !== NEWLINE &&\n code !== TAB &&\n code !== CR &&\n code !== FEED\n ) {\n next += 1\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n next += 1\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1\n }\n }\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n default: {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf('*/', pos + 2) + 1\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length\n } else {\n unclosed('comment')\n }\n }\n\n currentToken = ['comment', css.slice(pos, next + 1), pos, next]\n pos = next\n } else {\n RE_WORD_END.lastIndex = pos + 1\n RE_WORD_END.test(css)\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_WORD_END.lastIndex - 2\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n buffer.push(currentToken)\n pos = next\n }\n\n break\n }\n }\n\n pos++\n return currentToken\n }\n\n function back(token) {\n returned.push(token)\n }\n\n return {\n back,\n endOfFile,\n nextToken,\n position\n }\n}\n","/* eslint-disable no-console */\n'use strict'\n\nlet printed = {}\n\nmodule.exports = function warnOnce(message) {\n if (printed[message]) return\n printed[message] = true\n\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(message)\n }\n}\n","'use strict'\n\nclass Warning {\n constructor(text, opts = {}) {\n this.type = 'warning'\n this.text = text\n\n if (opts.node && opts.node.source) {\n let range = opts.node.rangeBy(opts)\n this.line = range.start.line\n this.column = range.start.column\n this.endLine = range.end.line\n this.endColumn = range.end.column\n }\n\n for (let opt in opts) this[opt] = opts[opt]\n }\n\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message\n }\n\n if (this.plugin) {\n return this.plugin + ': ' + this.text\n }\n\n return this.text\n }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n t[p[i]] = s[p[i]];\n return t;\n};\nexports.__esModule = true;\nvar React = require(\"react\");\nvar PropTypes = require(\"prop-types\");\nvar autosize = require(\"autosize\");\nvar _getLineHeight = require(\"line-height\");\nvar getLineHeight = _getLineHeight;\nvar RESIZED = \"autosize:resized\";\n/**\n * A light replacement for built-in textarea component\n * which automaticaly adjusts its height to match the content\n */\nvar TextareaAutosizeClass = /** @class */ (function (_super) {\n __extends(TextareaAutosizeClass, _super);\n function TextareaAutosizeClass() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n lineHeight: null\n };\n _this.textarea = null;\n _this.onResize = function (e) {\n if (_this.props.onResize) {\n _this.props.onResize(e);\n }\n };\n _this.updateLineHeight = function () {\n if (_this.textarea) {\n _this.setState({\n lineHeight: getLineHeight(_this.textarea)\n });\n }\n };\n _this.onChange = function (e) {\n var onChange = _this.props.onChange;\n _this.currentValue = e.currentTarget.value;\n onChange && onChange(e);\n };\n return _this;\n }\n TextareaAutosizeClass.prototype.componentDidMount = function () {\n var _this = this;\n var _a = this.props, maxRows = _a.maxRows, async = _a.async;\n if (typeof maxRows === \"number\") {\n this.updateLineHeight();\n }\n if (typeof maxRows === \"number\" || async) {\n /*\n the defer is needed to:\n - force \"autosize\" to activate the scrollbar when this.props.maxRows is passed\n - support StyledComponents (see #71)\n */\n setTimeout(function () { return _this.textarea && autosize(_this.textarea); });\n }\n else {\n this.textarea && autosize(this.textarea);\n }\n if (this.textarea) {\n this.textarea.addEventListener(RESIZED, this.onResize);\n }\n };\n TextareaAutosizeClass.prototype.componentWillUnmount = function () {\n if (this.textarea) {\n this.textarea.removeEventListener(RESIZED, this.onResize);\n autosize.destroy(this.textarea);\n }\n };\n TextareaAutosizeClass.prototype.render = function () {\n var _this = this;\n 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;\n var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;\n return (React.createElement(\"textarea\", __assign({}, props, { onChange: this.onChange, style: maxHeight ? __assign({}, style, { maxHeight: maxHeight }) : style, ref: function (element) {\n _this.textarea = element;\n if (typeof _this.props.innerRef === 'function') {\n _this.props.innerRef(element);\n }\n else if (_this.props.innerRef) {\n _this.props.innerRef.current = element;\n }\n } }), children));\n };\n TextareaAutosizeClass.prototype.componentDidUpdate = function () {\n this.textarea && autosize.update(this.textarea);\n };\n TextareaAutosizeClass.defaultProps = {\n rows: 1,\n async: false\n };\n TextareaAutosizeClass.propTypes = {\n rows: PropTypes.number,\n maxRows: PropTypes.number,\n onResize: PropTypes.func,\n innerRef: PropTypes.any,\n async: PropTypes.bool\n };\n return TextareaAutosizeClass;\n}(React.Component));\nexports.TextareaAutosize = React.forwardRef(function (props, ref) {\n return React.createElement(TextareaAutosizeClass, __assign({}, props, { innerRef: ref }));\n});\n","\"use strict\";\nexports.__esModule = true;\nvar TextareaAutosize_1 = require(\"./TextareaAutosize\");\nexports[\"default\"] = TextareaAutosize_1.TextareaAutosize;\n","var characterMap = {\n\t\"À\": \"A\",\n\t\"Á\": \"A\",\n\t\"Â\": \"A\",\n\t\"Ã\": \"A\",\n\t\"Ä\": \"A\",\n\t\"Å\": \"A\",\n\t\"Ấ\": \"A\",\n\t\"Ắ\": \"A\",\n\t\"Ẳ\": \"A\",\n\t\"Ẵ\": \"A\",\n\t\"Ặ\": \"A\",\n\t\"Æ\": \"AE\",\n\t\"Ầ\": \"A\",\n\t\"Ằ\": \"A\",\n\t\"Ȃ\": \"A\",\n\t\"Ả\": \"A\",\n\t\"Ạ\": \"A\",\n\t\"Ẩ\": \"A\",\n\t\"Ẫ\": \"A\",\n\t\"Ậ\": \"A\",\n\t\"Ç\": \"C\",\n\t\"Ḉ\": \"C\",\n\t\"È\": \"E\",\n\t\"É\": \"E\",\n\t\"Ê\": \"E\",\n\t\"Ë\": \"E\",\n\t\"Ế\": \"E\",\n\t\"Ḗ\": \"E\",\n\t\"Ề\": \"E\",\n\t\"Ḕ\": \"E\",\n\t\"Ḝ\": \"E\",\n\t\"Ȇ\": \"E\",\n\t\"Ẻ\": \"E\",\n\t\"Ẽ\": \"E\",\n\t\"Ẹ\": \"E\",\n\t\"Ể\": \"E\",\n\t\"Ễ\": \"E\",\n\t\"Ệ\": \"E\",\n\t\"Ì\": \"I\",\n\t\"Í\": \"I\",\n\t\"Î\": \"I\",\n\t\"Ï\": \"I\",\n\t\"Ḯ\": \"I\",\n\t\"Ȋ\": \"I\",\n\t\"Ỉ\": \"I\",\n\t\"Ị\": \"I\",\n\t\"Ð\": \"D\",\n\t\"Ñ\": \"N\",\n\t\"Ò\": \"O\",\n\t\"Ó\": \"O\",\n\t\"Ô\": \"O\",\n\t\"Õ\": \"O\",\n\t\"Ö\": \"O\",\n\t\"Ø\": \"O\",\n\t\"Ố\": \"O\",\n\t\"Ṍ\": \"O\",\n\t\"Ṓ\": \"O\",\n\t\"Ȏ\": \"O\",\n\t\"Ỏ\": \"O\",\n\t\"Ọ\": \"O\",\n\t\"Ổ\": \"O\",\n\t\"Ỗ\": \"O\",\n\t\"Ộ\": \"O\",\n\t\"Ờ\": \"O\",\n\t\"Ở\": \"O\",\n\t\"Ỡ\": \"O\",\n\t\"Ớ\": \"O\",\n\t\"Ợ\": \"O\",\n\t\"Ù\": \"U\",\n\t\"Ú\": \"U\",\n\t\"Û\": \"U\",\n\t\"Ü\": \"U\",\n\t\"Ủ\": \"U\",\n\t\"Ụ\": \"U\",\n\t\"Ử\": \"U\",\n\t\"Ữ\": \"U\",\n\t\"Ự\": \"U\",\n\t\"Ý\": \"Y\",\n\t\"à\": \"a\",\n\t\"á\": \"a\",\n\t\"â\": \"a\",\n\t\"ã\": \"a\",\n\t\"ä\": \"a\",\n\t\"å\": \"a\",\n\t\"ấ\": \"a\",\n\t\"ắ\": \"a\",\n\t\"ẳ\": \"a\",\n\t\"ẵ\": \"a\",\n\t\"ặ\": \"a\",\n\t\"æ\": \"ae\",\n\t\"ầ\": \"a\",\n\t\"ằ\": \"a\",\n\t\"ȃ\": \"a\",\n\t\"ả\": \"a\",\n\t\"ạ\": \"a\",\n\t\"ẩ\": \"a\",\n\t\"ẫ\": \"a\",\n\t\"ậ\": \"a\",\n\t\"ç\": \"c\",\n\t\"ḉ\": \"c\",\n\t\"è\": \"e\",\n\t\"é\": \"e\",\n\t\"ê\": \"e\",\n\t\"ë\": \"e\",\n\t\"ế\": \"e\",\n\t\"ḗ\": \"e\",\n\t\"ề\": \"e\",\n\t\"ḕ\": \"e\",\n\t\"ḝ\": \"e\",\n\t\"ȇ\": \"e\",\n\t\"ẻ\": \"e\",\n\t\"ẽ\": \"e\",\n\t\"ẹ\": \"e\",\n\t\"ể\": \"e\",\n\t\"ễ\": \"e\",\n\t\"ệ\": \"e\",\n\t\"ì\": \"i\",\n\t\"í\": \"i\",\n\t\"î\": \"i\",\n\t\"ï\": \"i\",\n\t\"ḯ\": \"i\",\n\t\"ȋ\": \"i\",\n\t\"ỉ\": \"i\",\n\t\"ị\": \"i\",\n\t\"ð\": \"d\",\n\t\"ñ\": \"n\",\n\t\"ò\": \"o\",\n\t\"ó\": \"o\",\n\t\"ô\": \"o\",\n\t\"õ\": \"o\",\n\t\"ö\": \"o\",\n\t\"ø\": \"o\",\n\t\"ố\": \"o\",\n\t\"ṍ\": \"o\",\n\t\"ṓ\": \"o\",\n\t\"ȏ\": \"o\",\n\t\"ỏ\": \"o\",\n\t\"ọ\": \"o\",\n\t\"ổ\": \"o\",\n\t\"ỗ\": \"o\",\n\t\"ộ\": \"o\",\n\t\"ờ\": \"o\",\n\t\"ở\": \"o\",\n\t\"ỡ\": \"o\",\n\t\"ớ\": \"o\",\n\t\"ợ\": \"o\",\n\t\"ù\": \"u\",\n\t\"ú\": \"u\",\n\t\"û\": \"u\",\n\t\"ü\": \"u\",\n\t\"ủ\": \"u\",\n\t\"ụ\": \"u\",\n\t\"ử\": \"u\",\n\t\"ữ\": \"u\",\n\t\"ự\": \"u\",\n\t\"ý\": \"y\",\n\t\"ÿ\": \"y\",\n\t\"Ā\": \"A\",\n\t\"ā\": \"a\",\n\t\"Ă\": \"A\",\n\t\"ă\": \"a\",\n\t\"Ą\": \"A\",\n\t\"ą\": \"a\",\n\t\"Ć\": \"C\",\n\t\"ć\": \"c\",\n\t\"Ĉ\": \"C\",\n\t\"ĉ\": \"c\",\n\t\"Ċ\": \"C\",\n\t\"ċ\": \"c\",\n\t\"Č\": \"C\",\n\t\"č\": \"c\",\n\t\"C̆\": \"C\",\n\t\"c̆\": \"c\",\n\t\"Ď\": \"D\",\n\t\"ď\": \"d\",\n\t\"Đ\": \"D\",\n\t\"đ\": \"d\",\n\t\"Ē\": \"E\",\n\t\"ē\": \"e\",\n\t\"Ĕ\": \"E\",\n\t\"ĕ\": \"e\",\n\t\"Ė\": \"E\",\n\t\"ė\": \"e\",\n\t\"Ę\": \"E\",\n\t\"ę\": \"e\",\n\t\"Ě\": \"E\",\n\t\"ě\": \"e\",\n\t\"Ĝ\": \"G\",\n\t\"Ǵ\": \"G\",\n\t\"ĝ\": \"g\",\n\t\"ǵ\": \"g\",\n\t\"Ğ\": \"G\",\n\t\"ğ\": \"g\",\n\t\"Ġ\": \"G\",\n\t\"ġ\": \"g\",\n\t\"Ģ\": \"G\",\n\t\"ģ\": \"g\",\n\t\"Ĥ\": \"H\",\n\t\"ĥ\": \"h\",\n\t\"Ħ\": \"H\",\n\t\"ħ\": \"h\",\n\t\"Ḫ\": \"H\",\n\t\"ḫ\": \"h\",\n\t\"Ĩ\": \"I\",\n\t\"ĩ\": \"i\",\n\t\"Ī\": \"I\",\n\t\"ī\": \"i\",\n\t\"Ĭ\": \"I\",\n\t\"ĭ\": \"i\",\n\t\"Į\": \"I\",\n\t\"į\": \"i\",\n\t\"İ\": \"I\",\n\t\"ı\": \"i\",\n\t\"IJ\": \"IJ\",\n\t\"ij\": \"ij\",\n\t\"Ĵ\": \"J\",\n\t\"ĵ\": \"j\",\n\t\"Ķ\": \"K\",\n\t\"ķ\": \"k\",\n\t\"Ḱ\": \"K\",\n\t\"ḱ\": \"k\",\n\t\"K̆\": \"K\",\n\t\"k̆\": \"k\",\n\t\"Ĺ\": \"L\",\n\t\"ĺ\": \"l\",\n\t\"Ļ\": \"L\",\n\t\"ļ\": \"l\",\n\t\"Ľ\": \"L\",\n\t\"ľ\": \"l\",\n\t\"Ŀ\": \"L\",\n\t\"ŀ\": \"l\",\n\t\"Ł\": \"l\",\n\t\"ł\": \"l\",\n\t\"Ḿ\": \"M\",\n\t\"ḿ\": \"m\",\n\t\"M̆\": \"M\",\n\t\"m̆\": \"m\",\n\t\"Ń\": \"N\",\n\t\"ń\": \"n\",\n\t\"Ņ\": \"N\",\n\t\"ņ\": \"n\",\n\t\"Ň\": \"N\",\n\t\"ň\": \"n\",\n\t\"ʼn\": \"n\",\n\t\"N̆\": \"N\",\n\t\"n̆\": \"n\",\n\t\"Ō\": \"O\",\n\t\"ō\": \"o\",\n\t\"Ŏ\": \"O\",\n\t\"ŏ\": \"o\",\n\t\"Ő\": \"O\",\n\t\"ő\": \"o\",\n\t\"Œ\": \"OE\",\n\t\"œ\": \"oe\",\n\t\"P̆\": \"P\",\n\t\"p̆\": \"p\",\n\t\"Ŕ\": \"R\",\n\t\"ŕ\": \"r\",\n\t\"Ŗ\": \"R\",\n\t\"ŗ\": \"r\",\n\t\"Ř\": \"R\",\n\t\"ř\": \"r\",\n\t\"R̆\": \"R\",\n\t\"r̆\": \"r\",\n\t\"Ȓ\": \"R\",\n\t\"ȓ\": \"r\",\n\t\"Ś\": \"S\",\n\t\"ś\": \"s\",\n\t\"Ŝ\": \"S\",\n\t\"ŝ\": \"s\",\n\t\"Ş\": \"S\",\n\t\"Ș\": \"S\",\n\t\"ș\": \"s\",\n\t\"ş\": \"s\",\n\t\"Š\": \"S\",\n\t\"š\": \"s\",\n\t\"Ţ\": \"T\",\n\t\"ţ\": \"t\",\n\t\"ț\": \"t\",\n\t\"Ț\": \"T\",\n\t\"Ť\": \"T\",\n\t\"ť\": \"t\",\n\t\"Ŧ\": \"T\",\n\t\"ŧ\": \"t\",\n\t\"T̆\": \"T\",\n\t\"t̆\": \"t\",\n\t\"Ũ\": \"U\",\n\t\"ũ\": \"u\",\n\t\"Ū\": \"U\",\n\t\"ū\": \"u\",\n\t\"Ŭ\": \"U\",\n\t\"ŭ\": \"u\",\n\t\"Ů\": \"U\",\n\t\"ů\": \"u\",\n\t\"Ű\": \"U\",\n\t\"ű\": \"u\",\n\t\"Ų\": \"U\",\n\t\"ų\": \"u\",\n\t\"Ȗ\": \"U\",\n\t\"ȗ\": \"u\",\n\t\"V̆\": \"V\",\n\t\"v̆\": \"v\",\n\t\"Ŵ\": \"W\",\n\t\"ŵ\": \"w\",\n\t\"Ẃ\": \"W\",\n\t\"ẃ\": \"w\",\n\t\"X̆\": \"X\",\n\t\"x̆\": \"x\",\n\t\"Ŷ\": \"Y\",\n\t\"ŷ\": \"y\",\n\t\"Ÿ\": \"Y\",\n\t\"Y̆\": \"Y\",\n\t\"y̆\": \"y\",\n\t\"Ź\": \"Z\",\n\t\"ź\": \"z\",\n\t\"Ż\": \"Z\",\n\t\"ż\": \"z\",\n\t\"Ž\": \"Z\",\n\t\"ž\": \"z\",\n\t\"ſ\": \"s\",\n\t\"ƒ\": \"f\",\n\t\"Ơ\": \"O\",\n\t\"ơ\": \"o\",\n\t\"Ư\": \"U\",\n\t\"ư\": \"u\",\n\t\"Ǎ\": \"A\",\n\t\"ǎ\": \"a\",\n\t\"Ǐ\": \"I\",\n\t\"ǐ\": \"i\",\n\t\"Ǒ\": \"O\",\n\t\"ǒ\": \"o\",\n\t\"Ǔ\": \"U\",\n\t\"ǔ\": \"u\",\n\t\"Ǖ\": \"U\",\n\t\"ǖ\": \"u\",\n\t\"Ǘ\": \"U\",\n\t\"ǘ\": \"u\",\n\t\"Ǚ\": \"U\",\n\t\"ǚ\": \"u\",\n\t\"Ǜ\": \"U\",\n\t\"ǜ\": \"u\",\n\t\"Ứ\": \"U\",\n\t\"ứ\": \"u\",\n\t\"Ṹ\": \"U\",\n\t\"ṹ\": \"u\",\n\t\"Ǻ\": \"A\",\n\t\"ǻ\": \"a\",\n\t\"Ǽ\": \"AE\",\n\t\"ǽ\": \"ae\",\n\t\"Ǿ\": \"O\",\n\t\"ǿ\": \"o\",\n\t\"Þ\": \"TH\",\n\t\"þ\": \"th\",\n\t\"Ṕ\": \"P\",\n\t\"ṕ\": \"p\",\n\t\"Ṥ\": \"S\",\n\t\"ṥ\": \"s\",\n\t\"X́\": \"X\",\n\t\"x́\": \"x\",\n\t\"Ѓ\": \"Г\",\n\t\"ѓ\": \"г\",\n\t\"Ќ\": \"К\",\n\t\"ќ\": \"к\",\n\t\"A̋\": \"A\",\n\t\"a̋\": \"a\",\n\t\"E̋\": \"E\",\n\t\"e̋\": \"e\",\n\t\"I̋\": \"I\",\n\t\"i̋\": \"i\",\n\t\"Ǹ\": \"N\",\n\t\"ǹ\": \"n\",\n\t\"Ồ\": \"O\",\n\t\"ồ\": \"o\",\n\t\"Ṑ\": \"O\",\n\t\"ṑ\": \"o\",\n\t\"Ừ\": \"U\",\n\t\"ừ\": \"u\",\n\t\"Ẁ\": \"W\",\n\t\"ẁ\": \"w\",\n\t\"Ỳ\": \"Y\",\n\t\"ỳ\": \"y\",\n\t\"Ȁ\": \"A\",\n\t\"ȁ\": \"a\",\n\t\"Ȅ\": \"E\",\n\t\"ȅ\": \"e\",\n\t\"Ȉ\": \"I\",\n\t\"ȉ\": \"i\",\n\t\"Ȍ\": \"O\",\n\t\"ȍ\": \"o\",\n\t\"Ȑ\": \"R\",\n\t\"ȑ\": \"r\",\n\t\"Ȕ\": \"U\",\n\t\"ȕ\": \"u\",\n\t\"B̌\": \"B\",\n\t\"b̌\": \"b\",\n\t\"Č̣\": \"C\",\n\t\"č̣\": \"c\",\n\t\"Ê̌\": \"E\",\n\t\"ê̌\": \"e\",\n\t\"F̌\": \"F\",\n\t\"f̌\": \"f\",\n\t\"Ǧ\": \"G\",\n\t\"ǧ\": \"g\",\n\t\"Ȟ\": \"H\",\n\t\"ȟ\": \"h\",\n\t\"J̌\": \"J\",\n\t\"ǰ\": \"j\",\n\t\"Ǩ\": \"K\",\n\t\"ǩ\": \"k\",\n\t\"M̌\": \"M\",\n\t\"m̌\": \"m\",\n\t\"P̌\": \"P\",\n\t\"p̌\": \"p\",\n\t\"Q̌\": \"Q\",\n\t\"q̌\": \"q\",\n\t\"Ř̩\": \"R\",\n\t\"ř̩\": \"r\",\n\t\"Ṧ\": \"S\",\n\t\"ṧ\": \"s\",\n\t\"V̌\": \"V\",\n\t\"v̌\": \"v\",\n\t\"W̌\": \"W\",\n\t\"w̌\": \"w\",\n\t\"X̌\": \"X\",\n\t\"x̌\": \"x\",\n\t\"Y̌\": \"Y\",\n\t\"y̌\": \"y\",\n\t\"A̧\": \"A\",\n\t\"a̧\": \"a\",\n\t\"B̧\": \"B\",\n\t\"b̧\": \"b\",\n\t\"Ḑ\": \"D\",\n\t\"ḑ\": \"d\",\n\t\"Ȩ\": \"E\",\n\t\"ȩ\": \"e\",\n\t\"Ɛ̧\": \"E\",\n\t\"ɛ̧\": \"e\",\n\t\"Ḩ\": \"H\",\n\t\"ḩ\": \"h\",\n\t\"I̧\": \"I\",\n\t\"i̧\": \"i\",\n\t\"Ɨ̧\": \"I\",\n\t\"ɨ̧\": \"i\",\n\t\"M̧\": \"M\",\n\t\"m̧\": \"m\",\n\t\"O̧\": \"O\",\n\t\"o̧\": \"o\",\n\t\"Q̧\": \"Q\",\n\t\"q̧\": \"q\",\n\t\"U̧\": \"U\",\n\t\"u̧\": \"u\",\n\t\"X̧\": \"X\",\n\t\"x̧\": \"x\",\n\t\"Z̧\": \"Z\",\n\t\"z̧\": \"z\",\n\t\"й\":\"и\",\n\t\"Й\":\"И\",\n\t\"ё\":\"е\",\n\t\"Ё\":\"Е\",\n};\n\nvar chars = Object.keys(characterMap).join('|');\nvar allAccents = new RegExp(chars, 'g');\nvar firstAccent = new RegExp(chars, '');\n\nfunction matcher(match) {\n\treturn characterMap[match];\n}\n\nvar removeAccents = function(string) {\n\treturn string.replace(allAccents, matcher);\n};\n\nvar hasAccents = function(string) {\n\treturn !!string.match(firstAccent);\n};\n\nmodule.exports = removeAccents;\nmodule.exports.has = hasAccents;\nmodule.exports.remove = removeAccents;\n","const CSSValueParser = require('postcss-value-parser')\n\n/**\n * @type {import('postcss').PluginCreator}\n */\nmodule.exports = (opts) => {\n\n const DEFAULTS = {\n skipHostRelativeUrls: true,\n }\n const config = Object.assign(DEFAULTS, opts)\n\n return {\n postcssPlugin: 'rebaseUrl',\n\n Declaration(decl) {\n // The faster way to find Declaration node\n const parsedValue = CSSValueParser(decl.value)\n\n let valueChanged = false\n parsedValue.walk(node => {\n if (node.type !== 'function' || node.value !== 'url') {\n return\n }\n\n const urlVal = node.nodes[0].value\n\n // bases relative URLs with rootUrl\n const basedUrl = new URL(urlVal, opts.rootUrl)\n\n // skip host-relative, already normalized URLs (e.g. `/images/image.jpg`, without `..`s)\n if ((basedUrl.pathname === urlVal) && config.skipHostRelativeUrls) {\n return false // skip this value\n }\n\n node.nodes[0].value = basedUrl.toString()\n valueChanged = true\n\n return false // do not walk deeper\n })\n\n if (valueChanged) {\n decl.value = CSSValueParser.stringify(parsedValue)\n }\n\n }\n }\n}\n\nmodule.exports.postcss = true\n","var parse = require(\"./parse\");\nvar walk = require(\"./walk\");\nvar stringify = require(\"./stringify\");\n\nfunction ValueParser(value) {\n if (this instanceof ValueParser) {\n this.nodes = parse(value);\n return this;\n }\n return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n walk(this.nodes, cb, bubble);\n return this;\n};\n\nValueParser.unit = require(\"./unit\");\n\nValueParser.walk = walk;\n\nValueParser.stringify = stringify;\n\nmodule.exports = ValueParser;\n","var openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\nvar uLower = \"u\".charCodeAt(0);\nvar uUpper = \"U\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar isUnicodeRange = /^[a-f0-9?-]+$/i;\n\nmodule.exports = function(input) {\n var tokens = [];\n var value = input;\n\n var next,\n quote,\n prev,\n token,\n escape,\n escapePos,\n whitespacePos,\n parenthesesOpenPos;\n var pos = 0;\n var code = value.charCodeAt(pos);\n var max = value.length;\n var stack = [{ nodes: tokens }];\n var balanced = 0;\n var parent;\n\n var name = \"\";\n var before = \"\";\n var after = \"\";\n\n while (pos < max) {\n // Whitespaces\n if (code <= 32) {\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n token = value.slice(pos, next);\n\n prev = tokens[tokens.length - 1];\n if (code === closeParentheses && balanced) {\n after = token;\n } else if (prev && prev.type === \"div\") {\n prev.after = token;\n prev.sourceEndIndex += token.length;\n } else if (\n code === comma ||\n code === colon ||\n (code === slash &&\n value.charCodeAt(next + 1) !== star &&\n (!parent ||\n (parent && parent.type === \"function\" && parent.value !== \"calc\")))\n ) {\n before = token;\n } else {\n tokens.push({\n type: \"space\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n }\n\n pos = next;\n\n // Quotes\n } else if (code === singleQuote || code === doubleQuote) {\n next = pos;\n quote = code === singleQuote ? \"'\" : '\"';\n token = {\n type: \"string\",\n sourceIndex: pos,\n quote: quote\n };\n do {\n escape = false;\n next = value.indexOf(quote, next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += quote;\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n token.value = value.slice(pos + 1, next);\n token.sourceEndIndex = token.unclosed ? next : next + 1;\n tokens.push(token);\n pos = next + 1;\n code = value.charCodeAt(pos);\n\n // Comments\n } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n next = value.indexOf(\"*/\", pos);\n\n token = {\n type: \"comment\",\n sourceIndex: pos,\n sourceEndIndex: next + 2\n };\n\n if (next === -1) {\n token.unclosed = true;\n next = value.length;\n token.sourceEndIndex = next;\n }\n\n token.value = value.slice(pos + 2, next);\n tokens.push(token);\n\n pos = next + 2;\n code = value.charCodeAt(pos);\n\n // Operation within calc\n } else if (\n (code === slash || code === star) &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\"\n ) {\n token = value[pos];\n tokens.push({\n type: \"word\",\n sourceIndex: pos - before.length,\n sourceEndIndex: pos + token.length,\n value: token\n });\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Dividers\n } else if (code === slash || code === comma || code === colon) {\n token = value[pos];\n\n tokens.push({\n type: \"div\",\n sourceIndex: pos - before.length,\n sourceEndIndex: pos + token.length,\n value: token,\n before: before,\n after: \"\"\n });\n before = \"\";\n\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Open parentheses\n } else if (openParentheses === code) {\n // Whitespaces after open parentheses\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n parenthesesOpenPos = pos;\n token = {\n type: \"function\",\n sourceIndex: pos - name.length,\n value: name,\n before: value.slice(parenthesesOpenPos + 1, next)\n };\n pos = next;\n\n if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n next -= 1;\n do {\n escape = false;\n next = value.indexOf(\")\", next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += \")\";\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n // Whitespaces before closed\n whitespacePos = next;\n do {\n whitespacePos -= 1;\n code = value.charCodeAt(whitespacePos);\n } while (code <= 32);\n if (parenthesesOpenPos < whitespacePos) {\n if (pos !== whitespacePos + 1) {\n token.nodes = [\n {\n type: \"word\",\n sourceIndex: pos,\n sourceEndIndex: whitespacePos + 1,\n value: value.slice(pos, whitespacePos + 1)\n }\n ];\n } else {\n token.nodes = [];\n }\n if (token.unclosed && whitespacePos + 1 !== next) {\n token.after = \"\";\n token.nodes.push({\n type: \"space\",\n sourceIndex: whitespacePos + 1,\n sourceEndIndex: next,\n value: value.slice(whitespacePos + 1, next)\n });\n } else {\n token.after = value.slice(whitespacePos + 1, next);\n token.sourceEndIndex = next;\n }\n } else {\n token.after = \"\";\n token.nodes = [];\n }\n pos = next + 1;\n token.sourceEndIndex = token.unclosed ? next : pos;\n code = value.charCodeAt(pos);\n tokens.push(token);\n } else {\n balanced += 1;\n token.after = \"\";\n token.sourceEndIndex = pos + 1;\n tokens.push(token);\n stack.push(token);\n tokens = token.nodes = [];\n parent = token;\n }\n name = \"\";\n\n // Close parentheses\n } else if (closeParentheses === code && balanced) {\n pos += 1;\n code = value.charCodeAt(pos);\n\n parent.after = after;\n parent.sourceEndIndex += after.length;\n after = \"\";\n balanced -= 1;\n stack[stack.length - 1].sourceEndIndex = pos;\n stack.pop();\n parent = stack[balanced];\n tokens = parent.nodes;\n\n // Words\n } else {\n next = pos;\n do {\n if (code === backslash) {\n next += 1;\n }\n next += 1;\n code = value.charCodeAt(next);\n } while (\n next < max &&\n !(\n code <= 32 ||\n code === singleQuote ||\n code === doubleQuote ||\n code === comma ||\n code === colon ||\n code === slash ||\n code === openParentheses ||\n (code === star &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === slash &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === closeParentheses && balanced)\n )\n );\n token = value.slice(pos, next);\n\n if (openParentheses === code) {\n name = token;\n } else if (\n (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&\n plus === token.charCodeAt(1) &&\n isUnicodeRange.test(token.slice(2))\n ) {\n tokens.push({\n type: \"unicode-range\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n } else {\n tokens.push({\n type: \"word\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n }\n\n pos = next;\n }\n }\n\n for (pos = stack.length - 1; pos; pos -= 1) {\n stack[pos].unclosed = true;\n stack[pos].sourceEndIndex = value.length;\n }\n\n return stack[0].nodes;\n};\n","function stringifyNode(node, custom) {\n var type = node.type;\n var value = node.value;\n var buf;\n var customResult;\n\n if (custom && (customResult = custom(node)) !== undefined) {\n return customResult;\n } else if (type === \"word\" || type === \"space\") {\n return value;\n } else if (type === \"string\") {\n buf = node.quote || \"\";\n return buf + value + (node.unclosed ? \"\" : buf);\n } else if (type === \"comment\") {\n return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n } else if (type === \"div\") {\n return (node.before || \"\") + value + (node.after || \"\");\n } else if (Array.isArray(node.nodes)) {\n buf = stringify(node.nodes, custom);\n if (type !== \"function\") {\n return buf;\n }\n return (\n value +\n \"(\" +\n (node.before || \"\") +\n buf +\n (node.after || \"\") +\n (node.unclosed ? \"\" : \")\")\n );\n }\n return value;\n}\n\nfunction stringify(nodes, custom) {\n var result, i;\n\n if (Array.isArray(nodes)) {\n result = \"\";\n for (i = nodes.length - 1; ~i; i -= 1) {\n result = stringifyNode(nodes[i], custom) + result;\n }\n return result;\n }\n return stringifyNode(nodes, custom);\n}\n\nmodule.exports = stringify;\n","var minus = \"-\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar dot = \".\".charCodeAt(0);\nvar exp = \"e\".charCodeAt(0);\nvar EXP = \"E\".charCodeAt(0);\n\n// Check if three code points would start a number\n// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number\nfunction likeNumber(value) {\n var code = value.charCodeAt(0);\n var nextCode;\n\n if (code === plus || code === minus) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n var nextNextCode = value.charCodeAt(2);\n\n if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code === dot) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code >= 48 && code <= 57) {\n return true;\n }\n\n return false;\n}\n\n// Consume a number\n// https://www.w3.org/TR/css-syntax-3/#consume-number\nmodule.exports = function(value) {\n var pos = 0;\n var length = value.length;\n var code;\n var nextCode;\n var nextNextCode;\n\n if (length === 0 || !likeNumber(value)) {\n return false;\n }\n\n code = value.charCodeAt(pos);\n\n if (code === plus || code === minus) {\n pos++;\n }\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n\n if (code === dot && nextCode >= 48 && nextCode <= 57) {\n pos += 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n nextNextCode = value.charCodeAt(pos + 2);\n\n if (\n (code === exp || code === EXP) &&\n ((nextCode >= 48 && nextCode <= 57) ||\n ((nextCode === plus || nextCode === minus) &&\n nextNextCode >= 48 &&\n nextNextCode <= 57))\n ) {\n pos += nextCode === plus || nextCode === minus ? 3 : 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n return {\n number: value.slice(0, pos),\n unit: value.slice(pos)\n };\n};\n","module.exports = function walk(nodes, cb, bubble) {\n var i, max, node, result;\n\n for (i = 0, max = nodes.length; i < max; i += 1) {\n node = nodes[i];\n if (!bubble) {\n result = cb(node, i, nodes);\n }\n\n if (\n result !== false &&\n node.type === \"function\" &&\n Array.isArray(node.nodes)\n ) {\n walk(node.nodes, cb, bubble);\n }\n\n if (bubble) {\n cb(node, i, nodes);\n }\n }\n};\n","module.exports = window[\"React\"];","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nlet nanoid = (size = 21) => {\n let id = ''\n let i = size\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\nmodule.exports = { nanoid, customAlphabet }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blocks\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"element\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"data\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"compose\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"hooks\"];","/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\nexport const mayDisplayControlsKey = Symbol( 'mayDisplayControls' );\nexport const mayDisplayParentControlsKey = Symbol( 'mayDisplayParentControls' );\nexport const blockEditingModeKey = Symbol( 'blockEditingMode' );\nexport const blockBindingsKey = Symbol( 'blockBindings' );\nexport const isPreviewModeKey = Symbol( 'isPreviewMode' );\n\nexport const DEFAULT_BLOCK_EDIT_CONTEXT = {\n\tname: '',\n\tisSelected: false,\n};\n\nconst Context = createContext( DEFAULT_BLOCK_EDIT_CONTEXT );\nconst { Provider } = Context;\n\nexport { Provider as BlockEditContextProvider };\n\n/**\n * A hook that returns the block edit context.\n *\n * @return {Object} Block edit context\n */\nexport function useBlockEditContext() {\n\treturn useContext( Context );\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"deprecated\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"i18n\"];","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\n\nexport const PREFERENCES_DEFAULTS = {\n\tinsertUsage: {},\n};\n\n/**\n * The default editor settings\n *\n * @typedef {Object} SETTINGS_DEFAULT\n * @property {boolean} alignWide Enable/Disable Wide/Full Alignments\n * @property {boolean} supportsLayout Enable/disable layouts support in container blocks.\n * @property {boolean} imageEditing Image Editing settings set to false to disable.\n * @property {Array} imageSizes Available image sizes\n * @property {number} maxWidth Max width to constraint resizing\n * @property {boolean|Array} allowedBlockTypes Allowed block types\n * @property {boolean} hasFixedToolbar Whether or not the editor toolbar is fixed\n * @property {boolean} distractionFree Whether or not the editor UI is distraction free\n * @property {boolean} focusMode Whether the focus mode is enabled or not\n * @property {Array} styles Editor Styles\n * @property {boolean} keepCaretInsideBlock Whether caret should move between blocks in edit mode\n * @property {string} bodyPlaceholder Empty post placeholder\n * @property {string} titlePlaceholder Empty title placeholder\n * @property {boolean} canLockBlocks Whether the user can manage Block Lock state\n * @property {boolean} codeEditingEnabled Whether or not the user can switch to the code editor\n * @property {boolean} generateAnchors Enable/Disable auto anchor generation for Heading blocks\n * @property {boolean} enableOpenverseMediaCategory Enable/Disable the Openverse media category in the inserter.\n * @property {boolean} clearBlockSelection Whether the block editor should clear selection on mousedown when a block is not clicked.\n * @property {boolean} __experimentalCanUserUseUnfilteredHTML Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes.\n * @property {boolean} __experimentalBlockDirectory Whether the user has enabled the Block Directory\n * @property {Array} __experimentalBlockPatterns Array of objects representing the block patterns\n * @property {Array} __experimentalBlockPatternCategories Array of objects representing the block pattern categories\n */\nexport const SETTINGS_DEFAULTS = {\n\talignWide: false,\n\tsupportsLayout: true,\n\n\t// colors setting is not used anymore now defaults are passed from theme.json on the server and core has its own defaults.\n\t// The setting is only kept for backward compatibility purposes.\n\tcolors: [\n\t\t{\n\t\t\tname: __( 'Black' ),\n\t\t\tslug: 'black',\n\t\t\tcolor: '#000000',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Cyan bluish gray' ),\n\t\t\tslug: 'cyan-bluish-gray',\n\t\t\tcolor: '#abb8c3',\n\t\t},\n\t\t{\n\t\t\tname: __( 'White' ),\n\t\t\tslug: 'white',\n\t\t\tcolor: '#ffffff',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Pale pink' ),\n\t\t\tslug: 'pale-pink',\n\t\t\tcolor: '#f78da7',\n\t\t},\n\t\t{ name: __( 'Vivid red' ), slug: 'vivid-red', color: '#cf2e2e' },\n\t\t{\n\t\t\tname: __( 'Luminous vivid orange' ),\n\t\t\tslug: 'luminous-vivid-orange',\n\t\t\tcolor: '#ff6900',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous vivid amber' ),\n\t\t\tslug: 'luminous-vivid-amber',\n\t\t\tcolor: '#fcb900',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Light green cyan' ),\n\t\t\tslug: 'light-green-cyan',\n\t\t\tcolor: '#7bdcb5',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Vivid green cyan' ),\n\t\t\tslug: 'vivid-green-cyan',\n\t\t\tcolor: '#00d084',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Pale cyan blue' ),\n\t\t\tslug: 'pale-cyan-blue',\n\t\t\tcolor: '#8ed1fc',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Vivid cyan blue' ),\n\t\t\tslug: 'vivid-cyan-blue',\n\t\t\tcolor: '#0693e3',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Vivid purple' ),\n\t\t\tslug: 'vivid-purple',\n\t\t\tcolor: '#9b51e0',\n\t\t},\n\t],\n\t// fontSizes setting is not used anymore now defaults are passed from theme.json on the server and core has its own defaults.\n\t// The setting is only kept for backward compatibility purposes.\n\tfontSizes: [\n\t\t{\n\t\t\tname: _x( 'Small', 'font size name' ),\n\t\t\tsize: 13,\n\t\t\tslug: 'small',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Normal', 'font size name' ),\n\t\t\tsize: 16,\n\t\t\tslug: 'normal',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Medium', 'font size name' ),\n\t\t\tsize: 20,\n\t\t\tslug: 'medium',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Large', 'font size name' ),\n\t\t\tsize: 36,\n\t\t\tslug: 'large',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Huge', 'font size name' ),\n\t\t\tsize: 42,\n\t\t\tslug: 'huge',\n\t\t},\n\t],\n\n\t// Image default size slug.\n\timageDefaultSize: 'large',\n\n\timageSizes: [\n\t\t{ slug: 'thumbnail', name: __( 'Thumbnail' ) },\n\t\t{ slug: 'medium', name: __( 'Medium' ) },\n\t\t{ slug: 'large', name: __( 'Large' ) },\n\t\t{ slug: 'full', name: __( 'Full Size' ) },\n\t],\n\n\t// Allow plugin to disable Image Editor if need be.\n\timageEditing: true,\n\n\t// This is current max width of the block inner area\n\t// It's used to constraint image resizing and this value could be overridden later by themes\n\tmaxWidth: 580,\n\n\t// Allowed block types for the editor, defaulting to true (all supported).\n\tallowedBlockTypes: true,\n\n\t// Maximum upload size in bytes allowed for the site.\n\tmaxUploadFileSize: 0,\n\n\t// List of allowed mime types and file extensions.\n\tallowedMimeTypes: null,\n\n\t// Allows to disable block locking interface.\n\tcanLockBlocks: true,\n\n\t// Allows to disable Openverse media category in the inserter.\n\tenableOpenverseMediaCategory: true,\n\n\tclearBlockSelection: true,\n\n\t__experimentalCanUserUseUnfilteredHTML: false,\n\t__experimentalBlockDirectory: false,\n\t__mobileEnablePageTemplates: false,\n\t__experimentalBlockPatterns: [],\n\t__experimentalBlockPatternCategories: [],\n\t__unstableIsPreviewMode: false,\n\n\t// These settings will be completely revamped in the future.\n\t// The goal is to evolve this into an API which will instruct\n\t// the block inspector to animate transitions between what it\n\t// displays based on the relationship between the selected block\n\t// and its parent, and only enable it if the parent is controlling\n\t// its children blocks.\n\tblockInspectorAnimation: {\n\t\tanimationParent: 'core/navigation',\n\t\t'core/navigation': { enterDirection: 'leftToRight' },\n\t\t'core/navigation-submenu': { enterDirection: 'rightToLeft' },\n\t\t'core/navigation-link': { enterDirection: 'rightToLeft' },\n\t\t'core/search': { enterDirection: 'rightToLeft' },\n\t\t'core/social-links': { enterDirection: 'rightToLeft' },\n\t\t'core/page-list': { enterDirection: 'rightToLeft' },\n\t\t'core/spacer': { enterDirection: 'rightToLeft' },\n\t\t'core/home-link': { enterDirection: 'rightToLeft' },\n\t\t'core/site-title': { enterDirection: 'rightToLeft' },\n\t\t'core/site-logo': { enterDirection: 'rightToLeft' },\n\t},\n\n\tgenerateAnchors: false,\n\t// gradients setting is not used anymore now defaults are passed from theme.json on the server and core has its own defaults.\n\t// The setting is only kept for backward compatibility purposes.\n\tgradients: [\n\t\t{\n\t\t\tname: __( 'Vivid cyan blue to vivid purple' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',\n\t\t\tslug: 'vivid-cyan-blue-to-vivid-purple',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Light green cyan to vivid green cyan' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)',\n\t\t\tslug: 'light-green-cyan-to-vivid-green-cyan',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous vivid amber to luminous vivid orange' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)',\n\t\t\tslug: 'luminous-vivid-amber-to-luminous-vivid-orange',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous vivid orange to vivid red' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)',\n\t\t\tslug: 'luminous-vivid-orange-to-vivid-red',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Very light gray to cyan bluish gray' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%)',\n\t\t\tslug: 'very-light-gray-to-cyan-bluish-gray',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Cool to warm spectrum' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%)',\n\t\t\tslug: 'cool-to-warm-spectrum',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Blush light purple' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%)',\n\t\t\tslug: 'blush-light-purple',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Blush bordeaux' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%)',\n\t\t\tslug: 'blush-bordeaux',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous dusk' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%)',\n\t\t\tslug: 'luminous-dusk',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Pale ocean' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%)',\n\t\t\tslug: 'pale-ocean',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Electric grass' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%)',\n\t\t\tslug: 'electric-grass',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Midnight' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%)',\n\t\t\tslug: 'midnight',\n\t\t},\n\t],\n\n\t__unstableResolvedAssets: { styles: [], scripts: [] },\n};\n","/**\n * Insert one or multiple elements into a given position of an array.\n *\n * @param {Array} array Source array.\n * @param {*} elements Elements to insert.\n * @param {number} index Insert Position.\n *\n * @return {Array} Result.\n */\nexport function insertAt( array, elements, index ) {\n\treturn [\n\t\t...array.slice( 0, index ),\n\t\t...( Array.isArray( elements ) ? elements : [ elements ] ),\n\t\t...array.slice( index ),\n\t];\n}\n\n/**\n * Moves an element in an array.\n *\n * @param {Array} array Source array.\n * @param {number} from Source index.\n * @param {number} to Destination index.\n * @param {number} count Number of elements to move.\n *\n * @return {Array} Result.\n */\nexport function moveTo( array, from, to, count = 1 ) {\n\tconst withoutMovedElements = [ ...array ];\n\twithoutMovedElements.splice( from, count );\n\treturn insertAt(\n\t\twithoutMovedElements,\n\t\tarray.slice( from, from + count ),\n\t\tto\n\t);\n}\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { pipe } from '@wordpress/compose';\nimport { combineReducers, select } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\n/**\n * Internal dependencies\n */\nimport { PREFERENCES_DEFAULTS, SETTINGS_DEFAULTS } from './defaults';\nimport { insertAt, moveTo } from './array';\n\nconst identity = ( x ) => x;\n\n/**\n * Given an array of blocks, returns an object where each key is a nesting\n * context, the value of which is an array of block client IDs existing within\n * that nesting context.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockOrder( blocks, rootClientId = '' ) {\n\tconst result = new Map();\n\tconst current = [];\n\tresult.set( rootClientId, current );\n\tblocks.forEach( ( block ) => {\n\t\tconst { clientId, innerBlocks } = block;\n\t\tcurrent.push( clientId );\n\t\tmapBlockOrder( innerBlocks, clientId ).forEach(\n\t\t\t( order, subClientId ) => {\n\t\t\t\tresult.set( subClientId, order );\n\t\t\t}\n\t\t);\n\t} );\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object where each key contains\n * the clientId of the block and the value is the parent of the block.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockParents( blocks, rootClientId = '' ) {\n\tconst result = [];\n\tconst stack = [ [ rootClientId, blocks ] ];\n\twhile ( stack.length ) {\n\t\tconst [ parent, currentBlocks ] = stack.shift();\n\t\tcurrentBlocks.forEach( ( { innerBlocks, ...block } ) => {\n\t\t\tresult.push( [ block.clientId, parent ] );\n\t\t\tif ( innerBlocks?.length ) {\n\t\t\t\tstack.push( [ block.clientId, innerBlocks ] );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n}\n\n/**\n * Helper method to iterate through all blocks, recursing into inner blocks,\n * applying a transformation function to each one.\n * Returns a flattened object with the transformed blocks.\n *\n * @param {Array} blocks Blocks to flatten.\n * @param {Function} transform Transforming function to be applied to each block.\n *\n * @return {Array} Flattened object.\n */\nfunction flattenBlocks( blocks, transform = identity ) {\n\tconst result = [];\n\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult.push( [ block.clientId, transform( block ) ] );\n\t}\n\n\treturn result;\n}\n\nfunction getFlattenedClientIds( blocks ) {\n\tconst result = {};\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult[ block.clientId ] = true;\n\t}\n\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object containing all blocks, without\n * attributes, recursing into inner blocks. Keys correspond to the block client\n * ID, the value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlocksWithoutAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => {\n\t\tconst { attributes, ...restBlock } = block;\n\t\treturn restBlock;\n\t} );\n}\n\n/**\n * Given an array of blocks, returns an object containing all block attributes,\n * recursing into inner blocks. Keys correspond to the block client ID, the\n * value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlockAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => block.attributes );\n}\n\n/**\n * Returns true if the two object arguments have the same keys, or false\n * otherwise.\n *\n * @param {Object} a First object.\n * @param {Object} b Second object.\n *\n * @return {boolean} Whether the two objects have the same keys.\n */\nexport function hasSameKeys( a, b ) {\n\treturn fastDeepEqual( Object.keys( a ), Object.keys( b ) );\n}\n\n/**\n * Returns true if, given the currently dispatching action and the previously\n * dispatched action, the two actions are updating the same block attribute, or\n * false otherwise.\n *\n * @param {Object} action Currently dispatching action.\n * @param {Object} lastAction Previously dispatched action.\n *\n * @return {boolean} Whether actions are updating the same block attribute.\n */\nexport function isUpdatingSameBlockAttribute( action, lastAction ) {\n\treturn (\n\t\taction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tlastAction !== undefined &&\n\t\tlastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tfastDeepEqual( action.clientIds, lastAction.clientIds ) &&\n\t\thasSameKeys( action.attributes, lastAction.attributes )\n\t);\n}\n\nfunction updateBlockTreeForBlocks( state, blocks ) {\n\tconst treeToUpdate = state.tree;\n\tconst stack = [ ...blocks ];\n\tconst flattenedBlocks = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst block = stack.shift();\n\t\tstack.push( ...block.innerBlocks );\n\t\tflattenedBlocks.push( ...block.innerBlocks );\n\t}\n\t// Create objects before mutating them, that way it's always defined.\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set( block.clientId, {} );\n\t}\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set(\n\t\t\tblock.clientId,\n\t\t\tObject.assign( treeToUpdate.get( block.clientId ), {\n\t\t\t\t...state.byClientId.get( block.clientId ),\n\t\t\t\tattributes: state.attributes.get( block.clientId ),\n\t\t\t\tinnerBlocks: block.innerBlocks.map( ( subBlock ) =>\n\t\t\t\t\ttreeToUpdate.get( subBlock.clientId )\n\t\t\t\t),\n\t\t\t} )\n\t\t);\n\t}\n}\n\nfunction updateParentInnerBlocksInTree(\n\tstate,\n\tupdatedClientIds,\n\tupdateChildrenOfUpdatedClientIds = false\n) {\n\tconst treeToUpdate = state.tree;\n\tconst uncontrolledParents = new Set( [] );\n\tconst controlledParents = new Set();\n\tfor ( const clientId of updatedClientIds ) {\n\t\tlet current = updateChildrenOfUpdatedClientIds\n\t\t\t? clientId\n\t\t\t: state.parents.get( clientId );\n\t\tdo {\n\t\t\tif ( state.controlledInnerBlocks[ current ] ) {\n\t\t\t\t// Should stop on controlled blocks.\n\t\t\t\t// If we reach a controlled parent, break out of the loop.\n\t\t\t\tcontrolledParents.add( current );\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Else continue traversing up through parents.\n\t\t\t\tuncontrolledParents.add( current );\n\t\t\t\tcurrent = state.parents.get( current );\n\t\t\t}\n\t\t} while ( current !== undefined );\n\t}\n\n\t// To make sure the order of assignments doesn't matter,\n\t// we first create empty objects and mutates the inner blocks later.\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.set( clientId, { ...treeToUpdate.get( clientId ) } );\n\t}\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.get( clientId ).innerBlocks = (\n\t\t\tstate.order.get( clientId ) || []\n\t\t).map( ( subClientId ) => treeToUpdate.get( subClientId ) );\n\t}\n\n\t// Controlled parent blocks, need a dedicated key for their inner blocks\n\t// to be used when doing getBlocks( controlledBlockClientId ).\n\tfor ( const clientId of controlledParents ) {\n\t\ttreeToUpdate.set( 'controlled||' + clientId, {\n\t\t\tinnerBlocks: ( state.order.get( clientId ) || [] ).map(\n\t\t\t\t( subClientId ) => treeToUpdate.get( subClientId )\n\t\t\t),\n\t\t} );\n\t}\n}\n\n/**\n * Higher-order reducer intended to compute full block objects key for each block in the post.\n * This is a denormalization to optimize the performance of the getBlock selectors and avoid\n * recomputing the block objects and avoid heavy memoization.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockTree =\n\t( reducer ) =>\n\t( state = {}, action ) => {\n\t\tconst newState = reducer( state, action );\n\n\t\tif ( newState === state ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tnewState.tree = state.tree ? state.tree : new Map();\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.rootClientId ? [ action.rootClientId ] : [ '' ],\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK':\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tnewState.tree.set( action.clientId, {\n\t\t\t\t\t...newState.tree.get( action.clientId ),\n\t\t\t\t\t...newState.byClientId.get( action.clientId ),\n\t\t\t\t\tattributes: newState.attributes.get( action.clientId ),\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\t[ action.clientId ],\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.clientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.tree.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.clientIds,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst inserterClientIds = getFlattenedClientIds(\n\t\t\t\t\taction.blocks\n\t\t\t\t);\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\t// Controlled inner blocks are only removed\n\t\t\t\t\t// if the block doesn't move to another position\n\t\t\t\t\t// otherwise their content will be lost.\n\t\t\t\t\tif ( ! inserterClientIds[ clientId ] ) {\n\t\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.blocks.map( ( b ) => b.clientId ),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\t// If there are no replaced blocks, it means we're removing blocks so we need to update their parent.\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tif ( action.fromRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.fromRootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tupdatedBlockUids.push( '' );\n\t\t\t\t}\n\t\t\t\tif ( action.toRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.toRootClientId );\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_UP':\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst updatedBlockUids = [\n\t\t\t\t\taction.rootClientId ? action.rootClientId : '',\n\t\t\t\t];\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SAVE_REUSABLE_BLOCK_SUCCESS': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tnewState.attributes.forEach( ( attributes, clientId ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnewState.byClientId.get( clientId ).name ===\n\t\t\t\t\t\t\t'core/block' &&\n\t\t\t\t\t\tattributes.ref === action.updatedId\n\t\t\t\t\t) {\n\t\t\t\t\t\tupdatedBlockUids.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdatedBlockUids.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.byClientId.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t\tinnerBlocks: newState.tree.get( clientId ).innerBlocks,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn newState;\n\t};\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isPersistentChange` property value corresponding to whether a change in\n * state can be considered as persistent. All changes are considered persistent\n * except when updating the same block attribute as in the previous action.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withPersistentBlockChange( reducer ) {\n\tlet lastAction;\n\tlet markNextChangeAsNotPersistent = false;\n\tlet explicitPersistent;\n\n\treturn ( state, action ) => {\n\t\tlet nextState = reducer( state, action );\n\n\t\tlet nextIsPersistentChange;\n\t\tif ( action.type === 'SET_EXPLICIT_PERSISTENT' ) {\n\t\t\texplicitPersistent = action.isPersistentChange;\n\t\t\tnextIsPersistentChange = state.isPersistentChange ?? true;\n\t\t}\n\n\t\tif ( explicitPersistent !== undefined ) {\n\t\t\tnextIsPersistentChange = explicitPersistent;\n\t\t\treturn nextIsPersistentChange === nextState.isPersistentChange\n\t\t\t\t? nextState\n\t\t\t\t: {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t\t };\n\t\t}\n\n\t\tconst isExplicitPersistentChange =\n\t\t\taction.type === 'MARK_LAST_CHANGE_AS_PERSISTENT' ||\n\t\t\tmarkNextChangeAsNotPersistent;\n\n\t\t// Defer to previous state value (or default) unless changing or\n\t\t// explicitly marking as persistent.\n\t\tif ( state === nextState && ! isExplicitPersistentChange ) {\n\t\t\tmarkNextChangeAsNotPersistent =\n\t\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\t\tnextIsPersistentChange = state?.isPersistentChange ?? true;\n\t\t\tif ( state.isPersistentChange === nextIsPersistentChange ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t};\n\t\t}\n\n\t\tnextState = {\n\t\t\t...nextState,\n\t\t\tisPersistentChange: isExplicitPersistentChange\n\t\t\t\t? ! markNextChangeAsNotPersistent\n\t\t\t\t: ! isUpdatingSameBlockAttribute( action, lastAction ),\n\t\t};\n\n\t\t// In comparing against the previous action, consider only those which\n\t\t// would have qualified as one which would have been ignored or not\n\t\t// have resulted in a changed state.\n\t\tlastAction = action;\n\t\tmarkNextChangeAsNotPersistent =\n\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isIgnoredChange` property value corresponding to whether a change in state\n * can be considered as ignored. A change is considered ignored when the result\n * of an action not incurred by direct user interaction.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withIgnoredBlockChange( reducer ) {\n\t/**\n\t * Set of action types for which a blocks state change should be ignored.\n\t *\n\t * @type {Set}\n\t */\n\tconst IGNORED_ACTION_TYPES = new Set( [ 'RECEIVE_BLOCKS' ] );\n\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( nextState !== state ) {\n\t\t\tnextState.isIgnoredChange = IGNORED_ACTION_TYPES.has( action.type );\n\t\t}\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer targeting the combined blocks reducer, augmenting\n * block client IDs in remove action to include cascade of inner blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withInnerBlocksRemoveCascade = ( reducer ) => ( state, action ) => {\n\t// Gets all children which need to be removed.\n\tconst getAllChildren = ( clientIds ) => {\n\t\tlet result = clientIds;\n\t\tfor ( let i = 0; i < result.length; i++ ) {\n\t\t\tif (\n\t\t\t\t! state.order.get( result[ i ] ) ||\n\t\t\t\t( action.keepControlledInnerBlocks &&\n\t\t\t\t\taction.keepControlledInnerBlocks[ result[ i ] ] )\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( result === clientIds ) {\n\t\t\t\tresult = [ ...result ];\n\t\t\t}\n\n\t\t\tresult.push( ...state.order.get( result[ i ] ) );\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( state ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\tremovedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'REPLACE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\treplacedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `RESET_BLOCKS` action. When dispatched, this action will replace all\n * blocks that exist in the post, leaving blocks that exist only in state (e.g.\n * reusable blocks and blocks controlled by inner blocks controllers) alone.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockReset = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'RESET_BLOCKS' ) {\n\t\tconst newState = {\n\t\t\t...state,\n\t\t\tbyClientId: new Map(\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks )\n\t\t\t),\n\t\t\tattributes: new Map( getFlattenedBlockAttributes( action.blocks ) ),\n\t\t\torder: mapBlockOrder( action.blocks ),\n\t\t\tparents: new Map( mapBlockParents( action.blocks ) ),\n\t\t\tcontrolledInnerBlocks: {},\n\t\t};\n\n\t\tnewState.tree = new Map( state?.tree );\n\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\tnewState.tree.set( '', {\n\t\t\tinnerBlocks: action.blocks.map( ( subBlock ) =>\n\t\t\t\tnewState.tree.get( subBlock.clientId )\n\t\t\t),\n\t\t} );\n\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `REPLACE_INNER_BLOCKS` action. When dispatched, this action the state\n * should become equivalent to the execution of a `REMOVE_BLOCKS` action\n * containing all the child's of the root block followed by the execution of\n * `INSERT_BLOCKS` with the new blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withReplaceInnerBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type !== 'REPLACE_INNER_BLOCKS' ) {\n\t\treturn reducer( state, action );\n\t}\n\n\t// Finds every nested inner block controller. We must check the action blocks\n\t// and not just the block parent state because some inner block controllers\n\t// should be deleted if specified, whereas others should not be deleted. If\n\t// a controlled should not be deleted, then we need to avoid deleting its\n\t// inner blocks from the block state because its inner blocks will not be\n\t// attached to the block in the action.\n\tconst nestedControllers = {};\n\tif ( Object.keys( state.controlledInnerBlocks ).length ) {\n\t\tconst stack = [ ...action.blocks ];\n\t\twhile ( stack.length ) {\n\t\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\t\tstack.push( ...innerBlocks );\n\t\t\tif ( !! state.controlledInnerBlocks[ block.clientId ] ) {\n\t\t\t\tnestedControllers[ block.clientId ] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// The `keepControlledInnerBlocks` prop will keep the inner blocks of the\n\t// marked block in the block state so that they can be reattached to the\n\t// marked block when we re-insert everything a few lines below.\n\tlet stateAfterBlocksRemoval = state;\n\tif ( state.order.get( action.rootClientId ) ) {\n\t\tstateAfterBlocksRemoval = reducer( stateAfterBlocksRemoval, {\n\t\t\ttype: 'REMOVE_BLOCKS',\n\t\t\tkeepControlledInnerBlocks: nestedControllers,\n\t\t\tclientIds: state.order.get( action.rootClientId ),\n\t\t} );\n\t}\n\tlet stateAfterInsert = stateAfterBlocksRemoval;\n\tif ( action.blocks.length ) {\n\t\tstateAfterInsert = reducer( stateAfterInsert, {\n\t\t\t...action,\n\t\t\ttype: 'INSERT_BLOCKS',\n\t\t\tindex: 0,\n\t\t} );\n\n\t\t// We need to re-attach the controlled inner blocks to the blocks tree and\n\t\t// preserve their block order. Otherwise, an inner block controller's blocks\n\t\t// will be deleted entirely from its entity.\n\t\tconst stateAfterInsertOrder = new Map( stateAfterInsert.order );\n\t\tObject.keys( nestedControllers ).forEach( ( key ) => {\n\t\t\tif ( state.order.get( key ) ) {\n\t\t\t\tstateAfterInsertOrder.set( key, state.order.get( key ) );\n\t\t\t}\n\t\t} );\n\t\tstateAfterInsert.order = stateAfterInsertOrder;\n\t\tstateAfterInsert.tree = new Map( stateAfterInsert.tree );\n\t\tObject.keys( nestedControllers ).forEach( ( _key ) => {\n\t\t\tconst key = `controlled||${ _key }`;\n\t\t\tif ( state.tree.has( key ) ) {\n\t\t\t\tstateAfterInsert.tree.set( key, state.tree.get( key ) );\n\t\t\t}\n\t\t} );\n\t}\n\treturn stateAfterInsert;\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `SAVE_REUSABLE_BLOCK_SUCCESS` action. This action can't be handled by\n * regular reducers and needs a higher-order reducer since it needs access to\n * both `byClientId` and `attributes` simultaneously.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withSaveReusableBlock = ( reducer ) => ( state, action ) => {\n\tif ( state && action.type === 'SAVE_REUSABLE_BLOCK_SUCCESS' ) {\n\t\tconst { id, updatedId } = action;\n\n\t\t// If a temporary reusable block is saved, we swap the temporary id with the final one.\n\t\tif ( id === updatedId ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tstate = { ...state };\n\t\tstate.attributes = new Map( state.attributes );\n\t\tstate.attributes.forEach( ( attributes, clientId ) => {\n\t\t\tconst { name } = state.byClientId.get( clientId );\n\t\t\tif ( name === 'core/block' && attributes.ref === id ) {\n\t\t\t\tstate.attributes.set( clientId, {\n\t\t\t\t\t...attributes,\n\t\t\t\t\tref: updatedId,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn reducer( state, action );\n};\n/**\n * Higher-order reducer which removes blocks from state when switching parent block controlled state.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withResetControlledBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t// when switching a block from controlled to uncontrolled or inverse,\n\t\t// we need to remove its content first.\n\t\tconst tempState = reducer( state, {\n\t\t\ttype: 'REPLACE_INNER_BLOCKS',\n\t\t\trootClientId: action.clientId,\n\t\t\tblocks: [],\n\t\t} );\n\t\treturn reducer( tempState, action );\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Reducer returning the blocks state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blocks = pipe(\n\tcombineReducers,\n\twithSaveReusableBlock, // Needs to be before withBlockCache.\n\twithBlockTree, // Needs to be before withInnerBlocksRemoveCascade.\n\twithInnerBlocksRemoveCascade,\n\twithReplaceInnerBlocks, // Needs to be after withInnerBlocksRemoveCascade.\n\twithBlockReset,\n\twithPersistentBlockChange,\n\twithIgnoredBlockChange,\n\twithResetControlledBlocks\n)( {\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tbyClientId( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known.\n\t\t\t\tif ( ! state.has( action.clientId ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\t// Do nothing if only attributes change.\n\t\t\t\tconst { attributes, ...changes } = action.updates;\n\t\t\t\tif ( Object.values( changes ).length === 0 ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...changes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tattributes( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known or there are no attribute changes.\n\t\t\t\tif (\n\t\t\t\t\t! state.get( action.clientId ) ||\n\t\t\t\t\t! action.updates.attributes\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...action.updates.attributes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\t// Avoid a state change if none of the block IDs are known.\n\t\t\t\tif ( action.clientIds.every( ( id ) => ! state.get( id ) ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tlet hasChange = false;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst updatedAttributeEntries = Object.entries(\n\t\t\t\t\t\taction.uniqueByBlock\n\t\t\t\t\t\t\t? action.attributes[ clientId ]\n\t\t\t\t\t\t\t: action.attributes ?? {}\n\t\t\t\t\t);\n\t\t\t\t\tif ( updatedAttributeEntries.length === 0 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet hasUpdatedAttributes = false;\n\t\t\t\t\tconst existingAttributes = state.get( clientId );\n\t\t\t\t\tconst newAttributes = {};\n\t\t\t\t\tupdatedAttributeEntries.forEach( ( [ key, value ] ) => {\n\t\t\t\t\t\tif ( existingAttributes[ key ] !== value ) {\n\t\t\t\t\t\t\thasUpdatedAttributes = true;\n\t\t\t\t\t\t\tnewAttributes[ key ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\thasChange = hasChange || hasUpdatedAttributes;\n\t\t\t\t\tif ( hasUpdatedAttributes ) {\n\t\t\t\t\t\tnewState.set( clientId, {\n\t\t\t\t\t\t\t...existingAttributes,\n\t\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn hasChange ? newState : state;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\torder( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst blockOrder = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tblockOrder.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\t'',\n\t\t\t\t\t( state.get( '' ) ?? [] ).concat( blockOrder[ '' ] )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst { rootClientId = '' } = action;\n\t\t\t\tconst subState = state.get( rootClientId ) || [];\n\t\t\t\tconst mappedBlocks = mapBlockOrder(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\t\tconst { index = subState.length } = action;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tinsertAt(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tmappedBlocks.get( rootClientId ),\n\t\t\t\t\t\tindex\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst {\n\t\t\t\t\tfromRootClientId = '',\n\t\t\t\t\ttoRootClientId = '',\n\t\t\t\t\tclientIds,\n\t\t\t\t} = action;\n\t\t\t\tconst { index = state.get( toRootClientId ).length } = action;\n\n\t\t\t\t// Moving inside the same parent block.\n\t\t\t\tif ( fromRootClientId === toRootClientId ) {\n\t\t\t\t\tconst subState = state.get( toRootClientId );\n\t\t\t\t\tconst fromIndex = subState.indexOf( clientIds[ 0 ] );\n\t\t\t\t\tconst newState = new Map( state );\n\t\t\t\t\tnewState.set(\n\t\t\t\t\t\ttoRootClientId,\n\t\t\t\t\t\tmoveTo(\n\t\t\t\t\t\t\tstate.get( toRootClientId ),\n\t\t\t\t\t\t\tfromIndex,\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\treturn newState;\n\t\t\t\t}\n\n\t\t\t\t// Moving from a parent block to another.\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\tfromRootClientId,\n\t\t\t\t\tstate\n\t\t\t\t\t\t.get( fromRootClientId )\n\t\t\t\t\t\t?.filter( ( id ) => ! clientIds.includes( id ) ) ?? []\n\t\t\t\t);\n\t\t\t\tnewState.set(\n\t\t\t\t\ttoRootClientId,\n\t\t\t\t\tinsertAt( state.get( toRootClientId ), clientIds, index )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_UP': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif ( ! subState.length || firstClientId === subState[ 0 ] ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex - 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst lastClientId = clientIds[ clientIds.length - 1 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif (\n\t\t\t\t\t! subState.length ||\n\t\t\t\t\tlastClientId === subState[ subState.length - 1 ]\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex + 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst { clientIds } = action;\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst mappedBlocks = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder = Object.values( order ).reduce(\n\t\t\t\t\t\t( result, subClientId ) => {\n\t\t\t\t\t\t\tif ( subClientId === clientIds[ 0 ] ) {\n\t\t\t\t\t\t\t\treturn [ ...result, ...mappedBlocks.get( '' ) ];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( clientIds.indexOf( subClientId ) === -1 ) {\n\t\t\t\t\t\t\t\tresult.push( subClientId );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\t// Remove inner block ordering for removed blocks.\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder =\n\t\t\t\t\t\torder?.filter(\n\t\t\t\t\t\t\t( id ) => ! action.removedClientIds.includes( id )\n\t\t\t\t\t\t) ?? [];\n\t\t\t\t\tif ( newSubOrder.length !== order.length ) {\n\t\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// While technically redundant data as the inverse of `order`, it serves as\n\t// an optimization for the selectors which derive the ancestry of a block.\n\tparents( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\taction.rootClientId || ''\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.clientIds.forEach( ( id ) => {\n\t\t\t\t\tnewState.set( id, action.toRootClientId || '' );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\tstate.get( action.clientIds[ 0 ] )\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\tcontrolledInnerBlocks(\n\t\tstate = {},\n\t\t{ type, clientId, hasControlledInnerBlocks }\n\t) {\n\t\tif ( type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ clientId ]: hasControlledInnerBlocks,\n\t\t\t};\n\t\t}\n\t\treturn state;\n\t},\n} );\n\n/**\n * Reducer returning visibility status of block interface.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isBlockInterfaceHidden( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'HIDE_BLOCK_INTERFACE':\n\t\t\treturn true;\n\n\t\tcase 'SHOW_BLOCK_INTERFACE':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning typing state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isTyping( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_TYPING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_TYPING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragging state. It is possible for a user to be dragging\n * data from outside of the editor, so this state is separate from `draggedBlocks`.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isDragging( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_DRAGGING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragged block client id.\n *\n * @param {string[]} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string[]} Updated state.\n */\nexport function draggedBlocks( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING_BLOCKS':\n\t\t\treturn action.clientIds;\n\n\t\tcase 'STOP_DRAGGING_BLOCKS':\n\t\t\treturn [];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking the visible blocks.\n *\n * @param {Record} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record} Block visibility.\n */\nexport function blockVisibility( state = {}, action ) {\n\tif ( action.type === 'SET_BLOCK_VISIBILITY' ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.updates,\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Internal helper reducer for selectionStart and selectionEnd. Can hold a block\n * selection, represented by an object with property clientId.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nfunction selectionHelper( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'CLEAR_SELECTED_BLOCK': {\n\t\t\tif ( state.clientId ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn state;\n\t\t}\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.clientId };\n\t\tcase 'REPLACE_INNER_BLOCKS':\n\t\tcase 'INSERT_BLOCKS': {\n\t\t\tif ( ! action.updateSelection || ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.blocks[ 0 ].clientId };\n\t\t}\n\t\tcase 'REMOVE_BLOCKS':\n\t\t\tif (\n\t\t\t\t! action.clientIds ||\n\t\t\t\t! action.clientIds.length ||\n\t\t\t\taction.clientIds.indexOf( state.clientId ) === -1\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {};\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tif ( action.clientIds.indexOf( state.clientId ) === -1 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst blockToSelect =\n\t\t\t\taction.blocks[ action.indexToSelect ] ||\n\t\t\t\taction.blocks[ action.blocks.length - 1 ];\n\n\t\t\tif ( ! blockToSelect ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tif ( blockToSelect.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: blockToSelect.clientId };\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the selection state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function selection( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SELECTION_CHANGE':\n\t\t\tif ( action.clientId ) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.startOffset,\n\t\t\t\t\t},\n\t\t\t\t\tselectionEnd: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.endOffset,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: action.start || state.selectionStart,\n\t\t\t\tselectionEnd: action.end || state.selectionEnd,\n\t\t\t};\n\t\tcase 'RESET_SELECTION':\n\t\t\tconst { selectionStart, selectionEnd } = action;\n\t\t\treturn {\n\t\t\t\tselectionStart,\n\t\t\t\tselectionEnd,\n\t\t\t};\n\t\tcase 'MULTI_SELECT':\n\t\t\tconst { start, end } = action;\n\n\t\t\tif (\n\t\t\t\tstart === state.selectionStart?.clientId &&\n\t\t\t\tend === state.selectionEnd?.clientId\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: { clientId: start },\n\t\t\t\tselectionEnd: { clientId: end },\n\t\t\t};\n\t\tcase 'RESET_BLOCKS':\n\t\t\tconst startClientId = state?.selectionStart?.clientId;\n\t\t\tconst endClientId = state?.selectionEnd?.clientId;\n\n\t\t\t// Do nothing if there's no selected block.\n\t\t\tif ( ! startClientId && ! endClientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// If the start of the selection won't exist after reset, remove selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === startClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {},\n\t\t\t\t\tselectionEnd: {},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If the end of the selection won't exist after reset, collapse selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === endClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectionEnd: state.selectionStart,\n\t\t\t\t};\n\t\t\t}\n\t}\n\n\tconst selectionStart = selectionHelper( state.selectionStart, action );\n\tconst selectionEnd = selectionHelper( state.selectionEnd, action );\n\n\tif (\n\t\tselectionStart === state.selectionStart &&\n\t\tselectionEnd === state.selectionEnd\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\tselectionStart,\n\t\tselectionEnd,\n\t};\n}\n\n/**\n * Reducer returning whether the user is multi-selecting.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isMultiSelecting( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_MULTI_SELECT':\n\t\t\treturn true;\n\n\t\tcase 'STOP_MULTI_SELECT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether selection is enabled.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isSelectionEnabled( state = true, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_SELECTION':\n\t\t\treturn action.isSelectionEnabled;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the data needed to display a prompt when certain blocks\n * are removed, or `false` if no such prompt is requested.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nfunction removalPromptData( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'DISPLAY_BLOCK_REMOVAL_PROMPT':\n\t\t\tconst { clientIds, selectPrevious, message } = action;\n\t\t\treturn {\n\t\t\t\tclientIds,\n\t\t\t\tselectPrevious,\n\t\t\t\tmessage,\n\t\t\t};\n\t\tcase 'CLEAR_BLOCK_REMOVAL_PROMPT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning any rules that a block editor may provide in order to\n * prevent a user from accidentally removing certain blocks. These rules are\n * then used to display a confirmation prompt to the user. For instance, in the\n * Site Editor, the Query Loop block is important enough to warrant such\n * confirmation.\n *\n * The data is a record whose keys are block types (e.g. 'core/query') and\n * whose values are the explanation to be shown to users (e.g. 'Query Loop\n * displays a list of posts or pages.').\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record} Updated state.\n */\nfunction blockRemovalRules( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_REMOVAL_RULES':\n\t\t\treturn action.rules;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the initial block selection.\n *\n * Currently this in only used to restore the selection after block deletion and\n * pasting new content.This reducer should eventually be removed in favour of setting\n * selection directly.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {number|null} Initial position: 0, -1 or null.\n */\nexport function initialPosition( state = null, action ) {\n\tif (\n\t\taction.type === 'REPLACE_BLOCKS' &&\n\t\taction.initialPosition !== undefined\n\t) {\n\t\treturn action.initialPosition;\n\t} else if (\n\t\t[\n\t\t\t'MULTI_SELECT',\n\t\t\t'SELECT_BLOCK',\n\t\t\t'RESET_SELECTION',\n\t\t\t'INSERT_BLOCKS',\n\t\t\t'REPLACE_INNER_BLOCKS',\n\t\t].includes( action.type )\n\t) {\n\t\treturn action.initialPosition;\n\t}\n\n\treturn state;\n}\n\nexport function blocksMode( state = {}, action ) {\n\tif ( action.type === 'TOGGLE_BLOCK_MODE' ) {\n\t\tconst { clientId } = action;\n\t\treturn {\n\t\t\t...state,\n\t\t\t[ clientId ]:\n\t\t\t\tstate[ clientId ] && state[ clientId ] === 'html'\n\t\t\t\t\t? 'visual'\n\t\t\t\t\t: 'html',\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion point visibility, either null if there\n * is not an explicit insertion point assigned, or an object of its `index` and\n * `rootClientId`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function insertionPoint( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SHOW_INSERTION_POINT': {\n\t\t\tconst {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t} = action;\n\t\t\tconst nextState = {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t};\n\n\t\t\t// Bail out updates if the states are the same.\n\t\t\treturn fastDeepEqual( state, nextState ) ? state : nextState;\n\t\t}\n\n\t\tcase 'HIDE_INSERTION_POINT':\n\t\t\treturn null;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether the post blocks match the defined template or not.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function template( state = { isValid: true }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_TEMPLATE_VALIDITY':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisValid: action.isValid,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the editor setting.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function settings( state = SETTINGS_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_SETTINGS':\n\t\t\tif ( action.reset ) {\n\t\t\t\treturn {\n\t\t\t\t\t...SETTINGS_DEFAULTS,\n\t\t\t\t\t...action.settings,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.settings,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the user preferences.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function preferences( state = PREFERENCES_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tconst nextInsertUsage = action.blocks.reduce(\n\t\t\t\t( prevUsage, block ) => {\n\t\t\t\t\tconst { attributes, name: blockName } = block;\n\t\t\t\t\tlet id = blockName;\n\t\t\t\t\t// If a block variation match is found change the name to be the same with the\n\t\t\t\t\t// one that is used for block variations in the Inserter (`getItemFromVariation`).\n\t\t\t\t\tconst match = select( blocksStore ).getActiveBlockVariation(\n\t\t\t\t\t\tblockName,\n\t\t\t\t\t\tattributes\n\t\t\t\t\t);\n\t\t\t\t\tif ( match?.name ) {\n\t\t\t\t\t\tid += '/' + match.name;\n\t\t\t\t\t}\n\t\t\t\t\tif ( blockName === 'core/block' ) {\n\t\t\t\t\t\tid += '/' + attributes.ref;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prevUsage,\n\t\t\t\t\t\t[ id ]: {\n\t\t\t\t\t\t\ttime: action.time,\n\t\t\t\t\t\t\tcount: prevUsage[ id ]\n\t\t\t\t\t\t\t\t? prevUsage[ id ].count + 1\n\t\t\t\t\t\t\t\t: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstate.insertUsage\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tinsertUsage: nextInsertUsage,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning an object where each key is a block client ID, its value\n * representing the settings for its nested blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blockListSettings = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\t// Even if the replaced blocks have the same client ID, our logic\n\t\t// should correct the state.\n\t\tcase 'REPLACE_BLOCKS':\n\t\tcase 'REMOVE_BLOCKS': {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t( [ id ] ) => ! action.clientIds.includes( id )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tcase 'UPDATE_BLOCK_LIST_SETTINGS': {\n\t\t\tconst updates =\n\t\t\t\ttypeof action.clientId === 'string'\n\t\t\t\t\t? { [ action.clientId ]: action.settings }\n\t\t\t\t\t: action.clientId;\n\n\t\t\t// Remove settings that are the same as the current state.\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tif ( ! state[ clientId ] ) {\n\t\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tfastDeepEqual( state[ clientId ], updates[ clientId ] )\n\t\t\t\t) {\n\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( Object.keys( updates ).length === 0 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst merged = { ...state, ...updates };\n\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tdelete merged[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn merged;\n\t\t}\n\t}\n\treturn state;\n};\n\n/**\n * Reducer returning which mode is enabled.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function editorMode( state = 'edit', action ) {\n\t// Let inserting block in navigation mode always trigger Edit mode.\n\tif ( action.type === 'INSERT_BLOCKS' && state === 'navigation' ) {\n\t\treturn 'edit';\n\t}\n\n\tif ( action.type === 'SET_EDITOR_MODE' ) {\n\t\treturn action.mode;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether the block moving mode is enabled or not.\n *\n * @param {string|null} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function hasBlockMovingClientId( state = null, action ) {\n\tif ( action.type === 'SET_BLOCK_MOVING_MODE' ) {\n\t\treturn action.hasBlockMovingClientId;\n\t}\n\n\tif ( action.type === 'SET_EDITOR_MODE' ) {\n\t\treturn null;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer return an updated state representing the most recent block attribute\n * update. The state is structured as an object where the keys represent the\n * client IDs of blocks, the values a subset of attributes from the most recent\n * block update. The state is always reset to null if the last action is\n * anything other than an attributes update.\n *\n * @param {Object} state Current state.\n * @param {Object} action Action object.\n *\n * @return {[string,Object]} Updated state.\n */\nexport function lastBlockAttributesChange( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_BLOCK':\n\t\t\tif ( ! action.updates.attributes ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn { [ action.clientId ]: action.updates.attributes };\n\n\t\tcase 'UPDATE_BLOCK_ATTRIBUTES':\n\t\t\treturn action.clientIds.reduce(\n\t\t\t\t( accumulator, id ) => ( {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t[ id ]: action.uniqueByBlock\n\t\t\t\t\t\t? action.attributes[ id ]\n\t\t\t\t\t\t: action.attributes,\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current highlighted block.\n *\n * @param {boolean} state Current highlighted block.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function highlightedBlock( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_BLOCK_HIGHLIGHT':\n\t\t\tconst { clientId, isHighlighted } = action;\n\n\t\t\tif ( isHighlighted ) {\n\t\t\t\treturn clientId;\n\t\t\t} else if ( state === clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn state;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current expanded block in the list view.\n *\n * @param {string|null} state Current expanded block.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function expandedBlock( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EXPANDED_IN_LIST_VIEW':\n\t\t\treturn action.clientId;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion event list state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function lastBlockInserted( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS':\n\t\t\tif ( ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst clientIds = action.blocks.map( ( block ) => {\n\t\t\t\treturn block.clientId;\n\t\t\t} );\n\n\t\t\tconst source = action.meta?.source;\n\n\t\t\treturn { clientIds, source };\n\t\tcase 'RESET_BLOCKS':\n\t\t\treturn {};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the block that is eding temporarily edited as blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingAsBlocks( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.temporarilyEditingAsBlocks;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the focus mode that should be used when temporarily edit as blocks finishes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingFocusModeRevert( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.focusModeToRevert;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of block client IDs to block editing modes.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function blockEditingModes( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EDITING_MODE':\n\t\t\treturn new Map( state ).set( action.clientId, action.mode );\n\t\tcase 'UNSET_BLOCK_EDITING_MODE': {\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.clientId );\n\t\t\treturn newState;\n\t\t}\n\t\tcase 'RESET_BLOCKS': {\n\t\t\treturn state.has( '' )\n\t\t\t\t? new Map().set( '', state.get( '' ) )\n\t\t\t\t: state;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the clientId of the block settings menu that is currently open.\n *\n * @param {string|null} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function openedBlockSettingsMenu( state = null, action ) {\n\tif ( 'SET_OPENED_BLOCK_SETTINGS_MENU' === action.type ) {\n\t\treturn action?.clientId ?? null;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of style IDs to style overrides.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function styleOverrides( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_STYLE_OVERRIDE':\n\t\t\treturn new Map( state ).set( action.id, action.style );\n\t\tcase 'DELETE_STYLE_OVERRIDE': {\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.id );\n\t\t\treturn newState;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of the registered inserter media categories.\n *\n * @param {Array} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Array} Updated state.\n */\nexport function registeredInserterMediaCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_INSERTER_MEDIA_CATEGORY':\n\t\t\treturn [ ...state, action.category ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting last focused element\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function lastFocus( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'LAST_FOCUS':\n\t\t\treturn action.lastFocus;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting currently hovered block.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function hoveredBlockClientId( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'HOVER_BLOCK':\n\t\t\treturn action.clientId;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting zoom out state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function zoomLevel( state = 100, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_ZOOM_LEVEL':\n\t\t\treturn action.zoom;\n\t\tcase 'RESET_ZOOM_LEVEL':\n\t\t\treturn 100;\n\t}\n\n\treturn state;\n}\n\nconst combinedReducers = combineReducers( {\n\tblocks,\n\tisDragging,\n\tisTyping,\n\tisBlockInterfaceHidden,\n\tdraggedBlocks,\n\tselection,\n\tisMultiSelecting,\n\tisSelectionEnabled,\n\tinitialPosition,\n\tblocksMode,\n\tblockListSettings,\n\tinsertionPoint,\n\ttemplate,\n\tsettings,\n\tpreferences,\n\tlastBlockAttributesChange,\n\tlastFocus,\n\teditorMode,\n\thasBlockMovingClientId,\n\texpandedBlock,\n\thighlightedBlock,\n\tlastBlockInserted,\n\ttemporarilyEditingAsBlocks,\n\ttemporarilyEditingFocusModeRevert,\n\tblockVisibility,\n\tblockEditingModes,\n\tstyleOverrides,\n\tremovalPromptData,\n\tblockRemovalRules,\n\topenedBlockSettingsMenu,\n\tregisteredInserterMediaCategories,\n\thoveredBlockClientId,\n\tzoomLevel,\n} );\n\nfunction withAutomaticChangeReset( reducer ) {\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( ! state ) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Take over the last value without creating a new reference.\n\t\tnextState.automaticChangeStatus = state.automaticChangeStatus;\n\n\t\tif ( action.type === 'MARK_AUTOMATIC_CHANGE' ) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'pending',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\taction.type === 'MARK_AUTOMATIC_CHANGE_FINAL' &&\n\t\t\tstate.automaticChangeStatus === 'pending'\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'final',\n\t\t\t};\n\t\t}\n\n\t\t// If there's a change that doesn't affect blocks or selection, maintain\n\t\t// the current status.\n\t\tif (\n\t\t\tnextState.blocks === state.blocks &&\n\t\t\tnextState.selection === state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// As long as the state is not final, ignore any selection changes.\n\t\tif (\n\t\t\tnextState.automaticChangeStatus !== 'final' &&\n\t\t\tnextState.selection !== state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Reset the status if blocks change or selection changes (when status is final).\n\t\treturn {\n\t\t\t...nextState,\n\t\t\tautomaticChangeStatus: undefined,\n\t\t};\n\t};\n}\n\nexport default withAutomaticChangeReset( combinedReducers );\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"primitives\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"ReactJSXRuntime\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst symbol = (\n\t\n\t\t\n\t\n);\n\nexport default symbol;\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"richText\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blockSerializationDefaultParser\"];","export const globalStylesDataKey = Symbol( 'globalStylesDataKey' );\nexport const globalStylesLinksDataKey = Symbol( 'globalStylesLinks' );\nexport const selectBlockPatternsKey = Symbol( 'selectBlockPatternsKey' );\nexport const reusableBlocksSelectKey = Symbol( 'reusableBlocksSelect' );\nexport const sectionRootClientIdKey = Symbol( 'sectionRootClientIdKey' );\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"privateApis\"];","/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.',\n\t\t'@wordpress/block-editor'\n\t);\n","export const STORE_NAME = 'core/block-editor';\n","/**\n * WordPress dependencies\n */\nimport { parse } from '@wordpress/blocks';\nimport { parse as grammarParse } from '@wordpress/block-serialization-default-parser';\n\n/**\n * Internal dependencies\n */\nimport { selectBlockPatternsKey } from './private-keys';\nimport { unlock } from '../lock-unlock';\nimport { STORE_NAME } from './constants';\n\nexport const withRootClientIdOptionKey = Symbol( 'withRootClientId' );\n\nconst parsedPatternCache = new WeakMap();\nconst grammarMapCache = new WeakMap();\n\nfunction parsePattern( pattern ) {\n\tconst blocks = parse( pattern.content, {\n\t\t__unstableSkipMigrationLogs: true,\n\t} );\n\tif ( blocks.length === 1 ) {\n\t\tblocks[ 0 ].attributes = {\n\t\t\t...blocks[ 0 ].attributes,\n\t\t\tmetadata: {\n\t\t\t\t...( blocks[ 0 ].attributes.metadata || {} ),\n\t\t\t\tcategories: pattern.categories,\n\t\t\t\tpatternName: pattern.name,\n\t\t\t\tname: blocks[ 0 ].attributes.metadata?.name || pattern.title,\n\t\t\t},\n\t\t};\n\t}\n\treturn {\n\t\t...pattern,\n\t\tblocks,\n\t};\n}\n\nexport function getParsedPattern( pattern ) {\n\tlet parsedPattern = parsedPatternCache.get( pattern );\n\tif ( ! parsedPattern ) {\n\t\tparsedPattern = parsePattern( pattern );\n\t\tparsedPatternCache.set( pattern, parsedPattern );\n\t}\n\treturn parsedPattern;\n}\n\nexport function getGrammar( pattern ) {\n\tlet grammarMap = grammarMapCache.get( pattern );\n\tif ( ! grammarMap ) {\n\t\tgrammarMap = grammarParse( pattern.content );\n\t\t// Block names are null only at the top level for whitespace.\n\t\tgrammarMap = grammarMap.filter( ( block ) => block.blockName !== null );\n\t\tgrammarMapCache.set( pattern, grammarMap );\n\t}\n\treturn grammarMap;\n}\n\nexport const checkAllowList = ( list, item, defaultResult = null ) => {\n\tif ( typeof list === 'boolean' ) {\n\t\treturn list;\n\t}\n\tif ( Array.isArray( list ) ) {\n\t\t// TODO: when there is a canonical way to detect that we are editing a post\n\t\t// the following check should be changed to something like:\n\t\t// if ( list.includes( 'core/post-content' ) && getEditorMode() === 'post-content' && item === null )\n\t\tif ( list.includes( 'core/post-content' ) && item === null ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn list.includes( item );\n\t}\n\treturn defaultResult;\n};\n\nexport const checkAllowListRecursive = ( blocks, allowedBlockTypes ) => {\n\tif ( typeof allowedBlockTypes === 'boolean' ) {\n\t\treturn allowedBlockTypes;\n\t}\n\n\tconst blocksQueue = [ ...blocks ];\n\twhile ( blocksQueue.length > 0 ) {\n\t\tconst block = blocksQueue.shift();\n\n\t\tconst isAllowed = checkAllowList(\n\t\t\tallowedBlockTypes,\n\t\t\tblock.name || block.blockName,\n\t\t\ttrue\n\t\t);\n\t\tif ( ! isAllowed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tblock.innerBlocks?.forEach( ( innerBlock ) => {\n\t\t\tblocksQueue.push( innerBlock );\n\t\t} );\n\t}\n\n\treturn true;\n};\n\nexport const getAllPatternsDependants = ( select ) => ( state ) => {\n\treturn [\n\t\tstate.settings.__experimentalBlockPatterns,\n\t\tstate.settings.__experimentalUserPatternCategories,\n\t\tstate.settings.__experimentalReusableBlocks,\n\t\tstate.settings[ selectBlockPatternsKey ]?.( select ),\n\t\tstate.blockPatterns,\n\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t];\n};\n\nexport function getInsertBlockTypeDependants( state, rootClientId ) {\n\treturn [\n\t\tstate.blockListSettings[ rootClientId ],\n\t\tstate.blocks.byClientId.get( rootClientId ),\n\t\tstate.settings.allowedBlockTypes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockEditingModes,\n\t];\n}\n","/**\n * Recursive stable sorting comparator function.\n *\n * @param {string|Function} field Field to sort by.\n * @param {Array} items Items to sort.\n * @param {string} order Order, 'asc' or 'desc'.\n * @return {Function} Comparison function to be used in a `.sort()`.\n */\nconst comparator = ( field, items, order ) => {\n\treturn ( a, b ) => {\n\t\tlet cmpA, cmpB;\n\n\t\tif ( typeof field === 'function' ) {\n\t\t\tcmpA = field( a );\n\t\t\tcmpB = field( b );\n\t\t} else {\n\t\t\tcmpA = a[ field ];\n\t\t\tcmpB = b[ field ];\n\t\t}\n\n\t\tif ( cmpA > cmpB ) {\n\t\t\treturn order === 'asc' ? 1 : -1;\n\t\t} else if ( cmpB > cmpA ) {\n\t\t\treturn order === 'asc' ? -1 : 1;\n\t\t}\n\n\t\tconst orderA = items.findIndex( ( item ) => item === a );\n\t\tconst orderB = items.findIndex( ( item ) => item === b );\n\n\t\t// Stable sort: maintaining original array order\n\t\tif ( orderA > orderB ) {\n\t\t\treturn 1;\n\t\t} else if ( orderB > orderA ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t};\n};\n\n/**\n * Order items by a certain key.\n * Supports decorator functions that allow complex picking of a comparison field.\n * Sorts in ascending order by default, but supports descending as well.\n * Stable sort - maintains original order of equal items.\n *\n * @param {Array} items Items to order.\n * @param {string|Function} field Field to order by.\n * @param {string} order Sorting order, `asc` or `desc`.\n * @return {Array} Sorted items.\n */\nexport function orderBy( items, field, order = 'asc' ) {\n\treturn items.concat().sort( comparator( field, items, order ) );\n}\n","/**\n * WordPress dependencies\n */\n\nimport { __, _x } from '@wordpress/i18n';\n\nexport const INSERTER_PATTERN_TYPES = {\n\tuser: 'user',\n\ttheme: 'theme',\n\tdirectory: 'directory',\n};\n\nexport const INSERTER_SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\nexport const allPatternsCategory = {\n\tname: 'allPatterns',\n\tlabel: _x( 'All', 'patterns' ),\n};\n\nexport const myPatternsCategory = {\n\tname: 'myPatterns',\n\tlabel: __( 'My patterns' ),\n};\n\nexport function isPatternFiltered( pattern, sourceFilter, syncFilter ) {\n\tconst isUserPattern = pattern.name.startsWith( 'core/block' );\n\tconst isDirectoryPattern =\n\t\tpattern.source === 'core' ||\n\t\tpattern.source?.startsWith( 'pattern-directory' );\n\n\t// If theme source selected, filter out user created patterns and those from\n\t// the core patterns directory.\n\tif (\n\t\tsourceFilter === INSERTER_PATTERN_TYPES.theme &&\n\t\t( isUserPattern || isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If the directory source is selected, filter out user created patterns\n\t// and those bundled with the theme.\n\tif (\n\t\tsourceFilter === INSERTER_PATTERN_TYPES.directory &&\n\t\t( isUserPattern || ! isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If user source selected, filter out theme patterns.\n\tif (\n\t\tsourceFilter === INSERTER_PATTERN_TYPES.user &&\n\t\tpattern.type !== INSERTER_PATTERN_TYPES.user\n\t) {\n\t\treturn true;\n\t}\n\n\t// Filter by sync status.\n\tif (\n\t\tsyncFilter === INSERTER_SYNC_TYPES.full &&\n\t\tpattern.syncStatus !== ''\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tsyncFilter === INSERTER_SYNC_TYPES.unsynced &&\n\t\tpattern.syncStatus !== 'unsynced' &&\n\t\tisUserPattern\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","/**\n * Immutably sets a value inside an object. Like `lodash#set`, but returning a\n * new object. Treats nullish initial values as empty objects. Clones any\n * nested objects. Supports arrays, too.\n *\n * @param {Object} object Object to set a value in.\n * @param {number|string|Array} path Path in the object to modify.\n * @param {*} value New value to set.\n * @return {Object} Cloned object with the new value set.\n */\nexport function setImmutably( object, path, value ) {\n\t// Normalize path\n\tpath = Array.isArray( path ) ? [ ...path ] : [ path ];\n\n\t// Shallowly clone the base of the object\n\tobject = Array.isArray( object ) ? [ ...object ] : { ...object };\n\n\tconst leaf = path.pop();\n\n\t// Traverse object from root to leaf, shallowly cloning at each level\n\tlet prev = object;\n\tfor ( const key of path ) {\n\t\tconst lvl = prev[ key ];\n\t\tprev = prev[ key ] = Array.isArray( lvl ) ? [ ...lvl ] : { ...lvl };\n\t}\n\n\tprev[ leaf ] = value;\n\n\treturn object;\n}\n\n/**\n * Helper util to return a value from a certain path of the object.\n * Path is specified as either:\n * - a string of properties, separated by dots, for example: \"x.y\".\n * - an array of properties, for example `[ 'x', 'y' ]`.\n * You can also specify a default value in case the result is nullish.\n *\n * @param {Object} object Input object.\n * @param {string|Array} path Path to the object property.\n * @param {*} defaultValue Default value if the value at the specified path is nullish.\n * @return {*} Value of the object property at the specified path.\n */\nexport const getValueFromObjectPath = ( object, path, defaultValue ) => {\n\tconst arrayPath = Array.isArray( path ) ? path : path.split( '.' );\n\tlet value = object;\n\tarrayPath.forEach( ( fieldName ) => {\n\t\tvalue = value?.[ fieldName ];\n\t} );\n\treturn value ?? defaultValue;\n};\n\n/**\n * Helper util to filter out objects with duplicate values for a given property.\n *\n * @param {Object[]} array Array of objects to filter.\n * @param {string} property Property to filter unique values by.\n *\n * @return {Object[]} Array of objects with unique values for the specified property.\n */\nexport function uniqByProperty( array, property ) {\n\tconst seen = new Set();\n\treturn array.filter( ( item ) => {\n\t\tconst value = item[ property ];\n\t\treturn seen.has( value ) ? false : seen.add( value );\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_PATHS_WITH_OVERRIDE as PATHS_WITH_OVERRIDE,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromObjectPath } from '../utils/object';\nimport { getBlockName, getSettings, getBlockAttributes } from './selectors';\n\nconst blockedPaths = [\n\t'color',\n\t'border',\n\t'dimensions',\n\t'typography',\n\t'spacing',\n];\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) => settings.colors,\n\t'color.gradients': ( settings ) => settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) => settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.lineHeight': ( settings ) => settings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw', '%' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.padding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst prefixedFlags = {\n\t/*\n\t * These were only available in the plugin\n\t * and can be removed when the minimum WordPress version\n\t * for the plugin is 5.9.\n\t */\n\t'border.customColor': 'border.color',\n\t'border.customStyle': 'border.style',\n\t'border.customWidth': 'border.width',\n\t'typography.customFontStyle': 'typography.fontStyle',\n\t'typography.customFontWeight': 'typography.fontWeight',\n\t'typography.customLetterSpacing': 'typography.letterSpacing',\n\t'typography.customTextDecorations': 'typography.textDecoration',\n\t'typography.customTextTransforms': 'typography.textTransform',\n\t/*\n\t * These were part of WordPress 5.8 and we need to keep them.\n\t */\n\t'border.customRadius': 'border.radius',\n\t'spacing.customMargin': 'spacing.margin',\n\t'spacing.customPadding': 'spacing.padding',\n\t'typography.customLineHeight': 'typography.lineHeight',\n};\n\n/**\n * Remove `custom` prefixes for flags that did not land in 5.8.\n *\n * This provides continued support for `custom` prefixed properties. It will\n * be removed once third party devs have had sufficient time to update themes,\n * plugins, etc.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34485\n *\n * @param {string} path Path to desired value in settings.\n * @return {string} The value for defined setting.\n */\nconst removeCustomPrefixes = ( path ) => {\n\treturn prefixedFlags[ path ] || path;\n};\n\nexport function getBlockSettings( state, clientId, ...paths ) {\n\tconst blockName = getBlockName( state, clientId );\n\tconst candidates = [];\n\n\tif ( clientId ) {\n\t\tlet id = clientId;\n\t\tdo {\n\t\t\tconst name = getBlockName( state, id );\n\t\t\tif ( hasBlockSupport( name, '__experimentalSettings', false ) ) {\n\t\t\t\tcandidates.push( id );\n\t\t\t}\n\t\t} while ( ( id = state.blocks.parents.get( id ) ) );\n\t}\n\n\treturn paths.map( ( path ) => {\n\t\tif ( blockedPaths.includes( path ) ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t'Top level useSetting paths are disabled. Please use a subpath to query the information needed.'\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// 0. Allow third parties to filter the block's settings at runtime.\n\t\tlet result = applyFilters(\n\t\t\t'blockEditor.useSetting.before',\n\t\t\tundefined,\n\t\t\tpath,\n\t\t\tclientId,\n\t\t\tblockName\n\t\t);\n\n\t\tif ( undefined !== result ) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst normalizedPath = removeCustomPrefixes( path );\n\n\t\t// 1. Take settings from the block instance or its ancestors.\n\t\t// Start from the current block and work our way up the ancestors.\n\t\tfor ( const candidateClientId of candidates ) {\n\t\t\tconst candidateAtts = getBlockAttributes(\n\t\t\t\tstate,\n\t\t\t\tcandidateClientId\n\t\t\t);\n\t\t\tresult =\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tcandidateAtts.settings?.blocks?.[ blockName ],\n\t\t\t\t\tnormalizedPath\n\t\t\t\t) ??\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tcandidateAtts.settings,\n\t\t\t\t\tnormalizedPath\n\t\t\t\t);\n\t\t\tif ( result !== undefined ) {\n\t\t\t\t// Stop the search for more distant ancestors and move on.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// 2. Fall back to the settings from the block editor store (__experimentalFeatures).\n\t\tconst settings = getSettings( state );\n\t\tif ( result === undefined && blockName ) {\n\t\t\tresult = getValueFromObjectPath(\n\t\t\t\tsettings.__experimentalFeatures?.blocks?.[ blockName ],\n\t\t\t\tnormalizedPath\n\t\t\t);\n\t\t}\n\n\t\tif ( result === undefined ) {\n\t\t\tresult = getValueFromObjectPath(\n\t\t\t\tsettings.__experimentalFeatures,\n\t\t\t\tnormalizedPath\n\t\t\t);\n\t\t}\n\n\t\t// Return if the setting was found in either the block instance or the store.\n\t\tif ( result !== undefined ) {\n\t\t\tif ( PATHS_WITH_OVERRIDE[ normalizedPath ] ) {\n\t\t\t\treturn result.custom ?? result.theme ?? result.default;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t// 3. Otherwise, use deprecated settings.\n\t\tconst deprecatedSettingsValue =\n\t\t\tdeprecatedFlags[ normalizedPath ]?.( settings );\n\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\treturn deprecatedSettingsValue;\n\t\t}\n\n\t\t// 4. Fallback for typography.dropCap:\n\t\t// This is only necessary to support typography.dropCap.\n\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t// To remove when __experimentalFeatures are ported to core.\n\t\treturn normalizedPath === 'typography.dropCap' ? true : undefined;\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockOrder,\n\tgetBlockParents,\n\tgetBlockEditingMode,\n\tgetSettings,\n\tcanInsertBlockType,\n\tgetBlockName,\n\tgetTemplateLock,\n\tgetClientIdsWithDescendants,\n} from './selectors';\nimport {\n\tcheckAllowListRecursive,\n\tgetAllPatternsDependants,\n\tgetInsertBlockTypeDependants,\n\tgetGrammar,\n} from './utils';\nimport { INSERTER_PATTERN_TYPES } from '../components/inserter/block-patterns-tab/utils';\nimport { STORE_NAME } from './constants';\nimport { unlock } from '../lock-unlock';\nimport {\n\tselectBlockPatternsKey,\n\treusableBlocksSelectKey,\n\tsectionRootClientIdKey,\n} from './private-keys';\n\nexport { getBlockSettings } from './get-block-settings';\n\n/**\n * Returns true if the block interface is hidden, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the block toolbar is hidden.\n */\nexport function isBlockInterfaceHidden( state ) {\n\treturn state.isBlockInterfaceHidden;\n}\n\n/**\n * Gets the client ids of the last inserted blocks.\n *\n * @param {Object} state Global application state.\n * @return {Array|undefined} Client Ids of the last inserted block(s).\n */\nexport function getLastInsertedBlocksClientIds( state ) {\n\treturn state?.lastBlockInserted?.clientIds;\n}\n\nexport function getBlockWithoutAttributes( state, clientId ) {\n\treturn state.blocks.byClientId.get( clientId );\n}\n\n/**\n * Returns true if all of the descendants of a block with the given client ID\n * have an editing mode of 'disabled', or false otherwise.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n *\n * @return {boolean} Whether the block descendants are disabled.\n */\nexport const isBlockSubtreeDisabled = ( state, clientId ) => {\n\tconst isChildSubtreeDisabled = ( childClientId ) => {\n\t\treturn (\n\t\t\tgetBlockEditingMode( state, childClientId ) === 'disabled' &&\n\t\t\tgetBlockOrder( state, childClientId ).every(\n\t\t\t\tisChildSubtreeDisabled\n\t\t\t)\n\t\t);\n\t};\n\treturn getBlockOrder( state, clientId ).every( isChildSubtreeDisabled );\n};\n\nfunction getEnabledClientIdsTreeUnmemoized( state, rootClientId ) {\n\tconst blockOrder = getBlockOrder( state, rootClientId );\n\tconst result = [];\n\n\tfor ( const clientId of blockOrder ) {\n\t\tconst innerBlocks = getEnabledClientIdsTreeUnmemoized(\n\t\t\tstate,\n\t\t\tclientId\n\t\t);\n\t\tif ( getBlockEditingMode( state, clientId ) !== 'disabled' ) {\n\t\t\tresult.push( { clientId, innerBlocks } );\n\t\t} else {\n\t\t\tresult.push( ...innerBlocks );\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Returns a tree of block objects with only clientID and innerBlocks set.\n * Blocks with a 'disabled' editing mode are not included.\n *\n * @param {Object} state Global application state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Tree of block objects with only clientID and innerBlocks set.\n */\nexport const getEnabledClientIdsTree = createSelector(\n\tgetEnabledClientIdsTreeUnmemoized,\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t\tstate.editorMode,\n\t]\n);\n\n/**\n * Returns a list of a given block's ancestors, from top to bottom. Blocks with\n * a 'disabled' editing mode are excluded.\n *\n * @see getBlockParents\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n * @param {boolean} ascending Order results from bottom to top (true) or top\n * to bottom (false).\n */\nexport const getEnabledBlockParents = createSelector(\n\t( state, clientId, ascending = false ) => {\n\t\treturn getBlockParents( state, clientId, ascending ).filter(\n\t\t\t( parent ) => getBlockEditingMode( state, parent ) !== 'disabled'\n\t\t);\n\t},\n\t( state ) => [\n\t\tstate.blocks.parents,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t]\n);\n\n/**\n * Selector that returns the data needed to display a prompt when certain\n * blocks are removed, or `false` if no such prompt is requested.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nexport function getRemovalPromptData( state ) {\n\treturn state.removalPromptData;\n}\n\n/**\n * Returns true if removal prompt exists, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether removal prompt exists.\n */\nexport function getBlockRemovalRules( state ) {\n\treturn state.blockRemovalRules;\n}\n\n/**\n * Returns the client ID of the block settings menu that is currently open.\n *\n * @param {Object} state Global application state.\n * @return {string|null} The client ID of the block menu that is currently open.\n */\nexport function getOpenedBlockSettingsMenu( state ) {\n\treturn state.openedBlockSettingsMenu;\n}\n\n/**\n * Returns all style overrides, intended to be merged with global editor styles.\n *\n * Overrides are sorted to match the order of the blocks they relate to. This\n * is useful to maintain correct CSS cascade order.\n *\n * @param {Object} state Global application state.\n *\n * @return {Array} An array of style ID to style override pairs.\n */\nexport const getStyleOverrides = createSelector(\n\t( state ) => {\n\t\tconst clientIds = getClientIdsWithDescendants( state );\n\t\tconst clientIdMap = clientIds.reduce( ( acc, clientId, index ) => {\n\t\t\tacc[ clientId ] = index;\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\treturn [ ...state.styleOverrides ].sort( ( overrideA, overrideB ) => {\n\t\t\t// Once the overrides Map is spread to an array, the first element\n\t\t\t// is the key, while the second is the override itself including\n\t\t\t// the clientId to sort by.\n\t\t\tconst [ , { clientId: clientIdA } ] = overrideA;\n\t\t\tconst [ , { clientId: clientIdB } ] = overrideB;\n\n\t\t\tconst aIndex = clientIdMap[ clientIdA ] ?? -1;\n\t\t\tconst bIndex = clientIdMap[ clientIdB ] ?? -1;\n\n\t\t\treturn aIndex - bIndex;\n\t\t} );\n\t},\n\t( state ) => [ state.blocks.order, state.styleOverrides ]\n);\n\n/** @typedef {import('./actions').InserterMediaCategory} InserterMediaCategory */\n/**\n * Returns the registered inserter media categories through the public API.\n *\n * @param {Object} state Editor state.\n *\n * @return {InserterMediaCategory[]} Inserter media categories.\n */\nexport function getRegisteredInserterMediaCategories( state ) {\n\treturn state.registeredInserterMediaCategories;\n}\n\n/**\n * Returns an array containing the allowed inserter media categories.\n * It merges the registered media categories from extenders with the\n * core ones. It also takes into account the allowed `mime_types`, which\n * can be altered by `upload_mimes` filter and restrict some of them.\n *\n * @param {Object} state Global application state.\n *\n * @return {InserterMediaCategory[]} Client IDs of descendants.\n */\nexport const getInserterMediaCategories = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tsettings: {\n\t\t\t\tinserterMediaCategories,\n\t\t\t\tallowedMimeTypes,\n\t\t\t\tenableOpenverseMediaCategory,\n\t\t\t},\n\t\t\tregisteredInserterMediaCategories,\n\t\t} = state;\n\t\t// The allowed `mime_types` can be altered by `upload_mimes` filter and restrict\n\t\t// some of them. In this case we shouldn't add the category to the available media\n\t\t// categories list in the inserter.\n\t\tif (\n\t\t\t( ! inserterMediaCategories &&\n\t\t\t\t! registeredInserterMediaCategories.length ) ||\n\t\t\t! allowedMimeTypes\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst coreInserterMediaCategoriesNames =\n\t\t\tinserterMediaCategories?.map( ( { name } ) => name ) || [];\n\t\tconst mergedCategories = [\n\t\t\t...( inserterMediaCategories || [] ),\n\t\t\t...( registeredInserterMediaCategories || [] ).filter(\n\t\t\t\t( { name } ) =>\n\t\t\t\t\t! coreInserterMediaCategoriesNames.includes( name )\n\t\t\t),\n\t\t];\n\t\treturn mergedCategories.filter( ( category ) => {\n\t\t\t// Check if Openverse category is enabled.\n\t\t\tif (\n\t\t\t\t! enableOpenverseMediaCategory &&\n\t\t\t\tcategory.name === 'openverse'\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Object.values( allowedMimeTypes ).some( ( mimeType ) =>\n\t\t\t\tmimeType.startsWith( `${ category.mediaType }/` )\n\t\t\t);\n\t\t} );\n\t},\n\t( state ) => [\n\t\tstate.settings.inserterMediaCategories,\n\t\tstate.settings.allowedMimeTypes,\n\t\tstate.settings.enableOpenverseMediaCategory,\n\t\tstate.registeredInserterMediaCategories,\n\t]\n);\n\n/**\n * Returns whether there is at least one allowed pattern for inner blocks children.\n * This is useful for deferring the parsing of all patterns until needed.\n *\n * @param {Object} state Editor state.\n * @param {string} [rootClientId=null] Target root client ID.\n *\n * @return {boolean} If there is at least one allowed pattern.\n */\nexport const hasAllowedPatterns = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, rootClientId = null ) => {\n\t\t\tconst { getAllPatterns } = unlock( select( STORE_NAME ) );\n\t\t\tconst patterns = getAllPatterns();\n\t\t\tconst { allowedBlockTypes } = getSettings( state );\n\t\t\treturn patterns.some( ( pattern ) => {\n\t\t\t\tconst { inserter = true } = pattern;\n\t\t\t\tif ( ! inserter ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst grammar = getGrammar( pattern );\n\t\t\t\treturn (\n\t\t\t\t\tcheckAllowListRecursive( grammar, allowedBlockTypes ) &&\n\t\t\t\t\tgrammar.every( ( { name: blockName } ) =>\n\t\t\t\t\t\tcanInsertBlockType( state, blockName, rootClientId )\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t( state, rootClientId ) => [\n\t\t\t...getAllPatternsDependants( select )( state ),\n\t\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t\t]\n\t)\n);\n\nfunction mapUserPattern(\n\tuserPattern,\n\t__experimentalUserPatternCategories = []\n) {\n\treturn {\n\t\tname: `core/block/${ userPattern.id }`,\n\t\tid: userPattern.id,\n\t\ttype: INSERTER_PATTERN_TYPES.user,\n\t\ttitle: userPattern.title.raw,\n\t\tcategories: userPattern.wp_pattern_category.map( ( catId ) => {\n\t\t\tconst category = __experimentalUserPatternCategories.find(\n\t\t\t\t( { id } ) => id === catId\n\t\t\t);\n\t\t\treturn category ? category.slug : catId;\n\t\t} ),\n\t\tcontent: userPattern.content.raw,\n\t\tsyncStatus: userPattern.wp_pattern_sync_status,\n\t};\n}\n\nexport const getPatternBySlug = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, patternName ) => {\n\t\t\t// Only fetch reusable blocks if we know we need them. To do: maybe\n\t\t\t// use the entity record API to retrieve the block by slug.\n\t\t\tif ( patternName?.startsWith( 'core/block/' ) ) {\n\t\t\t\tconst _id = parseInt(\n\t\t\t\t\tpatternName.slice( 'core/block/'.length ),\n\t\t\t\t\t10\n\t\t\t\t);\n\t\t\t\tconst block = unlock( select( STORE_NAME ) )\n\t\t\t\t\t.getReusableBlocks()\n\t\t\t\t\t.find( ( { id } ) => id === _id );\n\n\t\t\t\tif ( ! block ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn mapUserPattern(\n\t\t\t\t\tblock,\n\t\t\t\t\tstate.settings.__experimentalUserPatternCategories\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t// This setting is left for back compat.\n\t\t\t\t...( state.settings.__experimentalBlockPatterns ?? [] ),\n\t\t\t\t...( state.settings[ selectBlockPatternsKey ]?.( select ) ??\n\t\t\t\t\t[] ),\n\t\t\t].find( ( { name } ) => name === patternName );\n\t\t},\n\t\t( state, patternName ) =>\n\t\t\tpatternName?.startsWith( 'core/block/' )\n\t\t\t\t? [\n\t\t\t\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t\t\t\t\t\tstate.settings.__experimentalReusableBlocks,\n\t\t\t\t ]\n\t\t\t\t: [\n\t\t\t\t\t\tstate.settings.__experimentalBlockPatterns,\n\t\t\t\t\t\tstate.settings[ selectBlockPatternsKey ]?.( select ),\n\t\t\t\t ]\n\t)\n);\n\nexport const getAllPatterns = createRegistrySelector( ( select ) =>\n\tcreateSelector( ( state ) => {\n\t\treturn [\n\t\t\t...unlock( select( STORE_NAME ) )\n\t\t\t\t.getReusableBlocks()\n\t\t\t\t.map( ( userPattern ) =>\n\t\t\t\t\tmapUserPattern(\n\t\t\t\t\t\tuserPattern,\n\t\t\t\t\t\tstate.settings.__experimentalUserPatternCategories\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t// This setting is left for back compat.\n\t\t\t...( state.settings.__experimentalBlockPatterns ?? [] ),\n\t\t\t...( state.settings[ selectBlockPatternsKey ]?.( select ) ?? [] ),\n\t\t].filter(\n\t\t\t( x, index, arr ) =>\n\t\t\t\tindex === arr.findIndex( ( y ) => x.name === y.name )\n\t\t);\n\t}, getAllPatternsDependants( select ) )\n);\n\nexport const isResolvingPatterns = createRegistrySelector( ( select ) =>\n\tcreateSelector( ( state ) => {\n\t\tconst blockPatternsSelect = state.settings[ selectBlockPatternsKey ];\n\t\tconst reusableBlocksSelect = state.settings[ reusableBlocksSelectKey ];\n\t\treturn (\n\t\t\t( blockPatternsSelect\n\t\t\t\t? blockPatternsSelect( select ) === undefined\n\t\t\t\t: false ) ||\n\t\t\t( reusableBlocksSelect\n\t\t\t\t? reusableBlocksSelect( select ) === undefined\n\t\t\t\t: false )\n\t\t);\n\t}, getAllPatternsDependants( select ) )\n);\n\nconst EMPTY_ARRAY = [];\n\nexport const getReusableBlocks = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst reusableBlocksSelect = state.settings[ reusableBlocksSelectKey ];\n\t\treturn (\n\t\t\t( reusableBlocksSelect\n\t\t\t\t? reusableBlocksSelect( select )\n\t\t\t\t: state.settings.__experimentalReusableBlocks ) ?? EMPTY_ARRAY\n\t\t);\n\t}\n);\n\n/**\n * Returns the element of the last element that had focus when focus left the editor canvas.\n *\n * @param {Object} state Block editor state.\n *\n * @return {Object} Element.\n */\nexport function getLastFocus( state ) {\n\treturn state.lastFocus;\n}\n\n/**\n * Returns true if the user is dragging anything, or false otherwise. It is possible for a\n * user to be dragging data from outside of the editor, so this selector is separate from\n * the `isDraggingBlocks` selector which only returns true if the user is dragging blocks.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether user is dragging.\n */\nexport function isDragging( state ) {\n\treturn state.isDragging;\n}\n\n/**\n * Retrieves the expanded block from the state.\n *\n * @param {Object} state Block editor state.\n *\n * @return {string|null} The client ID of the expanded block, if set.\n */\nexport function getExpandedBlock( state ) {\n\treturn state.expandedBlock;\n}\n\n/**\n * Retrieves the client ID of the ancestor block that is content locking the block\n * with the provided client ID.\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n *\n * @return {?string} Client ID of the ancestor block that is content locking the block.\n */\nexport const getContentLockingParent = createSelector(\n\t( state, clientId ) => {\n\t\tlet current = clientId;\n\t\tlet result;\n\t\twhile ( ( current = state.blocks.parents.get( current ) ) ) {\n\t\t\tif (\n\t\t\t\tgetBlockName( state, current ) === 'core/block' ||\n\t\t\t\tgetTemplateLock( state, current ) === 'contentOnly'\n\t\t\t) {\n\t\t\t\tresult = current;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t( state ) => [ state.blocks.parents, state.blockListSettings ]\n);\n\n/**\n * Retrieves the client ID of the block that is content locked but is\n * currently being temporarily edited as a non-locked block.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} The client ID of the block being temporarily edited as a non-locked block.\n */\nexport function getTemporarilyEditingAsBlocks( state ) {\n\treturn state.temporarilyEditingAsBlocks;\n}\n\n/**\n * Returns the focus mode that should be reapplied when the user stops editing\n * a content locked blocks as a block without locking.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} The focus mode that should be re-set when temporarily editing as blocks stops.\n */\nexport function getTemporarilyEditingFocusModeToRevert( state ) {\n\treturn state.temporarilyEditingFocusModeRevert;\n}\n\n/**\n * Returns the style attributes of multiple blocks.\n *\n * @param {Object} state Global application state.\n * @param {string[]} clientIds An array of block client IDs.\n *\n * @return {Object} An object where keys are client IDs and values are the corresponding block styles or undefined.\n */\nexport const getBlockStyles = createSelector(\n\t( state, clientIds ) =>\n\t\tclientIds.reduce( ( styles, clientId ) => {\n\t\t\tstyles[ clientId ] = state.blocks.attributes.get( clientId )?.style;\n\t\t\treturn styles;\n\t\t}, {} ),\n\t( state, clientIds ) => [\n\t\t...clientIds.map(\n\t\t\t( clientId ) => state.blocks.attributes.get( clientId )?.style\n\t\t),\n\t]\n);\n\n/**\n * Returns whether zoom out mode is enabled.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Is zoom out mode enabled.\n */\nexport function isZoomOutMode( state ) {\n\treturn state.editorMode === 'zoom-out';\n}\n\n/**\n * Retrieves the client ID of the block which contains the blocks\n * acting as \"sections\" in the editor. This is typically the \"main content\"\n * of the template/post.\n *\n * @param {Object} state Editor state.\n *\n * @return {string|undefined} The section root client ID or undefined if not set.\n */\nexport function getSectionRootClientId( state ) {\n\treturn state.settings?.[ sectionRootClientIdKey ];\n}\n\n/**\n * Returns the zoom out state.\n *\n * @param {Object} state Global application state.\n * @return {boolean} The zoom out state.\n */\nexport function getZoomLevel( state ) {\n\treturn state.zoomLevel;\n}\n\n/**\n * Returns whether the editor is considered zoomed out.\n *\n * @param {Object} state Global application state.\n * @return {boolean} Whether the editor is zoomed.\n */\nexport function isZoomOut( state ) {\n\treturn getZoomLevel( state ) < 100;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockType,\n\tgetBlockTypes,\n\tgetBlockVariations,\n\thasBlockSupport,\n\tgetPossibleBlockTransformations,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { Platform } from '@wordpress/element';\nimport { applyFilters } from '@wordpress/hooks';\nimport { symbol } from '@wordpress/icons';\nimport { create, remove, toHTMLString } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\twithRootClientIdOptionKey,\n\tcheckAllowListRecursive,\n\tcheckAllowList,\n\tgetAllPatternsDependants,\n\tgetInsertBlockTypeDependants,\n\tgetParsedPattern,\n\tgetGrammar,\n} from './utils';\nimport { orderBy } from '../utils/sorting';\nimport { STORE_NAME } from './constants';\nimport { unlock } from '../lock-unlock';\n\nimport {\n\tgetContentLockingParent,\n\tgetTemporarilyEditingAsBlocks,\n\tgetTemporarilyEditingFocusModeToRevert,\n\tgetSectionRootClientId,\n} from './private-selectors';\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPBlockSelection\n *\n * @property {string} clientId A block client ID.\n * @property {string} attributeKey A block attribute key.\n * @property {number} offset An attribute value offset, based on the rich\n * text value. See `wp.richText.create`.\n */\n\n// Module constants.\nconst MILLISECONDS_PER_HOUR = 3600 * 1000;\nconst MILLISECONDS_PER_DAY = 24 * 3600 * 1000;\nconst MILLISECONDS_PER_WEEK = 7 * 24 * 3600 * 1000;\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Shared reference to an empty Set for cases where it is important to avoid\n * returning a new Set reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n *\n * @type {Set}\n */\nconst EMPTY_SET = new Set();\n\nconst EMPTY_OBJECT = {};\n\n/**\n * Returns a block's name given its client ID, or null if no block exists with\n * the client ID.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {string} Block name.\n */\nexport function getBlockName( state, clientId ) {\n\tconst block = state.blocks.byClientId.get( clientId );\n\tconst socialLinkName = 'core/social-link';\n\n\tif ( Platform.OS !== 'web' && block?.name === socialLinkName ) {\n\t\tconst attributes = state.blocks.attributes.get( clientId );\n\t\tconst { service } = attributes ?? {};\n\n\t\treturn service ? `${ socialLinkName }-${ service }` : socialLinkName;\n\t}\n\treturn block ? block.name : null;\n}\n\n/**\n * Returns whether a block is valid or not.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Is Valid.\n */\nexport function isBlockValid( state, clientId ) {\n\tconst block = state.blocks.byClientId.get( clientId );\n\treturn !! block && block.isValid;\n}\n\n/**\n * Returns a block's attributes given its client ID, or null if no block exists with\n * the client ID.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {Object?} Block attributes.\n */\nexport function getBlockAttributes( state, clientId ) {\n\tconst block = state.blocks.byClientId.get( clientId );\n\tif ( ! block ) {\n\t\treturn null;\n\t}\n\n\treturn state.blocks.attributes.get( clientId );\n}\n\n/**\n * Returns a block given its client ID. This is a parsed copy of the block,\n * containing its `blockName`, `clientId`, and current `attributes` state. This\n * is not the block's registration settings, which must be retrieved from the\n * blocks module registration store.\n *\n * getBlock recurses through its inner blocks until all its children blocks have\n * been retrieved. Note that getBlock will not return the child inner blocks of\n * an inner block controller. This is because an inner block controller syncs\n * itself with its own entity, and should therefore not be included with the\n * blocks of a different entity. For example, say you call `getBlocks( TP )` to\n * get the blocks of a template part. If another template part is a child of TP,\n * then the nested template part's child blocks will not be returned. This way,\n * the template block itself is considered part of the parent, but the children\n * are not.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Parsed block object.\n */\nexport function getBlock( state, clientId ) {\n\tif ( ! state.blocks.byClientId.has( clientId ) ) {\n\t\treturn null;\n\t}\n\n\treturn state.blocks.tree.get( clientId );\n}\n\nexport const __unstableGetBlockWithoutInnerBlocks = createSelector(\n\t( state, clientId ) => {\n\t\tconst block = state.blocks.byClientId.get( clientId );\n\t\tif ( ! block ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\t...block,\n\t\t\tattributes: getBlockAttributes( state, clientId ),\n\t\t};\n\t},\n\t( state, clientId ) => [\n\t\tstate.blocks.byClientId.get( clientId ),\n\t\tstate.blocks.attributes.get( clientId ),\n\t]\n);\n\n/**\n * Returns all block objects for the current post being edited as an array in\n * the order they appear in the post. Note that this will exclude child blocks\n * of nested inner block controllers.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Post blocks.\n */\nexport function getBlocks( state, rootClientId ) {\n\tconst treeKey =\n\t\t! rootClientId || ! areInnerBlocksControlled( state, rootClientId )\n\t\t\t? rootClientId || ''\n\t\t\t: 'controlled||' + rootClientId;\n\treturn state.blocks.tree.get( treeKey )?.innerBlocks || EMPTY_ARRAY;\n}\n\n/**\n * Returns a stripped down block object containing only its client ID,\n * and its inner blocks' client IDs.\n *\n * @deprecated\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Client ID of the block to get.\n *\n * @return {Object} Client IDs of the post blocks.\n */\nexport const __unstableGetClientIdWithClientIdsTree = createSelector(\n\t( state, clientId ) => {\n\t\tdeprecated(\n\t\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetClientIdWithClientIdsTree\",\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.5',\n\t\t\t}\n\t\t);\n\t\treturn {\n\t\t\tclientId,\n\t\t\tinnerBlocks: __unstableGetClientIdsTree( state, clientId ),\n\t\t};\n\t},\n\t( state ) => [ state.blocks.order ]\n);\n\n/**\n * Returns the block tree represented in the block-editor store from the\n * given root, consisting of stripped down block objects containing only\n * their client IDs, and their inner blocks' client IDs.\n *\n * @deprecated\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Client IDs of the post blocks.\n */\nexport const __unstableGetClientIdsTree = createSelector(\n\t( state, rootClientId = '' ) => {\n\t\tdeprecated(\n\t\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetClientIdsTree\",\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.5',\n\t\t\t}\n\t\t);\n\t\treturn getBlockOrder( state, rootClientId ).map( ( clientId ) =>\n\t\t\t__unstableGetClientIdWithClientIdsTree( state, clientId )\n\t\t);\n\t},\n\t( state ) => [ state.blocks.order ]\n);\n\n/**\n * Returns an array containing the clientIds of all descendants of the blocks\n * given. Returned ids are ordered first by the order of the ids given, then\n * by the order that they appear in the editor.\n *\n * @param {Object} state Global application state.\n * @param {string|string[]} rootIds Client ID(s) for which descendant blocks are to be returned.\n *\n * @return {Array} Client IDs of descendants.\n */\nexport const getClientIdsOfDescendants = createSelector(\n\t( state, rootIds ) => {\n\t\trootIds = Array.isArray( rootIds ) ? [ ...rootIds ] : [ rootIds ];\n\t\tconst ids = [];\n\n\t\t// Add the descendants of the root blocks first.\n\t\tfor ( const rootId of rootIds ) {\n\t\t\tconst order = state.blocks.order.get( rootId );\n\t\t\tif ( order ) {\n\t\t\t\tids.push( ...order );\n\t\t\t}\n\t\t}\n\n\t\tlet index = 0;\n\n\t\t// Add the descendants of the descendants, recursively.\n\t\twhile ( index < ids.length ) {\n\t\t\tconst id = ids[ index ];\n\t\t\tconst order = state.blocks.order.get( id );\n\t\t\tif ( order ) {\n\t\t\t\tids.splice( index + 1, 0, ...order );\n\t\t\t}\n\t\t\tindex++;\n\t\t}\n\n\t\treturn ids;\n\t},\n\t( state ) => [ state.blocks.order ]\n);\n\n/**\n * Returns an array containing the clientIds of the top-level blocks and\n * their descendants of any depth (for nested blocks). Ids are returned\n * in the same order that they appear in the editor.\n *\n * @param {Object} state Global application state.\n *\n * @return {Array} ids of top-level and descendant blocks.\n */\nexport const getClientIdsWithDescendants = ( state ) =>\n\tgetClientIdsOfDescendants( state, '' );\n\n/**\n * Returns the total number of blocks, or the total number of blocks with a specific name in a post.\n * The number returned includes nested blocks.\n *\n * @param {Object} state Global application state.\n * @param {?string} blockName Optional block name, if specified only blocks of that type will be counted.\n *\n * @return {number} Number of blocks in the post, or number of blocks with name equal to blockName.\n */\nexport const getGlobalBlockCount = createSelector(\n\t( state, blockName ) => {\n\t\tconst clientIds = getClientIdsWithDescendants( state );\n\t\tif ( ! blockName ) {\n\t\t\treturn clientIds.length;\n\t\t}\n\t\tlet count = 0;\n\t\tfor ( const clientId of clientIds ) {\n\t\t\tconst block = state.blocks.byClientId.get( clientId );\n\t\t\tif ( block.name === blockName ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t},\n\t( state ) => [ state.blocks.order, state.blocks.byClientId ]\n);\n\n/**\n * Returns all blocks that match a blockName. Results include nested blocks.\n *\n * @param {Object} state Global application state.\n * @param {string[]} blockName Block name(s) for which clientIds are to be returned.\n *\n * @return {Array} Array of clientIds of blocks with name equal to blockName.\n */\nexport const getBlocksByName = createSelector(\n\t( state, blockName ) => {\n\t\tif ( ! blockName ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\tconst blockNames = Array.isArray( blockName )\n\t\t\t? blockName\n\t\t\t: [ blockName ];\n\t\tconst clientIds = getClientIdsWithDescendants( state );\n\t\tconst foundBlocks = clientIds.filter( ( clientId ) => {\n\t\t\tconst block = state.blocks.byClientId.get( clientId );\n\t\t\treturn blockNames.includes( block.name );\n\t\t} );\n\t\treturn foundBlocks.length > 0 ? foundBlocks : EMPTY_ARRAY;\n\t},\n\t( state ) => [ state.blocks.order, state.blocks.byClientId ]\n);\n\n/**\n * Returns all global blocks that match a blockName. Results include nested blocks.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n * @param {string[]} blockName Block name(s) for which clientIds are to be returned.\n *\n * @return {Array} Array of clientIds of blocks with name equal to blockName.\n */\nexport function __experimentalGetGlobalBlocksByName( state, blockName ) {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__experimentalGetGlobalBlocksByName\",\n\t\t{\n\t\t\tsince: '6.5',\n\t\t\talternative: `wp.data.select( 'core/block-editor' ).getBlocksByName`,\n\t\t}\n\t);\n\treturn getBlocksByName( state, blockName );\n}\n\n/**\n * Given an array of block client IDs, returns the corresponding array of block\n * objects.\n *\n * @param {Object} state Editor state.\n * @param {string[]} clientIds Client IDs for which blocks are to be returned.\n *\n * @return {WPBlock[]} Block objects.\n */\nexport const getBlocksByClientId = createSelector(\n\t( state, clientIds ) =>\n\t\t( Array.isArray( clientIds ) ? clientIds : [ clientIds ] ).map(\n\t\t\t( clientId ) => getBlock( state, clientId )\n\t\t),\n\t( state, clientIds ) =>\n\t\t( Array.isArray( clientIds ) ? clientIds : [ clientIds ] ).map(\n\t\t\t( clientId ) => state.blocks.tree.get( clientId )\n\t\t)\n);\n\n/**\n * Given an array of block client IDs, returns the corresponding array of block\n * names.\n *\n * @param {Object} state Editor state.\n * @param {string[]} clientIds Client IDs for which block names are to be returned.\n *\n * @return {string[]} Block names.\n */\nexport const getBlockNamesByClientId = createSelector(\n\t( state, clientIds ) =>\n\t\tgetBlocksByClientId( state, clientIds )\n\t\t\t.filter( Boolean )\n\t\t\t.map( ( block ) => block.name ),\n\t( state, clientIds ) => getBlocksByClientId( state, clientIds )\n);\n\n/**\n * Returns the number of blocks currently present in the post.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {number} Number of blocks in the post.\n */\nexport function getBlockCount( state, rootClientId ) {\n\treturn getBlockOrder( state, rootClientId ).length;\n}\n\n/**\n * Returns the current selection start block client ID, attribute key and text\n * offset.\n *\n * @param {Object} state Block editor state.\n *\n * @return {WPBlockSelection} Selection start information.\n */\nexport function getSelectionStart( state ) {\n\treturn state.selection.selectionStart;\n}\n\n/**\n * Returns the current selection end block client ID, attribute key and text\n * offset.\n *\n * @param {Object} state Block editor state.\n *\n * @return {WPBlockSelection} Selection end information.\n */\nexport function getSelectionEnd( state ) {\n\treturn state.selection.selectionEnd;\n}\n\n/**\n * Returns the current block selection start. This value may be null, and it\n * may represent either a singular block selection or multi-selection start.\n * A selection is singular if its start and end match.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} Client ID of block selection start.\n */\nexport function getBlockSelectionStart( state ) {\n\treturn state.selection.selectionStart.clientId;\n}\n\n/**\n * Returns the current block selection end. This value may be null, and it\n * may represent either a singular block selection or multi-selection end.\n * A selection is singular if its start and end match.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} Client ID of block selection end.\n */\nexport function getBlockSelectionEnd( state ) {\n\treturn state.selection.selectionEnd.clientId;\n}\n\n/**\n * Returns the number of blocks currently selected in the post.\n *\n * @param {Object} state Global application state.\n *\n * @return {number} Number of blocks selected in the post.\n */\nexport function getSelectedBlockCount( state ) {\n\tconst multiSelectedBlockCount =\n\t\tgetMultiSelectedBlockClientIds( state ).length;\n\n\tif ( multiSelectedBlockCount ) {\n\t\treturn multiSelectedBlockCount;\n\t}\n\n\treturn state.selection.selectionStart.clientId ? 1 : 0;\n}\n\n/**\n * Returns true if there is a single selected block, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether a single block is selected.\n */\nexport function hasSelectedBlock( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\treturn (\n\t\t!! selectionStart.clientId &&\n\t\tselectionStart.clientId === selectionEnd.clientId\n\t);\n}\n\n/**\n * Returns the currently selected block client ID, or null if there is no\n * selected block.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Selected block client ID.\n */\nexport function getSelectedBlockClientId( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\tconst { clientId } = selectionStart;\n\n\tif ( ! clientId || clientId !== selectionEnd.clientId ) {\n\t\treturn null;\n\t}\n\n\treturn clientId;\n}\n\n/**\n * Returns the currently selected block, or null if there is no selected block.\n *\n * @param {Object} state Global application state.\n *\n * @return {?Object} Selected block.\n */\nexport function getSelectedBlock( state ) {\n\tconst clientId = getSelectedBlockClientId( state );\n\treturn clientId ? getBlock( state, clientId ) : null;\n}\n\n/**\n * Given a block client ID, returns the root block from which the block is\n * nested, an empty string for top-level blocks, or null if the block does not\n * exist.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n *\n * @return {?string} Root client ID, if exists\n */\nexport function getBlockRootClientId( state, clientId ) {\n\treturn state.blocks.parents.get( clientId ) ?? null;\n}\n\n/**\n * Given a block client ID, returns the list of all its parents from top to bottom.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n * @param {boolean} ascending Order results from bottom to top (true) or top to bottom (false).\n *\n * @return {Array} ClientIDs of the parent blocks.\n */\nexport const getBlockParents = createSelector(\n\t( state, clientId, ascending = false ) => {\n\t\tconst parents = [];\n\t\tlet current = clientId;\n\t\twhile ( ( current = state.blocks.parents.get( current ) ) ) {\n\t\t\tparents.push( current );\n\t\t}\n\n\t\tif ( ! parents.length ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\treturn ascending ? parents : parents.reverse();\n\t},\n\t( state ) => [ state.blocks.parents ]\n);\n\n/**\n * Given a block client ID and a block name, returns the list of all its parents\n * from top to bottom, filtered by the given name(s). For example, if passed\n * 'core/group' as the blockName, it will only return parents which are group\n * blocks. If passed `[ 'core/group', 'core/cover']`, as the blockName, it will\n * return parents which are group blocks and parents which are cover blocks.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n * @param {string|string[]} blockName Block name(s) to filter.\n * @param {boolean} ascending Order results from bottom to top (true) or top to bottom (false).\n *\n * @return {Array} ClientIDs of the parent blocks.\n */\nexport const getBlockParentsByBlockName = createSelector(\n\t( state, clientId, blockName, ascending = false ) => {\n\t\tconst parents = getBlockParents( state, clientId, ascending );\n\t\tconst hasName = Array.isArray( blockName )\n\t\t\t? ( name ) => blockName.includes( name )\n\t\t\t: ( name ) => blockName === name;\n\t\treturn parents.filter( ( id ) => hasName( getBlockName( state, id ) ) );\n\t},\n\t( state ) => [ state.blocks.parents ]\n);\n/**\n * Given a block client ID, returns the root of the hierarchy from which the block is nested, return the block itself for root level blocks.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n *\n * @return {string} Root client ID\n */\nexport function getBlockHierarchyRootClientId( state, clientId ) {\n\tlet current = clientId;\n\tlet parent;\n\tdo {\n\t\tparent = current;\n\t\tcurrent = state.blocks.parents.get( current );\n\t} while ( current );\n\treturn parent;\n}\n\n/**\n * Given a block client ID, returns the lowest common ancestor with selected client ID.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find common ancestor client ID.\n *\n * @return {string} Common ancestor client ID or undefined\n */\nexport function getLowestCommonAncestorWithSelectedBlock( state, clientId ) {\n\tconst selectedId = getSelectedBlockClientId( state );\n\tconst clientParents = [ ...getBlockParents( state, clientId ), clientId ];\n\tconst selectedParents = [\n\t\t...getBlockParents( state, selectedId ),\n\t\tselectedId,\n\t];\n\n\tlet lowestCommonAncestor;\n\n\tconst maxDepth = Math.min( clientParents.length, selectedParents.length );\n\tfor ( let index = 0; index < maxDepth; index++ ) {\n\t\tif ( clientParents[ index ] === selectedParents[ index ] ) {\n\t\t\tlowestCommonAncestor = clientParents[ index ];\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn lowestCommonAncestor;\n}\n\n/**\n * Returns the client ID of the block adjacent one at the given reference\n * startClientId and modifier directionality. Defaults start startClientId to\n * the selected block, and direction as next block. Returns null if there is no\n * adjacent block.\n *\n * @param {Object} state Editor state.\n * @param {?string} startClientId Optional client ID of block from which to\n * search.\n * @param {?number} modifier Directionality multiplier (1 next, -1\n * previous).\n *\n * @return {?string} Return the client ID of the block, or null if none exists.\n */\nexport function getAdjacentBlockClientId( state, startClientId, modifier = 1 ) {\n\t// Default to selected block.\n\tif ( startClientId === undefined ) {\n\t\tstartClientId = getSelectedBlockClientId( state );\n\t}\n\n\t// Try multi-selection starting at extent based on modifier.\n\tif ( startClientId === undefined ) {\n\t\tif ( modifier < 0 ) {\n\t\t\tstartClientId = getFirstMultiSelectedBlockClientId( state );\n\t\t} else {\n\t\t\tstartClientId = getLastMultiSelectedBlockClientId( state );\n\t\t}\n\t}\n\n\t// Validate working start client ID.\n\tif ( ! startClientId ) {\n\t\treturn null;\n\t}\n\n\t// Retrieve start block root client ID, being careful to allow the falsey\n\t// empty string top-level root by explicitly testing against null.\n\tconst rootClientId = getBlockRootClientId( state, startClientId );\n\tif ( rootClientId === null ) {\n\t\treturn null;\n\t}\n\n\tconst { order } = state.blocks;\n\tconst orderSet = order.get( rootClientId );\n\tconst index = orderSet.indexOf( startClientId );\n\tconst nextIndex = index + 1 * modifier;\n\n\t// Block was first in set and we're attempting to get previous.\n\tif ( nextIndex < 0 ) {\n\t\treturn null;\n\t}\n\n\t// Block was last in set and we're attempting to get next.\n\tif ( nextIndex === orderSet.length ) {\n\t\treturn null;\n\t}\n\n\t// Assume incremented index is within the set.\n\treturn orderSet[ nextIndex ];\n}\n\n/**\n * Returns the previous block's client ID from the given reference start ID.\n * Defaults start to the selected block. Returns null if there is no previous\n * block.\n *\n * @param {Object} state Editor state.\n * @param {?string} startClientId Optional client ID of block from which to\n * search.\n *\n * @return {?string} Adjacent block's client ID, or null if none exists.\n */\nexport function getPreviousBlockClientId( state, startClientId ) {\n\treturn getAdjacentBlockClientId( state, startClientId, -1 );\n}\n\n/**\n * Returns the next block's client ID from the given reference start ID.\n * Defaults start to the selected block. Returns null if there is no next\n * block.\n *\n * @param {Object} state Editor state.\n * @param {?string} startClientId Optional client ID of block from which to\n * search.\n *\n * @return {?string} Adjacent block's client ID, or null if none exists.\n */\nexport function getNextBlockClientId( state, startClientId ) {\n\treturn getAdjacentBlockClientId( state, startClientId, 1 );\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns the initial caret position for the selected block.\n * This position is to used to position the caret properly when the selected block changes.\n * If the current block is not a RichText, having initial position set to 0 means \"focus block\"\n *\n * @param {Object} state Global application state.\n *\n * @return {0|-1|null} Initial position.\n */\nexport function getSelectedBlocksInitialCaretPosition( state ) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn state.initialPosition;\n}\n\n/**\n * Returns the current selection set of block client IDs (multiselection or single selection).\n *\n * @param {Object} state Editor state.\n *\n * @return {Array} Multi-selected block client IDs.\n */\nexport const getSelectedBlockClientIds = createSelector(\n\t( state ) => {\n\t\tconst { selectionStart, selectionEnd } = state.selection;\n\n\t\tif ( ! selectionStart.clientId || ! selectionEnd.clientId ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\t\treturn [ selectionStart.clientId ];\n\t\t}\n\n\t\t// Retrieve root client ID to aid in retrieving relevant nested block\n\t\t// order, being careful to allow the falsey empty string top-level root\n\t\t// by explicitly testing against null.\n\t\tconst rootClientId = getBlockRootClientId(\n\t\t\tstate,\n\t\t\tselectionStart.clientId\n\t\t);\n\n\t\tif ( rootClientId === null ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tconst blockOrder = getBlockOrder( state, rootClientId );\n\t\tconst startIndex = blockOrder.indexOf( selectionStart.clientId );\n\t\tconst endIndex = blockOrder.indexOf( selectionEnd.clientId );\n\n\t\tif ( startIndex > endIndex ) {\n\t\t\treturn blockOrder.slice( endIndex, startIndex + 1 );\n\t\t}\n\n\t\treturn blockOrder.slice( startIndex, endIndex + 1 );\n\t},\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.selection.selectionStart.clientId,\n\t\tstate.selection.selectionEnd.clientId,\n\t]\n);\n\n/**\n * Returns the current multi-selection set of block client IDs, or an empty\n * array if there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {Array} Multi-selected block client IDs.\n */\nexport function getMultiSelectedBlockClientIds( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\treturn getSelectedBlockClientIds( state );\n}\n\n/**\n * Returns the current multi-selection set of blocks, or an empty array if\n * there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {Array} Multi-selected block objects.\n */\nexport const getMultiSelectedBlocks = createSelector(\n\t( state ) => {\n\t\tconst multiSelectedBlockClientIds =\n\t\t\tgetMultiSelectedBlockClientIds( state );\n\t\tif ( ! multiSelectedBlockClientIds.length ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\treturn multiSelectedBlockClientIds.map( ( clientId ) =>\n\t\t\tgetBlock( state, clientId )\n\t\t);\n\t},\n\t( state ) => [\n\t\t...getSelectedBlockClientIds.getDependants( state ),\n\t\tstate.blocks.byClientId,\n\t\tstate.blocks.order,\n\t\tstate.blocks.attributes,\n\t]\n);\n\n/**\n * Returns the client ID of the first block in the multi-selection set, or null\n * if there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} First block client ID in the multi-selection set.\n */\nexport function getFirstMultiSelectedBlockClientId( state ) {\n\treturn getMultiSelectedBlockClientIds( state )[ 0 ] || null;\n}\n\n/**\n * Returns the client ID of the last block in the multi-selection set, or null\n * if there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Last block client ID in the multi-selection set.\n */\nexport function getLastMultiSelectedBlockClientId( state ) {\n\tconst selectedClientIds = getMultiSelectedBlockClientIds( state );\n\treturn selectedClientIds[ selectedClientIds.length - 1 ] || null;\n}\n\n/**\n * Returns true if a multi-selection exists, and the block corresponding to the\n * specified client ID is the first block of the multi-selection set, or false\n * otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is first in multi-selection.\n */\nexport function isFirstMultiSelectedBlock( state, clientId ) {\n\treturn getFirstMultiSelectedBlockClientId( state ) === clientId;\n}\n\n/**\n * Returns true if the client ID occurs within the block multi-selection, or\n * false otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is in multi-selection set.\n */\nexport function isBlockMultiSelected( state, clientId ) {\n\treturn getMultiSelectedBlockClientIds( state ).indexOf( clientId ) !== -1;\n}\n\n/**\n * Returns true if an ancestor of the block is multi-selected, or false\n * otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether an ancestor of the block is in multi-selection\n * set.\n */\nexport const isAncestorMultiSelected = createSelector(\n\t( state, clientId ) => {\n\t\tlet ancestorClientId = clientId;\n\t\tlet isMultiSelected = false;\n\t\twhile ( ancestorClientId && ! isMultiSelected ) {\n\t\t\tancestorClientId = getBlockRootClientId( state, ancestorClientId );\n\t\t\tisMultiSelected = isBlockMultiSelected( state, ancestorClientId );\n\t\t}\n\t\treturn isMultiSelected;\n\t},\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.selection.selectionStart.clientId,\n\t\tstate.selection.selectionEnd.clientId,\n\t]\n);\n\n/**\n * Returns the client ID of the block which begins the multi-selection set, or\n * null if there is no multi-selection.\n *\n * This is not necessarily the first client ID in the selection.\n *\n * @see getFirstMultiSelectedBlockClientId\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Client ID of block beginning multi-selection.\n */\nexport function getMultiSelectedBlocksStartClientId( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\treturn null;\n\t}\n\n\treturn selectionStart.clientId || null;\n}\n\n/**\n * Returns the client ID of the block which ends the multi-selection set, or\n * null if there is no multi-selection.\n *\n * This is not necessarily the last client ID in the selection.\n *\n * @see getLastMultiSelectedBlockClientId\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Client ID of block ending multi-selection.\n */\nexport function getMultiSelectedBlocksEndClientId( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\treturn null;\n\t}\n\n\treturn selectionEnd.clientId || null;\n}\n\n/**\n * Returns true if the selection is not partial.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the selection is mergeable.\n */\nexport function __unstableIsFullySelected( state ) {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\treturn (\n\t\t! selectionAnchor.attributeKey &&\n\t\t! selectionFocus.attributeKey &&\n\t\ttypeof selectionAnchor.offset === 'undefined' &&\n\t\ttypeof selectionFocus.offset === 'undefined'\n\t);\n}\n\n/**\n * Returns true if the selection is collapsed.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the selection is collapsed.\n */\nexport function __unstableIsSelectionCollapsed( state ) {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\treturn (\n\t\t!! selectionAnchor &&\n\t\t!! selectionFocus &&\n\t\tselectionAnchor.clientId === selectionFocus.clientId &&\n\t\tselectionAnchor.attributeKey === selectionFocus.attributeKey &&\n\t\tselectionAnchor.offset === selectionFocus.offset\n\t);\n}\n\nexport function __unstableSelectionHasUnmergeableBlock( state ) {\n\treturn getSelectedBlockClientIds( state ).some( ( clientId ) => {\n\t\tconst blockName = getBlockName( state, clientId );\n\t\tconst blockType = getBlockType( blockName );\n\t\treturn ! blockType.merge;\n\t} );\n}\n\n/**\n * Check whether the selection is mergeable.\n *\n * @param {Object} state Editor state.\n * @param {boolean} isForward Whether to merge forwards.\n *\n * @return {boolean} Whether the selection is mergeable.\n */\nexport function __unstableIsSelectionMergeable( state, isForward ) {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\n\t// It's not mergeable if the start and end are within the same block.\n\tif ( selectionAnchor.clientId === selectionFocus.clientId ) {\n\t\treturn false;\n\t}\n\n\t// It's not mergeable if there's no rich text selection.\n\tif (\n\t\t! selectionAnchor.attributeKey ||\n\t\t! selectionFocus.attributeKey ||\n\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\ttypeof selectionFocus.offset === 'undefined'\n\t) {\n\t\treturn false;\n\t}\n\n\tconst anchorRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionAnchor.clientId\n\t);\n\tconst focusRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionFocus.clientId\n\t);\n\n\t// It's not mergeable if the selection doesn't start and end in the same\n\t// block list. Maybe in the future it should be allowed.\n\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\treturn false;\n\t}\n\n\tconst blockOrder = getBlockOrder( state, anchorRootClientId );\n\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t// Reassign selection start and end based on order.\n\tlet selectionStart, selectionEnd;\n\n\tif ( anchorIndex > focusIndex ) {\n\t\tselectionStart = selectionFocus;\n\t\tselectionEnd = selectionAnchor;\n\t} else {\n\t\tselectionStart = selectionAnchor;\n\t\tselectionEnd = selectionFocus;\n\t}\n\n\tconst targetBlockClientId = isForward\n\t\t? selectionEnd.clientId\n\t\t: selectionStart.clientId;\n\tconst blockToMergeClientId = isForward\n\t\t? selectionStart.clientId\n\t\t: selectionEnd.clientId;\n\n\tconst targetBlockName = getBlockName( state, targetBlockClientId );\n\tconst targetBlockType = getBlockType( targetBlockName );\n\n\tif ( ! targetBlockType.merge ) {\n\t\treturn false;\n\t}\n\n\tconst blockToMerge = getBlock( state, blockToMergeClientId );\n\n\t// It's mergeable if the blocks are of the same type.\n\tif ( blockToMerge.name === targetBlockName ) {\n\t\treturn true;\n\t}\n\n\t// If the blocks are of a different type, try to transform the block being\n\t// merged into the same type of block.\n\tconst blocksToMerge = switchToBlockType( blockToMerge, targetBlockName );\n\n\treturn blocksToMerge && blocksToMerge.length;\n}\n\n/**\n * Get partial selected blocks with their content updated\n * based on the selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object[]} Updated partial selected blocks.\n */\nexport const __unstableGetSelectedBlocksWithPartialSelection = ( state ) => {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\n\tif ( selectionAnchor.clientId === selectionFocus.clientId ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\t// Can't split if the selection is not set.\n\tif (\n\t\t! selectionAnchor.attributeKey ||\n\t\t! selectionFocus.attributeKey ||\n\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\ttypeof selectionFocus.offset === 'undefined'\n\t) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst anchorRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionAnchor.clientId\n\t);\n\tconst focusRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionFocus.clientId\n\t);\n\n\t// It's not splittable if the selection doesn't start and end in the same\n\t// block list. Maybe in the future it should be allowed.\n\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst blockOrder = getBlockOrder( state, anchorRootClientId );\n\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t// Reassign selection start and end based on order.\n\tconst [ selectionStart, selectionEnd ] =\n\t\tanchorIndex > focusIndex\n\t\t\t? [ selectionFocus, selectionAnchor ]\n\t\t\t: [ selectionAnchor, selectionFocus ];\n\n\tconst blockA = getBlock( state, selectionStart.clientId );\n\tconst blockB = getBlock( state, selectionEnd.clientId );\n\n\tconst htmlA = blockA.attributes[ selectionStart.attributeKey ];\n\tconst htmlB = blockB.attributes[ selectionEnd.attributeKey ];\n\n\tlet valueA = create( { html: htmlA } );\n\tlet valueB = create( { html: htmlB } );\n\n\tvalueA = remove( valueA, 0, selectionStart.offset );\n\tvalueB = remove( valueB, selectionEnd.offset, valueB.text.length );\n\n\treturn [\n\t\t{\n\t\t\t...blockA,\n\t\t\tattributes: {\n\t\t\t\t...blockA.attributes,\n\t\t\t\t[ selectionStart.attributeKey ]: toHTMLString( {\n\t\t\t\t\tvalue: valueA,\n\t\t\t\t} ),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t...blockB,\n\t\t\tattributes: {\n\t\t\t\t...blockB.attributes,\n\t\t\t\t[ selectionEnd.attributeKey ]: toHTMLString( {\n\t\t\t\t\tvalue: valueB,\n\t\t\t\t} ),\n\t\t\t},\n\t\t},\n\t];\n};\n\n/**\n * Returns an array containing all block client IDs in the editor in the order\n * they appear. Optionally accepts a root client ID of the block list for which\n * the order should be returned, defaulting to the top-level block order.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Array} Ordered client IDs of editor blocks.\n */\nexport function getBlockOrder( state, rootClientId ) {\n\treturn state.blocks.order.get( rootClientId || '' ) || EMPTY_ARRAY;\n}\n\n/**\n * Returns the index at which the block corresponding to the specified client\n * ID occurs within the block order, or `-1` if the block does not exist.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {number} Index at which block exists in order.\n */\nexport function getBlockIndex( state, clientId ) {\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\treturn getBlockOrder( state, rootClientId ).indexOf( clientId );\n}\n\n/**\n * Returns true if the block corresponding to the specified client ID is\n * currently selected and no multi-selection exists, or false otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is selected and multi-selection exists.\n */\nexport function isBlockSelected( state, clientId ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId !== selectionEnd.clientId ) {\n\t\treturn false;\n\t}\n\n\treturn selectionStart.clientId === clientId;\n}\n\n/**\n * Returns true if one of the block's inner blocks is selected.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n * @param {boolean} deep Perform a deep check.\n *\n * @return {boolean} Whether the block has an inner block selected\n */\nexport function hasSelectedInnerBlock( state, clientId, deep = false ) {\n\tconst selectedBlockClientIds = getSelectedBlockClientIds( state );\n\n\tif ( ! selectedBlockClientIds.length ) {\n\t\treturn false;\n\t}\n\n\tif ( deep ) {\n\t\treturn selectedBlockClientIds.some( ( id ) =>\n\t\t\t// Pass true because we don't care about order and it's more\n\t\t\t// performant.\n\t\t\tgetBlockParents( state, id, true ).includes( clientId )\n\t\t);\n\t}\n\n\treturn selectedBlockClientIds.some(\n\t\t( id ) => getBlockRootClientId( state, id ) === clientId\n\t);\n}\n\n/**\n * Returns true if one of the block's inner blocks is dragged.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n * @param {boolean} deep Perform a deep check.\n *\n * @return {boolean} Whether the block has an inner block dragged\n */\nexport function hasDraggedInnerBlock( state, clientId, deep = false ) {\n\treturn getBlockOrder( state, clientId ).some(\n\t\t( innerClientId ) =>\n\t\t\tisBlockBeingDragged( state, innerClientId ) ||\n\t\t\t( deep && hasDraggedInnerBlock( state, innerClientId, deep ) )\n\t);\n}\n\n/**\n * Returns true if the block corresponding to the specified client ID is\n * currently selected but isn't the last of the selected blocks. Here \"last\"\n * refers to the block sequence in the document, _not_ the sequence of\n * multi-selection, which is why `state.selectionEnd` isn't used.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is selected and not the last in the\n * selection.\n */\nexport function isBlockWithinSelection( state, clientId ) {\n\tif ( ! clientId ) {\n\t\treturn false;\n\t}\n\n\tconst clientIds = getMultiSelectedBlockClientIds( state );\n\tconst index = clientIds.indexOf( clientId );\n\treturn index > -1 && index < clientIds.length - 1;\n}\n\n/**\n * Returns true if a multi-selection has been made, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether multi-selection has been made.\n */\nexport function hasMultiSelection( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\treturn selectionStart.clientId !== selectionEnd.clientId;\n}\n\n/**\n * Whether in the process of multi-selecting or not. This flag is only true\n * while the multi-selection is being selected (by mouse move), and is false\n * once the multi-selection has been settled.\n *\n * @see hasMultiSelection\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} True if multi-selecting, false if not.\n */\nexport function isMultiSelecting( state ) {\n\treturn state.isMultiSelecting;\n}\n\n/**\n * Selector that returns if multi-selection is enabled or not.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} True if it should be possible to multi-select blocks, false if multi-selection is disabled.\n */\nexport function isSelectionEnabled( state ) {\n\treturn state.isSelectionEnabled;\n}\n\n/**\n * Returns the block's editing mode, defaulting to \"visual\" if not explicitly\n * assigned.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Block editing mode.\n */\nexport function getBlockMode( state, clientId ) {\n\treturn state.blocksMode[ clientId ] || 'visual';\n}\n\n/**\n * Returns true if the user is typing, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether user is typing.\n */\nexport function isTyping( state ) {\n\treturn state.isTyping;\n}\n\n/**\n * Returns true if the user is dragging blocks, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether user is dragging blocks.\n */\nexport function isDraggingBlocks( state ) {\n\treturn !! state.draggedBlocks.length;\n}\n\n/**\n * Returns the client ids of any blocks being directly dragged.\n *\n * This does not include children of a parent being dragged.\n *\n * @param {Object} state Global application state.\n *\n * @return {string[]} Array of dragged block client ids.\n */\nexport function getDraggedBlockClientIds( state ) {\n\treturn state.draggedBlocks;\n}\n\n/**\n * Returns whether the block is being dragged.\n *\n * Only returns true if the block is being directly dragged,\n * not if the block is a child of a parent being dragged.\n * See `isAncestorBeingDragged` for child blocks.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId Client id for block to check.\n *\n * @return {boolean} Whether the block is being dragged.\n */\nexport function isBlockBeingDragged( state, clientId ) {\n\treturn state.draggedBlocks.includes( clientId );\n}\n\n/**\n * Returns whether a parent/ancestor of the block is being dragged.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId Client id for block to check.\n *\n * @return {boolean} Whether the block's ancestor is being dragged.\n */\nexport function isAncestorBeingDragged( state, clientId ) {\n\t// Return early if no blocks are being dragged rather than\n\t// the more expensive check for parents.\n\tif ( ! isDraggingBlocks( state ) ) {\n\t\treturn false;\n\t}\n\n\tconst parents = getBlockParents( state, clientId );\n\treturn parents.some( ( parentClientId ) =>\n\t\tisBlockBeingDragged( state, parentClientId )\n\t);\n}\n\n/**\n * Returns true if the caret is within formatted text, or false otherwise.\n *\n * @deprecated\n *\n * @return {boolean} Whether the caret is within formatted text.\n */\nexport function isCaretWithinFormattedText() {\n\tdeprecated(\n\t\t'wp.data.select( \"core/block-editor\" ).isCaretWithinFormattedText',\n\t\t{\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.3',\n\t\t}\n\t);\n\n\treturn false;\n}\n\n/**\n * Returns the insertion point, the index at which the new inserted block would\n * be placed. Defaults to the last index.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} Insertion point object with `rootClientId`, `index`.\n */\nexport const getBlockInsertionPoint = createSelector(\n\t( state ) => {\n\t\tlet rootClientId, index;\n\n\t\tconst {\n\t\t\tinsertionPoint,\n\t\t\tselection: { selectionEnd },\n\t\t} = state;\n\t\tif ( insertionPoint !== null ) {\n\t\t\treturn insertionPoint;\n\t\t}\n\n\t\tconst { clientId } = selectionEnd;\n\n\t\tif ( clientId ) {\n\t\t\trootClientId = getBlockRootClientId( state, clientId ) || undefined;\n\t\t\tindex = getBlockIndex( state, selectionEnd.clientId ) + 1;\n\t\t} else {\n\t\t\tindex = getBlockOrder( state ).length;\n\t\t}\n\n\t\treturn { rootClientId, index };\n\t},\n\t( state ) => [\n\t\tstate.insertionPoint,\n\t\tstate.selection.selectionEnd.clientId,\n\t\tstate.blocks.parents,\n\t\tstate.blocks.order,\n\t]\n);\n\n/**\n * Returns true if we should show the block insertion point.\n *\n * @param {Object} state Global application state.\n *\n * @return {?boolean} Whether the insertion point is visible or not.\n */\nexport function isBlockInsertionPointVisible( state ) {\n\treturn state.insertionPoint !== null;\n}\n\n/**\n * Returns whether the blocks matches the template or not.\n *\n * @param {boolean} state\n * @return {?boolean} Whether the template is valid or not.\n */\nexport function isValidTemplate( state ) {\n\treturn state.template.isValid;\n}\n\n/**\n * Returns the defined block template\n *\n * @param {boolean} state\n *\n * @return {?Array} Block Template.\n */\nexport function getTemplate( state ) {\n\treturn state.settings.template;\n}\n\n/**\n * Returns the defined block template lock. Optionally accepts a root block\n * client ID as context, otherwise defaulting to the global context.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional block root client ID.\n *\n * @return {string|false} Block Template Lock\n */\nexport function getTemplateLock( state, rootClientId ) {\n\tif ( ! rootClientId ) {\n\t\treturn state.settings.templateLock ?? false;\n\t}\n\n\treturn getBlockListSettings( state, rootClientId )?.templateLock ?? false;\n}\n\n/**\n * Determines if the given block type is allowed to be inserted into the block list.\n * This function is not exported and not memoized because using a memoized selector\n * inside another memoized selector is just a waste of time.\n *\n * @param {Object} state Editor state.\n * @param {string|Object} blockName The block type object, e.g., the response\n * from the block directory; or a string name of\n * an installed block type, e.g.' core/paragraph'.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given block type is allowed to be inserted.\n */\nconst canInsertBlockTypeUnmemoized = (\n\tstate,\n\tblockName,\n\trootClientId = null\n) => {\n\tlet blockType;\n\tif ( blockName && 'object' === typeof blockName ) {\n\t\tblockType = blockName;\n\t\tblockName = blockType.name;\n\t} else {\n\t\tblockType = getBlockType( blockName );\n\t}\n\tif ( ! blockType ) {\n\t\treturn false;\n\t}\n\n\tconst { allowedBlockTypes } = getSettings( state );\n\n\tconst isBlockAllowedInEditor = checkAllowList(\n\t\tallowedBlockTypes,\n\t\tblockName,\n\t\ttrue\n\t);\n\tif ( ! isBlockAllowedInEditor ) {\n\t\treturn false;\n\t}\n\n\tconst isLocked = !! getTemplateLock( state, rootClientId );\n\tif ( isLocked ) {\n\t\treturn false;\n\t}\n\n\tif ( getBlockEditingMode( state, rootClientId ?? '' ) === 'disabled' ) {\n\t\treturn false;\n\t}\n\n\tconst parentBlockListSettings = getBlockListSettings( state, rootClientId );\n\n\t// The parent block doesn't have settings indicating it doesn't support\n\t// inner blocks, return false.\n\tif ( rootClientId && parentBlockListSettings === undefined ) {\n\t\treturn false;\n\t}\n\n\tconst parentName = getBlockName( state, rootClientId );\n\tconst parentBlockType = getBlockType( parentName );\n\n\t// Look at the `blockType.allowedBlocks` field to determine whether this is an allowed child block.\n\tconst parentAllowedChildBlocks = parentBlockType?.allowedBlocks;\n\tlet hasParentAllowedBlock = checkAllowList(\n\t\tparentAllowedChildBlocks,\n\t\tblockName\n\t);\n\n\t// The `allowedBlocks` block list setting can further limit which blocks are allowed children.\n\tif ( hasParentAllowedBlock !== false ) {\n\t\tconst parentAllowedBlocks = parentBlockListSettings?.allowedBlocks;\n\t\tconst hasParentListAllowedBlock = checkAllowList(\n\t\t\tparentAllowedBlocks,\n\t\t\tblockName\n\t\t);\n\t\t// Never downgrade the result from `true` to `null`\n\t\tif ( hasParentListAllowedBlock !== null ) {\n\t\t\thasParentAllowedBlock = hasParentListAllowedBlock;\n\t\t}\n\t}\n\n\tconst blockAllowedParentBlocks = blockType.parent;\n\tconst hasBlockAllowedParent = checkAllowList(\n\t\tblockAllowedParentBlocks,\n\t\tparentName\n\t);\n\n\tlet hasBlockAllowedAncestor = true;\n\tconst blockAllowedAncestorBlocks = blockType.ancestor;\n\tif ( blockAllowedAncestorBlocks ) {\n\t\tconst ancestors = [\n\t\t\trootClientId,\n\t\t\t...getBlockParents( state, rootClientId ),\n\t\t];\n\n\t\thasBlockAllowedAncestor = ancestors.some( ( ancestorClientId ) =>\n\t\t\tcheckAllowList(\n\t\t\t\tblockAllowedAncestorBlocks,\n\t\t\t\tgetBlockName( state, ancestorClientId )\n\t\t\t)\n\t\t);\n\t}\n\n\tconst canInsert =\n\t\thasBlockAllowedAncestor &&\n\t\t( ( hasParentAllowedBlock === null &&\n\t\t\thasBlockAllowedParent === null ) ||\n\t\t\thasParentAllowedBlock === true ||\n\t\t\thasBlockAllowedParent === true );\n\n\tif ( ! canInsert ) {\n\t\treturn canInsert;\n\t}\n\n\t/**\n\t * This filter is an ad-hoc solution to prevent adding template parts inside post content.\n\t * Conceptually, having a filter inside a selector is bad pattern so this code will be\n\t * replaced by a declarative API that doesn't the following drawbacks:\n\t *\n\t * Filters are not reactive: Upon switching between \"template mode\" and non \"template mode\",\n\t * the filter and selector won't necessarily be executed again. For now, it doesn't matter much\n\t * because you can't switch between the two modes while the inserter stays open.\n\t *\n\t * Filters are global: Once they're defined, they will affect all editor instances and all registries.\n\t * An ideal API would only affect specific editor instances.\n\t */\n\treturn applyFilters(\n\t\t'blockEditor.__unstableCanInsertBlockType',\n\t\tcanInsert,\n\t\tblockType,\n\t\trootClientId,\n\t\t{\n\t\t\t// Pass bound selectors of the current registry. If we're in a nested\n\t\t\t// context, the data will differ from the one selected from the root\n\t\t\t// registry.\n\t\t\tgetBlock: getBlock.bind( null, state ),\n\t\t\tgetBlockParentsByBlockName: getBlockParentsByBlockName.bind(\n\t\t\t\tnull,\n\t\t\t\tstate\n\t\t\t),\n\t\t}\n\t);\n};\n\n/**\n * Determines if the given block type is allowed to be inserted into the block list.\n *\n * @param {Object} state Editor state.\n * @param {string} blockName The name of the block type, e.g.' core/paragraph'.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given block type is allowed to be inserted.\n */\nexport const canInsertBlockType = createSelector(\n\tcanInsertBlockTypeUnmemoized,\n\t( state, blockName, rootClientId ) =>\n\t\tgetInsertBlockTypeDependants( state, rootClientId )\n);\n\n/**\n * Determines if the given blocks are allowed to be inserted into the block\n * list.\n *\n * @param {Object} state Editor state.\n * @param {string} clientIds The block client IDs to be inserted.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given blocks are allowed to be inserted.\n */\nexport function canInsertBlocks( state, clientIds, rootClientId = null ) {\n\treturn clientIds.every( ( id ) =>\n\t\tcanInsertBlockType( state, getBlockName( state, id ), rootClientId )\n\t);\n}\n\n/**\n * Determines if the given block is allowed to be deleted.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId The block client Id.\n *\n * @return {boolean} Whether the given block is allowed to be removed.\n */\nexport function canRemoveBlock( state, clientId ) {\n\tconst attributes = getBlockAttributes( state, clientId );\n\tif ( attributes === null ) {\n\t\treturn true;\n\t}\n\tif ( attributes.lock?.remove !== undefined ) {\n\t\treturn ! attributes.lock.remove;\n\t}\n\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\tif ( getTemplateLock( state, rootClientId ) ) {\n\t\treturn false;\n\t}\n\n\treturn getBlockEditingMode( state, rootClientId ) !== 'disabled';\n}\n\n/**\n * Determines if the given blocks are allowed to be removed.\n *\n * @param {Object} state Editor state.\n * @param {string} clientIds The block client IDs to be removed.\n *\n * @return {boolean} Whether the given blocks are allowed to be removed.\n */\nexport function canRemoveBlocks( state, clientIds ) {\n\treturn clientIds.every( ( clientId ) => canRemoveBlock( state, clientId ) );\n}\n\n/**\n * Determines if the given block is allowed to be moved.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId The block client Id.\n *\n * @return {boolean} Whether the given block is allowed to be moved.\n */\nexport function canMoveBlock( state, clientId ) {\n\tconst attributes = getBlockAttributes( state, clientId );\n\tif ( attributes === null ) {\n\t\treturn true;\n\t}\n\tif ( attributes.lock?.move !== undefined ) {\n\t\treturn ! attributes.lock.move;\n\t}\n\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\tif ( getTemplateLock( state, rootClientId ) === 'all' ) {\n\t\treturn false;\n\t}\n\treturn getBlockEditingMode( state, rootClientId ) !== 'disabled';\n}\n\n/**\n * Determines if the given blocks are allowed to be moved.\n *\n * @param {Object} state Editor state.\n * @param {string} clientIds The block client IDs to be moved.\n *\n * @return {boolean} Whether the given blocks are allowed to be moved.\n */\nexport function canMoveBlocks( state, clientIds ) {\n\treturn clientIds.every( ( clientId ) => canMoveBlock( state, clientId ) );\n}\n\n/**\n * Determines if the given block is allowed to be edited.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId The block client Id.\n *\n * @return {boolean} Whether the given block is allowed to be edited.\n */\nexport function canEditBlock( state, clientId ) {\n\tconst attributes = getBlockAttributes( state, clientId );\n\tif ( attributes === null ) {\n\t\treturn true;\n\t}\n\n\tconst { lock } = attributes;\n\n\t// When the edit is true, we cannot edit the block.\n\treturn ! lock?.edit;\n}\n\n/**\n * Determines if the given block type can be locked/unlocked by a user.\n *\n * @param {Object} state Editor state.\n * @param {(string|Object)} nameOrType Block name or type object.\n *\n * @return {boolean} Whether a given block type can be locked/unlocked.\n */\nexport function canLockBlockType( state, nameOrType ) {\n\tif ( ! hasBlockSupport( nameOrType, 'lock', true ) ) {\n\t\treturn false;\n\t}\n\n\t// Use block editor settings as the default value.\n\treturn !! state.settings?.canLockBlocks;\n}\n\n/**\n * Returns information about how recently and frequently a block has been inserted.\n *\n * @param {Object} state Global application state.\n * @param {string} id A string which identifies the insert, e.g. 'core/block/12'\n *\n * @return {?{ time: number, count: number }} An object containing `time` which is when the last\n * insert occurred as a UNIX epoch, and `count` which is\n * the number of inserts that have occurred.\n */\nfunction getInsertUsage( state, id ) {\n\treturn state.preferences.insertUsage?.[ id ] ?? null;\n}\n\n/**\n * Returns whether we can show a block type in the inserter\n *\n * @param {Object} state Global State\n * @param {Object} blockType BlockType\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given block type is allowed to be shown in the inserter.\n */\nconst canIncludeBlockTypeInInserter = ( state, blockType, rootClientId ) => {\n\tif ( ! hasBlockSupport( blockType, 'inserter', true ) ) {\n\t\treturn false;\n\t}\n\n\treturn canInsertBlockTypeUnmemoized( state, blockType.name, rootClientId );\n};\n\n/**\n * Return a function to be used to tranform a block variation to an inserter item\n *\n * @param {Object} state Global State\n * @param {Object} item Denormalized inserter item\n * @return {Function} Function to transform a block variation to inserter item\n */\nconst getItemFromVariation = ( state, item ) => ( variation ) => {\n\tconst variationId = `${ item.id }/${ variation.name }`;\n\tconst { time, count = 0 } = getInsertUsage( state, variationId ) || {};\n\treturn {\n\t\t...item,\n\t\tid: variationId,\n\t\ticon: variation.icon || item.icon,\n\t\ttitle: variation.title || item.title,\n\t\tdescription: variation.description || item.description,\n\t\tcategory: variation.category || item.category,\n\t\t// If `example` is explicitly undefined for the variation, the preview will not be shown.\n\t\texample: variation.hasOwnProperty( 'example' )\n\t\t\t? variation.example\n\t\t\t: item.example,\n\t\tinitialAttributes: {\n\t\t\t...item.initialAttributes,\n\t\t\t...variation.attributes,\n\t\t},\n\t\tinnerBlocks: variation.innerBlocks,\n\t\tkeywords: variation.keywords || item.keywords,\n\t\tfrecency: calculateFrecency( time, count ),\n\t};\n};\n\n/**\n * Returns the calculated frecency.\n *\n * 'frecency' is a heuristic (https://en.wikipedia.org/wiki/Frecency)\n * that combines block usage frequenty and recency.\n *\n * @param {number} time When the last insert occurred as a UNIX epoch\n * @param {number} count The number of inserts that have occurred.\n *\n * @return {number} The calculated frecency.\n */\nconst calculateFrecency = ( time, count ) => {\n\tif ( ! time ) {\n\t\treturn count;\n\t}\n\t// The selector is cached, which means Date.now() is the last time that the\n\t// relevant state changed. This suits our needs.\n\tconst duration = Date.now() - time;\n\tswitch ( true ) {\n\t\tcase duration < MILLISECONDS_PER_HOUR:\n\t\t\treturn count * 4;\n\t\tcase duration < MILLISECONDS_PER_DAY:\n\t\t\treturn count * 2;\n\t\tcase duration < MILLISECONDS_PER_WEEK:\n\t\t\treturn count / 2;\n\t\tdefault:\n\t\t\treturn count / 4;\n\t}\n};\n\n/**\n * Returns a function that accepts a block type and builds an item to be shown\n * in a specific context. It's used for building items for Inserter and available\n * block Transfroms list.\n *\n * @param {Object} state Editor state.\n * @param {Object} options Options object for handling the building of a block type.\n * @param {string} options.buildScope The scope for which the item is going to be used.\n * @return {Function} Function returns an item to be shown in a specific context (Inserter|Transforms list).\n */\nconst buildBlockTypeItem =\n\t( state, { buildScope = 'inserter' } ) =>\n\t( blockType ) => {\n\t\tconst id = blockType.name;\n\n\t\tlet isDisabled = false;\n\t\tif ( ! hasBlockSupport( blockType.name, 'multiple', true ) ) {\n\t\t\tisDisabled = getBlocksByClientId(\n\t\t\t\tstate,\n\t\t\t\tgetClientIdsWithDescendants( state )\n\t\t\t).some( ( { name } ) => name === blockType.name );\n\t\t}\n\n\t\tconst { time, count = 0 } = getInsertUsage( state, id ) || {};\n\t\tconst blockItemBase = {\n\t\t\tid,\n\t\t\tname: blockType.name,\n\t\t\ttitle: blockType.title,\n\t\t\ticon: blockType.icon,\n\t\t\tisDisabled,\n\t\t\tfrecency: calculateFrecency( time, count ),\n\t\t};\n\t\tif ( buildScope === 'transform' ) {\n\t\t\treturn blockItemBase;\n\t\t}\n\n\t\tconst inserterVariations = getBlockVariations(\n\t\t\tblockType.name,\n\t\t\t'inserter'\n\t\t);\n\t\treturn {\n\t\t\t...blockItemBase,\n\t\t\tinitialAttributes: {},\n\t\t\tdescription: blockType.description,\n\t\t\tcategory: blockType.category,\n\t\t\tkeywords: blockType.keywords,\n\t\t\tvariations: inserterVariations,\n\t\t\texample: blockType.example,\n\t\t\tutility: 1, // Deprecated.\n\t\t};\n\t};\n\n/**\n * Determines the items that appear in the inserter. Includes both static\n * items (e.g. a regular block type) and dynamic items (e.g. a reusable block).\n *\n * Each item object contains what's necessary to display a button in the\n * inserter and handle its selection.\n *\n * The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)\n * that combines block usage frequenty and recency.\n *\n * Items are returned ordered descendingly by their 'utility' and 'frecency'.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPEditorInserterItem[]} Items that appear in inserter.\n *\n * @typedef {Object} WPEditorInserterItem\n * @property {string} id Unique identifier for the item.\n * @property {string} name The type of block to create.\n * @property {Object} initialAttributes Attributes to pass to the newly created block.\n * @property {string} title Title of the item, as it appears in the inserter.\n * @property {string} icon Dashicon for the item, as it appears in the inserter.\n * @property {string} category Block category that the item is associated with.\n * @property {string[]} keywords Keywords that can be searched to find this item.\n * @property {boolean} isDisabled Whether or not the user should be prevented from inserting\n * this item.\n * @property {number} frecency Heuristic that combines frequency and recency.\n */\nexport const getInserterItems = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, rootClientId = null, options = EMPTY_OBJECT ) => {\n\t\t\tconst buildReusableBlockInserterItem = ( reusableBlock ) => {\n\t\t\t\tconst icon = ! reusableBlock.wp_pattern_sync_status\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tsrc: symbol,\n\t\t\t\t\t\t\tforeground: 'var(--wp-block-synced-color)',\n\t\t\t\t\t }\n\t\t\t\t\t: symbol;\n\t\t\t\tconst id = `core/block/${ reusableBlock.id }`;\n\t\t\t\tconst { time, count = 0 } = getInsertUsage( state, id ) || {};\n\t\t\t\tconst frecency = calculateFrecency( time, count );\n\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tname: 'core/block',\n\t\t\t\t\tinitialAttributes: { ref: reusableBlock.id },\n\t\t\t\t\ttitle: reusableBlock.title?.raw,\n\t\t\t\t\ticon,\n\t\t\t\t\tcategory: 'reusable',\n\t\t\t\t\tkeywords: [ 'reusable' ],\n\t\t\t\t\tisDisabled: false,\n\t\t\t\t\tutility: 1, // Deprecated.\n\t\t\t\t\tfrecency,\n\t\t\t\t\tcontent: reusableBlock.content?.raw,\n\t\t\t\t\tsyncStatus: reusableBlock.wp_pattern_sync_status,\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst syncedPatternInserterItems = canInsertBlockTypeUnmemoized(\n\t\t\t\tstate,\n\t\t\t\t'core/block',\n\t\t\t\trootClientId\n\t\t\t)\n\t\t\t\t? unlock( select( STORE_NAME ) )\n\t\t\t\t\t\t.getReusableBlocks()\n\t\t\t\t\t\t.map( buildReusableBlockInserterItem )\n\t\t\t\t: [];\n\n\t\t\tconst buildBlockTypeInserterItem = buildBlockTypeItem( state, {\n\t\t\t\tbuildScope: 'inserter',\n\t\t\t} );\n\n\t\t\tlet blockTypeInserterItems = getBlockTypes()\n\t\t\t\t.filter( ( blockType ) =>\n\t\t\t\t\thasBlockSupport( blockType, 'inserter', true )\n\t\t\t\t)\n\t\t\t\t.map( buildBlockTypeInserterItem );\n\n\t\t\tif ( options[ withRootClientIdOptionKey ] ) {\n\t\t\t\tblockTypeInserterItems = blockTypeInserterItems.reduce(\n\t\t\t\t\t( accumulator, item ) => {\n\t\t\t\t\t\titem.rootClientId = rootClientId ?? '';\n\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t! canInsertBlockTypeUnmemoized(\n\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\titem.name,\n\t\t\t\t\t\t\t\titem.rootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif ( ! item.rootClientId ) {\n\t\t\t\t\t\t\t\tlet sectionRootClientId;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tsectionRootClientId =\n\t\t\t\t\t\t\t\t\t\tgetSectionRootClientId( state );\n\t\t\t\t\t\t\t\t} catch ( e ) {}\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tsectionRootClientId &&\n\t\t\t\t\t\t\t\t\tcanInsertBlockTypeUnmemoized(\n\t\t\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\t\t\titem.name,\n\t\t\t\t\t\t\t\t\t\tsectionRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\titem.rootClientId = sectionRootClientId;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete item.rootClientId;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst parentClientId = getBlockRootClientId(\n\t\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\t\titem.rootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\titem.rootClientId = parentClientId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// We could also add non insertable items and gray them out.\n\t\t\t\t\t\tif ( item.hasOwnProperty( 'rootClientId' ) ) {\n\t\t\t\t\t\t\taccumulator.push( item );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t},\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tblockTypeInserterItems = blockTypeInserterItems.filter(\n\t\t\t\t\t( blockType ) =>\n\t\t\t\t\t\tcanIncludeBlockTypeInInserter(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tblockType,\n\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst items = blockTypeInserterItems.reduce(\n\t\t\t\t( accumulator, item ) => {\n\t\t\t\t\tconst { variations = [] } = item;\n\t\t\t\t\t// Exclude any block type item that is to be replaced by a default variation.\n\t\t\t\t\tif ( ! variations.some( ( { isDefault } ) => isDefault ) ) {\n\t\t\t\t\t\taccumulator.push( item );\n\t\t\t\t\t}\n\t\t\t\t\tif ( variations.length ) {\n\t\t\t\t\t\tconst variationMapper = getItemFromVariation(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\titem\n\t\t\t\t\t\t);\n\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\t...variations.map( variationMapper )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t[]\n\t\t\t);\n\n\t\t\t// Ensure core blocks are prioritized in the returned results,\n\t\t\t// because third party blocks can be registered earlier than\n\t\t\t// the core blocks (usually by using the `init` action),\n\t\t\t// thus affecting the display order.\n\t\t\t// We don't sort reusable blocks as they are handled differently.\n\t\t\tconst groupByType = ( blocks, block ) => {\n\t\t\t\tconst { core, noncore } = blocks;\n\t\t\t\tconst type = block.name.startsWith( 'core/' ) ? core : noncore;\n\n\t\t\t\ttype.push( block );\n\t\t\t\treturn blocks;\n\t\t\t};\n\t\t\tconst { core: coreItems, noncore: nonCoreItems } = items.reduce(\n\t\t\t\tgroupByType,\n\t\t\t\t{ core: [], noncore: [] }\n\t\t\t);\n\t\t\tconst sortedBlockTypes = [ ...coreItems, ...nonCoreItems ];\n\t\t\treturn [ ...sortedBlockTypes, ...syncedPatternInserterItems ];\n\t\t},\n\t\t( state, rootClientId ) => [\n\t\t\tgetBlockTypes(),\n\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t\t\tstate.blocks.order,\n\t\t\tstate.preferences.insertUsage,\n\t\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t\t]\n\t)\n);\n\n/**\n * Determines the items that appear in the available block transforms list.\n *\n * Each item object contains what's necessary to display a menu item in the\n * transform list and handle its selection.\n *\n * The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)\n * that combines block usage frequenty and recency.\n *\n * Items are returned ordered descendingly by their 'frecency'.\n *\n * @param {Object} state Editor state.\n * @param {Object|Object[]} blocks Block object or array objects.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPEditorTransformItem[]} Items that appear in inserter.\n *\n * @typedef {Object} WPEditorTransformItem\n * @property {string} id Unique identifier for the item.\n * @property {string} name The type of block to create.\n * @property {string} title Title of the item, as it appears in the inserter.\n * @property {string} icon Dashicon for the item, as it appears in the inserter.\n * @property {boolean} isDisabled Whether or not the user should be prevented from inserting\n * this item.\n * @property {number} frecency Heuristic that combines frequency and recency.\n */\nexport const getBlockTransformItems = createSelector(\n\t( state, blocks, rootClientId = null ) => {\n\t\tconst normalizedBlocks = Array.isArray( blocks ) ? blocks : [ blocks ];\n\t\tconst buildBlockTypeTransformItem = buildBlockTypeItem( state, {\n\t\t\tbuildScope: 'transform',\n\t\t} );\n\t\tconst blockTypeTransformItems = getBlockTypes()\n\t\t\t.filter( ( blockType ) =>\n\t\t\t\tcanIncludeBlockTypeInInserter( state, blockType, rootClientId )\n\t\t\t)\n\t\t\t.map( buildBlockTypeTransformItem );\n\n\t\tconst itemsByName = Object.fromEntries(\n\t\t\tObject.entries( blockTypeTransformItems ).map( ( [ , value ] ) => [\n\t\t\t\tvalue.name,\n\t\t\t\tvalue,\n\t\t\t] )\n\t\t);\n\n\t\tconst possibleTransforms = getPossibleBlockTransformations(\n\t\t\tnormalizedBlocks\n\t\t).reduce( ( accumulator, block ) => {\n\t\t\tif ( itemsByName[ block?.name ] ) {\n\t\t\t\taccumulator.push( itemsByName[ block.name ] );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\treturn orderBy(\n\t\t\tpossibleTransforms,\n\t\t\t( block ) => itemsByName[ block.name ].frecency,\n\t\t\t'desc'\n\t\t);\n\t},\n\t( state, blocks, rootClientId ) => [\n\t\tgetBlockTypes(),\n\t\tstate.preferences.insertUsage,\n\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t]\n);\n\n/**\n * Determines whether there are items to show in the inserter.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Items that appear in inserter.\n */\nexport const hasInserterItems = createRegistrySelector(\n\t( select ) =>\n\t\t( state, rootClientId = null ) => {\n\t\t\tconst hasBlockType = getBlockTypes().some( ( blockType ) =>\n\t\t\t\tcanIncludeBlockTypeInInserter( state, blockType, rootClientId )\n\t\t\t);\n\t\t\tif ( hasBlockType ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst hasReusableBlock =\n\t\t\t\tcanInsertBlockTypeUnmemoized(\n\t\t\t\t\tstate,\n\t\t\t\t\t'core/block',\n\t\t\t\t\trootClientId\n\t\t\t\t) &&\n\t\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks().length > 0;\n\n\t\t\treturn hasReusableBlock;\n\t\t}\n);\n\n/**\n * Returns the list of allowed inserter blocks for inner blocks children.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Array?} The list of allowed block types.\n */\nexport const getAllowedBlocks = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, rootClientId = null ) => {\n\t\t\tif ( ! rootClientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst blockTypes = getBlockTypes().filter( ( blockType ) =>\n\t\t\t\tcanIncludeBlockTypeInInserter( state, blockType, rootClientId )\n\t\t\t);\n\n\t\t\tconst hasReusableBlock =\n\t\t\t\tcanInsertBlockTypeUnmemoized(\n\t\t\t\t\tstate,\n\t\t\t\t\t'core/block',\n\t\t\t\t\trootClientId\n\t\t\t\t) &&\n\t\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks().length > 0;\n\n\t\t\tif ( hasReusableBlock ) {\n\t\t\t\tblockTypes.push( 'core/block' );\n\t\t\t}\n\n\t\t\treturn blockTypes;\n\t\t},\n\t\t( state, rootClientId ) => [\n\t\t\tgetBlockTypes(),\n\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t\t]\n\t)\n);\n\nexport const __experimentalGetAllowedBlocks = createSelector(\n\t( state, rootClientId = null ) => {\n\t\tdeprecated(\n\t\t\t'wp.data.select( \"core/block-editor\" ).__experimentalGetAllowedBlocks',\n\t\t\t{\n\t\t\t\talternative:\n\t\t\t\t\t'wp.data.select( \"core/block-editor\" ).getAllowedBlocks',\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t}\n\t\t);\n\t\treturn getAllowedBlocks( state, rootClientId );\n\t},\n\t( state, rootClientId ) =>\n\t\tgetAllowedBlocks.getDependants( state, rootClientId )\n);\n\n/**\n * Returns the block to be directly inserted by the block appender.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPDirectInsertBlock|undefined} The block type to be directly inserted.\n *\n * @typedef {Object} WPDirectInsertBlock\n * @property {string} name The type of block.\n * @property {?Object} attributes Attributes to pass to the newly created block.\n * @property {?Array} attributesToCopy Attributes to be copied from adjecent blocks when inserted.\n */\nexport function getDirectInsertBlock( state, rootClientId = null ) {\n\tif ( ! rootClientId ) {\n\t\treturn;\n\t}\n\tconst { defaultBlock, directInsert } =\n\t\tstate.blockListSettings[ rootClientId ] ?? {};\n\tif ( ! defaultBlock || ! directInsert ) {\n\t\treturn;\n\t}\n\n\treturn defaultBlock;\n}\n\nexport function __experimentalGetDirectInsertBlock(\n\tstate,\n\trootClientId = null\n) {\n\tdeprecated(\n\t\t'wp.data.select( \"core/block-editor\" ).__experimentalGetDirectInsertBlock',\n\t\t{\n\t\t\talternative:\n\t\t\t\t'wp.data.select( \"core/block-editor\" ).getDirectInsertBlock',\n\t\t\tsince: '6.3',\n\t\t\tversion: '6.4',\n\t\t}\n\t);\n\treturn getDirectInsertBlock( state, rootClientId );\n}\n\nexport const __experimentalGetParsedPattern = createRegistrySelector(\n\t( select ) => ( state, patternName ) => {\n\t\tconst pattern = unlock( select( STORE_NAME ) ).getPatternBySlug(\n\t\t\tpatternName\n\t\t);\n\t\treturn pattern ? getParsedPattern( pattern ) : null;\n\t}\n);\n\nconst getAllowedPatternsDependants = ( select ) => ( state, rootClientId ) => [\n\t...getAllPatternsDependants( select )( state ),\n\t...getInsertBlockTypeDependants( state, rootClientId ),\n];\n\n/**\n * Returns the list of allowed patterns for inner blocks children.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional target root client ID.\n *\n * @return {Array?} The list of allowed patterns.\n */\nexport const __experimentalGetAllowedPatterns = createRegistrySelector(\n\t( select ) => {\n\t\treturn createSelector( ( state, rootClientId = null ) => {\n\t\t\tconst { getAllPatterns } = unlock( select( STORE_NAME ) );\n\t\t\tconst patterns = getAllPatterns();\n\t\t\tconst { allowedBlockTypes } = getSettings( state );\n\t\t\tconst parsedPatterns = patterns\n\t\t\t\t.filter( ( { inserter = true } ) => !! inserter )\n\t\t\t\t.map( ( pattern ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\tget blocks() {\n\t\t\t\t\t\t\treturn getParsedPattern( pattern ).blocks;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\tconst availableParsedPatterns = parsedPatterns.filter(\n\t\t\t\t( pattern ) =>\n\t\t\t\t\tcheckAllowListRecursive(\n\t\t\t\t\t\tgetGrammar( pattern ),\n\t\t\t\t\t\tallowedBlockTypes\n\t\t\t\t\t)\n\t\t\t);\n\t\t\tconst patternsAllowed = availableParsedPatterns.filter(\n\t\t\t\t( pattern ) =>\n\t\t\t\t\tgetGrammar( pattern ).every( ( { blockName: name } ) =>\n\t\t\t\t\t\tcanInsertBlockType( state, name, rootClientId )\n\t\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn patternsAllowed;\n\t\t}, getAllowedPatternsDependants( select ) );\n\t}\n);\n\n/**\n * Returns the list of patterns based on their declared `blockTypes`\n * and a block's name.\n * Patterns can use `blockTypes` to integrate in work flows like\n * suggesting appropriate patterns in a Placeholder state(during insertion)\n * or blocks transformations.\n *\n * @param {Object} state Editor state.\n * @param {string|string[]} blockNames Block's name or array of block names to find matching pattens.\n * @param {?string} rootClientId Optional target root client ID.\n *\n * @return {Array} The list of matched block patterns based on declared `blockTypes` and block name.\n */\nexport const getPatternsByBlockTypes = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, blockNames, rootClientId = null ) => {\n\t\t\tif ( ! blockNames ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\tconst patterns =\n\t\t\t\tselect( STORE_NAME ).__experimentalGetAllowedPatterns(\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\tconst normalizedBlockNames = Array.isArray( blockNames )\n\t\t\t\t? blockNames\n\t\t\t\t: [ blockNames ];\n\t\t\tconst filteredPatterns = patterns.filter( ( pattern ) =>\n\t\t\t\tpattern?.blockTypes?.some?.( ( blockName ) =>\n\t\t\t\t\tnormalizedBlockNames.includes( blockName )\n\t\t\t\t)\n\t\t\t);\n\t\t\tif ( filteredPatterns.length === 0 ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\treturn filteredPatterns;\n\t\t},\n\t\t( state, blockNames, rootClientId ) =>\n\t\t\tgetAllowedPatternsDependants( select )( state, rootClientId )\n\t)\n);\n\nexport const __experimentalGetPatternsByBlockTypes = createRegistrySelector(\n\t( select ) => {\n\t\tdeprecated(\n\t\t\t'wp.data.select( \"core/block-editor\" ).__experimentalGetPatternsByBlockTypes',\n\t\t\t{\n\t\t\t\talternative:\n\t\t\t\t\t'wp.data.select( \"core/block-editor\" ).getPatternsByBlockTypes',\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t}\n\t\t);\n\t\treturn select( STORE_NAME ).getPatternsByBlockTypes;\n\t}\n);\n\n/**\n * Determines the items that appear in the available pattern transforms list.\n *\n * For now we only handle blocks without InnerBlocks and take into account\n * the `__experimentalRole` property of blocks' attributes for the transformation.\n *\n * We return the first set of possible eligible block patterns,\n * by checking the `blockTypes` property. We still have to recurse through\n * block pattern's blocks and try to find matches from the selected blocks.\n * Now this happens in the consumer to avoid heavy operations in the selector.\n *\n * @param {Object} state Editor state.\n * @param {Object[]} blocks The selected blocks.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPBlockPattern[]} Items that are eligible for a pattern transformation.\n */\nexport const __experimentalGetPatternTransformItems = createRegistrySelector(\n\t( select ) =>\n\t\tcreateSelector(\n\t\t\t( state, blocks, rootClientId = null ) => {\n\t\t\t\tif ( ! blocks ) {\n\t\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * For now we only handle blocks without InnerBlocks and take into account\n\t\t\t\t * the `__experimentalRole` property of blocks' attributes for the transformation.\n\t\t\t\t * Note that the blocks have been retrieved through `getBlock`, which doesn't\n\t\t\t\t * return the inner blocks of an inner block controller, so we still need\n\t\t\t\t * to check for this case too.\n\t\t\t\t */\n\t\t\t\tif (\n\t\t\t\t\tblocks.some(\n\t\t\t\t\t\t( { clientId, innerBlocks } ) =>\n\t\t\t\t\t\t\tinnerBlocks.length ||\n\t\t\t\t\t\t\tareInnerBlocksControlled( state, clientId )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t\t}\n\n\t\t\t\t// Create a Set of the selected block names that is used in patterns filtering.\n\t\t\t\tconst selectedBlockNames = Array.from(\n\t\t\t\t\tnew Set( blocks.map( ( { name } ) => name ) )\n\t\t\t\t);\n\t\t\t\t/**\n\t\t\t\t * Here we will return first set of possible eligible block patterns,\n\t\t\t\t * by checking the `blockTypes` property. We still have to recurse through\n\t\t\t\t * block pattern's blocks and try to find matches from the selected blocks.\n\t\t\t\t * Now this happens in the consumer to avoid heavy operations in the selector.\n\t\t\t\t */\n\t\t\t\treturn select( STORE_NAME ).getPatternsByBlockTypes(\n\t\t\t\t\tselectedBlockNames,\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\t},\n\t\t\t( state, blocks, rootClientId ) =>\n\t\t\t\tgetAllowedPatternsDependants( select )( state, rootClientId )\n\t\t)\n);\n\n/**\n * Returns the Block List settings of a block, if any exist.\n *\n * @param {Object} state Editor state.\n * @param {?string} clientId Block client ID.\n *\n * @return {?Object} Block settings of the block if set.\n */\nexport function getBlockListSettings( state, clientId ) {\n\treturn state.blockListSettings[ clientId ];\n}\n\n/**\n * Returns the editor settings.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} The editor settings object.\n */\nexport function getSettings( state ) {\n\treturn state.settings;\n}\n\n/**\n * Returns true if the most recent block change is be considered persistent, or\n * false otherwise. A persistent change is one committed by BlockEditorProvider\n * via its `onChange` callback, in addition to `onInput`.\n *\n * @param {Object} state Block editor state.\n *\n * @return {boolean} Whether the most recent block change was persistent.\n */\nexport function isLastBlockChangePersistent( state ) {\n\treturn state.blocks.isPersistentChange;\n}\n\n/**\n * Returns the block list settings for an array of blocks, if any exist.\n *\n * @param {Object} state Editor state.\n * @param {Array} clientIds Block client IDs.\n *\n * @return {Object} An object where the keys are client ids and the values are\n * a block list setting object.\n */\nexport const __experimentalGetBlockListSettingsForBlocks = createSelector(\n\t( state, clientIds = [] ) => {\n\t\treturn clientIds.reduce( ( blockListSettingsForBlocks, clientId ) => {\n\t\t\tif ( ! state.blockListSettings[ clientId ] ) {\n\t\t\t\treturn blockListSettingsForBlocks;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...blockListSettingsForBlocks,\n\t\t\t\t[ clientId ]: state.blockListSettings[ clientId ],\n\t\t\t};\n\t\t}, {} );\n\t},\n\t( state ) => [ state.blockListSettings ]\n);\n\n/**\n * Returns the title of a given reusable block\n *\n * @param {Object} state Global application state.\n * @param {number|string} ref The shared block's ID.\n *\n * @return {string} The reusable block saved title.\n */\nexport const __experimentalGetReusableBlockTitle = createRegistrySelector(\n\t( select ) =>\n\t\tcreateSelector(\n\t\t\t( state, ref ) => {\n\t\t\t\tdeprecated(\n\t\t\t\t\t\"wp.data.select( 'core/block-editor' ).__experimentalGetReusableBlockTitle\",\n\t\t\t\t\t{\n\t\t\t\t\t\tsince: '6.6',\n\t\t\t\t\t\tversion: '6.8',\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst reusableBlock = unlock( select( STORE_NAME ) )\n\t\t\t\t\t.getReusableBlocks()\n\t\t\t\t\t.find( ( block ) => block.id === ref );\n\t\t\t\tif ( ! reusableBlock ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn reusableBlock.title?.raw;\n\t\t\t},\n\t\t\t() => [ unlock( select( STORE_NAME ) ).getReusableBlocks() ]\n\t\t)\n);\n\n/**\n * Returns true if the most recent block change is be considered ignored, or\n * false otherwise. An ignored change is one not to be committed by\n * BlockEditorProvider, neither via `onChange` nor `onInput`.\n *\n * @param {Object} state Block editor state.\n *\n * @return {boolean} Whether the most recent block change was ignored.\n */\nexport function __unstableIsLastBlockChangeIgnored( state ) {\n\t// TODO: Removal Plan: Changes incurred by RECEIVE_BLOCKS should not be\n\t// ignored if in-fact they result in a change in blocks state. The current\n\t// need to ignore changes not a result of user interaction should be\n\t// accounted for in the refactoring of reusable blocks as occurring within\n\t// their own separate block editor / state (#7119).\n\treturn state.blocks.isIgnoredChange;\n}\n\n/**\n * Returns the block attributes changed as a result of the last dispatched\n * action.\n *\n * @param {Object} state Block editor state.\n *\n * @return {Object} Subsets of block attributes changed, keyed\n * by block client ID.\n */\nexport function __experimentalGetLastBlockAttributeChanges( state ) {\n\treturn state.lastBlockAttributesChange;\n}\n\n/**\n * Returns whether the navigation mode is enabled.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Is navigation mode enabled.\n */\nexport function isNavigationMode( state ) {\n\treturn state.editorMode === 'navigation';\n}\n\n/**\n * Returns the current editor mode.\n *\n * @param {Object} state Editor state.\n *\n * @return {string} the editor mode.\n */\nexport function __unstableGetEditorMode( state ) {\n\treturn state.editorMode;\n}\n\n/**\n * Returns whether block moving mode is enabled.\n *\n * @param {Object} state Editor state.\n *\n * @return {string} Client Id of moving block.\n */\nexport function hasBlockMovingClientId( state ) {\n\treturn state.hasBlockMovingClientId;\n}\n\n/**\n * Returns true if the last change was an automatic change, false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the last change was automatic.\n */\nexport function didAutomaticChange( state ) {\n\treturn !! state.automaticChangeStatus;\n}\n\n/**\n * Returns true if the current highlighted block matches the block clientId.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block to check.\n *\n * @return {boolean} Whether the block is currently highlighted.\n */\nexport function isBlockHighlighted( state, clientId ) {\n\treturn state.highlightedBlock === clientId;\n}\n\n/**\n * Checks if a given block has controlled inner blocks.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block to check.\n *\n * @return {boolean} True if the block has controlled inner blocks.\n */\nexport function areInnerBlocksControlled( state, clientId ) {\n\treturn !! state.blocks.controlledInnerBlocks[ clientId ];\n}\n\n/**\n * Returns the clientId for the first 'active' block of a given array of block names.\n * A block is 'active' if it (or a child) is the selected block.\n * Returns the first match moving up the DOM from the selected block.\n *\n * @param {Object} state Global application state.\n * @param {string[]} validBlocksNames The names of block types to check for.\n *\n * @return {string} The matching block's clientId.\n */\nexport const __experimentalGetActiveBlockIdByBlockNames = createSelector(\n\t( state, validBlockNames ) => {\n\t\tif ( ! validBlockNames.length ) {\n\t\t\treturn null;\n\t\t}\n\t\t// Check if selected block is a valid entity area.\n\t\tconst selectedBlockClientId = getSelectedBlockClientId( state );\n\t\tif (\n\t\t\tvalidBlockNames.includes(\n\t\t\t\tgetBlockName( state, selectedBlockClientId )\n\t\t\t)\n\t\t) {\n\t\t\treturn selectedBlockClientId;\n\t\t}\n\t\t// Check if first selected block is a child of a valid entity area.\n\t\tconst multiSelectedBlockClientIds =\n\t\t\tgetMultiSelectedBlockClientIds( state );\n\t\tconst entityAreaParents = getBlockParentsByBlockName(\n\t\t\tstate,\n\t\t\tselectedBlockClientId || multiSelectedBlockClientIds[ 0 ],\n\t\t\tvalidBlockNames\n\t\t);\n\t\tif ( entityAreaParents ) {\n\t\t\t// Last parent closest/most interior.\n\t\t\treturn entityAreaParents[ entityAreaParents.length - 1 ];\n\t\t}\n\t\treturn null;\n\t},\n\t( state, validBlockNames ) => [\n\t\tstate.selection.selectionStart.clientId,\n\t\tstate.selection.selectionEnd.clientId,\n\t\tvalidBlockNames,\n\t]\n);\n\n/**\n * Tells if the block with the passed clientId was just inserted.\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n * @param {?string} source Optional insertion source of the block.\n * @return {boolean} True if the block matches the last block inserted from the specified source.\n */\nexport function wasBlockJustInserted( state, clientId, source ) {\n\tconst { lastBlockInserted } = state;\n\treturn (\n\t\tlastBlockInserted.clientIds?.includes( clientId ) &&\n\t\tlastBlockInserted.source === source\n\t);\n}\n\n/**\n * Tells if the block is visible on the canvas or not.\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n * @return {boolean} True if the block is visible.\n */\nexport function isBlockVisible( state, clientId ) {\n\treturn state.blockVisibility?.[ clientId ] ?? true;\n}\n\n/**\n * Returns the currently hovered block.\n *\n * @param {Object} state Global application state.\n * @return {Object} Client Id of the hovered block.\n */\nexport function getHoveredBlockClientId( state ) {\n\treturn state.hoveredBlockClientId;\n}\n\n/**\n * Returns the list of all hidden blocks.\n *\n * @param {Object} state Global application state.\n * @return {[string]} List of hidden blocks.\n */\nexport const __unstableGetVisibleBlocks = createSelector(\n\t( state ) => {\n\t\tconst visibleBlocks = new Set(\n\t\t\tObject.keys( state.blockVisibility ).filter(\n\t\t\t\t( key ) => state.blockVisibility[ key ]\n\t\t\t)\n\t\t);\n\t\tif ( visibleBlocks.size === 0 ) {\n\t\t\treturn EMPTY_SET;\n\t\t}\n\t\treturn visibleBlocks;\n\t},\n\t( state ) => [ state.blockVisibility ]\n);\n\nexport function __unstableHasActiveBlockOverlayActive( state, clientId ) {\n\t// Prevent overlay on blocks with a non-default editing mode. If the mdoe is\n\t// 'disabled' then the overlay is redundant since the block can't be\n\t// selected. If the mode is 'contentOnly' then the overlay is redundant\n\t// since there will be no controls to interact with once selected.\n\tif ( getBlockEditingMode( state, clientId ) !== 'default' ) {\n\t\treturn false;\n\t}\n\n\t// If the block editing is locked, the block overlay is always active.\n\tif ( ! canEditBlock( state, clientId ) ) {\n\t\treturn true;\n\t}\n\n\tconst editorMode = __unstableGetEditorMode( state );\n\n\t// In zoom-out mode, the block overlay is always active for section level blocks.\n\tif ( editorMode === 'zoom-out' ) {\n\t\tconst sectionRootClientId = getSectionRootClientId( state );\n\t\tif ( sectionRootClientId ) {\n\t\t\tconst sectionClientIds = getBlockOrder(\n\t\t\t\tstate,\n\t\t\t\tsectionRootClientId\n\t\t\t);\n\t\t\tif ( sectionClientIds?.includes( clientId ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if ( clientId && ! getBlockRootClientId( state, clientId ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// In navigation mode, the block overlay is active when the block is not\n\t// selected (and doesn't contain a selected child). The same behavior is\n\t// also enabled in all modes for blocks that have controlled children\n\t// (reusable block, template part, navigation), unless explicitly disabled\n\t// with `supports.__experimentalDisableBlockOverlay`.\n\tconst blockSupportDisable = hasBlockSupport(\n\t\tgetBlockName( state, clientId ),\n\t\t'__experimentalDisableBlockOverlay',\n\t\tfalse\n\t);\n\tconst shouldEnableIfUnselected =\n\t\teditorMode === 'navigation' ||\n\t\t( blockSupportDisable\n\t\t\t? false\n\t\t\t: areInnerBlocksControlled( state, clientId ) );\n\n\treturn (\n\t\tshouldEnableIfUnselected &&\n\t\t! isBlockSelected( state, clientId ) &&\n\t\t! hasSelectedInnerBlock( state, clientId, true )\n\t);\n}\n\nexport function __unstableIsWithinBlockOverlay( state, clientId ) {\n\tlet parent = state.blocks.parents.get( clientId );\n\twhile ( !! parent ) {\n\t\tif ( __unstableHasActiveBlockOverlayActive( state, parent ) ) {\n\t\t\treturn true;\n\t\t}\n\t\tparent = state.blocks.parents.get( parent );\n\t}\n\treturn false;\n}\n\n/**\n * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode\n */\n\n/**\n * Returns the block editing mode for a given block.\n *\n * The mode can be one of three options:\n *\n * - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be\n * selected.\n * - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the\n * toolbar, the block movers, block settings.\n * - `'default'`: Allows editing the block as normal.\n *\n * Blocks can set a mode using the `useBlockEditingMode` hook.\n *\n * The mode is inherited by all of the block's inner blocks, unless they have\n * their own mode.\n *\n * A template lock can also set a mode. If the template lock is `'contentOnly'`,\n * the block's mode is overridden to `'contentOnly'` if the block has a content\n * role attribute, or `'disabled'` otherwise.\n *\n * @see useBlockEditingMode\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID, or `''` for the root container.\n *\n * @return {BlockEditingMode} The block editing mode. One of `'disabled'`,\n * `'contentOnly'`, or `'default'`.\n */\nexport const getBlockEditingMode = createRegistrySelector(\n\t( select ) =>\n\t\t( state, clientId = '' ) => {\n\t\t\t// Some selectors that call this provide `null` as the default\n\t\t\t// rootClientId, but the default rootClientId is actually `''`.\n\t\t\tif ( clientId === null ) {\n\t\t\t\tclientId = '';\n\t\t\t}\n\n\t\t\t// In zoom-out mode, override the behavior set by\n\t\t\t// __unstableSetBlockEditingMode to only allow editing the top-level\n\t\t\t// sections.\n\t\t\tconst editorMode = __unstableGetEditorMode( state );\n\t\t\tif ( editorMode === 'zoom-out' ) {\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId( state );\n\n\t\t\t\tif ( clientId === '' /* ROOT_CONTAINER_CLIENT_ID */ ) {\n\t\t\t\t\treturn sectionRootClientId ? 'disabled' : 'contentOnly';\n\t\t\t\t}\n\t\t\t\tif ( clientId === sectionRootClientId ) {\n\t\t\t\t\treturn 'contentOnly';\n\t\t\t\t}\n\t\t\t\tconst sectionsClientIds = getBlockOrder(\n\t\t\t\t\tstate,\n\t\t\t\t\tsectionRootClientId\n\t\t\t\t);\n\n\t\t\t\t// Sections are always contentOnly.\n\t\t\t\tif ( sectionsClientIds?.includes( clientId ) ) {\n\t\t\t\t\treturn 'contentOnly';\n\t\t\t\t}\n\n\t\t\t\treturn 'disabled';\n\t\t\t}\n\n\t\t\tconst blockEditingMode = state.blockEditingModes.get( clientId );\n\t\t\tif ( blockEditingMode ) {\n\t\t\t\treturn blockEditingMode;\n\t\t\t}\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn 'default';\n\t\t\t}\n\t\t\tconst rootClientId = getBlockRootClientId( state, clientId );\n\t\t\tconst templateLock = getTemplateLock( state, rootClientId );\n\t\t\tif ( templateLock === 'contentOnly' ) {\n\t\t\t\tconst name = getBlockName( state, clientId );\n\t\t\t\tconst isContent =\n\t\t\t\t\tselect( blocksStore ).__experimentalHasContentRoleAttribute(\n\t\t\t\t\t\tname\n\t\t\t\t\t);\n\t\t\t\treturn isContent ? 'contentOnly' : 'disabled';\n\t\t\t}\n\t\t\tconst parentMode = getBlockEditingMode( state, rootClientId );\n\t\t\treturn parentMode === 'contentOnly' ? 'default' : parentMode;\n\t\t}\n);\n\n/**\n * Indicates if a block is ungroupable.\n * A block is ungroupable if it is a single grouping block with inner blocks.\n * If a block has an `ungroup` transform, it is also ungroupable, without the\n * requirement of being the default grouping block.\n * Additionally a block can only be ungrouped if it has inner blocks and can\n * be removed.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId Client Id of the block. If not passed the selected block's client id will be used.\n * @return {boolean} True if the block is ungroupable.\n */\nexport const isUngroupable = createRegistrySelector(\n\t( select ) =>\n\t\t( state, clientId = '' ) => {\n\t\t\tconst _clientId = clientId || getSelectedBlockClientId( state );\n\t\t\tif ( ! _clientId ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst { getGroupingBlockName } = select( blocksStore );\n\t\t\tconst block = getBlock( state, _clientId );\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\tconst _isUngroupable =\n\t\t\t\tblock &&\n\t\t\t\t( block.name === groupingBlockName ||\n\t\t\t\t\tgetBlockType( block.name )?.transforms?.ungroup ) &&\n\t\t\t\t!! block.innerBlocks.length;\n\n\t\t\treturn _isUngroupable && canRemoveBlock( state, _clientId );\n\t\t}\n);\n\n/**\n * Indicates if the provided blocks(by client ids) are groupable.\n * We need to have at least one block, have a grouping block name set and\n * be able to remove these blocks.\n *\n * @param {Object} state Global application state.\n * @param {string[]} clientIds Block client ids. If not passed the selected blocks client ids will be used.\n * @return {boolean} True if the blocks are groupable.\n */\nexport const isGroupable = createRegistrySelector(\n\t( select ) =>\n\t\t( state, clientIds = EMPTY_ARRAY ) => {\n\t\t\tconst { getGroupingBlockName } = select( blocksStore );\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\tconst _clientIds = clientIds?.length\n\t\t\t\t? clientIds\n\t\t\t\t: getSelectedBlockClientIds( state );\n\t\t\tconst rootClientId = _clientIds?.length\n\t\t\t\t? getBlockRootClientId( state, _clientIds[ 0 ] )\n\t\t\t\t: undefined;\n\t\t\tconst groupingBlockAvailable = canInsertBlockType(\n\t\t\t\tstate,\n\t\t\t\tgroupingBlockName,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tconst _isGroupable = groupingBlockAvailable && _clientIds.length;\n\t\t\treturn _isGroupable && canRemoveBlocks( state, _clientIds );\n\t\t}\n);\n\n/**\n * DO-NOT-USE in production.\n * This selector is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n *\n * @return {?string} Client ID of the ancestor block that is content locking the block.\n */\nexport const __unstableGetContentLockingParent = ( state, clientId ) => {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetContentLockingParent\",\n\t\t{\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.7',\n\t\t}\n\t);\n\treturn getContentLockingParent( state, clientId );\n};\n\n/**\n * DO-NOT-USE in production.\n * This selector is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n */\nexport function __unstableGetTemporarilyEditingAsBlocks( state ) {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetTemporarilyEditingAsBlocks\",\n\t\t{\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.7',\n\t\t}\n\t);\n\treturn getTemporarilyEditingAsBlocks( state );\n}\n\n/**\n * DO-NOT-USE in production.\n * This selector is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n */\nexport function __unstableGetTemporarilyEditingFocusModeToRevert( state ) {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetTemporarilyEditingFocusModeToRevert\",\n\t\t{\n\t\t\tsince: '6.5',\n\t\t\tversion: '6.7',\n\t\t}\n\t);\n\treturn getTemporarilyEditingFocusModeToRevert( state );\n}\n","/**\n * WordPress dependencies\n */\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from './index';\nimport { unlock } from '../lock-unlock';\n\nconst castArray = ( maybeArray ) =>\n\tArray.isArray( maybeArray ) ? maybeArray : [ maybeArray ];\n\n/**\n * A list of private/experimental block editor settings that\n * should not become a part of the WordPress public API.\n * BlockEditorProvider will remove these settings from the\n * settings object it receives.\n *\n * @see https://github.com/WordPress/gutenberg/pull/46131\n */\nconst privateSettings = [\n\t'inserterMediaCategories',\n\t'blockInspectorAnimation',\n];\n\n/**\n * Action that updates the block editor settings and\n * conditionally preserves the experimental ones.\n *\n * @param {Object} settings Updated settings\n * @param {Object} options Options object.\n * @param {boolean} options.stripExperimentalSettings Whether to strip experimental settings.\n * @param {boolean} options.reset Whether to reset the settings.\n * @return {Object} Action object\n */\nexport function __experimentalUpdateSettings(\n\tsettings,\n\t{ stripExperimentalSettings = false, reset = false } = {}\n) {\n\tlet cleanSettings = settings;\n\t// There are no plugins in the mobile apps, so there is no\n\t// need to strip the experimental settings:\n\tif ( stripExperimentalSettings && Platform.OS === 'web' ) {\n\t\tcleanSettings = {};\n\t\tfor ( const key in settings ) {\n\t\t\tif ( ! privateSettings.includes( key ) ) {\n\t\t\t\tcleanSettings[ key ] = settings[ key ];\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\ttype: 'UPDATE_SETTINGS',\n\t\tsettings: cleanSettings,\n\t\treset,\n\t};\n}\n\n/**\n * Hides the block interface (eg. toolbar, outline, etc.)\n *\n * @return {Object} Action object.\n */\nexport function hideBlockInterface() {\n\treturn {\n\t\ttype: 'HIDE_BLOCK_INTERFACE',\n\t};\n}\n\n/**\n * Shows the block interface (eg. toolbar, outline, etc.)\n *\n * @return {Object} Action object.\n */\nexport function showBlockInterface() {\n\treturn {\n\t\ttype: 'SHOW_BLOCK_INTERFACE',\n\t};\n}\n\n/**\n * Yields action objects used in signalling that the blocks corresponding to\n * the set of specified client IDs are to be removed.\n *\n * Compared to `removeBlocks`, this private interface exposes an additional\n * parameter; see `forceRemove`.\n *\n * @param {string|string[]} clientIds Client IDs of blocks to remove.\n * @param {boolean} selectPrevious True if the previous block\n * or the immediate parent\n * (if no previous block exists)\n * should be selected\n * when a block is removed.\n * @param {boolean} forceRemove Whether to force the operation,\n * bypassing any checks for certain\n * block types.\n */\nexport const privateRemoveBlocks =\n\t( clientIds, selectPrevious = true, forceRemove = false ) =>\n\t( { select, dispatch, registry } ) => {\n\t\tif ( ! clientIds || ! clientIds.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclientIds = castArray( clientIds );\n\t\tconst canRemoveBlocks = select.canRemoveBlocks( clientIds );\n\n\t\tif ( ! canRemoveBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// In certain editing contexts, we'd like to prevent accidental removal\n\t\t// of important blocks. For example, in the site editor, the Query Loop\n\t\t// block is deemed important. In such cases, we'll ask the user for\n\t\t// confirmation that they intended to remove such block(s). However,\n\t\t// the editor instance is responsible for presenting those confirmation\n\t\t// prompts to the user. Any instance opting into removal prompts must\n\t\t// register using `setBlockRemovalRules()`.\n\t\t//\n\t\t// @see https://github.com/WordPress/gutenberg/pull/51145\n\t\tconst rules = ! forceRemove && select.getBlockRemovalRules();\n\n\t\tif ( rules ) {\n\t\t\tfunction flattenBlocks( blocks ) {\n\t\t\t\tconst result = [];\n\t\t\t\tconst stack = [ ...blocks ];\n\t\t\t\twhile ( stack.length ) {\n\t\t\t\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\t\t\t\tstack.push( ...innerBlocks );\n\t\t\t\t\tresult.push( block );\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tconst blockList = clientIds.map( select.getBlock );\n\t\t\tconst flattenedBlocks = flattenBlocks( blockList );\n\n\t\t\t// Find the first message and use it.\n\t\t\tlet message;\n\t\t\tfor ( const rule of rules ) {\n\t\t\t\tmessage = rule.callback( flattenedBlocks );\n\t\t\t\tif ( message ) {\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\tdisplayBlockRemovalPrompt(\n\t\t\t\t\t\t\tclientIds,\n\t\t\t\t\t\t\tselectPrevious,\n\t\t\t\t\t\t\tmessage\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( selectPrevious ) {\n\t\t\tdispatch.selectPreviousBlock( clientIds[ 0 ], selectPrevious );\n\t\t}\n\n\t\t// We're batching these two actions because an extra `undo/redo` step can\n\t\t// be created, based on whether we insert a default block or not.\n\t\tregistry.batch( () => {\n\t\t\tdispatch( { type: 'REMOVE_BLOCKS', clientIds } );\n\t\t\t// To avoid a focus loss when removing the last block, assure there is\n\t\t\t// always a default block if the last of the blocks have been removed.\n\t\t\tdispatch( ensureDefaultBlock() );\n\t\t} );\n\t};\n\n/**\n * Action which will insert a default block insert action if there\n * are no other blocks at the root of the editor. This action should be used\n * in actions which may result in no blocks remaining in the editor (removal,\n * replacement, etc).\n */\nexport const ensureDefaultBlock =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\t// To avoid a focus loss when removing the last block, assure there is\n\t\t// always a default block if the last of the blocks have been removed.\n\t\tconst count = select.getBlockCount();\n\t\tif ( count > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there's an custom appender, don't insert default block.\n\t\t// We have to remember to manually move the focus elsewhere to\n\t\t// prevent it from being lost though.\n\t\tconst { __unstableHasCustomAppender } = select.getSettings();\n\t\tif ( __unstableHasCustomAppender ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch.insertDefaultBlock();\n\t};\n\n/**\n * Returns an action object used in signalling that a block removal prompt must\n * be displayed.\n *\n * Contrast with `setBlockRemovalRules`.\n *\n * @param {string|string[]} clientIds Client IDs of blocks to remove.\n * @param {boolean} selectPrevious True if the previous block or the\n * immediate parent (if no previous\n * block exists) should be selected\n * when a block is removed.\n * @param {string} message Message to display in the prompt.\n *\n * @return {Object} Action object.\n */\nfunction displayBlockRemovalPrompt( clientIds, selectPrevious, message ) {\n\treturn {\n\t\ttype: 'DISPLAY_BLOCK_REMOVAL_PROMPT',\n\t\tclientIds,\n\t\tselectPrevious,\n\t\tmessage,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that a block removal prompt must\n * be cleared, either be cause the user has confirmed or canceled the request\n * for removal.\n *\n * @return {Object} Action object.\n */\nexport function clearBlockRemovalPrompt() {\n\treturn {\n\t\ttype: 'CLEAR_BLOCK_REMOVAL_PROMPT',\n\t};\n}\n\n/**\n * Returns an action object used to set up any rules that a block editor may\n * provide in order to prevent a user from accidentally removing certain\n * blocks. These rules are then used to display a confirmation prompt to the\n * user. For instance, in the Site Editor, the Query Loop block is important\n * enough to warrant such confirmation.\n *\n * IMPORTANT: Registering rules implicitly signals to the `privateRemoveBlocks`\n * action that the editor will be responsible for displaying block removal\n * prompts and confirming deletions. This action is meant to be used by\n * component `BlockRemovalWarningModal` only.\n *\n * The data is a record whose keys are block types (e.g. 'core/query') and\n * whose values are the explanation to be shown to users (e.g. 'Query Loop\n * displays a list of posts or pages.').\n *\n * Contrast with `displayBlockRemovalPrompt`.\n *\n * @param {Record|false} rules Block removal rules.\n * @return {Object} Action object.\n */\nexport function setBlockRemovalRules( rules = false ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_REMOVAL_RULES',\n\t\trules,\n\t};\n}\n\n/**\n * Sets the client ID of the block settings menu that is currently open.\n *\n * @param {?string} clientId The block client ID.\n * @return {Object} Action object.\n */\nexport function setOpenedBlockSettingsMenu( clientId ) {\n\treturn {\n\t\ttype: 'SET_OPENED_BLOCK_SETTINGS_MENU',\n\t\tclientId,\n\t};\n}\n\nexport function setStyleOverride( id, style ) {\n\treturn {\n\t\ttype: 'SET_STYLE_OVERRIDE',\n\t\tid,\n\t\tstyle,\n\t};\n}\n\nexport function deleteStyleOverride( id ) {\n\treturn {\n\t\ttype: 'DELETE_STYLE_OVERRIDE',\n\t\tid,\n\t};\n}\n\n/**\n * Action that sets the element that had focus when focus leaves the editor canvas.\n *\n * @param {Object} lastFocus The last focused element.\n *\n *\n * @return {Object} Action object.\n */\nexport function setLastFocus( lastFocus = null ) {\n\treturn {\n\t\ttype: 'LAST_FOCUS',\n\t\tlastFocus,\n\t};\n}\n\n/**\n * Action that stops temporarily editing as blocks.\n *\n * @param {string} clientId The block's clientId.\n */\nexport function stopEditingAsBlocks( clientId ) {\n\treturn ( { select, dispatch, registry } ) => {\n\t\tconst focusModeToRevert = unlock(\n\t\t\tregistry.select( blockEditorStore )\n\t\t).getTemporarilyEditingFocusModeToRevert();\n\t\tdispatch.__unstableMarkNextChangeAsNotPersistent();\n\t\tdispatch.updateBlockAttributes( clientId, {\n\t\t\ttemplateLock: 'contentOnly',\n\t\t} );\n\t\tdispatch.updateBlockListSettings( clientId, {\n\t\t\t...select.getBlockListSettings( clientId ),\n\t\t\ttemplateLock: 'contentOnly',\n\t\t} );\n\t\tdispatch.updateSettings( { focusMode: focusModeToRevert } );\n\t\tdispatch.__unstableSetTemporarilyEditingAsBlocks();\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has begun to drag.\n *\n * @return {Object} Action object.\n */\nexport function startDragging() {\n\treturn {\n\t\ttype: 'START_DRAGGING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has stopped dragging.\n *\n * @return {Object} Action object.\n */\nexport function stopDragging() {\n\treturn {\n\t\ttype: 'STOP_DRAGGING',\n\t};\n}\n\n/**\n * @param {string|null} clientId The block's clientId, or `null` to clear.\n *\n * @return {Object} Action object.\n */\nexport function expandBlock( clientId ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_EXPANDED_IN_LIST_VIEW',\n\t\tclientId,\n\t};\n}\n\n/**\n * Temporarily modify/unlock the content-only block for editions.\n *\n * @param {string} clientId The client id of the block.\n */\nexport const modifyContentLockBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tdispatch.selectBlock( clientId );\n\t\tdispatch.__unstableMarkNextChangeAsNotPersistent();\n\t\tdispatch.updateBlockAttributes( clientId, {\n\t\t\ttemplateLock: undefined,\n\t\t} );\n\t\tdispatch.updateBlockListSettings( clientId, {\n\t\t\t...select.getBlockListSettings( clientId ),\n\t\t\ttemplateLock: false,\n\t\t} );\n\t\tconst focusModeToRevert = select.getSettings().focusMode;\n\t\tdispatch.updateSettings( { focusMode: true } );\n\t\tdispatch.__unstableSetTemporarilyEditingAsBlocks(\n\t\t\tclientId,\n\t\t\tfocusModeToRevert\n\t\t);\n\t};\n\n/**\n * Sets the zoom level.\n *\n * @param {number} zoom the new zoom level\n * @return {Object} Action object.\n */\nexport function setZoomLevel( zoom = 100 ) {\n\treturn {\n\t\ttype: 'SET_ZOOM_LEVEL',\n\t\tzoom,\n\t};\n}\n\n/**\n * Resets the Zoom state.\n * @return {Object} Action object.\n */\nexport function resetZoomLevel() {\n\treturn {\n\t\ttype: 'RESET_ZOOM_LEVEL',\n\t};\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"a11y\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"notices\"];","/**\n * WordPress dependencies\n */\nimport { RichTextData } from '@wordpress/rich-text';\n\n/**\n * A robust way to retain selection position through various\n * transforms is to insert a special character at the position and\n * then recover it.\n */\nexport const START_OF_SELECTED_AREA = '\\u0086';\n\n/**\n * Retrieve the block attribute that contains the selection position.\n *\n * @param {Object} blockAttributes Block attributes.\n * @return {string|void} The name of the block attribute that was previously selected.\n */\nexport function retrieveSelectedAttribute( blockAttributes ) {\n\tif ( ! blockAttributes ) {\n\t\treturn;\n\t}\n\n\treturn Object.keys( blockAttributes ).find( ( name ) => {\n\t\tconst value = blockAttributes[ name ];\n\t\treturn (\n\t\t\t( typeof value === 'string' || value instanceof RichTextData ) &&\n\t\t\t// To do: refactor this to use rich text's selection instead, so we\n\t\t\t// no longer have to use on this hack inserting a special character.\n\t\t\tvalue.toString().indexOf( START_OF_SELECTED_AREA ) !== -1\n\t\t);\n\t} );\n}\n\nexport function findRichTextAttributeKey( blockType ) {\n\tfor ( const [ key, value ] of Object.entries( blockType.attributes ) ) {\n\t\tif ( value.source === 'rich-text' || value.source === 'html' ) {\n\t\t\treturn key;\n\t\t}\n\t}\n}\n","/* eslint no-console: [ 'error', { allow: [ 'error', 'warn' ] } ] */\n/**\n * WordPress dependencies\n */\nimport {\n\tcloneBlock,\n\t__experimentalCloneSanitizedBlock,\n\tcreateBlock,\n\tdoBlocksMatchTemplate,\n\tgetBlockType,\n\tgetDefaultBlockName,\n\thasBlockSupport,\n\tswitchToBlockType,\n\tsynchronizeBlocksWithTemplate,\n\tgetBlockSupport,\n\tisUnmodifiedDefaultBlock,\n\tisUnmodifiedBlock,\n} from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { create, insert, remove, toHTMLString } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport {\n\tretrieveSelectedAttribute,\n\tfindRichTextAttributeKey,\n\tSTART_OF_SELECTED_AREA,\n} from '../utils/selection';\nimport {\n\t__experimentalUpdateSettings,\n\tprivateRemoveBlocks,\n} from './private-actions';\n\n/** @typedef {import('../components/use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\nconst castArray = ( maybeArray ) =>\n\tArray.isArray( maybeArray ) ? maybeArray : [ maybeArray ];\n\n/**\n * Action that resets blocks state to the specified array of blocks, taking precedence\n * over any other content reflected as an edit in state.\n *\n * @param {Array} blocks Array of blocks.\n */\nexport const resetBlocks =\n\t( blocks ) =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'RESET_BLOCKS', blocks } );\n\t\tdispatch( validateBlocksToTemplate( blocks ) );\n\t};\n\n/**\n * Block validity is a function of blocks state (at the point of a\n * reset) and the template setting. As a compromise to its placement\n * across distinct parts of state, it is implemented here as a side\n * effect of the block reset action.\n *\n * @param {Array} blocks Array of blocks.\n */\nexport const validateBlocksToTemplate =\n\t( blocks ) =>\n\t( { select, dispatch } ) => {\n\t\tconst template = select.getTemplate();\n\t\tconst templateLock = select.getTemplateLock();\n\n\t\t// Unlocked templates are considered always valid because they act\n\t\t// as default values only.\n\t\tconst isBlocksValidToTemplate =\n\t\t\t! template ||\n\t\t\ttemplateLock !== 'all' ||\n\t\t\tdoBlocksMatchTemplate( blocks, template );\n\n\t\t// Update if validity has changed.\n\t\tconst isValidTemplate = select.isValidTemplate();\n\n\t\tif ( isBlocksValidToTemplate !== isValidTemplate ) {\n\t\t\tdispatch.setTemplateValidity( isBlocksValidToTemplate );\n\t\t\treturn isBlocksValidToTemplate;\n\t\t}\n\t};\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPBlockSelection\n *\n * @property {string} clientId A block client ID.\n * @property {string} attributeKey A block attribute key.\n * @property {number} offset An attribute value offset, based on the rich\n * text value. See `wp.richText.create`.\n */\n\n/**\n * A selection object.\n *\n * @typedef {Object} WPSelection\n *\n * @property {WPBlockSelection} start The selection start.\n * @property {WPBlockSelection} end The selection end.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns an action object used in signalling that selection state should be\n * reset to the specified selection.\n *\n * @param {WPBlockSelection} selectionStart The selection start.\n * @param {WPBlockSelection} selectionEnd The selection end.\n * @param {0|-1|null} initialPosition Initial block position.\n *\n * @return {Object} Action object.\n */\nexport function resetSelection(\n\tselectionStart,\n\tselectionEnd,\n\tinitialPosition\n) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn {\n\t\ttype: 'RESET_SELECTION',\n\t\tselectionStart,\n\t\tselectionEnd,\n\t\tinitialPosition,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that blocks have been received.\n * Unlike resetBlocks, these should be appended to the existing known set, not\n * replacing.\n *\n * @deprecated\n *\n * @param {Object[]} blocks Array of block objects.\n *\n * @return {Object} Action object.\n */\nexport function receiveBlocks( blocks ) {\n\tdeprecated( 'wp.data.dispatch( \"core/block-editor\" ).receiveBlocks', {\n\t\tsince: '5.9',\n\t\talternative: 'resetBlocks or insertBlocks',\n\t} );\n\n\treturn {\n\t\ttype: 'RECEIVE_BLOCKS',\n\t\tblocks,\n\t};\n}\n\n/**\n * Action that updates attributes of multiple blocks with the specified client IDs.\n *\n * @param {string|string[]} clientIds Block client IDs.\n * @param {Object} attributes Block attributes to be merged. Should be keyed by clientIds if\n * uniqueByBlock is true.\n * @param {boolean} uniqueByBlock true if each block in clientIds array has a unique set of attributes\n * @return {Object} Action object.\n */\nexport function updateBlockAttributes(\n\tclientIds,\n\tattributes,\n\tuniqueByBlock = false\n) {\n\treturn {\n\t\ttype: 'UPDATE_BLOCK_ATTRIBUTES',\n\t\tclientIds: castArray( clientIds ),\n\t\tattributes,\n\t\tuniqueByBlock,\n\t};\n}\n\n/**\n * Action that updates the block with the specified client ID.\n *\n * @param {string} clientId Block client ID.\n * @param {Object} updates Block attributes to be merged.\n *\n * @return {Object} Action object.\n */\nexport function updateBlock( clientId, updates ) {\n\treturn {\n\t\ttype: 'UPDATE_BLOCK',\n\t\tclientId,\n\t\tupdates,\n\t};\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns an action object used in signalling that the block with the\n * specified client ID has been selected, optionally accepting a position\n * value reflecting its selection directionality. An initialPosition of -1\n * reflects a reverse selection.\n *\n * @param {string} clientId Block client ID.\n * @param {0|-1|null} initialPosition Optional initial position. Pass as -1 to\n * reflect reverse selection.\n *\n * @return {Object} Action object.\n */\nexport function selectBlock( clientId, initialPosition = 0 ) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn {\n\t\ttype: 'SELECT_BLOCK',\n\t\tinitialPosition,\n\t\tclientId,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the block with the\n * specified client ID has been hovered.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Action object.\n */\nexport function hoverBlock( clientId ) {\n\treturn {\n\t\ttype: 'HOVER_BLOCK',\n\t\tclientId,\n\t};\n}\n\n/**\n * Yields action objects used in signalling that the block preceding the given\n * clientId (or optionally, its first parent from bottom to top)\n * should be selected.\n *\n * @param {string} clientId Block client ID.\n * @param {boolean} fallbackToParent If true, select the first parent if there is no previous block.\n */\nexport const selectPreviousBlock =\n\t( clientId, fallbackToParent = false ) =>\n\t( { select, dispatch } ) => {\n\t\tconst previousBlockClientId =\n\t\t\tselect.getPreviousBlockClientId( clientId );\n\t\tif ( previousBlockClientId ) {\n\t\t\tdispatch.selectBlock( previousBlockClientId, -1 );\n\t\t} else if ( fallbackToParent ) {\n\t\t\tconst firstParentClientId = select.getBlockRootClientId( clientId );\n\t\t\tif ( firstParentClientId ) {\n\t\t\t\tdispatch.selectBlock( firstParentClientId, -1 );\n\t\t\t}\n\t\t}\n\t};\n\n/**\n * Yields action objects used in signalling that the block following the given\n * clientId should be selected.\n *\n * @param {string} clientId Block client ID.\n */\nexport const selectNextBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tconst nextBlockClientId = select.getNextBlockClientId( clientId );\n\t\tif ( nextBlockClientId ) {\n\t\t\tdispatch.selectBlock( nextBlockClientId );\n\t\t}\n\t};\n\n/**\n * Action that starts block multi-selection.\n *\n * @return {Object} Action object.\n */\nexport function startMultiSelect() {\n\treturn {\n\t\ttype: 'START_MULTI_SELECT',\n\t};\n}\n\n/**\n * Action that stops block multi-selection.\n *\n * @return {Object} Action object.\n */\nexport function stopMultiSelect() {\n\treturn {\n\t\ttype: 'STOP_MULTI_SELECT',\n\t};\n}\n\n/**\n * Action that changes block multi-selection.\n *\n * @param {string} start First block of the multi selection.\n * @param {string} end Last block of the multiselection.\n * @param {number|null} __experimentalInitialPosition Optional initial position. Pass as null to skip focus within editor canvas.\n */\nexport const multiSelect =\n\t( start, end, __experimentalInitialPosition = 0 ) =>\n\t( { select, dispatch } ) => {\n\t\tconst startBlockRootClientId = select.getBlockRootClientId( start );\n\t\tconst endBlockRootClientId = select.getBlockRootClientId( end );\n\n\t\t// Only allow block multi-selections at the same level.\n\t\tif ( startBlockRootClientId !== endBlockRootClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch( {\n\t\t\ttype: 'MULTI_SELECT',\n\t\t\tstart,\n\t\t\tend,\n\t\t\tinitialPosition: __experimentalInitialPosition,\n\t\t} );\n\n\t\tconst blockCount = select.getSelectedBlockCount();\n\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: number of selected blocks */\n\t\t\t\t_n( '%s block selected.', '%s blocks selected.', blockCount ),\n\t\t\t\tblockCount\n\t\t\t),\n\t\t\t'assertive'\n\t\t);\n\t};\n\n/**\n * Action that clears the block selection.\n *\n * @return {Object} Action object.\n */\nexport function clearSelectedBlock() {\n\treturn {\n\t\ttype: 'CLEAR_SELECTED_BLOCK',\n\t};\n}\n\n/**\n * Action that enables or disables block selection.\n *\n * @param {boolean} [isSelectionEnabled=true] Whether block selection should\n * be enabled.\n *\n * @return {Object} Action object.\n */\nexport function toggleSelection( isSelectionEnabled = true ) {\n\treturn {\n\t\ttype: 'TOGGLE_SELECTION',\n\t\tisSelectionEnabled,\n\t};\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Action that replaces given blocks with one or more replacement blocks.\n *\n * @param {(string|string[])} clientIds Block client ID(s) to replace.\n * @param {(Object|Object[])} blocks Replacement block(s).\n * @param {number} indexToSelect Index of replacement block to select.\n * @param {0|-1|null} initialPosition Index of caret after in the selected block after the operation.\n * @param {?Object} meta Optional Meta values to be passed to the action object.\n *\n * @return {Object} Action object.\n */\nexport const replaceBlocks =\n\t( clientIds, blocks, indexToSelect, initialPosition = 0, meta ) =>\n\t( { select, dispatch, registry } ) => {\n\t\t/* eslint-enable jsdoc/valid-types */\n\t\tclientIds = castArray( clientIds );\n\t\tblocks = castArray( blocks );\n\t\tconst rootClientId = select.getBlockRootClientId( clientIds[ 0 ] );\n\t\t// Replace is valid if the new blocks can be inserted in the root block.\n\t\tfor ( let index = 0; index < blocks.length; index++ ) {\n\t\t\tconst block = blocks[ index ];\n\t\t\tconst canInsertBlock = select.canInsertBlockType(\n\t\t\t\tblock.name,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tif ( ! canInsertBlock ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// We're batching these two actions because an extra `undo/redo` step can\n\t\t// be created, based on whether we insert a default block or not.\n\t\tregistry.batch( () => {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'REPLACE_BLOCKS',\n\t\t\t\tclientIds,\n\t\t\t\tblocks,\n\t\t\t\ttime: Date.now(),\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition,\n\t\t\t\tmeta,\n\t\t\t} );\n\t\t\t// To avoid a focus loss when removing the last block, assure there is\n\t\t\t// always a default block if the last of the blocks have been removed.\n\t\t\tdispatch.ensureDefaultBlock();\n\t\t} );\n\t};\n\n/**\n * Action that replaces a single block with one or more replacement blocks.\n *\n * @param {(string|string[])} clientId Block client ID to replace.\n * @param {(Object|Object[])} block Replacement block(s).\n *\n * @return {Object} Action object.\n */\nexport function replaceBlock( clientId, block ) {\n\treturn replaceBlocks( clientId, block );\n}\n\n/**\n * Higher-order action creator which, given the action type to dispatch creates\n * an action creator for managing block movement.\n *\n * @param {string} type Action type to dispatch.\n *\n * @return {Function} Action creator.\n */\nconst createOnMove =\n\t( type ) =>\n\t( clientIds, rootClientId ) =>\n\t( { select, dispatch } ) => {\n\t\t// If one of the blocks is locked or the parent is locked, we cannot move any block.\n\t\tconst canMoveBlocks = select.canMoveBlocks( clientIds );\n\t\tif ( ! canMoveBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch( { type, clientIds: castArray( clientIds ), rootClientId } );\n\t};\n\nexport const moveBlocksDown = createOnMove( 'MOVE_BLOCKS_DOWN' );\nexport const moveBlocksUp = createOnMove( 'MOVE_BLOCKS_UP' );\n\n/**\n * Action that moves given blocks to a new position.\n *\n * @param {?string} clientIds The client IDs of the blocks.\n * @param {?string} fromRootClientId Root client ID source.\n * @param {?string} toRootClientId Root client ID destination.\n * @param {number} index The index to move the blocks to.\n */\nexport const moveBlocksToPosition =\n\t( clientIds, fromRootClientId = '', toRootClientId = '', index ) =>\n\t( { select, dispatch } ) => {\n\t\tconst canMoveBlocks = select.canMoveBlocks( clientIds );\n\n\t\t// If one of the blocks is locked or the parent is locked, we cannot move any block.\n\t\tif ( ! canMoveBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If moving inside the same root block the move is always possible.\n\t\tif ( fromRootClientId !== toRootClientId ) {\n\t\t\tconst canRemoveBlocks = select.canRemoveBlocks( clientIds );\n\n\t\t\t// If we're moving to another block, it means we're deleting blocks from\n\t\t\t// the original block, so we need to check if removing is possible.\n\t\t\tif ( ! canRemoveBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst canInsertBlocks = select.canInsertBlocks(\n\t\t\t\tclientIds,\n\t\t\t\ttoRootClientId\n\t\t\t);\n\n\t\t\t// If moving to other parent block, the move is possible if we can insert a block of the same type inside the new parent block.\n\t\t\tif ( ! canInsertBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tdispatch( {\n\t\t\ttype: 'MOVE_BLOCKS_TO_POSITION',\n\t\t\tfromRootClientId,\n\t\t\ttoRootClientId,\n\t\t\tclientIds,\n\t\t\tindex,\n\t\t} );\n\t};\n\n/**\n * Action that moves given block to a new position.\n *\n * @param {?string} clientId The client ID of the block.\n * @param {?string} fromRootClientId Root client ID source.\n * @param {?string} toRootClientId Root client ID destination.\n * @param {number} index The index to move the block to.\n */\nexport function moveBlockToPosition(\n\tclientId,\n\tfromRootClientId = '',\n\ttoRootClientId = '',\n\tindex\n) {\n\treturn moveBlocksToPosition(\n\t\t[ clientId ],\n\t\tfromRootClientId,\n\t\ttoRootClientId,\n\t\tindex\n\t);\n}\n\n/**\n * Action that inserts a single block, optionally at a specific index respective a root block list.\n *\n * Only allowed blocks are inserted. The action may fail silently for blocks that are not allowed or if\n * a templateLock is active on the block list.\n *\n * @param {Object} block Block object to insert.\n * @param {?number} index Index at which block should be inserted.\n * @param {?string} rootClientId Optional root client ID of block list on which to insert.\n * @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.\n * @param {?Object} meta Optional Meta values to be passed to the action object.\n *\n * @return {Object} Action object.\n */\nexport function insertBlock(\n\tblock,\n\tindex,\n\trootClientId,\n\tupdateSelection,\n\tmeta\n) {\n\treturn insertBlocks(\n\t\t[ block ],\n\t\tindex,\n\t\trootClientId,\n\t\tupdateSelection,\n\t\t0,\n\t\tmeta\n\t);\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Action that inserts an array of blocks, optionally at a specific index respective a root block list.\n *\n * Only allowed blocks are inserted. The action may fail silently for blocks that are not allowed or if\n * a templateLock is active on the block list.\n *\n * @param {Object[]} blocks Block objects to insert.\n * @param {?number} index Index at which block should be inserted.\n * @param {?string} rootClientId Optional root client ID of block list on which to insert.\n * @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.\n * @param {0|-1|null} initialPosition Initial focus position. Setting it to null prevent focusing the inserted block.\n * @param {?Object} meta Optional Meta values to be passed to the action object.\n *\n * @return {Object} Action object.\n */\nexport const insertBlocks =\n\t(\n\t\tblocks,\n\t\tindex,\n\t\trootClientId,\n\t\tupdateSelection = true,\n\t\tinitialPosition = 0,\n\t\tmeta\n\t) =>\n\t( { select, dispatch } ) => {\n\t\t/* eslint-enable jsdoc/valid-types */\n\t\tif ( initialPosition !== null && typeof initialPosition === 'object' ) {\n\t\t\tmeta = initialPosition;\n\t\t\tinitialPosition = 0;\n\t\t\tdeprecated(\n\t\t\t\t\"meta argument in wp.data.dispatch('core/block-editor')\",\n\t\t\t\t{\n\t\t\t\t\tsince: '5.8',\n\t\t\t\t\thint: 'The meta argument is now the 6th argument of the function',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tblocks = castArray( blocks );\n\t\tconst allowedBlocks = [];\n\t\tfor ( const block of blocks ) {\n\t\t\tconst isValid = select.canInsertBlockType(\n\t\t\t\tblock.name,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tif ( isValid ) {\n\t\t\t\tallowedBlocks.push( block );\n\t\t\t}\n\t\t}\n\t\tif ( allowedBlocks.length ) {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'INSERT_BLOCKS',\n\t\t\t\tblocks: allowedBlocks,\n\t\t\t\tindex,\n\t\t\t\trootClientId,\n\t\t\t\ttime: Date.now(),\n\t\t\t\tupdateSelection,\n\t\t\t\tinitialPosition: updateSelection ? initialPosition : null,\n\t\t\t\tmeta,\n\t\t\t} );\n\t\t}\n\t};\n\n/**\n * Action that shows the insertion point.\n *\n * @param {?string} rootClientId Optional root client ID of block list on\n * which to insert.\n * @param {?number} index Index at which block should be inserted.\n * @param {?Object} __unstableOptions Additional options.\n * @property {boolean} __unstableWithInserter Whether or not to show an inserter button.\n * @property {WPDropOperation} operation The operation to perform when applied,\n * either 'insert' or 'replace' for now.\n *\n * @return {Object} Action object.\n */\nexport function showInsertionPoint(\n\trootClientId,\n\tindex,\n\t__unstableOptions = {}\n) {\n\tconst { __unstableWithInserter, operation, nearestSide } =\n\t\t__unstableOptions;\n\treturn {\n\t\ttype: 'SHOW_INSERTION_POINT',\n\t\trootClientId,\n\t\tindex,\n\t\t__unstableWithInserter,\n\t\toperation,\n\t\tnearestSide,\n\t};\n}\n/**\n * Action that hides the insertion point.\n */\nexport const hideInsertionPoint =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! select.isBlockInsertionPointVisible() ) {\n\t\t\treturn;\n\t\t}\n\t\tdispatch( {\n\t\t\ttype: 'HIDE_INSERTION_POINT',\n\t\t} );\n\t};\n\n/**\n * Action that resets the template validity.\n *\n * @param {boolean} isValid template validity flag.\n *\n * @return {Object} Action object.\n */\nexport function setTemplateValidity( isValid ) {\n\treturn {\n\t\ttype: 'SET_TEMPLATE_VALIDITY',\n\t\tisValid,\n\t};\n}\n\n/**\n * Action that synchronizes the template with the list of blocks.\n *\n * @return {Object} Action object.\n */\nexport const synchronizeTemplate =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\tdispatch( { type: 'SYNCHRONIZE_TEMPLATE' } );\n\t\tconst blocks = select.getBlocks();\n\t\tconst template = select.getTemplate();\n\t\tconst updatedBlockList = synchronizeBlocksWithTemplate(\n\t\t\tblocks,\n\t\t\ttemplate\n\t\t);\n\n\t\tdispatch.resetBlocks( updatedBlockList );\n\t};\n\n/**\n * Delete the current selection.\n *\n * @param {boolean} isForward\n */\nexport const __unstableDeleteSelection =\n\t( isForward ) =>\n\t( { registry, select, dispatch } ) => {\n\t\tconst selectionAnchor = select.getSelectionStart();\n\t\tconst selectionFocus = select.getSelectionEnd();\n\n\t\tif ( selectionAnchor.clientId === selectionFocus.clientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// It's not mergeable if there's no rich text selection.\n\t\tif (\n\t\t\t! selectionAnchor.attributeKey ||\n\t\t\t! selectionFocus.attributeKey ||\n\t\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\t\ttypeof selectionFocus.offset === 'undefined'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst anchorRootClientId = select.getBlockRootClientId(\n\t\t\tselectionAnchor.clientId\n\t\t);\n\t\tconst focusRootClientId = select.getBlockRootClientId(\n\t\t\tselectionFocus.clientId\n\t\t);\n\n\t\t// It's not mergeable if the selection doesn't start and end in the same\n\t\t// block list. Maybe in the future it should be allowed.\n\t\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockOrder = select.getBlockOrder( anchorRootClientId );\n\t\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\t\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t\t// Reassign selection start and end based on order.\n\t\tlet selectionStart, selectionEnd;\n\n\t\tif ( anchorIndex > focusIndex ) {\n\t\t\tselectionStart = selectionFocus;\n\t\t\tselectionEnd = selectionAnchor;\n\t\t} else {\n\t\t\tselectionStart = selectionAnchor;\n\t\t\tselectionEnd = selectionFocus;\n\t\t}\n\n\t\tconst targetSelection = isForward ? selectionEnd : selectionStart;\n\t\tconst targetBlock = select.getBlock( targetSelection.clientId );\n\t\tconst targetBlockType = getBlockType( targetBlock.name );\n\n\t\tif ( ! targetBlockType.merge ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectionA = selectionStart;\n\t\tconst selectionB = selectionEnd;\n\n\t\tconst blockA = select.getBlock( selectionA.clientId );\n\t\tconst blockB = select.getBlock( selectionB.clientId );\n\n\t\tconst htmlA = blockA.attributes[ selectionA.attributeKey ];\n\t\tconst htmlB = blockB.attributes[ selectionB.attributeKey ];\n\n\t\tlet valueA = create( { html: htmlA } );\n\t\tlet valueB = create( { html: htmlB } );\n\n\t\tvalueA = remove( valueA, selectionA.offset, valueA.text.length );\n\t\tvalueB = insert( valueB, START_OF_SELECTED_AREA, 0, selectionB.offset );\n\n\t\t// Clone the blocks so we don't manipulate the original.\n\t\tconst cloneA = cloneBlock( blockA, {\n\t\t\t[ selectionA.attributeKey ]: toHTMLString( { value: valueA } ),\n\t\t} );\n\t\tconst cloneB = cloneBlock( blockB, {\n\t\t\t[ selectionB.attributeKey ]: toHTMLString( { value: valueB } ),\n\t\t} );\n\n\t\tconst followingBlock = isForward ? cloneA : cloneB;\n\n\t\t// We can only merge blocks with similar types\n\t\t// thus, we transform the block to merge first\n\t\tconst blocksWithTheSameType =\n\t\t\tblockA.name === blockB.name\n\t\t\t\t? [ followingBlock ]\n\t\t\t\t: switchToBlockType( followingBlock, targetBlockType.name );\n\n\t\t// If the block types can not match, do nothing\n\t\tif ( ! blocksWithTheSameType || ! blocksWithTheSameType.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet updatedAttributes;\n\n\t\tif ( isForward ) {\n\t\t\tconst blockToMerge = blocksWithTheSameType.pop();\n\t\t\tupdatedAttributes = targetBlockType.merge(\n\t\t\t\tblockToMerge.attributes,\n\t\t\t\tcloneB.attributes\n\t\t\t);\n\t\t} else {\n\t\t\tconst blockToMerge = blocksWithTheSameType.shift();\n\t\t\tupdatedAttributes = targetBlockType.merge(\n\t\t\t\tcloneA.attributes,\n\t\t\t\tblockToMerge.attributes\n\t\t\t);\n\t\t}\n\n\t\tconst newAttributeKey = retrieveSelectedAttribute( updatedAttributes );\n\n\t\tconst convertedHtml = updatedAttributes[ newAttributeKey ];\n\t\tconst convertedValue = create( { html: convertedHtml } );\n\t\tconst newOffset = convertedValue.text.indexOf( START_OF_SELECTED_AREA );\n\t\tconst newValue = remove( convertedValue, newOffset, newOffset + 1 );\n\t\tconst newHtml = toHTMLString( { value: newValue } );\n\n\t\tupdatedAttributes[ newAttributeKey ] = newHtml;\n\n\t\tconst selectedBlockClientIds = select.getSelectedBlockClientIds();\n\t\tconst replacement = [\n\t\t\t...( isForward ? blocksWithTheSameType : [] ),\n\t\t\t{\n\t\t\t\t// Preserve the original client ID.\n\t\t\t\t...targetBlock,\n\t\t\t\tattributes: {\n\t\t\t\t\t...targetBlock.attributes,\n\t\t\t\t\t...updatedAttributes,\n\t\t\t\t},\n\t\t\t},\n\t\t\t...( isForward ? [] : blocksWithTheSameType ),\n\t\t];\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.selectionChange(\n\t\t\t\ttargetBlock.clientId,\n\t\t\t\tnewAttributeKey,\n\t\t\t\tnewOffset,\n\t\t\t\tnewOffset\n\t\t\t);\n\n\t\t\tdispatch.replaceBlocks(\n\t\t\t\tselectedBlockClientIds,\n\t\t\t\treplacement,\n\t\t\t\t0, // If we don't pass the `indexToSelect` it will default to the last block.\n\t\t\t\tselect.getSelectedBlocksInitialCaretPosition()\n\t\t\t);\n\t\t} );\n\t};\n\n/**\n * Split the current selection.\n * @param {?Array} blocks\n */\nexport const __unstableSplitSelection =\n\t( blocks = [] ) =>\n\t( { registry, select, dispatch } ) => {\n\t\tconst selectionAnchor = select.getSelectionStart();\n\t\tconst selectionFocus = select.getSelectionEnd();\n\t\tconst anchorRootClientId = select.getBlockRootClientId(\n\t\t\tselectionAnchor.clientId\n\t\t);\n\t\tconst focusRootClientId = select.getBlockRootClientId(\n\t\t\tselectionFocus.clientId\n\t\t);\n\n\t\t// It's not splittable if the selection doesn't start and end in the same\n\t\t// block list. Maybe in the future it should be allowed.\n\t\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockOrder = select.getBlockOrder( anchorRootClientId );\n\t\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\t\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t\t// Reassign selection start and end based on order.\n\t\tlet selectionStart, selectionEnd;\n\n\t\tif ( anchorIndex > focusIndex ) {\n\t\t\tselectionStart = selectionFocus;\n\t\t\tselectionEnd = selectionAnchor;\n\t\t} else {\n\t\t\tselectionStart = selectionAnchor;\n\t\t\tselectionEnd = selectionFocus;\n\t\t}\n\n\t\tconst selectionA = selectionStart;\n\t\tconst selectionB = selectionEnd;\n\t\tconst blockA = select.getBlock( selectionA.clientId );\n\t\tconst blockB = select.getBlock( selectionB.clientId );\n\t\tconst blockAType = getBlockType( blockA.name );\n\t\tconst blockBType = getBlockType( blockB.name );\n\t\tconst attributeKeyA =\n\t\t\ttypeof selectionA.attributeKey === 'string'\n\t\t\t\t? selectionA.attributeKey\n\t\t\t\t: findRichTextAttributeKey( blockAType );\n\t\tconst attributeKeyB =\n\t\t\ttypeof selectionB.attributeKey === 'string'\n\t\t\t\t? selectionB.attributeKey\n\t\t\t\t: findRichTextAttributeKey( blockBType );\n\t\tconst blockAttributes = select.getBlockAttributes(\n\t\t\tselectionA.clientId\n\t\t);\n\t\tconst bindings = blockAttributes?.metadata?.bindings;\n\n\t\t// If the attribute is bound, don't split the selection and insert a new block instead.\n\t\tif ( bindings?.[ attributeKeyA ] ) {\n\t\t\t// Show warning if user tries to insert a block into another block with bindings.\n\t\t\tif ( blocks.length ) {\n\t\t\t\tconst { createWarningNotice } =\n\t\t\t\t\tregistry.dispatch( noticesStore );\n\t\t\t\tcreateWarningNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t\"Blocks can't be inserted into other blocks with bindings\"\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdispatch.insertAfterBlock( selectionA.clientId );\n\t\t\treturn;\n\t\t}\n\n\t\t// Can't split if the selection is not set.\n\t\tif (\n\t\t\t! attributeKeyA ||\n\t\t\t! attributeKeyB ||\n\t\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\t\ttypeof selectionFocus.offset === 'undefined'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We can do some short-circuiting if the selection is collapsed.\n\t\tif (\n\t\t\tselectionA.clientId === selectionB.clientId &&\n\t\t\tattributeKeyA === attributeKeyB &&\n\t\t\tselectionA.offset === selectionB.offset\n\t\t) {\n\t\t\t// If an unmodified default block is selected, replace it. We don't\n\t\t\t// want to be converting into a default block.\n\t\t\tif ( blocks.length ) {\n\t\t\t\tif ( isUnmodifiedDefaultBlock( blockA ) ) {\n\t\t\t\t\tdispatch.replaceBlocks(\n\t\t\t\t\t\t[ selectionA.clientId ],\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t\t-1\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If selection is at the start or end, we can simply insert an\n\t\t\t// empty block, provided this block has no inner blocks.\n\t\t\telse if ( ! select.getBlockOrder( selectionA.clientId ).length ) {\n\t\t\t\tfunction createEmpty() {\n\t\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\t\treturn select.canInsertBlockType(\n\t\t\t\t\t\tdefaultBlockName,\n\t\t\t\t\t\tanchorRootClientId\n\t\t\t\t\t)\n\t\t\t\t\t\t? createBlock( defaultBlockName )\n\t\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\t\tselect.getBlockName( selectionA.clientId )\n\t\t\t\t\t\t );\n\t\t\t\t}\n\n\t\t\t\tconst length = blockAttributes[ attributeKeyA ].length;\n\n\t\t\t\tif ( selectionA.offset === 0 && length ) {\n\t\t\t\t\tdispatch.insertBlocks(\n\t\t\t\t\t\t[ createEmpty() ],\n\t\t\t\t\t\tselect.getBlockIndex( selectionA.clientId ),\n\t\t\t\t\t\tanchorRootClientId,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( selectionA.offset === length ) {\n\t\t\t\t\tdispatch.insertBlocks(\n\t\t\t\t\t\t[ createEmpty() ],\n\t\t\t\t\t\tselect.getBlockIndex( selectionA.clientId ) + 1,\n\t\t\t\t\t\tanchorRootClientId\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst htmlA = blockA.attributes[ attributeKeyA ];\n\t\tconst htmlB = blockB.attributes[ attributeKeyB ];\n\n\t\tlet valueA = create( { html: htmlA } );\n\t\tlet valueB = create( { html: htmlB } );\n\n\t\tvalueA = remove( valueA, selectionA.offset, valueA.text.length );\n\t\tvalueB = remove( valueB, 0, selectionB.offset );\n\n\t\tlet head = {\n\t\t\t// Preserve the original client ID.\n\t\t\t...blockA,\n\t\t\t// If both start and end are the same, should only copy innerBlocks\n\t\t\t// once.\n\t\t\tinnerBlocks:\n\t\t\t\tblockA.clientId === blockB.clientId ? [] : blockA.innerBlocks,\n\t\t\tattributes: {\n\t\t\t\t...blockA.attributes,\n\t\t\t\t[ attributeKeyA ]: toHTMLString( { value: valueA } ),\n\t\t\t},\n\t\t};\n\n\t\tlet tail = {\n\t\t\t...blockB,\n\t\t\t// Only preserve the original client ID if the end is different.\n\t\t\tclientId:\n\t\t\t\tblockA.clientId === blockB.clientId\n\t\t\t\t\t? createBlock( blockB.name ).clientId\n\t\t\t\t\t: blockB.clientId,\n\t\t\tattributes: {\n\t\t\t\t...blockB.attributes,\n\t\t\t\t[ attributeKeyB ]: toHTMLString( { value: valueB } ),\n\t\t\t},\n\t\t};\n\n\t\t// When splitting a block, attempt to convert the tail block to the\n\t\t// default block type. For example, when splitting a heading block, the\n\t\t// tail block will be converted to a paragraph block. Note that for\n\t\t// blocks such as a list item and button, this will be skipped because\n\t\t// the default block type cannot be inserted.\n\t\tconst defaultBlockName = getDefaultBlockName();\n\t\tif (\n\t\t\t// A block is only split when the selection is within the same\n\t\t\t// block.\n\t\t\tblockA.clientId === blockB.clientId &&\n\t\t\tdefaultBlockName &&\n\t\t\ttail.name !== defaultBlockName &&\n\t\t\tselect.canInsertBlockType( defaultBlockName, anchorRootClientId )\n\t\t) {\n\t\t\tconst switched = switchToBlockType( tail, defaultBlockName );\n\t\t\tif ( switched?.length === 1 ) {\n\t\t\t\ttail = switched[ 0 ];\n\t\t\t}\n\t\t}\n\n\t\tif ( ! blocks.length ) {\n\t\t\tdispatch.replaceBlocks( select.getSelectedBlockClientIds(), [\n\t\t\t\thead,\n\t\t\t\ttail,\n\t\t\t] );\n\t\t\treturn;\n\t\t}\n\n\t\tlet selection;\n\t\tconst output = [];\n\t\tconst clonedBlocks = [ ...blocks ];\n\t\tconst firstBlock = clonedBlocks.shift();\n\t\tconst headType = getBlockType( head.name );\n\t\tconst firstBlocks =\n\t\t\theadType.merge && firstBlock.name === headType.name\n\t\t\t\t? [ firstBlock ]\n\t\t\t\t: switchToBlockType( firstBlock, headType.name );\n\n\t\tif ( firstBlocks?.length ) {\n\t\t\tconst first = firstBlocks.shift();\n\t\t\thead = {\n\t\t\t\t...head,\n\t\t\t\tattributes: {\n\t\t\t\t\t...head.attributes,\n\t\t\t\t\t...headType.merge( head.attributes, first.attributes ),\n\t\t\t\t},\n\t\t\t};\n\t\t\toutput.push( head );\n\t\t\tselection = {\n\t\t\t\tclientId: head.clientId,\n\t\t\t\tattributeKey: attributeKeyA,\n\t\t\t\toffset: create( { html: head.attributes[ attributeKeyA ] } )\n\t\t\t\t\t.text.length,\n\t\t\t};\n\t\t\tclonedBlocks.unshift( ...firstBlocks );\n\t\t} else {\n\t\t\tif ( ! isUnmodifiedBlock( head ) ) {\n\t\t\t\toutput.push( head );\n\t\t\t}\n\t\t\toutput.push( firstBlock );\n\t\t}\n\n\t\tconst lastBlock = clonedBlocks.pop();\n\t\tconst tailType = getBlockType( tail.name );\n\n\t\tif ( clonedBlocks.length ) {\n\t\t\toutput.push( ...clonedBlocks );\n\t\t}\n\n\t\tif ( lastBlock ) {\n\t\t\tconst lastBlocks =\n\t\t\t\ttailType.merge && tailType.name === lastBlock.name\n\t\t\t\t\t? [ lastBlock ]\n\t\t\t\t\t: switchToBlockType( lastBlock, tailType.name );\n\n\t\t\tif ( lastBlocks?.length ) {\n\t\t\t\tconst last = lastBlocks.pop();\n\t\t\t\toutput.push( {\n\t\t\t\t\t...tail,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t...tail.attributes,\n\t\t\t\t\t\t...tailType.merge( last.attributes, tail.attributes ),\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t\toutput.push( ...lastBlocks );\n\t\t\t\tselection = {\n\t\t\t\t\tclientId: tail.clientId,\n\t\t\t\t\tattributeKey: attributeKeyB,\n\t\t\t\t\toffset: create( {\n\t\t\t\t\t\thtml: last.attributes[ attributeKeyB ],\n\t\t\t\t\t} ).text.length,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\toutput.push( lastBlock );\n\t\t\t\tif ( ! isUnmodifiedBlock( tail ) ) {\n\t\t\t\t\toutput.push( tail );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( ! isUnmodifiedBlock( tail ) ) {\n\t\t\toutput.push( tail );\n\t\t}\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.replaceBlocks(\n\t\t\t\tselect.getSelectedBlockClientIds(),\n\t\t\t\toutput,\n\t\t\t\toutput.length - 1,\n\t\t\t\t0\n\t\t\t);\n\t\t\tif ( selection ) {\n\t\t\t\tdispatch.selectionChange(\n\t\t\t\t\tselection.clientId,\n\t\t\t\t\tselection.attributeKey,\n\t\t\t\t\tselection.offset,\n\t\t\t\t\tselection.offset\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t};\n\n/**\n * Expand the selection to cover the entire blocks, removing partial selection.\n */\nexport const __unstableExpandSelection =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\tconst selectionAnchor = select.getSelectionStart();\n\t\tconst selectionFocus = select.getSelectionEnd();\n\t\tdispatch.selectionChange( {\n\t\t\tstart: { clientId: selectionAnchor.clientId },\n\t\t\tend: { clientId: selectionFocus.clientId },\n\t\t} );\n\t};\n\n/**\n * Action that merges two blocks.\n *\n * @param {string} firstBlockClientId Client ID of the first block to merge.\n * @param {string} secondBlockClientId Client ID of the second block to merge.\n */\nexport const mergeBlocks =\n\t( firstBlockClientId, secondBlockClientId ) =>\n\t( { registry, select, dispatch } ) => {\n\t\tconst clientIdA = firstBlockClientId;\n\t\tconst clientIdB = secondBlockClientId;\n\t\tconst blockA = select.getBlock( clientIdA );\n\t\tconst blockAType = getBlockType( blockA.name );\n\n\t\tif ( ! blockAType ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockB = select.getBlock( clientIdB );\n\n\t\tif (\n\t\t\t! blockAType.merge &&\n\t\t\tgetBlockSupport( blockA.name, '__experimentalOnMerge' )\n\t\t) {\n\t\t\t// If there's no merge function defined, attempt merging inner\n\t\t\t// blocks.\n\t\t\tconst blocksWithTheSameType = switchToBlockType(\n\t\t\t\tblockB,\n\t\t\t\tblockAType.name\n\t\t\t);\n\t\t\t// Only focus the previous block if it's not mergeable.\n\t\t\tif ( blocksWithTheSameType?.length !== 1 ) {\n\t\t\t\tdispatch.selectBlock( blockA.clientId );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [ blockWithSameType ] = blocksWithTheSameType;\n\t\t\tif ( blockWithSameType.innerBlocks.length < 1 ) {\n\t\t\t\tdispatch.selectBlock( blockA.clientId );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.insertBlocks(\n\t\t\t\t\tblockWithSameType.innerBlocks,\n\t\t\t\t\tundefined,\n\t\t\t\t\tclientIdA\n\t\t\t\t);\n\t\t\t\tdispatch.removeBlock( clientIdB );\n\t\t\t\tdispatch.selectBlock(\n\t\t\t\t\tblockWithSameType.innerBlocks[ 0 ].clientId\n\t\t\t\t);\n\n\t\t\t\t// Attempt to merge the next block if it's the same type and\n\t\t\t\t// same attributes. This is useful when merging a paragraph into\n\t\t\t\t// a list, and the next block is also a list. If we don't merge,\n\t\t\t\t// it looks like one list, but it's actually two lists. The same\n\t\t\t\t// applies to other blocks such as a group with the same\n\t\t\t\t// attributes.\n\t\t\t\tconst nextBlockClientId =\n\t\t\t\t\tselect.getNextBlockClientId( clientIdA );\n\n\t\t\t\tif (\n\t\t\t\t\tnextBlockClientId &&\n\t\t\t\t\tselect.getBlockName( clientIdA ) ===\n\t\t\t\t\t\tselect.getBlockName( nextBlockClientId )\n\t\t\t\t) {\n\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\tselect.getBlockAttributes( clientIdA );\n\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\tselect.getBlockAttributes( nextBlockClientId );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tdispatch.moveBlocksToPosition(\n\t\t\t\t\t\t\tselect.getBlockOrder( nextBlockClientId ),\n\t\t\t\t\t\t\tnextBlockClientId,\n\t\t\t\t\t\t\tclientIdA\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.removeBlock( nextBlockClientId, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isUnmodifiedDefaultBlock( blockA ) ) {\n\t\t\tdispatch.removeBlock(\n\t\t\t\tclientIdA,\n\t\t\t\tselect.isBlockSelected( clientIdA )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isUnmodifiedDefaultBlock( blockB ) ) {\n\t\t\tdispatch.removeBlock(\n\t\t\t\tclientIdB,\n\t\t\t\tselect.isBlockSelected( clientIdB )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! blockAType.merge ) {\n\t\t\tdispatch.selectBlock( blockA.clientId );\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockBType = getBlockType( blockB.name );\n\t\tconst { clientId, attributeKey, offset } = select.getSelectionStart();\n\t\tconst selectedBlockType =\n\t\t\tclientId === clientIdA ? blockAType : blockBType;\n\t\tconst attributeDefinition =\n\t\t\tselectedBlockType.attributes[ attributeKey ];\n\t\tconst canRestoreTextSelection =\n\t\t\t( clientId === clientIdA || clientId === clientIdB ) &&\n\t\t\tattributeKey !== undefined &&\n\t\t\toffset !== undefined &&\n\t\t\t// We cannot restore text selection if the RichText identifier\n\t\t\t// is not a defined block attribute key. This can be the case if the\n\t\t\t// fallback intance ID is used to store selection (and no RichText\n\t\t\t// identifier is set), or when the identifier is wrong.\n\t\t\t!! attributeDefinition;\n\n\t\tif ( ! attributeDefinition ) {\n\t\t\tif ( typeof attributeKey === 'number' ) {\n\t\t\t\twindow.console.error(\n\t\t\t\t\t`RichText needs an identifier prop that is the block attribute key of the attribute it controls. Its type is expected to be a string, but was ${ typeof attributeKey }`\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\twindow.console.error(\n\t\t\t\t\t'The RichText identifier prop does not match any attributes defined by the block.'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Clone the blocks so we don't insert the character in a \"live\" block.\n\t\tconst cloneA = cloneBlock( blockA );\n\t\tconst cloneB = cloneBlock( blockB );\n\n\t\tif ( canRestoreTextSelection ) {\n\t\t\tconst selectedBlock = clientId === clientIdA ? cloneA : cloneB;\n\t\t\tconst html = selectedBlock.attributes[ attributeKey ];\n\t\t\tconst value = insert(\n\t\t\t\tcreate( { html } ),\n\t\t\t\tSTART_OF_SELECTED_AREA,\n\t\t\t\toffset,\n\t\t\t\toffset\n\t\t\t);\n\n\t\t\tselectedBlock.attributes[ attributeKey ] = toHTMLString( {\n\t\t\t\tvalue,\n\t\t\t} );\n\t\t}\n\n\t\t// We can only merge blocks with similar types\n\t\t// thus, we transform the block to merge first.\n\t\tconst blocksWithTheSameType =\n\t\t\tblockA.name === blockB.name\n\t\t\t\t? [ cloneB ]\n\t\t\t\t: switchToBlockType( cloneB, blockA.name );\n\n\t\t// If the block types can not match, do nothing.\n\t\tif ( ! blocksWithTheSameType || ! blocksWithTheSameType.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Calling the merge to update the attributes and remove the block to be merged.\n\t\tconst updatedAttributes = blockAType.merge(\n\t\t\tcloneA.attributes,\n\t\t\tblocksWithTheSameType[ 0 ].attributes\n\t\t);\n\n\t\tif ( canRestoreTextSelection ) {\n\t\t\tconst newAttributeKey =\n\t\t\t\tretrieveSelectedAttribute( updatedAttributes );\n\t\t\tconst convertedHtml = updatedAttributes[ newAttributeKey ];\n\t\t\tconst convertedValue = create( { html: convertedHtml } );\n\t\t\tconst newOffset = convertedValue.text.indexOf(\n\t\t\t\tSTART_OF_SELECTED_AREA\n\t\t\t);\n\t\t\tconst newValue = remove( convertedValue, newOffset, newOffset + 1 );\n\t\t\tconst newHtml = toHTMLString( { value: newValue } );\n\n\t\t\tupdatedAttributes[ newAttributeKey ] = newHtml;\n\n\t\t\tdispatch.selectionChange(\n\t\t\t\tblockA.clientId,\n\t\t\t\tnewAttributeKey,\n\t\t\t\tnewOffset,\n\t\t\t\tnewOffset\n\t\t\t);\n\t\t}\n\n\t\tdispatch.replaceBlocks(\n\t\t\t[ blockA.clientId, blockB.clientId ],\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\t...blockA,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t...blockA.attributes,\n\t\t\t\t\t\t...updatedAttributes,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...blocksWithTheSameType.slice( 1 ),\n\t\t\t],\n\t\t\t0 // If we don't pass the `indexToSelect` it will default to the last block.\n\t\t);\n\t};\n\n/**\n * Yields action objects used in signalling that the blocks corresponding to\n * the set of specified client IDs are to be removed.\n *\n * @param {string|string[]} clientIds Client IDs of blocks to remove.\n * @param {boolean} selectPrevious True if the previous block\n * or the immediate parent\n * (if no previous block exists)\n * should be selected\n * when a block is removed.\n */\nexport const removeBlocks = ( clientIds, selectPrevious = true ) =>\n\tprivateRemoveBlocks( clientIds, selectPrevious );\n\n/**\n * Returns an action object used in signalling that the block with the\n * specified client ID is to be removed.\n *\n * @param {string} clientId Client ID of block to remove.\n * @param {boolean} selectPrevious True if the previous block should be\n * selected when a block is removed.\n *\n * @return {Object} Action object.\n */\nexport function removeBlock( clientId, selectPrevious ) {\n\treturn removeBlocks( [ clientId ], selectPrevious );\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns an action object used in signalling that the inner blocks with the\n * specified client ID should be replaced.\n *\n * @param {string} rootClientId Client ID of the block whose InnerBlocks will re replaced.\n * @param {Object[]} blocks Block objects to insert as new InnerBlocks\n * @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to false.\n * @param {0|-1|null} initialPosition Initial block position.\n * @return {Object} Action object.\n */\nexport function replaceInnerBlocks(\n\trootClientId,\n\tblocks,\n\tupdateSelection = false,\n\tinitialPosition = 0\n) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn {\n\t\ttype: 'REPLACE_INNER_BLOCKS',\n\t\trootClientId,\n\t\tblocks,\n\t\tupdateSelection,\n\t\tinitialPosition: updateSelection ? initialPosition : null,\n\t\ttime: Date.now(),\n\t};\n}\n\n/**\n * Returns an action object used to toggle the block editing mode between\n * visual and HTML modes.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Action object.\n */\nexport function toggleBlockMode( clientId ) {\n\treturn {\n\t\ttype: 'TOGGLE_BLOCK_MODE',\n\t\tclientId,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has begun to type.\n *\n * @return {Object} Action object.\n */\nexport function startTyping() {\n\treturn {\n\t\ttype: 'START_TYPING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has stopped typing.\n *\n * @return {Object} Action object.\n */\nexport function stopTyping() {\n\treturn {\n\t\ttype: 'STOP_TYPING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has begun to drag blocks.\n *\n * @param {string[]} clientIds An array of client ids being dragged\n *\n * @return {Object} Action object.\n */\nexport function startDraggingBlocks( clientIds = [] ) {\n\treturn {\n\t\ttype: 'START_DRAGGING_BLOCKS',\n\t\tclientIds,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has stopped dragging blocks.\n *\n * @return {Object} Action object.\n */\nexport function stopDraggingBlocks() {\n\treturn {\n\t\ttype: 'STOP_DRAGGING_BLOCKS',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the caret has entered formatted text.\n *\n * @deprecated\n *\n * @return {Object} Action object.\n */\nexport function enterFormattedText() {\n\tdeprecated( 'wp.data.dispatch( \"core/block-editor\" ).enterFormattedText', {\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t} );\n\treturn {\n\t\ttype: 'DO_NOTHING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user caret has exited formatted text.\n *\n * @deprecated\n *\n * @return {Object} Action object.\n */\nexport function exitFormattedText() {\n\tdeprecated( 'wp.data.dispatch( \"core/block-editor\" ).exitFormattedText', {\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t} );\n\treturn {\n\t\ttype: 'DO_NOTHING',\n\t};\n}\n\n/**\n * Action that changes the position of the user caret.\n *\n * @param {string|WPSelection} clientId The selected block client ID.\n * @param {string} attributeKey The selected block attribute key.\n * @param {number} startOffset The start offset.\n * @param {number} endOffset The end offset.\n *\n * @return {Object} Action object.\n */\nexport function selectionChange(\n\tclientId,\n\tattributeKey,\n\tstartOffset,\n\tendOffset\n) {\n\tif ( typeof clientId === 'string' ) {\n\t\treturn {\n\t\t\ttype: 'SELECTION_CHANGE',\n\t\t\tclientId,\n\t\t\tattributeKey,\n\t\t\tstartOffset,\n\t\t\tendOffset,\n\t\t};\n\t}\n\n\treturn { type: 'SELECTION_CHANGE', ...clientId };\n}\n\n/**\n * Action that adds a new block of the default type to the block list.\n *\n * @param {?Object} attributes Optional attributes of the block to assign.\n * @param {?string} rootClientId Optional root client ID of block list on which\n * to append.\n * @param {?number} index Optional index where to insert the default block.\n */\nexport const insertDefaultBlock =\n\t( attributes, rootClientId, index ) =>\n\t( { dispatch } ) => {\n\t\t// Abort if there is no default block type (if it has been unregistered).\n\t\tconst defaultBlockName = getDefaultBlockName();\n\t\tif ( ! defaultBlockName ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst block = createBlock( defaultBlockName, attributes );\n\n\t\treturn dispatch.insertBlock( block, index, rootClientId );\n\t};\n\n/**\n * @typedef {Object< string, Object >} SettingsByClientId\n */\n\n/**\n * Action that changes the nested settings of the given block(s).\n *\n * @param {string | SettingsByClientId} clientId Client ID of the block whose\n * nested setting are being\n * received, or object of settings\n * by client ID.\n * @param {Object} settings Object with the new settings\n * for the nested block.\n *\n * @return {Object} Action object\n */\nexport function updateBlockListSettings( clientId, settings ) {\n\treturn {\n\t\ttype: 'UPDATE_BLOCK_LIST_SETTINGS',\n\t\tclientId,\n\t\tsettings,\n\t};\n}\n\n/**\n * Action that updates the block editor settings.\n *\n * @param {Object} settings Updated settings\n *\n * @return {Object} Action object\n */\nexport function updateSettings( settings ) {\n\treturn __experimentalUpdateSettings( settings, {\n\t\tstripExperimentalSettings: true,\n\t} );\n}\n\n/**\n * Action that signals that a temporary reusable block has been saved\n * in order to switch its temporary id with the real id.\n *\n * @param {string} id Reusable block's id.\n * @param {string} updatedId Updated block's id.\n *\n * @return {Object} Action object.\n */\nexport function __unstableSaveReusableBlock( id, updatedId ) {\n\treturn {\n\t\ttype: 'SAVE_REUSABLE_BLOCK_SUCCESS',\n\t\tid,\n\t\tupdatedId,\n\t};\n}\n\n/**\n * Action that marks the last block change explicitly as persistent.\n *\n * @return {Object} Action object.\n */\nexport function __unstableMarkLastChangeAsPersistent() {\n\treturn { type: 'MARK_LAST_CHANGE_AS_PERSISTENT' };\n}\n\n/**\n * Action that signals that the next block change should be marked explicitly as not persistent.\n *\n * @return {Object} Action object.\n */\nexport function __unstableMarkNextChangeAsNotPersistent() {\n\treturn { type: 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT' };\n}\n\n/**\n * Action that marks the last block change as an automatic change, meaning it was not\n * performed by the user, and can be undone using the `Escape` and `Backspace` keys.\n * This action must be called after the change was made, and any actions that are a\n * consequence of it, so it is recommended to be called at the next idle period to ensure all\n * selection changes have been recorded.\n */\nexport const __unstableMarkAutomaticChange =\n\t() =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'MARK_AUTOMATIC_CHANGE' } );\n\t\tconst { requestIdleCallback = ( cb ) => setTimeout( cb, 100 ) } =\n\t\t\twindow;\n\t\trequestIdleCallback( () => {\n\t\t\tdispatch( { type: 'MARK_AUTOMATIC_CHANGE_FINAL' } );\n\t\t} );\n\t};\n\n/**\n * Action that enables or disables the navigation mode.\n *\n * @param {boolean} isNavigationMode Enable/Disable navigation mode.\n */\nexport const setNavigationMode =\n\t( isNavigationMode = true ) =>\n\t( { dispatch } ) => {\n\t\tdispatch.__unstableSetEditorMode(\n\t\t\tisNavigationMode ? 'navigation' : 'edit'\n\t\t);\n\t};\n\n/**\n * Action that sets the editor mode\n *\n * @param {string} mode Editor mode\n */\nexport const __unstableSetEditorMode =\n\t( mode ) =>\n\t( { dispatch, select } ) => {\n\t\t// When switching to zoom-out mode, we need to select the parent section\n\t\tif ( mode === 'zoom-out' ) {\n\t\t\tconst firstSelectedClientId = select.getBlockSelectionStart();\n\n\t\t\tconst sectionRootClientId = select.getSectionRootClientId();\n\n\t\t\tif ( firstSelectedClientId ) {\n\t\t\t\tlet sectionClientId;\n\n\t\t\t\tif ( sectionRootClientId ) {\n\t\t\t\t\tconst sectionClientIds =\n\t\t\t\t\t\tselect.getBlockOrder( sectionRootClientId );\n\n\t\t\t\t\t// If the selected block is a section block, use it.\n\t\t\t\t\tif ( sectionClientIds?.includes( firstSelectedClientId ) ) {\n\t\t\t\t\t\tsectionClientId = firstSelectedClientId;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If the selected block is not a section block, find\n\t\t\t\t\t\t// the parent section that contains the selected block.\n\t\t\t\t\t\tsectionClientId = select\n\t\t\t\t\t\t\t.getBlockParents( firstSelectedClientId )\n\t\t\t\t\t\t\t.find( ( parent ) =>\n\t\t\t\t\t\t\t\tsectionClientIds.includes( parent )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsectionClientId = select.getBlockHierarchyRootClientId(\n\t\t\t\t\t\tfirstSelectedClientId\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( sectionClientId ) {\n\t\t\t\t\tdispatch.selectBlock( sectionClientId );\n\t\t\t\t} else {\n\t\t\t\t\tdispatch.clearSelectedBlock();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdispatch( { type: 'SET_EDITOR_MODE', mode } );\n\n\t\tif ( mode === 'navigation' ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.'\n\t\t\t\t)\n\t\t\t);\n\t\t} else if ( mode === 'edit' ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'You are currently in edit mode. To return to the navigation mode, press Escape.'\n\t\t\t\t)\n\t\t\t);\n\t\t} else if ( mode === 'zoom-out' ) {\n\t\t\tspeak( __( 'You are currently in zoom-out mode.' ) );\n\t\t}\n\t};\n\n/**\n * Action that enables or disables the block moving mode.\n *\n * @param {string|null} hasBlockMovingClientId Enable/Disable block moving mode.\n */\nexport const setBlockMovingClientId =\n\t( hasBlockMovingClientId = null ) =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'SET_BLOCK_MOVING_MODE', hasBlockMovingClientId } );\n\n\t\tif ( hasBlockMovingClientId ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.'\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Action that duplicates a list of blocks.\n *\n * @param {string[]} clientIds\n * @param {boolean} updateSelection\n */\nexport const duplicateBlocks =\n\t( clientIds, updateSelection = true ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! clientIds || ! clientIds.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return early if blocks don't exist.\n\t\tconst blocks = select.getBlocksByClientId( clientIds );\n\t\tif ( blocks.some( ( block ) => ! block ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return early if blocks don't support multiple usage.\n\t\tconst blockNames = blocks.map( ( block ) => block.name );\n\t\tif (\n\t\t\tblockNames.some(\n\t\t\t\t( blockName ) =>\n\t\t\t\t\t! hasBlockSupport( blockName, 'multiple', true )\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rootClientId = select.getBlockRootClientId( clientIds[ 0 ] );\n\t\tconst clientIdsArray = castArray( clientIds );\n\t\tconst lastSelectedIndex = select.getBlockIndex(\n\t\t\tclientIdsArray[ clientIdsArray.length - 1 ]\n\t\t);\n\t\tconst clonedBlocks = blocks.map( ( block ) =>\n\t\t\t__experimentalCloneSanitizedBlock( block )\n\t\t);\n\t\tdispatch.insertBlocks(\n\t\t\tclonedBlocks,\n\t\t\tlastSelectedIndex + 1,\n\t\t\trootClientId,\n\t\t\tupdateSelection\n\t\t);\n\t\tif ( clonedBlocks.length > 1 && updateSelection ) {\n\t\t\tdispatch.multiSelect(\n\t\t\t\tclonedBlocks[ 0 ].clientId,\n\t\t\t\tclonedBlocks[ clonedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t\treturn clonedBlocks.map( ( block ) => block.clientId );\n\t};\n\n/**\n * Action that inserts a default block before a given block.\n *\n * @param {string} clientId\n */\nexport const insertBeforeBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! clientId ) {\n\t\t\treturn;\n\t\t}\n\t\tconst rootClientId = select.getBlockRootClientId( clientId );\n\t\tconst isLocked = select.getTemplateLock( rootClientId );\n\t\tif ( isLocked ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockIndex = select.getBlockIndex( clientId );\n\t\tconst directInsertBlock = rootClientId\n\t\t\t? select.getDirectInsertBlock( rootClientId )\n\t\t\t: null;\n\n\t\tif ( ! directInsertBlock ) {\n\t\t\treturn dispatch.insertDefaultBlock( {}, rootClientId, blockIndex );\n\t\t}\n\n\t\tconst copiedAttributes = {};\n\t\tif ( directInsertBlock.attributesToCopy ) {\n\t\t\tconst attributes = select.getBlockAttributes( clientId );\n\t\t\tdirectInsertBlock.attributesToCopy.forEach( ( key ) => {\n\t\t\t\tif ( attributes[ key ] ) {\n\t\t\t\t\tcopiedAttributes[ key ] = attributes[ key ];\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tconst block = createBlock( directInsertBlock.name, {\n\t\t\t...directInsertBlock.attributes,\n\t\t\t...copiedAttributes,\n\t\t} );\n\t\treturn dispatch.insertBlock( block, blockIndex, rootClientId );\n\t};\n\n/**\n * Action that inserts a default block after a given block.\n *\n * @param {string} clientId\n */\nexport const insertAfterBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! clientId ) {\n\t\t\treturn;\n\t\t}\n\t\tconst rootClientId = select.getBlockRootClientId( clientId );\n\t\tconst isLocked = select.getTemplateLock( rootClientId );\n\t\tif ( isLocked ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockIndex = select.getBlockIndex( clientId );\n\t\tconst directInsertBlock = rootClientId\n\t\t\t? select.getDirectInsertBlock( rootClientId )\n\t\t\t: null;\n\n\t\tif ( ! directInsertBlock ) {\n\t\t\treturn dispatch.insertDefaultBlock(\n\t\t\t\t{},\n\t\t\t\trootClientId,\n\t\t\t\tblockIndex + 1\n\t\t\t);\n\t\t}\n\n\t\tconst copiedAttributes = {};\n\t\tif ( directInsertBlock.attributesToCopy ) {\n\t\t\tconst attributes = select.getBlockAttributes( clientId );\n\t\t\tdirectInsertBlock.attributesToCopy.forEach( ( key ) => {\n\t\t\t\tif ( attributes[ key ] ) {\n\t\t\t\t\tcopiedAttributes[ key ] = attributes[ key ];\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tconst block = createBlock( directInsertBlock.name, {\n\t\t\t...directInsertBlock.attributes,\n\t\t\t...copiedAttributes,\n\t\t} );\n\t\treturn dispatch.insertBlock( block, blockIndex + 1, rootClientId );\n\t};\n\n/**\n * Action that toggles the highlighted block state.\n *\n * @param {string} clientId The block's clientId.\n * @param {boolean} isHighlighted The highlight state.\n */\nexport function toggleBlockHighlight( clientId, isHighlighted ) {\n\treturn {\n\t\ttype: 'TOGGLE_BLOCK_HIGHLIGHT',\n\t\tclientId,\n\t\tisHighlighted,\n\t};\n}\n\n/**\n * Action that \"flashes\" the block with a given `clientId` by rhythmically highlighting it.\n *\n * @param {string} clientId Target block client ID.\n */\nexport const flashBlock =\n\t( clientId ) =>\n\tasync ( { dispatch } ) => {\n\t\tdispatch( toggleBlockHighlight( clientId, true ) );\n\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 150 ) );\n\t\tdispatch( toggleBlockHighlight( clientId, false ) );\n\t};\n\n/**\n * Action that sets whether a block has controlled inner blocks.\n *\n * @param {string} clientId The block's clientId.\n * @param {boolean} hasControlledInnerBlocks True if the block's inner blocks are controlled.\n */\nexport function setHasControlledInnerBlocks(\n\tclientId,\n\thasControlledInnerBlocks\n) {\n\treturn {\n\t\ttype: 'SET_HAS_CONTROLLED_INNER_BLOCKS',\n\t\thasControlledInnerBlocks,\n\t\tclientId,\n\t};\n}\n\n/**\n * Action that sets whether given blocks are visible on the canvas.\n *\n * @param {Record} updates For each block's clientId, its new visibility setting.\n */\nexport function setBlockVisibility( updates ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_VISIBILITY',\n\t\tupdates,\n\t};\n}\n\n/**\n * Action that sets whether a block is being temporarily edited as blocks.\n *\n * DO-NOT-USE in production.\n * This action is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @param {?string} temporarilyEditingAsBlocks The block's clientId being temporarily edited as blocks.\n * @param {?string} focusModeToRevert The focus mode to revert after temporarily edit as blocks finishes.\n */\nexport function __unstableSetTemporarilyEditingAsBlocks(\n\ttemporarilyEditingAsBlocks,\n\tfocusModeToRevert\n) {\n\treturn {\n\t\ttype: 'SET_TEMPORARILY_EDITING_AS_BLOCKS',\n\t\ttemporarilyEditingAsBlocks,\n\t\tfocusModeToRevert,\n\t};\n}\n\n/**\n * Interface for inserter media requests.\n *\n * @typedef {Object} InserterMediaRequest\n * @property {number} per_page How many items to fetch per page.\n * @property {string} search The search term to use for filtering the results.\n */\n\n/**\n * Interface for inserter media responses. Any media resource should\n * map their response to this interface, in order to create the core\n * WordPress media blocks (image, video, audio).\n *\n * @typedef {Object} InserterMediaItem\n * @property {string} title The title of the media item.\n * @property {string} url The source url of the media item.\n * @property {string} [previewUrl] The preview source url of the media item to display in the media list.\n * @property {number} [id] The WordPress id of the media item.\n * @property {number|string} [sourceId] The id of the media item from external source.\n * @property {string} [alt] The alt text of the media item.\n * @property {string} [caption] The caption of the media item.\n */\n\n/**\n * Registers a new inserter media category. Once registered, the media category is\n * available in the inserter's media tab.\n *\n * The following interfaces are used:\n *\n * _Type Definition_\n *\n * - _InserterMediaRequest_ `Object`: Interface for inserter media requests.\n *\n * _Properties_\n *\n * - _per_page_ `number`: How many items to fetch per page.\n * - _search_ `string`: The search term to use for filtering the results.\n *\n * _Type Definition_\n *\n * - _InserterMediaItem_ `Object`: Interface for inserter media responses. Any media resource should\n * map their response to this interface, in order to create the core\n * WordPress media blocks (image, video, audio).\n *\n * _Properties_\n *\n * - _title_ `string`: The title of the media item.\n * - _url_ `string: The source url of the media item.\n * - _previewUrl_ `[string]`: The preview source url of the media item to display in the media list.\n * - _id_ `[number]`: The WordPress id of the media item.\n * - _sourceId_ `[number|string]`: The id of the media item from external source.\n * - _alt_ `[string]`: The alt text of the media item.\n * - _caption_ `[string]`: The caption of the media item.\n *\n * @param {InserterMediaCategory} category The inserter media category to register.\n *\n * @example\n * ```js\n *\n * wp.data.dispatch('core/block-editor').registerInserterMediaCategory( {\n * \t name: 'openverse',\n * \t labels: {\n * \t \tname: 'Openverse',\n * \t \tsearch_items: 'Search Openverse',\n * \t },\n * \t mediaType: 'image',\n * \t async fetch( query = {} ) {\n * \t \tconst defaultArgs = {\n * \t \t\tmature: false,\n * \t \t\texcluded_source: 'flickr,inaturalist,wikimedia',\n * \t \t\tlicense: 'pdm,cc0',\n * \t \t};\n * \t \tconst finalQuery = { ...query, ...defaultArgs };\n * \t \t// Sometimes you might need to map the supported request params according to `InserterMediaRequest`.\n * \t \t// interface. In this example the `search` query param is named `q`.\n * \t \tconst mapFromInserterMediaRequest = {\n * \t \t\tper_page: 'page_size',\n * \t \t\tsearch: 'q',\n * \t \t};\n * \t \tconst url = new URL( 'https://api.openverse.org/v1/images/' );\n * \t \tObject.entries( finalQuery ).forEach( ( [ key, value ] ) => {\n * \t \t\tconst queryKey = mapFromInserterMediaRequest[ key ] || key;\n * \t \t\turl.searchParams.set( queryKey, value );\n * \t \t} );\n * \t \tconst response = await window.fetch( url, {\n * \t \t\theaders: {\n * \t \t\t\t'User-Agent': 'WordPress/inserter-media-fetch',\n * \t \t\t},\n * \t \t} );\n * \t \tconst jsonResponse = await response.json();\n * \t \tconst results = jsonResponse.results;\n * \t \treturn results.map( ( result ) => ( {\n * \t \t\t...result,\n * \t \t\t// If your response result includes an `id` prop that you want to access later, it should\n * \t \t\t// be mapped to `InserterMediaItem`'s `sourceId` prop. This can be useful if you provide\n * \t \t\t// a report URL getter.\n * \t \t\t// Additionally you should always clear the `id` value of your response results because\n * \t \t\t// it is used to identify WordPress media items.\n * \t \t\tsourceId: result.id,\n * \t \t\tid: undefined,\n * \t \t\tcaption: result.caption,\n * \t \t\tpreviewUrl: result.thumbnail,\n * \t \t} ) );\n * \t },\n * \t getReportUrl: ( { sourceId } ) =>\n * \t \t`https://wordpress.org/openverse/image/${ sourceId }/report/`,\n * \t isExternalResource: true,\n * } );\n * ```\n *\n * @typedef {Object} InserterMediaCategory Interface for inserter media category.\n * @property {string} name The name of the media category, that should be unique among all media categories.\n * @property {Object} labels Labels for the media category.\n * @property {string} labels.name General name of the media category. It's used in the inserter media items list.\n * @property {string} [labels.search_items='Search'] Label for searching items. Default is ‘Search Posts’ / ‘Search Pages’.\n * @property {('image'|'audio'|'video')} mediaType The media type of the media category.\n * @property {(InserterMediaRequest) => Promise} fetch The function to fetch media items for the category.\n * @property {(InserterMediaItem) => string} [getReportUrl] If the media category supports reporting media items, this function should return\n * the report url for the media item. It accepts the `InserterMediaItem` as an argument.\n * @property {boolean} [isExternalResource] If the media category is an external resource, this should be set to true.\n * This is used to avoid making a request to the external resource when the user\n */\nexport const registerInserterMediaCategory =\n\t( category ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! category || typeof category !== 'object' ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should be an `InserterMediaCategory` object.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ( ! category.name ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should have a `name` that should be unique among all media categories.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ( ! category.labels?.name ) {\n\t\t\tconsole.error( 'Category should have a `labels.name`.' );\n\t\t\treturn;\n\t\t}\n\t\tif ( ! [ 'image', 'audio', 'video' ].includes( category.mediaType ) ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should have `mediaType` property that is one of `image|audio|video`.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ( ! category.fetch || typeof category.fetch !== 'function' ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should have a `fetch` function defined with the following signature `(InserterMediaRequest) => Promise`.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst registeredInserterMediaCategories =\n\t\t\tselect.getRegisteredInserterMediaCategories();\n\t\tif (\n\t\t\tregisteredInserterMediaCategories.some(\n\t\t\t\t( { name } ) => name === category.name\n\t\t\t)\n\t\t) {\n\t\t\tconsole.error(\n\t\t\t\t`A category is already registered with the same name: \"${ category.name }\".`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tregisteredInserterMediaCategories.some(\n\t\t\t\t( { labels: { name } = {} } ) => name === category.labels?.name\n\t\t\t)\n\t\t) {\n\t\t\tconsole.error(\n\t\t\t\t`A category is already registered with the same labels.name: \"${ category.labels.name }\".`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\t// `inserterMediaCategories` is a private block editor setting, which means it cannot\n\t\t// be updated through the public `updateSettings` action. We preserve this setting as\n\t\t// private, so extenders can only add new inserter media categories and don't have any\n\t\t// control over the core media categories.\n\t\tdispatch( {\n\t\t\ttype: 'REGISTER_INSERTER_MEDIA_CATEGORY',\n\t\t\tcategory: { ...category, isExternalResource: true },\n\t\t} );\n\t};\n\n/**\n * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode\n */\n\n/**\n * Sets the block editing mode for a given block.\n *\n * @see useBlockEditingMode\n *\n * @param {string} clientId The block client ID, or `''` for the root container.\n * @param {BlockEditingMode} mode The block editing mode. One of `'disabled'`,\n * `'contentOnly'`, or `'default'`.\n *\n * @return {Object} Action object.\n */\nexport function setBlockEditingMode( clientId = '', mode ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_EDITING_MODE',\n\t\tclientId,\n\t\tmode,\n\t};\n}\n\n/**\n * Clears the block editing mode for a given block.\n *\n * @see useBlockEditingMode\n *\n * @param {string} clientId The block client ID, or `''` for the root container.\n *\n * @return {Object} Action object.\n */\nexport function unsetBlockEditingMode( clientId = '' ) {\n\treturn {\n\t\ttype: 'UNSET_BLOCK_EDITING_MODE',\n\t\tclientId,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { createReduxStore, registerStore } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as privateActions from './private-actions';\nimport * as privateSelectors from './private-selectors';\nimport * as actions from './actions';\nimport { STORE_NAME } from './constants';\nimport { unlock } from '../lock-unlock';\n\n/**\n * Block editor data store configuration.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore\n */\nexport const storeConfig = {\n\treducer,\n\tselectors,\n\tactions,\n};\n\n/**\n * Store definition for the block editor namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n */\nexport const store = createReduxStore( STORE_NAME, {\n\t...storeConfig,\n\tpersist: [ 'preferences' ],\n} );\n\n// We will be able to use the `register` function once we switch\n// the \"preferences\" persistence to use the new preferences package.\nconst registeredStore = registerStore( STORE_NAME, {\n\t...storeConfig,\n\tpersist: [ 'preferences' ],\n} );\nunlock( registeredStore ).registerPrivateActions( privateActions );\nunlock( registeredStore ).registerPrivateSelectors( privateSelectors );\n\n// TODO: Remove once we switch to the `register` function (see above).\n//\n// Until then, private functions also need to be attached to the original\n// `store` descriptor in order to avoid unit tests failing, which could happen\n// when tests create new registries in which they register stores.\n//\n// @see https://github.com/WordPress/gutenberg/pull/51145#discussion_r1239999590\nunlock( store ).registerPrivateActions( privateActions );\nunlock( store ).registerPrivateSelectors( privateSelectors );\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Hook that retrieves the given settings for the block instance in use.\n *\n * It looks up the settings first in the block instance hierarchy.\n * If none are found, it'll look them up in the block editor settings.\n *\n * @param {string[]} paths The paths to the settings.\n * @return {any[]} Returns the values defined for the settings.\n * @example\n * ```js\n * const [ fixed, sticky ] = useSettings( 'position.fixed', 'position.sticky' );\n * ```\n */\nexport function useSettings( ...paths ) {\n\tconst { clientId = null } = useBlockEditContext();\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getBlockSettings(\n\t\t\t\tclientId,\n\t\t\t\t...paths\n\t\t\t),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[ clientId, ...paths ]\n\t);\n}\n\n/**\n * Hook that retrieves the given setting for the block instance in use.\n *\n * It looks up the setting first in the block instance hierarchy.\n * If none is found, it'll look it up in the block editor settings.\n *\n * @deprecated 6.5.0 Use useSettings instead.\n *\n * @param {string} path The path to the setting.\n * @return {any} Returns the value defined for the setting.\n * @example\n * ```js\n * const isEnabled = useSetting( 'typography.dropCap' );\n * ```\n */\nexport function useSetting( path ) {\n\tdeprecated( 'wp.blockEditor.useSetting', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.useSettings',\n\t\tnote: 'The new useSettings function can retrieve multiple settings at once, with better performance.',\n\t} );\n\n\tconst [ value ] = useSettings( path );\n\treturn value;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"styleEngine\"];","/**\n * The fluid utilities must match the backend equivalent.\n * See: gutenberg_get_typography_font_size_value() in lib/block-supports/typography.php\n * ---------------------------------------------------------------\n */\n\n// Defaults.\nconst DEFAULT_MAXIMUM_VIEWPORT_WIDTH = '1600px';\nconst DEFAULT_MINIMUM_VIEWPORT_WIDTH = '320px';\nconst DEFAULT_SCALE_FACTOR = 1;\nconst DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN = 0.25;\nconst DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX = 0.75;\nconst DEFAULT_MINIMUM_FONT_SIZE_LIMIT = '14px';\n\n/**\n * Computes a fluid font-size value that uses clamp(). A minimum and maximum\n * font size OR a single font size can be specified.\n *\n * If a single font size is specified, it is scaled up and down using a logarithmic scale.\n *\n * @example\n * ```js\n * // Calculate fluid font-size value from a minimum and maximum value.\n * const fontSize = getComputedFluidTypographyValue( {\n * minimumFontSize: '20px',\n * maximumFontSize: '45px'\n * } );\n * // Calculate fluid font-size value from a single font size.\n * const fontSize = getComputedFluidTypographyValue( {\n * fontSize: '30px',\n * } );\n * ```\n *\n * @param {Object} args\n * @param {?string} args.minimumViewportWidth Minimum viewport size from which type will have fluidity. Optional if fontSize is specified.\n * @param {?string} args.maximumViewportWidth Maximum size up to which type will have fluidity. Optional if fontSize is specified.\n * @param {string|number} [args.fontSize] Size to derive maximumFontSize and minimumFontSize from, if necessary. Optional if minimumFontSize and maximumFontSize are specified.\n * @param {?string} args.maximumFontSize Maximum font size for any clamp() calculation. Optional.\n * @param {?string} args.minimumFontSize Minimum font size for any clamp() calculation. Optional.\n * @param {?number} args.scaleFactor A scale factor to determine how fast a font scales within boundaries. Optional.\n * @param {?string} args.minimumFontSizeLimit The smallest a calculated font size may be. Optional.\n *\n * @return {string|null} A font-size value using clamp().\n */\nexport function getComputedFluidTypographyValue( {\n\tminimumFontSize,\n\tmaximumFontSize,\n\tfontSize,\n\tminimumViewportWidth = DEFAULT_MINIMUM_VIEWPORT_WIDTH,\n\tmaximumViewportWidth = DEFAULT_MAXIMUM_VIEWPORT_WIDTH,\n\tscaleFactor = DEFAULT_SCALE_FACTOR,\n\tminimumFontSizeLimit,\n} ) {\n\t// Validate incoming settings and set defaults.\n\tminimumFontSizeLimit = !! getTypographyValueAndUnit( minimumFontSizeLimit )\n\t\t? minimumFontSizeLimit\n\t\t: DEFAULT_MINIMUM_FONT_SIZE_LIMIT;\n\n\t/*\n\t * Calculates missing minimumFontSize and maximumFontSize from\n\t * defaultFontSize if provided.\n\t */\n\tif ( fontSize ) {\n\t\t// Parses default font size.\n\t\tconst fontSizeParsed = getTypographyValueAndUnit( fontSize );\n\n\t\t// Protect against invalid units.\n\t\tif ( ! fontSizeParsed?.unit ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Parses the minimum font size limit, so we can perform checks using it.\n\t\tconst minimumFontSizeLimitParsed = getTypographyValueAndUnit(\n\t\t\tminimumFontSizeLimit,\n\t\t\t{\n\t\t\t\tcoerceTo: fontSizeParsed.unit,\n\t\t\t}\n\t\t);\n\n\t\t// Don't enforce minimum font size if a font size has explicitly set a min and max value.\n\t\tif (\n\t\t\t!! minimumFontSizeLimitParsed?.value &&\n\t\t\t! minimumFontSize &&\n\t\t\t! maximumFontSize\n\t\t) {\n\t\t\t/*\n\t\t\t * If a minimum size was not passed to this function\n\t\t\t * and the user-defined font size is lower than $minimum_font_size_limit,\n\t\t\t * do not calculate a fluid value.\n\t\t\t */\n\t\t\tif ( fontSizeParsed?.value <= minimumFontSizeLimitParsed?.value ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// If no fluid max font size is available use the incoming value.\n\t\tif ( ! maximumFontSize ) {\n\t\t\tmaximumFontSize = `${ fontSizeParsed.value }${ fontSizeParsed.unit }`;\n\t\t}\n\n\t\t/*\n\t\t * If no minimumFontSize is provided, create one using\n\t\t * the given font size multiplied by the min font size scale factor.\n\t\t */\n\t\tif ( ! minimumFontSize ) {\n\t\t\tconst fontSizeValueInPx =\n\t\t\t\tfontSizeParsed.unit === 'px'\n\t\t\t\t\t? fontSizeParsed.value\n\t\t\t\t\t: fontSizeParsed.value * 16;\n\n\t\t\t/*\n\t\t\t * The scale factor is a multiplier that affects how quickly the curve will move towards the minimum,\n\t\t\t * that is, how quickly the size factor reaches 0 given increasing font size values.\n\t\t\t * For a - b * log2(), lower values of b will make the curve move towards the minimum faster.\n\t\t\t * The scale factor is constrained between min and max values.\n\t\t\t */\n\t\t\tconst minimumFontSizeFactor = Math.min(\n\t\t\t\tMath.max(\n\t\t\t\t\t1 - 0.075 * Math.log2( fontSizeValueInPx ),\n\t\t\t\t\tDEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN\n\t\t\t\t),\n\t\t\t\tDEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX\n\t\t\t);\n\n\t\t\t// Calculates the minimum font size.\n\t\t\tconst calculatedMinimumFontSize = roundToPrecision(\n\t\t\t\tfontSizeParsed.value * minimumFontSizeFactor,\n\t\t\t\t3\n\t\t\t);\n\n\t\t\t// Only use calculated min font size if it's > $minimum_font_size_limit value.\n\t\t\tif (\n\t\t\t\t!! minimumFontSizeLimitParsed?.value &&\n\t\t\t\tcalculatedMinimumFontSize < minimumFontSizeLimitParsed?.value\n\t\t\t) {\n\t\t\t\tminimumFontSize = `${ minimumFontSizeLimitParsed.value }${ minimumFontSizeLimitParsed.unit }`;\n\t\t\t} else {\n\t\t\t\tminimumFontSize = `${ calculatedMinimumFontSize }${ fontSizeParsed.unit }`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Grab the minimum font size and normalize it in order to use the value for calculations.\n\tconst minimumFontSizeParsed = getTypographyValueAndUnit( minimumFontSize );\n\n\t// We get a 'preferred' unit to keep units consistent when calculating,\n\t// otherwise the result will not be accurate.\n\tconst fontSizeUnit = minimumFontSizeParsed?.unit || 'rem';\n\n\t// Grabs the maximum font size and normalize it in order to use the value for calculations.\n\tconst maximumFontSizeParsed = getTypographyValueAndUnit( maximumFontSize, {\n\t\tcoerceTo: fontSizeUnit,\n\t} );\n\n\t// Checks for mandatory min and max sizes, and protects against unsupported units.\n\tif ( ! minimumFontSizeParsed || ! maximumFontSizeParsed ) {\n\t\treturn null;\n\t}\n\n\t// Uses rem for accessible fluid target font scaling.\n\tconst minimumFontSizeRem = getTypographyValueAndUnit( minimumFontSize, {\n\t\tcoerceTo: 'rem',\n\t} );\n\n\t// Viewport widths defined for fluid typography. Normalize units\n\tconst maximumViewportWidthParsed = getTypographyValueAndUnit(\n\t\tmaximumViewportWidth,\n\t\t{ coerceTo: fontSizeUnit }\n\t);\n\tconst minimumViewportWidthParsed = getTypographyValueAndUnit(\n\t\tminimumViewportWidth,\n\t\t{ coerceTo: fontSizeUnit }\n\t);\n\n\t// Protect against unsupported units.\n\tif (\n\t\t! maximumViewportWidthParsed ||\n\t\t! minimumViewportWidthParsed ||\n\t\t! minimumFontSizeRem\n\t) {\n\t\treturn null;\n\t}\n\n\t// Calculates the linear factor denominator. If it's 0, we cannot calculate a fluid value.\n\tconst linearDenominator =\n\t\tmaximumViewportWidthParsed.value - minimumViewportWidthParsed.value;\n\tif ( ! linearDenominator ) {\n\t\treturn null;\n\t}\n\n\t// Build CSS rule.\n\t// Borrowed from https://websemantics.uk/tools/responsive-font-calculator/.\n\tconst minViewportWidthOffsetValue = roundToPrecision(\n\t\tminimumViewportWidthParsed.value / 100,\n\t\t3\n\t);\n\n\tconst viewportWidthOffset =\n\t\troundToPrecision( minViewportWidthOffsetValue, 3 ) + fontSizeUnit;\n\tconst linearFactor =\n\t\t100 *\n\t\t( ( maximumFontSizeParsed.value - minimumFontSizeParsed.value ) /\n\t\t\tlinearDenominator );\n\tconst linearFactorScaled = roundToPrecision(\n\t\t( linearFactor || 1 ) * scaleFactor,\n\t\t3\n\t);\n\tconst fluidTargetFontSize = `${ minimumFontSizeRem.value }${ minimumFontSizeRem.unit } + ((1vw - ${ viewportWidthOffset }) * ${ linearFactorScaled })`;\n\n\treturn `clamp(${ minimumFontSize }, ${ fluidTargetFontSize }, ${ maximumFontSize })`;\n}\n\n/**\n * Internal method that checks a string for a unit and value and returns an array consisting of `'value'` and `'unit'`, e.g., [ '42', 'rem' ].\n * A raw font size of `value + unit` is expected. If the value is an integer, it will convert to `value + 'px'`.\n *\n * @param {string|number} rawValue Raw size value from theme.json.\n * @param {Object|undefined} options Calculation options.\n *\n * @return {{ unit: string, value: number }|null} An object consisting of `'value'` and `'unit'` properties.\n */\nexport function getTypographyValueAndUnit( rawValue, options = {} ) {\n\tif ( typeof rawValue !== 'string' && typeof rawValue !== 'number' ) {\n\t\treturn null;\n\t}\n\n\t// Converts numeric values to pixel values by default.\n\tif ( isFinite( rawValue ) ) {\n\t\trawValue = `${ rawValue }px`;\n\t}\n\n\tconst { coerceTo, rootSizeValue, acceptableUnits } = {\n\t\tcoerceTo: '',\n\t\t// Default browser font size. Later we could inject some JS to compute this `getComputedStyle( document.querySelector( \"html\" ) ).fontSize`.\n\t\trootSizeValue: 16,\n\t\tacceptableUnits: [ 'rem', 'px', 'em' ],\n\t\t...options,\n\t};\n\n\tconst acceptableUnitsGroup = acceptableUnits?.join( '|' );\n\tconst regexUnits = new RegExp(\n\t\t`^(\\\\d*\\\\.?\\\\d+)(${ acceptableUnitsGroup }){1,1}$`\n\t);\n\n\tconst matches = rawValue.match( regexUnits );\n\n\t// We need a number value and a unit.\n\tif ( ! matches || matches.length < 3 ) {\n\t\treturn null;\n\t}\n\n\tlet [ , value, unit ] = matches;\n\n\tlet returnValue = parseFloat( value );\n\n\tif ( 'px' === coerceTo && ( 'em' === unit || 'rem' === unit ) ) {\n\t\treturnValue = returnValue * rootSizeValue;\n\t\tunit = coerceTo;\n\t}\n\n\tif ( 'px' === unit && ( 'em' === coerceTo || 'rem' === coerceTo ) ) {\n\t\treturnValue = returnValue / rootSizeValue;\n\t\tunit = coerceTo;\n\t}\n\n\t/*\n\t * No calculation is required if swapping between em and rem yet,\n\t * since we assume a root size value. Later we might like to differentiate between\n\t * :root font size (rem) and parent element font size (em) relativity.\n\t */\n\tif (\n\t\t( 'em' === coerceTo || 'rem' === coerceTo ) &&\n\t\t( 'em' === unit || 'rem' === unit )\n\t) {\n\t\tunit = coerceTo;\n\t}\n\n\treturn {\n\t\tvalue: roundToPrecision( returnValue, 3 ),\n\t\tunit,\n\t};\n}\n\n/**\n * Returns a value rounded to defined precision.\n * Returns `undefined` if the value is not a valid finite number.\n *\n * @param {number} value Raw value.\n * @param {number} digits The number of digits to appear after the decimal point\n *\n * @return {number|undefined} Value rounded to standard precision.\n */\nexport function roundToPrecision( value, digits = 3 ) {\n\tconst base = Math.pow( 10, digits );\n\treturn Number.isFinite( value )\n\t\t? parseFloat( Math.round( value * base ) / base )\n\t\t: undefined;\n}\n","/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Formats font weights to human readable names.\n *\n * @param {string} fontWeight font weight string\n * @return {Object} new object with formatted font weight\n */\nexport function formatFontWeight( fontWeight ) {\n\tif ( ! fontWeight ) {\n\t\treturn {};\n\t}\n\n\tif ( typeof fontWeight === 'object' ) {\n\t\treturn fontWeight;\n\t}\n\n\tlet name;\n\n\tswitch ( fontWeight ) {\n\t\tcase 'normal':\n\t\tcase '400':\n\t\t\tname = _x( 'Regular', 'font weight' );\n\t\t\tbreak;\n\t\tcase 'bold':\n\t\tcase '700':\n\t\t\tname = _x( 'Bold', 'font weight' );\n\t\t\tbreak;\n\t\tcase '100':\n\t\t\tname = _x( 'Thin', 'font weight' );\n\t\t\tbreak;\n\t\tcase '200':\n\t\t\tname = _x( 'Extra Light', 'font weight' );\n\t\t\tbreak;\n\t\tcase '300':\n\t\t\tname = _x( 'Light', 'font weight' );\n\t\t\tbreak;\n\t\tcase '500':\n\t\t\tname = _x( 'Medium', 'font weight' );\n\t\t\tbreak;\n\t\tcase '600':\n\t\t\tname = _x( 'Semi Bold', 'font weight' );\n\t\t\tbreak;\n\t\tcase '800':\n\t\t\tname = _x( 'Extra Bold', 'font weight' );\n\t\t\tbreak;\n\t\tcase '900':\n\t\t\tname = _x( 'Black', 'font weight' );\n\t\t\tbreak;\n\t\tcase '1000':\n\t\t\tname = _x( 'Extra Black', 'font weight' );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tname = fontWeight;\n\t\t\tbreak;\n\t}\n\n\treturn { name, value: fontWeight };\n}\n","/**\n * WordPress dependencies\n */\nimport { _x, __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { formatFontStyle } from './format-font-style';\nimport { formatFontWeight } from './format-font-weight';\n\nconst FONT_STYLES = [\n\t{\n\t\tname: _x( 'Regular', 'font style' ),\n\t\tvalue: 'normal',\n\t},\n\t{\n\t\tname: _x( 'Italic', 'font style' ),\n\t\tvalue: 'italic',\n\t},\n];\n\nconst FONT_WEIGHTS = [\n\t{\n\t\tname: _x( 'Thin', 'font weight' ),\n\t\tvalue: '100',\n\t},\n\t{\n\t\tname: _x( 'Extra Light', 'font weight' ),\n\t\tvalue: '200',\n\t},\n\t{\n\t\tname: _x( 'Light', 'font weight' ),\n\t\tvalue: '300',\n\t},\n\t{\n\t\tname: _x( 'Regular', 'font weight' ),\n\t\tvalue: '400',\n\t},\n\t{\n\t\tname: _x( 'Medium', 'font weight' ),\n\t\tvalue: '500',\n\t},\n\t{\n\t\tname: _x( 'Semi Bold', 'font weight' ),\n\t\tvalue: '600',\n\t},\n\t{\n\t\tname: _x( 'Bold', 'font weight' ),\n\t\tvalue: '700',\n\t},\n\t{\n\t\tname: _x( 'Extra Bold', 'font weight' ),\n\t\tvalue: '800',\n\t},\n\t{\n\t\tname: _x( 'Black', 'font weight' ),\n\t\tvalue: '900',\n\t},\n\t{\n\t\tname: _x( 'Extra Black', 'font weight' ),\n\t\tvalue: '1000',\n\t},\n];\n\n/**\n * Builds a list of font style and weight options based on font family faces.\n * Defaults to the standard font styles and weights if no font family faces are provided.\n *\n * @param {Array} fontFamilyFaces font family faces array\n * @return {Object} new object with combined and separated font style and weight properties\n */\nexport function getFontStylesAndWeights( fontFamilyFaces ) {\n\tlet fontStyles = [];\n\tlet fontWeights = [];\n\tconst combinedStyleAndWeightOptions = [];\n\tconst isSystemFont = ! fontFamilyFaces || fontFamilyFaces?.length === 0;\n\tlet isVariableFont = false;\n\n\tfontFamilyFaces?.forEach( ( face ) => {\n\t\t// Check for variable font by looking for a space in the font weight value. e.g. \"100 900\"\n\t\tif (\n\t\t\t'string' === typeof face.fontWeight &&\n\t\t\t/\\s/.test( face.fontWeight.trim() )\n\t\t) {\n\t\t\tisVariableFont = true;\n\n\t\t\t// Find font weight start and end values.\n\t\t\tlet [ startValue, endValue ] = face.fontWeight.split( ' ' );\n\t\t\tstartValue = parseInt( startValue.slice( 0, 1 ) );\n\t\t\tif ( endValue === '1000' ) {\n\t\t\t\tendValue = 10;\n\t\t\t} else {\n\t\t\t\tendValue = parseInt( endValue.slice( 0, 1 ) );\n\t\t\t}\n\n\t\t\t// Create font weight options for available variable weights.\n\t\t\tfor ( let i = startValue; i <= endValue; i++ ) {\n\t\t\t\tconst fontWeightValue = `${ i.toString() }00`;\n\t\t\t\tif (\n\t\t\t\t\t! fontWeights.some(\n\t\t\t\t\t\t( weight ) => weight.value === fontWeightValue\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tfontWeights.push( formatFontWeight( fontWeightValue ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Format font style and weight values.\n\t\tconst fontWeight = formatFontWeight(\n\t\t\t'number' === typeof face.fontWeight\n\t\t\t\t? face.fontWeight.toString()\n\t\t\t\t: face.fontWeight\n\t\t);\n\t\tconst fontStyle = formatFontStyle( face.fontStyle );\n\n\t\t// Create font style and font weight lists without duplicates.\n\t\tif ( fontStyle && Object.keys( fontStyle ).length ) {\n\t\t\tif (\n\t\t\t\t! fontStyles.some(\n\t\t\t\t\t( style ) => style.value === fontStyle.value\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tfontStyles.push( fontStyle );\n\t\t\t}\n\t\t}\n\n\t\tif ( fontWeight && Object.keys( fontWeight ).length ) {\n\t\t\tif (\n\t\t\t\t! fontWeights.some(\n\t\t\t\t\t( weight ) => weight.value === fontWeight.value\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif ( ! isVariableFont ) {\n\t\t\t\t\tfontWeights.push( fontWeight );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t// If there is no font weight of 600 or above, then include faux bold as an option.\n\tif ( ! fontWeights.some( ( weight ) => weight.value >= '600' ) ) {\n\t\tfontWeights.push( {\n\t\t\tname: _x( 'Bold', 'font weight' ),\n\t\t\tvalue: '700',\n\t\t} );\n\t}\n\n\t// If there is no italic font style, then include faux italic as an option.\n\tif ( ! fontStyles.some( ( style ) => style.value === 'italic' ) ) {\n\t\tfontStyles.push( {\n\t\t\tname: _x( 'Italic', 'font style' ),\n\t\t\tvalue: 'italic',\n\t\t} );\n\t}\n\n\t// Use default font styles and weights for system fonts.\n\tif ( isSystemFont ) {\n\t\tfontStyles = FONT_STYLES;\n\t\tfontWeights = FONT_WEIGHTS;\n\t}\n\n\t// Use default styles and weights if there are no available styles or weights from the provided font faces.\n\tfontStyles = fontStyles.length === 0 ? FONT_STYLES : fontStyles;\n\tfontWeights = fontWeights.length === 0 ? FONT_WEIGHTS : fontWeights;\n\n\t// Generate combined font style and weight options for available fonts.\n\tfontStyles.forEach( ( { name: styleName, value: styleValue } ) => {\n\t\tfontWeights.forEach( ( { name: weightName, value: weightValue } ) => {\n\t\t\tconst optionName =\n\t\t\t\tstyleValue === 'normal'\n\t\t\t\t\t? weightName\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t/* translators: 1: Font weight name. 2: Font style name. */\n\t\t\t\t\t\t\t__( '%1$s %2$s' ),\n\t\t\t\t\t\t\tweightName,\n\t\t\t\t\t\t\tstyleName\n\t\t\t\t\t );\n\n\t\t\tcombinedStyleAndWeightOptions.push( {\n\t\t\t\tkey: `${ styleValue }-${ weightValue }`,\n\t\t\t\tname: optionName,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontStyle: styleValue,\n\t\t\t\t\tfontWeight: weightValue,\n\t\t\t\t},\n\t\t\t} );\n\t\t} );\n\t} );\n\n\treturn {\n\t\tfontStyles,\n\t\tfontWeights,\n\t\tcombinedStyleAndWeightOptions,\n\t\tisSystemFont,\n\t\tisVariableFont,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Formats font styles to human readable names.\n *\n * @param {string} fontStyle font style string\n * @return {Object} new object with formatted font style\n */\nexport function formatFontStyle( fontStyle ) {\n\tif ( ! fontStyle ) {\n\t\treturn {};\n\t}\n\n\tif ( typeof fontStyle === 'object' ) {\n\t\treturn fontStyle;\n\t}\n\n\tlet name;\n\n\tswitch ( fontStyle ) {\n\t\tcase 'normal':\n\t\t\tname = _x( 'Regular', 'font style' );\n\t\t\tbreak;\n\t\tcase 'italic':\n\t\t\tname = _x( 'Italic', 'font style' );\n\t\t\tbreak;\n\t\tcase 'oblique':\n\t\t\tname = _x( 'Oblique', 'font style' );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tname = fontStyle;\n\t\t\tbreak;\n\t}\n\n\treturn { name, value: fontStyle };\n}\n","/**\n * The fluid utilities must match the backend equivalent.\n * See: gutenberg_get_typography_font_size_value() in lib/block-supports/typography.php\n * ---------------------------------------------------------------\n */\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetComputedFluidTypographyValue,\n\tgetTypographyValueAndUnit,\n} from '../font-sizes/fluid-utils';\nimport { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights';\n\n/**\n * @typedef {Object} FluidPreset\n * @property {string|undefined} max A maximum font size value.\n * @property {?string|undefined} min A minimum font size value.\n */\n\n/**\n * @typedef {Object} Preset\n * @property {?string|?number} size A default font size.\n * @property {string} name A font size name, displayed in the UI.\n * @property {string} slug A font size slug\n * @property {boolean|FluidPreset|undefined} fluid Specifies the minimum and maximum font size value of a fluid font size.\n */\n\n/**\n * @typedef {Object} TypographySettings\n * @property {?string} minViewportWidth Minimum viewport size from which type will have fluidity. Optional if size is specified.\n * @property {?string} maxViewportWidth Maximum size up to which type will have fluidity. Optional if size is specified.\n * @property {?number} scaleFactor A scale factor to determine how fast a font scales within boundaries. Optional.\n * @property {?number} minFontSizeFactor How much to scale defaultFontSize by to derive minimumFontSize. Optional.\n * @property {?string} minFontSize The smallest a calculated font size may be. Optional.\n */\n\n/**\n * Returns a font-size value based on a given font-size preset.\n * Takes into account fluid typography parameters and attempts to return a css formula depending on available, valid values.\n *\n * The Core PHP equivalent is wp_get_typography_font_size_value().\n *\n * @param {Preset} preset\n * @param {Object} settings\n * @param {boolean|TypographySettings} settings.typography.fluid Whether fluid typography is enabled, and, optionally, fluid font size options.\n * @param {Object?} settings.typography.layout Layout options.\n *\n * @return {string|*} A font-size value or the value of preset.size.\n */\nexport function getTypographyFontSizeValue( preset, settings ) {\n\tconst { size: defaultSize } = preset;\n\n\t/*\n\t * Catch falsy values and 0/'0'. Fluid calculations cannot be performed on `0`.\n\t * Also return early when a preset font size explicitly disables fluid typography with `false`.\n\t */\n\tif ( ! defaultSize || '0' === defaultSize || false === preset?.fluid ) {\n\t\treturn defaultSize;\n\t}\n\n\t/*\n\t * Return early when fluid typography is disabled in the settings, and there\n\t * are no local settings to enable it for the individual preset.\n\t *\n\t * If this condition isn't met, either the settings or individual preset settings\n\t * have enabled fluid typography.\n\t */\n\tif (\n\t\t! isFluidTypographyEnabled( settings?.typography ) &&\n\t\t! isFluidTypographyEnabled( preset )\n\t) {\n\t\treturn defaultSize;\n\t}\n\n\tlet fluidTypographySettings =\n\t\tgetFluidTypographyOptionsFromSettings( settings );\n\tfluidTypographySettings =\n\t\ttypeof fluidTypographySettings?.fluid === 'object'\n\t\t\t? fluidTypographySettings?.fluid\n\t\t\t: {};\n\n\tconst fluidFontSizeValue = getComputedFluidTypographyValue( {\n\t\tminimumFontSize: preset?.fluid?.min,\n\t\tmaximumFontSize: preset?.fluid?.max,\n\t\tfontSize: defaultSize,\n\t\tminimumFontSizeLimit: fluidTypographySettings?.minFontSize,\n\t\tmaximumViewportWidth: fluidTypographySettings?.maxViewportWidth,\n\t\tminimumViewportWidth: fluidTypographySettings?.minViewportWidth,\n\t} );\n\n\tif ( !! fluidFontSizeValue ) {\n\t\treturn fluidFontSizeValue;\n\t}\n\n\treturn defaultSize;\n}\n\nfunction isFluidTypographyEnabled( typographySettings ) {\n\tconst fluidSettings = typographySettings?.fluid;\n\treturn (\n\t\ttrue === fluidSettings ||\n\t\t( fluidSettings &&\n\t\t\ttypeof fluidSettings === 'object' &&\n\t\t\tObject.keys( fluidSettings ).length > 0 )\n\t);\n}\n\n/**\n * Returns fluid typography settings from theme.json setting object.\n *\n * @param {Object} settings Theme.json settings\n * @param {Object} settings.typography Theme.json typography settings\n * @param {Object} settings.layout Theme.json layout settings\n * @return {TypographySettings} Fluid typography settings\n */\nexport function getFluidTypographyOptionsFromSettings( settings ) {\n\tconst typographySettings = settings?.typography;\n\tconst layoutSettings = settings?.layout;\n\tconst defaultMaxViewportWidth = getTypographyValueAndUnit(\n\t\tlayoutSettings?.wideSize\n\t)\n\t\t? layoutSettings?.wideSize\n\t\t: null;\n\treturn isFluidTypographyEnabled( typographySettings ) &&\n\t\tdefaultMaxViewportWidth\n\t\t? {\n\t\t\t\tfluid: {\n\t\t\t\t\tmaxViewportWidth: defaultMaxViewportWidth,\n\t\t\t\t\t...typographySettings.fluid,\n\t\t\t\t},\n\t\t }\n\t\t: {\n\t\t\t\tfluid: typographySettings?.fluid,\n\t\t };\n}\n\n/**\n * Returns an object of merged font families and the font faces from the selected font family\n * based on the theme.json settings object and the currently selected font family.\n *\n * @param {Object} settings Theme.json settings.\n * @param {string} selectedFontFamily Decoded font family string.\n * @return {Object} Merged font families and font faces from the selected font family.\n */\nexport function getMergedFontFamiliesAndFontFamilyFaces(\n\tsettings,\n\tselectedFontFamily\n) {\n\tconst fontFamiliesFromSettings = settings?.typography?.fontFamilies;\n\n\tconst fontFamilies = [ 'default', 'theme', 'custom' ].flatMap(\n\t\t( key ) => fontFamiliesFromSettings?.[ key ] ?? []\n\t);\n\n\tconst fontFamilyFaces =\n\t\tfontFamilies.find(\n\t\t\t( family ) => family.fontFamily === selectedFontFamily\n\t\t)?.fontFace ?? [];\n\n\treturn { fontFamilies, fontFamilyFaces };\n}\n\n/**\n * Returns the nearest font weight value from the available font weight list based on the new font weight.\n * The nearest font weight is the one with the smallest difference from the new font weight.\n *\n * @param {Array} availableFontWeights Array of available font weights.\n * @param {string} newFontWeightValue New font weight value.\n * @return {string} Nearest font weight.\n */\nexport function findNearestFontWeight(\n\tavailableFontWeights,\n\tnewFontWeightValue\n) {\n\tnewFontWeightValue =\n\t\t'number' === typeof newFontWeightValue\n\t\t\t? newFontWeightValue.toString()\n\t\t\t: newFontWeightValue;\n\tif ( ! newFontWeightValue || typeof newFontWeightValue !== 'string' ) {\n\t\treturn '';\n\t}\n\n\tif ( ! availableFontWeights || availableFontWeights.length === 0 ) {\n\t\treturn newFontWeightValue;\n\t}\n\n\tconst nearestFontWeight = availableFontWeights?.reduce(\n\t\t( nearest, { value: fw } ) => {\n\t\t\tconst currentDiff = Math.abs(\n\t\t\t\tparseInt( fw ) - parseInt( newFontWeightValue )\n\t\t\t);\n\t\t\tconst nearestDiff = Math.abs(\n\t\t\t\tparseInt( nearest ) - parseInt( newFontWeightValue )\n\t\t\t);\n\t\t\treturn currentDiff < nearestDiff ? fw : nearest;\n\t\t},\n\t\tavailableFontWeights[ 0 ]?.value\n\t);\n\n\treturn nearestFontWeight;\n}\n\n/**\n * Returns the nearest font style based on the new font style.\n * Defaults to an empty string if the new font style is not valid or available.\n *\n * @param {Array} availableFontStyles Array of available font weights.\n * @param {string} newFontStyleValue New font style value.\n * @return {string} Nearest font style or an empty string.\n */\nexport function findNearestFontStyle( availableFontStyles, newFontStyleValue ) {\n\tif ( typeof newFontStyleValue !== 'string' || ! newFontStyleValue ) {\n\t\treturn '';\n\t}\n\n\tconst validStyles = [ 'normal', 'italic', 'oblique' ];\n\tif ( ! validStyles.includes( newFontStyleValue ) ) {\n\t\treturn '';\n\t}\n\n\tif (\n\t\t! availableFontStyles ||\n\t\tavailableFontStyles.length === 0 ||\n\t\tavailableFontStyles.find(\n\t\t\t( style ) => style.value === newFontStyleValue\n\t\t)\n\t) {\n\t\treturn newFontStyleValue;\n\t}\n\n\tif (\n\t\tnewFontStyleValue === 'oblique' &&\n\t\t! availableFontStyles.find( ( style ) => style.value === 'oblique' )\n\t) {\n\t\treturn 'italic';\n\t}\n\n\treturn '';\n}\n\n/**\n * Returns the nearest font style and weight based on the available font family faces and the new font style and weight.\n *\n * @param {Array} fontFamilyFaces Array of available font family faces.\n * @param {string} fontStyle New font style. Defaults to previous value.\n * @param {string} fontWeight New font weight. Defaults to previous value.\n * @return {Object} Nearest font style and font weight.\n */\nexport function findNearestStyleAndWeight(\n\tfontFamilyFaces,\n\tfontStyle,\n\tfontWeight\n) {\n\tlet nearestFontStyle = fontStyle;\n\tlet nearestFontWeight = fontWeight;\n\n\tconst { fontStyles, fontWeights, combinedStyleAndWeightOptions } =\n\t\tgetFontStylesAndWeights( fontFamilyFaces );\n\n\t// Check if the new font style and weight are available in the font family faces.\n\tconst hasFontStyle = fontStyles?.some(\n\t\t( { value: fs } ) => fs === fontStyle\n\t);\n\tconst hasFontWeight = fontWeights?.some(\n\t\t( { value: fw } ) => fw?.toString() === fontWeight?.toString()\n\t);\n\n\tif ( ! hasFontStyle ) {\n\t\t/*\n\t\t * Default to italic if oblique is not available.\n\t\t * Or find the nearest font style based on the nearest font weight.\n\t\t */\n\t\tnearestFontStyle = fontStyle\n\t\t\t? findNearestFontStyle( fontStyles, fontStyle )\n\t\t\t: combinedStyleAndWeightOptions?.find(\n\t\t\t\t\t( option ) =>\n\t\t\t\t\t\toption.style.fontWeight ===\n\t\t\t\t\t\tfindNearestFontWeight( fontWeights, fontWeight )\n\t\t\t )?.style?.fontStyle;\n\t}\n\n\tif ( ! hasFontWeight ) {\n\t\t/*\n\t\t * Find the nearest font weight based on available weights.\n\t\t * Or find the nearest font weight based on the nearest font style.\n\t\t */\n\t\tnearestFontWeight = fontWeight\n\t\t\t? findNearestFontWeight( fontWeights, fontWeight )\n\t\t\t: combinedStyleAndWeightOptions?.find(\n\t\t\t\t\t( option ) =>\n\t\t\t\t\t\toption.style.fontStyle ===\n\t\t\t\t\t\t( nearestFontStyle || fontStyle )\n\t\t\t )?.style?.fontWeight;\n\t}\n\n\treturn { nearestFontStyle, nearestFontWeight };\n}\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useViewportMatch } from '@wordpress/compose';\nimport { getCSSValueFromRawStyle } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { getTypographyFontSizeValue } from './typography-utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/* Supporting data. */\nexport const ROOT_BLOCK_SELECTOR = 'body';\nexport const ROOT_CSS_PROPERTIES_SELECTOR = ':root';\n\nexport const PRESET_METADATA = [\n\t{\n\t\tpath: [ 'color', 'palette' ],\n\t\tvalueKey: 'color',\n\t\tcssVarInfix: 'color',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'color', propertyName: 'color' },\n\t\t\t{\n\t\t\t\tclassSuffix: 'background-color',\n\t\t\t\tpropertyName: 'background-color',\n\t\t\t},\n\t\t\t{\n\t\t\t\tclassSuffix: 'border-color',\n\t\t\t\tpropertyName: 'border-color',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'gradients' ],\n\t\tvalueKey: 'gradient',\n\t\tcssVarInfix: 'gradient',\n\t\tclasses: [\n\t\t\t{\n\t\t\t\tclassSuffix: 'gradient-background',\n\t\t\t\tpropertyName: 'background',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'duotone' ],\n\t\tvalueKey: 'colors',\n\t\tcssVarInfix: 'duotone',\n\t\tvalueFunc: ( { slug } ) => `url( '#wp-duotone-${ slug }' )`,\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'shadow', 'presets' ],\n\t\tvalueKey: 'shadow',\n\t\tcssVarInfix: 'shadow',\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontSizes' ],\n\t\tvalueFunc: ( preset, settings ) =>\n\t\t\tgetTypographyFontSizeValue( preset, settings ),\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'font-size',\n\t\tclasses: [ { classSuffix: 'font-size', propertyName: 'font-size' } ],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontFamilies' ],\n\t\tvalueKey: 'fontFamily',\n\t\tcssVarInfix: 'font-family',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'font-family', propertyName: 'font-family' },\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'spacing', 'spacingSizes' ],\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'spacing',\n\t\tvalueFunc: ( { size } ) => size,\n\t\tclasses: [],\n\t},\n];\n\nexport const STYLE_PATH_TO_CSS_VAR_INFIX = {\n\t'color.background': 'color',\n\t'color.text': 'color',\n\t'filter.duotone': 'duotone',\n\t'elements.link.color.text': 'color',\n\t'elements.link.:hover.color.text': 'color',\n\t'elements.link.typography.fontFamily': 'font-family',\n\t'elements.link.typography.fontSize': 'font-size',\n\t'elements.button.color.text': 'color',\n\t'elements.button.color.background': 'color',\n\t'elements.caption.color.text': 'color',\n\t'elements.button.typography.fontFamily': 'font-family',\n\t'elements.button.typography.fontSize': 'font-size',\n\t'elements.heading.color': 'color',\n\t'elements.heading.color.background': 'color',\n\t'elements.heading.typography.fontFamily': 'font-family',\n\t'elements.heading.gradient': 'gradient',\n\t'elements.heading.color.gradient': 'gradient',\n\t'elements.h1.color': 'color',\n\t'elements.h1.color.background': 'color',\n\t'elements.h1.typography.fontFamily': 'font-family',\n\t'elements.h1.color.gradient': 'gradient',\n\t'elements.h2.color': 'color',\n\t'elements.h2.color.background': 'color',\n\t'elements.h2.typography.fontFamily': 'font-family',\n\t'elements.h2.color.gradient': 'gradient',\n\t'elements.h3.color': 'color',\n\t'elements.h3.color.background': 'color',\n\t'elements.h3.typography.fontFamily': 'font-family',\n\t'elements.h3.color.gradient': 'gradient',\n\t'elements.h4.color': 'color',\n\t'elements.h4.color.background': 'color',\n\t'elements.h4.typography.fontFamily': 'font-family',\n\t'elements.h4.color.gradient': 'gradient',\n\t'elements.h5.color': 'color',\n\t'elements.h5.color.background': 'color',\n\t'elements.h5.typography.fontFamily': 'font-family',\n\t'elements.h5.color.gradient': 'gradient',\n\t'elements.h6.color': 'color',\n\t'elements.h6.color.background': 'color',\n\t'elements.h6.typography.fontFamily': 'font-family',\n\t'elements.h6.color.gradient': 'gradient',\n\t'color.gradient': 'gradient',\n\tshadow: 'shadow',\n\t'typography.fontSize': 'font-size',\n\t'typography.fontFamily': 'font-family',\n};\n\n// A static list of block attributes that store global style preset slugs.\nexport const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {\n\t'color.background': 'backgroundColor',\n\t'color.text': 'textColor',\n\t'color.gradient': 'gradient',\n\t'typography.fontSize': 'fontSize',\n\t'typography.fontFamily': 'fontFamily',\n};\n\nexport function useToolsPanelDropdownMenuProps() {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n}\n\nfunction findInPresetsBy(\n\tfeatures,\n\tblockName,\n\tpresetPath,\n\tpresetProperty,\n\tpresetValueValue\n) {\n\t// Block presets take priority above root level presets.\n\tconst orderedPresetsByOrigin = [\n\t\tgetValueFromObjectPath( features, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t...presetPath,\n\t\t] ),\n\t\tgetValueFromObjectPath( features, presetPath ),\n\t];\n\n\tfor ( const presetByOrigin of orderedPresetsByOrigin ) {\n\t\tif ( presetByOrigin ) {\n\t\t\t// Preset origins ordered by priority.\n\t\t\tconst origins = [ 'custom', 'theme', 'default' ];\n\t\t\tfor ( const origin of origins ) {\n\t\t\t\tconst presets = presetByOrigin[ origin ];\n\t\t\t\tif ( presets ) {\n\t\t\t\t\tconst presetObject = presets.find(\n\t\t\t\t\t\t( preset ) =>\n\t\t\t\t\t\t\tpreset[ presetProperty ] === presetValueValue\n\t\t\t\t\t);\n\t\t\t\t\tif ( presetObject ) {\n\t\t\t\t\t\tif ( presetProperty === 'slug' ) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// If there is a highest priority preset with the same slug but different value the preset we found was overwritten and should be ignored.\n\t\t\t\t\t\tconst highestPresetObjectWithSameSlug = findInPresetsBy(\n\t\t\t\t\t\t\tfeatures,\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tpresetPath,\n\t\t\t\t\t\t\t'slug',\n\t\t\t\t\t\t\tpresetObject.slug\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thighestPresetObjectWithSameSlug[\n\t\t\t\t\t\t\t\tpresetProperty\n\t\t\t\t\t\t\t] === presetObject[ presetProperty ]\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function getPresetVariableFromValue(\n\tfeatures,\n\tblockName,\n\tvariableStylePath,\n\tpresetPropertyValue\n) {\n\tif ( ! presetPropertyValue ) {\n\t\treturn presetPropertyValue;\n\t}\n\n\tconst cssVarInfix = STYLE_PATH_TO_CSS_VAR_INFIX[ variableStylePath ];\n\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === cssVarInfix\n\t);\n\n\tif ( ! metadata ) {\n\t\t// The property doesn't have preset data\n\t\t// so the value should be returned as it is.\n\t\treturn presetPropertyValue;\n\t}\n\tconst { valueKey, path } = metadata;\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures,\n\t\tblockName,\n\t\tpath,\n\t\tvalueKey,\n\t\tpresetPropertyValue\n\t);\n\n\tif ( ! presetObject ) {\n\t\t// Value wasn't found in the presets,\n\t\t// so it must be a custom value.\n\t\treturn presetPropertyValue;\n\t}\n\n\treturn `var:preset|${ cssVarInfix }|${ presetObject.slug }`;\n}\n\nfunction getValueFromPresetVariable(\n\tfeatures,\n\tblockName,\n\tvariable,\n\t[ presetType, slug ]\n) {\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === presetType\n\t);\n\tif ( ! metadata ) {\n\t\treturn variable;\n\t}\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures.settings,\n\t\tblockName,\n\t\tmetadata.path,\n\t\t'slug',\n\t\tslug\n\t);\n\n\tif ( presetObject ) {\n\t\tconst { valueKey } = metadata;\n\t\tconst result = presetObject[ valueKey ];\n\t\treturn getValueFromVariable( features, blockName, result );\n\t}\n\n\treturn variable;\n}\n\nfunction getValueFromCustomVariable( features, blockName, variable, path ) {\n\tconst result =\n\t\tgetValueFromObjectPath( features.settings, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t'custom',\n\t\t\t...path,\n\t\t] ) ??\n\t\tgetValueFromObjectPath( features.settings, [ 'custom', ...path ] );\n\tif ( ! result ) {\n\t\treturn variable;\n\t}\n\t// A variable may reference another variable so we need recursion until we find the value.\n\treturn getValueFromVariable( features, blockName, result );\n}\n\n/**\n * Attempts to fetch the value of a theme.json CSS variable.\n *\n * @param {Object} features GlobalStylesContext config, e.g., user, base or merged. Represents the theme.json tree.\n * @param {string} blockName The name of a block as represented in the styles property. E.g., 'root' for root-level, and 'core/${blockName}' for blocks.\n * @param {string|*} variable An incoming style value. A CSS var value is expected, but it could be any value.\n * @return {string|*|{ref}} The value of the CSS var, if found. If not found, the passed variable argument.\n */\nexport function getValueFromVariable( features, blockName, variable ) {\n\tif ( ! variable || typeof variable !== 'string' ) {\n\t\tif ( typeof variable?.ref === 'string' ) {\n\t\t\tvariable = getValueFromObjectPath( features, variable.ref );\n\t\t\t// Presence of another ref indicates a reference to another dynamic value.\n\t\t\t// Pointing to another dynamic value is not supported.\n\t\t\tif ( ! variable || !! variable?.ref ) {\n\t\t\t\treturn variable;\n\t\t\t}\n\t\t} else {\n\t\t\treturn variable;\n\t\t}\n\t}\n\tconst USER_VALUE_PREFIX = 'var:';\n\tconst THEME_VALUE_PREFIX = 'var(--wp--';\n\tconst THEME_VALUE_SUFFIX = ')';\n\n\tlet parsedVar;\n\n\tif ( variable.startsWith( USER_VALUE_PREFIX ) ) {\n\t\tparsedVar = variable.slice( USER_VALUE_PREFIX.length ).split( '|' );\n\t} else if (\n\t\tvariable.startsWith( THEME_VALUE_PREFIX ) &&\n\t\tvariable.endsWith( THEME_VALUE_SUFFIX )\n\t) {\n\t\tparsedVar = variable\n\t\t\t.slice( THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length )\n\t\t\t.split( '--' );\n\t} else {\n\t\t// We don't know how to parse the value: either is raw of uses complex CSS such as `calc(1px * var(--wp--variable) )`\n\t\treturn variable;\n\t}\n\n\tconst [ type, ...path ] = parsedVar;\n\tif ( type === 'preset' ) {\n\t\treturn getValueFromPresetVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\tif ( type === 'custom' ) {\n\t\treturn getValueFromCustomVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\treturn variable;\n}\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nexport function scopeSelector( scope, selector ) {\n\tif ( ! scope || ! selector ) {\n\t\treturn selector;\n\t}\n\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Scopes a collection of selectors for features and subfeatures.\n *\n * @example\n * ```js\n * const scope = '.custom-scope';\n * const selectors = {\n * color: '.wp-my-block p',\n * typography: { fontSize: '.wp-my-block caption' },\n * };\n * const result = scopeFeatureSelector( scope, selectors );\n * // result is {\n * // color: '.custom-scope .wp-my-block p',\n * // typography: { fonSize: '.custom-scope .wp-my-block caption' },\n * // }\n * ```\n *\n * @param {string} scope Selector to scope collection of selectors with.\n * @param {Object} selectors Collection of feature selectors e.g.\n *\n * @return {Object|undefined} Scoped collection of feature selectors.\n */\nexport function scopeFeatureSelectors( scope, selectors ) {\n\tif ( ! scope || ! selectors ) {\n\t\treturn;\n\t}\n\n\tconst featureSelectors = {};\n\n\tObject.entries( selectors ).forEach( ( [ feature, selector ] ) => {\n\t\tif ( typeof selector === 'string' ) {\n\t\t\tfeatureSelectors[ feature ] = scopeSelector( scope, selector );\n\t\t}\n\n\t\tif ( typeof selector === 'object' ) {\n\t\t\tfeatureSelectors[ feature ] = {};\n\n\t\t\tObject.entries( selector ).forEach(\n\t\t\t\t( [ subfeature, subfeatureSelector ] ) => {\n\t\t\t\t\tfeatureSelectors[ feature ][ subfeature ] = scopeSelector(\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tsubfeatureSelector\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn featureSelectors;\n}\n\n/**\n * Appends a sub-selector to an existing one.\n *\n * Given the compounded `selector` \"h1, h2, h3\"\n * and the `toAppend` selector \".some-class\" the result will be\n * \"h1.some-class, h2.some-class, h3.some-class\".\n *\n * @param {string} selector Original selector.\n * @param {string} toAppend Selector to append.\n *\n * @return {string} The new selector.\n */\nexport function appendToSelector( selector, toAppend ) {\n\tif ( ! selector.includes( ',' ) ) {\n\t\treturn selector + toAppend;\n\t}\n\tconst selectors = selector.split( ',' );\n\tconst newSelectors = selectors.map( ( sel ) => sel + toAppend );\n\treturn newSelectors.join( ',' );\n}\n\n/**\n * Compares global style variations according to their styles and settings properties.\n *\n * @example\n * ```js\n * const globalStyles = { styles: { typography: { fontSize: '10px' } }, settings: {} };\n * const variation = { styles: { typography: { fontSize: '10000px' } }, settings: {} };\n * const isEqual = areGlobalStyleConfigsEqual( globalStyles, variation );\n * // false\n * ```\n *\n * @param {Object} original A global styles object.\n * @param {Object} variation A global styles object.\n *\n * @return {boolean} Whether `original` and `variation` match.\n */\nexport function areGlobalStyleConfigsEqual( original, variation ) {\n\tif ( typeof original !== 'object' || typeof variation !== 'object' ) {\n\t\treturn original === variation;\n\t}\n\treturn (\n\t\tfastDeepEqual( original?.styles, variation?.styles ) &&\n\t\tfastDeepEqual( original?.settings, variation?.settings )\n\t);\n}\n\n/**\n * Generates the selector for a block style variation by creating the\n * appropriate CSS class and adding it to the ancestor portion of the block's\n * selector.\n *\n * For example, take the Button block which has a compound selector:\n * `.wp-block-button .wp-block-button__link`. With a variation named 'custom',\n * the class `.is-style-custom` should be added to the `.wp-block-button`\n * ancestor only.\n *\n * This function will take into account comma separated and complex selectors.\n *\n * @param {string} variation Name for the variation.\n * @param {string} blockSelector CSS selector for the block.\n *\n * @return {string} CSS selector for the block style variation.\n */\nexport function getBlockStyleVariationSelector( variation, blockSelector ) {\n\tconst variationClass = `.is-style-${ variation }`;\n\n\tif ( ! blockSelector ) {\n\t\treturn variationClass;\n\t}\n\n\tconst ancestorRegex = /((?::\\([^)]+\\))?\\s*)([^\\s:]+)/;\n\tconst addVariationClass = ( _match, group1, group2 ) => {\n\t\treturn group1 + group2 + variationClass;\n\t};\n\n\tconst result = blockSelector\n\t\t.split( ',' )\n\t\t.map( ( part ) => part.replace( ancestorRegex, addVariationClass ) );\n\n\treturn result.join( ',' );\n}\n\n/**\n * Looks up a theme file URI based on a relative path.\n *\n * @param {string} file A relative path.\n * @param {Array} themeFileURIs A collection of absolute theme file URIs and their corresponding file paths.\n * @return {string} A resolved theme file URI, if one is found in the themeFileURIs collection.\n */\nexport function getResolvedThemeFilePath( file, themeFileURIs ) {\n\tif ( ! file || ! themeFileURIs || ! Array.isArray( themeFileURIs ) ) {\n\t\treturn file;\n\t}\n\n\tconst uri = themeFileURIs.find(\n\t\t( themeFileUri ) => themeFileUri?.name === file\n\t);\n\n\tif ( ! uri?.href ) {\n\t\treturn file;\n\t}\n\n\treturn uri?.href;\n}\n\n/**\n * Resolves ref values in theme JSON.\n *\n * @param {Object|string} ruleValue A block style value that may contain a reference to a theme.json value.\n * @param {Object} tree A theme.json object.\n * @return {*} The resolved value or incoming ruleValue.\n */\nexport function getResolvedRefValue( ruleValue, tree ) {\n\tif ( ! ruleValue || ! tree ) {\n\t\treturn ruleValue;\n\t}\n\n\t/*\n\t * Where the rule value is an object with a 'ref' property pointing\n\t * to a path, this converts that path into the value at that path.\n\t * For example: { \"ref\": \"style.color.background\" } => \"#fff\".\n\t */\n\tif ( typeof ruleValue !== 'string' && ruleValue?.ref ) {\n\t\tconst resolvedRuleValue = getCSSValueFromRawStyle(\n\t\t\tgetValueFromObjectPath( tree, ruleValue.ref )\n\t\t);\n\n\t\t/*\n\t\t * Presence of another ref indicates a reference to another dynamic value.\n\t\t * Pointing to another dynamic value is not supported.\n\t\t */\n\t\tif ( resolvedRuleValue?.ref ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ( resolvedRuleValue === undefined ) {\n\t\t\treturn ruleValue;\n\t\t}\n\n\t\treturn resolvedRuleValue;\n\t}\n\treturn ruleValue;\n}\n\n/**\n * Resolves ref and relative path values in theme JSON.\n *\n * @param {Object|string} ruleValue A block style value that may contain a reference to a theme.json value.\n * @param {Object} tree A theme.json object.\n * @return {*} The resolved value or incoming ruleValue.\n */\nexport function getResolvedValue( ruleValue, tree ) {\n\tif ( ! ruleValue || ! tree ) {\n\t\treturn ruleValue;\n\t}\n\n\t// Resolve ref values.\n\tconst resolvedValue = getResolvedRefValue( ruleValue, tree );\n\n\t// Resolve relative paths.\n\tif ( resolvedValue?.url ) {\n\t\tresolvedValue.url = getResolvedThemeFilePath(\n\t\t\tresolvedValue.url,\n\t\t\ttree?._links?.[ 'wp:theme-file' ]\n\t\t);\n\t}\n\n\treturn resolvedValue;\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nexport const DEFAULT_GLOBAL_STYLES_CONTEXT = {\n\tuser: {},\n\tbase: {},\n\tmerged: {},\n\tsetUserConfig: () => {},\n};\n\nexport const GlobalStylesContext = createContext(\n\tDEFAULT_GLOBAL_STYLES_CONTEXT\n);\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useContext, useCallback, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, getPresetVariableFromValue } from './utils';\nimport { getValueFromObjectPath, setImmutably } from '../../utils/object';\nimport { GlobalStylesContext } from './context';\nimport { unlock } from '../../lock-unlock';\n\nconst EMPTY_CONFIG = { settings: {}, styles: {} };\n\nconst VALID_SETTINGS = [\n\t'appearanceTools',\n\t'useRootPaddingAwareAlignments',\n\t'background.backgroundImage',\n\t'background.backgroundRepeat',\n\t'background.backgroundSize',\n\t'background.backgroundPosition',\n\t'border.color',\n\t'border.radius',\n\t'border.style',\n\t'border.width',\n\t'shadow.presets',\n\t'shadow.defaultPresets',\n\t'color.background',\n\t'color.button',\n\t'color.caption',\n\t'color.custom',\n\t'color.customDuotone',\n\t'color.customGradient',\n\t'color.defaultDuotone',\n\t'color.defaultGradients',\n\t'color.defaultPalette',\n\t'color.duotone',\n\t'color.gradients',\n\t'color.heading',\n\t'color.link',\n\t'color.palette',\n\t'color.text',\n\t'custom',\n\t'dimensions.aspectRatio',\n\t'dimensions.minHeight',\n\t'layout.contentSize',\n\t'layout.definitions',\n\t'layout.wideSize',\n\t'lightbox.enabled',\n\t'lightbox.allowEditing',\n\t'position.fixed',\n\t'position.sticky',\n\t'spacing.customSpacingSize',\n\t'spacing.defaultSpacingSizes',\n\t'spacing.spacingSizes',\n\t'spacing.spacingScale',\n\t'spacing.blockGap',\n\t'spacing.margin',\n\t'spacing.padding',\n\t'spacing.units',\n\t'typography.fluid',\n\t'typography.customFontSize',\n\t'typography.defaultFontSizes',\n\t'typography.dropCap',\n\t'typography.fontFamilies',\n\t'typography.fontSizes',\n\t'typography.fontStyle',\n\t'typography.fontWeight',\n\t'typography.letterSpacing',\n\t'typography.lineHeight',\n\t'typography.textAlign',\n\t'typography.textColumns',\n\t'typography.textDecoration',\n\t'typography.textTransform',\n\t'typography.writingMode',\n];\n\nexport const useGlobalStylesReset = () => {\n\tconst { user, setUserConfig } = useContext( GlobalStylesContext );\n\tconst config = {\n\t\tsettings: user.settings,\n\t\tstyles: user.styles,\n\t};\n\tconst canReset = !! config && ! fastDeepEqual( config, EMPTY_CONFIG );\n\treturn [\n\t\tcanReset,\n\t\tuseCallback( () => setUserConfig( EMPTY_CONFIG ), [ setUserConfig ] ),\n\t];\n};\n\nexport function useGlobalSetting( propertyPath, blockName, source = 'all' ) {\n\tconst { setUserConfig, ...configs } = useContext( GlobalStylesContext );\n\tconst appendedBlockPath = blockName ? '.blocks.' + blockName : '';\n\tconst appendedPropertyPath = propertyPath ? '.' + propertyPath : '';\n\tconst contextualPath = `settings${ appendedBlockPath }${ appendedPropertyPath }`;\n\tconst globalPath = `settings${ appendedPropertyPath }`;\n\tconst sourceKey = source === 'all' ? 'merged' : source;\n\n\tconst settingValue = useMemo( () => {\n\t\tconst configToUse = configs[ sourceKey ];\n\t\tif ( ! configToUse ) {\n\t\t\tthrow 'Unsupported source';\n\t\t}\n\n\t\tif ( propertyPath ) {\n\t\t\treturn (\n\t\t\t\tgetValueFromObjectPath( configToUse, contextualPath ) ??\n\t\t\t\tgetValueFromObjectPath( configToUse, globalPath )\n\t\t\t);\n\t\t}\n\n\t\tlet result = {};\n\t\tVALID_SETTINGS.forEach( ( setting ) => {\n\t\t\tconst value =\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tconfigToUse,\n\t\t\t\t\t`settings${ appendedBlockPath }.${ setting }`\n\t\t\t\t) ??\n\t\t\t\tgetValueFromObjectPath( configToUse, `settings.${ setting }` );\n\t\t\tif ( value !== undefined ) {\n\t\t\t\tresult = setImmutably( result, setting.split( '.' ), value );\n\t\t\t}\n\t\t} );\n\t\treturn result;\n\t}, [\n\t\tconfigs,\n\t\tsourceKey,\n\t\tpropertyPath,\n\t\tcontextualPath,\n\t\tglobalPath,\n\t\tappendedBlockPath,\n\t] );\n\n\tconst setSetting = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) =>\n\t\t\tsetImmutably( currentConfig, contextualPath.split( '.' ), newValue )\n\t\t);\n\t};\n\treturn [ settingValue, setSetting ];\n}\n\nexport function useGlobalStyle(\n\tpath,\n\tblockName,\n\tsource = 'all',\n\t{ shouldDecodeEncode = true } = {}\n) {\n\tconst {\n\t\tmerged: mergedConfig,\n\t\tbase: baseConfig,\n\t\tuser: userConfig,\n\t\tsetUserConfig,\n\t} = useContext( GlobalStylesContext );\n\tconst appendedPath = path ? '.' + path : '';\n\tconst finalPath = ! blockName\n\t\t? `styles${ appendedPath }`\n\t\t: `styles.blocks.${ blockName }${ appendedPath }`;\n\n\tconst setStyle = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) =>\n\t\t\tsetImmutably(\n\t\t\t\tcurrentConfig,\n\t\t\t\tfinalPath.split( '.' ),\n\t\t\t\tshouldDecodeEncode\n\t\t\t\t\t? getPresetVariableFromValue(\n\t\t\t\t\t\t\tmergedConfig.settings,\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tnewValue\n\t\t\t\t\t )\n\t\t\t\t\t: newValue\n\t\t\t)\n\t\t);\n\t};\n\n\tlet rawResult, result;\n\tswitch ( source ) {\n\t\tcase 'all':\n\t\t\trawResult = getValueFromObjectPath( mergedConfig, finalPath );\n\t\t\tresult = shouldDecodeEncode\n\t\t\t\t? getValueFromVariable( mergedConfig, blockName, rawResult )\n\t\t\t\t: rawResult;\n\t\t\tbreak;\n\t\tcase 'user':\n\t\t\trawResult = getValueFromObjectPath( userConfig, finalPath );\n\t\t\tresult = shouldDecodeEncode\n\t\t\t\t? getValueFromVariable( mergedConfig, blockName, rawResult )\n\t\t\t\t: rawResult;\n\t\t\tbreak;\n\t\tcase 'base':\n\t\t\trawResult = getValueFromObjectPath( baseConfig, finalPath );\n\t\t\tresult = shouldDecodeEncode\n\t\t\t\t? getValueFromVariable( baseConfig, blockName, rawResult )\n\t\t\t\t: rawResult;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow 'Unsupported source';\n\t}\n\n\treturn [ result, setStyle ];\n}\n\n/**\n * React hook that overrides a global settings object with block and element specific settings.\n *\n * @param {Object} parentSettings Settings object.\n * @param {blockName?} blockName Block name.\n * @param {element?} element Element name.\n *\n * @return {Object} Merge of settings and supports.\n */\nexport function useSettingsForBlockElement(\n\tparentSettings,\n\tblockName,\n\telement\n) {\n\tconst { supportedStyles, supports } = useSelect(\n\t\t( select ) => {\n\t\t\treturn {\n\t\t\t\tsupportedStyles: unlock(\n\t\t\t\t\tselect( blocksStore )\n\t\t\t\t).getSupportedStyles( blockName, element ),\n\t\t\t\tsupports:\n\t\t\t\t\tselect( blocksStore ).getBlockType( blockName )?.supports,\n\t\t\t};\n\t\t},\n\t\t[ blockName, element ]\n\t);\n\n\treturn useMemo( () => {\n\t\tconst updatedSettings = { ...parentSettings };\n\n\t\tif ( ! supportedStyles.includes( 'fontSize' ) ) {\n\t\t\tupdatedSettings.typography = {\n\t\t\t\t...updatedSettings.typography,\n\t\t\t\tfontSizes: {},\n\t\t\t\tcustomFontSize: false,\n\t\t\t\tdefaultFontSizes: false,\n\t\t\t};\n\t\t}\n\n\t\tif ( ! supportedStyles.includes( 'fontFamily' ) ) {\n\t\t\tupdatedSettings.typography = {\n\t\t\t\t...updatedSettings.typography,\n\t\t\t\tfontFamilies: {},\n\t\t\t};\n\t\t}\n\n\t\tupdatedSettings.color = {\n\t\t\t...updatedSettings.color,\n\t\t\ttext:\n\t\t\t\tupdatedSettings.color?.text &&\n\t\t\t\tsupportedStyles.includes( 'color' ),\n\t\t\tbackground:\n\t\t\t\tupdatedSettings.color?.background &&\n\t\t\t\t( supportedStyles.includes( 'background' ) ||\n\t\t\t\t\tsupportedStyles.includes( 'backgroundColor' ) ),\n\t\t\tbutton:\n\t\t\t\tupdatedSettings.color?.button &&\n\t\t\t\tsupportedStyles.includes( 'buttonColor' ),\n\t\t\theading:\n\t\t\t\tupdatedSettings.color?.heading &&\n\t\t\t\tsupportedStyles.includes( 'headingColor' ),\n\t\t\tlink:\n\t\t\t\tupdatedSettings.color?.link &&\n\t\t\t\tsupportedStyles.includes( 'linkColor' ),\n\t\t\tcaption:\n\t\t\t\tupdatedSettings.color?.caption &&\n\t\t\t\tsupportedStyles.includes( 'captionColor' ),\n\t\t};\n\n\t\t// Some blocks can enable background colors but disable gradients.\n\t\tif ( ! supportedStyles.includes( 'background' ) ) {\n\t\t\tupdatedSettings.color.gradients = [];\n\t\t\tupdatedSettings.color.customGradient = false;\n\t\t}\n\n\t\t// If filters are not supported by the block/element, disable duotone.\n\t\tif ( ! supportedStyles.includes( 'filter' ) ) {\n\t\t\tupdatedSettings.color.defaultDuotone = false;\n\t\t\tupdatedSettings.color.customDuotone = false;\n\t\t}\n\n\t\t[\n\t\t\t'lineHeight',\n\t\t\t'fontStyle',\n\t\t\t'fontWeight',\n\t\t\t'letterSpacing',\n\t\t\t'textAlign',\n\t\t\t'textTransform',\n\t\t\t'textDecoration',\n\t\t\t'writingMode',\n\t\t].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.typography = {\n\t\t\t\t\t...updatedSettings.typography,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t// The column-count style is named text column to reduce confusion with\n\t\t// the columns block and manage expectations from the support.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/33587\n\t\tif ( ! supportedStyles.includes( 'columnCount' ) ) {\n\t\t\tupdatedSettings.typography = {\n\t\t\t\t...updatedSettings.typography,\n\t\t\t\ttextColumns: false,\n\t\t\t};\n\t\t}\n\n\t\t[ 'contentSize', 'wideSize' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.layout = {\n\t\t\t\t\t...updatedSettings.layout,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'padding', 'margin', 'blockGap' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.spacing = {\n\t\t\t\t\t...updatedSettings.spacing,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst sides = Array.isArray( supports?.spacing?.[ key ] )\n\t\t\t\t? supports?.spacing?.[ key ]\n\t\t\t\t: supports?.spacing?.[ key ]?.sides;\n\t\t\t// Check if spacing type is supported before adding sides.\n\t\t\tif ( sides?.length && updatedSettings.spacing?.[ key ] ) {\n\t\t\t\tupdatedSettings.spacing = {\n\t\t\t\t\t...updatedSettings.spacing,\n\t\t\t\t\t[ key ]: {\n\t\t\t\t\t\t...updatedSettings.spacing?.[ key ],\n\t\t\t\t\t\tsides,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'aspectRatio', 'minHeight' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.dimensions = {\n\t\t\t\t\t...updatedSettings.dimensions,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'radius', 'color', 'style', 'width' ].forEach( ( key ) => {\n\t\t\tif (\n\t\t\t\t! supportedStyles.includes(\n\t\t\t\t\t'border' + key.charAt( 0 ).toUpperCase() + key.slice( 1 )\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tupdatedSettings.border = {\n\t\t\t\t\t...updatedSettings.border,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'backgroundImage', 'backgroundSize' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.background = {\n\t\t\t\t\t...updatedSettings.background,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\tupdatedSettings.shadow = supportedStyles.includes( 'shadow' )\n\t\t\t? updatedSettings.shadow\n\t\t\t: false;\n\n\t\t// Text alignment is only available for blocks.\n\t\tif ( element ) {\n\t\t\tupdatedSettings.typography.textAlign = false;\n\t\t}\n\n\t\treturn updatedSettings;\n\t}, [ parentSettings, supportedStyles, supports, element ] );\n}\n\nexport function useColorsPerOrigin( settings ) {\n\tconst customColors = settings?.color?.palette?.custom;\n\tconst themeColors = settings?.color?.palette?.theme;\n\tconst defaultColors = settings?.color?.palette?.default;\n\tconst shouldDisplayDefaultColors = settings?.color?.defaultPalette;\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeColors && themeColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: themeColors,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultColors &&\n\t\t\tdefaultColors &&\n\t\t\tdefaultColors.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tcolors: defaultColors,\n\t\t\t} );\n\t\t}\n\t\tif ( customColors && customColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tcolors: customColors,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomColors,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tshouldDisplayDefaultColors,\n\t] );\n}\n\nexport function useGradientsPerOrigin( settings ) {\n\tconst customGradients = settings?.color?.gradients?.custom;\n\tconst themeGradients = settings?.color?.gradients?.theme;\n\tconst defaultGradients = settings?.color?.gradients?.default;\n\tconst shouldDisplayDefaultGradients = settings?.color?.defaultGradients;\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeGradients && themeGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tgradients: themeGradients,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultGradients &&\n\t\t\tdefaultGradients &&\n\t\t\tdefaultGradients.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tgradients: defaultGradients,\n\t\t\t} );\n\t\t}\n\t\tif ( customGradients && customGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tgradients: customGradients,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t\tshouldDisplayDefaultGradients,\n\t] );\n}\n","function 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 {\n\tif (\n\t\tobject === null ||\n\t\ttypeof object !== 'object' ||\n\t\tArray.isArray( object )\n\t) {\n\t\treturn object;\n\t}\n\n\tconst cleanedNestedObjects = Object.entries( object )\n\t\t.map( ( [ key, value ] ) => [ key, cleanEmptyObject( value ) ] )\n\t\t.filter( ( [ , value ] ) => value !== undefined );\n\treturn ! cleanedNestedObjects.length\n\t\t? undefined\n\t\t: Object.fromEntries( cleanedNestedObjects );\n};\n\nexport function transformStyles(\n\tactiveSupports,\n\tmigrationPaths,\n\tresult,\n\tsource,\n\tindex,\n\tresults\n) {\n\t// If there are no active supports return early.\n\tif (\n\t\tObject.values( activeSupports ?? {} ).every(\n\t\t\t( isActive ) => ! isActive\n\t\t)\n\t) {\n\t\treturn result;\n\t}\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the styles should not be transformed.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\t// For cases where we have a transform from one block to multiple blocks\n\t// or multiple blocks to one block we apply the styles of the first source block\n\t// to the result(s).\n\tlet referenceBlockAttributes = source[ 0 ]?.attributes;\n\t// If we are in presence of transform between more than one block in the source\n\t// that has more than one block in the result\n\t// we apply the styles on source N to the result N,\n\t// if source N does not exists we do nothing.\n\tif ( results.length > 1 && source.length > 1 ) {\n\t\tif ( source[ index ] ) {\n\t\t\treferenceBlockAttributes = source[ index ]?.attributes;\n\t\t} else {\n\t\t\treturn result;\n\t\t}\n\t}\n\tlet returnBlock = result;\n\tObject.entries( activeSupports ).forEach( ( [ support, isActive ] ) => {\n\t\tif ( isActive ) {\n\t\t\tmigrationPaths[ support ].forEach( ( path ) => {\n\t\t\t\tconst styleValue = getValueFromObjectPath(\n\t\t\t\t\treferenceBlockAttributes,\n\t\t\t\t\tpath\n\t\t\t\t);\n\t\t\t\tif ( styleValue ) {\n\t\t\t\t\treturnBlock = {\n\t\t\t\t\t\t...returnBlock,\n\t\t\t\t\t\tattributes: setImmutably(\n\t\t\t\t\t\t\treturnBlock.attributes,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tstyleValue\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\treturn returnBlock;\n}\n\n/**\n * Check whether serialization of specific block support feature or set should\n * be skipped.\n *\n * @param {string|Object} blockNameOrType Block name or block type object.\n * @param {string} featureSet Name of block support feature set.\n * @param {string} feature Name of the individual feature to check.\n *\n * @return {boolean} Whether serialization should occur.\n */\nexport function shouldSkipSerialization(\n\tblockNameOrType,\n\tfeatureSet,\n\tfeature\n) {\n\tconst support = getBlockSupport( blockNameOrType, featureSet );\n\tconst skipSerialization = support?.__experimentalSkipSerialization;\n\n\tif ( Array.isArray( skipSerialization ) ) {\n\t\treturn skipSerialization.includes( feature );\n\t}\n\n\treturn skipSerialization;\n}\n\nconst pendingStyleOverrides = new WeakMap();\n\n/**\n * Override a block editor settings style. Leave the ID blank to create a new\n * style.\n *\n * @param {Object} override Override object.\n * @param {?string} override.id Id of the style override, leave blank to create\n * a new style.\n * @param {string} override.css CSS to apply.\n */\nexport function useStyleOverride( { id, css } ) {\n\treturn usePrivateStyleOverride( { id, css } );\n}\n\nexport function usePrivateStyleOverride( {\n\tid,\n\tcss,\n\tassets,\n\t__unstableType,\n\tvariation,\n\tclientId,\n} = {} ) {\n\tconst { setStyleOverride, deleteStyleOverride } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst registry = useRegistry();\n\tconst fallbackId = useId();\n\tuseEffect( () => {\n\t\t// Unmount if there is CSS and assets are empty.\n\t\tif ( ! css && ! assets ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst _id = id || fallbackId;\n\t\tconst override = {\n\t\t\tid,\n\t\t\tcss,\n\t\t\tassets,\n\t\t\t__unstableType,\n\t\t\tvariation,\n\t\t\tclientId,\n\t\t};\n\t\t// Batch updates to style overrides to avoid triggering cascading renders\n\t\t// for each style override block included in a tree and optimize initial render.\n\t\tif ( ! pendingStyleOverrides.get( registry ) ) {\n\t\t\tpendingStyleOverrides.set( registry, [] );\n\t\t}\n\t\tpendingStyleOverrides.get( registry ).push( [ _id, override ] );\n\t\twindow.queueMicrotask( () => {\n\t\t\tif ( pendingStyleOverrides.get( registry )?.length ) {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tpendingStyleOverrides.get( registry ).forEach( ( args ) => {\n\t\t\t\t\t\tsetStyleOverride( ...args );\n\t\t\t\t\t} );\n\t\t\t\t\tpendingStyleOverrides.set( registry, [] );\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn () => {\n\t\t\tconst isPending = pendingStyleOverrides\n\t\t\t\t.get( registry )\n\t\t\t\t?.find( ( [ currentId ] ) => currentId === _id );\n\t\t\tif ( isPending ) {\n\t\t\t\tpendingStyleOverrides.set(\n\t\t\t\t\tregistry,\n\t\t\t\t\tpendingStyleOverrides\n\t\t\t\t\t\t.get( registry )\n\t\t\t\t\t\t.filter( ( [ currentId ] ) => currentId !== _id )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdeleteStyleOverride( _id );\n\t\t\t}\n\t\t};\n\t}, [\n\t\tid,\n\t\tcss,\n\t\tclientId,\n\t\tassets,\n\t\t__unstableType,\n\t\tfallbackId,\n\t\tsetStyleOverride,\n\t\tdeleteStyleOverride,\n\t\tregistry,\n\t] );\n}\n\n/**\n * Based on the block and its context, returns an object of all the block settings.\n * This object can be passed as a prop to all the Styles UI components\n * (TypographyPanel, DimensionsPanel...).\n *\n * @param {string} name Block name.\n * @param {*} parentLayout Parent layout.\n *\n * @return {Object} Settings object.\n */\nexport function useBlockSettings( name, parentLayout ) {\n\tconst [\n\t\tbackgroundImage,\n\t\tbackgroundSize,\n\t\tcustomFontFamilies,\n\t\tdefaultFontFamilies,\n\t\tthemeFontFamilies,\n\t\tdefaultFontSizesEnabled,\n\t\tcustomFontSizes,\n\t\tdefaultFontSizes,\n\t\tthemeFontSizes,\n\t\tcustomFontSize,\n\t\tfontStyle,\n\t\tfontWeight,\n\t\tlineHeight,\n\t\ttextAlign,\n\t\ttextColumns,\n\t\ttextDecoration,\n\t\twritingMode,\n\t\ttextTransform,\n\t\tletterSpacing,\n\t\tpadding,\n\t\tmargin,\n\t\tblockGap,\n\t\tdefaultSpacingSizesEnabled,\n\t\tcustomSpacingSize,\n\t\tuserSpacingSizes,\n\t\tdefaultSpacingSizes,\n\t\tthemeSpacingSizes,\n\t\tunits,\n\t\taspectRatio,\n\t\tminHeight,\n\t\tlayout,\n\t\tborderColor,\n\t\tborderRadius,\n\t\tborderStyle,\n\t\tborderWidth,\n\t\tcustomColorsEnabled,\n\t\tcustomColors,\n\t\tcustomDuotone,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tdefaultPalette,\n\t\tdefaultDuotone,\n\t\tuserDuotonePalette,\n\t\tthemeDuotonePalette,\n\t\tdefaultDuotonePalette,\n\t\tuserGradientPalette,\n\t\tthemeGradientPalette,\n\t\tdefaultGradientPalette,\n\t\tdefaultGradients,\n\t\tareCustomGradientsEnabled,\n\t\tisBackgroundEnabled,\n\t\tisLinkEnabled,\n\t\tisTextEnabled,\n\t\tisHeadingEnabled,\n\t\tisButtonEnabled,\n\t\tshadow,\n\t] = useSettings(\n\t\t'background.backgroundImage',\n\t\t'background.backgroundSize',\n\t\t'typography.fontFamilies.custom',\n\t\t'typography.fontFamilies.default',\n\t\t'typography.fontFamilies.theme',\n\t\t'typography.defaultFontSizes',\n\t\t'typography.fontSizes.custom',\n\t\t'typography.fontSizes.default',\n\t\t'typography.fontSizes.theme',\n\t\t'typography.customFontSize',\n\t\t'typography.fontStyle',\n\t\t'typography.fontWeight',\n\t\t'typography.lineHeight',\n\t\t'typography.textAlign',\n\t\t'typography.textColumns',\n\t\t'typography.textDecoration',\n\t\t'typography.writingMode',\n\t\t'typography.textTransform',\n\t\t'typography.letterSpacing',\n\t\t'spacing.padding',\n\t\t'spacing.margin',\n\t\t'spacing.blockGap',\n\t\t'spacing.defaultSpacingSizes',\n\t\t'spacing.customSpacingSize',\n\t\t'spacing.spacingSizes.custom',\n\t\t'spacing.spacingSizes.default',\n\t\t'spacing.spacingSizes.theme',\n\t\t'spacing.units',\n\t\t'dimensions.aspectRatio',\n\t\t'dimensions.minHeight',\n\t\t'layout',\n\t\t'border.color',\n\t\t'border.radius',\n\t\t'border.style',\n\t\t'border.width',\n\t\t'color.custom',\n\t\t'color.palette.custom',\n\t\t'color.customDuotone',\n\t\t'color.palette.theme',\n\t\t'color.palette.default',\n\t\t'color.defaultPalette',\n\t\t'color.defaultDuotone',\n\t\t'color.duotone.custom',\n\t\t'color.duotone.theme',\n\t\t'color.duotone.default',\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default',\n\t\t'color.defaultGradients',\n\t\t'color.customGradient',\n\t\t'color.background',\n\t\t'color.link',\n\t\t'color.text',\n\t\t'color.heading',\n\t\t'color.button',\n\t\t'shadow'\n\t);\n\n\tconst rawSettings = useMemo( () => {\n\t\treturn {\n\t\t\tbackground: {\n\t\t\t\tbackgroundImage,\n\t\t\t\tbackgroundSize,\n\t\t\t},\n\t\t\tcolor: {\n\t\t\t\tpalette: {\n\t\t\t\t\tcustom: customColors,\n\t\t\t\t\ttheme: themeColors,\n\t\t\t\t\tdefault: defaultColors,\n\t\t\t\t},\n\t\t\t\tgradients: {\n\t\t\t\t\tcustom: userGradientPalette,\n\t\t\t\t\ttheme: themeGradientPalette,\n\t\t\t\t\tdefault: defaultGradientPalette,\n\t\t\t\t},\n\t\t\t\tduotone: {\n\t\t\t\t\tcustom: userDuotonePalette,\n\t\t\t\t\ttheme: themeDuotonePalette,\n\t\t\t\t\tdefault: defaultDuotonePalette,\n\t\t\t\t},\n\t\t\t\tdefaultGradients,\n\t\t\t\tdefaultPalette,\n\t\t\t\tdefaultDuotone,\n\t\t\t\tcustom: customColorsEnabled,\n\t\t\t\tcustomGradient: areCustomGradientsEnabled,\n\t\t\t\tcustomDuotone,\n\t\t\t\tbackground: isBackgroundEnabled,\n\t\t\t\tlink: isLinkEnabled,\n\t\t\t\theading: isHeadingEnabled,\n\t\t\t\tbutton: isButtonEnabled,\n\t\t\t\ttext: isTextEnabled,\n\t\t\t},\n\t\t\ttypography: {\n\t\t\t\tfontFamilies: {\n\t\t\t\t\tcustom: customFontFamilies,\n\t\t\t\t\tdefault: defaultFontFamilies,\n\t\t\t\t\ttheme: themeFontFamilies,\n\t\t\t\t},\n\t\t\t\tfontSizes: {\n\t\t\t\t\tcustom: customFontSizes,\n\t\t\t\t\tdefault: defaultFontSizes,\n\t\t\t\t\ttheme: themeFontSizes,\n\t\t\t\t},\n\t\t\t\tcustomFontSize,\n\t\t\t\tdefaultFontSizes: defaultFontSizesEnabled,\n\t\t\t\tfontStyle,\n\t\t\t\tfontWeight,\n\t\t\t\tlineHeight,\n\t\t\t\ttextAlign,\n\t\t\t\ttextColumns,\n\t\t\t\ttextDecoration,\n\t\t\t\ttextTransform,\n\t\t\t\tletterSpacing,\n\t\t\t\twritingMode,\n\t\t\t},\n\t\t\tspacing: {\n\t\t\t\tspacingSizes: {\n\t\t\t\t\tcustom: userSpacingSizes,\n\t\t\t\t\tdefault: defaultSpacingSizes,\n\t\t\t\t\ttheme: themeSpacingSizes,\n\t\t\t\t},\n\t\t\t\tcustomSpacingSize,\n\t\t\t\tdefaultSpacingSizes: defaultSpacingSizesEnabled,\n\t\t\t\tpadding,\n\t\t\t\tmargin,\n\t\t\t\tblockGap,\n\t\t\t\tunits,\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tcolor: borderColor,\n\t\t\t\tradius: borderRadius,\n\t\t\t\tstyle: borderStyle,\n\t\t\t\twidth: borderWidth,\n\t\t\t},\n\t\t\tdimensions: {\n\t\t\t\taspectRatio,\n\t\t\t\tminHeight,\n\t\t\t},\n\t\t\tlayout,\n\t\t\tparentLayout,\n\t\t\tshadow,\n\t\t};\n\t}, [\n\t\tbackgroundImage,\n\t\tbackgroundSize,\n\t\tcustomFontFamilies,\n\t\tdefaultFontFamilies,\n\t\tthemeFontFamilies,\n\t\tdefaultFontSizesEnabled,\n\t\tcustomFontSizes,\n\t\tdefaultFontSizes,\n\t\tthemeFontSizes,\n\t\tcustomFontSize,\n\t\tfontStyle,\n\t\tfontWeight,\n\t\tlineHeight,\n\t\ttextAlign,\n\t\ttextColumns,\n\t\ttextDecoration,\n\t\ttextTransform,\n\t\tletterSpacing,\n\t\twritingMode,\n\t\tpadding,\n\t\tmargin,\n\t\tblockGap,\n\t\tdefaultSpacingSizesEnabled,\n\t\tcustomSpacingSize,\n\t\tuserSpacingSizes,\n\t\tdefaultSpacingSizes,\n\t\tthemeSpacingSizes,\n\t\tunits,\n\t\taspectRatio,\n\t\tminHeight,\n\t\tlayout,\n\t\tparentLayout,\n\t\tborderColor,\n\t\tborderRadius,\n\t\tborderStyle,\n\t\tborderWidth,\n\t\tcustomColorsEnabled,\n\t\tcustomColors,\n\t\tcustomDuotone,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tdefaultPalette,\n\t\tdefaultDuotone,\n\t\tuserDuotonePalette,\n\t\tthemeDuotonePalette,\n\t\tdefaultDuotonePalette,\n\t\tuserGradientPalette,\n\t\tthemeGradientPalette,\n\t\tdefaultGradientPalette,\n\t\tdefaultGradients,\n\t\tareCustomGradientsEnabled,\n\t\tisBackgroundEnabled,\n\t\tisLinkEnabled,\n\t\tisTextEnabled,\n\t\tisHeadingEnabled,\n\t\tisButtonEnabled,\n\t\tshadow,\n\t] );\n\n\treturn useSettingsForBlockElement( rawSettings, name );\n}\n\nexport function createBlockEditFilter( features ) {\n\t// We don't want block controls to re-render when typing inside a block.\n\t// `memo` will prevent re-renders unless props change, so only pass the\n\t// needed props and not the whole attributes object.\n\tfeatures = features.map( ( settings ) => {\n\t\treturn { ...settings, Edit: memo( settings.edit ) };\n\t} );\n\tconst withBlockEditHooks = createHigherOrderComponent(\n\t\t( OriginalBlockEdit ) => ( props ) => {\n\t\t\tconst context = useBlockEditContext();\n\t\t\t// CAUTION: code added before this line will be executed for all\n\t\t\t// blocks, not just those that support the feature! Code added\n\t\t\t// above this line should be carefully evaluated for its impact on\n\t\t\t// performance.\n\t\t\treturn [\n\t\t\t\t...features.map( ( feature, i ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tEdit,\n\t\t\t\t\t\thasSupport,\n\t\t\t\t\t\tattributeKeys = [],\n\t\t\t\t\t\tshareWithChildBlocks,\n\t\t\t\t\t} = feature;\n\t\t\t\t\tconst shouldDisplayControls =\n\t\t\t\t\t\tcontext[ mayDisplayControlsKey ] ||\n\t\t\t\t\t\t( context[ mayDisplayParentControlsKey ] &&\n\t\t\t\t\t\t\tshareWithChildBlocks );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! shouldDisplayControls ||\n\t\t\t\t\t\t! hasSupport( props.name )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst neededProps = {};\n\t\t\t\t\tfor ( const key of attributeKeys ) {\n\t\t\t\t\t\tif ( props.attributes[ key ] ) {\n\t\t\t\t\t\t\tneededProps[ key ] = props.attributes[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\t,\n\t\t\t];\n\t\t},\n\t\t'withBlockEditHooks'\n\t);\n\taddFilter( 'editor.BlockEdit', 'core/editor/hooks', withBlockEditHooks );\n}\n\nfunction BlockProps( { index, useBlockProps, setAllWrapperProps, ...props } ) {\n\tconst wrapperProps = useBlockProps( props );\n\tconst setWrapperProps = ( next ) =>\n\t\tsetAllWrapperProps( ( prev ) => {\n\t\t\tconst nextAll = [ ...prev ];\n\t\t\tnextAll[ index ] = next;\n\t\t\treturn nextAll;\n\t\t} );\n\t// Setting state after every render is fine because this component is\n\t// pure and will only re-render when needed props change.\n\tuseEffect( () => {\n\t\t// We could shallow compare the props, but since this component only\n\t\t// changes when needed attributes change, the benefit is probably small.\n\t\tsetWrapperProps( wrapperProps );\n\t\treturn () => {\n\t\t\tsetWrapperProps( undefined );\n\t\t};\n\t} );\n\treturn null;\n}\n\nconst BlockPropsPure = memo( BlockProps );\n\nexport function createBlockListBlockFilter( features ) {\n\tconst withBlockListBlockHooks = createHigherOrderComponent(\n\t\t( BlockListBlock ) => ( props ) => {\n\t\t\tconst [ allWrapperProps, setAllWrapperProps ] = useState(\n\t\t\t\tArray( features.length ).fill( undefined )\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t...features.map( ( feature, i ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\thasSupport,\n\t\t\t\t\t\tattributeKeys = [],\n\t\t\t\t\t\tuseBlockProps,\n\t\t\t\t\t\tisMatch,\n\t\t\t\t\t} = feature;\n\n\t\t\t\t\tconst neededProps = {};\n\t\t\t\t\tfor ( const key of attributeKeys ) {\n\t\t\t\t\t\tif ( props.attributes[ key ] ) {\n\t\t\t\t\t\t\tneededProps[ key ] = props.attributes[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip rendering if none of the needed attributes are\n\t\t\t\t\t\t// set.\n\t\t\t\t\t\t! Object.keys( neededProps ).length ||\n\t\t\t\t\t\t! hasSupport( props.name ) ||\n\t\t\t\t\t\t( isMatch && ! isMatch( neededProps ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\t {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t...wrapperProps,\n\t\t\t\t\t\t\t\tclassName: clsx(\n\t\t\t\t\t\t\t\t\tacc.className,\n\t\t\t\t\t\t\t\t\twrapperProps.className\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t...acc.style,\n\t\t\t\t\t\t\t\t\t...wrapperProps.style,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}, props.wrapperProps || {} ) }\n\t\t\t\t/>,\n\t\t\t];\n\t\t},\n\t\t'withBlockListBlockHooks'\n\t);\n\taddFilter(\n\t\t'editor.BlockListBlock',\n\t\t'core/editor/hooks',\n\t\twithBlockListBlockHooks\n\t);\n}\n\nexport function createBlockSaveFilter( features ) {\n\tfunction extraPropsFromHooks( props, name, attributes ) {\n\t\treturn features.reduce( ( accu, feature ) => {\n\t\t\tconst { hasSupport, attributeKeys = [], addSaveProps } = feature;\n\n\t\t\tconst neededAttributes = {};\n\t\t\tfor ( const key of attributeKeys ) {\n\t\t\t\tif ( attributes[ key ] ) {\n\t\t\t\t\tneededAttributes[ key ] = attributes[ key ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// Skip rendering if none of the needed attributes are\n\t\t\t\t// set.\n\t\t\t\t! Object.keys( neededAttributes ).length ||\n\t\t\t\t! hasSupport( name )\n\t\t\t) {\n\t\t\t\treturn accu;\n\t\t\t}\n\n\t\t\treturn addSaveProps( accu, name, neededAttributes );\n\t\t}, props );\n\t}\n\taddFilter(\n\t\t'blocks.getSaveContent.extraProps',\n\t\t'core/editor/hooks',\n\t\textraPropsFromHooks,\n\t\t0\n\t);\n\taddFilter(\n\t\t'blocks.getSaveContent.extraProps',\n\t\t'core/editor/hooks',\n\t\t( props ) => {\n\t\t\t// Previously we had a filter deleting the className if it was an empty\n\t\t\t// string. That filter is no longer running, so now we need to delete it\n\t\t\t// here.\n\t\t\tif ( props.hasOwnProperty( 'className' ) && ! props.className ) {\n\t\t\t\tdelete props.className;\n\t\t\t}\n\n\t\t\treturn props;\n\t\t}\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { addFilter } from '@wordpress/hooks';\n\nfunction migrateLightBlockWrapper( settings ) {\n\tconst { apiVersion = 1 } = settings;\n\tif (\n\t\tapiVersion < 2 &&\n\t\thasBlockSupport( settings, 'lightBlockWrapper', false )\n\t) {\n\t\tsettings.apiVersion = 2;\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/compat/migrateLightBlockWrapper',\n\tmigrateLightBlockWrapper\n);\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"components\"];","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst BlockControlsDefault = createSlotFill( 'BlockControls' );\nconst BlockControlsBlock = createSlotFill( 'BlockControlsBlock' );\nconst BlockControlsInline = createSlotFill( 'BlockFormatControls' );\nconst BlockControlsOther = createSlotFill( 'BlockControlsOther' );\nconst BlockControlsParent = createSlotFill( 'BlockControlsParent' );\n\nconst groups = {\n\tdefault: BlockControlsDefault,\n\tblock: BlockControlsBlock,\n\tinline: BlockControlsInline,\n\tother: BlockControlsOther,\n\tparent: BlockControlsParent,\n};\n\nexport default groups;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalStyleProvider as StyleProvider,\n\tToolbarGroup,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport useBlockControlsFill from './hook';\n\nexport default function BlockControlsFill( {\n\tgroup = 'default',\n\tcontrols,\n\tchildren,\n\t__experimentalShareWithChildBlocks = false,\n} ) {\n\tconst Fill = useBlockControlsFill(\n\t\tgroup,\n\t\t__experimentalShareWithChildBlocks\n\t);\n\tif ( ! Fill ) {\n\t\treturn null;\n\t}\n\n\tconst innerMarkup = (\n\t\t<>\n\t\t\t{ group === 'default' && }\n\t\t\t{ children }\n\t\t\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( fillProps ) => {\n\t\t\t\t\t// `fillProps.forwardedContext` is an array of context provider entries, provided by slot,\n\t\t\t\t\t// that should wrap the fill markup.\n\t\t\t\t\tconst { forwardedContext = [] } = fillProps;\n\t\t\t\t\treturn forwardedContext.reduce(\n\t\t\t\t\t\t( inner, [ Provider, props ] ) => (\n\t\t\t\t\t\t\t{ inner }\n\t\t\t\t\t\t),\n\t\t\t\t\t\tinnerMarkup\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\n\n/**\n * Internal dependencies\n */\nimport groups from './groups';\nimport {\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n\tmayDisplayParentControlsKey,\n} from '../block-edit/context';\n\nexport default function useBlockControlsFill( group, shareWithChildBlocks ) {\n\tconst context = useBlockEditContext();\n\tif ( context[ mayDisplayControlsKey ] ) {\n\t\treturn groups[ group ]?.Fill;\n\t}\n\tif ( context[ mayDisplayParentControlsKey ] && shareWithChildBlocks ) {\n\t\treturn groups.parent.Fill;\n\t}\n\treturn null;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"warning\"];","/**\n * WordPress dependencies\n */\nimport { useContext, useMemo } from '@wordpress/element';\nimport {\n\tprivateApis,\n\t__experimentalToolbarContext as ToolbarContext,\n\tToolbarGroup,\n\t__experimentalUseSlotFills as useSlotFills,\n} from '@wordpress/components';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport groups from './groups';\nimport { unlock } from '../../lock-unlock';\n\nconst { ComponentsContext } = unlock( privateApis );\n\nexport default function BlockControlsSlot( { group = 'default', ...props } ) {\n\tconst toolbarState = useContext( ToolbarContext );\n\tconst contextState = useContext( ComponentsContext );\n\tconst fillProps = useMemo(\n\t\t() => ( {\n\t\t\tforwardedContext: [\n\t\t\t\t[ ToolbarContext.Provider, { value: toolbarState } ],\n\t\t\t\t[ ComponentsContext.Provider, { value: contextState } ],\n\t\t\t],\n\t\t} ),\n\t\t[ toolbarState, contextState ]\n\t);\n\n\tconst Slot = groups[ group ]?.Slot;\n\tconst fills = useSlotFills( Slot?.__unstableName );\n\tif ( ! Slot ) {\n\t\twarning( `Unknown BlockControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\n\tif ( ! fills?.length ) {\n\t\treturn null;\n\t}\n\n\tconst slot = ;\n\n\tif ( group === 'default' ) {\n\t\treturn slot;\n\t}\n\n\treturn { slot };\n}\n","/**\n * Internal dependencies\n */\nimport BlockControlsFill from './fill';\nimport BlockControlsSlot from './slot';\n\nconst BlockControls = BlockControlsFill;\n\nBlockControls.Slot = BlockControlsSlot;\n\n// This is just here for backward compatibility.\nexport const BlockFormatControls = ( props ) => {\n\treturn ;\n};\nBlockFormatControls.Slot = ( props ) => {\n\treturn ;\n};\n\nexport default BlockControls;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyLeft = (\n\t\n\t\t\n\t\n);\n\nexport default justifyLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyCenter = (\n\t\n\t\t\n\t\n);\n\nexport default justifyCenter;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyRight = (\n\t\n\t\t\n\t\n);\n\nexport default justifyRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifySpaceBetween = (\n\t\n\t\t\n\t\n);\n\nexport default justifySpaceBetween;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyStretch = (\n\t\n\t\t\n\t\n);\n\nexport default justifyStretch;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst arrowRight = (\n\t\n\t\t\n\t\n);\n\nexport default arrowRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst arrowDown = (\n\t\n\t\t\n\t\n);\n\nexport default arrowDown;\n","// Layout definitions keyed by layout type.\n// Provides a common definition of slugs, classnames, base styles, and spacing styles for each layout type.\n// If making changes or additions to layout definitions, be sure to update the corresponding PHP definitions in\n// `block-supports/layout.php` so that the server-side and client-side definitions match.\nexport const LAYOUT_DEFINITIONS = {\n\tdefault: {\n\t\tname: 'default',\n\t\tslug: 'flow',\n\t\tclassName: 'is-layout-flow',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > .alignleft',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t'margin-inline-start': '0',\n\t\t\t\t\t'margin-inline-end': '2em',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .alignright',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'right',\n\t\t\t\t\t'margin-inline-start': '2em',\n\t\t\t\t\t'margin-inline-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .aligncenter',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-left': 'auto !important',\n\t\t\t\t\t'margin-right': 'auto !important',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > :first-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > :last-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > *',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': null,\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tconstrained: {\n\t\tname: 'constrained',\n\t\tslug: 'constrained',\n\t\tclassName: 'is-layout-constrained',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > .alignleft',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t'margin-inline-start': '0',\n\t\t\t\t\t'margin-inline-end': '2em',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .alignright',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'right',\n\t\t\t\t\t'margin-inline-start': '2em',\n\t\t\t\t\t'margin-inline-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .aligncenter',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-left': 'auto !important',\n\t\t\t\t\t'margin-right': 'auto !important',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector:\n\t\t\t\t\t' > :where(:not(.alignleft):not(.alignright):not(.alignfull))',\n\t\t\t\trules: {\n\t\t\t\t\t'max-width': 'var(--wp--style--global--content-size)',\n\t\t\t\t\t'margin-left': 'auto !important',\n\t\t\t\t\t'margin-right': 'auto !important',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .alignwide',\n\t\t\t\trules: {\n\t\t\t\t\t'max-width': 'var(--wp--style--global--wide-size)',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > :first-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > :last-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > *',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': null,\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tflex: {\n\t\tname: 'flex',\n\t\tslug: 'flex',\n\t\tclassName: 'is-layout-flex',\n\t\tdisplayMode: 'flex',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: '',\n\t\t\t\trules: {\n\t\t\t\t\t'flex-wrap': 'wrap',\n\t\t\t\t\t'align-items': 'center',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.\n\t\t\t\trules: {\n\t\t\t\t\tmargin: '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: '',\n\t\t\t\trules: {\n\t\t\t\t\tgap: null,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tgrid: {\n\t\tname: 'grid',\n\t\tslug: 'grid',\n\t\tclassName: 'is-layout-grid',\n\t\tdisplayMode: 'grid',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.\n\t\t\t\trules: {\n\t\t\t\t\tmargin: '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: '',\n\t\t\t\trules: {\n\t\t\t\t\tgap: null,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\n/**\n * Utility to generate the proper CSS selector for layout styles.\n *\n * @param {string} selectors CSS selector, also supports multiple comma-separated selectors.\n * @param {string} append The string to append.\n *\n * @return {string} - CSS selector.\n */\nexport function appendSelectors( selectors, append = '' ) {\n\treturn selectors\n\t\t.split( ',' )\n\t\t.map(\n\t\t\t( subselector ) =>\n\t\t\t\t`${ subselector }${ append ? ` ${ append }` : '' }`\n\t\t)\n\t\t.join( ',' );\n}\n\n/**\n * Get generated blockGap CSS rules based on layout definitions provided in theme.json\n * Falsy values in the layout definition's spacingStyles rules will be swapped out\n * with the provided `blockGapValue`.\n *\n * @param {string} selector The CSS selector to target for the generated rules.\n * @param {Object} layoutDefinitions Layout definitions object.\n * @param {string} layoutType The layout type (e.g. `default` or `flex`).\n * @param {string} blockGapValue The current blockGap value to be applied.\n * @return {string} The generated CSS rules.\n */\nexport function getBlockGapCSS(\n\tselector,\n\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\tlayoutType,\n\tblockGapValue\n) {\n\tlet output = '';\n\tif (\n\t\tlayoutDefinitions?.[ layoutType ]?.spacingStyles?.length &&\n\t\tblockGapValue\n\t) {\n\t\tlayoutDefinitions[ layoutType ].spacingStyles.forEach( ( gapStyle ) => {\n\t\t\toutput += `${ appendSelectors(\n\t\t\t\tselector,\n\t\t\t\tgapStyle.selector.trim()\n\t\t\t) } { `;\n\t\t\toutput += Object.entries( gapStyle.rules )\n\t\t\t\t.map(\n\t\t\t\t\t( [ cssProperty, value ] ) =>\n\t\t\t\t\t\t`${ cssProperty }: ${ value ? value : blockGapValue }`\n\t\t\t\t)\n\t\t\t\t.join( '; ' );\n\t\t\toutput += '; }';\n\t\t} );\n\t}\n\treturn output;\n}\n\n/**\n * Helper method to assign contextual info to clarify\n * alignment settings.\n *\n * Besides checking if `contentSize` and `wideSize` have a\n * value, we now show this information only if their values\n * are not a `css var`. This needs to change when parsing\n * css variables land.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34710#issuecomment-918000752\n *\n * @param {Object} layout The layout object.\n * @return {Object} An object with contextual info per alignment.\n */\nexport function getAlignmentsInfo( layout ) {\n\tconst { contentSize, wideSize, type = 'default' } = layout;\n\tconst alignmentInfo = {};\n\tconst sizeRegex =\n\t\t/^(?!0)\\d+(px|em|rem|vw|vh|%|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)?$/i;\n\tif ( sizeRegex.test( contentSize ) && type === 'constrained' ) {\n\t\t// translators: %s: container size (i.e. 600px etc)\n\t\talignmentInfo.none = sprintf( __( 'Max %s wide' ), contentSize );\n\t}\n\tif ( sizeRegex.test( wideSize ) ) {\n\t\t// translators: %s: container size (i.e. 600px etc)\n\t\talignmentInfo.wide = sprintf( __( 'Max %s wide' ), wideSize );\n\t}\n\treturn alignmentInfo;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesAll = (\n\t\n\t\t\n\t\n);\n\nexport default sidesAll;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesHorizontal = (\n\t\n\t\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesHorizontal;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesVertical = (\n\t\n\t\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesVertical;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesTop = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesTop;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesRight = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesBottom = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesBottom;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesLeft = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesLeft;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tsidesAll,\n\tsidesBottom,\n\tsidesHorizontal,\n\tsidesLeft,\n\tsidesRight,\n\tsidesTop,\n\tsidesVertical,\n} from '@wordpress/icons';\n\nexport const RANGE_CONTROL_MAX_SIZE = 8;\n\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\n\nexport const DEFAULT_VALUES = {\n\ttop: undefined,\n\tright: undefined,\n\tbottom: undefined,\n\tleft: undefined,\n};\n\nexport const ICONS = {\n\tcustom: sidesAll,\n\taxial: sidesAll,\n\thorizontal: sidesHorizontal,\n\tvertical: sidesVertical,\n\ttop: sidesTop,\n\tright: sidesRight,\n\tbottom: sidesBottom,\n\tleft: sidesLeft,\n};\n\nexport const LABELS = {\n\tdefault: __( 'Spacing control' ),\n\ttop: __( 'Top' ),\n\tbottom: __( 'Bottom' ),\n\tleft: __( 'Left' ),\n\tright: __( 'Right' ),\n\tmixed: __( 'Mixed' ),\n\tvertical: __( 'Vertical' ),\n\thorizontal: __( 'Horizontal' ),\n\taxial: __( 'Horizontal & vertical' ),\n\tcustom: __( 'Custom' ),\n};\n\nexport const VIEWS = {\n\taxial: 'axial',\n\ttop: 'top',\n\tright: 'right',\n\tbottom: 'bottom',\n\tleft: 'left',\n\tcustom: 'custom',\n};\n\n/**\n * Checks is given value is a spacing preset.\n *\n * @param {string} value Value to check\n *\n * @return {boolean} Return true if value is string in format var:preset|spacing|.\n */\nexport function isValueSpacingPreset( value ) {\n\tif ( ! value?.includes ) {\n\t\treturn false;\n\t}\n\treturn value === '0' || value.includes( 'var:preset|spacing|' );\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} Mapping of the spacing preset to its equivalent custom value.\n */\nexport function getCustomValueFromPreset( value, spacingSizes ) {\n\tif ( ! isValueSpacingPreset( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst slug = getSpacingPresetSlug( value );\n\tconst spacingSize = spacingSizes.find(\n\t\t( size ) => String( size.slug ) === slug\n\t);\n\n\treturn spacingSize?.size;\n}\n\n/**\n * Converts a custom value to preset value if one can be found.\n *\n * Returns value as-is if no match is found.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} The preset value if it can be found.\n */\nexport function getPresetValueFromCustomValue( value, spacingSizes ) {\n\t// Return value as-is if it is undefined or is already a preset, or '0';\n\tif ( ! value || isValueSpacingPreset( value ) || value === '0' ) {\n\t\treturn value;\n\t}\n\n\tconst spacingMatch = spacingSizes.find(\n\t\t( size ) => String( size.size ) === String( value )\n\t);\n\n\tif ( spacingMatch?.slug ) {\n\t\treturn `var:preset|spacing|${ spacingMatch.slug }`;\n\t}\n\n\treturn value;\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert.\n *\n * @return {string | undefined} CSS var string for given spacing preset value.\n */\nexport function getSpacingPresetCssVar( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\tif ( ! slug ) {\n\t\treturn value;\n\t}\n\n\treturn `var(--wp--preset--spacing--${ slug[ 1 ] })`;\n}\n\n/**\n * Returns the slug section of the given spacing preset string.\n *\n * @param {string} value Value to extract slug from.\n *\n * @return {string|undefined} The int value of the slug from given spacing preset.\n */\nexport function getSpacingPresetSlug( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tif ( value === '0' || value === 'default' ) {\n\t\treturn value;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\treturn slug ? slug[ 1 ] : undefined;\n}\n\n/**\n * Converts spacing preset value into a Range component value .\n *\n * @param {string} presetValue Value to convert to Range value.\n * @param {Array} spacingSizes Array of current spacing preset value objects.\n *\n * @return {number} The int value for use in Range control.\n */\nexport function getSliderValueFromPreset( presetValue, spacingSizes ) {\n\tif ( presetValue === undefined ) {\n\t\treturn 0;\n\t}\n\tconst slug =\n\t\tparseFloat( presetValue, 10 ) === 0\n\t\t\t? '0'\n\t\t\t: getSpacingPresetSlug( presetValue );\n\tconst sliderValue = spacingSizes.findIndex( ( spacingSize ) => {\n\t\treturn String( spacingSize.slug ) === slug;\n\t} );\n\n\t// Returning NaN rather than undefined as undefined makes range control thumb sit in center\n\treturn sliderValue !== -1 ? sliderValue : NaN;\n}\n\n/**\n * Gets an items with the most occurrence within an array\n * https://stackoverflow.com/a/20762713\n *\n * @param {Array} arr Array of items to check.\n * @return {any} The item with the most occurrences.\n */\nfunction mode( arr ) {\n\treturn arr\n\t\t.sort(\n\t\t\t( a, b ) =>\n\t\t\t\tarr.filter( ( v ) => v === a ).length -\n\t\t\t\tarr.filter( ( v ) => v === b ).length\n\t\t)\n\t\t.pop();\n}\n\n/**\n * Gets the 'all' input value from values data.\n *\n * @param {Object} values Box spacing values\n *\n * @return {string} The most common value from all sides of box.\n */\nexport function getAllRawValue( values = {} ) {\n\treturn mode( Object.values( values ) );\n}\n\n/**\n * Checks to determine if values are mixed.\n *\n * @param {Object} values Box values.\n * @param {Array} sides Sides that values relate to.\n *\n * @return {boolean} Whether values are mixed.\n */\nexport function isValuesMixed( values = {}, sides = ALL_SIDES ) {\n\treturn (\n\t\t( Object.values( values ).length >= 1 &&\n\t\t\tObject.values( values ).length < sides.length ) ||\n\t\tnew Set( Object.values( values ) ).size > 1\n\t);\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param {Object} values Box values.\n *\n * @return {boolean} Whether values are defined.\n */\nexport function isValuesDefined( values ) {\n\tif ( values === undefined || values === null ) {\n\t\treturn false;\n\t}\n\treturn Object.values( values ).filter( ( value ) => !! value ).length > 0;\n}\n\n/**\n * Determines whether a particular axis has support. If no axis is\n * specified, this function checks if either axis is supported.\n *\n * @param {Array} sides Supported sides.\n * @param {string} axis Which axis to check.\n *\n * @return {boolean} Whether there is support for the specified axis or both axes.\n */\nexport function hasAxisSupport( sides, axis ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn false;\n\t}\n\n\tconst hasHorizontalSupport =\n\t\tsides.includes( 'horizontal' ) ||\n\t\t( sides.includes( 'left' ) && sides.includes( 'right' ) );\n\n\tconst hasVerticalSupport =\n\t\tsides.includes( 'vertical' ) ||\n\t\t( sides.includes( 'top' ) && sides.includes( 'bottom' ) );\n\n\tif ( axis === 'horizontal' ) {\n\t\treturn hasHorizontalSupport;\n\t}\n\n\tif ( axis === 'vertical' ) {\n\t\treturn hasVerticalSupport;\n\t}\n\n\treturn hasHorizontalSupport || hasVerticalSupport;\n}\n\n/**\n * Determines which menu options should be included in the SidePicker.\n *\n * @param {Array} sides Supported sides.\n *\n * @return {Object} Menu options with each option containing label & icon.\n */\nexport function getSupportedMenuItems( sides ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn {};\n\t}\n\n\tconst menuItems = {};\n\n\t// Determine the primary \"side\" menu options.\n\tconst hasHorizontalSupport = hasAxisSupport( sides, 'horizontal' );\n\tconst hasVerticalSupport = hasAxisSupport( sides, 'vertical' );\n\n\tif ( hasHorizontalSupport && hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.axial, icon: ICONS.axial };\n\t} else if ( hasHorizontalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.horizontal, icon: ICONS.horizontal };\n\t} else if ( hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.vertical, icon: ICONS.vertical };\n\t}\n\n\t// Track whether we have any individual sides so we can omit the custom\n\t// option if required.\n\tlet numberOfIndividualSides = 0;\n\n\tALL_SIDES.forEach( ( side ) => {\n\t\tif ( sides.includes( side ) ) {\n\t\t\tnumberOfIndividualSides += 1;\n\t\t\tmenuItems[ side ] = {\n\t\t\t\tlabel: LABELS[ side ],\n\t\t\t\ticon: ICONS[ side ],\n\t\t\t};\n\t\t}\n\t} );\n\n\t// Add custom item if there are enough sides to warrant a separated view.\n\tif ( numberOfIndividualSides > 1 ) {\n\t\tmenuItems.custom = { label: LABELS.custom, icon: ICONS.custom };\n\t}\n\n\treturn menuItems;\n}\n\n/**\n * Checks if the supported sides are balanced for each axis.\n * - Horizontal - both left and right sides are supported.\n * - Vertical - both top and bottom are supported.\n *\n * @param {Array} sides The supported sides which may be axes as well.\n *\n * @return {boolean} Whether or not the supported sides are balanced.\n */\nexport function hasBalancedSidesSupport( sides = [] ) {\n\tconst counts = { top: 0, right: 0, bottom: 0, left: 0 };\n\tsides.forEach( ( side ) => ( counts[ side ] += 1 ) );\n\n\treturn (\n\t\t( counts.top + counts.bottom ) % 2 === 0 &&\n\t\t( counts.left + counts.right ) % 2 === 0\n\t);\n}\n\n/**\n * Determines which view the SpacingSizesControl should default to on its\n * first render; Axial, Custom, or Single side.\n *\n * @param {Object} values Current side values.\n * @param {Array} sides Supported sides.\n *\n * @return {string} View to display.\n */\nexport function getInitialView( values = {}, sides ) {\n\tconst { top, right, bottom, left } = values;\n\tconst sideValues = [ top, right, bottom, left ].filter( Boolean );\n\n\t// Axial ( Horizontal & vertical ).\n\t// - Has axial side support\n\t// - Has axial side values which match\n\t// - Has no values and the supported sides are balanced\n\tconst hasMatchingAxialValues =\n\t\ttop === bottom && left === right && ( !! top || !! left );\n\tconst hasNoValuesAndBalancedSides =\n\t\t! sideValues.length && hasBalancedSidesSupport( sides );\n\tconst hasOnlyAxialSides =\n\t\tsides?.includes( 'horizontal' ) &&\n\t\tsides?.includes( 'vertical' ) &&\n\t\tsides?.length === 2;\n\n\tif (\n\t\thasAxisSupport( sides ) &&\n\t\t( hasMatchingAxialValues || hasNoValuesAndBalancedSides )\n\t) {\n\t\treturn VIEWS.axial;\n\t}\n\n\t// Only axial sides are supported and single value defined.\n\t// - Ensure the side returned is the first side that has a value.\n\tif ( hasOnlyAxialSides && sideValues.length === 1 ) {\n\t\tlet side;\n\n\t\tObject.entries( values ).some( ( [ key, value ] ) => {\n\t\t\tside = key;\n\t\t\treturn value !== undefined;\n\t\t} );\n\n\t\treturn side;\n\t}\n\n\t// Only single side supported and no value defined.\n\tif ( sides?.length === 1 && ! sideValues.length ) {\n\t\treturn sides[ 0 ];\n\t}\n\n\t// Default to the Custom (separated sides) view.\n\treturn VIEWS.custom;\n}\n","/**\n * Internal dependencies\n */\nimport { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';\n\n/**\n * Returns a BoxControl object value from a given blockGap style value.\n * The string check is for backwards compatibility before Gutenberg supported\n * split gap values (row and column) and the value was a string n + unit.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @return {Object|null} A value to pass to the BoxControl component.\n */\nexport function getGapBoxControlValueFromStyle( blockGapValue ) {\n\tif ( ! blockGapValue ) {\n\t\treturn null;\n\t}\n\n\tconst isValueString = typeof blockGapValue === 'string';\n\treturn {\n\t\ttop: isValueString ? blockGapValue : blockGapValue?.top,\n\t\tleft: isValueString ? blockGapValue : blockGapValue?.left,\n\t};\n}\n\n/**\n * Returns a CSS value for the `gap` property from a given blockGap style.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @param {string?} defaultValue A default gap value.\n * @return {string|null} The concatenated gap value (row and column).\n */\nexport function getGapCSSValue( blockGapValue, defaultValue = '0' ) {\n\tconst blockGapBoxControlValue =\n\t\tgetGapBoxControlValueFromStyle( blockGapValue );\n\tif ( ! blockGapBoxControlValue ) {\n\t\treturn null;\n\t}\n\n\tconst row =\n\t\tgetSpacingPresetCssVar( blockGapBoxControlValue?.top ) || defaultValue;\n\tconst column =\n\t\tgetSpacingPresetCssVar( blockGapBoxControlValue?.left ) || defaultValue;\n\n\treturn row === column ? row : `${ row } ${ column }`;\n}\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/components';\n\nexport const alignBottom = (\n\t\n\t\t\n\t\n);\n\nexport const alignCenter = (\n\t\n\t\t\n\t\n);\n\nexport const alignTop = (\n\t\n\t\t\n\t\n);\n\nexport const alignStretch = (\n\t\n\t\t\n\t\n);\n\nexport const spaceBetween = (\n\t\n\t\t\n\t\n);\n","/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\nimport { ToolbarGroup, ToolbarDropdownMenu } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\talignTop,\n\talignCenter,\n\talignBottom,\n\talignStretch,\n\tspaceBetween,\n} from './icons';\n\nconst BLOCK_ALIGNMENTS_CONTROLS = {\n\ttop: {\n\t\ticon: alignTop,\n\t\ttitle: _x( 'Align top', 'Block vertical alignment setting' ),\n\t},\n\tcenter: {\n\t\ticon: alignCenter,\n\t\ttitle: _x( 'Align middle', 'Block vertical alignment setting' ),\n\t},\n\tbottom: {\n\t\ticon: alignBottom,\n\t\ttitle: _x( 'Align bottom', 'Block vertical alignment setting' ),\n\t},\n\tstretch: {\n\t\ticon: alignStretch,\n\t\ttitle: _x( 'Stretch to fill', 'Block vertical alignment setting' ),\n\t},\n\t'space-between': {\n\t\ticon: spaceBetween,\n\t\ttitle: _x( 'Space between', 'Block vertical alignment setting' ),\n\t},\n};\n\nconst DEFAULT_CONTROLS = [ 'top', 'center', 'bottom' ];\nconst DEFAULT_CONTROL = 'top';\n\nfunction BlockVerticalAlignmentUI( {\n\tvalue,\n\tonChange,\n\tcontrols = DEFAULT_CONTROLS,\n\tisCollapsed = true,\n\tisToolbar,\n} ) {\n\tfunction applyOrUnset( align ) {\n\t\treturn () => onChange( value === align ? undefined : align );\n\t}\n\n\tconst activeAlignment = BLOCK_ALIGNMENTS_CONTROLS[ value ];\n\tconst defaultAlignmentControl =\n\t\tBLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst extraProps = isToolbar ? { isCollapsed } : {};\n\n\treturn (\n\t\t {\n\t\t\t\treturn {\n\t\t\t\t\t...BLOCK_ALIGNMENTS_CONTROLS[ control ],\n\t\t\t\t\tisActive: value === control,\n\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\tonClick: applyOrUnset( control ),\n\t\t\t\t};\n\t\t\t} ) }\n\t\t\t{ ...extraProps }\n\t\t/>\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-vertical-alignment-toolbar/README.md\n */\nexport default BlockVerticalAlignmentUI;\n","/**\n * Internal dependencies\n */\nimport BlockVerticalAlignmentUI from './ui';\n\nconst BlockVerticalAlignmentControl = ( props ) => {\n\treturn ;\n};\n\nconst BlockVerticalAlignmentToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-vertical-alignment-control/README.md\n */\nexport { BlockVerticalAlignmentControl, BlockVerticalAlignmentToolbar };\n","/**\n * WordPress dependencies\n */\nimport { ToolbarDropdownMenu, ToolbarGroup } from '@wordpress/components';\nimport {\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n\tjustifySpaceBetween,\n\tjustifyStretch,\n} from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nconst icons = {\n\tleft: justifyLeft,\n\tcenter: justifyCenter,\n\tright: justifyRight,\n\t'space-between': justifySpaceBetween,\n\tstretch: justifyStretch,\n};\n\nfunction JustifyContentUI( {\n\tallowedControls = [ 'left', 'center', 'right', 'space-between' ],\n\tisCollapsed = true,\n\tonChange,\n\tvalue,\n\tpopoverProps,\n\tisToolbar,\n} ) {\n\t// If the control is already selected we want a click\n\t// again on the control to deselect the item, so we\n\t// call onChange( undefined )\n\tconst handleClick = ( next ) => {\n\t\tif ( next === value ) {\n\t\t\tonChange( undefined );\n\t\t} else {\n\t\t\tonChange( next );\n\t\t}\n\t};\n\n\tconst icon = value ? icons[ value ] : icons.left;\n\tconst allControls = [\n\t\t{\n\t\t\tname: 'left',\n\t\t\ticon: justifyLeft,\n\t\t\ttitle: __( 'Justify items left' ),\n\t\t\tisActive: 'left' === value,\n\t\t\tonClick: () => handleClick( 'left' ),\n\t\t},\n\t\t{\n\t\t\tname: 'center',\n\t\t\ticon: justifyCenter,\n\t\t\ttitle: __( 'Justify items center' ),\n\t\t\tisActive: 'center' === value,\n\t\t\tonClick: () => handleClick( 'center' ),\n\t\t},\n\t\t{\n\t\t\tname: 'right',\n\t\t\ticon: justifyRight,\n\t\t\ttitle: __( 'Justify items right' ),\n\t\t\tisActive: 'right' === value,\n\t\t\tonClick: () => handleClick( 'right' ),\n\t\t},\n\t\t{\n\t\t\tname: 'space-between',\n\t\t\ticon: justifySpaceBetween,\n\t\t\ttitle: __( 'Space between items' ),\n\t\t\tisActive: 'space-between' === value,\n\t\t\tonClick: () => handleClick( 'space-between' ),\n\t\t},\n\t\t{\n\t\t\tname: 'stretch',\n\t\t\ticon: justifyStretch,\n\t\t\ttitle: __( 'Stretch items' ),\n\t\t\tisActive: 'stretch' === value,\n\t\t\tonClick: () => handleClick( 'stretch' ),\n\t\t},\n\t];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst extraProps = isToolbar ? { isCollapsed } : {};\n\n\treturn (\n\t\t\n\t\t\t\tallowedControls.includes( elem.name )\n\t\t\t) }\n\t\t\t{ ...extraProps }\n\t\t/>\n\t);\n}\n\nexport default JustifyContentUI;\n","/**\n * Internal dependencies\n */\nimport JustifyContentUI from './ui';\n\nconst JustifyContentControl = ( props ) => {\n\treturn ;\n};\n\nconst JustifyToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/justify-content-control/README.md\n */\nexport { JustifyContentControl, JustifyToolbar };\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n\tjustifySpaceBetween,\n\tjustifyStretch,\n\tarrowRight,\n\tarrowDown,\n} from '@wordpress/icons';\nimport {\n\tButton,\n\tToggleControl,\n\tFlex,\n\tFlexItem,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { appendSelectors, getBlockGapCSS } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport {\n\tBlockControls,\n\tJustifyContentControl,\n\tBlockVerticalAlignmentControl,\n} from '../components';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\n// Used with the default, horizontal flex orientation.\nconst justifyContentMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n\t'space-between': 'space-between',\n};\n\n// Used with the vertical (column) flex orientation.\nconst alignItemsMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n\tstretch: 'stretch',\n};\n\nconst verticalAlignmentMap = {\n\ttop: 'flex-start',\n\tcenter: 'center',\n\tbottom: 'flex-end',\n\tstretch: 'stretch',\n\t'space-between': 'space-between',\n};\n\nconst flexWrapOptions = [ 'wrap', 'nowrap' ];\n\nexport default {\n\tname: 'flex',\n\tlabel: __( 'Flex' ),\n\tinspectorControls: function FlexLayoutInspectorControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { allowOrientation = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ allowOrientation && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\ttoolBarControls: function FlexLayoutToolbarControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport,\n\t} ) {\n\t\tif ( layoutBlockSupport?.allowSwitching ) {\n\t\t\treturn null;\n\t\t}\n\t\tconst { allowVerticalAlignment = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ allowVerticalAlignment && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\n\t\t// If a block's block.json skips serialization for spacing or spacing.blockGap,\n\t\t// don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tstyle?.spacing?.blockGap &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? getGapCSSValue( style?.spacing?.blockGap, '0.5em' )\n\t\t\t\t: undefined;\n\t\tconst justifyContent = justifyContentMap[ layout.justifyContent ];\n\t\tconst flexWrap = flexWrapOptions.includes( layout.flexWrap )\n\t\t\t? layout.flexWrap\n\t\t\t: 'wrap';\n\t\tconst verticalAlignment =\n\t\t\tverticalAlignmentMap[ layout.verticalAlignment ];\n\t\tconst alignItems =\n\t\t\talignItemsMap[ layout.justifyContent ] || alignItemsMap.left;\n\n\t\tlet output = '';\n\t\tconst rules = [];\n\n\t\tif ( flexWrap && flexWrap !== 'wrap' ) {\n\t\t\trules.push( `flex-wrap: ${ flexWrap }` );\n\t\t}\n\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\tif ( verticalAlignment ) {\n\t\t\t\trules.push( `align-items: ${ verticalAlignment }` );\n\t\t\t}\n\t\t\tif ( justifyContent ) {\n\t\t\t\trules.push( `justify-content: ${ justifyContent }` );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( verticalAlignment ) {\n\t\t\t\trules.push( `justify-content: ${ verticalAlignment }` );\n\t\t\t}\n\t\t\trules.push( 'flex-direction: column' );\n\t\t\trules.push( `align-items: ${ alignItems }` );\n\t\t}\n\n\t\tif ( rules.length ) {\n\t\t\toutput = `${ appendSelectors( selector ) } {\n\t\t\t\t${ rules.join( '; ' ) };\n\t\t\t}`;\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'flex',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation( layout ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\t\treturn orientation;\n\t},\n\tgetAlignments() {\n\t\treturn [];\n\t},\n};\n\nfunction FlexLayoutVerticalAlignmentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { orientation = 'horizontal' } = layout;\n\n\tconst defaultVerticalAlignment =\n\t\torientation === 'horizontal'\n\t\t\t? verticalAlignmentMap.center\n\t\t\t: verticalAlignmentMap.top;\n\n\tconst { verticalAlignment = defaultVerticalAlignment } = layout;\n\n\tconst onVerticalAlignmentChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tverticalAlignment: value,\n\t\t} );\n\t};\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\tconst verticalAlignmentOptions = [\n\t\t{\n\t\t\tvalue: 'flex-start',\n\t\t\tlabel: __( 'Align items top' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\tlabel: __( 'Align items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'flex-end',\n\t\t\tlabel: __( 'Align items bottom' ),\n\t\t},\n\t];\n\n\treturn (\n\t\t
\n\t\t\t{ __( 'Vertical alignment' ) }\n\t\t\t
\n\t\t\t\t{ verticalAlignmentOptions.map( ( value, icon, label ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t onVerticalAlignmentChange( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t
\n\t\t
\n\t);\n}\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nfunction FlexLayoutJustifyContentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { justifyContent = 'left', orientation = 'horizontal' } = layout;\n\tconst onJustificationChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tjustifyContent: value,\n\t\t} );\n\t};\n\tconst allowedControls = [ 'left', 'center', 'right' ];\n\tif ( orientation === 'horizontal' ) {\n\t\tallowedControls.push( 'space-between' );\n\t} else {\n\t\tallowedControls.push( 'stretch' );\n\t}\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\tconst justificationOptions = [\n\t\t{\n\t\t\tvalue: 'left',\n\t\t\ticon: justifyLeft,\n\t\t\tlabel: __( 'Justify items left' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\ticon: justifyCenter,\n\t\t\tlabel: __( 'Justify items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'right',\n\t\t\ticon: justifyRight,\n\t\t\tlabel: __( 'Justify items right' ),\n\t\t},\n\t];\n\tif ( orientation === 'horizontal' ) {\n\t\tjustificationOptions.push( {\n\t\t\tvalue: 'space-between',\n\t\t\ticon: justifySpaceBetween,\n\t\t\tlabel: __( 'Space between items' ),\n\t\t} );\n\t} else {\n\t\tjustificationOptions.push( {\n\t\t\tvalue: 'stretch',\n\t\t\ticon: justifyStretch,\n\t\t\tlabel: __( 'Stretch items' ),\n\t\t} );\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ justificationOptions.map( ( { value, icon, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\nfunction FlexWrapControl( { layout, onChange } ) {\n\tconst { flexWrap = 'wrap' } = layout;\n\treturn (\n\t\t {\n\t\t\t\tonChange( {\n\t\t\t\t\t...layout,\n\t\t\t\t\tflexWrap: value ? 'wrap' : 'nowrap',\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tchecked={ flexWrap === 'wrap' }\n\t\t/>\n\t);\n}\n\nfunction OrientationControl( { layout, onChange } ) {\n\tconst {\n\t\torientation = 'horizontal',\n\t\tverticalAlignment,\n\t\tjustifyContent,\n\t} = layout;\n\treturn (\n\t\t {\n\t\t\t\t// Make sure the vertical alignment and justification are compatible with the new orientation.\n\t\t\t\tlet newVerticalAlignment = verticalAlignment;\n\t\t\t\tlet newJustification = justifyContent;\n\t\t\t\tif ( value === 'horizontal' ) {\n\t\t\t\t\tif ( verticalAlignment === 'space-between' ) {\n\t\t\t\t\t\tnewVerticalAlignment = 'center';\n\t\t\t\t\t}\n\t\t\t\t\tif ( justifyContent === 'stretch' ) {\n\t\t\t\t\t\tnewJustification = 'left';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ( verticalAlignment === 'stretch' ) {\n\t\t\t\t\t\tnewVerticalAlignment = 'top';\n\t\t\t\t\t}\n\t\t\t\t\tif ( justifyContent === 'space-between' ) {\n\t\t\t\t\t\tnewJustification = 'left';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn onChange( {\n\t\t\t\t\t...layout,\n\t\t\t\t\torientation: value,\n\t\t\t\t\tverticalAlignment: newVerticalAlignment,\n\t\t\t\t\tjustifyContent: newJustification,\n\t\t\t\t} );\n\t\t\t} }\n\t\t>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getBlockGapCSS, getAlignmentsInfo } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\nexport default {\n\tname: 'default',\n\tlabel: __( 'Flow' ),\n\tinspectorControls: function DefaultLayoutInspectorControls() {\n\t\treturn null;\n\t},\n\ttoolBarControls: function DefaultLayoutToolbarControls() {\n\t\treturn null;\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst blockGapStyleValue = getGapCSSValue( style?.spacing?.blockGap );\n\n\t\t// If a block's block.json skips serialization for spacing or\n\t\t// spacing.blockGap, don't apply the user-defined value to the styles.\n\t\tlet blockGapValue = '';\n\t\tif ( ! shouldSkipSerialization( blockName, 'spacing', 'blockGap' ) ) {\n\t\t\t// If an object is provided only use the 'top' value for this kind of gap.\n\t\t\tif ( blockGapStyleValue?.top ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue?.top );\n\t\t\t} else if ( typeof blockGapStyleValue === 'string' ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue );\n\t\t\t}\n\t\t}\n\n\t\tlet output = '';\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'default',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'vertical';\n\t},\n\tgetAlignments( layout, isBlockBasedTheme ) {\n\t\tconst alignmentInfo = getAlignmentsInfo( layout );\n\t\tif ( layout.alignments !== undefined ) {\n\t\t\tif ( ! layout.alignments.includes( 'none' ) ) {\n\t\t\t\tlayout.alignments.unshift( 'none' );\n\t\t\t}\n\t\t\treturn layout.alignments.map( ( alignment ) => ( {\n\t\t\t\tname: alignment,\n\t\t\t\tinfo: alignmentInfo[ alignment ],\n\t\t\t} ) );\n\t\t}\n\n\t\tconst alignments = [\n\t\t\t{ name: 'left' },\n\t\t\t{ name: 'center' },\n\t\t\t{ name: 'right' },\n\t\t];\n\n\t\t// This is for backwards compatibility with hybrid themes.\n\t\tif ( ! isBlockBasedTheme ) {\n\t\t\tconst { contentSize, wideSize } = layout;\n\t\t\tif ( contentSize ) {\n\t\t\t\talignments.unshift( { name: 'full' } );\n\t\t\t}\n\n\t\t\tif ( wideSize ) {\n\t\t\t\talignments.unshift( {\n\t\t\t\t\tname: 'wide',\n\t\t\t\t\tinfo: alignmentInfo.wide,\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\talignments.unshift( { name: 'none', info: alignmentInfo.none } );\n\n\t\treturn alignments;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { cloneElement, forwardRef } from '@wordpress/element';\n\n/** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */\n\n/**\n * Return an SVG icon.\n *\n * @param {IconProps} props icon is the SVG component to render\n * size is a number specifiying the icon size in pixels\n * Other props will be passed to wrapped SVG component\n * @param {import('react').ForwardedRef} ref The forwarded ref to the SVG element.\n *\n * @return {JSX.Element} Icon component\n */\nfunction Icon( { icon, size = 24, ...props }, ref ) {\n\treturn cloneElement( icon, {\n\t\twidth: size,\n\t\theight: size,\n\t\t...props,\n\t\tref,\n\t} );\n}\n\nexport default forwardRef( Icon );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignNone = (\n\t\n\t\t\n\t\n);\n\nexport default alignNone;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst stretchWide = (\n\t\n\t\t\n\t\n);\n\nexport default stretchWide;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tIcon,\n\talignNone,\n\tstretchWide,\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n} from '@wordpress/icons';\nimport { getCSSRules } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../components/use-settings';\nimport { appendSelectors, getBlockGapCSS, getAlignmentsInfo } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport { BlockControls, JustifyContentControl } from '../components';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\nexport default {\n\tname: 'constrained',\n\tlabel: __( 'Constrained' ),\n\tinspectorControls: function DefaultLayoutInspectorControls( {\n\t\tlayout,\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { wideSize, contentSize, justifyContent = 'center' } = layout;\n\t\tconst {\n\t\t\tallowJustification = true,\n\t\t\tallowCustomContentAndWideSize = true,\n\t\t} = layoutBlockSupport;\n\t\tconst onJustificationChange = ( value ) => {\n\t\t\tonChange( {\n\t\t\t\t...layout,\n\t\t\t\tjustifyContent: value,\n\t\t\t} );\n\t\t};\n\t\tconst justificationOptions = [\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\ticon: justifyLeft,\n\t\t\t\tlabel: __( 'Justify items left' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'center',\n\t\t\t\ticon: justifyCenter,\n\t\t\t\tlabel: __( 'Justify items center' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\ticon: justifyRight,\n\t\t\t\tlabel: __( 'Justify items right' ),\n\t\t\t},\n\t\t];\n\t\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\t\tconst units = useCustomUnits( {\n\t\t\tavailableUnits: availableUnits || [ '%', 'px', 'em', 'rem', 'vw' ],\n\t\t} );\n\t\treturn (\n\t\t\t\n\t\t\t\t{ allowCustomContentAndWideSize && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\tcontentSize: nextWidth,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\twideSize: nextWidth,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Customize the width for all elements that are assigned to the center or wide columns.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ allowJustification && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ justificationOptions.map(\n\t\t\t\t\t\t\t( { value, icon, label } ) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t},\n\ttoolBarControls: function DefaultLayoutToolbarControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport,\n\t} ) {\n\t\tconst { allowJustification = true } = layoutBlockSupport;\n\n\t\tif ( ! allowJustification ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout = {},\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst { contentSize, wideSize, justifyContent } = layout;\n\t\tconst blockGapStyleValue = getGapCSSValue( style?.spacing?.blockGap );\n\n\t\t// If a block's block.json skips serialization for spacing or\n\t\t// spacing.blockGap, don't apply the user-defined value to the styles.\n\t\tlet blockGapValue = '';\n\t\tif ( ! shouldSkipSerialization( blockName, 'spacing', 'blockGap' ) ) {\n\t\t\t// If an object is provided only use the 'top' value for this kind of gap.\n\t\t\tif ( blockGapStyleValue?.top ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue?.top );\n\t\t\t} else if ( typeof blockGapStyleValue === 'string' ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue );\n\t\t\t}\n\t\t}\n\n\t\tconst marginLeft =\n\t\t\tjustifyContent === 'left' ? '0 !important' : 'auto !important';\n\t\tconst marginRight =\n\t\t\tjustifyContent === 'right' ? '0 !important' : 'auto !important';\n\n\t\tlet output =\n\t\t\t!! contentSize || !! wideSize\n\t\t\t\t? `\n\t\t\t\t\t${ appendSelectors(\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t\t\t) } {\n\t\t\t\t\t\tmax-width: ${ contentSize ?? wideSize };\n\t\t\t\t\t\tmargin-left: ${ marginLeft };\n\t\t\t\t\t\tmargin-right: ${ marginRight };\n\t\t\t\t\t}\n\t\t\t\t\t${ appendSelectors( selector, '> .alignwide' ) } {\n\t\t\t\t\t\tmax-width: ${ wideSize ?? contentSize };\n\t\t\t\t\t}\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmax-width: none;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t: '';\n\n\t\tif ( justifyContent === 'left' ) {\n\t\t\toutput += `${ appendSelectors(\n\t\t\t\tselector,\n\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t) }\n\t\t\t{ margin-left: ${ marginLeft }; }`;\n\t\t} else if ( justifyContent === 'right' ) {\n\t\t\toutput += `${ appendSelectors(\n\t\t\t\tselector,\n\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t) }\n\t\t\t{ margin-right: ${ marginRight }; }`;\n\t\t}\n\n\t\t// If there is custom padding, add negative margins for alignfull blocks.\n\t\tif ( style?.spacing?.padding ) {\n\t\t\t// The style object might be storing a preset so we need to make sure we get a usable value.\n\t\t\tconst paddingValues = getCSSRules( style );\n\t\t\tpaddingValues.forEach( ( rule ) => {\n\t\t\t\tif ( rule.key === 'paddingRight' ) {\n\t\t\t\t\t// Add unit if 0, to avoid calc(0 * -1) which is invalid.\n\t\t\t\t\tconst paddingRightValue =\n\t\t\t\t\t\trule.value === '0' ? '0px' : rule.value;\n\n\t\t\t\t\toutput += `\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmargin-right: calc(${ paddingRightValue } * -1);\n\t\t\t\t\t}\n\t\t\t\t\t`;\n\t\t\t\t} else if ( rule.key === 'paddingLeft' ) {\n\t\t\t\t\t// Add unit if 0, to avoid calc(0 * -1) which is invalid.\n\t\t\t\t\tconst paddingLeftValue =\n\t\t\t\t\t\trule.value === '0' ? '0px' : rule.value;\n\n\t\t\t\t\toutput += `\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmargin-left: calc(${ paddingLeftValue } * -1);\n\t\t\t\t\t}\n\t\t\t\t\t`;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'constrained',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'vertical';\n\t},\n\tgetAlignments( layout ) {\n\t\tconst alignmentInfo = getAlignmentsInfo( layout );\n\t\tif ( layout.alignments !== undefined ) {\n\t\t\tif ( ! layout.alignments.includes( 'none' ) ) {\n\t\t\t\tlayout.alignments.unshift( 'none' );\n\t\t\t}\n\t\t\treturn layout.alignments.map( ( alignment ) => ( {\n\t\t\t\tname: alignment,\n\t\t\t\tinfo: alignmentInfo[ alignment ],\n\t\t\t} ) );\n\t\t}\n\t\tconst { contentSize, wideSize } = layout;\n\n\t\tconst alignments = [\n\t\t\t{ name: 'left' },\n\t\t\t{ name: 'center' },\n\t\t\t{ name: 'right' },\n\t\t];\n\n\t\tif ( contentSize ) {\n\t\t\talignments.unshift( { name: 'full' } );\n\t\t}\n\n\t\tif ( wideSize ) {\n\t\t\talignments.unshift( { name: 'wide', info: alignmentInfo.wide } );\n\t\t}\n\n\t\talignments.unshift( { name: 'none', info: alignmentInfo.none } );\n\n\t\treturn alignments;\n\t},\n};\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nfunction DefaultLayoutJustifyContentControl( { layout, onChange } ) {\n\tconst { justifyContent = 'center' } = layout;\n\tconst onJustificationChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tjustifyContent: value,\n\t\t} );\n\t};\n\tconst allowedControls = [ 'left', 'center', 'right' ];\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\nimport {\n\tBaseControl,\n\tFlex,\n\tFlexItem,\n\tRangeControl,\n\t__experimentalNumberControl as NumberControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { appendSelectors, getBlockGapCSS } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\nconst RANGE_CONTROL_MAX_VALUES = {\n\tpx: 600,\n\t'%': 100,\n\tvw: 100,\n\tvh: 100,\n\tem: 38,\n\trem: 38,\n\tsvw: 100,\n\tlvw: 100,\n\tdvw: 100,\n\tsvh: 100,\n\tlvh: 100,\n\tdvh: 100,\n\tvi: 100,\n\tsvi: 100,\n\tlvi: 100,\n\tdvi: 100,\n\tvb: 100,\n\tsvb: 100,\n\tlvb: 100,\n\tdvb: 100,\n\tvmin: 100,\n\tsvmin: 100,\n\tlvmin: 100,\n\tdvmin: 100,\n\tvmax: 100,\n\tsvmax: 100,\n\tlvmax: 100,\n\tdvmax: 100,\n};\n\nconst units = [\n\t{ value: 'px', label: 'px', default: 0 },\n\t{ value: 'rem', label: 'rem', default: 0 },\n\t{ value: 'em', label: 'em', default: 0 },\n];\n\nexport default {\n\tname: 'grid',\n\tlabel: __( 'Grid' ),\n\tinspectorControls: function GridLayoutInspectorControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { allowSizingOnChildren = false } = layoutBlockSupport;\n\n\t\t// In the experiment we want to also show column control in Auto mode, and\n\t\t// the minimum width control in Manual mode.\n\t\tconst showColumnsControl =\n\t\t\twindow.__experimentalEnableGridInteractivity ||\n\t\t\t!! layout?.columnCount;\n\t\tconst showMinWidthControl =\n\t\t\twindow.__experimentalEnableGridInteractivity ||\n\t\t\t! layout?.columnCount;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ showColumnsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ showMinWidthControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\ttoolBarControls: function GridLayoutToolbarControls() {\n\t\treturn null;\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst {\n\t\t\tminimumColumnWidth = null,\n\t\t\tcolumnCount = null,\n\t\t\trowCount = null,\n\t\t} = layout;\n\n\t\t// Check that the grid layout attributes are of the correct type, so that we don't accidentally\n\t\t// write code that stores a string attribute instead of a number.\n\t\tif ( process.env.NODE_ENV === 'development' ) {\n\t\t\tif (\n\t\t\t\tminimumColumnWidth &&\n\t\t\t\ttypeof minimumColumnWidth !== 'string'\n\t\t\t) {\n\t\t\t\tthrow new Error( 'minimumColumnWidth must be a string' );\n\t\t\t}\n\t\t\tif ( columnCount && typeof columnCount !== 'number' ) {\n\t\t\t\tthrow new Error( 'columnCount must be a number' );\n\t\t\t}\n\t\t\tif ( rowCount && typeof rowCount !== 'number' ) {\n\t\t\t\tthrow new Error( 'rowCount must be a number' );\n\t\t\t}\n\t\t}\n\n\t\t// If a block's block.json skips serialization for spacing or spacing.blockGap,\n\t\t// don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tstyle?.spacing?.blockGap &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? getGapCSSValue( style?.spacing?.blockGap, '0.5em' )\n\t\t\t\t: undefined;\n\n\t\tlet output = '';\n\t\tconst rules = [];\n\n\t\tif ( minimumColumnWidth && columnCount > 0 ) {\n\t\t\tconst maxValue = `max(${ minimumColumnWidth }, ( 100% - (${\n\t\t\t\tblockGapValue || '1.2rem'\n\t\t\t}*${ columnCount - 1 }) ) / ${ columnCount })`;\n\t\t\trules.push(\n\t\t\t\t`grid-template-columns: repeat(auto-fill, minmax(${ maxValue }, 1fr))`,\n\t\t\t\t`container-type: inline-size`\n\t\t\t);\n\t\t\tif ( rowCount ) {\n\t\t\t\trules.push(\n\t\t\t\t\t`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`\n\t\t\t\t);\n\t\t\t}\n\t\t} else if ( columnCount ) {\n\t\t\trules.push(\n\t\t\t\t`grid-template-columns: repeat(${ columnCount }, minmax(0, 1fr))`\n\t\t\t);\n\t\t\tif ( rowCount ) {\n\t\t\t\trules.push(\n\t\t\t\t\t`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\trules.push(\n\t\t\t\t`grid-template-columns: repeat(auto-fill, minmax(min(${\n\t\t\t\t\tminimumColumnWidth || '12rem'\n\t\t\t\t}, 100%), 1fr))`,\n\t\t\t\t'container-type: inline-size'\n\t\t\t);\n\t\t}\n\n\t\tif ( rules.length ) {\n\t\t\t// Reason to disable: the extra line breaks added by prettier mess with the unit tests.\n\t\t\t// eslint-disable-next-line prettier/prettier\n\t\t\toutput = `${ appendSelectors( selector ) } { ${ rules.join(\n\t\t\t\t'; '\n\t\t\t) }; }`;\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'grid',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'horizontal';\n\t},\n\tgetAlignments() {\n\t\treturn [];\n\t},\n};\n\n// Enables setting minimum width of grid items.\nfunction GridLayoutMinimumWidthControl( { layout, onChange } ) {\n\tconst { minimumColumnWidth, columnCount, isManualPlacement } = layout;\n\tconst defaultValue = isManualPlacement || columnCount ? null : '12rem';\n\tconst value = minimumColumnWidth || defaultValue;\n\tconst [ quantity, unit = 'rem' ] =\n\t\tparseQuantityAndUnitFromRawValue( value );\n\n\tconst handleSliderChange = ( next ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tminimumColumnWidth: [ next, unit ].join( '' ),\n\t\t} );\n\t};\n\n\t// Mostly copied from HeightControl.\n\tconst handleUnitChange = ( newUnit ) => {\n\t\t// Attempt to smooth over differences between currentUnit and newUnit.\n\t\t// This should slightly improve the experience of switching between unit types.\n\t\tlet newValue;\n\n\t\tif ( [ 'em', 'rem' ].includes( newUnit ) && unit === 'px' ) {\n\t\t\t// Convert pixel value to an approximate of the new unit, assuming a root size of 16px.\n\t\t\tnewValue = ( quantity / 16 ).toFixed( 2 ) + newUnit;\n\t\t} else if ( [ 'em', 'rem' ].includes( unit ) && newUnit === 'px' ) {\n\t\t\t// Convert to pixel value assuming a root size of 16px.\n\t\t\tnewValue = Math.round( quantity * 16 ) + newUnit;\n\t\t}\n\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tminimumColumnWidth: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{ __( 'Minimum column width' ) }\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\tminimumColumnWidth:\n\t\t\t\t\t\t\t\t\tnewValue === '' ? undefined : newValue,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonUnitChange={ handleUnitChange }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tlabel={ __( 'Minimum column width' ) }\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n\n// Enables setting number of grid columns\nfunction GridLayoutColumnsAndRowsControl( {\n\tlayout,\n\tonChange,\n\tallowSizingOnChildren,\n} ) {\n\t// If the grid interactivity experiment is enabled, allow unsetting the column count.\n\tconst defaultColumnCount = window.__experimentalEnableGridInteractivity\n\t\t? undefined\n\t\t: 3;\n\tconst {\n\t\tcolumnCount = defaultColumnCount,\n\t\trowCount,\n\t\tisManualPlacement,\n\t} = layout;\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t{ ( ! window.__experimentalEnableGridInteractivity ||\n\t\t\t\t\t! isManualPlacement ) && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Columns' ) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Allow unsetting the column count when in auto mode.\n\t\t\t\t\t\t\t\t\tconst defaultNewColumnCount =\n\t\t\t\t\t\t\t\t\t\tisManualPlacement ? 1 : undefined;\n\t\t\t\t\t\t\t\t\tconst newColumnCount =\n\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t? defaultNewColumnCount\n\t\t\t\t\t\t\t\t\t\t\t: parseInt( value, 10 );\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\tcolumnCount: newColumnCount,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Don't allow unsetting the column count.\n\t\t\t\t\t\t\t\t\tconst newColumnCount =\n\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: parseInt( value, 10 );\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\tcolumnCount: newColumnCount,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ columnCount }\n\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\thideLabelFromVision={\n\t\t\t\t\t\t\t\t! window.__experimentalEnableGridInteractivity ||\n\t\t\t\t\t\t\t\t! isManualPlacement\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{ window.__experimentalEnableGridInteractivity &&\n\t\t\t\t\t\tallowSizingOnChildren &&\n\t\t\t\t\t\tisManualPlacement ? (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t// Don't allow unsetting the row count.\n\t\t\t\t\t\t\t\t\tconst newRowCount =\n\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: parseInt( value, 10 );\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\trowCount: newRowCount,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tvalue={ rowCount }\n\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\tlabel={ __( 'Rows' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\tcolumnCount:\n\t\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t\t: value,\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\tmax={ 16 }\n\t\t\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n}\n\n// Enables switching between grid types\nfunction GridLayoutTypeControl( { layout, onChange } ) {\n\tconst { columnCount, rowCount, minimumColumnWidth, isManualPlacement } =\n\t\tlayout;\n\n\t/**\n\t * When switching, temporarily save any custom values set on the\n\t * previous type so we can switch back without loss.\n\t */\n\tconst [ tempColumnCount, setTempColumnCount ] = useState(\n\t\tcolumnCount || 3\n\t);\n\tconst [ tempRowCount, setTempRowCount ] = useState( rowCount );\n\tconst [ tempMinimumColumnWidth, setTempMinimumColumnWidth ] = useState(\n\t\tminimumColumnWidth || '12rem'\n\t);\n\n\tconst gridPlacement =\n\t\tisManualPlacement ||\n\t\t( !! columnCount && ! window.__experimentalEnableGridInteractivity )\n\t\t\t? 'manual'\n\t\t\t: 'auto';\n\n\tconst onChangeType = ( value ) => {\n\t\tif ( value === 'manual' ) {\n\t\t\tsetTempMinimumColumnWidth( minimumColumnWidth || '12rem' );\n\t\t} else {\n\t\t\tsetTempColumnCount( columnCount || 3 );\n\t\t\tsetTempRowCount( rowCount );\n\t\t}\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tcolumnCount: value === 'manual' ? tempColumnCount : null,\n\t\t\trowCount:\n\t\t\t\tvalue === 'manual' &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t\t\t? tempRowCount\n\t\t\t\t\t: undefined,\n\t\t\tisManualPlacement:\n\t\t\t\tvalue === 'manual' &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t\t\t? true\n\t\t\t\t\t: undefined,\n\t\t\tminimumColumnWidth:\n\t\t\t\tvalue === 'auto' ? tempMinimumColumnWidth : null,\n\t\t} );\n\t};\n\n\tconst helpText =\n\t\tgridPlacement === 'manual'\n\t\t\t? __(\n\t\t\t\t\t'Grid items can be manually placed in any position on the grid.'\n\t\t\t )\n\t\t\t: __(\n\t\t\t\t\t'Grid items are placed automatically depending on their order.'\n\t\t\t );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport flex from './flex';\nimport flow from './flow';\nimport constrained from './constrained';\nimport grid from './grid';\n\nconst layoutTypes = [ flow, flex, constrained, grid ];\n\n/**\n * Retrieves a layout type by name.\n *\n * @param {string} name - The name of the layout type.\n * @return {Object} Layout type.\n */\nexport function getLayoutType( name = 'default' ) {\n\treturn layoutTypes.find( ( layoutType ) => layoutType.name === name );\n}\n\n/**\n * Retrieves the available layout types.\n *\n * @return {Array} Layout types.\n */\nexport function getLayoutTypes() {\n\treturn layoutTypes;\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getLayoutType } from '../../layouts';\nimport { useSettings } from '../use-settings';\n\nexport const defaultLayout = { type: 'default' };\n\nconst Layout = createContext( defaultLayout );\n\n/**\n * Allows to define the layout.\n */\nexport const LayoutProvider = Layout.Provider;\n\n/**\n * React hook used to retrieve the layout config.\n */\nexport function useLayout() {\n\treturn useContext( Layout );\n}\n\nexport function LayoutStyle( { layout = {}, css, ...props } ) {\n\tconst layoutType = getLayoutType( layout.type );\n\tconst [ blockGapSupport ] = useSettings( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\tif ( layoutType ) {\n\t\tif ( css ) {\n\t\t\treturn ;\n\t\t}\n\t\tconst layoutStyle = layoutType.getLayoutStyle?.( {\n\t\t\thasBlockGapSupport,\n\t\t\tlayout,\n\t\t\t...props,\n\t\t} );\n\t\tif ( layoutStyle ) {\n\t\t\treturn ;\n\t\t}\n\t}\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useLayout } from '../block-list/layout';\nimport { store as blockEditorStore } from '../../store';\nimport { getLayoutType } from '../../layouts';\n\nconst EMPTY_ARRAY = [];\nconst DEFAULT_CONTROLS = [ 'none', 'left', 'center', 'right', 'wide', 'full' ];\nconst WIDE_CONTROLS = [ 'wide', 'full' ];\n\nexport default function useAvailableAlignments( controls = DEFAULT_CONTROLS ) {\n\t// Always add the `none` option if not exists.\n\tif ( ! controls.includes( 'none' ) ) {\n\t\tcontrols = [ 'none', ...controls ];\n\t}\n\tconst isNoneOnly = controls.length === 1 && controls[ 0 ] === 'none';\n\n\tconst [ wideControlsEnabled, themeSupportsLayout, isBlockBasedTheme ] =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\t// If `isNoneOnly` is true, we'll be returning early because there is\n\t\t\t\t// nothing to filter on an empty array. We won't need the info from\n\t\t\t\t// the `useSelect` but we must call it anyway because Rules of Hooks.\n\t\t\t\t// So the callback returns early to avoid block editor subscription.\n\t\t\t\tif ( isNoneOnly ) {\n\t\t\t\t\treturn [ false, false, false ];\n\t\t\t\t}\n\n\t\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\t\t\treturn [\n\t\t\t\t\tsettings.alignWide ?? false,\n\t\t\t\t\tsettings.supportsLayout,\n\t\t\t\t\tsettings.__unstableIsBlockBasedTheme,\n\t\t\t\t];\n\t\t\t},\n\t\t\t[ isNoneOnly ]\n\t\t);\n\tconst layout = useLayout();\n\n\tif ( isNoneOnly ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst layoutType = getLayoutType( layout?.type );\n\n\tif ( themeSupportsLayout ) {\n\t\tconst layoutAlignments = layoutType.getAlignments(\n\t\t\tlayout,\n\t\t\tisBlockBasedTheme\n\t\t);\n\t\tconst alignments = layoutAlignments.filter( ( alignment ) =>\n\t\t\tcontrols.includes( alignment.name )\n\t\t);\n\t\t// While we treat `none` as an alignment, we shouldn't return it if no\n\t\t// other alignments exist.\n\t\tif ( alignments.length === 1 && alignments[ 0 ].name === 'none' ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn alignments;\n\t}\n\n\t// Starting here, it's the fallback for themes not supporting the layout config.\n\tif ( layoutType.name !== 'default' && layoutType.name !== 'constrained' ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst alignments = controls\n\t\t.filter( ( control ) => {\n\t\t\tif ( layout.alignments ) {\n\t\t\t\treturn layout.alignments.includes( control );\n\t\t\t}\n\n\t\t\tif ( ! wideControlsEnabled && WIDE_CONTROLS.includes( control ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn DEFAULT_CONTROLS.includes( control );\n\t\t} )\n\t\t.map( ( name ) => ( { name } ) );\n\n\t// While we treat `none` as an alignment, we shouldn't return it if no\n\t// other alignments exist.\n\tif ( alignments.length === 1 && alignments[ 0 ].name === 'none' ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\treturn alignments;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst positionLeft = (\n\t\n\t\t\n\t\n);\n\nexport default positionLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst positionCenter = (\n\t\n\t\t\n\t\n);\n\nexport default positionCenter;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst positionRight = (\n\t\n\t\t\n\t\n);\n\nexport default positionRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst stretchFullWidth = (\n\t\n\t\t\n\t\n);\n\nexport default stretchFullWidth;\n","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport {\n\talignNone,\n\tpositionCenter,\n\tpositionLeft,\n\tpositionRight,\n\tstretchFullWidth,\n\tstretchWide,\n} from '@wordpress/icons';\n\nexport const BLOCK_ALIGNMENTS_CONTROLS = {\n\tnone: {\n\t\ticon: alignNone,\n\t\ttitle: _x( 'None', 'Alignment option' ),\n\t},\n\tleft: {\n\t\ticon: positionLeft,\n\t\ttitle: __( 'Align left' ),\n\t},\n\tcenter: {\n\t\ticon: positionCenter,\n\t\ttitle: __( 'Align center' ),\n\t},\n\tright: {\n\t\ticon: positionRight,\n\t\ttitle: __( 'Align right' ),\n\t},\n\twide: {\n\t\ticon: stretchWide,\n\t\ttitle: __( 'Wide width' ),\n\t},\n\tfull: {\n\t\ticon: stretchFullWidth,\n\t\ttitle: __( 'Full width' ),\n\t},\n};\n\nexport const DEFAULT_CONTROL = 'none';\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tToolbarDropdownMenu,\n\tToolbarGroup,\n\tMenuGroup,\n\tMenuItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport useAvailableAlignments from './use-available-alignments';\nimport { BLOCK_ALIGNMENTS_CONTROLS, DEFAULT_CONTROL } from './constants';\n\nfunction BlockAlignmentUI( {\n\tvalue,\n\tonChange,\n\tcontrols,\n\tisToolbar,\n\tisCollapsed = true,\n} ) {\n\tconst enabledControls = useAvailableAlignments( controls );\n\tconst hasEnabledControls = !! enabledControls.length;\n\n\tif ( ! hasEnabledControls ) {\n\t\treturn null;\n\t}\n\n\tfunction onChangeAlignment( align ) {\n\t\tonChange( [ value, 'none' ].includes( align ) ? undefined : align );\n\t}\n\n\tconst activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[ value ];\n\tconst defaultAlignmentControl =\n\t\tBLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst commonProps = {\n\t\ticon: activeAlignmentControl\n\t\t\t? activeAlignmentControl.icon\n\t\t\t: defaultAlignmentControl.icon,\n\t\tlabel: __( 'Align' ),\n\t};\n\tconst extraProps = isToolbar\n\t\t? {\n\t\t\t\tisCollapsed,\n\t\t\t\tcontrols: enabledControls.map( ( { name: controlName } ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...BLOCK_ALIGNMENTS_CONTROLS[ controlName ],\n\t\t\t\t\t\tisActive:\n\t\t\t\t\t\t\tvalue === controlName ||\n\t\t\t\t\t\t\t( ! value && controlName === 'none' ),\n\t\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\t\tonClick: () => onChangeAlignment( controlName ),\n\t\t\t\t\t};\n\t\t\t\t} ),\n\t\t }\n\t\t: {\n\t\t\t\ttoggleProps: { description: __( 'Change alignment' ) },\n\t\t\t\tchildren: ( { onClose } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ enabledControls.map(\n\t\t\t\t\t\t\t\t\t( { name: controlName, info } ) => {\n\t\t\t\t\t\t\t\t\t\tconst { icon, title } =\n\t\t\t\t\t\t\t\t\t\t\tBLOCK_ALIGNMENTS_CONTROLS[\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t// If no value is provided, mark as selected the `none` option.\n\t\t\t\t\t\t\t\t\t\tconst isSelected =\n\t\t\t\t\t\t\t\t\t\t\tcontrolName === value ||\n\t\t\t\t\t\t\t\t\t\t\t( ! value &&\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName === 'none' );\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChangeAlignment(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\t\tinfo={ info }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t };\n\n\treturn ;\n}\n\nexport default BlockAlignmentUI;\n","/**\n * Internal dependencies\n */\nimport BlockAlignmentUI from './ui';\n\nconst BlockAlignmentControl = ( props ) => {\n\treturn ;\n};\n\nconst BlockAlignmentToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-alignment-control/README.md\n */\nexport { BlockAlignmentControl, BlockAlignmentToolbar };\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport {\n\tuseBlockEditContext,\n\tblockEditingModeKey,\n} from '../block-edit/context';\n\n/**\n * @typedef {'disabled'|'contentOnly'|'default'} BlockEditingMode\n */\n\n/**\n * Allows a block to restrict the user interface that is displayed for editing\n * that block and its inner blocks.\n *\n * @example\n * ```js\n * function MyBlock( { attributes, setAttributes } ) {\n * useBlockEditingMode( 'disabled' );\n * return
;\n * }\n * ```\n *\n * `mode` can be one of three options:\n *\n * - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be\n * selected.\n * - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the\n * toolbar, the block movers, block settings.\n * - `'default'`: Allows editing the block as normal.\n *\n * The mode is inherited by all of the block's inner blocks, unless they have\n * their own mode.\n *\n * If called outside of a block context, the mode is applied to all blocks.\n *\n * @param {?BlockEditingMode} mode The editing mode to apply. If undefined, the\n * current editing mode is not changed.\n *\n * @return {BlockEditingMode} The current editing mode.\n */\nexport function useBlockEditingMode( mode ) {\n\tconst context = useBlockEditContext();\n\tconst { clientId = '' } = context;\n\tconst { setBlockEditingMode, unsetBlockEditingMode } =\n\t\tuseDispatch( blockEditorStore );\n\tconst globalBlockEditingMode = useSelect(\n\t\t( select ) =>\n\t\t\t// Avoid adding the subscription if not needed!\n\t\t\tclientId ? null : select( blockEditorStore ).getBlockEditingMode(),\n\t\t[ clientId ]\n\t);\n\tuseEffect( () => {\n\t\tif ( mode ) {\n\t\t\tsetBlockEditingMode( clientId, mode );\n\t\t}\n\t\treturn () => {\n\t\t\tif ( mode ) {\n\t\t\t\tunsetBlockEditingMode( clientId );\n\t\t\t}\n\t\t};\n\t}, [ clientId, mode, setBlockEditingMode, unsetBlockEditingMode ] );\n\treturn clientId ? context[ blockEditingModeKey ] : globalBlockEditingMode;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { BlockControls, BlockAlignmentControl } from '../components';\nimport useAvailableAlignments from '../components/block-alignment-control/use-available-alignments';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * An array which includes all possible valid alignments,\n * used to validate if an alignment is valid or not.\n *\n * @constant\n * @type {string[]}\n */\nconst ALL_ALIGNMENTS = [ 'left', 'center', 'right', 'wide', 'full' ];\n\n/**\n * An array which includes all wide alignments.\n * In order for this alignments to be valid they need to be supported by the block,\n * and by the theme.\n *\n * @constant\n * @type {string[]}\n */\nconst WIDE_ALIGNMENTS = [ 'wide', 'full' ];\n\n/**\n * Returns the valid alignments.\n * Takes into consideration the aligns supported by a block, if the block supports wide controls or not and if theme supports wide controls or not.\n * Exported just for testing purposes, not exported outside the module.\n *\n * @param {?boolean|string[]} blockAlign Aligns supported by the block.\n * @param {?boolean} hasWideBlockSupport True if block supports wide alignments. And False otherwise.\n * @param {?boolean} hasWideEnabled True if theme supports wide alignments. And False otherwise.\n *\n * @return {string[]} Valid alignments.\n */\nexport function getValidAlignments(\n\tblockAlign,\n\thasWideBlockSupport = true,\n\thasWideEnabled = true\n) {\n\tlet validAlignments;\n\tif ( Array.isArray( blockAlign ) ) {\n\t\tvalidAlignments = ALL_ALIGNMENTS.filter( ( value ) =>\n\t\t\tblockAlign.includes( value )\n\t\t);\n\t} else if ( blockAlign === true ) {\n\t\t// `true` includes all alignments...\n\t\tvalidAlignments = [ ...ALL_ALIGNMENTS ];\n\t} else {\n\t\tvalidAlignments = [];\n\t}\n\n\tif (\n\t\t! hasWideEnabled ||\n\t\t( blockAlign === true && ! hasWideBlockSupport )\n\t) {\n\t\treturn validAlignments.filter(\n\t\t\t( alignment ) => ! WIDE_ALIGNMENTS.includes( alignment )\n\t\t);\n\t}\n\n\treturn validAlignments;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `align`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.align ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'align' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\talign: {\n\t\t\t\ttype: 'string',\n\t\t\t\t// Allow for '' since it is used by the `updateAlignment` function\n\t\t\t\t// in toolbar controls for special cases with defined default values.\n\t\t\t\tenum: [ ...ALL_ALIGNMENTS, '' ],\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockEditAlignmentToolbarControlsPure( {\n\tname: blockName,\n\talign,\n\tsetAttributes,\n} ) {\n\t// Compute the block valid alignments by taking into account,\n\t// if the theme supports wide alignments or not and the layout's\n\t// available alignments. We do that for conditionally rendering\n\t// Slot.\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( blockName, 'align' ),\n\t\thasBlockSupport( blockName, 'alignWide', true )\n\t);\n\n\tconst validAlignments = useAvailableAlignments(\n\t\tblockAllowedAlignments\n\t).map( ( { name } ) => name );\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( ! validAlignments.length || blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst updateAlignment = ( nextAlign ) => {\n\t\tif ( ! nextAlign ) {\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst blockDefaultAlign = blockType?.attributes?.align?.default;\n\t\t\tif ( blockDefaultAlign ) {\n\t\t\t\tnextAlign = '';\n\t\t\t}\n\t\t}\n\t\tsetAttributes( { align: nextAlign } );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: BlockEditAlignmentToolbarControlsPure,\n\tuseBlockProps,\n\taddSaveProps: addAssignedAlign,\n\tattributeKeys: [ 'align' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'align', false );\n\t},\n};\n\nfunction useBlockProps( { name, align } ) {\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( name, 'align' ),\n\t\thasBlockSupport( name, 'alignWide', true )\n\t);\n\tconst validAlignments = useAvailableAlignments( blockAllowedAlignments );\n\n\tif ( validAlignments.some( ( alignment ) => alignment.name === align ) ) {\n\t\treturn { 'data-align': align };\n\t}\n\n\treturn {};\n}\n\n/**\n * Override props assigned to save component to inject alignment class name if\n * block supports it.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addAssignedAlign( props, blockType, attributes ) {\n\tconst { align } = attributes;\n\tconst blockAlign = getBlockSupport( blockType, 'align' );\n\tconst hasWideBlockSupport = hasBlockSupport( blockType, 'alignWide', true );\n\n\t// Compute valid alignments without taking into account if\n\t// the theme supports wide alignments or not.\n\t// This way changing themes does not impact the block save.\n\tconst isAlignValid = getValidAlignments(\n\t\tblockAlign,\n\t\thasWideBlockSupport\n\t).includes( align );\n\tif ( isAlignValid ) {\n\t\tprops.className = clsx( `align${ align }`, props.className );\n\t}\n\n\treturn props;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/align/addAttribute',\n\taddAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst InspectorControlsDefault = createSlotFill( 'InspectorControls' );\nconst InspectorControlsAdvanced = createSlotFill( 'InspectorAdvancedControls' );\nconst InspectorControlsBindings = createSlotFill( 'InspectorControlsBindings' );\nconst InspectorControlsBackground = createSlotFill(\n\t'InspectorControlsBackground'\n);\nconst InspectorControlsBorder = createSlotFill( 'InspectorControlsBorder' );\nconst InspectorControlsColor = createSlotFill( 'InspectorControlsColor' );\nconst InspectorControlsFilter = createSlotFill( 'InspectorControlsFilter' );\nconst InspectorControlsDimensions = createSlotFill(\n\t'InspectorControlsDimensions'\n);\nconst InspectorControlsPosition = createSlotFill( 'InspectorControlsPosition' );\nconst InspectorControlsTypography = createSlotFill(\n\t'InspectorControlsTypography'\n);\nconst InspectorControlsListView = createSlotFill( 'InspectorControlsListView' );\nconst InspectorControlsStyles = createSlotFill( 'InspectorControlsStyles' );\nconst InspectorControlsEffects = createSlotFill( 'InspectorControlsEffects' );\n\nconst groups = {\n\tdefault: InspectorControlsDefault,\n\tadvanced: InspectorControlsAdvanced,\n\tbackground: InspectorControlsBackground,\n\tbindings: InspectorControlsBindings,\n\tborder: InspectorControlsBorder,\n\tcolor: InspectorControlsColor,\n\tdimensions: InspectorControlsDimensions,\n\teffects: InspectorControlsEffects,\n\tfilter: InspectorControlsFilter,\n\tlist: InspectorControlsListView,\n\tposition: InspectorControlsPosition,\n\tsettings: InspectorControlsDefault, // Alias for default.\n\tstyles: InspectorControlsStyles,\n\ttypography: InspectorControlsTypography,\n};\n\nexport default groups;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalStyleProvider as StyleProvider,\n\t__experimentalToolsPanelContext as ToolsPanelContext,\n} from '@wordpress/components';\nimport warning from '@wordpress/warning';\nimport deprecated from '@wordpress/deprecated';\nimport { useEffect, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n} from '../block-edit/context';\nimport groups from './groups';\n\nexport default function InspectorControlsFill( {\n\tchildren,\n\tgroup = 'default',\n\t__experimentalGroup,\n\tresetAllFilter,\n} ) {\n\tif ( __experimentalGroup ) {\n\t\tdeprecated(\n\t\t\t'`__experimentalGroup` property in `InspectorControlsFill`',\n\t\t\t{\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t\talternative: '`group`',\n\t\t\t}\n\t\t);\n\t\tgroup = __experimentalGroup;\n\t}\n\n\tconst context = useBlockEditContext();\n\tconst Fill = groups[ group ]?.Fill;\n\tif ( ! Fill ) {\n\t\twarning( `Unknown InspectorControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\tif ( ! context[ mayDisplayControlsKey ] ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( fillProps ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\n\t\t\n\t);\n}\n\nfunction RegisterResetAll( { resetAllFilter, children } ) {\n\tconst { registerResetAllFilter, deregisterResetAllFilter } =\n\t\tuseContext( ToolsPanelContext );\n\tuseEffect( () => {\n\t\tif (\n\t\t\tresetAllFilter &&\n\t\t\tregisterResetAllFilter &&\n\t\t\tderegisterResetAllFilter\n\t\t) {\n\t\t\tregisterResetAllFilter( resetAllFilter );\n\t\t\treturn () => {\n\t\t\t\tderegisterResetAllFilter( resetAllFilter );\n\t\t\t};\n\t\t}\n\t}, [ resetAllFilter, registerResetAllFilter, deregisterResetAllFilter ] );\n\treturn children;\n}\n\nfunction ToolsPanelInspectorControl( { children, resetAllFilter, fillProps } ) {\n\t// `fillProps.forwardedContext` is an array of context provider entries, provided by slot,\n\t// that should wrap the fill markup.\n\tconst { forwardedContext = [] } = fillProps;\n\n\t// Children passed to InspectorControlsFill will not have\n\t// access to any React Context whose Provider is part of\n\t// the InspectorControlsSlot tree. So we re-create the\n\t// Provider in this subtree.\n\tconst innerMarkup = (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n\treturn forwardedContext.reduce(\n\t\t( inner, [ Provider, props ] ) => (\n\t\t\t{ inner }\n\t\t),\n\t\tinnerMarkup\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { cleanEmptyObject } from '../../hooks/utils';\nimport { useToolsPanelDropdownMenuProps } from '../global-styles/utils';\n\nexport default function BlockSupportToolsPanel( { children, group, label } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockAttributes,\n\t\tgetMultiSelectedBlockClientIds,\n\t\tgetSelectedBlockClientId,\n\t\thasMultiSelection,\n\t} = useSelect( blockEditorStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst panelId = getSelectedBlockClientId();\n\tconst resetAll = useCallback(\n\t\t( resetFilters = [] ) => {\n\t\t\tconst newAttributes = {};\n\n\t\t\tconst clientIds = hasMultiSelection()\n\t\t\t\t? getMultiSelectedBlockClientIds()\n\t\t\t\t: [ panelId ];\n\n\t\t\tclientIds.forEach( ( clientId ) => {\n\t\t\t\tconst { style } = getBlockAttributes( clientId );\n\t\t\t\tlet newBlockAttributes = { style };\n\n\t\t\t\tresetFilters.forEach( ( resetFilter ) => {\n\t\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\t\t...resetFilter( newBlockAttributes ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Enforce a cleaned style object.\n\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\tstyle: cleanEmptyObject( newBlockAttributes.style ),\n\t\t\t\t};\n\n\t\t\t\tnewAttributes[ clientId ] = newBlockAttributes;\n\t\t\t} );\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes, true );\n\t\t},\n\t\t[\n\t\t\tgetBlockAttributes,\n\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\thasMultiSelection,\n\t\t\tpanelId,\n\t\t\tupdateBlockAttributes,\n\t\t]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanelContext as ToolsPanelContext } from '@wordpress/components';\nimport { useContext, useMemo } from '@wordpress/element';\n\nexport default function BlockSupportSlotContainer( {\n\tSlot,\n\tfillProps,\n\t...props\n} ) {\n\t// Add the toolspanel context provider and value to existing fill props\n\tconst toolsPanelContext = useContext( ToolsPanelContext );\n\tconst computedFillProps = useMemo(\n\t\t() => ( {\n\t\t\t...( fillProps ?? {} ),\n\t\t\tforwardedContext: [\n\t\t\t\t...( fillProps?.forwardedContext ?? [] ),\n\t\t\t\t[ ToolsPanelContext.Provider, { value: toolsPanelContext } ],\n\t\t\t],\n\t\t} ),\n\t\t[ toolsPanelContext, fillProps ]\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUseSlotFills as useSlotFills,\n\t__unstableMotionContext as MotionContext,\n} from '@wordpress/components';\nimport { useContext, useMemo } from '@wordpress/element';\nimport warning from '@wordpress/warning';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport BlockSupportToolsPanel from './block-support-tools-panel';\nimport BlockSupportSlotContainer from './block-support-slot-container';\nimport groups from './groups';\n\nexport default function InspectorControlsSlot( {\n\t__experimentalGroup,\n\tgroup = 'default',\n\tlabel,\n\tfillProps,\n\t...props\n} ) {\n\tif ( __experimentalGroup ) {\n\t\tdeprecated(\n\t\t\t'`__experimentalGroup` property in `InspectorControlsSlot`',\n\t\t\t{\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t\talternative: '`group`',\n\t\t\t}\n\t\t);\n\t\tgroup = __experimentalGroup;\n\t}\n\tconst Slot = groups[ group ]?.Slot;\n\tconst fills = useSlotFills( Slot?.__unstableName );\n\n\tconst motionContextValue = useContext( MotionContext );\n\n\tconst computedFillProps = useMemo(\n\t\t() => ( {\n\t\t\t...( fillProps ?? {} ),\n\t\t\tforwardedContext: [\n\t\t\t\t...( fillProps?.forwardedContext ?? [] ),\n\t\t\t\t[ MotionContext.Provider, { value: motionContextValue } ],\n\t\t\t],\n\t\t} ),\n\t\t[ motionContextValue, fillProps ]\n\t);\n\n\tif ( ! Slot ) {\n\t\twarning( `Unknown InspectorControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\n\tif ( ! fills?.length ) {\n\t\treturn null;\n\t}\n\n\tif ( label ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport InspectorControlsFill from './fill';\nimport InspectorControlsSlot from './slot';\n\nconst InspectorControls = InspectorControlsFill;\n\nInspectorControls.Slot = InspectorControlsSlot;\n\n// This is just here for backward compatibility.\nexport const InspectorAdvancedControls = ( props ) => {\n\treturn ;\n};\nInspectorAdvancedControls.Slot = ( props ) => {\n\treturn ;\n};\nInspectorAdvancedControls.slotName = 'InspectorAdvancedControls';\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inspector-controls/README.md\n */\nexport default InspectorControls;\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"url\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"dom\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blob\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"keycodes\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst media = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default media;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst upload = (\n\t\n\t\t\n\t\n);\n\nexport default upload;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst postFeaturedImage = (\n\t\n\t\t\n\t\n);\n\nexport default postFeaturedImage;\n","/**\n * WordPress dependencies\n */\nimport { withFilters } from '@wordpress/components';\n\n/**\n * This is a placeholder for the media upload component necessary to make it possible to provide\n * an integration with the core blocks that handle media files. By default it renders nothing but\n * it provides a way to have it overridden with the `editor.MediaUpload` filter.\n *\n * @return {Component} The component to be rendered.\n */\nconst MediaUpload = () => null;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload/README.md\n */\nexport default withFilters( 'editor.MediaUpload' )( MediaUpload );\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function MediaUploadCheck( { fallback = null, children } ) {\n\tconst hasUploadPermissions = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn !! getSettings().mediaUpload;\n\t}, [] );\n\treturn hasUploadPermissions ? children : fallback;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload/README.md\n */\nexport default MediaUploadCheck;\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"isShallowEqual\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"preferences\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst keyboardReturn = (\n\t\n\t\t\n\t\n);\n\nexport default keyboardReturn;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronLeftSmall = (\n\t\n\t\t\n\t\n);\n\nexport default chevronLeftSmall;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronRightSmall = (\n\t\n\t\t\n\t\n);\n\nexport default chevronRightSmall;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';\nimport { useReducedMotion, useInstanceId } from '@wordpress/compose';\nimport { _x, isRTL } from '@wordpress/i18n';\nimport { Fragment } from '@wordpress/element';\n\nfunction LinkSettingsDrawer( { children, settingsOpen, setSettingsOpen } ) {\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst MaybeAnimatePresence = prefersReducedMotion\n\t\t? Fragment\n\t\t: AnimatePresence;\n\tconst MaybeMotionDiv = prefersReducedMotion ? 'div' : motion.div;\n\n\tconst id = useInstanceId( LinkSettingsDrawer );\n\n\tconst settingsDrawerId = `link-control-settings-drawer-${ id }`;\n\n\treturn (\n\t\t<>\n\t\t\t setSettingsOpen( ! settingsOpen ) }\n\t\t\t\ticon={ isRTL() ? chevronLeftSmall : chevronRightSmall }\n\t\t\t\taria-controls={ settingsDrawerId }\n\t\t\t>\n\t\t\t\t{ _x( 'Advanced', 'Additional link settings' ) }\n\t\t\t\n\t\t\t\n\t\t\t\t{ settingsOpen && (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
\n\t\t\n\t);\n}\n\nexport default LinkSettingsDrawer;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\t__experimentalInputControl as InputControl,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport {\n\tcompose,\n\tdebounce,\n\twithInstanceId,\n\twithSafeTimeout,\n} from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Whether the argument is a function.\n *\n * @param {*} maybeFunc The argument to check.\n * @return {boolean} True if the argument is a function, false otherwise.\n */\nfunction isFunction( maybeFunc ) {\n\treturn typeof maybeFunc === 'function';\n}\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.suggestionsRequest = null;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tsuggestionsValue: null,\n\t\t\tselectedSuggestion: null,\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst { value, __experimentalShowInitialSuggestions = false } =\n\t\t\tthis.props;\n\n\t\t// Only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded.\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ]\n\t\t) {\n\t\t\tthis.suggestionNodes[ selectedSuggestion ].scrollIntoView( {\n\t\t\t\tbehavior: 'instant',\n\t\t\t\tblock: 'nearest',\n\t\t\t\tinline: 'nearest',\n\t\t\t} );\n\t\t}\n\n\t\t// Update suggestions when the value changes.\n\t\tif ( prevProps.value !== value && ! this.props.disableSuggestions ) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it.\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions.\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tthis.suggestionsRequest = null;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { __experimentalShowInitialSuggestions = false, value } =\n\t\t\tthis.props;\n\t\treturn (\n\t\t\t__experimentalShowInitialSuggestions && ! ( value && value.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.suggestionsRequest?.cancel?.();\n\t\t\tthis.suggestionsRequest = null;\n\n\t\t\tthis.setState( {\n\t\t\t\tsuggestions: [],\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tsuggestionsValue: value,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tsuggestionsValue: value,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tloading: false,\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.finally( () => {\n\t\t\t\t// If this is the current promise then reset the reference\n\t\t\t\t// to allow for checking if a new request is made.\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.suggestionsRequest = null;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( newValue ) {\n\t\tthis.props.onChange( newValue );\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\t// or there is already a request in progress.\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! ( suggestions && suggestions.length ) &&\n\t\t\tthis.suggestionsRequest === null\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value.\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tthis.props.onKeyDown?.( event );\n\t\tconst { showSuggestions, selectedSuggestion, suggestions, loading } =\n\t\t\tthis.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation.\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0.\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position.\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit.\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion =\n\t\t\tthis.state.suggestions[ this.state.selectedSuggestion ];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel = null,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t\thideLabelFromVision = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst inputId = `url-input-control-${ instanceId }`;\n\n\t\tconst controlProps = {\n\t\t\tid: inputId, // Passes attribute to label for the for attribute\n\t\t\tlabel,\n\t\t\tclassName: clsx( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t\thideLabelFromVision,\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tid: inputId,\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': label ? undefined : __( 'URL' ), // Ensure input always has an accessible label\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t\tsuffix: this.props.suffix,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ loading && }\n\t\t\t\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tsuggestionsValue,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tif ( ! showSuggestions || suggestions.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected':\n\t\t\t\t\tindex === selectedSuggestion ? true : undefined,\n\t\t\t};\n\t\t};\n\n\t\tif ( isFunction( renderSuggestions ) ) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions: ! suggestionsValue?.length,\n\t\t\t\tcurrentInputValue: suggestionsValue,\n\t\t\t} );\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t this.handleOnClick( suggestion ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ suggestion.title }\n\t\t\t\t\t\t\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail.\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions:\n\t\t\t\tgetSettings().__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst plus = (\n\t\n\t\t\n\t\n);\n\nexport default plus;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { MenuItem } from '@wordpress/components';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { plus } from '@wordpress/icons';\n\nexport const LinkControlSearchCreate = ( {\n\tsearchTerm,\n\tonClick,\n\titemProps,\n\tbuttonText,\n} ) => {\n\tif ( ! searchTerm ) {\n\t\treturn null;\n\t}\n\n\tlet text;\n\tif ( buttonText ) {\n\t\ttext =\n\t\t\ttypeof buttonText === 'function'\n\t\t\t\t? buttonText( searchTerm )\n\t\t\t\t: buttonText;\n\t} else {\n\t\ttext = createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create: %s' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: }\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ text }\n\t\t\n\t);\n};\n\nexport default LinkControlSearchCreate;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst postList = (\n\t\n\t\t\n\t\n);\n\nexport default postList;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst page = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default page;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst tag = (\n\t\n\t\t\n\t\n);\n\nexport default tag;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst category = (\n\t\n\t\t\n\t\n);\n\nexport default category;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst file = (\n\t\n\t\t\n\t\n);\n\nexport default file;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst globe = (\n\t\n\t\t\n\t\n);\n\nexport default globe;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst home = (\n\t\n\t\t\n\t\n);\n\nexport default home;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst verse = (\n\t\n\t\t\n\t\n);\n\nexport default verse;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem, TextHighlight } from '@wordpress/components';\nimport {\n\tIcon,\n\tglobe,\n\tpage,\n\ttag,\n\tpostList,\n\tcategory,\n\tfile,\n\thome,\n\tverse,\n} from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { safeDecodeURI, filterURLForDisplay, getPath } from '@wordpress/url';\nimport { pipe } from '@wordpress/compose';\n\nconst ICONS_MAP = {\n\tpost: postList,\n\tpage,\n\tpost_tag: tag,\n\tcategory,\n\tattachment: file,\n};\n\nfunction SearchItemIcon( { isURL, suggestion } ) {\n\tlet icon = null;\n\n\tif ( isURL ) {\n\t\ticon = globe;\n\t} else if ( suggestion.type in ICONS_MAP ) {\n\t\ticon = ICONS_MAP[ suggestion.type ];\n\t\tif ( suggestion.type === 'page' ) {\n\t\t\tif ( suggestion.isFrontPage ) {\n\t\t\t\ticon = home;\n\t\t\t}\n\t\t\tif ( suggestion.isBlogHome ) {\n\t\t\t\ticon = verse;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( icon ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn null;\n}\n\n/**\n * Adds a leading slash to a url if it doesn't already have one.\n * @param {string} url the url to add a leading slash to.\n * @return {string} the url with a leading slash.\n */\nfunction addLeadingSlash( url ) {\n\tconst trimmedURL = url?.trim();\n\n\tif ( ! trimmedURL?.length ) {\n\t\treturn url;\n\t}\n\n\treturn url?.replace( /^\\/?/, '/' );\n}\n\nfunction removeTrailingSlash( url ) {\n\tconst trimmedURL = url?.trim();\n\n\tif ( ! trimmedURL?.length ) {\n\t\treturn url;\n\t}\n\n\treturn url?.replace( /\\/$/, '' );\n}\n\nconst partialRight =\n\t( fn, ...partialArgs ) =>\n\t( ...args ) =>\n\t\tfn( ...args, ...partialArgs );\n\nconst defaultTo = ( d ) => ( v ) => {\n\treturn v === null || v === undefined || v !== v ? d : v;\n};\n\n/**\n * Prepares a URL for display in the UI.\n * - decodes the URL.\n * - filters it (removes protocol, www, etc.).\n * - truncates it if necessary.\n * - adds a leading slash.\n * @param {string} url the url.\n * @return {string} the processed url to display.\n */\nfunction getURLForDisplay( url ) {\n\tif ( ! url ) {\n\t\treturn url;\n\t}\n\n\treturn pipe(\n\t\tsafeDecodeURI,\n\t\tgetPath,\n\t\tdefaultTo( '' ),\n\t\tpartialRight( filterURLForDisplay, 24 ),\n\t\tremoveTrailingSlash,\n\t\taddLeadingSlash\n\t)( url );\n}\n\nexport const LinkControlSearchItem = ( {\n\titemProps,\n\tsuggestion,\n\tsearchTerm,\n\tonClick,\n\tisURL = false,\n\tshouldShowType = false,\n} ) => {\n\tconst info = isURL\n\t\t? __( 'Press ENTER to add this link' )\n\t\t: getURLForDisplay( suggestion.url );\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\tonClick={ onClick }\n\t\t\tshortcut={ shouldShowType && getVisualTypeName( suggestion ) }\n\t\t\tclassName=\"block-editor-link-control__search-item\"\n\t\t>\n\t\t\t\n\t\t\n\t);\n};\n\nfunction getVisualTypeName( suggestion ) {\n\tif ( suggestion.isFrontPage ) {\n\t\treturn 'front page';\n\t}\n\n\tif ( suggestion.isBlogHome ) {\n\t\treturn 'blog home';\n\t}\n\n\t// Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label.\n\treturn suggestion.type === 'post_tag' ? 'tag' : suggestion.type;\n}\n\nexport default LinkControlSearchItem;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n// Used as a unique identifier for the \"Create\" option within search results.\n// Used to help distinguish the \"Create\" suggestion within the search results in\n// order to handle it as a unique case.\nexport const CREATE_TYPE = '__CREATE__';\nexport const TEL_TYPE = 'tel';\nexport const URL_TYPE = 'link';\nexport const MAILTO_TYPE = 'mailto';\nexport const INTERNAL_TYPE = 'internal';\n\nexport const LINK_ENTRY_TYPES = [\n\tURL_TYPE,\n\tMAILTO_TYPE,\n\tTEL_TYPE,\n\tINTERNAL_TYPE,\n];\n\nexport const DEFAULT_LINK_SETTINGS = [\n\t{\n\t\tid: 'opensInNewTab',\n\t\ttitle: __( 'Open in new tab' ),\n\t},\n];\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { VisuallyHidden, MenuGroup } from '@wordpress/components';\n\n/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSearchCreate from './search-create-button';\nimport LinkControlSearchItem from './search-item';\nimport { CREATE_TYPE, LINK_ENTRY_TYPES } from './constants';\n\nexport default function LinkControlSearchResults( {\n\tinstanceId,\n\twithCreateSuggestion,\n\tcurrentInputValue,\n\thandleSuggestionClick,\n\tsuggestionsListProps,\n\tbuildSuggestionItemProps,\n\tsuggestions,\n\tselectedSuggestion,\n\tisLoading,\n\tisInitialSuggestions,\n\tcreateSuggestionButtonText,\n\tsuggestionsQuery,\n} ) {\n\tconst resultsListClasses = clsx(\n\t\t'block-editor-link-control__search-results',\n\t\t{\n\t\t\t'is-loading': isLoading,\n\t\t}\n\t);\n\n\tconst isSingleDirectEntryResult =\n\t\tsuggestions.length === 1 &&\n\t\tLINK_ENTRY_TYPES.includes( suggestions[ 0 ].type );\n\tconst shouldShowCreateSuggestion =\n\t\twithCreateSuggestion &&\n\t\t! isSingleDirectEntryResult &&\n\t\t! isInitialSuggestions;\n\t// If the query has a specified type, then we can skip showing them in the result. See #24839.\n\tconst shouldShowSuggestionsTypes = ! suggestionsQuery?.type;\n\n\t// According to guidelines aria-label should be added if the label\n\t// itself is not visible.\n\t// See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role\n\tconst searchResultsLabelId = `block-editor-link-control-search-results-label-${ instanceId }`;\n\tconst labelText = isInitialSuggestions\n\t\t? __( 'Suggestions' )\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Search results for \"%s\"' ),\n\t\t\t\tcurrentInputValue\n\t\t );\n\tconst searchResultsLabel = (\n\t\t\n\t\t\t{ labelText }\n\t\t\n\t);\n\n\treturn (\n\t\t
\n\t\t\t{ searchResultsLabel }\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tshouldShowCreateSuggestion &&\n\t\t\t\t\t\t\tCREATE_TYPE === suggestion.type\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\thandleSuggestionClick( suggestion )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Intentionally only using `type` here as\n\t\t\t\t\t\t\t\t\t// the constant is enough to uniquely\n\t\t\t\t\t\t\t\t\t// identify the single \"CREATE\" suggestion.\n\t\t\t\t\t\t\t\t\tkey={ suggestion.type }\n\t\t\t\t\t\t\t\t\titemProps={ buildSuggestionItemProps(\n\t\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tisSelected={ index === selectedSuggestion }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we're not handling \"Create\" suggestions above then\n\t\t\t\t\t\t// we don't want them in the main results so exit early.\n\t\t\t\t\t\tif ( CREATE_TYPE === suggestion.type ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\thandleSuggestionClick( suggestion );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tisSelected={ index === selectedSuggestion }\n\t\t\t\t\t\t\t\tisURL={ LINK_ENTRY_TYPES.includes(\n\t\t\t\t\t\t\t\t\tsuggestion.type\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tsearchTerm={ currentInputValue }\n\t\t\t\t\t\t\t\tshouldShowType={ shouldShowSuggestionsTypes }\n\t\t\t\t\t\t\t\tisFrontPage={ suggestion?.isFrontPage }\n\t\t\t\t\t\t\t\tisBlogHome={ suggestion?.isBlogHome }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { getProtocol, isValidProtocol, isValidFragment } from '@wordpress/url';\n\n/**\n * Determines whether a given value could be a URL. Note this does not\n * guarantee the value is a URL only that it looks like it might be one. For\n * example, just because a string has `www.` in it doesn't make it a URL,\n * but it does make it highly likely that it will be so in the context of\n * creating a link it makes sense to treat it like one.\n *\n * @param {string} val the candidate for being URL-like (or not).\n *\n * @return {boolean} whether or not the value is potentially a URL.\n */\nexport default function isURLLike( val ) {\n\tconst hasSpaces = val.includes( ' ' );\n\n\tif ( hasSpaces ) {\n\t\treturn false;\n\t}\n\n\tconst protocol = getProtocol( val );\n\tconst protocolIsValid = isValidProtocol( protocol );\n\n\tconst mayBeTLD = hasPossibleTLD( val );\n\n\tconst isWWW = val?.startsWith( 'www.' );\n\n\tconst isInternal = val?.startsWith( '#' ) && isValidFragment( val );\n\n\treturn protocolIsValid || isWWW || isInternal || mayBeTLD;\n}\n\n/**\n * Checks if a given URL has a valid Top-Level Domain (TLD).\n *\n * @param {string} url - The URL to check.\n * @param {number} maxLength - The maximum length of the TLD.\n * @return {boolean} Returns true if the URL has a valid TLD, false otherwise.\n */\nfunction hasPossibleTLD( url, maxLength = 6 ) {\n\t// Clean the URL by removing anything after the first occurrence of \"?\" or \"#\".\n\tconst cleanedURL = url.split( /[?#]/ )[ 0 ];\n\n\t// Regular expression explanation:\n\t// - (?<=\\S) : Positive lookbehind assertion to ensure there is at least one non-whitespace character before the TLD\n\t// - \\. : Matches a literal dot (.)\n\t// - [a-zA-Z_]{2,maxLength} : Matches 2 to maxLength letters or underscores, representing the TLD\n\t// - (?:\\/|$) : Non-capturing group that matches either a forward slash (/) or the end of the string\n\tconst regex = new RegExp(\n\t\t`(?<=\\\\S)\\\\.(?:[a-zA-Z_]{2,${ maxLength }})(?:\\\\/|$)`\n\t);\n\n\treturn regex.test( cleanedURL );\n}\n","/**\n * WordPress dependencies\n */\nimport { getProtocol, prependHTTP } from '@wordpress/url';\nimport { useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport isURLLike from './is-url-like';\nimport {\n\tCREATE_TYPE,\n\tTEL_TYPE,\n\tMAILTO_TYPE,\n\tINTERNAL_TYPE,\n\tURL_TYPE,\n} from './constants';\nimport { store as blockEditorStore } from '../../store';\n\nexport const handleNoop = () => Promise.resolve( [] );\n\nexport const handleDirectEntry = ( val ) => {\n\tlet type = URL_TYPE;\n\n\tconst protocol = getProtocol( val ) || '';\n\n\tif ( protocol.includes( 'mailto' ) ) {\n\t\ttype = MAILTO_TYPE;\n\t}\n\n\tif ( protocol.includes( 'tel' ) ) {\n\t\ttype = TEL_TYPE;\n\t}\n\n\tif ( val?.startsWith( '#' ) ) {\n\t\ttype = INTERNAL_TYPE;\n\t}\n\n\treturn Promise.resolve( [\n\t\t{\n\t\t\tid: val,\n\t\t\ttitle: val,\n\t\t\turl: type === 'URL' ? prependHTTP( val ) : val,\n\t\t\ttype,\n\t\t},\n\t] );\n};\n\nconst handleEntitySearch = async (\n\tval,\n\tsuggestionsQuery,\n\tfetchSearchSuggestions,\n\twithCreateSuggestion,\n\tpageOnFront,\n\tpageForPosts\n) => {\n\tconst { isInitialSuggestions } = suggestionsQuery;\n\n\tconst results = await fetchSearchSuggestions( val, suggestionsQuery );\n\n\t// Identify front page and update type to match.\n\tresults.map( ( result ) => {\n\t\tif ( Number( result.id ) === pageOnFront ) {\n\t\t\tresult.isFrontPage = true;\n\t\t\treturn result;\n\t\t} else if ( Number( result.id ) === pageForPosts ) {\n\t\t\tresult.isBlogHome = true;\n\t\t\treturn result;\n\t\t}\n\n\t\treturn result;\n\t} );\n\n\t// If displaying initial suggestions just return plain results.\n\tif ( isInitialSuggestions ) {\n\t\treturn results;\n\t}\n\n\t// Here we append a faux suggestion to represent a \"CREATE\" option. This\n\t// is detected in the rendering of the search results and handled as a\n\t// special case. This is currently necessary because the suggestions\n\t// dropdown will only appear if there are valid suggestions and\n\t// therefore unless the create option is a suggestion it will not\n\t// display in scenarios where there are no results returned from the\n\t// API. In addition promoting CREATE to a first class suggestion affords\n\t// the a11y benefits afforded by `URLInput` to all suggestions (eg:\n\t// keyboard handling, ARIA roles...etc).\n\t//\n\t// Note also that the value of the `title` and `url` properties must correspond\n\t// to the text value of the ``. This is because `title` is used\n\t// when creating the suggestion. Similarly `url` is used when using keyboard to select\n\t// the suggestion (the
`onSubmit` handler falls-back to `url`).\n\treturn isURLLike( val ) || ! withCreateSuggestion\n\t\t? results\n\t\t: results.concat( {\n\t\t\t\t// the `id` prop is intentionally ommitted here because it\n\t\t\t\t// is never exposed as part of the component's public API.\n\t\t\t\t// see: https://github.com/WordPress/gutenberg/pull/19775#discussion_r378931316.\n\t\t\t\ttitle: val, // Must match the existing ``s text value.\n\t\t\t\turl: val, // Must match the existing ``s text value.\n\t\t\t\ttype: CREATE_TYPE,\n\t\t } );\n};\n\nexport default function useSearchHandler(\n\tsuggestionsQuery,\n\tallowDirectEntry,\n\twithCreateSuggestion\n) {\n\tconst { fetchSearchSuggestions, pageOnFront, pageForPosts } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings } = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tpageOnFront: getSettings().pageOnFront,\n\t\t\t\tpageForPosts: getSettings().pageForPosts,\n\t\t\t\tfetchSearchSuggestions:\n\t\t\t\t\tgetSettings().__experimentalFetchLinkSuggestions,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst directEntryHandler = allowDirectEntry\n\t\t? handleDirectEntry\n\t\t: handleNoop;\n\n\treturn useCallback(\n\t\t( val, { isInitialSuggestions } ) => {\n\t\t\treturn isURLLike( val )\n\t\t\t\t? directEntryHandler( val, { isInitialSuggestions } )\n\t\t\t\t: handleEntitySearch(\n\t\t\t\t\t\tval,\n\t\t\t\t\t\t{ ...suggestionsQuery, isInitialSuggestions },\n\t\t\t\t\t\tfetchSearchSuggestions,\n\t\t\t\t\t\twithCreateSuggestion,\n\t\t\t\t\t\tpageOnFront,\n\t\t\t\t\t\tpageForPosts\n\t\t\t\t );\n\t\t},\n\t\t[\n\t\t\tdirectEntryHandler,\n\t\t\tfetchSearchSuggestions,\n\t\t\tpageOnFront,\n\t\t\tpageForPosts,\n\t\t\tsuggestionsQuery,\n\t\t\twithCreateSuggestion,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { forwardRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { URLInput } from '../';\nimport LinkControlSearchResults from './search-results';\nimport { CREATE_TYPE } from './constants';\nimport useSearchHandler from './use-search-handler';\n\n// Must be a function as otherwise URLInput will default\n// to the fetchLinkSuggestions passed in block editor settings\n// which will cause an unintended http request.\nconst noopSearchHandler = () => Promise.resolve( [] );\n\nconst noop = () => {};\n\nconst LinkControlSearchInput = forwardRef(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tchildren,\n\t\t\tcurrentLink = {},\n\t\t\tclassName = null,\n\t\t\tplaceholder = null,\n\t\t\twithCreateSuggestion = false,\n\t\t\tonCreateSuggestion = noop,\n\t\t\tonChange = noop,\n\t\t\tonSelect = noop,\n\t\t\tshowSuggestions = true,\n\t\t\trenderSuggestions = ( props ) => (\n\t\t\t\t\n\t\t\t),\n\t\t\tfetchSuggestions = null,\n\t\t\tallowDirectEntry = true,\n\t\t\tshowInitialSuggestions = false,\n\t\t\tsuggestionsQuery = {},\n\t\t\twithURLSuggestion = true,\n\t\t\tcreateSuggestionButtonText,\n\t\t\thideLabelFromVision = false,\n\t\t\tsuffix,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst genericSearchHandler = useSearchHandler(\n\t\t\tsuggestionsQuery,\n\t\t\tallowDirectEntry,\n\t\t\twithCreateSuggestion,\n\t\t\twithURLSuggestion\n\t\t);\n\n\t\tconst searchHandler = showSuggestions\n\t\t\t? fetchSuggestions || genericSearchHandler\n\t\t\t: noopSearchHandler;\n\n\t\tconst instanceId = useInstanceId( LinkControlSearchInput );\n\t\tconst [ focusedSuggestion, setFocusedSuggestion ] = useState();\n\n\t\t/**\n\t\t * Handles the user moving between different suggestions. Does not handle\n\t\t * choosing an individual item.\n\t\t *\n\t\t * @param {string} selection the url of the selected suggestion.\n\t\t * @param {Object} suggestion the suggestion object.\n\t\t */\n\t\tconst onInputChange = ( selection, suggestion ) => {\n\t\t\tonChange( selection );\n\t\t\tsetFocusedSuggestion( suggestion );\n\t\t};\n\n\t\tconst handleRenderSuggestions = ( props ) =>\n\t\t\trenderSuggestions( {\n\t\t\t\t...props,\n\t\t\t\tinstanceId,\n\t\t\t\twithCreateSuggestion,\n\t\t\t\tcreateSuggestionButtonText,\n\t\t\t\tsuggestionsQuery,\n\t\t\t\thandleSuggestionClick: ( suggestion ) => {\n\t\t\t\t\tif ( props.handleSuggestionClick ) {\n\t\t\t\t\t\tprops.handleSuggestionClick( suggestion );\n\t\t\t\t\t}\n\t\t\t\t\tonSuggestionSelected( suggestion );\n\t\t\t\t},\n\t\t\t} );\n\n\t\tconst onSuggestionSelected = async ( selectedSuggestion ) => {\n\t\t\tlet suggestion = selectedSuggestion;\n\t\t\tif ( CREATE_TYPE === selectedSuggestion.type ) {\n\t\t\t\t// Create a new page and call onSelect with the output from the onCreateSuggestion callback.\n\t\t\t\ttry {\n\t\t\t\t\tsuggestion = await onCreateSuggestion(\n\t\t\t\t\t\tselectedSuggestion.title\n\t\t\t\t\t);\n\t\t\t\t\tif ( suggestion?.url ) {\n\t\t\t\t\t\tonSelect( suggestion );\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tallowDirectEntry ||\n\t\t\t\t( suggestion && Object.keys( suggestion ).length >= 1 )\n\t\t\t) {\n\t\t\t\tconst { id, url, ...restLinkProps } = currentLink ?? {};\n\t\t\t\tonSelect(\n\t\t\t\t\t// Some direct entries don't have types or IDs, and we still need to clear the previous ones.\n\t\t\t\t\t{ ...restLinkProps, ...suggestion },\n\t\t\t\t\tsuggestion\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\tconst hasSuggestion = suggestion || focusedSuggestion;\n\n\t\t\t\t\t\t// If there is no suggestion and the value (ie: any manually entered URL) is empty\n\t\t\t\t\t\t// then don't allow submission otherwise we get empty links.\n\t\t\t\t\t\tif ( ! hasSuggestion && ! value?.trim()?.length ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSuggestionSelected(\n\t\t\t\t\t\t\t\thasSuggestion || { url: value }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tref={ ref }\n\t\t\t\t\tsuffix={ suffix }\n\t\t\t\t/>\n\t\t\t\t{ children }\n\t\t\t
\n\t\t);\n\t}\n);\n\nexport default LinkControlSearchInput;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst info = (\n\t\n\t\t\n\t\n);\n\nexport default info;\n","/**\n * Internal dependencies\n */\n\nimport { default as pencil } from './pencil';\nexport default pencil;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst pencil = (\n\t\n\t\t\n\t\n);\n\nexport default pencil;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst linkOff = (\n\t\n\t\t\n\t\n);\n\nexport default linkOff;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst copySmall = (\n\t\n\t\t\n\t\n);\n\nexport default copySmall;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Slot: ViewerSlot, Fill: ViewerFill } = createSlotFill(\n\t'BlockEditorLinkControlViewer'\n);\n\nexport { ViewerSlot, ViewerFill };\nexport default ViewerSlot;\n","/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useEffect, useReducer } from '@wordpress/element';\n\nfunction reducer( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RESOLVED':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: false,\n\t\t\t\trichData: action.richData,\n\t\t\t};\n\t\tcase 'ERROR':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: false,\n\t\t\t\trichData: null,\n\t\t\t};\n\t\tcase 'LOADING':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: true,\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error( `Unexpected action type ${ action.type }` );\n\t}\n}\n\nfunction useRemoteUrlData( url ) {\n\tconst [ state, dispatch ] = useReducer( reducer, {\n\t\trichData: null,\n\t\tisFetching: false,\n\t} );\n\n\tconst { fetchRichUrlData } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tfetchRichUrlData: getSettings().__experimentalFetchRichUrlData,\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\t// Only make the request if we have an actual URL\n\t\t// and the fetching util is available. In some editors\n\t\t// there may not be such a util.\n\t\tif (\n\t\t\turl?.length &&\n\t\t\tfetchRichUrlData &&\n\t\t\ttypeof AbortController !== 'undefined'\n\t\t) {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'LOADING',\n\t\t\t} );\n\n\t\t\tconst controller = new window.AbortController();\n\n\t\t\tconst signal = controller.signal;\n\n\t\t\tfetchRichUrlData( url, {\n\t\t\t\tsignal,\n\t\t\t} )\n\t\t\t\t.then( ( urlData ) => {\n\t\t\t\t\tdispatch( {\n\t\t\t\t\t\ttype: 'RESOLVED',\n\t\t\t\t\t\trichData: urlData,\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\t// Avoid setting state on unmounted component\n\t\t\t\t\tif ( ! signal.aborted ) {\n\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\ttype: 'ERROR',\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t// Cleanup: when the URL changes the abort the current request.\n\t\t\treturn () => {\n\t\t\t\tcontroller.abort();\n\t\t\t};\n\t\t}\n\t}, [ url ] );\n\n\treturn state;\n}\n\nexport default useRemoteUrlData;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tExternalLink,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';\nimport { Icon, globe, info, linkOff, edit, copySmall } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport { ViewerSlot } from './viewer-slot';\n\nimport useRichUrlData from './use-rich-url-data';\n\n/**\n * Filters the title for display. Removes the protocol and www prefix.\n *\n * @param {string} title The title to be filtered.\n *\n * @return {string} The filtered title.\n */\nfunction filterTitleForDisplay( title ) {\n\t// Derived from `filterURLForDisplay` in `@wordpress/url`.\n\treturn title\n\t\t.replace( /^[a-z\\-.\\+]+[0-9]*:(\\/\\/)?/i, '' )\n\t\t.replace( /^www\\./i, '' );\n}\n\nexport default function LinkPreview( {\n\tvalue,\n\tonEditClick,\n\thasRichPreviews = false,\n\thasUnlinkControl = false,\n\tonRemove,\n} ) {\n\tconst showIconLabels = useSelect(\n\t\t( select ) =>\n\t\t\tselect( preferencesStore ).get( 'core', 'showIconLabels' ),\n\t\t[]\n\t);\n\n\t// Avoid fetching if rich previews are not desired.\n\tconst showRichPreviews = hasRichPreviews ? value?.url : null;\n\n\tconst { richData, isFetching } = useRichUrlData( showRichPreviews );\n\n\t// Rich data may be an empty object so test for that.\n\tconst hasRichData = richData && Object.keys( richData ).length;\n\n\tconst displayURL =\n\t\t( value && filterURLForDisplay( safeDecodeURI( value.url ), 24 ) ) ||\n\t\t'';\n\n\t// url can be undefined if the href attribute is unset\n\tconst isEmptyURL = ! value?.url?.length;\n\n\tconst displayTitle =\n\t\t! isEmptyURL &&\n\t\tstripHTML( richData?.title || value?.title || displayURL );\n\n\tconst isUrlRedundant =\n\t\t! value?.url || filterTitleForDisplay( displayTitle ) === displayURL;\n\n\tlet icon;\n\n\tif ( richData?.icon ) {\n\t\ticon = \"\";\n\t} else if ( isEmptyURL ) {\n\t\ticon = ;\n\t} else {\n\t\ticon = ;\n\t}\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst ref = useCopyToClipboard( value.url, () => {\n\t\tcreateNotice( 'info', __( 'Link copied to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ icon }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ! isEmptyURL ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ displayTitle }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ ! isUrlRedundant && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ displayURL }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Link is empty' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ hasUnlinkControl && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { CheckboxControl, VisuallyHidden } from '@wordpress/components';\n\nconst noop = () => {};\n\nconst LinkControlSettings = ( { value, onChange = noop, settings } ) => {\n\tif ( ! settings || ! settings.length ) {\n\t\treturn null;\n\t}\n\n\tconst handleSettingChange = ( setting ) => ( newValue ) => {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\t[ setting.id ]: newValue,\n\t\t} );\n\t};\n\n\tconst theSettings = settings.map( ( setting ) => (\n\t\t\n\t) );\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{ __( 'Currently selected link settings' ) }\n\t\t\t\n\t\t\t{ theSettings }\n\t\t
\n\t);\n};\n\nexport default LinkControlSettings;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tSpinner,\n\tNotice,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalInputControlSuffixWrapper as InputControlSuffixWrapper,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useState, useEffect } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport { ENTER } from '@wordpress/keycodes';\nimport { isShallowEqualObjects } from '@wordpress/is-shallow-equal';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as preferencesStore } from '@wordpress/preferences';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSettingsDrawer from './settings-drawer';\nimport LinkControlSearchInput from './search-input';\nimport LinkPreview from './link-preview';\nimport LinkSettings from './settings';\nimport useCreatePage from './use-create-page';\nimport useInternalValue from './use-internal-value';\nimport { ViewerFill } from './viewer-slot';\nimport { DEFAULT_LINK_SETTINGS } from './constants';\n\n/**\n * Default properties associated with a link control value.\n *\n * @typedef WPLinkControlDefaultValue\n *\n * @property {string} url Link URL.\n * @property {string=} title Link title.\n * @property {boolean=} opensInNewTab Whether link should open in a new browser\n * tab. This value is only assigned if not\n * providing a custom `settings` prop.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Custom settings values associated with a link.\n *\n * @typedef {{[setting:string]:any}} WPLinkControlSettingsValue\n */\n/* eslint-enable */\n\n/**\n * Custom settings values associated with a link.\n *\n * @typedef WPLinkControlSetting\n *\n * @property {string} id Identifier to use as property for setting value.\n * @property {string} title Human-readable label to show in user interface.\n */\n\n/**\n * Properties associated with a link control value, composed as a union of the\n * default properties and any custom settings values.\n *\n * @typedef {WPLinkControlDefaultValue&WPLinkControlSettingsValue} WPLinkControlValue\n */\n\n/** @typedef {(nextValue:WPLinkControlValue)=>void} WPLinkControlOnChangeProp */\n\n/**\n * Properties associated with a search suggestion used within the LinkControl.\n *\n * @typedef WPLinkControlSuggestion\n *\n * @property {string} id Identifier to use to uniquely identify the suggestion.\n * @property {string} type Identifies the type of the suggestion (eg: `post`,\n * `page`, `url`...etc)\n * @property {string} title Human-readable label to show in user interface.\n * @property {string} url A URL for the suggestion.\n */\n\n/** @typedef {(title:string)=>WPLinkControlSuggestion} WPLinkControlCreateSuggestionProp */\n\n/**\n * @typedef WPLinkControlProps\n *\n * @property {(WPLinkControlSetting[])=} settings An array of settings objects. Each object will used to\n * render a `ToggleControl` for that setting.\n * @property {boolean=} forceIsEditingLink If passed as either `true` or `false`, controls the\n * internal editing state of the component to respective\n * show or not show the URL input field.\n * @property {WPLinkControlValue=} value Current link value.\n * @property {WPLinkControlOnChangeProp=} onChange Value change handler, called with the updated value if\n * the user selects a new link or updates settings.\n * @property {boolean=} noDirectEntry Whether to allow turning a URL-like search query directly into a link.\n * @property {boolean=} showSuggestions Whether to present suggestions when typing the URL.\n * @property {boolean=} showInitialSuggestions Whether to present initial suggestions immediately.\n * @property {boolean=} withCreateSuggestion Whether to allow creation of link value from suggestion.\n * @property {Object=} suggestionsQuery Query parameters to pass along to wp.blockEditor.__experimentalFetchLinkSuggestions.\n * @property {boolean=} noURLSuggestion Whether to add a fallback suggestion which treats the search query as a URL.\n * @property {boolean=} hasTextControl Whether to add a text field to the UI to update the value.title.\n * @property {string|Function|undefined} createSuggestionButtonText The text to use in the button that calls createSuggestion.\n * @property {Function} renderControlBottom Optional controls to be rendered at the bottom of the component.\n */\n\nconst noop = () => {};\n\nconst PREFERENCE_SCOPE = 'core/block-editor';\nconst PREFERENCE_KEY = 'linkControlSettingsDrawer';\n\n/**\n * Renders a link control. A link control is a controlled input which maintains\n * a value associated with a link (HTML anchor element) and relevant settings\n * for how that link is expected to behave.\n *\n * @param {WPLinkControlProps} props Component props.\n */\nfunction LinkControl( {\n\tsearchInputPlaceholder,\n\tvalue,\n\tsettings = DEFAULT_LINK_SETTINGS,\n\tonChange = noop,\n\tonRemove,\n\tonCancel,\n\tnoDirectEntry = false,\n\tshowSuggestions = true,\n\tshowInitialSuggestions,\n\tforceIsEditingLink,\n\tcreateSuggestion,\n\twithCreateSuggestion,\n\tinputValue: propInputValue = '',\n\tsuggestionsQuery = {},\n\tnoURLSuggestion = false,\n\tcreateSuggestionButtonText,\n\thasRichPreviews = false,\n\thasTextControl = false,\n\trenderControlBottom = null,\n} ) {\n\tif ( withCreateSuggestion === undefined && createSuggestion ) {\n\t\twithCreateSuggestion = true;\n\t}\n\n\tconst [ settingsOpen, setSettingsOpen ] = useState( false );\n\n\tconst { advancedSettingsPreference } = useSelect( ( select ) => {\n\t\tconst prefsStore = select( preferencesStore );\n\n\t\treturn {\n\t\t\tadvancedSettingsPreference:\n\t\t\t\tprefsStore.get( PREFERENCE_SCOPE, PREFERENCE_KEY ) ?? false,\n\t\t};\n\t}, [] );\n\n\tconst { set: setPreference } = useDispatch( preferencesStore );\n\n\t/**\n\t * Sets the open/closed state of the Advanced Settings Drawer,\n\t * optionlly persisting the state to the user's preferences.\n\t *\n\t * Note that Block Editor components can be consumed by non-WordPress\n\t * environments which may not have preferences setup.\n\t * Therefore a local state is also used as a fallback.\n\t *\n\t * @param {boolean} prefVal the open/closed state of the Advanced Settings Drawer.\n\t */\n\tconst setSettingsOpenWithPreference = ( prefVal ) => {\n\t\tif ( setPreference ) {\n\t\t\tsetPreference( PREFERENCE_SCOPE, PREFERENCE_KEY, prefVal );\n\t\t}\n\t\tsetSettingsOpen( prefVal );\n\t};\n\n\t// Block Editor components can be consumed by non-WordPress environments\n\t// which may not have these preferences setup.\n\t// Therefore a local state is used as a fallback.\n\tconst isSettingsOpen = advancedSettingsPreference || settingsOpen;\n\n\tconst isMountingRef = useRef( true );\n\tconst wrapperNode = useRef();\n\tconst textInputRef = useRef();\n\tconst isEndingEditWithFocusRef = useRef( false );\n\n\tconst settingsKeys = settings.map( ( { id } ) => id );\n\n\tconst [\n\t\tinternalControlValue,\n\t\tsetInternalControlValue,\n\t\tsetInternalURLInputValue,\n\t\tsetInternalTextInputValue,\n\t\tcreateSetInternalSettingValueHandler,\n\t] = useInternalValue( value );\n\n\tconst valueHasChanges =\n\t\tvalue && ! isShallowEqualObjects( internalControlValue, value );\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState(\n\t\tforceIsEditingLink !== undefined\n\t\t\t? forceIsEditingLink\n\t\t\t: ! value || ! value.url\n\t);\n\n\tconst { createPage, isCreatingPage, errorMessage } =\n\t\tuseCreatePage( createSuggestion );\n\n\tuseEffect( () => {\n\t\tif ( forceIsEditingLink === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsEditingLink( forceIsEditingLink );\n\t}, [ forceIsEditingLink ] );\n\n\tuseEffect( () => {\n\t\t// We don't auto focus into the Link UI on mount\n\t\t// because otherwise using the keyboard to select text\n\t\t// *within* the link format is not possible.\n\t\tif ( isMountingRef.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Scenario - when:\n\t\t// - switching between editable and non editable LinkControl\n\t\t// - clicking on a link\n\t\t// ...then move focus to the *first* element to avoid focus loss\n\t\t// and to ensure focus is *within* the Link UI.\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperNode.current )[ 0 ] ||\n\t\t\twrapperNode.current;\n\n\t\tnextFocusTarget.focus();\n\n\t\tisEndingEditWithFocusRef.current = false;\n\t}, [ isEditingLink, isCreatingPage ] );\n\n\t// The component mounting reference is maintained separately\n\t// to correctly reset values in `StrictMode`.\n\tuseEffect( () => {\n\t\tisMountingRef.current = false;\n\n\t\treturn () => {\n\t\t\tisMountingRef.current = true;\n\t\t};\n\t}, [] );\n\n\tconst hasLinkValue = value?.url?.trim()?.length > 0;\n\n\t/**\n\t * Cancels editing state and marks that focus may need to be restored after\n\t * the next render, if focus was within the wrapper when editing finished.\n\t */\n\tconst stopEditing = () => {\n\t\tisEndingEditWithFocusRef.current = !! wrapperNode.current?.contains(\n\t\t\twrapperNode.current.ownerDocument.activeElement\n\t\t);\n\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst handleSelectSuggestion = ( updatedValue ) => {\n\t\t// Suggestions may contains \"settings\" values (e.g. `opensInNewTab`)\n\t\t// which should not overide any existing settings values set by the\n\t\t// user. This filters out any settings values from the suggestion.\n\t\tconst nonSettingsChanges = Object.keys( updatedValue ).reduce(\n\t\t\t( acc, key ) => {\n\t\t\t\tif ( ! settingsKeys.includes( key ) ) {\n\t\t\t\t\tacc[ key ] = updatedValue[ key ];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\tonChange( {\n\t\t\t...internalControlValue,\n\t\t\t...nonSettingsChanges,\n\t\t\t// As title is not a setting, it must be manually applied\n\t\t\t// in such a way as to preserve the users changes over\n\t\t\t// any \"title\" value provided by the \"suggestion\".\n\t\t\ttitle: internalControlValue?.title || updatedValue?.title,\n\t\t} );\n\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif ( valueHasChanges ) {\n\t\t\t// Submit the original value with new stored values applied\n\t\t\t// on top. URL is a special case as it may also be a prop.\n\t\t\tonChange( {\n\t\t\t\t...value,\n\t\t\t\t...internalControlValue,\n\t\t\t\turl: currentUrlInputValue,\n\t\t\t} );\n\t\t}\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmitWithEnter = ( event ) => {\n\t\tconst { keyCode } = event;\n\n\t\tif (\n\t\t\tkeyCode === ENTER &&\n\t\t\t! currentInputIsEmpty // Disallow submitting empty values.\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst resetInternalValues = () => {\n\t\tsetInternalControlValue( value );\n\t};\n\n\tconst handleCancel = ( event ) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// Ensure that any unsubmitted input changes are reset.\n\t\tresetInternalValues();\n\n\t\tif ( hasLinkValue ) {\n\t\t\t// If there is a link then exist editing mode and show preview.\n\t\t\tstopEditing();\n\t\t} else {\n\t\t\t// If there is no link value, then remove the link entirely.\n\t\t\tonRemove?.();\n\t\t}\n\n\t\tonCancel?.();\n\t};\n\n\tconst currentUrlInputValue =\n\t\tpropInputValue || internalControlValue?.url || '';\n\n\tconst currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;\n\n\tconst shownUnlinkControl =\n\t\tonRemove && value && ! isEditingLink && ! isCreatingPage;\n\n\tconst showActions = isEditingLink && hasLinkValue;\n\n\t// Only show text control once a URL value has been committed\n\t// and it isn't just empty whitespace.\n\t// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.\n\tconst showTextControl = hasLinkValue && hasTextControl;\n\n\tconst isEditing = ( isEditingLink || ! value ) && ! isCreatingPage;\n\tconst isDisabled = ! valueHasChanges || currentInputIsEmpty;\n\tconst showSettings = !! settings?.length && isEditingLink && hasLinkValue;\n\n\treturn (\n\t\t\n\t\t\t{ isCreatingPage && (\n\t\t\t\t
\n\t\t\t\t\t { __( 'Creating' ) }…\n\t\t\t\t
\n\t\t\t) }\n\n\t\t\t{ isEditing && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t{ showTextControl && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprops\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t{ errorMessage && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ errorMessage }\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ value && ! isEditingLink && ! isCreatingPage && (\n\t\t\t\t setIsEditingLink( true ) }\n\t\t\t\t\thasRichPreviews={ hasRichPreviews }\n\t\t\t\t\thasUnlinkControl={ shownUnlinkControl }\n\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\tsetIsEditingLink( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ showSettings && (\n\t\t\t\t
\n\t\t\t\t\t{ ! currentInputIsEmpty && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t
\n\t\t\t) }\n\n\t\t\t{ showActions && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ ! isCreatingPage && renderControlBottom && renderControlBottom() }\n\t\t\n\t);\n}\n\nLinkControl.ViewerFill = ViewerFill;\nLinkControl.DEFAULT_LINK_SETTINGS = DEFAULT_LINK_SETTINGS;\n\nexport default LinkControl;\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\n/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal';\n\nexport default function useInternalValue( value ) {\n\tconst [ internalValue, setInternalValue ] = useState( value || {} );\n\tconst [ previousValue, setPreviousValue ] = useState( value );\n\n\t// If the value prop changes, update the internal state.\n\t// See:\n\t// - https://github.com/WordPress/gutenberg/pull/51387#issuecomment-1722927384.\n\t// - https://react.dev/reference/react/useState#storing-information-from-previous-renders.\n\tif ( ! fastDeepEqual( value, previousValue ) ) {\n\t\tsetPreviousValue( value );\n\t\tsetInternalValue( value );\n\t}\n\n\tconst setInternalURLInputValue = ( nextValue ) => {\n\t\tsetInternalValue( {\n\t\t\t...internalValue,\n\t\t\turl: nextValue,\n\t\t} );\n\t};\n\n\tconst setInternalTextInputValue = ( nextValue ) => {\n\t\tsetInternalValue( {\n\t\t\t...internalValue,\n\t\t\ttitle: nextValue,\n\t\t} );\n\t};\n\n\tconst createSetInternalSettingValueHandler =\n\t\t( settingsKeys ) => ( nextValue ) => {\n\t\t\t// Only apply settings values which are defined in the settings prop.\n\t\t\tconst settingsUpdates = Object.keys( nextValue ).reduce(\n\t\t\t\t( acc, key ) => {\n\t\t\t\t\tif ( settingsKeys.includes( key ) ) {\n\t\t\t\t\t\tacc[ key ] = nextValue[ key ];\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tsetInternalValue( {\n\t\t\t\t...internalValue,\n\t\t\t\t...settingsUpdates,\n\t\t\t} );\n\t\t};\n\n\treturn [\n\t\tinternalValue,\n\t\tsetInternalValue,\n\t\tsetInternalURLInputValue,\n\t\tsetInternalTextInputValue,\n\t\tcreateSetInternalSettingValueHandler,\n\t];\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useState, useRef } from '@wordpress/element';\n\nexport default function useCreatePage( handleCreatePage ) {\n\tconst cancelableCreateSuggestion = useRef();\n\tconst [ isCreatingPage, setIsCreatingPage ] = useState( false );\n\tconst [ errorMessage, setErrorMessage ] = useState( null );\n\n\tconst createPage = async function ( suggestionTitle ) {\n\t\tsetIsCreatingPage( true );\n\t\tsetErrorMessage( null );\n\n\t\ttry {\n\t\t\t// Make cancellable in order that we can avoid setting State\n\t\t\t// if the component unmounts during the call to `createSuggestion`\n\t\t\tcancelableCreateSuggestion.current = makeCancelable(\n\t\t\t\t// Using Promise.resolve to allow createSuggestion to return a\n\t\t\t\t// non-Promise based value.\n\t\t\t\tPromise.resolve( handleCreatePage( suggestionTitle ) )\n\t\t\t);\n\n\t\t\treturn await cancelableCreateSuggestion.current.promise;\n\t\t} catch ( error ) {\n\t\t\tif ( error && error.isCanceled ) {\n\t\t\t\treturn; // bail if canceled to avoid setting state\n\t\t\t}\n\n\t\t\tsetErrorMessage(\n\t\t\t\terror.message ||\n\t\t\t\t\t__(\n\t\t\t\t\t\t'An unknown error occurred during creation. Please try again.'\n\t\t\t\t\t)\n\t\t\t);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tsetIsCreatingPage( false );\n\t\t}\n\t};\n\n\t/**\n\t * Handles cancelling any pending Promises that have been made cancelable.\n\t */\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\t// componentDidUnmount\n\t\t\tif ( cancelableCreateSuggestion.current ) {\n\t\t\t\tcancelableCreateSuggestion.current.cancel();\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\treturn {\n\t\tcreatePage,\n\t\tisCreatingPage,\n\t\terrorMessage,\n\t};\n}\n\n/**\n * Creates a wrapper around a promise which allows it to be programmatically\n * cancelled.\n * See: https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html\n *\n * @param {Promise} promise the Promise to make cancelable\n */\nconst makeCancelable = ( promise ) => {\n\tlet hasCanceled_ = false;\n\n\tconst wrappedPromise = new Promise( ( resolve, reject ) => {\n\t\tpromise.then(\n\t\t\t( val ) =>\n\t\t\t\thasCanceled_ ? reject( { isCanceled: true } ) : resolve( val ),\n\t\t\t( error ) =>\n\t\t\t\thasCanceled_ ? reject( { isCanceled: true } ) : reject( error )\n\t\t);\n\t} );\n\n\treturn {\n\t\tpromise: wrappedPromise,\n\t\tcancel() {\n\t\t\thasCanceled_ = true;\n\t\t},\n\t};\n};\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport {\n\tFormFileUpload,\n\tNavigableMenu,\n\tMenuItem,\n\tToolbarButton,\n\tDropdown,\n\twithFilters,\n} from '@wordpress/components';\nimport { useSelect, withDispatch } from '@wordpress/data';\nimport { DOWN } from '@wordpress/keycodes';\nimport {\n\tpostFeaturedImage,\n\tupload,\n\tmedia as mediaIcon,\n} from '@wordpress/icons';\nimport { compose } from '@wordpress/compose';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport MediaUpload from '../media-upload';\nimport MediaUploadCheck from '../media-upload/check';\nimport LinkControl from '../link-control';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\nlet uniqueId = 0;\n\nconst MediaReplaceFlow = ( {\n\tmediaURL,\n\tmediaId,\n\tmediaIds,\n\tallowedTypes,\n\taccept,\n\tonError,\n\tonSelect,\n\tonSelectURL,\n\tonReset,\n\tonToggleFeaturedImage,\n\tuseFeaturedImage,\n\tonFilesUpload = noop,\n\tname = __( 'Replace' ),\n\tcreateNotice,\n\tremoveNotice,\n\tchildren,\n\tmultiple = false,\n\taddToGallery,\n\thandleUpload = true,\n\tpopoverProps,\n} ) => {\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().mediaUpload;\n\t}, [] );\n\tconst canUpload = !! mediaUpload;\n\tconst editMediaButtonRef = useRef();\n\tconst errorNoticeID = `block-editor/media-replace-flow/error-notice/${ ++uniqueId }`;\n\n\tconst onUploadError = ( message ) => {\n\t\tconst safeMessage = stripHTML( message );\n\t\tif ( onError ) {\n\t\t\tonError( safeMessage );\n\t\t\treturn;\n\t\t}\n\t\t// We need to set a timeout for showing the notice\n\t\t// so that VoiceOver and possibly other screen readers\n\t\t// can announce the error after the toolbar button\n\t\t// regains focus once the upload dialog closes.\n\t\t// Otherwise VO simply skips over the notice and announces\n\t\t// the focused element and the open menu.\n\t\tsetTimeout( () => {\n\t\t\tcreateNotice( 'error', safeMessage, {\n\t\t\t\tspeak: true,\n\t\t\t\tid: errorNoticeID,\n\t\t\t\tisDismissible: true,\n\t\t\t} );\n\t\t}, 1000 );\n\t};\n\n\tconst selectMedia = ( media, closeMenu ) => {\n\t\tif ( useFeaturedImage && onToggleFeaturedImage ) {\n\t\t\tonToggleFeaturedImage();\n\t\t}\n\t\tcloseMenu();\n\t\t// Calling `onSelect` after the state update since it might unmount the component.\n\t\tonSelect( media );\n\t\tspeak( __( 'The media file has been replaced' ) );\n\t\tremoveNotice( errorNoticeID );\n\t};\n\n\tconst uploadFiles = ( event, closeMenu ) => {\n\t\tconst files = event.target.files;\n\t\tif ( ! handleUpload ) {\n\t\t\tcloseMenu();\n\t\t\treturn onSelect( files );\n\t\t}\n\t\tonFilesUpload( files );\n\t\tmediaUpload( {\n\t\t\tallowedTypes,\n\t\t\tfilesList: files,\n\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\tselectMedia( media, closeMenu );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst openOnArrowDown = ( event ) => {\n\t\tif ( event.keyCode === DOWN ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.target.click();\n\t\t}\n\t};\n\n\tconst onlyAllowsImages = () => {\n\t\tif ( ! allowedTypes || allowedTypes.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn allowedTypes.every(\n\t\t\t( allowedType ) =>\n\t\t\t\tallowedType === 'image' || allowedType.startsWith( 'image/' )\n\t\t);\n\t};\n\n\tconst gallery = multiple && onlyAllowsImages();\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t{ name }\n\t\t\t\t\n\t\t\t) }\n\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tselectMedia( media, onClose )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tallowedTypes={ allowedTypes }\n\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Open Media Library' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tuploadFiles( event, onClose );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\taccept={ accept }\n\t\t\t\t\t\t\t\tmultiple={ !! multiple }\n\t\t\t\t\t\t\t\trender={ ( { openFileDialog } ) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\topenFileDialog();\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t{ onToggleFeaturedImage && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Use featured image' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ mediaURL && onReset && (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tonReset();\n\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ typeof children === 'function'\n\t\t\t\t\t\t\t? children( { onClose } )\n\t\t\t\t\t\t\t: children }\n\t\t\t\t\t\n\t\t\t\t\t{ onSelectURL && (\n\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Current media URL:' ) }\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tonSelectURL( url );\n\t\t\t\t\t\t\t\t\teditMediaButtonRef.current.focus();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-replace-flow/README.md\n */\nexport default compose( [\n\twithDispatch( ( dispatch ) => {\n\t\tconst { createNotice, removeNotice } = dispatch( noticesStore );\n\t\treturn {\n\t\t\tcreateNotice,\n\t\t\tremoveNotice,\n\t\t};\n\t} ),\n\twithFilters( 'editor.MediaReplaceFlow' ),\n] )( MediaReplaceFlow );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tToggleControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalVStack as VStack,\n\tDropZone,\n\tFlexItem,\n\tFocalPointPicker,\n\tMenuItem,\n\tVisuallyHidden,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n\tDropdown,\n\tPlaceholder,\n\tSpinner,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n} from '@wordpress/components';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\nimport { useRef, useState, useEffect, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { focus } from '@wordpress/dom';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport { getResolvedValue } from '../global-styles/utils';\nimport { hasBackgroundImageValue } from '../global-styles/background-panel';\nimport { setImmutably } from '../../utils/object';\nimport MediaReplaceFlow from '../media-replace-flow';\nimport { store as blockEditorStore } from '../../store';\n\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\n\nconst IMAGE_BACKGROUND_TYPE = 'image';\n\nconst BACKGROUND_POPOVER_PROPS = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-global-styles-background-panel__popover',\n};\nconst noop = () => {};\n\n/**\n * Get the help text for the background size control.\n *\n * @param {string} value backgroundSize value.\n * @return {string} Translated help text.\n */\nfunction backgroundSizeHelpText( value ) {\n\tif ( value === 'cover' || value === undefined ) {\n\t\treturn __( 'Image covers the space evenly.' );\n\t}\n\tif ( value === 'contain' ) {\n\t\treturn __( 'Image is contained without distortion.' );\n\t}\n\treturn __( 'Image has a fixed width.' );\n}\n\n/**\n * Converts decimal x and y coords from FocalPointPicker to percentage-based values\n * to use as backgroundPosition value.\n *\n * @param {{x?:number, y?:number}} value FocalPointPicker coords.\n * @return {string} \t\t\t\t backgroundPosition value.\n */\nexport const coordsToBackgroundPosition = ( value ) => {\n\tif ( ! value || ( isNaN( value.x ) && isNaN( value.y ) ) ) {\n\t\treturn undefined;\n\t}\n\n\tconst x = isNaN( value.x ) ? 0.5 : value.x;\n\tconst y = isNaN( value.y ) ? 0.5 : value.y;\n\n\treturn `${ x * 100 }% ${ y * 100 }%`;\n};\n\n/**\n * Converts backgroundPosition value to x and y coords for FocalPointPicker.\n *\n * @param {string} value backgroundPosition value.\n * @return {{x?:number, y?:number}} FocalPointPicker coords.\n */\nexport const backgroundPositionToCoords = ( value ) => {\n\tif ( ! value ) {\n\t\treturn { x: undefined, y: undefined };\n\t}\n\n\tlet [ x, y ] = value.split( ' ' ).map( ( v ) => parseFloat( v ) / 100 );\n\tx = isNaN( x ) ? undefined : x;\n\ty = isNaN( y ) ? x : y;\n\n\treturn { x, y };\n};\n\nfunction InspectorImagePreviewItem( {\n\tas = 'span',\n\timgUrl,\n\ttoggleProps = {},\n\tfilename,\n\tlabel,\n\tclassName,\n\tonToggleCallback = noop,\n} ) {\n\tuseEffect( () => {\n\t\tif ( typeof toggleProps?.isOpen !== 'undefined' ) {\n\t\t\tonToggleCallback( toggleProps?.isOpen );\n\t\t}\n\t}, [ toggleProps?.isOpen, onToggleCallback ] );\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ imgUrl && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ imgUrl\n\t\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: file name */\n\t\t\t\t\t\t\t\t\t__( 'Background image: %s' ),\n\t\t\t\t\t\t\t\t\tfilename || label\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: __( 'No background image selected' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BackgroundControlsPanel( {\n\tlabel,\n\tfilename,\n\turl: imgUrl,\n\tchildren,\n\tonToggle: onToggleCallback = noop,\n\thasImageValue,\n} ) {\n\tif ( ! hasImageValue ) {\n\t\treturn;\n\t}\n\n\tconst imgLabel =\n\t\tlabel || getFilename( imgUrl ) || __( 'Add background image' );\n\n\treturn (\n\t\t {\n\t\t\t\tconst toggleProps = {\n\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__dropdown-toggle',\n\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t'aria-label': __(\n\t\t\t\t\t\t'Background size, position and repeat options.'\n\t\t\t\t\t),\n\t\t\t\t\tisOpen,\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction LoadingSpinner() {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BackgroundImageControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tonRemoveImage = noop,\n\tonResetImage = noop,\n\tdisplayInPanel,\n\tdefaultValues,\n} ) {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst { id, title, url } = style?.background?.backgroundImage || {\n\t\t...inheritedValue?.background?.backgroundImage,\n\t};\n\tconst replaceContainerRef = useRef();\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetIsUploading( false );\n\t};\n\n\tconst resetBackgroundImage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundImage' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\n\tconst onSelectMedia = ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tresetBackgroundImage();\n\t\t\tsetIsUploading( false );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetIsUploading( true );\n\t\t\treturn;\n\t\t}\n\n\t\t// For media selections originated from a file upload.\n\t\tif (\n\t\t\t( media.media_type &&\n\t\t\t\tmedia.media_type !== IMAGE_BACKGROUND_TYPE ) ||\n\t\t\t( ! media.media_type &&\n\t\t\t\tmedia.type &&\n\t\t\t\tmedia.type !== IMAGE_BACKGROUND_TYPE )\n\t\t) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only images can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst sizeValue =\n\t\t\tstyle?.background?.backgroundSize || defaultValues?.backgroundSize;\n\t\tconst positionValue = style?.background?.backgroundPosition;\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundImage: {\n\t\t\t\t\turl: media.url,\n\t\t\t\t\tid: media.id,\n\t\t\t\t\tsource: 'file',\n\t\t\t\t\ttitle: media.title || undefined,\n\t\t\t\t},\n\t\t\t\tbackgroundPosition:\n\t\t\t\t\t/*\n\t\t\t\t\t * A background image uploaded and set in the editor receives a default background position of '50% 0',\n\t\t\t\t\t * when the background image size is the equivalent of \"Tile\".\n\t\t\t\t\t * This is to increase the chance that the image's focus point is visible.\n\t\t\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t\t\t */\n\t\t\t\t\t! positionValue && ( 'auto' === sizeValue || ! sizeValue )\n\t\t\t\t\t\t? '50% 0'\n\t\t\t\t\t\t: positionValue,\n\t\t\t\tbackgroundSize: sizeValue,\n\t\t\t} )\n\t\t);\n\t\tsetIsUploading( false );\n\t};\n\n\t// Drag and drop callback, restricting image to one.\n\tconst onFilesDrop = ( filesList ) => {\n\t\tif ( filesList?.length > 1 ) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only one image can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: [ IMAGE_BACKGROUND_TYPE ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tonSelectMedia( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst hasValue = hasBackgroundImageValue( style );\n\n\tconst closeAndFocus = () => {\n\t\tconst [ toggleButton ] = focus.tabbable.find(\n\t\t\treplaceContainerRef.current\n\t\t);\n\t\t// Focus the toggle button and close the dropdown menu.\n\t\t// This ensures similar behaviour as to selecting an image, where the dropdown is\n\t\t// closed and focus is redirected to the dropdown toggle button.\n\t\ttoggleButton?.focus();\n\t\ttoggleButton?.click();\n\t};\n\n\tconst onRemove = () =>\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\tbackgroundImage: 'none',\n\t\t\t} )\n\t\t);\n\tconst canRemove = ! hasValue && hasBackgroundImageValue( inheritedValue );\n\tconst imgLabel =\n\t\ttitle || getFilename( url ) || __( 'Add background image' );\n\n\treturn (\n\t\t\n\t\t\t{ isUploading && }\n\t\t\t\n\t\t\t\t}\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tonReset={ () => {\n\t\t\t\t\tcloseAndFocus();\n\t\t\t\t\tonResetImage();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ canRemove && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tcloseAndFocus();\n\t\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\t\tonRemoveImage();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BackgroundSizeControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tdefaultValues,\n} ) {\n\tconst sizeValue =\n\t\tstyle?.background?.backgroundSize ||\n\t\tinheritedValue?.background?.backgroundSize;\n\tconst repeatValue =\n\t\tstyle?.background?.backgroundRepeat ||\n\t\tinheritedValue?.background?.backgroundRepeat;\n\tconst imageValue =\n\t\tstyle?.background?.backgroundImage?.url ||\n\t\tinheritedValue?.background?.backgroundImage?.url;\n\tconst isUploadedImage = style?.background?.backgroundImage?.id;\n\tconst positionValue =\n\t\tstyle?.background?.backgroundPosition ||\n\t\tinheritedValue?.background?.backgroundPosition;\n\tconst attachmentValue =\n\t\tstyle?.background?.backgroundAttachment ||\n\t\tinheritedValue?.background?.backgroundAttachment;\n\n\t/*\n\t * Set default values for uploaded images.\n\t * The default values are passed by the consumer.\n\t * Block-level controls may have different defaults to root-level controls.\n\t * A falsy value is treated by default as `auto` (Tile).\n\t */\n\tlet currentValueForToggle =\n\t\t! sizeValue && isUploadedImage\n\t\t\t? defaultValues?.backgroundSize\n\t\t\t: sizeValue || 'auto';\n\t/*\n\t * The incoming value could be a value + unit, e.g. '20px'.\n\t * In this case set the value to 'tile'.\n\t */\n\tcurrentValueForToggle = ! [ 'cover', 'contain', 'auto' ].includes(\n\t\tcurrentValueForToggle\n\t)\n\t\t? 'auto'\n\t\t: currentValueForToggle;\n\t/*\n\t * If the current value is `cover` and the repeat value is `undefined`, then\n\t * the toggle should be unchecked as the default state. Otherwise, the toggle\n\t * should reflect the current repeat value.\n\t */\n\tconst repeatCheckedValue = ! (\n\t\trepeatValue === 'no-repeat' ||\n\t\t( currentValueForToggle === 'cover' && repeatValue === undefined )\n\t);\n\n\tconst updateBackgroundSize = ( next ) => {\n\t\t// When switching to 'contain' toggle the repeat off.\n\t\tlet nextRepeat = repeatValue;\n\t\tlet nextPosition = positionValue;\n\n\t\tif ( next === 'contain' ) {\n\t\t\tnextRepeat = 'no-repeat';\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif ( next === 'cover' ) {\n\t\t\tnextRepeat = undefined;\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif (\n\t\t\t( currentValueForToggle === 'cover' ||\n\t\t\t\tcurrentValueForToggle === 'contain' ) &&\n\t\t\tnext === 'auto'\n\t\t) {\n\t\t\tnextRepeat = undefined;\n\t\t\t/*\n\t\t\t * A background image uploaded and set in the editor (an image with a record id),\n\t\t\t * receives a default background position of '50% 0',\n\t\t\t * when the toggle switches to \"Tile\". This is to increase the chance that\n\t\t\t * the image's focus point is visible.\n\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t */\n\t\t\tif ( !! style?.background?.backgroundImage?.id ) {\n\t\t\t\tnextPosition = '50% 0';\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Next will be null when the input is cleared,\n\t\t * in which case the value should be 'auto'.\n\t\t */\n\t\tif ( ! next && currentValueForToggle === 'auto' ) {\n\t\t\tnext = 'auto';\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundPosition: nextPosition,\n\t\t\t\tbackgroundRepeat: nextRepeat,\n\t\t\t\tbackgroundSize: next,\n\t\t\t} )\n\t\t);\n\t};\n\n\tconst updateBackgroundPosition = ( next ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundPosition' ],\n\t\t\t\tcoordsToBackgroundPosition( next )\n\t\t\t)\n\t\t);\n\t};\n\n\tconst toggleIsRepeated = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundRepeat' ],\n\t\t\t\trepeatCheckedValue === true ? 'no-repeat' : 'repeat'\n\t\t\t)\n\t\t);\n\n\tconst toggleScrollWithPage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundAttachment' ],\n\t\t\t\tattachmentValue === 'fixed' ? 'scroll' : 'fixed'\n\t\t\t)\n\t\t);\n\n\t// Set a default background position for non-site-wide, uploaded images with a size of 'contain'.\n\tconst backgroundPositionValue =\n\t\t! positionValue && isUploadedImage && 'contain' === sizeValue\n\t\t\t? defaultValues?.backgroundPosition\n\t\t\t: positionValue;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tdefaultValues = {},\n} ) {\n\t/*\n\t * Resolve any inherited \"ref\" pointers.\n\t * Should the block editor need resolved, inherited values\n\t * across all controls, this could be abstracted into a hook,\n\t * e.g., useResolveGlobalStyle\n\t */\n\tconst { globalStyles, _links } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tglobalStyles: _settings[ globalStylesDataKey ],\n\t\t\t_links: _settings[ globalStylesLinksDataKey ],\n\t\t};\n\t}, [] );\n\tconst resolvedInheritedValue = useMemo( () => {\n\t\tconst resolvedValues = {\n\t\t\tbackground: {},\n\t\t};\n\n\t\tif ( ! inheritedValue?.background ) {\n\t\t\treturn inheritedValue;\n\t\t}\n\n\t\tObject.entries( inheritedValue?.background ).forEach(\n\t\t\t( [ key, backgroundValue ] ) => {\n\t\t\t\tresolvedValues.background[ key ] = getResolvedValue(\n\t\t\t\t\tbackgroundValue,\n\t\t\t\t\t{\n\t\t\t\t\t\tstyles: globalStyles,\n\t\t\t\t\t\t_links,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\treturn resolvedValues;\n\t}, [ globalStyles, _links, inheritedValue ] );\n\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\n\tconst { title, url } = value?.background?.backgroundImage || {\n\t\t...resolvedInheritedValue?.background?.backgroundImage,\n\t};\n\tconst hasImageValue =\n\t\thasBackgroundImageValue( value ) ||\n\t\thasBackgroundImageValue( resolvedInheritedValue );\n\n\tconst imageValue =\n\t\tvalue?.background?.backgroundImage ||\n\t\tinheritedValue?.background?.backgroundImage;\n\n\tconst shouldShowBackgroundImageControls =\n\t\thasImageValue &&\n\t\t'none' !== imageValue &&\n\t\t( settings?.background?.backgroundSize ||\n\t\t\tsettings?.background?.backgroundPosition ||\n\t\t\tsettings?.background?.backgroundRepeat );\n\n\tconst [ isDropDownOpen, setIsDropDownOpen ] = useState( false );\n\n\treturn (\n\t\t\n\t\t\t{ shouldShowBackgroundImageControls ? (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t {\n\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t} }\n\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useCallback, Platform } from '@wordpress/element';\n/**\n * Internal dependencies\n */\nimport BackgroundImageControl from '../background-image-control';\nimport { useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport { __ } from '@wordpress/i18n';\n\nconst DEFAULT_CONTROLS = {\n\tbackgroundImage: true,\n};\n\n/**\n * Checks site settings to see if the background panel may be used.\n * `settings.background.backgroundSize` exists also,\n * but can only be used if settings?.background?.backgroundImage is `true`.\n *\n * @param {Object} settings Site settings\n * @return {boolean} Whether site settings has activated background panel.\n */\nexport function useHasBackgroundPanel( settings ) {\n\treturn Platform.OS === 'web' && settings?.background?.backgroundImage;\n}\n\n/**\n * Checks if there is a current value in the background size block support\n * attributes. Background size values include background size as well\n * as background position.\n *\n * @param {Object} style Style attribute.\n * @return {boolean} Whether the block has a background size value set.\n */\nexport function hasBackgroundSizeValue( style ) {\n\treturn (\n\t\tstyle?.background?.backgroundPosition !== undefined ||\n\t\tstyle?.background?.backgroundSize !== undefined\n\t);\n}\n\n/**\n * Checks if there is a current value in the background image block support\n * attributes.\n *\n * @param {Object} style Style attribute.\n * @return {boolean} Whether the block has a background image value set.\n */\nexport function hasBackgroundImageValue( style ) {\n\treturn (\n\t\t!! style?.background?.backgroundImage?.id ||\n\t\t// Supports url() string values in theme.json.\n\t\t'string' === typeof style?.background?.backgroundImage ||\n\t\t!! style?.background?.backgroundImage?.url\n\t);\n}\n\nfunction BackgroundToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n\theaderLabel,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tas: Wrapper = BackgroundToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tdefaultValues = {},\n\theaderLabel = __( 'Background image' ),\n} ) {\n\tconst showBackgroundImageControl = useHasBackgroundPanel( settings );\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tbackground: {},\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t{ showBackgroundImageControl && (\n\t\t\t\t !! value?.background }\n\t\t\t\t\tlabel={ __( 'Image' ) }\n\t\t\t\t\tonDeselect={ resetBackground }\n\t\t\t\t\tisShownByDefault={ defaultControls.backgroundImage }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\nimport {\n\tdefault as StylesBackgroundPanel,\n\tuseHasBackgroundPanel,\n\thasBackgroundImageValue,\n} from '../components/global-styles/background-panel';\nimport { globalStylesDataKey } from '../store/private-keys';\n\nexport const BACKGROUND_SUPPORT_KEY = 'background';\n\n// Initial control values.\nexport const BACKGROUND_BLOCK_DEFAULT_VALUES = {\n\tbackgroundSize: 'cover',\n\tbackgroundPosition: '50% 50%', // used only when backgroundSize is 'contain'.\n};\n\n/**\n * Determine whether there is block support for background.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBackgroundSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BACKGROUND_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn (\n\t\t\t!! support?.backgroundImage ||\n\t\t\t!! support?.backgroundSize ||\n\t\t\t!! support?.backgroundRepeat\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function setBackgroundStyleDefaults( backgroundStyle ) {\n\tif ( ! backgroundStyle || ! backgroundStyle?.backgroundImage?.url ) {\n\t\treturn;\n\t}\n\n\tlet backgroundStylesWithDefaults;\n\n\t// Set block background defaults.\n\tif ( ! backgroundStyle?.backgroundSize ) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundSize: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize,\n\t\t};\n\t}\n\n\tif (\n\t\t'contain' === backgroundStyle?.backgroundSize &&\n\t\t! backgroundStyle?.backgroundPosition\n\t) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundPosition:\n\t\t\t\tBACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition,\n\t\t};\n\t}\n\treturn backgroundStylesWithDefaults;\n}\n\nfunction useBlockProps( { name, style } ) {\n\tif (\n\t\t! hasBackgroundSupport( name ) ||\n\t\t! style?.background?.backgroundImage\n\t) {\n\t\treturn;\n\t}\n\n\tconst backgroundStyles = setBackgroundStyleDefaults( style?.background );\n\n\tif ( ! backgroundStyles ) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\tstyle: {\n\t\t\t...backgroundStyles,\n\t\t},\n\t};\n}\n\n/**\n * Generates a CSS class name if an background image is set.\n *\n * @param {Object} style A block's style attribute.\n *\n * @return {string} CSS class name.\n */\nexport function getBackgroundImageClasses( style ) {\n\treturn hasBackgroundImageValue( style ) ? 'has-background' : '';\n}\n\nfunction BackgroundInspectorControl( { children } ) {\n\tconst resetAllFilter = useCallback( ( attributes ) => {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tstyle: {\n\t\t\t\t...attributes.style,\n\t\t\t\tbackground: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function BackgroundImagePanel( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\tsettings,\n} ) {\n\tconst { style, inheritedValue } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst _settings = getSettings();\n\t\t\treturn {\n\t\t\t\tstyle: getBlockAttributes( clientId )?.style,\n\t\t\t\t/*\n\t\t\t\t * To ensure we pass down the right inherited values:\n\t\t\t\t * @TODO 1. Pass inherited value down to all block style controls,\n\t\t\t\t * See: packages/block-editor/src/hooks/style.js\n\t\t\t\t * @TODO 2. Add support for block style variations,\n\t\t\t\t * See implementation: packages/block-editor/src/hooks/block-style-variation.js\n\t\t\t\t */\n\t\t\t\tinheritedValue:\n\t\t\t\t\t_settings[ globalStylesDataKey ]?.blocks?.[ name ],\n\t\t\t};\n\t\t},\n\t\t[ clientId, name ]\n\t);\n\n\tif (\n\t\t! useHasBackgroundPanel( settings ) ||\n\t\t! hasBackgroundSupport( name, 'backgroundImage' )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tconst updatedSettings = {\n\t\t...settings,\n\t\tbackground: {\n\t\t\t...settings.background,\n\t\t\tbackgroundSize:\n\t\t\t\tsettings?.background?.backgroundSize &&\n\t\t\t\thasBackgroundSupport( name, 'backgroundSize' ),\n\t\t},\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport: hasBackgroundSupport,\n};\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Filters registered block settings, extending attributes to include `lock`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.lock ?? {} ) ) {\n\t\treturn settings;\n\t}\n\t// Gracefully handle if settings.attributes is undefined.\n\tsettings.attributes = {\n\t\t...settings.attributes,\n\t\tlock: {\n\t\t\ttype: 'object',\n\t\t},\n\t};\n\n\treturn settings;\n}\n\naddFilter( 'blocks.registerBlockType', 'core/lock/addAttribute', addAttribute );\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { TextControl, ExternalLink } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * Regular expression matching invalid anchor characters for replacement.\n *\n * @type {RegExp}\n */\nconst ANCHOR_REGEX = /[\\s#]/g;\n\nconst ANCHOR_SCHEMA = {\n\ttype: 'string',\n\tsource: 'attribute',\n\tattribute: 'id',\n\tselector: '*',\n};\n\n/**\n * Filters registered block settings, extending attributes with anchor using ID\n * of the first node.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.anchor ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'anchor' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tanchor: ANCHOR_SCHEMA,\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockEditAnchorControlPure( { anchor, setAttributes } ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst isWeb = Platform.OS === 'web';\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Enter a word or two — without spaces — to make a unique web address just for this block, called an “anchor”. Then, you’ll be able to link directly to this section of your page.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ isWeb && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{ ' ' }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ __( 'Learn more about anchors' ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvalue={ anchor || '' }\n\t\t\t\tplaceholder={ ! isWeb ? __( 'Add an anchor' ) : null }\n\t\t\t\tonChange={ ( nextValue ) => {\n\t\t\t\t\tnextValue = nextValue.replace( ANCHOR_REGEX, '-' );\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tanchor: nextValue,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\tautoComplete=\"off\"\n\t\t\t/>\n\t\t\n\t);\n}\n\nexport default {\n\taddSaveProps,\n\tedit: BlockEditAnchorControlPure,\n\tattributeKeys: [ 'anchor' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'anchor' );\n\t},\n};\n\n/**\n * Override props assigned to save component to inject anchor ID, if block\n * supports anchor. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif ( hasBlockSupport( blockType, 'anchor' ) ) {\n\t\textraProps.id = attributes.anchor === '' ? null : attributes.anchor;\n\t}\n\n\treturn extraProps;\n}\n\naddFilter( 'blocks.registerBlockType', 'core/anchor/attribute', addAttribute );\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\nconst ARIA_LABEL_SCHEMA = {\n\ttype: 'string',\n\tsource: 'attribute',\n\tattribute: 'aria-label',\n\tselector: '*',\n};\n\n/**\n * Filters registered block settings, extending attributes with ariaLabel using aria-label\n * of the first node.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( settings?.attributes?.ariaLabel?.type ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'ariaLabel' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tariaLabel: ARIA_LABEL_SCHEMA,\n\t\t};\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject aria-label, if block\n * supports ariaLabel. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif ( hasBlockSupport( blockType, 'ariaLabel' ) ) {\n\t\textraProps[ 'aria-label' ] =\n\t\t\tattributes.ariaLabel === '' ? null : attributes.ariaLabel;\n\t}\n\n\treturn extraProps;\n}\n\nexport default {\n\taddSaveProps,\n\tattributeKeys: [ 'ariaLabel' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'ariaLabel' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/ariaLabel/attribute',\n\taddAttribute\n);\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { TextControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * Filters registered block settings, extending attributes to include `className`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( hasBlockSupport( settings, 'customClassName', true ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tclassName: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction CustomClassNameControlsPure( { className, setAttributes } ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tclassName: nextValue !== '' ? nextValue : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\thelp={ __( 'Separate multiple classes with spaces.' ) }\n\t\t\t/>\n\t\t\n\t);\n}\n\nexport default {\n\tedit: CustomClassNameControlsPure,\n\taddSaveProps,\n\tattributeKeys: [ 'className' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'customClassName', true );\n\t},\n};\n\n/**\n * Override props assigned to save component to inject the className, if block\n * supports customClassName. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif (\n\t\thasBlockSupport( blockType, 'customClassName', true ) &&\n\t\tattributes.className\n\t) {\n\t\textraProps.className = clsx(\n\t\t\textraProps.className,\n\t\t\tattributes.className\n\t\t);\n\t}\n\n\treturn extraProps;\n}\n\nexport function addTransforms( result, source, index, results ) {\n\tif ( ! hasBlockSupport( result.name, 'customClassName', true ) ) {\n\t\treturn result;\n\t}\n\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the class should not be kept.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\n\t// If we are transforming one block to multiple blocks or multiple blocks to one block,\n\t// we ignore the class during the transform.\n\tif (\n\t\t( results.length === 1 && source.length > 1 ) ||\n\t\t( results.length > 1 && source.length === 1 )\n\t) {\n\t\treturn result;\n\t}\n\n\t// If we are in presence of transform between one or more block in the source\n\t// that have one or more blocks in the result\n\t// we apply the class on source N to the result N,\n\t// if source N does not exists we do nothing.\n\tif ( source[ index ] ) {\n\t\tconst originClassName = source[ index ]?.attributes.className;\n\t\tif ( originClassName ) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tattributes: {\n\t\t\t\t\t...result.attributes,\n\t\t\t\t\tclassName: originClassName,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\treturn result;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-class-name/attribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/color/addTransforms',\n\taddTransforms\n);\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport, getBlockDefaultClassName } from '@wordpress/blocks';\n\n/**\n * Override props assigned to save component to inject generated className if\n * block supports it. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addGeneratedClassName( extraProps, blockType ) {\n\t// Adding the generated className.\n\tif ( hasBlockSupport( blockType, 'className', true ) ) {\n\t\tif ( typeof extraProps.className === 'string' ) {\n\t\t\t// We have some extra classes and want to add the default classname\n\t\t\t// We use uniq to prevent duplicate classnames.\n\n\t\t\textraProps.className = [\n\t\t\t\t...new Set( [\n\t\t\t\t\tgetBlockDefaultClassName( blockType.name ),\n\t\t\t\t\t...extraProps.className.split( ' ' ),\n\t\t\t\t] ),\n\t\t\t]\n\t\t\t\t.join( ' ' )\n\t\t\t\t.trim();\n\t\t} else {\n\t\t\t// There is no string in the className variable,\n\t\t\t// so we just dump the default name in there.\n\t\t\textraProps.className = getBlockDefaultClassName( blockType.name );\n\t\t}\n\t}\n\treturn extraProps;\n}\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/generated-class-name/save-props',\n\taddGeneratedClassName\n);\n","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,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)||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 j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","export default function(e,f){var a={white:\"#ffffff\",bisque:\"#ffe4c4\",blue:\"#0000ff\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",azure:\"#f0ffff\",whitesmoke:\"#f5f5f5\",papayawhip:\"#ffefd5\",plum:\"#dda0dd\",blanchedalmond:\"#ffebcd\",black:\"#000000\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",cornsilk:\"#fff8dc\",cornflowerblue:\"#6495ed\",burlywood:\"#deb887\",aquamarine:\"#7fffd4\",beige:\"#f5f5dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkkhaki:\"#bdb76b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",peachpuff:\"#ffdab9\",darkmagenta:\"#8b008b\",darkred:\"#8b0000\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkslateblue:\"#483d8b\",gray:\"#808080\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",wheat:\"#f5deb3\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",ghostwhite:\"#f8f8ff\",darkviolet:\"#9400d3\",magenta:\"#ff00ff\",green:\"#008000\",dodgerblue:\"#1e90ff\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",blueviolet:\"#8a2be2\",forestgreen:\"#228b22\",lawngreen:\"#7cfc00\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",fuchsia:\"#ff00ff\",brown:\"#a52a2a\",maroon:\"#800000\",mediumblue:\"#0000cd\",lightcoral:\"#f08080\",darkturquoise:\"#00ced1\",lightcyan:\"#e0ffff\",ivory:\"#fffff0\",lightyellow:\"#ffffe0\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",linen:\"#faf0e6\",mediumaquamarine:\"#66cdaa\",lemonchiffon:\"#fffacd\",lime:\"#00ff00\",khaki:\"#f0e68c\",mediumseagreen:\"#3cb371\",limegreen:\"#32cd32\",mediumspringgreen:\"#00fa9a\",lightskyblue:\"#87cefa\",lightblue:\"#add8e6\",midnightblue:\"#191970\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",mintcream:\"#f5fffa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",navajowhite:\"#ffdead\",navy:\"#000080\",mediumvioletred:\"#c71585\",powderblue:\"#b0e0e6\",palegoldenrod:\"#eee8aa\",oldlace:\"#fdf5e6\",paleturquoise:\"#afeeee\",mediumturquoise:\"#48d1cc\",mediumorchid:\"#ba55d3\",rebeccapurple:\"#663399\",lightsteelblue:\"#b0c4de\",mediumslateblue:\"#7b68ee\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",orchid:\"#da70d6\",mediumpurple:\"#9370db\",purple:\"#800080\",pink:\"#ffc0cb\",skyblue:\"#87ceeb\",springgreen:\"#00ff7f\",palegreen:\"#98fb98\",red:\"#ff0000\",yellow:\"#ffff00\",slateblue:\"#6a5acd\",lavenderblush:\"#fff0f5\",peru:\"#cd853f\",palevioletred:\"#db7093\",violet:\"#ee82ee\",teal:\"#008080\",slategray:\"#708090\",slategrey:\"#708090\",aliceblue:\"#f0f8ff\",darkseagreen:\"#8fbc8f\",darkolivegreen:\"#556b2f\",greenyellow:\"#adff2f\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",tomato:\"#ff6347\",silver:\"#c0c0c0\",sienna:\"#a0522d\",lavender:\"#e6e6fa\",lightgreen:\"#90ee90\",orange:\"#ffa500\",orangered:\"#ff4500\",steelblue:\"#4682b4\",royalblue:\"#4169e1\",turquoise:\"#40e0d0\",yellowgreen:\"#9acd32\",salmon:\"#fa8072\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",darksalmon:\"#e9967a\",lightgoldenrodyellow:\"#fafad2\",snow:\"#fffafa\",lightgrey:\"#d3d3d3\",lightgray:\"#d3d3d3\",dimgray:\"#696969\",dimgrey:\"#696969\",olivedrab:\"#6b8e23\",olive:\"#808000\"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return\"transparent\";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b=\"black\";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));ud?(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}}\n","/**\n * External dependencies\n */\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\nimport a11yPlugin from 'colord/plugins/a11y';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nextend( [ namesPlugin, a11yPlugin ] );\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Provided an array of color objects as set by the theme or by the editor defaults,\n * and the values of the defined color or custom color returns a color object describing the color.\n *\n * @param {Array} colors Array of color objects as set by the theme or by the editor defaults.\n * @param {?string} definedColor A string containing the color slug.\n * @param {?string} customColor A string containing the customColor value.\n *\n * @return {?Object} If definedColor is passed and the name is found in colors,\n * the color object exactly as set by the theme or editor defaults is returned.\n * Otherwise, an object that just sets the color is defined.\n */\nexport const getColorObjectByAttributeValues = (\n\tcolors,\n\tdefinedColor,\n\tcustomColor\n) => {\n\tif ( definedColor ) {\n\t\tconst colorObj = colors?.find(\n\t\t\t( color ) => color.slug === definedColor\n\t\t);\n\n\t\tif ( colorObj ) {\n\t\t\treturn colorObj;\n\t\t}\n\t}\n\treturn {\n\t\tcolor: customColor,\n\t};\n};\n\n/**\n * Provided an array of color objects as set by the theme or by the editor defaults, and a color value returns the color object matching that value or undefined.\n *\n * @param {Array} colors Array of color objects as set by the theme or by the editor defaults.\n * @param {?string} colorValue A string containing the color value.\n *\n * @return {?Object} Color object included in the colors array whose color property equals colorValue.\n * Returns undefined if no color object matches this requirement.\n */\nexport const getColorObjectByColorValue = ( colors, colorValue ) => {\n\treturn colors?.find( ( color ) => color.color === colorValue );\n};\n\n/**\n * Returns a class based on the context a color is being used and its slug.\n *\n * @param {string} colorContextName Context/place where color is being used e.g: background, text etc...\n * @param {string} colorSlug Slug of the color.\n *\n * @return {?string} String with the class corresponding to the color in the provided context.\n * Returns undefined if either colorContextName or colorSlug are not provided.\n */\nexport function getColorClassName( colorContextName, colorSlug ) {\n\tif ( ! colorContextName || ! colorSlug ) {\n\t\treturn undefined;\n\t}\n\n\treturn `has-${ kebabCase( colorSlug ) }-${ colorContextName }`;\n}\n\n/**\n * Given an array of color objects and a color value returns the color value of the most readable color in the array.\n *\n * @param {Array} colors Array of color objects as set by the theme or by the editor defaults.\n * @param {?string} colorValue A string containing the color value.\n *\n * @return {string} String with the color value of the most readable color.\n */\nexport function getMostReadableColor( colors, colorValue ) {\n\tconst colordColor = colord( colorValue );\n\tconst getColorContrast = ( { color } ) => colordColor.contrast( color );\n\n\tconst maxContrast = Math.max( ...colors.map( getColorContrast ) );\n\treturn colors.find( ( color ) => getColorContrast( color ) === maxContrast )\n\t\t.color;\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\n/**\n * Retrieves color and gradient related settings.\n *\n * The arrays for colors and gradients are made up of color palettes from each\n * origin i.e. \"Core\", \"Theme\", and \"User\".\n *\n * @return {Object} Color and gradient related settings.\n */\nexport default function useMultipleOriginColorsAndGradients() {\n\tconst [\n\t\tenableCustomColors,\n\t\tcustomColors,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tshouldDisplayDefaultColors,\n\t\tenableCustomGradients,\n\t\tcustomGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t\tshouldDisplayDefaultGradients,\n\t] = useSettings(\n\t\t'color.custom',\n\t\t'color.palette.custom',\n\t\t'color.palette.theme',\n\t\t'color.palette.default',\n\t\t'color.defaultPalette',\n\t\t'color.customGradient',\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default',\n\t\t'color.defaultGradients'\n\t);\n\n\tconst colorGradientSettings = {\n\t\tdisableCustomColors: ! enableCustomColors,\n\t\tdisableCustomGradients: ! enableCustomGradients,\n\t};\n\n\tcolorGradientSettings.colors = useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeColors && themeColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: themeColors,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultColors &&\n\t\t\tdefaultColors &&\n\t\t\tdefaultColors.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tcolors: defaultColors,\n\t\t\t} );\n\t\t}\n\t\tif ( customColors && customColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: customColors,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomColors,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tshouldDisplayDefaultColors,\n\t] );\n\n\tcolorGradientSettings.gradients = useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeGradients && themeGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tgradients: themeGradients,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultGradients &&\n\t\t\tdefaultGradients &&\n\t\t\tdefaultGradients.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tgradients: defaultGradients,\n\t\t\t} );\n\t\t}\n\t\tif ( customGradients && customGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tgradients: customGradients,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t\tshouldDisplayDefaultGradients,\n\t] );\n\n\tcolorGradientSettings.hasColorsOrGradients =\n\t\t!! colorGradientSettings.colors.length ||\n\t\t!! colorGradientSettings.gradients.length;\n\n\treturn colorGradientSettings;\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue } from '@wordpress/components';\n\n/**\n * Gets the (non-undefined) item with the highest occurrence within an array\n * Based in part on: https://stackoverflow.com/a/20762713\n *\n * Undefined values are always sorted to the end by `sort`, so this function\n * returns the first element, to always prioritize real values over undefined\n * values.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#description\n *\n * @param {Array} inputArray Array of items to check.\n * @return {any} The item with the most occurrences.\n */\nexport function mode( inputArray ) {\n\tconst arr = [ ...inputArray ];\n\treturn arr\n\t\t.sort(\n\t\t\t( a, b ) =>\n\t\t\t\tinputArray.filter( ( v ) => v === b ).length -\n\t\t\t\tinputArray.filter( ( v ) => v === a ).length\n\t\t)\n\t\t.shift();\n}\n\n/**\n * Returns the most common CSS unit from the current CSS unit selections.\n *\n * - If a single flat border radius is set, its unit will be used\n * - If individual corner selections, the most common of those will be used\n * - Failing any unit selections a default of 'px' is returned.\n *\n * @param {Object} selectedUnits Unit selections for flat radius & each corner.\n * @return {string} Most common CSS unit from current selections. Default: `px`.\n */\nexport function getAllUnit( selectedUnits = {} ) {\n\tconst { flat, ...cornerUnits } = selectedUnits;\n\treturn (\n\t\tflat || mode( Object.values( cornerUnits ).filter( Boolean ) ) || 'px'\n\t);\n}\n\n/**\n * Gets the 'all' input value and unit from values data.\n *\n * @param {Object|string} values Radius values.\n * @return {string} A value + unit for the 'all' input.\n */\nexport function getAllValue( values = {} ) {\n\t/**\n\t * Border radius support was originally a single pixel value.\n\t *\n\t * To maintain backwards compatibility treat this case as the all value.\n\t */\n\tif ( typeof values === 'string' ) {\n\t\treturn values;\n\t}\n\n\tconst parsedQuantitiesAndUnits = Object.values( values ).map( ( value ) =>\n\t\tparseQuantityAndUnitFromRawValue( value )\n\t);\n\n\tconst allValues = parsedQuantitiesAndUnits.map(\n\t\t( value ) => value[ 0 ] ?? ''\n\t);\n\tconst allUnits = parsedQuantitiesAndUnits.map( ( value ) => value[ 1 ] );\n\n\tconst value = allValues.every( ( v ) => v === allValues[ 0 ] )\n\t\t? allValues[ 0 ]\n\t\t: '';\n\tconst unit = mode( allUnits );\n\n\tconst allValue = value === 0 || value ? `${ value }${ unit }` : undefined;\n\n\treturn allValue;\n}\n\n/**\n * Checks to determine if values are mixed.\n *\n * @param {Object} values Radius values.\n * @return {boolean} Whether values are mixed.\n */\nexport function hasMixedValues( values = {} ) {\n\tconst allValue = getAllValue( values );\n\tconst isMixed =\n\t\ttypeof values === 'string' ? false : isNaN( parseFloat( allValue ) );\n\n\treturn isMixed;\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param {Object} values Radius values.\n * @return {boolean} Whether values are mixed.\n */\nexport function hasDefinedValues( values ) {\n\tif ( ! values ) {\n\t\treturn false;\n\t}\n\n\t// A string value represents a shorthand value.\n\tif ( typeof values === 'string' ) {\n\t\treturn true;\n\t}\n\n\t// An object represents longhand border radius values, if any are set\n\t// flag values as being defined.\n\tconst filteredValues = Object.values( values ).filter( ( value ) => {\n\t\treturn !! value || value === 0;\n\t} );\n\n\treturn !! filteredValues.length;\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalUnitControl as UnitControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetAllValue,\n\tgetAllUnit,\n\thasMixedValues,\n\thasDefinedValues,\n} from './utils';\n\nexport default function AllInputControl( {\n\tonChange,\n\tselectedUnits,\n\tsetSelectedUnits,\n\tvalues,\n\t...props\n} ) {\n\tlet allValue = getAllValue( values );\n\n\tif ( allValue === undefined ) {\n\t\t// If we don't have any value set the unit to any current selection\n\t\t// or the most common unit from the individual radii values.\n\t\tallValue = getAllUnit( selectedUnits );\n\t}\n\n\tconst hasValues = hasDefinedValues( values );\n\tconst isMixed = hasValues && hasMixedValues( values );\n\tconst allPlaceholder = isMixed ? __( 'Mixed' ) : null;\n\n\t// Filter out CSS-unit-only values to prevent invalid styles.\n\tconst handleOnChange = ( next ) => {\n\t\tconst isNumeric = ! isNaN( parseFloat( next ) );\n\t\tconst nextValue = isNumeric ? next : undefined;\n\t\tonChange( nextValue );\n\t};\n\n\t// Store current unit selection for use as fallback for individual\n\t// radii controls.\n\tconst handleOnUnitChange = ( unit ) => {\n\t\tsetSelectedUnits( {\n\t\t\ttopLeft: unit,\n\t\t\ttopRight: unit,\n\t\t\tbottomLeft: unit,\n\t\t\tbottomRight: unit,\n\t\t} );\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalUnitControl as UnitControl,\n\tTooltip,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nconst CORNERS = {\n\ttopLeft: __( 'Top left' ),\n\ttopRight: __( 'Top right' ),\n\tbottomLeft: __( 'Bottom left' ),\n\tbottomRight: __( 'Bottom right' ),\n};\n\nexport default function BoxInputControls( {\n\tonChange,\n\tselectedUnits,\n\tsetSelectedUnits,\n\tvalues: valuesProp,\n\t...props\n} ) {\n\tconst createHandleOnChange = ( corner ) => ( next ) => {\n\t\tif ( ! onChange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Filter out CSS-unit-only values to prevent invalid styles.\n\t\tconst isNumeric = ! isNaN( parseFloat( next ) );\n\t\tconst nextValue = isNumeric ? next : undefined;\n\n\t\tonChange( {\n\t\t\t...values,\n\t\t\t[ corner ]: nextValue,\n\t\t} );\n\t};\n\n\tconst createHandleOnUnitChange = ( side ) => ( next ) => {\n\t\tconst newUnits = { ...selectedUnits };\n\t\tnewUnits[ side ] = next;\n\t\tsetSelectedUnits( newUnits );\n\t};\n\n\t// For shorthand style & backwards compatibility, handle flat string value.\n\tconst values =\n\t\ttypeof valuesProp !== 'string'\n\t\t\t? valuesProp\n\t\t\t: {\n\t\t\t\t\ttopLeft: valuesProp,\n\t\t\t\t\ttopRight: valuesProp,\n\t\t\t\t\tbottomLeft: valuesProp,\n\t\t\t\t\tbottomRight: valuesProp,\n\t\t\t };\n\n\t// Controls are wrapped in tooltips as visible labels aren't desired here.\n\t// Tooltip rendering also requires the UnitControl to be wrapped. See:\n\t// https://github.com/WordPress/gutenberg/pull/24966#issuecomment-685875026\n\treturn (\n\t\t
\n\t\t\t{ Object.entries( CORNERS ).map( ( [ corner, label ] ) => {\n\t\t\t\tconst [ parsedQuantity, parsedUnit ] =\n\t\t\t\t\tparseQuantityAndUnitFromRawValue( values[ corner ] );\n\n\t\t\t\tconst computedUnit = values[ corner ]\n\t\t\t\t\t? parsedUnit\n\t\t\t\t\t: selectedUnits[ corner ] || selectedUnits.flat;\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t);\n\t\t\t} ) }\n\t\t
\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst link = (\n\t\n\t\t\n\t\n);\n\nexport default link;\n","/**\n * WordPress dependencies\n */\nimport { Button, Tooltip } from '@wordpress/components';\nimport { link, linkOff } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport default function LinkedButton( { isLinked, ...props } ) {\n\tconst label = isLinked ? __( 'Unlink radii' ) : __( 'Link radii' );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tBaseControl,\n\tRangeControl,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport AllInputControl from './all-input-control';\nimport InputControls from './input-controls';\nimport LinkedButton from './linked-button';\nimport { useSettings } from '../use-settings';\nimport {\n\tgetAllValue,\n\tgetAllUnit,\n\thasDefinedValues,\n\thasMixedValues,\n} from './utils';\n\nconst DEFAULT_VALUES = {\n\ttopLeft: undefined,\n\ttopRight: undefined,\n\tbottomLeft: undefined,\n\tbottomRight: undefined,\n};\nconst MIN_BORDER_RADIUS_VALUE = 0;\nconst MAX_BORDER_RADIUS_VALUES = {\n\tpx: 100,\n\tem: 20,\n\trem: 20,\n};\n\n/**\n * Control to display border radius options.\n *\n * @param {Object} props Component props.\n * @param {Function} props.onChange Callback to handle onChange.\n * @param {Object} props.values Border radius values.\n *\n * @return {Element} Custom border radius control.\n */\nexport default function BorderRadiusControl( { onChange, values } ) {\n\tconst [ isLinked, setIsLinked ] = useState(\n\t\t! hasDefinedValues( values ) || ! hasMixedValues( values )\n\t);\n\n\t// Tracking selected units via internal state allows filtering of CSS unit\n\t// only values from being saved while maintaining preexisting unit selection\n\t// behaviour. Filtering CSS unit only values prevents invalid style values.\n\tconst [ selectedUnits, setSelectedUnits ] = useState( {\n\t\tflat:\n\t\t\ttypeof values === 'string'\n\t\t\t\t? parseQuantityAndUnitFromRawValue( values )[ 1 ]\n\t\t\t\t: undefined,\n\t\ttopLeft: parseQuantityAndUnitFromRawValue( values?.topLeft )[ 1 ],\n\t\ttopRight: parseQuantityAndUnitFromRawValue( values?.topRight )[ 1 ],\n\t\tbottomLeft: parseQuantityAndUnitFromRawValue( values?.bottomLeft )[ 1 ],\n\t\tbottomRight: parseQuantityAndUnitFromRawValue(\n\t\t\tvalues?.bottomRight\n\t\t)[ 1 ],\n\t} );\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ 'px', 'em', 'rem' ],\n\t} );\n\n\tconst unit = getAllUnit( selectedUnits );\n\tconst unitConfig = units && units.find( ( item ) => item.value === unit );\n\tconst step = unitConfig?.step || 1;\n\n\tconst [ allValue ] = parseQuantityAndUnitFromRawValue(\n\t\tgetAllValue( values )\n\t);\n\n\tconst toggleLinked = () => setIsLinked( ! isLinked );\n\n\tconst handleSliderChange = ( next ) => {\n\t\tonChange( next !== undefined ? `${ next }${ unit }` : undefined );\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{ __( 'Radius' ) }\n\t\t\t\n\t\t\t
\n\t\t\t\t{ isLinked ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst check = (\n\t\n\t\t\n\t\n);\n\nexport default check;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst shadow = (\n\t\n\t\t\n\t\n);\n\nexport default shadow;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalHStack as HStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n\tFlexItem,\n\tDropdown,\n\tComposite,\n} from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { shadow as shadowIcon, Icon, check } from '@wordpress/icons';\n\n/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nexport function ShadowPopoverContainer( { shadow, onShadowChange, settings } ) {\n\tconst shadows = useShadowPresets( settings );\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{ __( 'Drop shadow' ) }\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t onShadowChange( undefined ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Clear' ) }\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport function ShadowPresets( { presets, activeShadow, onSelect } ) {\n\treturn ! presets ? null : (\n\t\t\n\t\t\t{ presets.map( ( { name, slug, shadow } ) => (\n\t\t\t\t\n\t\t\t\t\t\tonSelect( shadow === activeShadow ? undefined : shadow )\n\t\t\t\t\t}\n\t\t\t\t\tshadow={ shadow }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport function ShadowIndicator( { type, label, isActive, onSelect, shadow } ) {\n\treturn (\n\t\t\n\t\t\t\t\t{ isActive && }\n\t\t\t\t\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport function ShadowPopover( { shadow, onShadowChange, settings } ) {\n\tconst popoverProps = {\n\t\tplacement: 'left-start',\n\t\toffset: 36,\n\t\tshift: true,\n\t};\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction renderShadowToggle() {\n\treturn ( { onToggle, isOpen } ) => {\n\t\tconst toggleProps = {\n\t\t\tonClick: onToggle,\n\t\t\tclassName: clsx( { 'is-open': isOpen } ),\n\t\t\t'aria-expanded': isOpen,\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ __( 'Drop shadow' ) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n}\n\nexport function useShadowPresets( settings ) {\n\treturn useMemo( () => {\n\t\tif ( ! settings?.shadow ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tconst defaultPresetsEnabled = settings?.shadow?.defaultPresets;\n\t\tconst {\n\t\t\tdefault: defaultShadows,\n\t\t\ttheme: themeShadows,\n\t\t\tcustom: customShadows,\n\t\t} = settings?.shadow?.presets ?? {};\n\t\tconst unsetShadow = {\n\t\t\tname: __( 'Unset' ),\n\t\t\tslug: 'unset',\n\t\t\tshadow: 'none',\n\t\t};\n\n\t\tconst shadowPresets = [\n\t\t\t...( ( defaultPresetsEnabled && defaultShadows ) || EMPTY_ARRAY ),\n\t\t\t...( themeShadows || EMPTY_ARRAY ),\n\t\t\t...( customShadows || EMPTY_ARRAY ),\n\t\t];\n\t\tif ( shadowPresets.length ) {\n\t\t\tshadowPresets.unshift( unsetShadow );\n\t\t}\n\n\t\treturn shadowPresets;\n\t}, [ settings ] );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalBorderBoxControl as BorderBoxControl,\n\t__experimentalHasSplitBorders as hasSplitBorders,\n\t__experimentalIsDefinedBorder as isDefinedBorder,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalItemGroup as ItemGroup,\n\tBaseControl,\n} from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BorderRadiusControl from '../border-radius-control';\nimport { useColorsPerOrigin } from './hooks';\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport { useBorderPanelLabel } from '../../hooks/border';\nimport { ShadowPopover, useShadowPresets } from './shadow-panel-components';\n\nexport function useHasBorderPanel( settings ) {\n\tconst controls = Object.values( useHasBorderPanelControls( settings ) );\n\treturn controls.some( Boolean );\n}\n\nexport function useHasBorderPanelControls( settings ) {\n\tconst controls = {\n\t\thasBorderColor: useHasBorderColorControl( settings ),\n\t\thasBorderRadius: useHasBorderRadiusControl( settings ),\n\t\thasBorderStyle: useHasBorderStyleControl( settings ),\n\t\thasBorderWidth: useHasBorderWidthControl( settings ),\n\t\thasShadow: useHasShadowControl( settings ),\n\t};\n\n\treturn controls;\n}\n\nfunction useHasBorderColorControl( settings ) {\n\treturn settings?.border?.color;\n}\n\nfunction useHasBorderRadiusControl( settings ) {\n\treturn settings?.border?.radius;\n}\n\nfunction useHasBorderStyleControl( settings ) {\n\treturn settings?.border?.style;\n}\n\nfunction useHasBorderWidthControl( settings ) {\n\treturn settings?.border?.width;\n}\n\nfunction useHasShadowControl( settings ) {\n\tconst shadows = useShadowPresets( settings );\n\treturn !! settings?.shadow && shadows.length > 0;\n}\n\nfunction BorderToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n\tlabel,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tradius: true,\n\tcolor: true,\n\twidth: true,\n\tshadow: true,\n};\n\nexport default function BorderPanel( {\n\tas: Wrapper = BorderToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tname,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst decodeValue = useCallback(\n\t\t( rawValue ) => getValueFromVariable( { settings }, '', rawValue ),\n\t\t[ settings ]\n\t);\n\tconst encodeColorValue = ( colorValue ) => {\n\t\tconst allColors = colors.flatMap(\n\t\t\t( { colors: originColors } ) => originColors\n\t\t);\n\t\tconst colorObject = allColors.find(\n\t\t\t( { color } ) => color === colorValue\n\t\t);\n\t\treturn colorObject\n\t\t\t? 'var:preset|color|' + colorObject.slug\n\t\t\t: colorValue;\n\t};\n\tconst border = useMemo( () => {\n\t\tif ( hasSplitBorders( inheritedValue?.border ) ) {\n\t\t\tconst borderValue = { ...inheritedValue?.border };\n\t\t\t[ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {\n\t\t\t\tborderValue[ side ] = {\n\t\t\t\t\t...borderValue[ side ],\n\t\t\t\t\tcolor: decodeValue( borderValue[ side ]?.color ),\n\t\t\t\t};\n\t\t\t} );\n\t\t\treturn borderValue;\n\t\t}\n\t\treturn {\n\t\t\t...inheritedValue?.border,\n\t\t\tcolor: inheritedValue?.border?.color\n\t\t\t\t? decodeValue( inheritedValue?.border?.color )\n\t\t\t\t: undefined,\n\t\t};\n\t}, [ inheritedValue?.border, decodeValue ] );\n\tconst setBorder = ( newBorder ) =>\n\t\tonChange( { ...value, border: newBorder } );\n\tconst showBorderColor = useHasBorderColorControl( settings );\n\tconst showBorderStyle = useHasBorderStyleControl( settings );\n\tconst showBorderWidth = useHasBorderWidthControl( settings );\n\n\t// Border radius.\n\tconst showBorderRadius = useHasBorderRadiusControl( settings );\n\tconst borderRadiusValues = decodeValue( border?.radius );\n\tconst setBorderRadius = ( newBorderRadius ) =>\n\t\tsetBorder( { ...border, radius: newBorderRadius } );\n\tconst hasBorderRadius = () => {\n\t\tconst borderValues = value?.border?.radius;\n\t\tif ( typeof borderValues === 'object' ) {\n\t\t\treturn Object.entries( borderValues ).some( Boolean );\n\t\t}\n\t\treturn !! borderValues;\n\t};\n\tconst hasShadowControl = useHasShadowControl( settings );\n\n\t// Shadow\n\tconst shadow = decodeValue( inheritedValue?.shadow );\n\tconst shadowPresets = settings?.shadow?.presets ?? {};\n\tconst mergedShadowPresets =\n\t\tshadowPresets.custom ??\n\t\tshadowPresets.theme ??\n\t\tshadowPresets.default ??\n\t\t[];\n\tconst setShadow = ( newValue ) => {\n\t\tconst slug = mergedShadowPresets?.find(\n\t\t\t( { shadow: shadowName } ) => shadowName === newValue\n\t\t)?.slug;\n\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'shadow' ],\n\t\t\t\tslug ? `var:preset|shadow|${ slug }` : newValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasShadow = () => !! value?.shadow;\n\tconst resetShadow = () => setShadow( undefined );\n\n\tconst resetBorder = () => {\n\t\tif ( hasBorderRadius() ) {\n\t\t\treturn setBorder( { radius: value?.border?.radius } );\n\t\t}\n\n\t\tsetBorder( undefined );\n\t};\n\n\tconst onBorderChange = ( newBorder ) => {\n\t\t// Ensure we have a visible border style when a border width or\n\t\t// color is being selected.\n\t\tconst updatedBorder = { ...newBorder };\n\n\t\tif ( hasSplitBorders( updatedBorder ) ) {\n\t\t\t[ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {\n\t\t\t\tif ( updatedBorder[ side ] ) {\n\t\t\t\t\tupdatedBorder[ side ] = {\n\t\t\t\t\t\t...updatedBorder[ side ],\n\t\t\t\t\t\tcolor: encodeColorValue( updatedBorder[ side ]?.color ),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} );\n\t\t} else if ( updatedBorder ) {\n\t\t\tupdatedBorder.color = encodeColorValue( updatedBorder.color );\n\t\t}\n\n\t\t// As radius is maintained separately to color, style, and width\n\t\t// maintain its value. Undefined values here will be cleaned when\n\t\t// global styles are saved.\n\t\tsetBorder( { radius: border?.radius, ...updatedBorder } );\n\t};\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tborder: undefined,\n\t\t\tshadow: undefined,\n\t\t};\n\t}, [] );\n\n\tconst showBorderByDefault =\n\t\tdefaultControls?.color || defaultControls?.width;\n\n\tconst hasBorderControl =\n\t\tshowBorderColor ||\n\t\tshowBorderStyle ||\n\t\tshowBorderWidth ||\n\t\tshowBorderRadius;\n\n\tconst label = useBorderPanelLabel( {\n\t\tblockName: name,\n\t\thasShadowControl,\n\t\thasBorderControl,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t{ ( showBorderWidth || showBorderColor ) && (\n\t\t\t\t isDefinedBorder( value?.border ) }\n\t\t\t\t\tlabel={ __( 'Border' ) }\n\t\t\t\t\tonDeselect={ () => resetBorder() }\n\t\t\t\t\tisShownByDefault={ showBorderByDefault }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showBorderRadius && (\n\t\t\t\t setBorderRadius( undefined ) }\n\t\t\t\t\tisShownByDefault={ defaultControls.radius }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetBorderRadius( newValue || undefined );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasShadowControl && (\n\t\t\t\t\n\t\t\t\t\t{ hasBorderControl ? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Shadow' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t) : null }\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, getBlockSupport } from '@wordpress/blocks';\nimport { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';\nimport { Platform, useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { getColorClassName } from '../components/colors';\nimport InspectorControls from '../components/inspector-controls';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\nimport {\n\tcleanEmptyObject,\n\tshouldSkipSerialization,\n\tuseBlockSettings,\n} from './utils';\nimport {\n\tuseHasBorderPanel,\n\tuseHasBorderPanelControls,\n\tBorderPanel as StylesBorderPanel,\n} from '../components/global-styles';\nimport { store as blockEditorStore } from '../store';\nimport { __ } from '@wordpress/i18n';\n\nexport const BORDER_SUPPORT_KEY = '__experimentalBorder';\nexport const SHADOW_SUPPORT_KEY = 'shadow';\n\nconst getColorByProperty = ( colors, property, value ) => {\n\tlet matchedColor;\n\n\tcolors.some( ( origin ) =>\n\t\torigin.colors.some( ( color ) => {\n\t\t\tif ( color[ property ] === value ) {\n\t\t\t\tmatchedColor = color;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} )\n\t);\n\n\treturn matchedColor;\n};\n\nexport const getMultiOriginColor = ( { colors, namedColor, customColor } ) => {\n\t// Search each origin (default, theme, or user) for matching color by name.\n\tif ( namedColor ) {\n\t\tconst colorObject = getColorByProperty( colors, 'slug', namedColor );\n\t\tif ( colorObject ) {\n\t\t\treturn colorObject;\n\t\t}\n\t}\n\n\t// Skip if no custom color or matching named color.\n\tif ( ! customColor ) {\n\t\treturn { color: undefined };\n\t}\n\n\t// Attempt to find color via custom color value or build new object.\n\tconst colorObject = getColorByProperty( colors, 'color', customColor );\n\treturn colorObject ? colorObject : { color: customColor };\n};\n\nfunction getColorSlugFromVariable( value ) {\n\tconst namedColor = /var:preset\\|color\\|(.+)/.exec( value );\n\tif ( namedColor && namedColor[ 1 ] ) {\n\t\treturn namedColor[ 1 ];\n\t}\n\treturn null;\n}\n\nfunction styleToAttributes( style ) {\n\tif ( hasSplitBorders( style?.border ) ) {\n\t\treturn {\n\t\t\tstyle,\n\t\t\tborderColor: undefined,\n\t\t};\n\t}\n\n\tconst borderColorValue = style?.border?.color;\n\tconst borderColorSlug = borderColorValue?.startsWith( 'var:preset|color|' )\n\t\t? borderColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.border = {\n\t\t...updatedStyle.border,\n\t\tcolor: borderColorSlug ? undefined : borderColorValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tborderColor: borderColorSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\tif ( hasSplitBorders( attributes.style?.border ) ) {\n\t\treturn attributes.style;\n\t}\n\treturn {\n\t\t...attributes.style,\n\t\tborder: {\n\t\t\t...attributes.style?.border,\n\t\t\tcolor: attributes.borderColor\n\t\t\t\t? 'var:preset|color|' + attributes.borderColor\n\t\t\t\t: attributes.style?.border?.color,\n\t\t},\n\t};\n}\n\nfunction BordersInspectorControl( { label, children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function BorderPanel( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasBorderPanel( settings );\n\tfunction selector( select ) {\n\t\tconst { style, borderColor } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, borderColor };\n\t}\n\tconst { style, borderColor } = useSelect( selector, [ clientId ] );\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( { style, borderColor } );\n\t}, [ style, borderColor ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = {\n\t\t...getBlockSupport( name, [\n\t\t\tBORDER_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t\t...getBlockSupport( name, [\n\t\t\tSHADOW_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Determine whether there is block support for shadow properties.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasShadowSupport( blockName ) {\n\treturn hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );\n}\n\nexport function useBorderPanelLabel( {\n\tblockName,\n\thasBorderControl,\n\thasShadowControl,\n} = {} ) {\n\tconst settings = useBlockSettings( blockName );\n\tconst controls = useHasBorderPanelControls( settings );\n\n\tif ( ! hasBorderControl && ! hasShadowControl && blockName ) {\n\t\thasBorderControl =\n\t\t\tcontrols?.hasBorderColor ||\n\t\t\tcontrols?.hasBorderStyle ||\n\t\t\tcontrols?.hasBorderWidth ||\n\t\t\tcontrols?.hasBorderRadius;\n\t\thasShadowControl = controls?.hasShadow;\n\t}\n\n\tif ( hasBorderControl && hasShadowControl ) {\n\t\treturn __( 'Border & Shadow' );\n\t}\n\n\tif ( hasShadowControl ) {\n\t\treturn __( 'Shadow' );\n\t}\n\n\treturn __( 'Border' );\n}\n\n/**\n * Returns a new style object where the specified border attribute has been\n * removed.\n *\n * @param {Object} style Styles from block attributes.\n * @param {string} attribute The border style attribute to clear.\n *\n * @return {Object} Style object with the specified attribute removed.\n */\nexport function removeBorderAttribute( style, attribute ) {\n\treturn cleanEmptyObject( {\n\t\t...style,\n\t\tborder: {\n\t\t\t...style?.border,\n\t\t\t[ attribute ]: undefined,\n\t\t},\n\t} );\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * `borderColor` if needed.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Updated block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBorderSupport( settings, 'color' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify default value if needed.\n\tif ( settings.attributes.borderColor ) {\n\t\treturn settings;\n\t}\n\n\t// Add new borderColor attribute to block settings.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tborderColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Override props assigned to save component to inject border color.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type definition.\n * @param {Object} attributes Block's attributes.\n *\n * @return {Object} Filtered props to apply to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasBorderSupport( blockNameOrType, 'color' ) ||\n\t\tshouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst borderClasses = getBorderClasses( attributes );\n\tconst newClassName = clsx( props.className, borderClasses );\n\n\t// If we are clearing the last of the previous classes in `className`\n\t// set it to `undefined` to avoid rendering empty DOM attributes.\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Generates a CSS class name consisting of all the applicable border color\n * classes given the current block attributes.\n *\n * @param {Object} attributes Block's attributes.\n *\n * @return {string} CSS class name.\n */\nexport function getBorderClasses( attributes ) {\n\tconst { borderColor, style } = attributes;\n\tconst borderColorClass = getColorClassName( 'border-color', borderColor );\n\n\treturn clsx( {\n\t\t'has-border-color': borderColor || style?.border?.color,\n\t\t[ borderColorClass ]: !! borderColorClass,\n\t} );\n}\n\nfunction useBlockProps( { name, borderColor, style } ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\n\tif (\n\t\t! hasBorderSupport( name, 'color' ) ||\n\t\tshouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst { color: borderColorValue } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: borderColor,\n\t} );\n\tconst { color: borderTopColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.top?.color ),\n\t} );\n\tconst { color: borderRightColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.right?.color ),\n\t} );\n\n\tconst { color: borderBottomColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),\n\t} );\n\tconst { color: borderLeftColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.left?.color ),\n\t} );\n\n\tconst extraStyles = {\n\t\tborderTopColor: borderTopColor || borderColorValue,\n\t\tborderRightColor: borderRightColor || borderColorValue,\n\t\tborderBottomColor: borderBottomColor || borderColorValue,\n\t\tborderLeftColor: borderLeftColor || borderColorValue,\n\t};\n\n\treturn addSaveProps(\n\t\t{ style: cleanEmptyObject( extraStyles ) || {} },\n\t\tname,\n\t\t{ borderColor, style }\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'borderColor', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBorderSupport( name, 'color' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/border/addAttributes',\n\taddAttributes\n);\n","/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { useSettings } from '../use-settings';\nimport { store as blockEditorStore } from '../../store';\n\nexport function __experimentalGetGradientClass( gradientSlug ) {\n\tif ( ! gradientSlug ) {\n\t\treturn undefined;\n\t}\n\treturn `has-${ gradientSlug }-gradient-background`;\n}\n\n/**\n * Retrieves the gradient value per slug.\n *\n * @param {Array} gradients Gradient Palette\n * @param {string} slug Gradient slug\n *\n * @return {string} Gradient value.\n */\nexport function getGradientValueBySlug( gradients, slug ) {\n\tconst gradient = gradients?.find( ( g ) => g.slug === slug );\n\treturn gradient && gradient.gradient;\n}\n\nexport function __experimentalGetGradientObjectByGradientValue(\n\tgradients,\n\tvalue\n) {\n\tconst gradient = gradients?.find( ( g ) => g.gradient === value );\n\treturn gradient;\n}\n\n/**\n * Retrieves the gradient slug per slug.\n *\n * @param {Array} gradients Gradient Palette\n * @param {string} value Gradient value\n * @return {string} Gradient slug.\n */\nexport function getGradientSlugByValue( gradients, value ) {\n\tconst gradient = __experimentalGetGradientObjectByGradientValue(\n\t\tgradients,\n\t\tvalue\n\t);\n\treturn gradient && gradient.slug;\n}\n\nexport function __experimentalUseGradient( {\n\tgradientAttribute = 'gradient',\n\tcustomGradientAttribute = 'customGradient',\n} = {} ) {\n\tconst { clientId } = useBlockEditContext();\n\n\tconst [\n\t\tuserGradientPalette,\n\t\tthemeGradientPalette,\n\t\tdefaultGradientPalette,\n\t] = useSettings(\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default'\n\t);\n\tconst allGradients = useMemo(\n\t\t() => [\n\t\t\t...( userGradientPalette || [] ),\n\t\t\t...( themeGradientPalette || [] ),\n\t\t\t...( defaultGradientPalette || [] ),\n\t\t],\n\t\t[ userGradientPalette, themeGradientPalette, defaultGradientPalette ]\n\t);\n\tconst { gradient, customGradient } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\t\t\tconst attributes = getBlockAttributes( clientId ) || {};\n\t\t\treturn {\n\t\t\t\tcustomGradient: attributes[ customGradientAttribute ],\n\t\t\t\tgradient: attributes[ gradientAttribute ],\n\t\t\t};\n\t\t},\n\t\t[ clientId, gradientAttribute, customGradientAttribute ]\n\t);\n\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst setGradient = useCallback(\n\t\t( newGradientValue ) => {\n\t\t\tconst slug = getGradientSlugByValue(\n\t\t\t\tallGradients,\n\t\t\t\tnewGradientValue\n\t\t\t);\n\t\t\tif ( slug ) {\n\t\t\t\tupdateBlockAttributes( clientId, {\n\t\t\t\t\t[ gradientAttribute ]: slug,\n\t\t\t\t\t[ customGradientAttribute ]: undefined,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateBlockAttributes( clientId, {\n\t\t\t\t[ gradientAttribute ]: undefined,\n\t\t\t\t[ customGradientAttribute ]: newGradientValue,\n\t\t\t} );\n\t\t},\n\t\t[ allGradients, clientId, updateBlockAttributes ]\n\t);\n\n\tconst gradientClass = __experimentalGetGradientClass( gradient );\n\tlet gradientValue;\n\tif ( gradient ) {\n\t\tgradientValue = getGradientValueBySlug( allGradients, gradient );\n\t} else {\n\t\tgradientValue = customGradient;\n\t}\n\treturn { gradientClass, gradientValue, setGradient };\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBaseControl,\n\t__experimentalVStack as VStack,\n\tColorPalette,\n\tGradientPicker,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\nimport { unlock } from '../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\nconst colorsAndGradientKeys = [\n\t'colors',\n\t'disableCustomColors',\n\t'gradients',\n\t'disableCustomGradients',\n];\n\nconst TAB_IDS = { color: 'color', gradient: 'gradient' };\n\nfunction ColorGradientControlInner( {\n\tcolors,\n\tgradients,\n\tdisableCustomColors,\n\tdisableCustomGradients,\n\t__experimentalIsRenderedInSidebar,\n\tclassName,\n\tlabel,\n\tonColorChange,\n\tonGradientChange,\n\tcolorValue,\n\tgradientValue,\n\tclearable,\n\tshowTitle = true,\n\tenableAlpha,\n\theadingLevel,\n} ) {\n\tconst canChooseAColor =\n\t\tonColorChange &&\n\t\t( ( colors && colors.length > 0 ) || ! disableCustomColors );\n\tconst canChooseAGradient =\n\t\tonGradientChange &&\n\t\t( ( gradients && gradients.length > 0 ) || ! disableCustomGradients );\n\n\tif ( ! canChooseAColor && ! canChooseAGradient ) {\n\t\treturn null;\n\t}\n\n\tconst tabPanels = {\n\t\t[ TAB_IDS.color ]: (\n\t\t\t {\n\t\t\t\t\t\t\t\tonColorChange( newColor );\n\t\t\t\t\t\t\t\tonGradientChange();\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: onColorChange\n\t\t\t\t}\n\t\t\t\t{ ...{ colors, disableCustomColors } }\n\t\t\t\t__experimentalIsRenderedInSidebar={\n\t\t\t\t\t__experimentalIsRenderedInSidebar\n\t\t\t\t}\n\t\t\t\tclearable={ clearable }\n\t\t\t\tenableAlpha={ enableAlpha }\n\t\t\t\theadingLevel={ headingLevel }\n\t\t\t/>\n\t\t),\n\t\t[ TAB_IDS.gradient ]: (\n\t\t\t {\n\t\t\t\t\t\t\t\tonGradientChange( newGradient );\n\t\t\t\t\t\t\t\tonColorChange();\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: onGradientChange\n\t\t\t\t}\n\t\t\t\t{ ...{ gradients, disableCustomGradients } }\n\t\t\t\t__experimentalIsRenderedInSidebar={\n\t\t\t\t\t__experimentalIsRenderedInSidebar\n\t\t\t\t}\n\t\t\t\tclearable={ clearable }\n\t\t\t\theadingLevel={ headingLevel }\n\t\t\t/>\n\t\t),\n\t};\n\n\tconst renderPanelType = ( type ) => (\n\t\t
\n\t\t\t{ tabPanels[ type ] }\n\t\t
\n\t);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{ showTitle && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ label }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t) }\n\t\t\t\t\t{ canChooseAColor && canChooseAGradient && (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Color' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Gradient' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ tabPanels.color }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ tabPanels.gradient }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! canChooseAGradient && renderPanelType( TAB_IDS.color ) }\n\t\t\t\t\t{ ! canChooseAColor && renderPanelType( TAB_IDS.gradient ) }\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n}\n\nfunction ColorGradientControlSelect( props ) {\n\tconst [ colors, gradients, customColors, customGradients ] = useSettings(\n\t\t'color.palette',\n\t\t'color.gradients',\n\t\t'color.custom',\n\t\t'color.customGradient'\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n\nfunction ColorGradientControl( props ) {\n\tif (\n\t\tcolorsAndGradientKeys.every( ( key ) => props.hasOwnProperty( key ) )\n\t) {\n\t\treturn ;\n\t}\n\treturn ;\n}\n\nexport default ColorGradientControl;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalHStack as HStack,\n\t__experimentalZStack as ZStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tColorIndicator,\n\tFlex,\n\tFlexItem,\n\tDropdown,\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useCallback } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ColorGradientControl from '../colors-gradients/control';\nimport { useColorsPerOrigin, useGradientsPerOrigin } from './hooks';\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport { unlock } from '../../lock-unlock';\n\nexport function useHasColorPanel( settings ) {\n\tconst hasTextPanel = useHasTextPanel( settings );\n\tconst hasBackgroundPanel = useHasBackgroundColorPanel( settings );\n\tconst hasLinkPanel = useHasLinkPanel( settings );\n\tconst hasHeadingPanel = useHasHeadingPanel( settings );\n\tconst hasButtonPanel = useHasButtonPanel( settings );\n\tconst hasCaptionPanel = useHasCaptionPanel( settings );\n\n\treturn (\n\t\thasTextPanel ||\n\t\thasBackgroundPanel ||\n\t\thasLinkPanel ||\n\t\thasHeadingPanel ||\n\t\thasButtonPanel ||\n\t\thasCaptionPanel\n\t);\n}\n\nexport function useHasTextPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.text &&\n\t\t( colors?.length > 0 || settings?.color?.custom )\n\t);\n}\n\nexport function useHasLinkPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.link &&\n\t\t( colors?.length > 0 || settings?.color?.custom )\n\t);\n}\n\nexport function useHasCaptionPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.caption &&\n\t\t( colors?.length > 0 || settings?.color?.custom )\n\t);\n}\n\nexport function useHasHeadingPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.heading &&\n\t\t( colors?.length > 0 ||\n\t\t\tsettings?.color?.custom ||\n\t\t\tgradients?.length > 0 ||\n\t\t\tsettings?.color?.customGradient )\n\t);\n}\n\nexport function useHasButtonPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.button &&\n\t\t( colors?.length > 0 ||\n\t\t\tsettings?.color?.custom ||\n\t\t\tgradients?.length > 0 ||\n\t\t\tsettings?.color?.customGradient )\n\t);\n}\n\nexport function useHasBackgroundColorPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.background &&\n\t\t( colors?.length > 0 ||\n\t\t\tsettings?.color?.custom ||\n\t\t\tgradients?.length > 0 ||\n\t\t\tsettings?.color?.customGradient )\n\t);\n}\n\nfunction ColorToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{ children }\n\t\t\t
\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\ttext: true,\n\tbackground: true,\n\tlink: true,\n\theading: true,\n\tbutton: true,\n\tcaption: true,\n};\n\nconst popoverProps = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n};\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nconst LabeledColorIndicators = ( { indicators, label } ) => (\n\t\n\t\t\n\t\t\t{ indicators.map( ( indicator, index ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t\t\n\t\t\t{ label }\n\t\t\n\t\n);\n\nfunction ColorPanelTab( {\n\tisGradient,\n\tinheritedValue,\n\tuserValue,\n\tsetValue,\n\tcolorGradientControlSettings,\n} ) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction ColorPanelDropdown( {\n\tlabel,\n\thasValue,\n\tresetValue,\n\tisShownByDefault,\n\tindicators,\n\ttabs,\n\tcolorGradientControlSettings,\n\tpanelId,\n} ) {\n\tconst currentTab = tabs.find( ( tab ) => tab.userValue !== undefined );\n\tconst { key: firstTabKey, ...firstTab } = tabs[ 0 ] ?? {};\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tconst toggleProps = {\n\t\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\t\tclassName: clsx(\n\t\t\t\t\t\t\t'block-editor-panel-color-gradient-settings__dropdown',\n\t\t\t\t\t\t\t{ 'is-open': isOpen }\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t\t'aria-label': sprintf(\n\t\t\t\t\t\t\t/* translators: %s is the type of color property, e.g., \"background\" */\n\t\t\t\t\t\t\t__( 'Color %s styles' ),\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\trenderContent={ () => (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{ tabs.length === 1 && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ tabs.length > 1 && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{ tab.label }\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t{ tabs.map( ( tab ) => {\n\t\t\t\t\t\t\t\t\t\tconst { key: tabKey, ...restTabProps } =\n\t\t\t\t\t\t\t\t\t\t\ttab;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) }\n\t\t\t/>\n\t\t\n\t);\n}\n\nexport default function ColorPanel( {\n\tas: Wrapper = ColorToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tchildren,\n} ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\tconst areCustomSolidsEnabled = settings?.color?.custom;\n\tconst areCustomGradientsEnabled = settings?.color?.customGradient;\n\tconst hasSolidColors = colors.length > 0 || areCustomSolidsEnabled;\n\tconst hasGradientColors = gradients.length > 0 || areCustomGradientsEnabled;\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\tconst encodeColorValue = ( colorValue ) => {\n\t\tconst allColors = colors.flatMap(\n\t\t\t( { colors: originColors } ) => originColors\n\t\t);\n\t\tconst colorObject = allColors.find(\n\t\t\t( { color } ) => color === colorValue\n\t\t);\n\t\treturn colorObject\n\t\t\t? 'var:preset|color|' + colorObject.slug\n\t\t\t: colorValue;\n\t};\n\tconst encodeGradientValue = ( gradientValue ) => {\n\t\tconst allGradients = gradients.flatMap(\n\t\t\t( { gradients: originGradients } ) => originGradients\n\t\t);\n\t\tconst gradientObject = allGradients.find(\n\t\t\t( { gradient } ) => gradient === gradientValue\n\t\t);\n\t\treturn gradientObject\n\t\t\t? 'var:preset|gradient|' + gradientObject.slug\n\t\t\t: gradientValue;\n\t};\n\n\t// BackgroundColor\n\tconst showBackgroundPanel = useHasBackgroundColorPanel( settings );\n\tconst backgroundColor = decodeValue( inheritedValue?.color?.background );\n\tconst userBackgroundColor = decodeValue( value?.color?.background );\n\tconst gradient = decodeValue( inheritedValue?.color?.gradient );\n\tconst userGradient = decodeValue( value?.color?.gradient );\n\tconst hasBackground = () => !! userBackgroundColor || !! userGradient;\n\tconst setBackgroundColor = ( newColor ) => {\n\t\tconst newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'background' ],\n\t\t\tencodeColorValue( newColor )\n\t\t);\n\t\tnewValue.color.gradient = undefined;\n\t\tonChange( newValue );\n\t};\n\tconst setGradient = ( newGradient ) => {\n\t\tconst newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'gradient' ],\n\t\t\tencodeGradientValue( newGradient )\n\t\t);\n\t\tnewValue.color.background = undefined;\n\t\tonChange( newValue );\n\t};\n\tconst resetBackground = () => {\n\t\tconst newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'background' ],\n\t\t\tundefined\n\t\t);\n\t\tnewValue.color.gradient = undefined;\n\t\tonChange( newValue );\n\t};\n\n\t// Links\n\tconst showLinkPanel = useHasLinkPanel( settings );\n\tconst linkColor = decodeValue(\n\t\tinheritedValue?.elements?.link?.color?.text\n\t);\n\tconst userLinkColor = decodeValue( value?.elements?.link?.color?.text );\n\tconst setLinkColor = ( newColor ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', 'link', 'color', 'text' ],\n\t\t\t\tencodeColorValue( newColor )\n\t\t\t)\n\t\t);\n\t};\n\tconst hoverLinkColor = decodeValue(\n\t\tinheritedValue?.elements?.link?.[ ':hover' ]?.color?.text\n\t);\n\tconst userHoverLinkColor = decodeValue(\n\t\tvalue?.elements?.link?.[ ':hover' ]?.color?.text\n\t);\n\tconst setHoverLinkColor = ( newColor ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', 'link', ':hover', 'color', 'text' ],\n\t\t\t\tencodeColorValue( newColor )\n\t\t\t)\n\t\t);\n\t};\n\tconst hasLink = () => !! userLinkColor || !! userHoverLinkColor;\n\tconst resetLink = () => {\n\t\tlet newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'elements', 'link', ':hover', 'color', 'text' ],\n\t\t\tundefined\n\t\t);\n\t\tnewValue = setImmutably(\n\t\t\tnewValue,\n\t\t\t[ 'elements', 'link', 'color', 'text' ],\n\t\t\tundefined\n\t\t);\n\t\tonChange( newValue );\n\t};\n\n\t// Text Color\n\tconst showTextPanel = useHasTextPanel( settings );\n\tconst textColor = decodeValue( inheritedValue?.color?.text );\n\tconst userTextColor = decodeValue( value?.color?.text );\n\tconst hasTextColor = () => !! userTextColor;\n\tconst setTextColor = ( newColor ) => {\n\t\tlet changedObject = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'text' ],\n\t\t\tencodeColorValue( newColor )\n\t\t);\n\t\tif ( textColor === linkColor ) {\n\t\t\tchangedObject = setImmutably(\n\t\t\t\tchangedObject,\n\t\t\t\t[ 'elements', 'link', 'color', 'text' ],\n\t\t\t\tencodeColorValue( newColor )\n\t\t\t);\n\t\t}\n\n\t\tonChange( changedObject );\n\t};\n\tconst resetTextColor = () => setTextColor( undefined );\n\n\t// Elements\n\tconst elements = [\n\t\t{\n\t\t\tname: 'caption',\n\t\t\tlabel: __( 'Captions' ),\n\t\t\tshowPanel: useHasCaptionPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'button',\n\t\t\tlabel: __( 'Button' ),\n\t\t\tshowPanel: useHasButtonPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'heading',\n\t\t\tlabel: __( 'Heading' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h1',\n\t\t\tlabel: __( 'H1' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h2',\n\t\t\tlabel: __( 'H2' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h3',\n\t\t\tlabel: __( 'H3' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h4',\n\t\t\tlabel: __( 'H4' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h5',\n\t\t\tlabel: __( 'H5' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h6',\n\t\t\tlabel: __( 'H6' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t];\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tcolor: undefined,\n\t\t\telements: {\n\t\t\t\t...previousValue?.elements,\n\t\t\t\tlink: {\n\t\t\t\t\t...previousValue?.elements?.link,\n\t\t\t\t\tcolor: undefined,\n\t\t\t\t\t':hover': {\n\t\t\t\t\t\tcolor: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...elements.reduce( ( acc, element ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t[ element.name ]: {\n\t\t\t\t\t\t\t...previousValue?.elements?.[ element.name ],\n\t\t\t\t\t\t\tcolor: undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}, {} ),\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\tconst items = [\n\t\tshowTextPanel && {\n\t\t\tkey: 'text',\n\t\t\tlabel: __( 'Text' ),\n\t\t\thasValue: hasTextColor,\n\t\t\tresetValue: resetTextColor,\n\t\t\tisShownByDefault: defaultControls.text,\n\t\t\tindicators: [ textColor ],\n\t\t\ttabs: [\n\t\t\t\t{\n\t\t\t\t\tkey: 'text',\n\t\t\t\t\tlabel: __( 'Text' ),\n\t\t\t\t\tinheritedValue: textColor,\n\t\t\t\t\tsetValue: setTextColor,\n\t\t\t\t\tuserValue: userTextColor,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tshowBackgroundPanel && {\n\t\t\tkey: 'background',\n\t\t\tlabel: __( 'Background' ),\n\t\t\thasValue: hasBackground,\n\t\t\tresetValue: resetBackground,\n\t\t\tisShownByDefault: defaultControls.background,\n\t\t\tindicators: [ gradient ?? backgroundColor ],\n\t\t\ttabs: [\n\t\t\t\thasSolidColors && {\n\t\t\t\t\tkey: 'background',\n\t\t\t\t\tlabel: __( 'Color' ),\n\t\t\t\t\tinheritedValue: backgroundColor,\n\t\t\t\t\tsetValue: setBackgroundColor,\n\t\t\t\t\tuserValue: userBackgroundColor,\n\t\t\t\t},\n\t\t\t\thasGradientColors && {\n\t\t\t\t\tkey: 'gradient',\n\t\t\t\t\tlabel: __( 'Gradient' ),\n\t\t\t\t\tinheritedValue: gradient,\n\t\t\t\t\tsetValue: setGradient,\n\t\t\t\t\tuserValue: userGradient,\n\t\t\t\t\tisGradient: true,\n\t\t\t\t},\n\t\t\t].filter( Boolean ),\n\t\t},\n\t\tshowLinkPanel && {\n\t\t\tkey: 'link',\n\t\t\tlabel: __( 'Link' ),\n\t\t\thasValue: hasLink,\n\t\t\tresetValue: resetLink,\n\t\t\tisShownByDefault: defaultControls.link,\n\t\t\tindicators: [ linkColor, hoverLinkColor ],\n\t\t\ttabs: [\n\t\t\t\t{\n\t\t\t\t\tkey: 'link',\n\t\t\t\t\tlabel: __( 'Default' ),\n\t\t\t\t\tinheritedValue: linkColor,\n\t\t\t\t\tsetValue: setLinkColor,\n\t\t\t\t\tuserValue: userLinkColor,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: 'hover',\n\t\t\t\t\tlabel: __( 'Hover' ),\n\t\t\t\t\tinheritedValue: hoverLinkColor,\n\t\t\t\t\tsetValue: setHoverLinkColor,\n\t\t\t\t\tuserValue: userHoverLinkColor,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t].filter( Boolean );\n\n\telements.forEach( ( { name, label, showPanel } ) => {\n\t\tif ( ! showPanel ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementBackgroundColor = decodeValue(\n\t\t\tinheritedValue?.elements?.[ name ]?.color?.background\n\t\t);\n\t\tconst elementGradient = decodeValue(\n\t\t\tinheritedValue?.elements?.[ name ]?.color?.gradient\n\t\t);\n\t\tconst elementTextColor = decodeValue(\n\t\t\tinheritedValue?.elements?.[ name ]?.color?.text\n\t\t);\n\t\tconst elementBackgroundUserColor = decodeValue(\n\t\t\tvalue?.elements?.[ name ]?.color?.background\n\t\t);\n\t\tconst elementGradientUserColor = decodeValue(\n\t\t\tvalue?.elements?.[ name ]?.color?.gradient\n\t\t);\n\t\tconst elementTextUserColor = decodeValue(\n\t\t\tvalue?.elements?.[ name ]?.color?.text\n\t\t);\n\t\tconst hasElement = () =>\n\t\t\t!! (\n\t\t\t\telementTextUserColor ||\n\t\t\t\telementBackgroundUserColor ||\n\t\t\t\telementGradientUserColor\n\t\t\t);\n\t\tconst resetElement = () => {\n\t\t\tconst newValue = setImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', name, 'color', 'background' ],\n\t\t\t\tundefined\n\t\t\t);\n\t\t\tnewValue.elements[ name ].color.gradient = undefined;\n\t\t\tnewValue.elements[ name ].color.text = undefined;\n\t\t\tonChange( newValue );\n\t\t};\n\n\t\tconst setElementTextColor = ( newTextColor ) => {\n\t\t\tonChange(\n\t\t\t\tsetImmutably(\n\t\t\t\t\tvalue,\n\t\t\t\t\t[ 'elements', name, 'color', 'text' ],\n\t\t\t\t\tencodeColorValue( newTextColor )\n\t\t\t\t)\n\t\t\t);\n\t\t};\n\t\tconst setElementBackgroundColor = ( newBackgroundColor ) => {\n\t\t\tconst newValue = setImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', name, 'color', 'background' ],\n\t\t\t\tencodeColorValue( newBackgroundColor )\n\t\t\t);\n\t\t\tnewValue.elements[ name ].color.gradient = undefined;\n\t\t\tonChange( newValue );\n\t\t};\n\t\tconst setElementGradient = ( newGradient ) => {\n\t\t\tconst newValue = setImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', name, 'color', 'gradient' ],\n\t\t\t\tencodeGradientValue( newGradient )\n\t\t\t);\n\t\t\tnewValue.elements[ name ].color.background = undefined;\n\t\t\tonChange( newValue );\n\t\t};\n\t\tconst supportsTextColor = true;\n\t\t// Background color is not supported for `caption`\n\t\t// as there isn't yet a way to set padding for the element.\n\t\tconst supportsBackground = name !== 'caption';\n\n\t\titems.push( {\n\t\t\tkey: name,\n\t\t\tlabel,\n\t\t\thasValue: hasElement,\n\t\t\tresetValue: resetElement,\n\t\t\tisShownByDefault: defaultControls[ name ],\n\t\t\tindicators:\n\t\t\t\tsupportsTextColor && supportsBackground\n\t\t\t\t\t? [\n\t\t\t\t\t\t\telementTextColor,\n\t\t\t\t\t\t\telementGradient ?? elementBackgroundColor,\n\t\t\t\t\t ]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\tsupportsTextColor\n\t\t\t\t\t\t\t\t? elementTextColor\n\t\t\t\t\t\t\t\t: elementGradient ?? elementBackgroundColor,\n\t\t\t\t\t ],\n\t\t\ttabs: [\n\t\t\t\thasSolidColors &&\n\t\t\t\t\tsupportsTextColor && {\n\t\t\t\t\t\tkey: 'text',\n\t\t\t\t\t\tlabel: __( 'Text' ),\n\t\t\t\t\t\tinheritedValue: elementTextColor,\n\t\t\t\t\t\tsetValue: setElementTextColor,\n\t\t\t\t\t\tuserValue: elementTextUserColor,\n\t\t\t\t\t},\n\t\t\t\thasSolidColors &&\n\t\t\t\t\tsupportsBackground && {\n\t\t\t\t\t\tkey: 'background',\n\t\t\t\t\t\tlabel: __( 'Background' ),\n\t\t\t\t\t\tinheritedValue: elementBackgroundColor,\n\t\t\t\t\t\tsetValue: setElementBackgroundColor,\n\t\t\t\t\t\tuserValue: elementBackgroundUserColor,\n\t\t\t\t\t},\n\t\t\t\thasGradientColors &&\n\t\t\t\t\tsupportsBackground && {\n\t\t\t\t\t\tkey: 'gradient',\n\t\t\t\t\t\tlabel: __( 'Gradient' ),\n\t\t\t\t\t\tinheritedValue: elementGradient,\n\t\t\t\t\t\tsetValue: setElementGradient,\n\t\t\t\t\t\tuserValue: elementGradientUserColor,\n\t\t\t\t\t\tisGradient: true,\n\t\t\t\t\t},\n\t\t\t].filter( Boolean ),\n\t\t} );\n\t} );\n\n\treturn (\n\t\t\n\t\t\t{ items.map( ( item ) => {\n\t\t\t\tconst { key, ...restItem } = item;\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport a11yPlugin from 'colord/plugins/a11y';\nimport namesPlugin from 'colord/plugins/names';\nimport { colord, extend } from 'colord';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { Notice } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\nextend( [ namesPlugin, a11yPlugin ] );\n\nfunction ContrastChecker( {\n\tbackgroundColor,\n\tfallbackBackgroundColor,\n\tfallbackTextColor,\n\tfallbackLinkColor,\n\tfontSize, // Font size value in pixels.\n\tisLargeText,\n\ttextColor,\n\tlinkColor,\n\tenableAlphaChecker = false,\n} ) {\n\tconst currentBackgroundColor = backgroundColor || fallbackBackgroundColor;\n\n\t// Must have a background color.\n\tif ( ! currentBackgroundColor ) {\n\t\treturn null;\n\t}\n\n\tconst currentTextColor = textColor || fallbackTextColor;\n\tconst currentLinkColor = linkColor || fallbackLinkColor;\n\n\t// Must have at least one text color.\n\tif ( ! currentTextColor && ! currentLinkColor ) {\n\t\treturn null;\n\t}\n\n\tconst textColors = [\n\t\t{\n\t\t\tcolor: currentTextColor,\n\t\t\tdescription: __( 'text color' ),\n\t\t},\n\t\t{\n\t\t\tcolor: currentLinkColor,\n\t\t\tdescription: __( 'link color' ),\n\t\t},\n\t];\n\tconst colordBackgroundColor = colord( currentBackgroundColor );\n\tconst backgroundColorHasTransparency = colordBackgroundColor.alpha() < 1;\n\tconst backgroundColorBrightness = colordBackgroundColor.brightness();\n\tconst isReadableOptions = {\n\t\tlevel: 'AA',\n\t\tsize:\n\t\t\tisLargeText || ( isLargeText !== false && fontSize >= 24 )\n\t\t\t\t? 'large'\n\t\t\t\t: 'small',\n\t};\n\n\tlet message = '';\n\tlet speakMessage = '';\n\tfor ( const item of textColors ) {\n\t\t// If there is no color, go no further.\n\t\tif ( ! item.color ) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst colordTextColor = colord( item.color );\n\t\tconst isColordTextReadable = colordTextColor.isReadable(\n\t\t\tcolordBackgroundColor,\n\t\t\tisReadableOptions\n\t\t);\n\t\tconst textHasTransparency = colordTextColor.alpha() < 1;\n\n\t\t// If the contrast is not readable.\n\t\tif ( ! isColordTextReadable ) {\n\t\t\t// Don't show the message if the background or text is transparent.\n\t\t\tif ( backgroundColorHasTransparency || textHasTransparency ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tmessage =\n\t\t\t\tbackgroundColorBrightness < colordTextColor.brightness()\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// translators: %s is a type of text color, e.g., \"text color\" or \"link color\".\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'This color combination may be hard for people to read. Try using a darker background color and/or a brighter %s.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\titem.description\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// translators: %s is a type of text color, e.g., \"text color\" or \"link color\".\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'This color combination may be hard for people to read. Try using a brighter background color and/or a darker %s.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\titem.description\n\t\t\t\t\t );\n\t\t\tspeakMessage = __(\n\t\t\t\t'This color combination may be hard for people to read.'\n\t\t\t);\n\t\t\t// Break from the loop when we have a contrast warning.\n\t\t\t// These messages take priority over the transparency warning.\n\t\t\tbreak;\n\t\t}\n\n\t\t// If there is no contrast warning and the text is transparent,\n\t\t// show the transparent warning if alpha check is enabled.\n\t\tif ( textHasTransparency && enableAlphaChecker ) {\n\t\t\tmessage = __( 'Transparent text may be hard for people to read.' );\n\t\t\tspeakMessage = __(\n\t\t\t\t'Transparent text may be hard for people to read.'\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( ! message ) {\n\t\treturn null;\n\t}\n\n\t// Note: The `Notice` component can speak messages via its `spokenMessage`\n\t// prop, but the contrast checker requires granular control over when the\n\t// announcements are made. Notably, the message will be re-announced if a\n\t// new color combination is selected and the contrast is still insufficient.\n\tspeak( speakMessage );\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{ message }\n\t\t\t\n\t\t
\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/contrast-checker/README.md\n */\nexport default ContrastChecker;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useMemo } from '@wordpress/element';\nimport { observableMap } from '@wordpress/compose';\n\nexport const BlockRefs = createContext( { refsMap: observableMap() } );\n\nexport function BlockRefsProvider( { children } ) {\n\tconst value = useMemo( () => ( { refsMap: observableMap() } ), [] );\n\treturn (\n\t\t{ children }\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useContext, useState, useLayoutEffect } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { BlockRefs } from '../../provider/block-refs-provider';\n\n/** @typedef {import('@wordpress/element').RefCallback} RefCallback */\n/** @typedef {import('@wordpress/element').Ref} Ref */\n\n/**\n * Provides a ref to the BlockRefs context.\n *\n * @param {string} clientId The client ID of the element ref.\n *\n * @return {RefCallback} Ref callback.\n */\nexport function useBlockRefProvider( clientId ) {\n\tconst { refsMap } = useContext( BlockRefs );\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\trefsMap.set( clientId, element );\n\t\t\treturn () => refsMap.delete( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n\nfunction assignRef( ref, value ) {\n\tif ( typeof ref === 'function' ) {\n\t\tref( value );\n\t} else if ( ref ) {\n\t\tref.current = value;\n\t}\n}\n\n/**\n * Tracks the DOM element for the block identified by `clientId` and assigns it to the `ref`\n * whenever it changes.\n *\n * @param {string} clientId The client ID to track.\n * @param {Ref} ref The ref object/callback to assign to.\n */\nexport function useBlockElementRef( clientId, ref ) {\n\tconst { refsMap } = useContext( BlockRefs );\n\tuseLayoutEffect( () => {\n\t\tassignRef( ref, refsMap.get( clientId ) );\n\t\tconst unsubscribe = refsMap.subscribe( clientId, () =>\n\t\t\tassignRef( ref, refsMap.get( clientId ) )\n\t\t);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tassignRef( ref, null );\n\t\t};\n\t}, [ refsMap, clientId, ref ] );\n}\n\n/**\n * Return the element for a given client ID. Updates whenever the element\n * changes, becomes available, or disappears.\n *\n * @param {string} clientId The client ID to an element for.\n *\n * @return {Element|null} The block's wrapper element.\n */\nexport function useBlockElement( clientId ) {\n\tconst [ blockElement, setBlockElement ] = useState( null );\n\tuseBlockElementRef( clientId, setBlockElement );\n\treturn blockElement;\n}\n","/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport ContrastChecker from '../components/contrast-checker';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction getComputedStyle( node ) {\n\treturn node.ownerDocument.defaultView.getComputedStyle( node );\n}\n\nexport default function BlockColorContrastChecker( { clientId } ) {\n\tconst [ detectedBackgroundColor, setDetectedBackgroundColor ] = useState();\n\tconst [ detectedColor, setDetectedColor ] = useState();\n\tconst [ detectedLinkColor, setDetectedLinkColor ] = useState();\n\tconst blockEl = useBlockElement( clientId );\n\n\t// There are so many things that can change the color of a block\n\t// So we perform this check on every render.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => {\n\t\tif ( ! blockEl ) {\n\t\t\treturn;\n\t\t}\n\t\tsetDetectedColor( getComputedStyle( blockEl ).color );\n\n\t\tconst firstLinkElement = blockEl.querySelector( 'a' );\n\t\tif ( firstLinkElement && !! firstLinkElement.innerText ) {\n\t\t\tsetDetectedLinkColor( getComputedStyle( firstLinkElement ).color );\n\t\t}\n\n\t\tlet backgroundColorNode = blockEl;\n\t\tlet backgroundColor =\n\t\t\tgetComputedStyle( backgroundColorNode ).backgroundColor;\n\t\twhile (\n\t\t\tbackgroundColor === 'rgba(0, 0, 0, 0)' &&\n\t\t\tbackgroundColorNode.parentNode &&\n\t\t\tbackgroundColorNode.parentNode.nodeType ===\n\t\t\t\tbackgroundColorNode.parentNode.ELEMENT_NODE\n\t\t) {\n\t\t\tbackgroundColorNode = backgroundColorNode.parentNode;\n\t\t\tbackgroundColor =\n\t\t\t\tgetComputedStyle( backgroundColorNode ).backgroundColor;\n\t\t}\n\n\t\tsetDetectedBackgroundColor( backgroundColor );\n\t}, [ blockEl ] );\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useMemo, Platform, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetColorClassName,\n\tgetColorObjectByAttributeValues,\n} from '../components/colors';\nimport { __experimentalGetGradientClass } from '../components/gradients';\nimport {\n\tcleanEmptyObject,\n\ttransformStyles,\n\tshouldSkipSerialization,\n} from './utils';\nimport { getBackgroundImageClasses } from './background';\nimport { useSettings } from '../components/use-settings';\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tuseHasColorPanel,\n\tdefault as StylesColorPanel,\n} from '../components/global-styles/color-panel';\nimport BlockColorContrastChecker from './contrast-checker';\nimport { store as blockEditorStore } from '../store';\n\nexport const COLOR_SUPPORT_KEY = 'color';\n\nconst hasColorSupport = ( blockNameOrType ) => {\n\tconst colorSupport = getBlockSupport( blockNameOrType, COLOR_SUPPORT_KEY );\n\treturn (\n\t\tcolorSupport &&\n\t\t( colorSupport.link === true ||\n\t\t\tcolorSupport.gradient === true ||\n\t\t\tcolorSupport.background !== false ||\n\t\t\tcolorSupport.text !== false )\n\t);\n};\n\nconst hasLinkColorSupport = ( blockType ) => {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.link\n\t);\n};\n\nconst hasGradientSupport = ( blockNameOrType ) => {\n\tconst colorSupport = getBlockSupport( blockNameOrType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.gradients\n\t);\n};\n\nconst hasBackgroundColorSupport = ( blockType ) => {\n\tconst colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.background !== false;\n};\n\nconst hasTextColorSupport = ( blockType ) => {\n\tconst colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.text !== false;\n};\n\n/**\n * Filters registered block settings, extending attributes to include\n * `backgroundColor` and `textColor` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasColorSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings.attributes.backgroundColor ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tbackgroundColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\tif ( ! settings.attributes.textColor ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\ttextColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\tif ( hasGradientSupport( settings ) && ! settings.attributes.gradient ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tgradient: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject colors classnames.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasColorSupport( blockNameOrType ) ||\n\t\tshouldSkipSerialization( blockNameOrType, COLOR_SUPPORT_KEY )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst hasGradient = hasGradientSupport( blockNameOrType );\n\n\t// I'd have preferred to avoid the \"style\" attribute usage here\n\tconst { backgroundColor, textColor, gradient, style } = attributes;\n\n\tconst shouldSerialize = ( feature ) =>\n\t\t! shouldSkipSerialization(\n\t\t\tblockNameOrType,\n\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\tfeature\n\t\t);\n\n\t// Primary color classes must come before the `has-text-color`,\n\t// `has-background` and `has-link-color` classes to maintain backwards\n\t// compatibility and avoid block invalidations.\n\tconst textClass = shouldSerialize( 'text' )\n\t\t? getColorClassName( 'color', textColor )\n\t\t: undefined;\n\n\tconst gradientClass = shouldSerialize( 'gradients' )\n\t\t? __experimentalGetGradientClass( gradient )\n\t\t: undefined;\n\n\tconst backgroundClass = shouldSerialize( 'background' )\n\t\t? getColorClassName( 'background-color', backgroundColor )\n\t\t: undefined;\n\n\tconst serializeHasBackground =\n\t\tshouldSerialize( 'background' ) || shouldSerialize( 'gradients' );\n\tconst hasBackground =\n\t\tbackgroundColor ||\n\t\tstyle?.color?.background ||\n\t\t( hasGradient && ( gradient || style?.color?.gradient ) );\n\n\tconst newClassName = clsx( props.className, textClass, gradientClass, {\n\t\t// Don't apply the background class if there's a custom gradient.\n\t\t[ backgroundClass ]:\n\t\t\t( ! hasGradient || ! style?.color?.gradient ) && !! backgroundClass,\n\t\t'has-text-color':\n\t\t\tshouldSerialize( 'text' ) && ( textColor || style?.color?.text ),\n\t\t'has-background': serializeHasBackground && hasBackground,\n\t\t'has-link-color':\n\t\t\tshouldSerialize( 'link' ) && style?.elements?.link?.color,\n\t} );\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\nfunction styleToAttributes( style ) {\n\tconst textColorValue = style?.color?.text;\n\tconst textColorSlug = textColorValue?.startsWith( 'var:preset|color|' )\n\t\t? textColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst backgroundColorValue = style?.color?.background;\n\tconst backgroundColorSlug = backgroundColorValue?.startsWith(\n\t\t'var:preset|color|'\n\t)\n\t\t? backgroundColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst gradientValue = style?.color?.gradient;\n\tconst gradientSlug = gradientValue?.startsWith( 'var:preset|gradient|' )\n\t\t? gradientValue.substring( 'var:preset|gradient|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.color = {\n\t\t...updatedStyle.color,\n\t\ttext: textColorSlug ? undefined : textColorValue,\n\t\tbackground: backgroundColorSlug ? undefined : backgroundColorValue,\n\t\tgradient: gradientSlug ? undefined : gradientValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\ttextColor: textColorSlug,\n\t\tbackgroundColor: backgroundColorSlug,\n\t\tgradient: gradientSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\tcolor: {\n\t\t\t...attributes.style?.color,\n\t\t\ttext: attributes.textColor\n\t\t\t\t? 'var:preset|color|' + attributes.textColor\n\t\t\t\t: attributes.style?.color?.text,\n\t\t\tbackground: attributes.backgroundColor\n\t\t\t\t? 'var:preset|color|' + attributes.backgroundColor\n\t\t\t\t: attributes.style?.color?.background,\n\t\t\tgradient: attributes.gradient\n\t\t\t\t? 'var:preset|gradient|' + attributes.gradient\n\t\t\t\t: attributes.style?.color?.gradient,\n\t\t},\n\t};\n}\n\nfunction ColorInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function ColorEdit( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasColorPanel( settings );\n\tfunction selector( select ) {\n\t\tconst { style, textColor, backgroundColor, gradient } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, textColor, backgroundColor, gradient };\n\t}\n\tconst { style, textColor, backgroundColor, gradient } = useSelect(\n\t\tselector,\n\t\t[ clientId ]\n\t);\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( {\n\t\t\tstyle,\n\t\t\ttextColor,\n\t\t\tbackgroundColor,\n\t\t\tgradient,\n\t\t} );\n\t}, [ style, textColor, backgroundColor, gradient ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tCOLOR_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst enableContrastChecking =\n\t\tPlatform.OS === 'web' &&\n\t\t! value?.color?.gradient &&\n\t\t( settings?.color?.text || settings?.color?.link ) &&\n\t\t// Contrast checking is enabled by default.\n\t\t// Deactivating it requires `enableContrastChecker` to have\n\t\t// an explicit value of `false`.\n\t\tfalse !==\n\t\t\tgetBlockSupport( name, [\n\t\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t\t'enableContrastChecker',\n\t\t\t] );\n\n\treturn (\n\t\t\n\t\t\t{ enableContrastChecking && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction useBlockProps( {\n\tname,\n\tbackgroundColor,\n\ttextColor,\n\tgradient,\n\tstyle,\n} ) {\n\tconst [ userPalette, themePalette, defaultPalette ] = useSettings(\n\t\t'color.palette.custom',\n\t\t'color.palette.theme',\n\t\t'color.palette.default'\n\t);\n\n\tconst colors = useMemo(\n\t\t() => [\n\t\t\t...( userPalette || [] ),\n\t\t\t...( themePalette || [] ),\n\t\t\t...( defaultPalette || [] ),\n\t\t],\n\t\t[ userPalette, themePalette, defaultPalette ]\n\t);\n\tif (\n\t\t! hasColorSupport( name ) ||\n\t\tshouldSkipSerialization( name, COLOR_SUPPORT_KEY )\n\t) {\n\t\treturn {};\n\t}\n\tconst extraStyles = {};\n\n\tif (\n\t\ttextColor &&\n\t\t! shouldSkipSerialization( name, COLOR_SUPPORT_KEY, 'text' )\n\t) {\n\t\textraStyles.color = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\ttextColor\n\t\t)?.color;\n\t}\n\tif (\n\t\tbackgroundColor &&\n\t\t! shouldSkipSerialization( name, COLOR_SUPPORT_KEY, 'background' )\n\t) {\n\t\textraStyles.backgroundColor = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\tbackgroundColor\n\t\t)?.color;\n\t}\n\n\tconst saveProps = addSaveProps( { style: extraStyles }, name, {\n\t\ttextColor,\n\t\tbackgroundColor,\n\t\tgradient,\n\t\tstyle,\n\t} );\n\n\tconst hasBackgroundValue =\n\t\tbackgroundColor ||\n\t\tstyle?.color?.background ||\n\t\tgradient ||\n\t\tstyle?.color?.gradient;\n\n\treturn {\n\t\t...saveProps,\n\t\tclassName: clsx(\n\t\t\tsaveProps.className,\n\t\t\t// Add background image classes in the editor, if not already handled by background color values.\n\t\t\t! hasBackgroundValue && getBackgroundImageClasses( style )\n\t\t),\n\t};\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'backgroundColor', 'textColor', 'gradient', 'style' ],\n\thasSupport: hasColorSupport,\n};\n\nconst MIGRATION_PATHS = {\n\tlinkColor: [ [ 'style', 'elements', 'link', 'color', 'text' ] ],\n\ttextColor: [ [ 'textColor' ], [ 'style', 'color', 'text' ] ],\n\tbackgroundColor: [\n\t\t[ 'backgroundColor' ],\n\t\t[ 'style', 'color', 'background' ],\n\t],\n\tgradient: [ [ 'gradient' ], [ 'style', 'color', 'gradient' ] ],\n};\n\nexport function addTransforms( result, source, index, results ) {\n\tconst destinationBlockType = result.name;\n\tconst activeSupports = {\n\t\tlinkColor: hasLinkColorSupport( destinationBlockType ),\n\t\ttextColor: hasTextColorSupport( destinationBlockType ),\n\t\tbackgroundColor: hasBackgroundColorSupport( destinationBlockType ),\n\t\tgradient: hasGradientSupport( destinationBlockType ),\n\t};\n\treturn transformStyles(\n\t\tactiveSupports,\n\t\tMIGRATION_PATHS,\n\t\tresult,\n\t\tsource,\n\t\tindex,\n\t\tresults\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/color/addAttribute',\n\taddAttributes\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/color/addTransforms',\n\taddTransforms\n);\n","/**\n * WordPress dependencies\n */\nimport { SelectControl } from '@wordpress/components';\nimport deprecated from '@wordpress/deprecated';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nexport default function FontFamilyControl( {\n\t/** Start opting into the larger default height that will become the default size in a future version. */\n\t__next40pxDefaultSize = false,\n\t/** Start opting into the new margin-free styles that will become the default in a future version. */\n\t__nextHasNoMarginBottom = false,\n\tvalue = '',\n\tonChange,\n\tfontFamilies,\n\t...props\n} ) {\n\tconst [ blockLevelFontFamilies ] = useSettings( 'typography.fontFamilies' );\n\tif ( ! fontFamilies ) {\n\t\tfontFamilies = blockLevelFontFamilies;\n\t}\n\n\tif ( ! fontFamilies || fontFamilies.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst options = [\n\t\t{ value: '', label: __( 'Default' ) },\n\t\t...fontFamilies.map( ( { fontFamily, name } ) => {\n\t\t\treturn {\n\t\t\t\tvalue: fontFamily,\n\t\t\t\tlabel: name || fontFamily,\n\t\t\t};\n\t\t} ),\n\t];\n\n\tif ( ! __nextHasNoMarginBottom ) {\n\t\tdeprecated(\n\t\t\t'Bottom margin styles for wp.blockEditor.FontFamilyControl',\n\t\t\t{\n\t\t\t\tsince: '6.7',\n\t\t\t\tversion: '7.0',\n\t\t\t\thint: 'Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version',\n\t\t\t}\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { CustomSelectControl } from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights';\n\n/**\n * Adjusts font appearance field label in case either font styles or weights\n * are disabled.\n *\n * @param {boolean} hasFontStyles Whether font styles are enabled and present.\n * @param {boolean} hasFontWeights Whether font weights are enabled and present.\n * @return {string} A label representing what font appearance is being edited.\n */\nconst getFontAppearanceLabel = ( hasFontStyles, hasFontWeights ) => {\n\tif ( ! hasFontStyles ) {\n\t\treturn __( 'Font weight' );\n\t}\n\n\tif ( ! hasFontWeights ) {\n\t\treturn __( 'Font style' );\n\t}\n\n\treturn __( 'Appearance' );\n};\n\n/**\n * Control to display font style and weight options of the active font.\n *\n * @param {Object} props Component props.\n *\n * @return {Element} Font appearance control.\n */\nexport default function FontAppearanceControl( props ) {\n\tconst {\n\t\t/** Start opting into the larger default height that will become the default size in a future version. */\n\t\t__next40pxDefaultSize = false,\n\t\tonChange,\n\t\thasFontStyles = true,\n\t\thasFontWeights = true,\n\t\tfontFamilyFaces,\n\t\tvalue: { fontStyle, fontWeight },\n\t\t...otherProps\n\t} = props;\n\tconst hasStylesOrWeights = hasFontStyles || hasFontWeights;\n\tconst label = getFontAppearanceLabel( hasFontStyles, hasFontWeights );\n\tconst defaultOption = {\n\t\tkey: 'default',\n\t\tname: __( 'Default' ),\n\t\tstyle: { fontStyle: undefined, fontWeight: undefined },\n\t};\n\tconst { fontStyles, fontWeights, combinedStyleAndWeightOptions } =\n\t\tgetFontStylesAndWeights( fontFamilyFaces );\n\n\t// Generates select options for combined font styles and weights.\n\tconst combineOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tif ( combinedStyleAndWeightOptions ) {\n\t\t\tcombinedOptions.push( ...combinedStyleAndWeightOptions );\n\t\t}\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font styles only.\n\tconst styleOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tfontStyles.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: value, fontWeight: undefined },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font weights only.\n\tconst weightOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tfontWeights.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: undefined, fontWeight: value },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Map font styles and weights to select options.\n\tconst selectOptions = useMemo( () => {\n\t\t// Display combined available font style and weight options.\n\t\tif ( hasFontStyles && hasFontWeights ) {\n\t\t\treturn combineOptions();\n\t\t}\n\n\t\t// Display only font style options or font weight options.\n\t\treturn hasFontStyles ? styleOptions() : weightOptions();\n\t}, [\n\t\tprops.options,\n\t\tfontStyles,\n\t\tfontWeights,\n\t\tcombinedStyleAndWeightOptions,\n\t] );\n\n\t// Find current selection by comparing font style & weight against options,\n\t// and fall back to the Default option if there is no matching option.\n\tconst currentSelection =\n\t\tselectOptions.find(\n\t\t\t( option ) =>\n\t\t\t\toption.style.fontStyle === fontStyle &&\n\t\t\t\toption.style.fontWeight === fontWeight\n\t\t) || selectOptions[ 0 ];\n\n\t// Adjusts screen reader description based on styles or weights.\n\tconst getDescribedBy = () => {\n\t\tif ( ! currentSelection ) {\n\t\t\treturn __( 'No selected font appearance' );\n\t\t}\n\n\t\tif ( ! hasFontStyles ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font weight.\n\t\t\t\t__( 'Currently selected font weight: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasFontWeights ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font style.\n\t\t\t\t__( 'Currently selected font style: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t// translators: %s: Currently selected font appearance.\n\t\t\t__( 'Currently selected font appearance: %s' ),\n\t\t\tcurrentSelection.name\n\t\t);\n\t};\n\n\treturn (\n\t\thasStylesOrWeights && (\n\t\t\t\n\t\t\t\t\tonChange( selectedItem.style )\n\t\t\t\t}\n\t\t\t/>\n\t\t)\n\t);\n}\n","export const BASE_DEFAULT_VALUE = 1.5;\nexport const STEP = 0.01;\n/**\n * A spin factor of 10 allows the spin controls to increment/decrement by 0.1.\n * e.g. A line-height value of 1.55 will increment to 1.65.\n */\nexport const SPIN_FACTOR = 10;\n/**\n * There are varying value types within LineHeightControl:\n *\n * {undefined} Initial value. No changes from the user.\n * {string} Input value. Value consumed/outputted by the input. Empty would be ''.\n * {number} Block attribute type. Input value needs to be converted for attribute setting.\n *\n * Note: If the value is undefined, the input requires it to be an empty string ('')\n * in order to be considered \"controlled\" by props (rather than internal state).\n */\nexport const RESET_VALUE = '';\n\n/**\n * Determines if the lineHeight attribute has been properly defined.\n *\n * @param {any} lineHeight The value to check.\n *\n * @return {boolean} Whether the lineHeight attribute is valid.\n */\nexport function isLineHeightDefined( lineHeight ) {\n\treturn lineHeight !== undefined && lineHeight !== RESET_VALUE;\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { __experimentalNumberControl as NumberControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBASE_DEFAULT_VALUE,\n\tRESET_VALUE,\n\tSTEP,\n\tSPIN_FACTOR,\n\tisLineHeightDefined,\n} from './utils';\n\nconst LineHeightControl = ( {\n\t/** Start opting into the larger default height that will become the default size in a future version. */\n\t__next40pxDefaultSize = false,\n\tvalue: lineHeight,\n\tonChange,\n\t__unstableInputWidth = '60px',\n\t...otherProps\n} ) => {\n\tconst isDefined = isLineHeightDefined( lineHeight );\n\n\tconst adjustNextValue = ( nextValue, wasTypedOrPasted ) => {\n\t\t// Set the next value without modification if lineHeight has been defined.\n\t\tif ( isDefined ) {\n\t\t\treturn nextValue;\n\t\t}\n\n\t\t/**\n\t\t * The following logic handles the initial spin up/down action\n\t\t * (from an undefined value state) so that the next values are better suited for\n\t\t * line-height rendering. For example, the first spin up should immediately\n\t\t * go to 1.6, rather than the normally expected 0.1.\n\t\t *\n\t\t * Spin up/down actions can be triggered by keydowns of the up/down arrow keys,\n\t\t * dragging the input or by clicking the spin buttons.\n\t\t */\n\t\tconst spin = STEP * SPIN_FACTOR;\n\t\tswitch ( `${ nextValue }` ) {\n\t\t\tcase `${ spin }`:\n\t\t\t\t// Increment by spin value.\n\t\t\t\treturn BASE_DEFAULT_VALUE + spin;\n\t\t\tcase '0': {\n\t\t\t\t// This means the user explicitly input '0', rather than using the\n\t\t\t\t// spin down action from an undefined value state.\n\t\t\t\tif ( wasTypedOrPasted ) {\n\t\t\t\t\treturn nextValue;\n\t\t\t\t}\n\t\t\t\t// Decrement by spin value.\n\t\t\t\treturn BASE_DEFAULT_VALUE - spin;\n\t\t\t}\n\t\t\tcase '':\n\t\t\t\treturn BASE_DEFAULT_VALUE;\n\t\t\tdefault:\n\t\t\t\treturn nextValue;\n\t\t}\n\t};\n\n\tconst stateReducer = ( state, action ) => {\n\t\t// Be careful when changing this — cross-browser behavior of the\n\t\t// `inputType` field in `input` events are inconsistent.\n\t\t// For example, Firefox emits an input event with inputType=\"insertReplacementText\"\n\t\t// on spin button clicks, while other browsers do not even emit an input event.\n\t\tconst wasTypedOrPasted = [ 'insertText', 'insertFromPaste' ].includes(\n\t\t\taction.payload.event.nativeEvent?.inputType\n\t\t);\n\t\tconst value = adjustNextValue( state.value, wasTypedOrPasted );\n\t\treturn { ...state, value };\n\t};\n\n\tconst value = isDefined ? lineHeight : RESET_VALUE;\n\n\tconst handleOnChange = ( nextValue, { event } ) => {\n\t\tif ( nextValue === '' ) {\n\t\t\tonChange();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.type === 'click' ) {\n\t\t\tonChange( adjustNextValue( `${ nextValue }`, false ) );\n\t\t\treturn;\n\t\t}\n\n\t\tonChange( `${ nextValue }` );\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t
\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/line-height-control/README.md\n */\nexport default LineHeightControl;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../../components/use-settings';\n\n/**\n * Control for letter-spacing.\n *\n * @param {Object} props Component props.\n * @param {boolean} props.__next40pxDefaultSize Start opting into the larger default height that will become the default size in a future version.\n * @param {string} props.value Currently selected letter-spacing.\n * @param {Function} props.onChange Handles change in letter-spacing selection.\n * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.\n *\n * @return {Element} Letter-spacing control.\n */\nexport default function LetterSpacingControl( {\n\t__next40pxDefaultSize = false,\n\tvalue,\n\tonChange,\n\t__unstableInputWidth = '60px',\n\t...otherProps\n} ) {\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ 'px', 'em', 'rem' ],\n\t\tdefaultValues: { px: 2, em: 0.2, rem: 0.2 },\n\t} );\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignLeft = (\n\t\n\t\t\n\t\n);\n\nexport default alignLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignCenter = (\n\t\n\t\t\n\t\n);\n\nexport default alignCenter;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignRight = (\n\t\n\t\t\n\t\n);\n\nexport default alignRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignJustify = (\n\t\n\t\t\n\t\n);\n\nexport default alignJustify;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\talignLeft,\n\talignCenter,\n\talignRight,\n\talignJustify,\n} from '@wordpress/icons';\nimport { useMemo } from '@wordpress/element';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst TEXT_ALIGNMENT_OPTIONS = [\n\t{\n\t\tlabel: __( 'Align text left' ),\n\t\tvalue: 'left',\n\t\ticon: alignLeft,\n\t},\n\t{\n\t\tlabel: __( 'Align text center' ),\n\t\tvalue: 'center',\n\t\ticon: alignCenter,\n\t},\n\t{\n\t\tlabel: __( 'Align text right' ),\n\t\tvalue: 'right',\n\t\ticon: alignRight,\n\t},\n\t{\n\t\tlabel: __( 'Justify text' ),\n\t\tvalue: 'justify',\n\t\ticon: alignJustify,\n\t},\n];\n\nconst DEFAULT_OPTIONS = [ 'left', 'center', 'right' ];\n\n/**\n * Control to facilitate text alignment selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.className Class name to add to the control.\n * @param {string} props.value Currently selected text alignment.\n * @param {Function} props.onChange Handles change in text alignment selection.\n * @param {string[]} props.options Array of text alignment options to display.\n *\n * @return {Element} Text alignment control.\n */\nexport default function TextAlignmentControl( {\n\tclassName,\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_OPTIONS,\n} ) {\n\tconst validOptions = useMemo(\n\t\t() =>\n\t\t\tTEXT_ALIGNMENT_OPTIONS.filter( ( option ) =>\n\t\t\t\toptions.includes( option.value )\n\t\t\t),\n\t\t[ options ]\n\t);\n\n\tif ( ! validOptions.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ validOptions.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst reset = (\n\t\n\t\t\n\t\n);\n\nexport default reset;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatUppercase = (\n\t\n\t\t\n\t\n);\n\nexport default formatUppercase;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatLowercase = (\n\t\n\t\t\n\t\n);\n\nexport default formatLowercase;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatCapitalize = (\n\t\n\t\t\n\t\n);\n\nexport default formatCapitalize;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\treset,\n\tformatCapitalize,\n\tformatLowercase,\n\tformatUppercase,\n} from '@wordpress/icons';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst TEXT_TRANSFORMS = [\n\t{\n\t\tlabel: __( 'None' ),\n\t\tvalue: 'none',\n\t\ticon: reset,\n\t},\n\t{\n\t\tlabel: __( 'Uppercase' ),\n\t\tvalue: 'uppercase',\n\t\ticon: formatUppercase,\n\t},\n\t{\n\t\tlabel: __( 'Lowercase' ),\n\t\tvalue: 'lowercase',\n\t\ticon: formatLowercase,\n\t},\n\t{\n\t\tlabel: __( 'Capitalize' ),\n\t\tvalue: 'capitalize',\n\t\ticon: formatCapitalize,\n\t},\n];\n\n/**\n * Control to facilitate text transform selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.className Class name to add to the control.\n * @param {string} props.value Currently selected text transform.\n * @param {Function} props.onChange Handles change in text transform selection.\n *\n * @return {Element} Text transform control.\n */\nexport default function TextTransformControl( { className, value, onChange } ) {\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ TEXT_TRANSFORMS.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatUnderline = (\n\t\n\t\t\n\t\n);\n\nexport default formatUnderline;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatStrikethrough = (\n\t\n\t\t\n\t\n);\n\nexport default formatStrikethrough;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { reset, formatStrikethrough, formatUnderline } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst TEXT_DECORATIONS = [\n\t{\n\t\tlabel: __( 'None' ),\n\t\tvalue: 'none',\n\t\ticon: reset,\n\t},\n\t{\n\t\tlabel: __( 'Underline' ),\n\t\tvalue: 'underline',\n\t\ticon: formatUnderline,\n\t},\n\t{\n\t\tlabel: __( 'Strikethrough' ),\n\t\tvalue: 'line-through',\n\t\ticon: formatStrikethrough,\n\t},\n];\n\n/**\n * Control to facilitate text decoration selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.value Currently selected text decoration.\n * @param {Function} props.onChange Handles change in text decoration selection.\n * @param {string} props.className Additional class name to apply.\n *\n * @return {Element} Text decoration control.\n */\nexport default function TextDecorationControl( {\n\tvalue,\n\tonChange,\n\tclassName,\n} ) {\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ TEXT_DECORATIONS.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst textHorizontal = (\n\t\n\t\t\n\t\n);\n\nexport default textHorizontal;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst textVertical = (\n\t\n\t\t\n\t\n);\n\nexport default textVertical;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { textHorizontal, textVertical } from '@wordpress/icons';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst WRITING_MODES = [\n\t{\n\t\tlabel: __( 'Horizontal' ),\n\t\tvalue: 'horizontal-tb',\n\t\ticon: textHorizontal,\n\t},\n\t{\n\t\tlabel: __( 'Vertical' ),\n\t\tvalue: isRTL() ? 'vertical-lr' : 'vertical-rl',\n\t\ticon: textVertical,\n\t},\n];\n\n/**\n * Control to facilitate writing mode selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.className Class name to add to the control.\n * @param {string} props.value Currently selected writing mode.\n * @param {Function} props.onChange Handles change in the writing mode selection.\n *\n * @return {Element} Writing Mode control.\n */\nexport default function WritingModeControl( { className, value, onChange } ) {\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ WRITING_MODES.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tFontSizePicker,\n\t__experimentalNumberControl as NumberControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useMemo, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport FontFamilyControl from '../font-family';\nimport FontAppearanceControl from '../font-appearance-control';\nimport LineHeightControl from '../line-height-control';\nimport LetterSpacingControl from '../letter-spacing-control';\nimport TextAlignmentControl from '../text-alignment-control';\nimport TextTransformControl from '../text-transform-control';\nimport TextDecorationControl from '../text-decoration-control';\nimport WritingModeControl from '../writing-mode-control';\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport {\n\tgetMergedFontFamiliesAndFontFamilyFaces,\n\tfindNearestStyleAndWeight,\n} from './typography-utils';\n\nconst MIN_TEXT_COLUMNS = 1;\nconst MAX_TEXT_COLUMNS = 6;\n\nexport function useHasTypographyPanel( settings ) {\n\tconst hasFontFamily = useHasFontFamilyControl( settings );\n\tconst hasLineHeight = useHasLineHeightControl( settings );\n\tconst hasFontAppearance = useHasAppearanceControl( settings );\n\tconst hasLetterSpacing = useHasLetterSpacingControl( settings );\n\tconst hasTextAlign = useHasTextAlignmentControl( settings );\n\tconst hasTextTransform = useHasTextTransformControl( settings );\n\tconst hasTextDecoration = useHasTextDecorationControl( settings );\n\tconst hasWritingMode = useHasWritingModeControl( settings );\n\tconst hasTextColumns = useHasTextColumnsControl( settings );\n\tconst hasFontSize = useHasFontSizeControl( settings );\n\n\treturn (\n\t\thasFontFamily ||\n\t\thasLineHeight ||\n\t\thasFontAppearance ||\n\t\thasLetterSpacing ||\n\t\thasTextAlign ||\n\t\thasTextTransform ||\n\t\thasFontSize ||\n\t\thasTextDecoration ||\n\t\thasWritingMode ||\n\t\thasTextColumns\n\t);\n}\n\nfunction useHasFontSizeControl( settings ) {\n\treturn (\n\t\t( settings?.typography?.defaultFontSizes !== false &&\n\t\t\tsettings?.typography?.fontSizes?.default?.length ) ||\n\t\tsettings?.typography?.fontSizes?.theme?.length ||\n\t\tsettings?.typography?.fontSizes?.custom?.length ||\n\t\tsettings?.typography?.customFontSize\n\t);\n}\n\nfunction useHasFontFamilyControl( settings ) {\n\treturn [ 'default', 'theme', 'custom' ].some(\n\t\t( key ) => settings?.typography?.fontFamilies?.[ key ]?.length\n\t);\n}\n\nfunction useHasLineHeightControl( settings ) {\n\treturn settings?.typography?.lineHeight;\n}\n\nfunction useHasAppearanceControl( settings ) {\n\treturn settings?.typography?.fontStyle || settings?.typography?.fontWeight;\n}\n\nfunction useAppearanceControlLabel( settings ) {\n\tif ( ! settings?.typography?.fontStyle ) {\n\t\treturn __( 'Font weight' );\n\t}\n\tif ( ! settings?.typography?.fontWeight ) {\n\t\treturn __( 'Font style' );\n\t}\n\treturn __( 'Appearance' );\n}\n\nfunction useHasLetterSpacingControl( settings ) {\n\treturn settings?.typography?.letterSpacing;\n}\n\nfunction useHasTextTransformControl( settings ) {\n\treturn settings?.typography?.textTransform;\n}\n\nfunction useHasTextAlignmentControl( settings ) {\n\treturn settings?.typography?.textAlign;\n}\n\nfunction useHasTextDecorationControl( settings ) {\n\treturn settings?.typography?.textDecoration;\n}\n\nfunction useHasWritingModeControl( settings ) {\n\treturn settings?.typography?.writingMode;\n}\n\nfunction useHasTextColumnsControl( settings ) {\n\treturn settings?.typography?.textColumns;\n}\n\n/**\n * Concatenate all the font sizes into a single list for the font size picker.\n *\n * @param {Object} settings The global styles settings.\n *\n * @return {Array} The merged font sizes.\n */\nfunction getMergedFontSizes( settings ) {\n\tconst fontSizes = settings?.typography?.fontSizes;\n\tconst defaultFontSizesEnabled = !! settings?.typography?.defaultFontSizes;\n\treturn [\n\t\t...( fontSizes?.custom ?? [] ),\n\t\t...( fontSizes?.theme ?? [] ),\n\t\t...( defaultFontSizesEnabled ? fontSizes?.default ?? [] : [] ),\n\t];\n}\n\nfunction TypographyToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tfontFamily: true,\n\tfontSize: true,\n\tfontAppearance: true,\n\tlineHeight: true,\n\tletterSpacing: true,\n\ttextAlign: true,\n\ttextTransform: true,\n\ttextDecoration: true,\n\twritingMode: true,\n\ttextColumns: true,\n};\n\nexport default function TypographyPanel( {\n\tas: Wrapper = TypographyToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\n\t// Font Family\n\tconst hasFontFamilyEnabled = useHasFontFamilyControl( settings );\n\tconst fontFamily = decodeValue( inheritedValue?.typography?.fontFamily );\n\tconst { fontFamilies, fontFamilyFaces } = useMemo( () => {\n\t\treturn getMergedFontFamiliesAndFontFamilyFaces( settings, fontFamily );\n\t}, [ settings, fontFamily ] );\n\n\tconst setFontFamily = ( newValue ) => {\n\t\tconst slug = fontFamilies?.find(\n\t\t\t( { fontFamily: f } ) => f === newValue\n\t\t)?.slug;\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'fontFamily' ],\n\t\t\t\tslug\n\t\t\t\t\t? `var:preset|font-family|${ slug }`\n\t\t\t\t\t: newValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasFontFamily = () => !! value?.typography?.fontFamily;\n\tconst resetFontFamily = () => setFontFamily( undefined );\n\n\t// Font Size\n\tconst hasFontSizeEnabled = useHasFontSizeControl( settings );\n\tconst disableCustomFontSizes = ! settings?.typography?.customFontSize;\n\tconst mergedFontSizes = getMergedFontSizes( settings );\n\n\tconst fontSize = decodeValue( inheritedValue?.typography?.fontSize );\n\tconst setFontSize = ( newValue, metadata ) => {\n\t\tconst actualValue = !! metadata?.slug\n\t\t\t? `var:preset|font-size|${ metadata?.slug }`\n\t\t\t: newValue;\n\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'fontSize' ],\n\t\t\t\tactualValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasFontSize = () => !! value?.typography?.fontSize;\n\tconst resetFontSize = () => setFontSize( undefined );\n\n\t// Appearance\n\tconst hasAppearanceControl = useHasAppearanceControl( settings );\n\tconst appearanceControlLabel = useAppearanceControlLabel( settings );\n\tconst hasFontStyles = settings?.typography?.fontStyle;\n\tconst hasFontWeights = settings?.typography?.fontWeight;\n\tconst fontStyle = decodeValue( inheritedValue?.typography?.fontStyle );\n\tconst fontWeight = decodeValue( inheritedValue?.typography?.fontWeight );\n\tconst { nearestFontStyle, nearestFontWeight } = findNearestStyleAndWeight(\n\t\tfontFamilyFaces,\n\t\tfontStyle,\n\t\tfontWeight\n\t);\n\tconst setFontAppearance = useCallback(\n\t\t( { fontStyle: newFontStyle, fontWeight: newFontWeight } ) => {\n\t\t\t// Only update the font style and weight if they have changed.\n\t\t\tif ( newFontStyle !== fontStyle || newFontWeight !== fontWeight ) {\n\t\t\t\tonChange( {\n\t\t\t\t\t...value,\n\t\t\t\t\ttypography: {\n\t\t\t\t\t\t...value?.typography,\n\t\t\t\t\t\tfontStyle: newFontStyle || undefined,\n\t\t\t\t\t\tfontWeight: newFontWeight || undefined,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ fontStyle, fontWeight, onChange, value ]\n\t);\n\tconst hasFontAppearance = () =>\n\t\t!! value?.typography?.fontStyle || !! value?.typography?.fontWeight;\n\tconst resetFontAppearance = useCallback( () => {\n\t\tsetFontAppearance( {} );\n\t}, [ setFontAppearance ] );\n\n\t// Check if previous font style and weight values are available in the new font family.\n\tuseEffect( () => {\n\t\tif ( nearestFontStyle && nearestFontWeight ) {\n\t\t\tsetFontAppearance( {\n\t\t\t\tfontStyle: nearestFontStyle,\n\t\t\t\tfontWeight: nearestFontWeight,\n\t\t\t} );\n\t\t} else {\n\t\t\t// Reset font appearance if there are no available styles or weights.\n\t\t\tresetFontAppearance();\n\t\t}\n\t}, [\n\t\tnearestFontStyle,\n\t\tnearestFontWeight,\n\t\tresetFontAppearance,\n\t\tsetFontAppearance,\n\t] );\n\n\t// Line Height\n\tconst hasLineHeightEnabled = useHasLineHeightControl( settings );\n\tconst lineHeight = decodeValue( inheritedValue?.typography?.lineHeight );\n\tconst setLineHeight = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'lineHeight' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasLineHeight = () => value?.typography?.lineHeight !== undefined;\n\tconst resetLineHeight = () => setLineHeight( undefined );\n\n\t// Letter Spacing\n\tconst hasLetterSpacingControl = useHasLetterSpacingControl( settings );\n\tconst letterSpacing = decodeValue(\n\t\tinheritedValue?.typography?.letterSpacing\n\t);\n\tconst setLetterSpacing = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'letterSpacing' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasLetterSpacing = () => !! value?.typography?.letterSpacing;\n\tconst resetLetterSpacing = () => setLetterSpacing( undefined );\n\n\t// Text Columns\n\tconst hasTextColumnsControl = useHasTextColumnsControl( settings );\n\tconst textColumns = decodeValue( inheritedValue?.typography?.textColumns );\n\tconst setTextColumns = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textColumns' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextColumns = () => !! value?.typography?.textColumns;\n\tconst resetTextColumns = () => setTextColumns( undefined );\n\n\t// Text Transform\n\tconst hasTextTransformControl = useHasTextTransformControl( settings );\n\tconst textTransform = decodeValue(\n\t\tinheritedValue?.typography?.textTransform\n\t);\n\tconst setTextTransform = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textTransform' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextTransform = () => !! value?.typography?.textTransform;\n\tconst resetTextTransform = () => setTextTransform( undefined );\n\n\t// Text Decoration\n\tconst hasTextDecorationControl = useHasTextDecorationControl( settings );\n\tconst textDecoration = decodeValue(\n\t\tinheritedValue?.typography?.textDecoration\n\t);\n\tconst setTextDecoration = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textDecoration' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextDecoration = () => !! value?.typography?.textDecoration;\n\tconst resetTextDecoration = () => setTextDecoration( undefined );\n\n\t// Text Orientation\n\tconst hasWritingModeControl = useHasWritingModeControl( settings );\n\tconst writingMode = decodeValue( inheritedValue?.typography?.writingMode );\n\tconst setWritingMode = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'writingMode' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasWritingMode = () => !! value?.typography?.writingMode;\n\tconst resetWritingMode = () => setWritingMode( undefined );\n\n\t// Text Alignment\n\tconst hasTextAlignmentControl = useHasTextAlignmentControl( settings );\n\n\tconst textAlign = decodeValue( inheritedValue?.typography?.textAlign );\n\tconst setTextAlign = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textAlign' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextAlign = () => !! value?.typography?.textAlign;\n\tconst resetTextAlign = () => setTextAlign( undefined );\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\ttypography: {},\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t{ hasFontFamilyEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasFontSizeEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasAppearanceControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasLineHeightEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasLetterSpacingControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextColumnsControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextDecorationControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasWritingModeControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextTransformControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextAlignmentControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport LineHeightControl from '../components/line-height-control';\nimport { cleanEmptyObject } from './utils';\nimport { useSettings } from '../components/use-settings';\n\nexport const LINE_HEIGHT_SUPPORT_KEY = 'typography.lineHeight';\n\n/**\n * Inspector control panel containing the line height related configuration\n *\n * @param {Object} props\n *\n * @return {Element} Line height edit element.\n */\nexport function LineHeightEdit( props ) {\n\tconst {\n\t\tattributes: { style },\n\t\tsetAttributes,\n\t} = props;\n\n\tconst onChange = ( newLineHeightValue ) => {\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\ttypography: {\n\t\t\t\t...style?.typography,\n\t\t\t\tlineHeight: newLineHeightValue,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( { style: cleanEmptyObject( newStyle ) } );\n\t};\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Custom hook that checks if line-height settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether setting is disabled.\n */\nexport function useIsLineHeightDisabled( { name: blockName } = {} ) {\n\tconst [ isEnabled ] = useSettings( 'typography.lineHeight' );\n\n\treturn (\n\t\t! isEnabled || ! hasBlockSupport( blockName, LINE_HEIGHT_SUPPORT_KEY )\n\t);\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"tokenList\"];","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport TokenList from '@wordpress/token-list';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { shouldSkipSerialization } from './utils';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\nimport { unlock } from '../lock-unlock';\n\nexport const FONT_FAMILY_SUPPORT_KEY = 'typography.__experimentalFontFamily';\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `fontFamily` attribute.\n *\n * @param {Object} settings Original block settings\n * @return {Object} Filtered block settings\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FONT_FAMILY_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify a default value if needed.\n\tif ( ! settings.attributes.fontFamily ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tfontFamily: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject font family.\n *\n * @param {Object} props Additional props applied to save element\n * @param {Object} blockType Block type\n * @param {Object} attributes Block attributes\n * @return {Object} Filtered props applied to save element\n */\nfunction addSaveProps( props, blockType, attributes ) {\n\tif ( ! hasBlockSupport( blockType, FONT_FAMILY_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization(\n\t\t\tblockType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'fontFamily'\n\t\t)\n\t) {\n\t\treturn props;\n\t}\n\n\tif ( ! attributes?.fontFamily ) {\n\t\treturn props;\n\t}\n\n\t// Use TokenList to dedupe classes.\n\tconst classes = new TokenList( props.className );\n\tclasses.add( `has-${ kebabCase( attributes?.fontFamily ) }-font-family` );\n\tconst newClassName = classes.value;\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\nfunction useBlockProps( { name, fontFamily } ) {\n\treturn addSaveProps( {}, name, { fontFamily } );\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fontFamily' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, FONT_FAMILY_SUPPORT_KEY );\n\t},\n};\n\n/**\n * Resets the font family block support attribute. This can be used when\n * disabling the font family support controls for a block via a progressive\n * discovery panel.\n *\n * @param {Object} props Block props.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetFontFamily( { setAttributes } ) {\n\tsetAttributes( { fontFamily: undefined } );\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/fontFamily/addAttribute',\n\taddAttributes\n);\n","/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Returns the font size object based on an array of named font sizes and the namedFontSize and customFontSize values.\n * \tIf namedFontSize is undefined or not found in fontSizes an object with just the size value based on customFontSize is returned.\n *\n * @param {Array} fontSizes Array of font size objects containing at least the \"name\" and \"size\" values as properties.\n * @param {?string} fontSizeAttribute Content of the font size attribute (slug).\n * @param {?number} customFontSizeAttribute Contents of the custom font size attribute (value).\n *\n * @return {?Object} If fontSizeAttribute is set and an equal slug is found in fontSizes it returns the font size object for that slug.\n * \t\t\t\t\t Otherwise, an object with just the size value based on customFontSize is returned.\n */\nexport const getFontSize = (\n\tfontSizes,\n\tfontSizeAttribute,\n\tcustomFontSizeAttribute\n) => {\n\tif ( fontSizeAttribute ) {\n\t\tconst fontSizeObject = fontSizes?.find(\n\t\t\t( { slug } ) => slug === fontSizeAttribute\n\t\t);\n\t\tif ( fontSizeObject ) {\n\t\t\treturn fontSizeObject;\n\t\t}\n\t}\n\treturn {\n\t\tsize: customFontSizeAttribute,\n\t};\n};\n\n/**\n * Returns the corresponding font size object for a given value.\n *\n * @param {Array} fontSizes Array of font size objects.\n * @param {number} value Font size value.\n *\n * @return {Object} Font size object.\n */\nexport function getFontSizeObjectByValue( fontSizes, value ) {\n\tconst fontSizeObject = fontSizes?.find( ( { size } ) => size === value );\n\tif ( fontSizeObject ) {\n\t\treturn fontSizeObject;\n\t}\n\n\treturn {\n\t\tsize: value,\n\t};\n}\n\n/**\n * Returns a class based on fontSizeName.\n *\n * @param {string} fontSizeSlug Slug of the fontSize.\n *\n * @return {string | undefined} String with the class corresponding to the fontSize passed.\n * The class is generated by appending 'has-' followed by fontSizeSlug in kebabCase and ending with '-font-size'.\n */\nexport function getFontSizeClass( fontSizeSlug ) {\n\tif ( ! fontSizeSlug ) {\n\t\treturn;\n\t}\n\n\treturn `has-${ kebabCase( fontSizeSlug ) }-font-size`;\n}\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport TokenList from '@wordpress/token-list';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetFontSize,\n\tgetFontSizeClass,\n\tgetFontSizeObjectByValue,\n\tFontSizePicker,\n} from '../components/font-sizes';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\nimport {\n\tcleanEmptyObject,\n\ttransformStyles,\n\tshouldSkipSerialization,\n} from './utils';\nimport { useSettings } from '../components/use-settings';\nimport { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';\n\nexport const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';\n\n/**\n * Filters registered block settings, extending attributes to include\n * `fontSize` and `fontWeight` attributes.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify a default value if needed.\n\tif ( ! settings.attributes.fontSize ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tfontSize: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject font size.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif ( ! hasBlockSupport( blockNameOrType, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization(\n\t\t\tblockNameOrType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'fontSize'\n\t\t)\n\t) {\n\t\treturn props;\n\t}\n\n\t// Use TokenList to dedupe classes.\n\tconst classes = new TokenList( props.className );\n\tclasses.add( getFontSizeClass( attributes.fontSize ) );\n\tconst newClassName = classes.value;\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Inspector control panel containing the font size related configuration\n *\n * @param {Object} props\n *\n * @return {Element} Font size edit element.\n */\nexport function FontSizeEdit( props ) {\n\tconst {\n\t\tattributes: { fontSize, style },\n\t\tsetAttributes,\n\t} = props;\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\n\tconst onChange = ( value ) => {\n\t\tconst fontSizeSlug = getFontSizeObjectByValue( fontSizes, value ).slug;\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\ttypography: {\n\t\t\t\t\t...style?.typography,\n\t\t\t\t\tfontSize: fontSizeSlug ? undefined : value,\n\t\t\t\t},\n\t\t\t} ),\n\t\t\tfontSize: fontSizeSlug,\n\t\t} );\n\t};\n\n\tconst fontSizeObject = getFontSize(\n\t\tfontSizes,\n\t\tfontSize,\n\t\tstyle?.typography?.fontSize\n\t);\n\n\tconst fontSizeValue =\n\t\tfontSizeObject?.size || style?.typography?.fontSize || fontSize;\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Custom hook that checks if font-size settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether setting is disabled.\n */\nexport function useIsFontSizeDisabled( { name: blockName } = {} ) {\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\tconst hasFontSizes = !! fontSizes?.length;\n\n\treturn (\n\t\t! hasBlockSupport( blockName, FONT_SIZE_SUPPORT_KEY ) || ! hasFontSizes\n\t);\n}\n\nfunction useBlockProps( { name, fontSize, style } ) {\n\tconst [ fontSizes, fluidTypographySettings, layoutSettings ] = useSettings(\n\t\t'typography.fontSizes',\n\t\t'typography.fluid',\n\t\t'layout'\n\t);\n\n\t/*\n\t * Only add inline styles if the block supports font sizes,\n\t * doesn't skip serialization of font sizes,\n\t * and has either a custom font size or a preset font size.\n\t */\n\tif (\n\t\t! hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY ) ||\n\t\tshouldSkipSerialization( name, TYPOGRAPHY_SUPPORT_KEY, 'fontSize' ) ||\n\t\t( ! fontSize && ! style?.typography?.fontSize )\n\t) {\n\t\treturn;\n\t}\n\n\tlet props;\n\n\tif ( style?.typography?.fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getTypographyFontSizeValue(\n\t\t\t\t\t{ size: style.typography.fontSize },\n\t\t\t\t\t{\n\t\t\t\t\t\ttypography: {\n\t\t\t\t\t\t\tfluid: fluidTypographySettings,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: layoutSettings,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getFontSize(\n\t\t\t\t\tfontSizes,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tstyle?.typography?.fontSize\n\t\t\t\t).size,\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( ! props ) {\n\t\treturn;\n\t}\n\n\treturn addSaveProps( props, name, { fontSize } );\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fontSize', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY );\n\t},\n};\n\nconst MIGRATION_PATHS = {\n\tfontSize: [ [ 'fontSize' ], [ 'style', 'typography', 'fontSize' ] ],\n};\n\nfunction addTransforms( result, source, index, results ) {\n\tconst destinationBlockType = result.name;\n\tconst activeSupports = {\n\t\tfontSize: hasBlockSupport(\n\t\t\tdestinationBlockType,\n\t\t\tFONT_SIZE_SUPPORT_KEY\n\t\t),\n\t};\n\treturn transformStyles(\n\t\tactiveSupports,\n\t\tMIGRATION_PATHS,\n\t\tresult,\n\t\tsource,\n\t\tindex,\n\t\tresults\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/font/addAttribute',\n\taddAttributes\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/font-size/addTransforms',\n\taddTransforms\n);\n","/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { ToolbarDropdownMenu, ToolbarGroup } from '@wordpress/components';\nimport { alignLeft, alignRight, alignCenter } from '@wordpress/icons';\n\nconst DEFAULT_ALIGNMENT_CONTROLS = [\n\t{\n\t\ticon: alignLeft,\n\t\ttitle: __( 'Align text left' ),\n\t\talign: 'left',\n\t},\n\t{\n\t\ticon: alignCenter,\n\t\ttitle: __( 'Align text center' ),\n\t\talign: 'center',\n\t},\n\t{\n\t\ticon: alignRight,\n\t\ttitle: __( 'Align text right' ),\n\t\talign: 'right',\n\t},\n];\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nfunction AlignmentUI( {\n\tvalue,\n\tonChange,\n\talignmentControls = DEFAULT_ALIGNMENT_CONTROLS,\n\tlabel = __( 'Align text' ),\n\tdescription = __( 'Change text alignment' ),\n\tisCollapsed = true,\n\tisToolbar,\n} ) {\n\tfunction applyOrUnset( align ) {\n\t\treturn () => onChange( value === align ? undefined : align );\n\t}\n\n\tconst activeAlignment = alignmentControls.find(\n\t\t( control ) => control.align === value\n\t);\n\n\tfunction setIcon() {\n\t\tif ( activeAlignment ) {\n\t\t\treturn activeAlignment.icon;\n\t\t}\n\t\treturn isRTL() ? alignRight : alignLeft;\n\t}\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst extraProps = isToolbar\n\t\t? { isCollapsed }\n\t\t: {\n\t\t\t\ttoggleProps: {\n\t\t\t\t\tdescription,\n\t\t\t\t},\n\t\t\t\tpopoverProps: POPOVER_PROPS,\n\t\t };\n\n\treturn (\n\t\t {\n\t\t\t\tconst { align } = control;\n\t\t\t\tconst isActive = value === align;\n\n\t\t\t\treturn {\n\t\t\t\t\t...control,\n\t\t\t\t\tisActive,\n\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\tonClick: applyOrUnset( align ),\n\t\t\t\t};\n\t\t\t} ) }\n\t\t\t{ ...extraProps }\n\t\t/>\n\t);\n}\n\nexport default AlignmentUI;\n","/**\n * Internal dependencies\n */\nimport AlignmentUI from './ui';\n\nconst AlignmentControl = ( props ) => {\n\treturn ;\n};\n\nconst AlignmentToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/alignment-control/README.md\n */\nexport { AlignmentControl, AlignmentToolbar };\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { alignLeft, alignRight, alignCenter } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { AlignmentControl, BlockControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport {\n\tcleanEmptyObject,\n\tshouldSkipSerialization,\n\tuseBlockSettings,\n} from './utils';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\n\nexport const TEXT_ALIGN_SUPPORT_KEY = 'typography.textAlign';\n\nconst TEXT_ALIGNMENT_OPTIONS = [\n\t{\n\t\ticon: alignLeft,\n\t\ttitle: __( 'Align text left' ),\n\t\talign: 'left',\n\t},\n\t{\n\t\ticon: alignCenter,\n\t\ttitle: __( 'Align text center' ),\n\t\talign: 'center',\n\t},\n\t{\n\t\ticon: alignRight,\n\t\ttitle: __( 'Align text right' ),\n\t\talign: 'right',\n\t},\n];\n\nconst VALID_TEXT_ALIGNMENTS = [ 'left', 'center', 'right' ];\nconst NO_TEXT_ALIGNMENTS = [];\n\n/**\n * Returns the valid text alignments.\n * Takes into consideration the text aligns supported by a block.\n * Exported just for testing purposes, not exported outside the module.\n *\n * @param {?boolean|string[]} blockTextAlign Text aligns supported by the block.\n *\n * @return {string[]} Valid text alignments.\n */\nexport function getValidTextAlignments( blockTextAlign ) {\n\tif ( Array.isArray( blockTextAlign ) ) {\n\t\treturn VALID_TEXT_ALIGNMENTS.filter( ( textAlign ) =>\n\t\t\tblockTextAlign.includes( textAlign )\n\t\t);\n\t}\n\n\treturn blockTextAlign === true ? VALID_TEXT_ALIGNMENTS : NO_TEXT_ALIGNMENTS;\n}\n\nfunction BlockEditTextAlignmentToolbarControlsPure( {\n\tstyle,\n\tname: blockName,\n\tsetAttributes,\n} ) {\n\tconst settings = useBlockSettings( blockName );\n\tconst hasTextAlignControl = settings?.typography?.textAlign;\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( ! hasTextAlignControl || blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst validTextAlignments = getValidTextAlignments(\n\t\tgetBlockSupport( blockName, TEXT_ALIGN_SUPPORT_KEY )\n\t);\n\tif ( ! validTextAlignments.length ) {\n\t\treturn null;\n\t}\n\n\tconst textAlignmentControls = TEXT_ALIGNMENT_OPTIONS.filter( ( control ) =>\n\t\tvalidTextAlignments.includes( control.align )\n\t);\n\n\tconst onChange = ( newTextAlignValue ) => {\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\ttypography: {\n\t\t\t\t...style?.typography,\n\t\t\t\ttextAlign: newTextAlignValue,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( { style: cleanEmptyObject( newStyle ) } );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tedit: BlockEditTextAlignmentToolbarControlsPure,\n\tuseBlockProps,\n\taddSaveProps: addAssignedTextAlign,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, TEXT_ALIGN_SUPPORT_KEY, false );\n\t},\n};\n\nfunction useBlockProps( { name, style } ) {\n\tif ( ! style?.typography?.textAlign ) {\n\t\treturn null;\n\t}\n\n\tconst validTextAlignments = getValidTextAlignments(\n\t\tgetBlockSupport( name, TEXT_ALIGN_SUPPORT_KEY )\n\t);\n\n\tif ( ! validTextAlignments.length ) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization( name, TYPOGRAPHY_SUPPORT_KEY, 'textAlign' )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst textAlign = style.typography.textAlign;\n\n\tconst className = clsx( {\n\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t} );\n\treturn { className };\n}\n\n/**\n * Override props assigned to save component to inject text alignment class\n * name if block supports it.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addAssignedTextAlign( props, blockType, attributes ) {\n\tif ( ! attributes?.style?.typography?.textAlign ) {\n\t\treturn props;\n\t}\n\n\tconst { textAlign } = attributes.style.typography;\n\tconst blockTextAlign = getBlockSupport( blockType, TEXT_ALIGN_SUPPORT_KEY );\n\tconst isTextAlignValid =\n\t\tgetValidTextAlignments( blockTextAlign ).includes( textAlign );\n\tif (\n\t\tisTextAlignValid &&\n\t\t! shouldSkipSerialization(\n\t\t\tblockType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'textAlign'\n\t\t)\n\t) {\n\t\tprops.className = clsx(\n\t\t\t`has-text-align-${ textAlign }`,\n\t\t\tprops.className\n\t\t);\n\t}\n\treturn props;\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useMemo, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tdefault as StylesTypographyPanel,\n\tuseHasTypographyPanel,\n} from '../components/global-styles/typography-panel';\n\nimport { LINE_HEIGHT_SUPPORT_KEY } from './line-height';\nimport { FONT_FAMILY_SUPPORT_KEY } from './font-family';\nimport { FONT_SIZE_SUPPORT_KEY } from './font-size';\nimport { TEXT_ALIGN_SUPPORT_KEY } from './text-align';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nfunction omit( object, keys ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )\n\t);\n}\n\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\nexport const TYPOGRAPHY_SUPPORT_KEY = 'typography';\nexport const TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_ALIGN_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n];\n\nfunction styleToAttributes( style ) {\n\tconst updatedStyle = { ...omit( style, [ 'fontFamily' ] ) };\n\tconst fontSizeValue = style?.typography?.fontSize;\n\tconst fontFamilyValue = style?.typography?.fontFamily;\n\tconst fontSizeSlug = fontSizeValue?.startsWith( 'var:preset|font-size|' )\n\t\t? fontSizeValue.substring( 'var:preset|font-size|'.length )\n\t\t: undefined;\n\tconst fontFamilySlug = fontFamilyValue?.startsWith(\n\t\t'var:preset|font-family|'\n\t)\n\t\t? fontFamilyValue.substring( 'var:preset|font-family|'.length )\n\t\t: undefined;\n\tupdatedStyle.typography = {\n\t\t...omit( updatedStyle.typography, [ 'fontFamily' ] ),\n\t\tfontSize: fontSizeSlug ? undefined : fontSizeValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tfontFamily: fontFamilySlug,\n\t\tfontSize: fontSizeSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\ttypography: {\n\t\t\t...attributes.style?.typography,\n\t\t\tfontFamily: attributes.fontFamily\n\t\t\t\t? 'var:preset|font-family|' + attributes.fontFamily\n\t\t\t\t: undefined,\n\t\t\tfontSize: attributes.fontSize\n\t\t\t\t? 'var:preset|font-size|' + attributes.fontSize\n\t\t\t\t: attributes.style?.typography?.fontSize,\n\t\t},\n\t};\n}\n\nfunction TypographyInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function TypographyPanel( { clientId, name, setAttributes, settings } ) {\n\tfunction selector( select ) {\n\t\tconst { style, fontFamily, fontSize } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, fontFamily, fontSize };\n\t}\n\tconst { style, fontFamily, fontSize } = useSelect( selector, [ clientId ] );\n\tconst isEnabled = useHasTypographyPanel( settings );\n\tconst value = useMemo(\n\t\t() => attributesToStyle( { style, fontFamily, fontSize } ),\n\t\t[ style, fontSize, fontFamily ]\n\t);\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t\n\t);\n}\n\nexport const hasTypographySupport = ( blockName ) => {\n\treturn TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>\n\t\thasBlockSupport( blockName, key )\n\t);\n};\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst settings = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default settings;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tIcon,\n\tRangeControl,\n\t__experimentalHStack as HStack,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\tCustomSelectControl,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { settings } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../../use-settings';\nimport { store as blockEditorStore } from '../../../store';\nimport {\n\tRANGE_CONTROL_MAX_SIZE,\n\tALL_SIDES,\n\tLABELS,\n\tgetSliderValueFromPreset,\n\tgetCustomValueFromPreset,\n\tgetPresetValueFromCustomValue,\n\tisValueSpacingPreset,\n} from '../utils';\n\nconst CUSTOM_VALUE_SETTINGS = {\n\tpx: { max: 300, steps: 1 },\n\t'%': { max: 100, steps: 1 },\n\tvw: { max: 100, steps: 1 },\n\tvh: { max: 100, steps: 1 },\n\tem: { max: 10, steps: 0.1 },\n\trm: { max: 10, steps: 0.1 },\n\tsvw: { max: 100, steps: 1 },\n\tlvw: { max: 100, steps: 1 },\n\tdvw: { max: 100, steps: 1 },\n\tsvh: { max: 100, steps: 1 },\n\tlvh: { max: 100, steps: 1 },\n\tdvh: { max: 100, steps: 1 },\n\tvi: { max: 100, steps: 1 },\n\tsvi: { max: 100, steps: 1 },\n\tlvi: { max: 100, steps: 1 },\n\tdvi: { max: 100, steps: 1 },\n\tvb: { max: 100, steps: 1 },\n\tsvb: { max: 100, steps: 1 },\n\tlvb: { max: 100, steps: 1 },\n\tdvb: { max: 100, steps: 1 },\n\tvmin: { max: 100, steps: 1 },\n\tsvmin: { max: 100, steps: 1 },\n\tlvmin: { max: 100, steps: 1 },\n\tdvmin: { max: 100, steps: 1 },\n\tvmax: { max: 100, steps: 1 },\n\tsvmax: { max: 100, steps: 1 },\n\tlvmax: { max: 100, steps: 1 },\n\tdvmax: { max: 100, steps: 1 },\n};\n\nexport default function SpacingInputControl( {\n\ticon,\n\tisMixed = false,\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel = true,\n\tside,\n\tspacingSizes,\n\ttype,\n\tvalue,\n} ) {\n\t// Treat value as a preset value if the passed in value matches the value of one of the spacingSizes.\n\tvalue = getPresetValueFromCustomValue( value, spacingSizes );\n\n\tlet selectListSizes = spacingSizes;\n\tconst showRangeControl = spacingSizes.length <= RANGE_CONTROL_MAX_SIZE;\n\n\tconst disableCustomSpacingSizes = useSelect( ( select ) => {\n\t\tconst editorSettings = select( blockEditorStore ).getSettings();\n\t\treturn editorSettings?.disableCustomSpacingSizes;\n\t} );\n\n\tconst [ showCustomValueControl, setShowCustomValueControl ] = useState(\n\t\t! disableCustomSpacingSizes &&\n\t\t\tvalue !== undefined &&\n\t\t\t! isValueSpacingPreset( value )\n\t);\n\n\tconst [ minValue, setMinValue ] = useState( minimumCustomValue );\n\n\tconst previousValue = usePrevious( value );\n\tif (\n\t\t!! value &&\n\t\tpreviousValue !== value &&\n\t\t! isValueSpacingPreset( value ) &&\n\t\tshowCustomValueControl !== true\n\t) {\n\t\tsetShowCustomValueControl( true );\n\t}\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ 'px', 'em', 'rem' ],\n\t} );\n\n\tlet currentValue = null;\n\n\tconst showCustomValueInSelectList =\n\t\t! showRangeControl &&\n\t\t! showCustomValueControl &&\n\t\tvalue !== undefined &&\n\t\t( ! isValueSpacingPreset( value ) ||\n\t\t\t( isValueSpacingPreset( value ) && isMixed ) );\n\n\tif ( showCustomValueInSelectList ) {\n\t\tselectListSizes = [\n\t\t\t...spacingSizes,\n\t\t\t{\n\t\t\t\tname: ! isMixed\n\t\t\t\t\t? // translators: A custom measurement, eg. a number followed by a unit like 12px.\n\t\t\t\t\t sprintf( __( 'Custom (%s)' ), value )\n\t\t\t\t\t: __( 'Mixed' ),\n\t\t\t\tslug: 'custom',\n\t\t\t\tsize: value,\n\t\t\t},\n\t\t];\n\t\tcurrentValue = selectListSizes.length - 1;\n\t} else if ( ! isMixed ) {\n\t\tcurrentValue = ! showCustomValueControl\n\t\t\t? getSliderValueFromPreset( value, spacingSizes )\n\t\t\t: getCustomValueFromPreset( value, spacingSizes );\n\t}\n\n\tconst selectedUnit =\n\t\tuseMemo(\n\t\t\t() => parseQuantityAndUnitFromRawValue( currentValue ),\n\t\t\t[ currentValue ]\n\t\t)[ 1 ] || units[ 0 ]?.value;\n\n\tconst setInitialValue = () => {\n\t\tif ( value === undefined ) {\n\t\t\tonChange( '0' );\n\t\t}\n\t};\n\n\tconst customTooltipContent = ( newValue ) =>\n\t\tvalue === undefined ? undefined : spacingSizes[ newValue ]?.name;\n\n\tconst customRangeValue = parseFloat( currentValue, 10 );\n\n\tconst getNewCustomValue = ( newSize ) => {\n\t\tconst isNumeric = ! isNaN( parseFloat( newSize ) );\n\t\tconst nextValue = isNumeric ? newSize : undefined;\n\t\treturn nextValue;\n\t};\n\n\tconst getNewPresetValue = ( newSize, controlType ) => {\n\t\tconst size = parseInt( newSize, 10 );\n\n\t\tif ( controlType === 'selectList' ) {\n\t\t\tif ( size === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif ( size === 1 ) {\n\t\t\t\treturn '0';\n\t\t\t}\n\t\t} else if ( size === 0 ) {\n\t\t\treturn '0';\n\t\t}\n\t\treturn `var:preset|spacing|${ spacingSizes[ newSize ]?.slug }`;\n\t};\n\n\tconst handleCustomValueSliderChange = ( next ) => {\n\t\tonChange( [ next, selectedUnit ].join( '' ) );\n\t};\n\n\tconst allPlaceholder = isMixed ? __( 'Mixed' ) : null;\n\n\tconst options = selectListSizes.map( ( size, index ) => ( {\n\t\tkey: index,\n\t\tname: size.name,\n\t} ) );\n\n\tconst marks = spacingSizes\n\t\t.slice( 1, spacingSizes.length - 1 )\n\t\t.map( ( _newValue, index ) => ( {\n\t\t\tvalue: index + 1,\n\t\t\tlabel: undefined,\n\t\t} ) );\n\n\tconst sideLabel =\n\t\tALL_SIDES.includes( side ) && showSideInLabel ? LABELS[ side ] : '';\n\tconst typeLabel = showSideInLabel ? type?.toLowerCase() : type;\n\n\tconst ariaLabel = sprintf(\n\t\t// translators: 1: The side of the block being modified (top, bottom, left, All sides etc.). 2. Type of spacing being modified (Padding, margin, etc)\n\t\t__( '%1$s %2$s' ),\n\t\tsideLabel,\n\t\ttypeLabel\n\t).trim();\n\n\treturn (\n\t\t\n\t\t\t{ icon && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showCustomValueControl && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\tonChange( getNewCustomValue( newSize ) )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ currentValue }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tmin={ minValue }\n\t\t\t\t\t\tplaceholder={ allPlaceholder }\n\t\t\t\t\t\tdisableUnits={ isMixed }\n\t\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\tclassName=\"spacing-sizes-control__custom-value-input\"\n\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\tonDragStart={ () => {\n\t\t\t\t\t\t\tif ( value?.charAt( 0 ) === '-' ) {\n\t\t\t\t\t\t\t\tsetMinValue( 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonDrag={ () => {\n\t\t\t\t\t\t\tif ( value?.charAt( 0 ) === '-' ) {\n\t\t\t\t\t\t\t\tsetMinValue( 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonDragEnd={ () => {\n\t\t\t\t\t\t\tsetMinValue( minimumCustomValue );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showRangeControl && ! showCustomValueControl && (\n\t\t\t\t\n\t\t\t\t\t\tonChange( getNewPresetValue( newSize ) )\n\t\t\t\t\t}\n\t\t\t\t\tonMouseDown={ ( event ) => {\n\t\t\t\t\t\t// If mouse down is near start of range set initial value to 0, which\n\t\t\t\t\t\t// prevents the user have to drag right then left to get 0 setting.\n\t\t\t\t\t\tif ( event?.nativeEvent?.offsetX < 35 ) {\n\t\t\t\t\t\t\tsetInitialValue();\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\twithInputField={ false }\n\t\t\t\t\taria-valuenow={ currentValue }\n\t\t\t\t\taria-valuetext={ spacingSizes[ currentValue ]?.name }\n\t\t\t\t\trenderTooltipContent={ customTooltipContent }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tmax={ spacingSizes.length - 1 }\n\t\t\t\t\tmarks={ marks }\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tonFocus={ onMouseOver }\n\t\t\t\t\tonBlur={ onMouseOut }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! showRangeControl && ! showCustomValueControl && (\n\t\t\t\t option.key === currentValue\n\t\t\t\t\t\t) || ''\n\t\t\t\t\t}\n\t\t\t\t\tonChange={ ( selection ) => {\n\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\tgetNewPresetValue(\n\t\t\t\t\t\t\t\tselection.selectedItem.key,\n\t\t\t\t\t\t\t\t'selectList'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\toptions={ options }\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\tonMouseOver={ onMouseOver }\n\t\t\t\t\tonMouseOut={ onMouseOut }\n\t\t\t\t\tonFocus={ onMouseOver }\n\t\t\t\t\tonBlur={ onMouseOut }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! disableCustomSpacingSizes && (\n\t\t\t\t {\n\t\t\t\t\t\tsetShowCustomValueControl( ! showCustomValueControl );\n\t\t\t\t\t} }\n\t\t\t\t\tisPressed={ showCustomValueControl }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tclassName=\"spacing-sizes-control__custom-toggle\"\n\t\t\t\t\ticonSize={ 24 }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport {\n\tLABELS,\n\tICONS,\n\tgetPresetValueFromCustomValue,\n\thasAxisSupport,\n} from '../utils';\n\nconst groupedSides = [ 'vertical', 'horizontal' ];\n\nexport default function AxialInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\tif ( ! onChange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tif ( side === 'vertical' ) {\n\t\t\tnextValues.top = next;\n\t\t\tnextValues.bottom = next;\n\t\t}\n\n\t\tif ( side === 'horizontal' ) {\n\t\t\tnextValues.left = next;\n\t\t\tnextValues.right = next;\n\t\t}\n\n\t\tonChange( nextValues );\n\t};\n\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? groupedSides.filter( ( side ) => hasAxisSupport( sides, side ) )\n\t\t: groupedSides;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\tconst axisValue =\n\t\t\t\t\tside === 'vertical' ? values.top : values.left;\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport {\n\tALL_SIDES,\n\tLABELS,\n\tICONS,\n\tgetPresetValueFromCustomValue,\n} from '../utils';\n\nexport default function SeparatedInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? ALL_SIDES.filter( ( side ) => sides.includes( side ) )\n\t\t: ALL_SIDES;\n\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tnextValues[ side ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { LABELS, getPresetValueFromCustomValue } from '../utils';\n\nexport default function SingleInputControl( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel,\n\tside,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( currentSide ) => ( next ) => {\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tnextValues[ currentSide ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Button, Tooltip } from '@wordpress/components';\nimport { link, linkOff } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\nexport default function LinkedButton( { isLinked, ...props } ) {\n\tconst label = isLinked\n\t\t? sprintf(\n\t\t\t\t// translators: 1. Type of spacing being modified (padding, margin, etc).\n\t\t\t\t__( 'Unlink %1$s' ),\n\t\t\t\tprops.label.toLowerCase()\n\t\t ).trim()\n\t\t: sprintf(\n\t\t\t\t// translators: 1. Type of spacing being modified (padding, margin, etc).\n\t\t\t\t__( 'Link %1$s' ),\n\t\t\t\tprops.label.toLowerCase()\n\t\t ).trim();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../../use-settings';\nimport { RANGE_CONTROL_MAX_SIZE } from '../utils';\n\nconst EMPTY_ARRAY = [];\n\nconst compare = new Intl.Collator( 'und', { numeric: true } ).compare;\n\nexport default function useSpacingSizes() {\n\tconst [\n\t\tcustomSpacingSizes,\n\t\tthemeSpacingSizes,\n\t\tdefaultSpacingSizes,\n\t\tdefaultSpacingSizesEnabled,\n\t] = useSettings(\n\t\t'spacing.spacingSizes.custom',\n\t\t'spacing.spacingSizes.theme',\n\t\t'spacing.spacingSizes.default',\n\t\t'spacing.defaultSpacingSizes'\n\t);\n\n\tconst customSizes = customSpacingSizes ?? EMPTY_ARRAY;\n\n\tconst themeSizes = themeSpacingSizes ?? EMPTY_ARRAY;\n\n\tconst defaultSizes =\n\t\tdefaultSpacingSizes && defaultSpacingSizesEnabled !== false\n\t\t\t? defaultSpacingSizes\n\t\t\t: EMPTY_ARRAY;\n\n\treturn useMemo( () => {\n\t\tconst sizes = [\n\t\t\t{ name: __( 'None' ), slug: '0', size: 0 },\n\t\t\t...customSizes,\n\t\t\t...themeSizes,\n\t\t\t...defaultSizes,\n\t\t];\n\n\t\t// Using numeric slugs opts-in to sorting by slug.\n\t\tif ( sizes.every( ( { slug } ) => /^[0-9]/.test( slug ) ) ) {\n\t\t\tsizes.sort( ( a, b ) => compare( a.slug, b.slug ) );\n\t\t}\n\n\t\treturn sizes.length > RANGE_CONTROL_MAX_SIZE\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: __( 'Default' ),\n\t\t\t\t\t\tslug: 'default',\n\t\t\t\t\t\tsize: undefined,\n\t\t\t\t\t},\n\t\t\t\t\t...sizes,\n\t\t\t ]\n\t\t\t: sizes;\n\t}, [ customSizes, themeSizes, defaultSizes ] );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tBaseControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport AxialInputControls from './input-controls/axial';\nimport SeparatedInputControls from './input-controls/separated';\nimport SingleInputControl from './input-controls/single';\nimport LinkedButton from './linked-button';\nimport useSpacingSizes from './hooks/use-spacing-sizes';\nimport {\n\tALL_SIDES,\n\tDEFAULT_VALUES,\n\tLABELS,\n\tVIEWS,\n\tgetInitialView,\n} from './utils';\n\nexport default function SpacingSizesControl( {\n\tinputProps,\n\tlabel: labelProp,\n\tminimumCustomValue = 0,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel = true,\n\tsides = ALL_SIDES,\n\tuseSelect,\n\tvalues,\n} ) {\n\tconst spacingSizes = useSpacingSizes();\n\tconst inputValues = values || DEFAULT_VALUES;\n\tconst hasOneSide = sides?.length === 1;\n\tconst hasOnlyAxialSides =\n\t\tsides?.includes( 'horizontal' ) &&\n\t\tsides?.includes( 'vertical' ) &&\n\t\tsides?.length === 2;\n\n\tconst [ view, setView ] = useState( getInitialView( inputValues, sides ) );\n\n\tconst toggleLinked = () => {\n\t\tsetView( view === VIEWS.axial ? VIEWS.custom : VIEWS.axial );\n\t};\n\n\tconst handleOnChange = ( nextValue ) => {\n\t\tconst newValues = { ...values, ...nextValue };\n\t\tonChange( newValues );\n\t};\n\n\tconst inputControlProps = {\n\t\t...inputProps,\n\t\tminimumCustomValue,\n\t\tonChange: handleOnChange,\n\t\tonMouseOut,\n\t\tonMouseOver,\n\t\tsides,\n\t\tspacingSizes,\n\t\ttype: labelProp,\n\t\tuseSelect,\n\t\tvalues: inputValues,\n\t};\n\n\tconst renderControls = () => {\n\t\tif ( view === VIEWS.axial ) {\n\t\t\treturn ;\n\t\t}\n\t\tif ( view === VIEWS.custom ) {\n\t\t\treturn ;\n\t\t}\n\t\treturn (\n\t\t\t\n\t\t);\n\t};\n\n\tconst sideLabel =\n\t\tALL_SIDES.includes( view ) && showSideInLabel ? LABELS[ view ] : '';\n\n\tconst label = sprintf(\n\t\t// translators: 2. Type of spacing being modified (Padding, margin, etc). 1: The side of the block being modified (top, bottom, left etc.).\n\t\t__( '%1$s %2$s' ),\n\t\tlabelProp,\n\t\tsideLabel\n\t).trim();\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ label }\n\t\t\t\t\n\t\t\t\t{ ! hasOneSide && ! hasOnlyAxialSides && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t{ renderControls() }\n\t\t
\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport {\n\tBaseControl,\n\tRangeControl,\n\tFlex,\n\tFlexItem,\n\t__experimentalSpacer as Spacer,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nconst RANGE_CONTROL_CUSTOM_SETTINGS = {\n\tpx: { max: 1000, step: 1 },\n\t'%': { max: 100, step: 1 },\n\tvw: { max: 100, step: 1 },\n\tvh: { max: 100, step: 1 },\n\tem: { max: 50, step: 0.1 },\n\trem: { max: 50, step: 0.1 },\n\tsvw: { max: 100, step: 1 },\n\tlvw: { max: 100, step: 1 },\n\tdvw: { max: 100, step: 1 },\n\tsvh: { max: 100, step: 1 },\n\tlvh: { max: 100, step: 1 },\n\tdvh: { max: 100, step: 1 },\n\tvi: { max: 100, step: 1 },\n\tsvi: { max: 100, step: 1 },\n\tlvi: { max: 100, step: 1 },\n\tdvi: { max: 100, step: 1 },\n\tvb: { max: 100, step: 1 },\n\tsvb: { max: 100, step: 1 },\n\tlvb: { max: 100, step: 1 },\n\tdvb: { max: 100, step: 1 },\n\tvmin: { max: 100, step: 1 },\n\tsvmin: { max: 100, step: 1 },\n\tlvmin: { max: 100, step: 1 },\n\tdvmin: { max: 100, step: 1 },\n\tvmax: { max: 100, step: 1 },\n\tsvmax: { max: 100, step: 1 },\n\tlvmax: { max: 100, step: 1 },\n\tdvmax: { max: 100, step: 1 },\n};\n\n/**\n * HeightControl renders a linked unit control and range control for adjusting the height of a block.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/height-control/README.md\n *\n * @param {Object} props\n * @param {?string} props.label A label for the control.\n * @param {( value: string ) => void } props.onChange Called when the height changes.\n * @param {string} props.value The current height value.\n *\n * @return {Component} The component to be rendered.\n */\nexport default function HeightControl( {\n\tlabel = __( 'Height' ),\n\tonChange,\n\tvalue,\n} ) {\n\tconst customRangeValue = parseFloat( value );\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vh',\n\t\t\t'vw',\n\t\t],\n\t} );\n\n\tconst selectedUnit =\n\t\tuseMemo(\n\t\t\t() => parseQuantityAndUnitFromRawValue( value ),\n\t\t\t[ value ]\n\t\t)[ 1 ] ||\n\t\tunits[ 0 ]?.value ||\n\t\t'px';\n\n\tconst handleSliderChange = ( next ) => {\n\t\tonChange( [ next, selectedUnit ].join( '' ) );\n\t};\n\n\tconst handleUnitChange = ( newUnit ) => {\n\t\t// Attempt to smooth over differences between currentUnit and newUnit.\n\t\t// This should slightly improve the experience of switching between unit types.\n\t\tconst [ currentValue, currentUnit ] =\n\t\t\tparseQuantityAndUnitFromRawValue( value );\n\n\t\tif ( [ 'em', 'rem' ].includes( newUnit ) && currentUnit === 'px' ) {\n\t\t\t// Convert pixel value to an approximate of the new unit, assuming a root size of 16px.\n\t\t\tonChange( ( currentValue / 16 ).toFixed( 2 ) + newUnit );\n\t\t} else if (\n\t\t\t[ 'em', 'rem' ].includes( currentUnit ) &&\n\t\t\tnewUnit === 'px'\n\t\t) {\n\t\t\t// Convert to pixel value assuming a root size of 16px.\n\t\t\tonChange( Math.round( currentValue * 16 ) + newUnit );\n\t\t} else if (\n\t\t\t[\n\t\t\t\t'%',\n\t\t\t\t'vw',\n\t\t\t\t'svw',\n\t\t\t\t'lvw',\n\t\t\t\t'dvw',\n\t\t\t\t'vh',\n\t\t\t\t'svh',\n\t\t\t\t'lvh',\n\t\t\t\t'dvh',\n\t\t\t\t'vi',\n\t\t\t\t'svi',\n\t\t\t\t'lvi',\n\t\t\t\t'dvi',\n\t\t\t\t'vb',\n\t\t\t\t'svb',\n\t\t\t\t'lvb',\n\t\t\t\t'dvb',\n\t\t\t\t'vmin',\n\t\t\t\t'svmin',\n\t\t\t\t'lvmin',\n\t\t\t\t'dvmin',\n\t\t\t\t'vmax',\n\t\t\t\t'svmax',\n\t\t\t\t'lvmax',\n\t\t\t\t'dvmax',\n\t\t\t].includes( newUnit ) &&\n\t\t\tcurrentValue > 100\n\t\t) {\n\t\t\t// When converting to `%` or viewport-relative units, cap the new value at 100.\n\t\t\tonChange( 100 + newUnit );\n\t\t}\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{ label }\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function useGetNumberOfBlocksBeforeCell( gridClientId, numColumns ) {\n\tconst { getBlockOrder, getBlockAttributes } = useSelect( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = ( column, row ) => {\n\t\tconst targetIndex = ( row - 1 ) * numColumns + column - 1;\n\n\t\tlet count = 0;\n\t\tfor ( const clientId of getBlockOrder( gridClientId ) ) {\n\t\t\tconst { columnStart, rowStart } =\n\t\t\t\tgetBlockAttributes( clientId ).style?.layout ?? {};\n\t\t\tconst cellIndex = ( rowStart - 1 ) * numColumns + columnStart - 1;\n\t\t\tif ( cellIndex < targetIndex ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t};\n\n\treturn getNumberOfBlocksBeforeCell;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalInputControl as InputControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\tFlex,\n\tFlexItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useEffect } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useGetNumberOfBlocksBeforeCell } from '../grid/use-get-number-of-blocks-before-cell';\nimport { store as blockEditorStore } from '../../store';\n\nfunction helpText( selfStretch, parentLayout ) {\n\tconst { orientation = 'horizontal' } = parentLayout;\n\n\tif ( selfStretch === 'fill' ) {\n\t\treturn __( 'Stretch to fill available space.' );\n\t}\n\tif ( selfStretch === 'fixed' && orientation === 'horizontal' ) {\n\t\treturn __( 'Specify a fixed width.' );\n\t} else if ( selfStretch === 'fixed' ) {\n\t\treturn __( 'Specify a fixed height.' );\n\t}\n\treturn __( 'Fit contents.' );\n}\n\n/**\n * Form to edit the child layout value.\n *\n * @param {Object} props Props.\n * @param {Object} props.value The child layout value.\n * @param {Function} props.onChange Function to update the child layout value.\n * @param {Object} props.parentLayout The parent layout value.\n *\n * @param {boolean} props.isShownByDefault\n * @param {string} props.panelId\n * @return {Element} child layout edit element.\n */\nexport default function ChildLayoutControl( {\n\tvalue: childLayout = {},\n\tonChange,\n\tparentLayout,\n\tisShownByDefault,\n\tpanelId,\n} ) {\n\tconst {\n\t\ttype: parentType,\n\t\tdefault: { type: defaultParentType = 'default' } = {},\n\t} = parentLayout ?? {};\n\tconst parentLayoutType = parentType || defaultParentType;\n\n\tif ( parentLayoutType === 'flex' ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t} else if ( parentLayoutType === 'grid' ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn null;\n}\n\nfunction FlexControls( {\n\tchildLayout,\n\tonChange,\n\tparentLayout,\n\tisShownByDefault,\n\tpanelId,\n} ) {\n\tconst { selfStretch, flexSize } = childLayout;\n\tconst { orientation = 'horizontal' } = parentLayout ?? {};\n\tconst hasFlexValue = () => !! selfStretch;\n\tconst flexResetLabel =\n\t\torientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );\n\tconst resetFlex = () => {\n\t\tonChange( {\n\t\t\tselfStretch: undefined,\n\t\t\tflexSize: undefined,\n\t\t} );\n\t};\n\n\tuseEffect( () => {\n\t\tif ( selfStretch === 'fixed' && ! flexSize ) {\n\t\t\tonChange( {\n\t\t\t\t...childLayout,\n\t\t\t\tselfStretch: 'fit',\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tconst newFlexSize = value !== 'fixed' ? null : flexSize;\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\tselfStretch: value,\n\t\t\t\t\t\tflexSize: newFlexSize,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tisBlock\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{ selfStretch === 'fixed' && (\n\t\t\t\t {\n\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\tselfStretch,\n\t\t\t\t\t\t\tflexSize: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ flexSize }\n\t\t\t\t\tlabel={ flexResetLabel }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport function childLayoutOrientation( parentLayout ) {\n\tconst { orientation = 'horizontal' } = parentLayout;\n\treturn orientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );\n}\n\nfunction GridControls( {\n\tchildLayout,\n\tonChange,\n\tparentLayout,\n\tisShownByDefault,\n\tpanelId,\n} ) {\n\tconst { columnStart, rowStart, columnSpan, rowSpan } = childLayout;\n\tconst { columnCount = 3, rowCount } = parentLayout ?? {};\n\tconst rootClientId = useSelect( ( select ) =>\n\t\tselect( blockEditorStore ).getBlockRootClientId( panelId )\n\t);\n\tconst { moveBlocksToPosition, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\trootClientId,\n\t\tcolumnCount\n\t);\n\tconst hasStartValue = () => !! columnStart || !! rowStart;\n\tconst hasSpanValue = () => !! columnSpan || !! rowSpan;\n\tconst resetGridStarts = () => {\n\t\tonChange( {\n\t\t\tcolumnStart: undefined,\n\t\t\trowStart: undefined,\n\t\t} );\n\t};\n\tconst resetGridSpans = () => {\n\t\tonChange( {\n\t\t\tcolumnSpan: undefined,\n\t\t\trowSpan: undefined,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\tconst newColumnSpan =\n\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\trowStart,\n\t\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t\tcolumnSpan: newColumnSpan,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ columnSpan ?? 1 }\n\t\t\t\t\tmin={ 1 }\n\t\t\t\t/>\n\t\t\t\t {\n\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\tconst newRowSpan =\n\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\trowStart,\n\t\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\t\trowSpan: newRowSpan,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ rowSpan ?? 1 }\n\t\t\t\t\tmin={ 1 }\n\t\t\t\t/>\n\t\t\t\n\t\t\t{ window.__experimentalEnableGridInteractivity && columnCount && (\n\t\t\t\t// Use Flex with an explicit width on the FlexItem instead of HStack to\n\t\t\t\t// work around an issue in webkit where inputs with a max attribute are\n\t\t\t\t// sized incorrectly.\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\t\t\tconst newColumnStart =\n\t\t\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\t\t\t\trowStart,\n\t\t\t\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t[ panelId ],\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\t\tnewColumnStart,\n\t\t\t\t\t\t\t\t\t\trowStart\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ columnStart ?? 1 }\n\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\tmax={\n\t\t\t\t\t\t\t\tcolumnCount\n\t\t\t\t\t\t\t\t\t? columnCount - ( columnSpan ?? 1 ) + 1\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\t\t\tconst newRowStart =\n\t\t\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t[ panelId ],\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\t\tnewRowStart\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ rowStart ?? 1 }\n\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\tmax={\n\t\t\t\t\t\t\t\trowCount\n\t\t\t\t\t\t\t\t\t? rowCount - ( rowSpan ?? 1 ) + 1\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tSelectControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\n/**\n * @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps\n */\n\n/**\n * @callback AspectRatioToolPropsOnChange\n * @param {string} [value] New aspect ratio value.\n * @return {void} No return.\n */\n\n/**\n * @typedef {Object} AspectRatioToolProps\n * @property {string} [panelId] ID of the panel this tool is associated with.\n * @property {string} [value] Current aspect ratio value.\n * @property {AspectRatioToolPropsOnChange} [onChange] Callback to update the aspect ratio value.\n * @property {SelectControlProps[]} [options] Aspect ratio options.\n * @property {string} [defaultValue] Default aspect ratio value.\n * @property {boolean} [isShownByDefault] Whether the tool is shown by default.\n */\n\nexport default function AspectRatioTool( {\n\tpanelId,\n\tvalue,\n\tonChange = () => {},\n\toptions,\n\tdefaultValue = 'auto',\n\thasValue,\n\tisShownByDefault = true,\n} ) {\n\t// Match the CSS default so if the value is used directly in CSS it will look correct in the control.\n\tconst displayValue = value ?? 'auto';\n\n\tconst [ defaultRatios, themeRatios, showDefaultRatios ] = useSettings(\n\t\t'dimensions.aspectRatios.default',\n\t\t'dimensions.aspectRatios.theme',\n\t\t'dimensions.defaultAspectRatios'\n\t);\n\n\tconst themeOptions = themeRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\n\tconst defaultOptions = defaultRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\n\tconst aspectRatioOptions = [\n\t\t{\n\t\t\tlabel: _x(\n\t\t\t\t'Original',\n\t\t\t\t'Aspect ratio option for dimensions control'\n\t\t\t),\n\t\t\tvalue: 'auto',\n\t\t},\n\t\t...( showDefaultRatios ? defaultOptions : [] ),\n\t\t...( themeOptions ? themeOptions : [] ),\n\t\t{\n\t\t\tlabel: _x( 'Custom', 'Aspect ratio option for dimensions control' ),\n\t\t\tvalue: 'custom',\n\t\t\tdisabled: true,\n\t\t\thidden: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t displayValue !== defaultValue\n\t\t\t}\n\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\tonDeselect={ () => onChange( undefined ) }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalBoxControl as BoxControl,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n} from '@wordpress/components';\nimport { Icon, alignNone, stretchWide } from '@wordpress/icons';\nimport { useCallback, useState, Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport SpacingSizesControl from '../spacing-sizes-control';\nimport HeightControl from '../height-control';\nimport ChildLayoutControl from '../child-layout-control';\nimport AspectRatioTool from '../dimensions-tool/aspect-ratio-tool';\nimport { cleanEmptyObject } from '../../hooks/utils';\nimport { setImmutably } from '../../utils/object';\n\nconst AXIAL_SIDES = [ 'horizontal', 'vertical' ];\n\nexport function useHasDimensionsPanel( settings ) {\n\tconst hasContentSize = useHasContentSize( settings );\n\tconst hasWideSize = useHasWideSize( settings );\n\tconst hasPadding = useHasPadding( settings );\n\tconst hasMargin = useHasMargin( settings );\n\tconst hasGap = useHasGap( settings );\n\tconst hasMinHeight = useHasMinHeight( settings );\n\tconst hasAspectRatio = useHasAspectRatio( settings );\n\tconst hasChildLayout = useHasChildLayout( settings );\n\n\treturn (\n\t\tPlatform.OS === 'web' &&\n\t\t( hasContentSize ||\n\t\t\thasWideSize ||\n\t\t\thasPadding ||\n\t\t\thasMargin ||\n\t\t\thasGap ||\n\t\t\thasMinHeight ||\n\t\t\thasAspectRatio ||\n\t\t\thasChildLayout )\n\t);\n}\n\nfunction useHasContentSize( settings ) {\n\treturn settings?.layout?.contentSize;\n}\n\nfunction useHasWideSize( settings ) {\n\treturn settings?.layout?.wideSize;\n}\n\nfunction useHasPadding( settings ) {\n\treturn settings?.spacing?.padding;\n}\n\nfunction useHasMargin( settings ) {\n\treturn settings?.spacing?.margin;\n}\n\nfunction useHasGap( settings ) {\n\treturn settings?.spacing?.blockGap;\n}\n\nfunction useHasMinHeight( settings ) {\n\treturn settings?.dimensions?.minHeight;\n}\n\nfunction useHasAspectRatio( settings ) {\n\treturn settings?.dimensions?.aspectRatio;\n}\n\nfunction useHasChildLayout( settings ) {\n\tconst {\n\t\ttype: parentLayoutType = 'default',\n\t\tdefault: { type: defaultParentLayoutType = 'default' } = {},\n\t\tallowSizingOnChildren = false,\n\t} = settings?.parentLayout ?? {};\n\n\tconst support =\n\t\t( defaultParentLayoutType === 'flex' ||\n\t\t\tparentLayoutType === 'flex' ||\n\t\t\tdefaultParentLayoutType === 'grid' ||\n\t\t\tparentLayoutType === 'grid' ) &&\n\t\tallowSizingOnChildren;\n\treturn !! settings?.layout && support;\n}\n\nfunction useHasSpacingPresets( settings ) {\n\tconst { defaultSpacingSizes, spacingSizes } = settings?.spacing || {};\n\treturn (\n\t\t( defaultSpacingSizes !== false &&\n\t\t\tspacingSizes?.default?.length > 0 ) ||\n\t\tspacingSizes?.theme?.length > 0 ||\n\t\tspacingSizes?.custom?.length > 0\n\t);\n}\n\nfunction filterValuesBySides( values, sides ) {\n\t// If no custom side configuration, all sides are opted into by default.\n\t// Without any values, we have nothing to filter either.\n\tif ( ! sides || ! values ) {\n\t\treturn values;\n\t}\n\n\t// Only include sides opted into within filtered values.\n\tconst filteredValues = {};\n\tsides.forEach( ( side ) => {\n\t\tif ( side === 'vertical' ) {\n\t\t\tfilteredValues.top = values.top;\n\t\t\tfilteredValues.bottom = values.bottom;\n\t\t}\n\t\tif ( side === 'horizontal' ) {\n\t\t\tfilteredValues.left = values.left;\n\t\t\tfilteredValues.right = values.right;\n\t\t}\n\t\tfilteredValues[ side ] = values?.[ side ];\n\t} );\n\n\treturn filteredValues;\n}\n\nfunction splitStyleValue( value ) {\n\t// Check for shorthand value (a string value).\n\tif ( value && typeof value === 'string' ) {\n\t\t// Convert to value for individual sides for BoxControl.\n\t\treturn {\n\t\t\ttop: value,\n\t\t\tright: value,\n\t\t\tbottom: value,\n\t\t\tleft: value,\n\t\t};\n\t}\n\n\treturn value;\n}\n\nfunction splitGapValue( value ) {\n\t// Check for shorthand value (a string value).\n\tif ( value && typeof value === 'string' ) {\n\t\t// If the value is a string, treat it as a single side (top) for the spacing controls.\n\t\treturn {\n\t\t\ttop: value,\n\t\t};\n\t}\n\n\tif ( value ) {\n\t\treturn {\n\t\t\t...value,\n\t\t\tright: value?.left,\n\t\t\tbottom: value?.top,\n\t\t};\n\t}\n\n\treturn value;\n}\n\nfunction DimensionsToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tcontentSize: true,\n\twideSize: true,\n\tpadding: true,\n\tmargin: true,\n\tblockGap: true,\n\tminHeight: true,\n\taspectRatio: true,\n\tchildLayout: true,\n};\n\nexport default function DimensionsPanel( {\n\tas: Wrapper = DimensionsToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tonVisualize = () => {},\n\t// Special case because the layout controls are not part of the dimensions panel\n\t// in global styles but not in block inspector.\n\tincludeLayoutControls = false,\n} ) {\n\tconst { dimensions, spacing } = settings;\n\n\tconst decodeValue = ( rawValue ) => {\n\t\tif ( rawValue && typeof rawValue === 'object' ) {\n\t\t\treturn Object.keys( rawValue ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getValueFromVariable(\n\t\t\t\t\t{ settings: { dimensions, spacing } },\n\t\t\t\t\t'',\n\t\t\t\t\trawValue[ key ]\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} );\n\t\t}\n\t\treturn getValueFromVariable(\n\t\t\t{ settings: { dimensions, spacing } },\n\t\t\t'',\n\t\t\trawValue\n\t\t);\n\t};\n\n\tconst showSpacingPresetsControl = useHasSpacingPresets( settings );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: settings?.spacing?.units || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vw',\n\t\t],\n\t} );\n\n\t//Minimum Margin Value\n\tconst minimumMargin = -Infinity;\n\tconst [ minMarginValue, setMinMarginValue ] = useState( minimumMargin );\n\n\t// Content Width\n\tconst showContentSizeControl =\n\t\tuseHasContentSize( settings ) && includeLayoutControls;\n\tconst contentSizeValue = decodeValue( inheritedValue?.layout?.contentSize );\n\tconst setContentSizeValue = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'layout', 'contentSize' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasUserSetContentSizeValue = () => !! value?.layout?.contentSize;\n\tconst resetContentSizeValue = () => setContentSizeValue( undefined );\n\n\t// Wide Width\n\tconst showWideSizeControl =\n\t\tuseHasWideSize( settings ) && includeLayoutControls;\n\tconst wideSizeValue = decodeValue( inheritedValue?.layout?.wideSize );\n\tconst setWideSizeValue = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'layout', 'wideSize' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasUserSetWideSizeValue = () => !! value?.layout?.wideSize;\n\tconst resetWideSizeValue = () => setWideSizeValue( undefined );\n\n\t// Padding\n\tconst showPaddingControl = useHasPadding( settings );\n\tconst rawPadding = decodeValue( inheritedValue?.spacing?.padding );\n\tconst paddingValues = splitStyleValue( rawPadding );\n\tconst paddingSides = Array.isArray( settings?.spacing?.padding )\n\t\t? settings?.spacing?.padding\n\t\t: settings?.spacing?.padding?.sides;\n\tconst isAxialPadding =\n\t\tpaddingSides &&\n\t\tpaddingSides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\tconst setPaddingValues = ( newPaddingValues ) => {\n\t\tconst padding = filterValuesBySides( newPaddingValues, paddingSides );\n\t\tonChange( setImmutably( value, [ 'spacing', 'padding' ], padding ) );\n\t};\n\tconst hasPaddingValue = () =>\n\t\t!! value?.spacing?.padding &&\n\t\tObject.keys( value?.spacing?.padding ).length;\n\tconst resetPaddingValue = () => setPaddingValues( undefined );\n\tconst onMouseOverPadding = () => onVisualize( 'padding' );\n\n\t// Margin\n\tconst showMarginControl = useHasMargin( settings );\n\tconst rawMargin = decodeValue( inheritedValue?.spacing?.margin );\n\tconst marginValues = splitStyleValue( rawMargin );\n\tconst marginSides = Array.isArray( settings?.spacing?.margin )\n\t\t? settings?.spacing?.margin\n\t\t: settings?.spacing?.margin?.sides;\n\tconst isAxialMargin =\n\t\tmarginSides &&\n\t\tmarginSides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\tconst setMarginValues = ( newMarginValues ) => {\n\t\tconst margin = filterValuesBySides( newMarginValues, marginSides );\n\t\tonChange( setImmutably( value, [ 'spacing', 'margin' ], margin ) );\n\t};\n\tconst hasMarginValue = () =>\n\t\t!! value?.spacing?.margin &&\n\t\tObject.keys( value?.spacing?.margin ).length;\n\tconst resetMarginValue = () => setMarginValues( undefined );\n\tconst onMouseOverMargin = () => onVisualize( 'margin' );\n\n\t// Block Gap\n\tconst showGapControl = useHasGap( settings );\n\tconst gapValue = decodeValue( inheritedValue?.spacing?.blockGap );\n\tconst gapValues = splitGapValue( gapValue );\n\tconst gapSides = Array.isArray( settings?.spacing?.blockGap )\n\t\t? settings?.spacing?.blockGap\n\t\t: settings?.spacing?.blockGap?.sides;\n\tconst isAxialGap =\n\t\tgapSides && gapSides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\tconst setGapValue = ( newGapValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably( value, [ 'spacing', 'blockGap' ], newGapValue )\n\t\t);\n\t};\n\tconst setGapValues = ( nextBoxGapValue ) => {\n\t\tif ( ! nextBoxGapValue ) {\n\t\t\tsetGapValue( null );\n\t\t}\n\t\t// If axial gap is not enabled, treat the 'top' value as the shorthand gap value.\n\t\tif ( ! isAxialGap && nextBoxGapValue?.hasOwnProperty( 'top' ) ) {\n\t\t\tsetGapValue( nextBoxGapValue.top );\n\t\t} else {\n\t\t\tsetGapValue( {\n\t\t\t\ttop: nextBoxGapValue?.top,\n\t\t\t\tleft: nextBoxGapValue?.left,\n\t\t\t} );\n\t\t}\n\t};\n\tconst resetGapValue = () => setGapValue( undefined );\n\tconst hasGapValue = () => !! value?.spacing?.blockGap;\n\n\t// Min Height\n\tconst showMinHeightControl = useHasMinHeight( settings );\n\tconst minHeightValue = decodeValue( inheritedValue?.dimensions?.minHeight );\n\tconst setMinHeightValue = ( newValue ) => {\n\t\tconst tempValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'dimensions', 'minHeight' ],\n\t\t\tnewValue\n\t\t);\n\t\t// Apply min-height, while removing any applied aspect ratio.\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\ttempValue,\n\t\t\t\t[ 'dimensions', 'aspectRatio' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\t};\n\tconst resetMinHeightValue = () => {\n\t\tsetMinHeightValue( undefined );\n\t};\n\tconst hasMinHeightValue = () => !! value?.dimensions?.minHeight;\n\n\t// Aspect Ratio\n\tconst showAspectRatioControl = useHasAspectRatio( settings );\n\tconst aspectRatioValue = decodeValue(\n\t\tinheritedValue?.dimensions?.aspectRatio\n\t);\n\tconst setAspectRatioValue = ( newValue ) => {\n\t\tconst tempValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'dimensions', 'aspectRatio' ],\n\t\t\tnewValue\n\t\t);\n\t\t// Apply aspect-ratio, while removing any applied min-height.\n\t\tonChange(\n\t\t\tsetImmutably( tempValue, [ 'dimensions', 'minHeight' ], undefined )\n\t\t);\n\t};\n\tconst hasAspectRatioValue = () => !! value?.dimensions?.aspectRatio;\n\n\t// Child Layout\n\tconst showChildLayoutControl = useHasChildLayout( settings );\n\tconst childLayout = inheritedValue?.layout;\n\n\tconst setChildLayout = ( newChildLayout ) => {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\tlayout: {\n\t\t\t\t...newChildLayout,\n\t\t\t},\n\t\t} );\n\t};\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tlayout: cleanEmptyObject( {\n\t\t\t\t...previousValue?.layout,\n\t\t\t\tcontentSize: undefined,\n\t\t\t\twideSize: undefined,\n\t\t\t\tselfStretch: undefined,\n\t\t\t\tflexSize: undefined,\n\t\t\t\tcolumnStart: undefined,\n\t\t\t\trowStart: undefined,\n\t\t\t\tcolumnSpan: undefined,\n\t\t\t\trowSpan: undefined,\n\t\t\t} ),\n\t\t\tspacing: {\n\t\t\t\t...previousValue?.spacing,\n\t\t\t\tpadding: undefined,\n\t\t\t\tmargin: undefined,\n\t\t\t\tblockGap: undefined,\n\t\t\t},\n\t\t\tdimensions: {\n\t\t\t\t...previousValue?.dimensions,\n\t\t\t\tminHeight: undefined,\n\t\t\t\taspectRatio: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\tconst onMouseLeaveControls = () => onVisualize( false );\n\n\tconst inputProps = {\n\t\tmin: minMarginValue,\n\t\tonDragStart: () => {\n\t\t\t//Reset to 0 in case the value was negative.\n\t\t\tsetMinMarginValue( 0 );\n\t\t},\n\t\tonDragEnd: () => {\n\t\t\tsetMinMarginValue( minimumMargin );\n\t\t},\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ ( showContentSizeControl || showWideSizeControl ) && (\n\t\t\t\t\n\t\t\t\t\t{ __( 'Set the width of the main content area.' ) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showContentSizeControl && (\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetContentSizeValue( nextContentSize );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showWideSizeControl && (\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetWideSizeValue( nextWideSize );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showPaddingControl && (\n\t\t\t\t\n\t\t\t\t\t{ ! showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showMarginControl && (\n\t\t\t\t\n\t\t\t\t\t{ ! showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showGapControl && (\n\t\t\t\t\n\t\t\t\t\t{ ! showSpacingPresetsControl &&\n\t\t\t\t\t\t( isAxialGap ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t{ showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showChildLayoutControl && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showMinHeightControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showAspectRatioControl && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Allow scrolling \"through\" popovers over the canvas. This is only called for\n * as long as the pointer is over a popover. Do not use React events because it\n * will bubble through portals.\n *\n * @param {Object} scrollableRef\n */\nfunction usePopoverScroll( scrollableRef ) {\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! scrollableRef ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onWheel( event ) {\n\t\t\t\tconst { deltaX, deltaY } = event;\n\t\t\t\tscrollableRef.current.scrollBy( deltaX, deltaY );\n\t\t\t}\n\t\t\t// Tell the browser that we do not call event.preventDefault\n\t\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners\n\t\t\tconst options = { passive: true };\n\t\t\tnode.addEventListener( 'wheel', onWheel, options );\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'wheel', onWheel, options );\n\t\t\t};\n\t\t},\n\t\t[ scrollableRef ]\n\t);\n}\n\nexport default usePopoverScroll;\n","const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param {Element} a First element.\n * @param {Element} b Second element.\n *\n * @return {boolean} Whether elements are in the same block.\n */\nexport function isInSameBlock( a, b ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param {Element} blockElement Block container element.\n * @param {Element} element Element.\n *\n * @return {boolean} Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement, element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param {Node?} node DOM node.\n *\n * @return {string|undefined} Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = /** @type {Element} */ ( node );\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param {DOMRect} rect1 First rectangle.\n * @param {DOMRect} rect2 Second rectangle.\n * @return {DOMRect} Union of the two rectangles.\n */\nexport function rectUnion( rect1, rect2 ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param {Element} element Element.\n * @return {boolean} Whether the element is visible.\n */\nfunction isElementVisible( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for component.\n\tif ( element.classList.contains( 'components-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns the rect of the element including all visible nested elements.\n *\n * Visible nested elements, including elements that overflow the parent, are\n * taken into account.\n *\n * This function is useful for calculating the visible area of a block that\n * contains nested elements that overflow the block, e.g. the Navigation block,\n * which can contain overflowing Submenu blocks.\n *\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param {Element} element Element.\n * @return {DOMRect} Bounding client rect of the element and its visible children.\n */\nexport function getVisibleElementBounds( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\n\tconst stack = [ element ];\n\tlet currentElement;\n\n\twhile ( ( currentElement = stack.pop() ) ) {\n\t\tfor ( const child of currentElement.children ) {\n\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\tconst childBounds = child.getBoundingClientRect();\n\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\tstack.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { Popover } from '@wordpress/components';\nimport {\n\tforwardRef,\n\tuseMemo,\n\tuseReducer,\n\tuseLayoutEffect,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport usePopoverScroll from './use-popover-scroll';\nimport { rectUnion, getVisibleElementBounds } from '../../utils/dom';\n\nconst MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;\n\nfunction BlockPopover(\n\t{\n\t\tclientId,\n\t\tbottomClientId,\n\t\tchildren,\n\t\t__unstablePopoverSlot,\n\t\t__unstableContentRef,\n\t\tshift = true,\n\t\t...props\n\t},\n\tref\n) {\n\tconst selectedElement = useBlockElement( clientId );\n\tconst lastSelectedElement = useBlockElement( bottomClientId ?? clientId );\n\tconst mergedRefs = useMergeRefs( [\n\t\tref,\n\t\tusePopoverScroll( __unstableContentRef ),\n\t] );\n\n\tconst [\n\t\tpopoverDimensionsRecomputeCounter,\n\t\tforceRecomputePopoverDimensions,\n\t] = useReducer(\n\t\t// Module is there to make sure that the counter doesn't overflow.\n\t\t( s ) => ( s + 1 ) % MAX_POPOVER_RECOMPUTE_COUNTER,\n\t\t0\n\t);\n\n\t// When blocks are moved up/down, they are animated to their new position by\n\t// updating the `transform` property manually (i.e. without using CSS\n\t// transitions or animations). The animation, which can also scroll the block\n\t// editor, can sometimes cause the position of the Popover to get out of sync.\n\t// A MutationObserver is therefore used to make sure that changes to the\n\t// selectedElement's attribute (i.e. `transform`) can be tracked and used to\n\t// trigger the Popover to rerender.\n\tuseLayoutEffect( () => {\n\t\tif ( ! selectedElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new window.MutationObserver(\n\t\t\tforceRecomputePopoverDimensions\n\t\t);\n\t\tobserver.observe( selectedElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ selectedElement ] );\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tif (\n\t\t\t// popoverDimensionsRecomputeCounter is by definition always equal or greater\n\t\t\t// than 0. This check is only there to satisfy the correctness of the\n\t\t\t// exhaustive-deps rule for the `useMemo` hook.\n\t\t\tpopoverDimensionsRecomputeCounter < 0 ||\n\t\t\t! selectedElement ||\n\t\t\t( bottomClientId && ! lastSelectedElement )\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn lastSelectedElement\n\t\t\t\t\t? rectUnion(\n\t\t\t\t\t\t\tgetVisibleElementBounds( selectedElement ),\n\t\t\t\t\t\t\tgetVisibleElementBounds( lastSelectedElement )\n\t\t\t\t\t )\n\t\t\t\t\t: getVisibleElementBounds( selectedElement );\n\t\t\t},\n\t\t\tcontextElement: selectedElement,\n\t\t};\n\t}, [\n\t\tbottomClientId,\n\t\tlastSelectedElement,\n\t\tselectedElement,\n\t\tpopoverDimensionsRecomputeCounter,\n\t] );\n\n\tif ( ! selectedElement || ( bottomClientId && ! lastSelectedElement ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport const PrivateBlockPopover = forwardRef( BlockPopover );\n\nconst PublicBlockPopover = (\n\t{ clientId, bottomClientId, children, ...props },\n\tref\n) => (\n\t\n\t\t{ children }\n\t\n);\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-popover/README.md\n */\nexport default forwardRef( PublicBlockPopover );\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useMemo, forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport { PrivateBlockPopover } from '.';\n\nfunction BlockPopoverCover(\n\t{\n\t\tclientId,\n\t\tbottomClientId,\n\t\tchildren,\n\t\tshift = false,\n\t\tadditionalStyles,\n\t\t...props\n\t},\n\tref\n) {\n\tbottomClientId ??= clientId;\n\n\tconst selectedElement = useBlockElement( clientId );\n\n\treturn (\n\t\t\n\t\t\t{ selectedElement && clientId === bottomClientId ? (\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction CoverContainer( {\n\tselectedElement,\n\tadditionalStyles = {},\n\tchildren,\n} ) {\n\tconst [ width, setWidth ] = useState( selectedElement.offsetWidth );\n\tconst [ height, setHeight ] = useState( selectedElement.offsetHeight );\n\n\tuseEffect( () => {\n\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\tsetWidth( selectedElement.offsetWidth );\n\t\t\tsetHeight( selectedElement.offsetHeight );\n\t\t} );\n\t\tobserver.observe( selectedElement, { box: 'border-box' } );\n\t\treturn () => observer.disconnect();\n\t}, [ selectedElement ] );\n\n\tconst style = useMemo( () => {\n\t\treturn {\n\t\t\tposition: 'absolute',\n\t\t\twidth,\n\t\t\theight,\n\t\t\t...additionalStyles,\n\t\t};\n\t}, [ width, height, additionalStyles ] );\n\n\treturn
{ children }
;\n}\n\nexport default forwardRef( BlockPopoverCover );\n","/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tuseRef,\n\tuseLayoutEffect,\n\tuseEffect,\n\tuseReducer,\n} from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../components/block-popover/cover';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction SpacingVisualizer( { clientId, value, computeStyle, forceShow } ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst [ style, updateStyle ] = useReducer( () =>\n\t\tcomputeStyle( blockElement )\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! blockElement ) {\n\t\t\treturn;\n\t\t}\n\t\t// It's not sufficient to read the computed spacing value when value.spacing changes as\n\t\t// useEffect may run before the browser recomputes CSS. We therefore combine\n\t\t// useLayoutEffect and two rAF calls to ensure that we read the spacing after the current\n\t\t// paint but before the next paint.\n\t\t// See https://github.com/WordPress/gutenberg/pull/59227.\n\t\twindow.requestAnimationFrame( () =>\n\t\t\twindow.requestAnimationFrame( updateStyle )\n\t\t);\n\t}, [ blockElement, value ] );\n\n\tconst previousValueRef = useRef( value );\n\tconst [ isActive, setIsActive ] = useState( false );\n\n\tuseEffect( () => {\n\t\tif ( isShallowEqual( value, previousValueRef.current ) || forceShow ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsActive( true );\n\t\tpreviousValueRef.current = value;\n\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetIsActive( false );\n\t\t}, 400 );\n\n\t\treturn () => {\n\t\t\tsetIsActive( false );\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t}, [ value, forceShow ] );\n\n\tif ( ! isActive && ! forceShow ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\n\t);\n}\n\nfunction getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\nexport function MarginVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t {\n\t\t\t\tconst top = getComputedCSS( blockElement, 'margin-top' );\n\t\t\t\tconst right = getComputedCSS( blockElement, 'margin-right' );\n\t\t\t\tconst bottom = getComputedCSS( blockElement, 'margin-bottom' );\n\t\t\t\tconst left = getComputedCSS( blockElement, 'margin-left' );\n\t\t\t\treturn {\n\t\t\t\t\tborderTopWidth: top,\n\t\t\t\t\tborderRightWidth: right,\n\t\t\t\t\tborderBottomWidth: bottom,\n\t\t\t\t\tborderLeftWidth: left,\n\t\t\t\t\ttop: top ? `-${ top }` : 0,\n\t\t\t\t\tright: right ? `-${ right }` : 0,\n\t\t\t\t\tbottom: bottom ? `-${ bottom }` : 0,\n\t\t\t\t\tleft: left ? `-${ left }` : 0,\n\t\t\t\t};\n\t\t\t} }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n\nexport function PaddingVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t ( {\n\t\t\t\tborderTopWidth: getComputedCSS( blockElement, 'padding-top' ),\n\t\t\t\tborderRightWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-right'\n\t\t\t\t),\n\t\t\t\tborderBottomWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-bottom'\n\t\t\t\t),\n\t\t\t\tborderLeftWidth: getComputedCSS( blockElement, 'padding-left' ),\n\t\t\t} ) }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Platform, useState, useEffect, useCallback } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tDimensionsPanel as StylesDimensionsPanel,\n\tuseHasDimensionsPanel,\n} from '../components/global-styles';\nimport { MarginVisualizer, PaddingVisualizer } from './spacing-visualizer';\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\n\nexport const DIMENSIONS_SUPPORT_KEY = 'dimensions';\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\nfunction useVisualizer() {\n\tconst [ property, setProperty ] = useState( false );\n\tconst { hideBlockInterface, showBlockInterface } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tuseEffect( () => {\n\t\tif ( ! property ) {\n\t\t\tshowBlockInterface();\n\t\t} else {\n\t\t\thideBlockInterface();\n\t\t}\n\t}, [ property, showBlockInterface, hideBlockInterface ] );\n\n\treturn [ property, setProperty ];\n}\n\nfunction DimensionsInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributes.style;\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\tstyle: updatedStyle,\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function DimensionsPanel( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasDimensionsPanel( settings );\n\tconst value = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId )?.style,\n\t\t[ clientId ]\n\t);\n\tconst [ visualizedProperty, setVisualizedProperty ] = useVisualizer();\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultDimensionsControls = getBlockSupport( name, [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultSpacingControls = getBlockSupport( name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultControls = {\n\t\t...defaultDimensionsControls,\n\t\t...defaultSpacingControls,\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ !! settings?.spacing?.padding && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ !! settings?.spacing?.margin && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\n/**\n * Determine whether there is block support for dimensions.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, DIMENSIONS_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! ( support?.aspectRatio || !! support?.minHeight );\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'minHeight', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasDimensionsSupport( name, 'aspectRatio' );\n\t},\n};\n\nfunction useBlockProps( { name, minHeight, style } ) {\n\tif (\n\t\t! hasDimensionsSupport( name, 'aspectRatio' ) ||\n\t\tshouldSkipSerialization( name, DIMENSIONS_SUPPORT_KEY, 'aspectRatio' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst className = clsx( {\n\t\t'has-aspect-ratio': !! style?.dimensions?.aspectRatio,\n\t} );\n\n\t// Allow dimensions-based inline style overrides to override any global styles rules that\n\t// might be set for the block, and therefore affect the display of the aspect ratio.\n\tconst inlineStyleOverrides = {};\n\n\t// Apply rules to unset incompatible styles.\n\t// Note that a set `aspectRatio` will win out if both an aspect ratio and a minHeight are set.\n\t// This is because the aspect ratio is a newer block support, so (in theory) any aspect ratio\n\t// that is set should be intentional and should override any existing minHeight. The Cover block\n\t// and dimensions controls have logic that will manually clear the aspect ratio if a minHeight\n\t// is set.\n\tif ( style?.dimensions?.aspectRatio ) {\n\t\t// To ensure the aspect ratio does not get overridden by `minHeight` unset any existing rule.\n\t\tinlineStyleOverrides.minHeight = 'unset';\n\t} else if ( minHeight || style?.dimensions?.minHeight ) {\n\t\t// To ensure the minHeight does not get overridden by `aspectRatio` unset any existing rule.\n\t\tinlineStyleOverrides.aspectRatio = 'unset';\n\t}\n\n\treturn { className, style: inlineStyleOverrides };\n}\n\n/**\n * @deprecated\n */\nexport function useCustomSides() {\n\tdeprecated( 'wp.blockEditor.__experimentalUseCustomSides', {\n\t\tsince: '6.3',\n\t\tversion: '6.4',\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\thasBlockSupport,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { getCSSRules, compileCSS } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { BACKGROUND_SUPPORT_KEY, BackgroundImagePanel } from './background';\nimport { BORDER_SUPPORT_KEY, BorderPanel, SHADOW_SUPPORT_KEY } from './border';\nimport { COLOR_SUPPORT_KEY, ColorEdit } from './color';\nimport {\n\tTypographyPanel,\n\tTYPOGRAPHY_SUPPORT_KEY,\n\tTYPOGRAPHY_SUPPORT_KEYS,\n} from './typography';\nimport {\n\tDIMENSIONS_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n\tDimensionsPanel,\n} from './dimensions';\nimport {\n\tshouldSkipSerialization,\n\tuseStyleOverride,\n\tuseBlockSettings,\n} from './utils';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\nconst styleSupportKeys = [\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tDIMENSIONS_SUPPORT_KEY,\n\tBACKGROUND_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n\tSHADOW_SUPPORT_KEY,\n];\n\nconst hasStyleSupport = ( nameOrType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( nameOrType, key ) );\n\n/**\n * Returns the inline styles to add depending on the style object\n *\n * @param {Object} styles Styles configuration.\n *\n * @return {Object} Flattened CSS variables declaration.\n */\nexport function getInlineStyles( styles = {} ) {\n\tconst output = {};\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tgetCSSRules( styles ).forEach( ( rule ) => {\n\t\toutput[ rule.key ] = rule.value;\n\t} );\n\n\treturn output;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `style` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttribute( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * @constant\n * @type {Record}\n */\nconst skipSerializationPathsEdit = {\n\t[ `${ BORDER_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [ 'border' ],\n\t[ `${ COLOR_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tCOLOR_SUPPORT_KEY,\n\t],\n\t[ `${ TYPOGRAPHY_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t],\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t],\n\t[ `${ SPACING_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tSPACING_SUPPORT_KEY,\n\t],\n\t[ `${ SHADOW_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tSHADOW_SUPPORT_KEY,\n\t],\n};\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * Extends the Edit skip paths to enable skipping additional paths in just\n * the Save component. This allows a block support to be serialized within the\n * editor, while using an alternate approach, such as server-side rendering, when\n * the support is saved.\n *\n * @constant\n * @type {Record}\n */\nconst skipSerializationPathsSave = {\n\t...skipSerializationPathsEdit,\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.aspectRatio` ]: [\n\t\t`${ DIMENSIONS_SUPPORT_KEY }.aspectRatio`,\n\t], // Skip serialization of aspect ratio in save mode.\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: [ BACKGROUND_SUPPORT_KEY ], // Skip serialization of background support in save mode.\n};\n\nconst skipSerializationPathsSaveChecks = {\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.aspectRatio` ]: true,\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: true,\n};\n\n/**\n * A dictionary used to normalize feature names between support flags, style\n * object properties and __experimentSkipSerialization configuration arrays.\n *\n * This allows not having to provide a migration for a support flag and possible\n * backwards compatibility bridges, while still achieving consistency between\n * the support flag and the skip serialization array.\n *\n * @constant\n * @type {Record}\n */\nconst renamedFeatures = { gradients: 'gradient' };\n\n/**\n * A utility function used to remove one or more paths from a style object.\n * Works in a way similar to Lodash's `omit()`. See unit tests and examples below.\n *\n * It supports a single string path:\n *\n * ```\n * omitStyle( { color: 'red' }, 'color' ); // {}\n * ```\n *\n * or an array of paths:\n *\n * ```\n * omitStyle( { color: 'red', background: '#fff' }, [ 'color', 'background' ] ); // {}\n * ```\n *\n * It also allows you to specify paths at multiple levels in a string.\n *\n * ```\n * omitStyle( { typography: { textDecoration: 'underline' } }, 'typography.textDecoration' ); // {}\n * ```\n *\n * You can remove multiple paths at the same time:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t'typography.textDecoration',\n * \t\t\t'typography.textTransform',\n *\t\t]\n * );\n * // {}\n * ```\n *\n * You can also specify nested paths as arrays:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'typography', 'textDecoration' ],\n * \t\t\t[ 'typography', 'textTransform' ],\n *\t\t]\n * );\n * // {}\n * ```\n *\n * With regards to nesting of styles, infinite depth is supported:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\tborder: {\n * \t\t\t\tradius: {\n * \t\t\t\t\ttopLeft: '10px',\n * \t\t\t\t\ttopRight: '0.5rem',\n * \t\t\t\t}\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'border', 'radius', 'topRight' ],\n *\t\t]\n * );\n * // { border: { radius: { topLeft: '10px' } } }\n * ```\n *\n * The third argument, `preserveReference`, defines how to treat the input style object.\n * It is mostly necessary to properly handle mutation when recursively handling the style object.\n * Defaulting to `false`, this will always create a new object, avoiding to mutate `style`.\n * However, when recursing, we change that value to `true` in order to work with a single copy\n * of the original style object.\n *\n * @see https://lodash.com/docs/4.17.15#omit\n *\n * @param {Object} style Styles object.\n * @param {Array|string} paths Paths to remove.\n * @param {boolean} preserveReference True to mutate the `style` object, false otherwise.\n * @return {Object} Styles object with the specified paths removed.\n */\nexport function omitStyle( style, paths, preserveReference = false ) {\n\tif ( ! style ) {\n\t\treturn style;\n\t}\n\n\tlet newStyle = style;\n\tif ( ! preserveReference ) {\n\t\tnewStyle = JSON.parse( JSON.stringify( style ) );\n\t}\n\n\tif ( ! Array.isArray( paths ) ) {\n\t\tpaths = [ paths ];\n\t}\n\n\tpaths.forEach( ( path ) => {\n\t\tif ( ! Array.isArray( path ) ) {\n\t\t\tpath = path.split( '.' );\n\t\t}\n\n\t\tif ( path.length > 1 ) {\n\t\t\tconst [ firstSubpath, ...restPath ] = path;\n\t\t\tomitStyle( newStyle[ firstSubpath ], [ restPath ], true );\n\t\t} else if ( path.length === 1 ) {\n\t\t\tdelete newStyle[ path[ 0 ] ];\n\t\t}\n\t} );\n\n\treturn newStyle;\n}\n\n/**\n * Override props assigned to save component to inject the CSS variables definition.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n * @param {?Record} skipPaths An object of keys and paths to skip serialization.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps(\n\tprops,\n\tblockNameOrType,\n\tattributes,\n\tskipPaths = skipSerializationPathsSave\n) {\n\tif ( ! hasStyleSupport( blockNameOrType ) ) {\n\t\treturn props;\n\t}\n\n\tlet { style } = attributes;\n\tObject.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {\n\t\tconst skipSerialization =\n\t\t\tskipSerializationPathsSaveChecks[ indicator ] ||\n\t\t\tgetBlockSupport( blockNameOrType, indicator );\n\n\t\tif ( skipSerialization === true ) {\n\t\t\tstyle = omitStyle( style, path );\n\t\t}\n\n\t\tif ( Array.isArray( skipSerialization ) ) {\n\t\t\tskipSerialization.forEach( ( featureName ) => {\n\t\t\t\tconst feature = renamedFeatures[ featureName ] || featureName;\n\t\t\t\tstyle = omitStyle( style, [ [ ...path, feature ] ] );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tprops.style = {\n\t\t...getInlineStyles( style ),\n\t\t...props.style,\n\t};\n\n\treturn props;\n}\n\nfunction BlockStyleControls( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\t__unstableParentLayout,\n} ) {\n\tconst settings = useBlockSettings( name, __unstableParentLayout );\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst passedProps = {\n\t\tclientId,\n\t\tname,\n\t\tsetAttributes,\n\t\tsettings: {\n\t\t\t...settings,\n\t\t\ttypography: {\n\t\t\t\t...settings.typography,\n\t\t\t\t// The text alignment UI for individual blocks is rendered in\n\t\t\t\t// the block toolbar, so disable it here.\n\t\t\t\ttextAlign: false,\n\t\t\t},\n\t\t},\n\t};\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tedit: BlockStyleControls,\n\thasSupport: hasStyleSupport,\n\taddSaveProps,\n\tattributeKeys: [ 'style' ],\n\tuseBlockProps,\n};\n\n// Defines which element types are supported, including their hover styles or\n// any other elements that have been included under a single element type\n// e.g. heading and h1-h6.\nconst elementTypes = [\n\t{ elementType: 'button' },\n\t{ elementType: 'link', pseudo: [ ':hover' ] },\n\t{\n\t\telementType: 'heading',\n\t\telements: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ],\n\t},\n];\n\nfunction useBlockProps( { name, style } ) {\n\tconst blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(\n\t\tuseBlockProps\n\t) }`;\n\n\tconst baseElementSelector = `.${ blockElementsContainerIdentifier }`;\n\tconst blockElementStyles = style?.elements;\n\n\tconst styles = useMemo( () => {\n\t\tif ( ! blockElementStyles ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementCSSRules = [];\n\n\t\telementTypes.forEach( ( { elementType, pseudo, elements } ) => {\n\t\t\tconst skipSerialization = shouldSkipSerialization(\n\t\t\t\tname,\n\t\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t\telementType\n\t\t\t);\n\n\t\t\tif ( skipSerialization ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst elementStyles = blockElementStyles?.[ elementType ];\n\n\t\t\t// Process primary element type styles.\n\t\t\tif ( elementStyles ) {\n\t\t\t\tconst selector = scopeSelector(\n\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\tELEMENTS[ elementType ]\n\t\t\t\t);\n\n\t\t\t\telementCSSRules.push(\n\t\t\t\t\tcompileCSS( elementStyles, { selector } )\n\t\t\t\t);\n\n\t\t\t\t// Process any interactive states for the element type.\n\t\t\t\tif ( pseudo ) {\n\t\t\t\t\tpseudo.forEach( ( pseudoSelector ) => {\n\t\t\t\t\t\tif ( elementStyles[ pseudoSelector ] ) {\n\t\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\t\tcompileCSS( elementStyles[ pseudoSelector ], {\n\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\t\t`${ ELEMENTS[ elementType ] }${ pseudoSelector }`\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Process related elements e.g. h1-h6 for headings\n\t\t\tif ( elements ) {\n\t\t\t\telements.forEach( ( element ) => {\n\t\t\t\t\tif ( blockElementStyles[ element ] ) {\n\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\tcompileCSS( blockElementStyles[ element ], {\n\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\tELEMENTS[ element ]\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn elementCSSRules.length > 0\n\t\t\t? elementCSSRules.join( '' )\n\t\t\t: undefined;\n\t}, [ baseElementSelector, blockElementStyles, name ] );\n\n\tuseStyleOverride( { css: styles } );\n\n\treturn addSaveProps(\n\t\t{ className: blockElementsContainerIdentifier },\n\t\tname,\n\t\t{ style },\n\t\tskipSerializationPathsEdit\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addAttribute',\n\taddAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\nconst hasSettingsSupport = ( blockType ) =>\n\thasBlockSupport( blockType, '__experimentalSettings', false );\n\nfunction addAttribute( settings ) {\n\tif ( ! hasSettingsSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings?.attributes?.settings ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tsettings: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/settings/addAttribute',\n\taddAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst filter = (\n\t\n\t\t\n\t\n);\n\nexport default filter;\n","/**\n * WordPress dependencies\n */\nimport {\n\tColorIndicator,\n\tDropdown,\n\tDuotonePicker,\n\tDuotoneSwatch,\n\tMenuGroup,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport { Icon, filter } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\n\nfunction DuotoneControl( {\n\tid: idProp,\n\tcolorPalette,\n\tduotonePalette,\n\tdisableCustomColors,\n\tdisableCustomDuotone,\n\tvalue,\n\tonChange,\n} ) {\n\tlet toolbarIcon;\n\tif ( value === 'unset' ) {\n\t\ttoolbarIcon = (\n\t\t\t\n\t\t);\n\t} else if ( value ) {\n\t\ttoolbarIcon = ;\n\t} else {\n\t\ttoolbarIcon = ;\n\t}\n\n\tconst actionLabel = __( 'Apply duotone filter' );\n\tconst id = useInstanceId( DuotoneControl, 'duotone-control', idProp );\n\tconst descriptionId = `${ id }__description`;\n\n\treturn (\n\t\t {\n\t\t\t\tconst openOnArrowDown = ( event ) => {\n\t\t\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonToggle();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Create a two-tone color effect without losing your original image.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default DuotoneControl;\n","/**\n * External dependencies\n */\nimport { colord } from 'colord';\n\n/**\n * Convert a list of colors to an object of R, G, and B values.\n *\n * @param {string[]} colors Array of RBG color strings.\n *\n * @return {Object} R, G, and B values.\n */\nexport function getValuesFromColors( colors = [] ) {\n\tconst values = { r: [], g: [], b: [], a: [] };\n\n\tcolors.forEach( ( color ) => {\n\t\tconst rgbColor = colord( color ).toRgb();\n\t\tvalues.r.push( rgbColor.r / 255 );\n\t\tvalues.g.push( rgbColor.g / 255 );\n\t\tvalues.b.push( rgbColor.b / 255 );\n\t\tvalues.a.push( rgbColor.a );\n\t} );\n\n\treturn values;\n}\n\n/**\n * Stylesheet for disabling a global styles duotone filter.\n *\n * @param {string} selector Selector to disable the filter for.\n *\n * @return {string} Filter none style.\n */\nexport function getDuotoneUnsetStylesheet( selector ) {\n\treturn `${ selector }{filter:none}`;\n}\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {string} selector Selector to apply the filter to.\n * @param {string} id Unique id for this duotone filter.\n *\n * @return {string} Duotone filter style.\n */\nexport function getDuotoneStylesheet( selector, id ) {\n\treturn `${ selector }{filter:url(#${ id })}`;\n}\n\n/**\n * The SVG part of the duotone filter.\n *\n * @param {string} id Unique id for this duotone filter.\n * @param {string[]} colors Color strings from dark to light.\n *\n * @return {string} Duotone SVG.\n */\nexport function getDuotoneFilter( id, colors ) {\n\tconst values = getValuesFromColors( colors );\n\treturn `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n`;\n}\n","/**\n * Internal dependencies\n */\nimport { scopeSelector } from './utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/**\n * Determine the CSS selector for the block type and target provided, returning\n * it if available.\n *\n * @param {import('@wordpress/blocks').Block} blockType The block's type.\n * @param {string|string[]} target The desired selector's target e.g. `root`, delimited string, or array path.\n * @param {Object} options Options object.\n * @param {boolean} options.fallback Whether or not to fallback to broader selector.\n *\n * @return {?string} The CSS selector or `null` if no selector available.\n */\nexport function getBlockCSSSelector(\n\tblockType,\n\ttarget = 'root',\n\toptions = {}\n) {\n\tif ( ! target ) {\n\t\treturn null;\n\t}\n\n\tconst { fallback = false } = options;\n\tconst { name, selectors, supports } = blockType;\n\n\tconst hasSelectors = selectors && Object.keys( selectors ).length > 0;\n\tconst path = Array.isArray( target ) ? target.join( '.' ) : target;\n\n\t// Root selector.\n\n\t// Calculated before returning as it can be used as a fallback for feature\n\t// selectors later on.\n\tlet rootSelector = null;\n\n\tif ( hasSelectors && selectors.root ) {\n\t\t// Use the selectors API if available.\n\t\trootSelector = selectors?.root;\n\t} else if ( supports?.__experimentalSelector ) {\n\t\t// Use the old experimental selector supports property if set.\n\t\trootSelector = supports.__experimentalSelector;\n\t} else {\n\t\t// If no root selector found, generate default block class selector.\n\t\trootSelector =\n\t\t\t'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );\n\t}\n\n\t// Return selector if it's the root target we are looking for.\n\tif ( path === 'root' ) {\n\t\treturn rootSelector;\n\t}\n\n\t// If target is not `root` or `duotone` we have a feature or subfeature\n\t// as the target. If the target is a string convert to an array.\n\tconst pathArray = Array.isArray( target ) ? target : target.split( '.' );\n\n\t// Feature selectors ( may fallback to root selector );\n\tif ( pathArray.length === 1 ) {\n\t\tconst fallbackSelector = fallback ? rootSelector : null;\n\n\t\t// Prefer the selectors API if available.\n\t\tif ( hasSelectors ) {\n\t\t\t// Get selector from either `feature.root` or shorthand path.\n\t\t\tconst featureSelector =\n\t\t\t\tgetValueFromObjectPath( selectors, `${ path }.root`, null ) ||\n\t\t\t\tgetValueFromObjectPath( selectors, path, null );\n\n\t\t\t// Return feature selector if found or any available fallback.\n\t\t\treturn featureSelector || fallbackSelector;\n\t\t}\n\n\t\t// Try getting old experimental supports selector value.\n\t\tconst featureSelector = getValueFromObjectPath(\n\t\t\tsupports,\n\t\t\t`${ path }.__experimentalSelector`,\n\t\t\tnull\n\t\t);\n\n\t\t// If nothing to work with, provide fallback selector if available.\n\t\tif ( ! featureSelector ) {\n\t\t\treturn fallbackSelector;\n\t\t}\n\n\t\t// Scope the feature selector by the block's root selector.\n\t\treturn scopeSelector( rootSelector, featureSelector );\n\t}\n\n\t// Subfeature selector.\n\t// This may fallback either to parent feature or root selector.\n\tlet subfeatureSelector;\n\n\t// Use selectors API if available.\n\tif ( hasSelectors ) {\n\t\tsubfeatureSelector = getValueFromObjectPath( selectors, path, null );\n\t}\n\n\t// Only return if we have a subfeature selector.\n\tif ( subfeatureSelector ) {\n\t\treturn subfeatureSelector;\n\t}\n\n\t// To this point we don't have a subfeature selector. If a fallback has been\n\t// requested, remove subfeature from target path and return results of a\n\t// call for the parent feature's selector.\n\tif ( fallback ) {\n\t\treturn getBlockCSSSelector( blockType, pathArray[ 0 ], options );\n\t}\n\n\t// We tried.\n\treturn null;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalZStack as ZStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n\tMenuGroup,\n\tColorIndicator,\n\tDuotonePicker,\n\tDuotoneSwatch,\n\tDropdown,\n\tFlex,\n\tFlexItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\n\nconst EMPTY_ARRAY = [];\nfunction useMultiOriginColorPresets(\n\tsettings,\n\t{ presetSetting, defaultSetting }\n) {\n\tconst disableDefault = ! settings?.color?.[ defaultSetting ];\n\tconst userPresets =\n\t\tsettings?.color?.[ presetSetting ]?.custom || EMPTY_ARRAY;\n\tconst themePresets =\n\t\tsettings?.color?.[ presetSetting ]?.theme || EMPTY_ARRAY;\n\tconst defaultPresets =\n\t\tsettings?.color?.[ presetSetting ]?.default || EMPTY_ARRAY;\n\treturn useMemo(\n\t\t() => [\n\t\t\t...userPresets,\n\t\t\t...themePresets,\n\t\t\t...( disableDefault ? EMPTY_ARRAY : defaultPresets ),\n\t\t],\n\t\t[ disableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function useHasFiltersPanel( settings ) {\n\treturn useHasDuotoneControl( settings );\n}\n\nfunction useHasDuotoneControl( settings ) {\n\treturn (\n\t\tsettings.color.customDuotone ||\n\t\tsettings.color.defaultDuotone ||\n\t\tsettings.color.duotone.length > 0\n\t);\n}\n\nfunction FiltersToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tduotone: true,\n};\n\nconst popoverProps = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-duotone-control__popover',\n\theaderTitle: __( 'Duotone' ),\n};\n\nconst LabeledColorIndicator = ( { indicator, label } ) => (\n\t\n\t\t\n\t\t\t\n\t\t\t\t{ indicator === 'unset' || ! indicator ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t\t{ label }\n\t\n);\n\nexport default function FiltersPanel( {\n\tas: Wrapper = FiltersToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\n\t// Duotone\n\tconst hasDuotoneEnabled = useHasDuotoneControl( settings );\n\tconst duotonePalette = useMultiOriginColorPresets( settings, {\n\t\tpresetSetting: 'duotone',\n\t\tdefaultSetting: 'defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginColorPresets( settings, {\n\t\tpresetSetting: 'palette',\n\t\tdefaultSetting: 'defaultPalette',\n\t} );\n\tconst duotone = decodeValue( inheritedValue?.filter?.duotone );\n\tconst setDuotone = ( newValue ) => {\n\t\tconst duotonePreset = duotonePalette.find( ( { colors } ) => {\n\t\t\treturn colors === newValue;\n\t\t} );\n\t\tconst settedValue = duotonePreset\n\t\t\t? `var:preset|duotone|${ duotonePreset.slug }`\n\t\t\t: newValue;\n\t\tonChange( setImmutably( value, [ 'filter', 'duotone' ], settedValue ) );\n\t};\n\tconst hasDuotone = () => !! value?.filter?.duotone;\n\tconst resetDuotone = () => setDuotone( undefined );\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tfilter: {\n\t\t\t\t...previousValue.filter,\n\t\t\t\tduotone: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t{ hasDuotoneEnabled && (\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst toggleProps = {\n\t\t\t\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\t\t\t\tclassName: clsx( { 'is-open': isOpen } ),\n\t\t\t\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\trenderContent={ () => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'Create a two-tone color effect without losing your original image.'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\tInspectorControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSettings,\n} from '../components';\nimport {\n\tgetDuotoneFilter,\n\tgetDuotoneStylesheet,\n\tgetDuotoneUnsetStylesheet,\n} from '../components/duotone/utils';\nimport { getBlockCSSSelector } from '../components/global-styles/get-block-css-selector';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport { useBlockSettings, usePrivateStyleOverride } from './utils';\nimport { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nconst EMPTY_ARRAY = [];\n\n// Safari does not always update the duotone filter when the duotone colors\n// are changed. This browser check is later used to force a re-render of the block\n// element to ensure the duotone filter is updated. The check is included at the\n// root of this file as it only needs to be run once per page load.\nconst isSafari =\n\twindow?.navigator.userAgent &&\n\twindow.navigator.userAgent.includes( 'Safari' ) &&\n\t! window.navigator.userAgent.includes( 'Chrome' ) &&\n\t! window.navigator.userAgent.includes( 'Chromium' );\n\nextend( [ namesPlugin ] );\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst [ enableDefault, userPresets, themePresets, defaultPresets ] =\n\t\tuseSettings(\n\t\t\tdefaultSetting,\n\t\t\t`${ presetSetting }.custom`,\n\t\t\t`${ presetSetting }.theme`,\n\t\t\t`${ presetSetting }.default`\n\t\t);\n\treturn useMemo(\n\t\t() => [\n\t\t\t...( userPresets || EMPTY_ARRAY ),\n\t\t\t...( themePresets || EMPTY_ARRAY ),\n\t\t\t...( ( enableDefault && defaultPresets ) || EMPTY_ARRAY ),\n\t\t],\n\t\t[ enableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function getColorsFromDuotonePreset( duotone, duotonePalette ) {\n\tif ( ! duotone ) {\n\t\treturn;\n\t}\n\tconst preset = duotonePalette?.find( ( { slug } ) => {\n\t\treturn duotone === `var:preset|duotone|${ slug }`;\n\t} );\n\n\treturn preset ? preset.colors : undefined;\n}\n\nexport function getDuotonePresetFromColors( colors, duotonePalette ) {\n\tif ( ! colors || ! Array.isArray( colors ) ) {\n\t\treturn;\n\t}\n\n\tconst preset = duotonePalette?.find( ( duotonePreset ) => {\n\t\treturn duotonePreset?.colors?.every(\n\t\t\t( val, index ) => val === colors[ index ]\n\t\t);\n\t} );\n\n\treturn preset ? `var:preset|duotone|${ preset.slug }` : undefined;\n}\n\nfunction DuotonePanelPure( { style, setAttributes, name } ) {\n\tconst duotoneStyle = style?.color?.duotone;\n\tconst settings = useBlockSettings( name );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst [ enableCustomColors, enableCustomDuotone ] = useSettings(\n\t\t'color.custom',\n\t\t'color.customDuotone'\n\t);\n\tconst disableCustomColors = ! enableCustomColors;\n\tconst disableCustomDuotone =\n\t\t! enableCustomDuotone ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst duotonePresetOrColors = ! Array.isArray( duotoneStyle )\n\t\t? getColorsFromDuotonePreset( duotoneStyle, duotonePalette )\n\t\t: duotoneStyle;\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...newDuotone?.filter,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tconst maybePreset = getDuotonePresetFromColors(\n\t\t\t\t\t\t\tnewDuotone,\n\t\t\t\t\t\t\tduotonePalette\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\t\tduotone: maybePreset ?? newDuotone, // use preset or fallback to custom colors.\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: DuotonePanelPure,\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'filter.duotone' );\n\t},\n};\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\t// Previous `color.__experimentalDuotone` support flag is migrated via\n\t// block_type_metadata_settings filter in `lib/block-supports/duotone.php`.\n\tif ( ! hasBlockSupport( settings, 'filter.duotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\nfunction useDuotoneStyles( {\n\tclientId,\n\tid: filterId,\n\tselector: duotoneSelector,\n\tattribute: duotoneAttr,\n} ) {\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\n\t// Possible values for duotone attribute:\n\t// 1. Array of colors - e.g. ['#000000', '#ffffff'].\n\t// 2. Variable for an existing Duotone preset - e.g. 'var:preset|duotone|green-blue' or 'var(--wp--preset--duotone--green-blue)''\n\t// 3. A CSS string - e.g. 'unset' to remove globally applied duotone.\n\tconst isCustom = Array.isArray( duotoneAttr );\n\tconst duotonePreset = isCustom\n\t\t? undefined\n\t\t: getColorsFromDuotonePreset( duotoneAttr, duotonePalette );\n\tconst isPreset = typeof duotoneAttr === 'string' && duotonePreset;\n\tconst isCSS = typeof duotoneAttr === 'string' && ! isPreset;\n\n\t// Match the structure of WP_Duotone_Gutenberg::render_duotone_support() in PHP.\n\tlet colors = null;\n\tif ( isPreset ) {\n\t\t// Array of colors.\n\t\tcolors = duotonePreset;\n\t} else if ( isCSS ) {\n\t\t// CSS filter property string (e.g. 'unset').\n\t\tcolors = duotoneAttr;\n\t} else if ( isCustom ) {\n\t\t// Array of colors.\n\t\tcolors = duotoneAttr;\n\t}\n\n\t// Build the CSS selectors to which the filter will be applied.\n\tconst selectors = duotoneSelector.split( ',' );\n\n\tconst selectorsScoped = selectors.map( ( selectorPart ) => {\n\t\t// Assuming the selector part is a subclass selector (not a tag name)\n\t\t// so we can prepend the filter id class. If we want to support elements\n\t\t// such as `img` or namespaces, we'll need to add a case for that here.\n\t\treturn `.${ filterId }${ selectorPart.trim() }`;\n\t} );\n\n\tconst selector = selectorsScoped.join( ', ' );\n\n\tconst isValidFilter = Array.isArray( colors ) || colors === 'unset';\n\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tcss:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneStylesheet( selector, filterId )\n\t\t\t\t\t\t\t: getDuotoneUnsetStylesheet( selector ),\n\t\t\t\t\t__unstableType: 'presets',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tassets:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneFilter( filterId, colors )\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t__unstableType: 'svgs',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\n\tconst blockElement = useBlockElement( clientId );\n\n\tuseEffect( () => {\n\t\tif ( ! isValidFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Safari does not always update the duotone filter when the duotone\n\t\t// colors are changed. When using Safari, force the block element to be\n\t\t// repainted by the browser to ensure any changes are reflected\n\t\t// visually. This logic matches that used on the site frontend in\n\t\t// `block-supports/duotone.php`.\n\t\tif ( blockElement && isSafari ) {\n\t\t\tconst display = blockElement.style.display;\n\t\t\t// Switch to `inline-block` to force a repaint. In the editor,\n\t\t\t// `inline-block` is used instead of `none` to ensure that scroll\n\t\t\t// position is not affected, as `none` results in the editor\n\t\t\t// scrolling to the top of the block.\n\t\t\tblockElement.style.display = 'inline-block';\n\t\t\t// Simply accessing el.offsetHeight flushes layout and style changes\n\t\t\t// in WebKit without having to wait for setTimeout.\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tblockElement.offsetHeight;\n\t\t\tblockElement.style.display = display;\n\t\t}\n\t\t// `colors` must be a dependency so this effect runs when the colors\n\t\t// change in Safari.\n\t}, [ isValidFilter, blockElement, colors ] );\n}\n\nfunction useBlockProps( { clientId, name, style } ) {\n\tconst id = useInstanceId( useBlockProps );\n\tconst selector = useMemo( () => {\n\t\tconst blockType = getBlockType( name );\n\n\t\tif ( blockType ) {\n\t\t\t// Backwards compatibility for `supports.color.__experimentalDuotone`\n\t\t\t// is provided via the `block_type_metadata_settings` filter. If\n\t\t\t// `supports.filter.duotone` has not been set and the\n\t\t\t// experimental property has been, the experimental property\n\t\t\t// value is copied into `supports.filter.duotone`.\n\t\t\tconst duotoneSupport = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'filter.duotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( ! duotoneSupport ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// If the experimental duotone support was set, that value is\n\t\t\t// to be treated as a selector and requires scoping.\n\t\t\tconst experimentalDuotone = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'color.__experimentalDuotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( experimentalDuotone ) {\n\t\t\t\tconst rootSelector = getBlockCSSSelector( blockType );\n\t\t\t\treturn typeof experimentalDuotone === 'string'\n\t\t\t\t\t? scopeSelector( rootSelector, experimentalDuotone )\n\t\t\t\t\t: rootSelector;\n\t\t\t}\n\n\t\t\t// Regular filter.duotone support uses filter.duotone selectors with fallbacks.\n\t\t\treturn getBlockCSSSelector( blockType, 'filter.duotone', {\n\t\t\t\tfallback: true,\n\t\t\t} );\n\t\t}\n\t}, [ name ] );\n\n\tconst attribute = style?.color?.duotone;\n\n\tconst filterClass = `wp-duotone-${ id }`;\n\n\tconst shouldRender = selector && attribute;\n\n\tuseDuotoneStyles( {\n\t\tclientId,\n\t\tid: filterClass,\n\t\tselector,\n\t\tattribute,\n\t} );\n\n\treturn {\n\t\tclassName: shouldRender ? filterClass : '',\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blocksStore,\n\tisReusableBlock,\n\tisTemplatePart,\n\t__experimentalGetBlockLabel as getBlockLabel,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('@wordpress/blocks').WPIcon} WPIcon */\n\n/**\n * Contains basic block's information for display reasons.\n *\n * @typedef {Object} WPBlockDisplayInformation\n *\n * @property {boolean} isSynced True if is a reusable block or template part\n * @property {string} title Human-readable block type label.\n * @property {WPIcon} icon Block type icon.\n * @property {string} description A detailed block type description.\n * @property {string} anchor HTML anchor.\n * @property {name} name A custom, human readable name for the block.\n */\n\n/**\n * Get the display label for a block's position type.\n *\n * @param {Object} attributes Block attributes.\n * @return {string} The position type label.\n */\nfunction getPositionTypeLabel( attributes ) {\n\tconst positionType = attributes?.style?.position?.type;\n\n\tif ( positionType === 'sticky' ) {\n\t\treturn __( 'Sticky' );\n\t}\n\n\tif ( positionType === 'fixed' ) {\n\t\treturn __( 'Fixed' );\n\t}\n\n\treturn null;\n}\n\n/**\n * Hook used to try to find a matching block variation and return\n * the appropriate information for display reasons. In order to\n * to try to find a match we need to things:\n * 1. Block's client id to extract it's current attributes.\n * 2. A block variation should have set `isActive` prop to a proper function.\n *\n * If for any reason a block variation match cannot be found,\n * the returned information come from the Block Type.\n * If no blockType is found with the provided clientId, returns null.\n *\n * @param {string} clientId Block's client id.\n * @return {?WPBlockDisplayInformation} Block's display information, or `null` when the block or its type not found.\n */\n\nexport default function useBlockDisplayInformation( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tif ( ! blockType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isSynced =\n\t\t\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\t\t\tconst syncedTitle = isSynced\n\t\t\t\t? getBlockLabel( blockType, attributes )\n\t\t\t\t: undefined;\n\t\t\tconst title = syncedTitle || blockType.title;\n\t\t\tconst positionLabel = getPositionTypeLabel( attributes );\n\t\t\tconst blockTypeInfo = {\n\t\t\t\tisSynced,\n\t\t\t\ttitle,\n\t\t\t\ticon: blockType.icon,\n\t\t\t\tdescription: blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t\tname: attributes?.metadata?.name,\n\t\t\t};\n\t\t\tif ( ! match ) {\n\t\t\t\treturn blockTypeInfo;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisSynced,\n\t\t\t\ttitle: match.title || blockType.title,\n\t\t\t\ticon: match.icon || blockType.icon,\n\t\t\t\tdescription: match.description || blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t\tname: attributes?.metadata?.name,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { BaseControl, CustomSelectControl } from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo, Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../components/use-settings';\nimport InspectorControls from '../components/inspector-controls';\nimport useBlockDisplayInformation from '../components/use-block-display-information';\nimport { cleanEmptyObject, useStyleOverride } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nconst POSITION_SUPPORT_KEY = 'position';\n\nconst DEFAULT_OPTION = {\n\tkey: 'default',\n\tvalue: '',\n\tname: __( 'Default' ),\n};\n\nconst STICKY_OPTION = {\n\tkey: 'sticky',\n\tvalue: 'sticky',\n\tname: _x( 'Sticky', 'Name for the value of the CSS position property' ),\n\thint: __(\n\t\t'The block will stick to the top of the window instead of scrolling.'\n\t),\n};\n\nconst FIXED_OPTION = {\n\tkey: 'fixed',\n\tvalue: 'fixed',\n\tname: _x( 'Fixed', 'Name for the value of the CSS position property' ),\n\thint: __( 'The block will not move when the page is scrolled.' ),\n};\n\nconst POSITION_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nconst VALID_POSITION_TYPES = [ 'sticky', 'fixed' ];\n\n/**\n * Get calculated position CSS.\n *\n * @param {Object} props Component props.\n * @param {string} props.selector Selector to use.\n * @param {Object} props.style Style object.\n * @return {string} The generated CSS rules.\n */\nexport function getPositionCSS( { selector, style } ) {\n\tlet output = '';\n\n\tconst { type: positionType } = style?.position || {};\n\n\tif ( ! VALID_POSITION_TYPES.includes( positionType ) ) {\n\t\treturn output;\n\t}\n\n\toutput += `${ selector } {`;\n\toutput += `position: ${ positionType };`;\n\n\tPOSITION_SIDES.forEach( ( side ) => {\n\t\tif ( style?.position?.[ side ] !== undefined ) {\n\t\t\toutput += `${ side }: ${ style.position[ side ] };`;\n\t\t}\n\t} );\n\n\tif ( positionType === 'sticky' || positionType === 'fixed' ) {\n\t\t// TODO: Replace hard-coded z-index value with a z-index preset approach in theme.json.\n\t\toutput += `z-index: 10`;\n\t}\n\toutput += `}`;\n\n\treturn output;\n}\n\n/**\n * Determines if there is sticky position support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasStickyPositionSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, POSITION_SUPPORT_KEY );\n\treturn !! ( true === support || support?.sticky );\n}\n\n/**\n * Determines if there is fixed position support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasFixedPositionSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, POSITION_SUPPORT_KEY );\n\treturn !! ( true === support || support?.fixed );\n}\n\n/**\n * Determines if there is position support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasPositionSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, POSITION_SUPPORT_KEY );\n\treturn !! support;\n}\n\n/**\n * Checks if there is a current value in the position block support attributes.\n *\n * @param {Object} props Block props.\n * @return {boolean} Whether or not the block has a position value set.\n */\nexport function hasPositionValue( props ) {\n\treturn props.attributes.style?.position?.type !== undefined;\n}\n\n/**\n * Checks if the block is currently set to a sticky or fixed position.\n * This check is helpful for determining how to position block toolbars or other elements.\n *\n * @param {Object} attributes Block attributes.\n * @return {boolean} Whether or not the block is set to a sticky or fixed position.\n */\nexport function hasStickyOrFixedPositionValue( attributes ) {\n\tconst positionType = attributes?.style?.position?.type;\n\treturn positionType === 'sticky' || positionType === 'fixed';\n}\n\n/**\n * Resets the position block support attributes. This can be used when disabling\n * the position support controls for a block via a `ToolsPanel`.\n *\n * @param {Object} props Block props.\n * @param {Object} props.attributes Block's attributes.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetPosition( { attributes = {}, setAttributes } ) {\n\tconst { style = {} } = attributes;\n\n\tsetAttributes( {\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...style,\n\t\t\tposition: {\n\t\t\t\t...style?.position,\n\t\t\t\ttype: undefined,\n\t\t\t\ttop: undefined,\n\t\t\t\tright: undefined,\n\t\t\t\tbottom: undefined,\n\t\t\t\tleft: undefined,\n\t\t\t},\n\t\t} ),\n\t} );\n}\n\n/**\n * Custom hook that checks if position settings have been disabled.\n *\n * @param {string} name The name of the block.\n *\n * @return {boolean} Whether padding setting is disabled.\n */\nexport function useIsPositionDisabled( { name: blockName } = {} ) {\n\tconst [ allowFixed, allowSticky ] = useSettings(\n\t\t'position.fixed',\n\t\t'position.sticky'\n\t);\n\tconst isDisabled = ! allowFixed && ! allowSticky;\n\n\treturn ! hasPositionSupport( blockName ) || isDisabled;\n}\n\n/*\n * Position controls rendered in an inspector control panel.\n *\n * @param {Object} props\n *\n * @return {Element} Position panel.\n */\nexport function PositionPanelPure( {\n\tstyle = {},\n\tclientId,\n\tname: blockName,\n\tsetAttributes,\n} ) {\n\tconst allowFixed = hasFixedPositionSupport( blockName );\n\tconst allowSticky = hasStickyPositionSupport( blockName );\n\tconst value = style?.position?.type;\n\n\tconst { firstParentClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockParents } = select( blockEditorStore );\n\t\t\tconst parents = getBlockParents( clientId );\n\t\t\treturn { firstParentClientId: parents[ parents.length - 1 ] };\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst blockInformation = useBlockDisplayInformation( firstParentClientId );\n\tconst stickyHelpText =\n\t\tallowSticky && value === STICKY_OPTION.value && blockInformation\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: %s: the name of the parent block. */\n\t\t\t\t\t__(\n\t\t\t\t\t\t'The block will stick to the scrollable area of the parent %s block.'\n\t\t\t\t\t),\n\t\t\t\t\tblockInformation.title\n\t\t\t )\n\t\t\t: null;\n\n\tconst options = useMemo( () => {\n\t\tconst availableOptions = [ DEFAULT_OPTION ];\n\t\t// Display options if they are allowed, or if a block already has a valid value set.\n\t\t// This allows for a block to be switched off from a position type that is not allowed.\n\t\tif ( allowSticky || value === STICKY_OPTION.value ) {\n\t\t\tavailableOptions.push( STICKY_OPTION );\n\t\t}\n\t\tif ( allowFixed || value === FIXED_OPTION.value ) {\n\t\t\tavailableOptions.push( FIXED_OPTION );\n\t\t}\n\t\treturn availableOptions;\n\t}, [ allowFixed, allowSticky, value ] );\n\n\tconst onChangeType = ( next ) => {\n\t\t// For now, use a hard-coded `0px` value for the position.\n\t\t// `0px` is preferred over `0` as it can be used in `calc()` functions.\n\t\t// In the future, it could be useful to allow for an offset value.\n\t\tconst placementValue = '0px';\n\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\tposition: {\n\t\t\t\t...style?.position,\n\t\t\t\ttype: next,\n\t\t\t\ttop:\n\t\t\t\t\tnext === 'sticky' || next === 'fixed'\n\t\t\t\t\t\t? placementValue\n\t\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tconst selectedOption = value\n\t\t? options.find( ( option ) => option.value === value ) || DEFAULT_OPTION\n\t\t: DEFAULT_OPTION;\n\n\t// Only display position controls if there is at least one option to choose from.\n\treturn Platform.select( {\n\t\tweb:\n\t\t\toptions.length > 1 ? (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tonChangeType( selectedItem.value );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : null,\n\t\tnative: null,\n\t} );\n}\n\nexport default {\n\tedit: function Edit( props ) {\n\t\tconst isPositionDisabled = useIsPositionDisabled( props );\n\t\tif ( isPositionDisabled ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn ;\n\t},\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, POSITION_SUPPORT_KEY );\n\t},\n};\n\nfunction useBlockProps( { name, style } ) {\n\tconst hasPositionBlockSupport = hasBlockSupport(\n\t\tname,\n\t\tPOSITION_SUPPORT_KEY\n\t);\n\tconst isPositionDisabled = useIsPositionDisabled( { name } );\n\tconst allowPositionStyles = hasPositionBlockSupport && ! isPositionDisabled;\n\n\tconst id = useInstanceId( useBlockProps );\n\n\t// Higher specificity to override defaults in editor UI.\n\tconst positionSelector = `.wp-container-${ id }.wp-container-${ id }`;\n\n\t// Get CSS string for the current position values.\n\tlet css;\n\tif ( allowPositionStyles ) {\n\t\tcss =\n\t\t\tgetPositionCSS( {\n\t\t\t\tselector: positionSelector,\n\t\t\t\tstyle,\n\t\t\t} ) || '';\n\t}\n\n\t// Attach a `wp-container-` id-based class name.\n\tconst className = clsx( {\n\t\t[ `wp-container-${ id }` ]: allowPositionStyles && !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t[ `is-position-${ style?.position?.type }` ]:\n\t\t\tallowPositionStyles && !! css && !! style?.position?.type,\n\t} );\n\n\tuseStyleOverride( { css } );\n\n\treturn { className };\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n\tgetBlockSupport,\n\tgetBlockTypes,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\nimport { getCSSRules, getCSSValueFromRawStyle } from '@wordpress/style-engine';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tPRESET_METADATA,\n\tROOT_BLOCK_SELECTOR,\n\tROOT_CSS_PROPERTIES_SELECTOR,\n\tscopeSelector,\n\tscopeFeatureSelectors,\n\tappendToSelector,\n\tgetBlockStyleVariationSelector,\n\tgetResolvedValue,\n} from './utils';\nimport { getBlockCSSSelector } from './get-block-css-selector';\nimport { getTypographyFontSizeValue } from './typography-utils';\nimport { GlobalStylesContext } from './context';\nimport { useGlobalSetting } from './hooks';\nimport { getDuotoneFilter } from '../duotone/utils';\nimport { getGapCSSValue } from '../../hooks/gap';\nimport { setBackgroundStyleDefaults } from '../../hooks/background';\nimport { store as blockEditorStore } from '../../store';\nimport { LAYOUT_DEFINITIONS } from '../../layouts/definitions';\nimport { getValueFromObjectPath, setImmutably } from '../../utils/object';\nimport { unlock } from '../../lock-unlock';\n\n// Elements that rely on class names in their selectors.\nconst ELEMENT_CLASS_NAMES = {\n\tbutton: 'wp-element-button',\n\tcaption: 'wp-element-caption',\n};\n\n// List of block support features that can have their related styles\n// generated under their own feature level selector rather than the block's.\nconst BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {\n\t__experimentalBorder: 'border',\n\tcolor: 'color',\n\tspacing: 'spacing',\n\ttypography: 'typography',\n};\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Transform given preset tree into a set of style declarations.\n *\n * @param {Object} blockPresets\n * @param {Object} mergedSettings Merged theme.json settings.\n *\n * @return {Array} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {}, mergedSettings ) {\n\treturn PRESET_METADATA.reduce(\n\t\t( declarations, { path, valueKey, valueFunc, cssVarInfix } ) => {\n\t\t\tconst presetByOrigin = getValueFromObjectPath(\n\t\t\t\tblockPresets,\n\t\t\t\tpath,\n\t\t\t\t[]\n\t\t\t);\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( value ) => {\n\t\t\t\t\t\tif ( valueKey && ! valueFunc ) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ value[ valueKey ] }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tvalueFunc &&\n\t\t\t\t\t\t\ttypeof valueFunc === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ valueFunc( value, mergedSettings ) }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n}\n\n/**\n * Transform given preset tree into a set of preset class declarations.\n *\n * @param {?string} blockSelector\n * @param {Object} blockPresets\n * @return {string} CSS declarations for the preset classes.\n */\nfunction getPresetsClasses( blockSelector = '*', blockPresets = {} ) {\n\treturn PRESET_METADATA.reduce(\n\t\t( declarations, { path, cssVarInfix, classes } ) => {\n\t\t\tif ( ! classes ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst presetByOrigin = getValueFromObjectPath(\n\t\t\t\tblockPresets,\n\t\t\t\tpath,\n\t\t\t\t[]\n\t\t\t);\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( { slug } ) => {\n\t\t\t\t\t\tclasses.forEach( ( { classSuffix, propertyName } ) => {\n\t\t\t\t\t\t\tconst classSelectorToUse = `.has-${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) }-${ classSuffix }`;\n\t\t\t\t\t\t\tconst selectorToUse = blockSelector\n\t\t\t\t\t\t\t\t.split( ',' ) // Selector can be \"h1, h2, h3\"\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t`${ selector }${ classSelectorToUse }`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join( ',' );\n\t\t\t\t\t\t\tconst value = `var(--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) })`;\n\t\t\t\t\t\t\tdeclarations += `${ selectorToUse }{${ propertyName }: ${ value } !important;}`;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn declarations;\n\t\t},\n\t\t''\n\t);\n}\n\nfunction getPresetsSvgFilters( blockPresets = {} ) {\n\treturn PRESET_METADATA.filter(\n\t\t// Duotone are the only type of filters for now.\n\t\t( metadata ) => metadata.path.at( -1 ) === 'duotone'\n\t).flatMap( ( metadata ) => {\n\t\tconst presetByOrigin = getValueFromObjectPath(\n\t\t\tblockPresets,\n\t\t\tmetadata.path,\n\t\t\t{}\n\t\t);\n\t\treturn [ 'default', 'theme' ]\n\t\t\t.filter( ( origin ) => presetByOrigin[ origin ] )\n\t\t\t.flatMap( ( origin ) =>\n\t\t\t\tpresetByOrigin[ origin ].map( ( preset ) =>\n\t\t\t\t\tgetDuotoneFilter(\n\t\t\t\t\t\t`wp-duotone-${ preset.slug }`,\n\t\t\t\t\t\tpreset.colors\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.join( '' );\n\t} );\n}\n\nfunction flattenTree( input = {}, prefix, token ) {\n\tlet result = [];\n\tObject.keys( input ).forEach( ( key ) => {\n\t\tconst newKey = prefix + kebabCase( key.replace( '/', '-' ) );\n\t\tconst newLeaf = input[ key ];\n\n\t\tif ( newLeaf instanceof Object ) {\n\t\t\tconst newPrefix = newKey + token;\n\t\t\tresult = [ ...result, ...flattenTree( newLeaf, newPrefix, token ) ];\n\t\t} else {\n\t\t\tresult.push( `${ newKey }: ${ newLeaf }` );\n\t\t}\n\t} );\n\treturn result;\n}\n\n/**\n * Gets variation selector string from feature selector.\n *\n * @param {string} featureSelector The feature selector.\n *\n * @param {string} styleVariationSelector The style variation selector.\n * @return {string} Combined selector string.\n */\nfunction concatFeatureVariationSelectorString(\n\tfeatureSelector,\n\tstyleVariationSelector\n) {\n\tconst featureSelectors = featureSelector.split( ',' );\n\tconst combinedSelectors = [];\n\tfeatureSelectors.forEach( ( selector ) => {\n\t\tcombinedSelectors.push(\n\t\t\t`${ styleVariationSelector.trim() }${ selector.trim() }`\n\t\t);\n\t} );\n\treturn combinedSelectors.join( ', ' );\n}\n\n/**\n * Generate style declarations for a block's custom feature and subfeature\n * selectors.\n *\n * NOTE: The passed `styles` object will be mutated by this function.\n *\n * @param {Object} selectors Custom selectors object for a block.\n * @param {Object} styles A block's styles object.\n *\n * @return {Object} Style declarations.\n */\nconst getFeatureDeclarations = ( selectors, styles ) => {\n\tconst declarations = {};\n\n\tObject.entries( selectors ).forEach( ( [ feature, selector ] ) => {\n\t\t// We're only processing features/subfeatures that have styles.\n\t\tif ( feature === 'root' || ! styles?.[ feature ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isShorthand = typeof selector === 'string';\n\n\t\t// If we have a selector object instead of shorthand process it.\n\t\tif ( ! isShorthand ) {\n\t\t\tObject.entries( selector ).forEach(\n\t\t\t\t( [ subfeature, subfeatureSelector ] ) => {\n\t\t\t\t\t// Don't process root feature selector yet or any\n\t\t\t\t\t// subfeature that doesn't have a style.\n\t\t\t\t\tif (\n\t\t\t\t\t\tsubfeature === 'root' ||\n\t\t\t\t\t\t! styles?.[ feature ][ subfeature ]\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create a temporary styles object and build\n\t\t\t\t\t// declarations for subfeature.\n\t\t\t\t\tconst subfeatureStyles = {\n\t\t\t\t\t\t[ feature ]: {\n\t\t\t\t\t\t\t[ subfeature ]: styles[ feature ][ subfeature ],\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tconst newDeclarations =\n\t\t\t\t\t\tgetStylesDeclarations( subfeatureStyles );\n\n\t\t\t\t\t// Merge new declarations in with any others that\n\t\t\t\t\t// share the same selector.\n\t\t\t\t\tdeclarations[ subfeatureSelector ] = [\n\t\t\t\t\t\t...( declarations[ subfeatureSelector ] || [] ),\n\t\t\t\t\t\t...newDeclarations,\n\t\t\t\t\t];\n\n\t\t\t\t\t// Remove the subfeature's style now it will be\n\t\t\t\t\t// included under its own selector not the block's.\n\t\t\t\t\tdelete styles[ feature ][ subfeature ];\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Now subfeatures have been processed and removed, we can\n\t\t// process root, or shorthand, feature selectors.\n\t\tif ( isShorthand || selector.root ) {\n\t\t\tconst featureSelector = isShorthand ? selector : selector.root;\n\n\t\t\t// Create temporary style object and build declarations for feature.\n\t\t\tconst featureStyles = { [ feature ]: styles[ feature ] };\n\t\t\tconst newDeclarations = getStylesDeclarations( featureStyles );\n\n\t\t\t// Merge new declarations with any others that share the selector.\n\t\t\tdeclarations[ featureSelector ] = [\n\t\t\t\t...( declarations[ featureSelector ] || [] ),\n\t\t\t\t...newDeclarations,\n\t\t\t];\n\n\t\t\t// Remove the feature from the block's styles now as it will be\n\t\t\t// included under its own selector not the block's.\n\t\t\tdelete styles[ feature ];\n\t\t}\n\t} );\n\n\treturn declarations;\n};\n\n/**\n * Transform given style tree into a set of style declarations.\n *\n * @param {Object} blockStyles Block styles.\n *\n * @param {string} selector The selector these declarations should attach to.\n *\n * @param {boolean} useRootPaddingAlign Whether to use CSS custom properties in root selector.\n *\n * @param {Object} tree A theme.json tree containing layout definitions.\n *\n * @param {boolean} disableRootPadding Whether to force disable the root padding styles.\n * @return {Array} An array of style declarations.\n */\nexport function getStylesDeclarations(\n\tblockStyles = {},\n\tselector = '',\n\tuseRootPaddingAlign,\n\ttree = {},\n\tdisableRootPadding = false\n) {\n\tconst isRoot = ROOT_BLOCK_SELECTOR === selector;\n\tconst output = Object.entries( STYLE_PROPERTY ).reduce(\n\t\t(\n\t\t\tdeclarations,\n\t\t\t[ key, { value, properties, useEngine, rootOnly } ]\n\t\t) => {\n\t\t\tif ( rootOnly && ! isRoot ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\t\t\tconst pathToValue = value;\n\t\t\tif ( pathToValue[ 0 ] === 'elements' || useEngine ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst styleValue = getValueFromObjectPath(\n\t\t\t\tblockStyles,\n\t\t\t\tpathToValue\n\t\t\t);\n\n\t\t\t// Root-level padding styles don't currently support strings with CSS shorthand values.\n\t\t\t// This may change: https://github.com/WordPress/gutenberg/issues/40132.\n\t\t\tif (\n\t\t\t\tkey === '--wp--style--root--padding' &&\n\t\t\t\t( typeof styleValue === 'string' || ! useRootPaddingAlign )\n\t\t\t) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tif ( properties && typeof styleValue !== 'string' ) {\n\t\t\t\tObject.entries( properties ).forEach( ( entry ) => {\n\t\t\t\t\tconst [ name, prop ] = entry;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! getValueFromObjectPath( styleValue, [ prop ], false )\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Do not create a declaration\n\t\t\t\t\t\t// for sub-properties that don't have any value.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cssProperty = name.startsWith( '--' )\n\t\t\t\t\t\t? name\n\t\t\t\t\t\t: kebabCase( name );\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t`${ cssProperty }: ${ getCSSValueFromRawStyle(\n\t\t\t\t\t\t\tgetValueFromObjectPath( styleValue, [ prop ] )\n\t\t\t\t\t\t) }`\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else if (\n\t\t\t\tgetValueFromObjectPath( blockStyles, pathToValue, false )\n\t\t\t) {\n\t\t\t\tconst cssProperty = key.startsWith( '--' )\n\t\t\t\t\t? key\n\t\t\t\t\t: kebabCase( key );\n\t\t\t\tdeclarations.push(\n\t\t\t\t\t`${ cssProperty }: ${ getCSSValueFromRawStyle(\n\t\t\t\t\t\tgetValueFromObjectPath( blockStyles, pathToValue )\n\t\t\t\t\t) }`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n\n\t/*\n\t * Preprocess background image values.\n\t *\n\t * Note: As we absorb more and more styles into the engine, we could simplify this function.\n\t * A refactor is for the style engine to handle ref resolution (and possibly defaults)\n\t * via a public util used internally and externally. Theme.json tree and defaults could be passed\n\t * as options.\n\t */\n\tif ( !! blockStyles.background ) {\n\t\t/*\n\t\t * Resolve dynamic values before they are compiled by the style engine,\n\t\t * which doesn't (yet) resolve dynamic values.\n\t\t */\n\t\tif ( blockStyles.background?.backgroundImage ) {\n\t\t\tblockStyles.background.backgroundImage = getResolvedValue(\n\t\t\t\tblockStyles.background.backgroundImage,\n\t\t\t\ttree\n\t\t\t);\n\t\t}\n\n\t\t/*\n\t\t * Set default values for block background styles.\n\t\t * Top-level styles are an exception as they are applied to the body.\n\t\t */\n\t\tif ( ! isRoot && !! blockStyles.background?.backgroundImage?.id ) {\n\t\t\tblockStyles = {\n\t\t\t\t...blockStyles,\n\t\t\t\tbackground: {\n\t\t\t\t\t...blockStyles.background,\n\t\t\t\t\t...setBackgroundStyleDefaults( blockStyles.background ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\n\tconst extraRules = getCSSRules( blockStyles );\n\textraRules.forEach( ( rule ) => {\n\t\t// Don't output padding properties if padding variables are set or if we're not editing a full template.\n\t\tif (\n\t\t\tisRoot &&\n\t\t\t( useRootPaddingAlign || disableRootPadding ) &&\n\t\t\trule.key.startsWith( 'padding' )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst cssProperty = rule.key.startsWith( '--' )\n\t\t\t? rule.key\n\t\t\t: kebabCase( rule.key );\n\n\t\tlet ruleValue = getResolvedValue( rule.value, tree, null );\n\n\t\t// Calculate fluid typography rules where available.\n\t\tif ( cssProperty === 'font-size' ) {\n\t\t\t/*\n\t\t\t * getTypographyFontSizeValue() will check\n\t\t\t * if fluid typography has been activated and also\n\t\t\t * whether the incoming value can be converted to a fluid value.\n\t\t\t * Values that already have a \"clamp()\" function will not pass the test,\n\t\t\t * and therefore the original $value will be returned.\n\t\t\t */\n\t\t\truleValue = getTypographyFontSizeValue(\n\t\t\t\t{ size: ruleValue },\n\t\t\t\ttree?.settings\n\t\t\t);\n\t\t}\n\n\t\t// For aspect ratio to work, other dimensions rules (and Cover block defaults) must be unset.\n\t\t// This ensures that a fixed height does not override the aspect ratio.\n\t\tif ( cssProperty === 'aspect-ratio' ) {\n\t\t\toutput.push( 'min-height: unset' );\n\t\t}\n\n\t\toutput.push( `${ cssProperty }: ${ ruleValue }` );\n\t} );\n\n\treturn output;\n}\n\n/**\n * Get generated CSS for layout styles by looking up layout definitions provided\n * in theme.json, and outputting common layout styles, and specific blockGap values.\n *\n * @param {Object} props\n * @param {Object} props.layoutDefinitions Layout definitions, keyed by layout type.\n * @param {Object} props.style A style object containing spacing values.\n * @param {string} props.selector Selector used to group together layout styling rules.\n * @param {boolean} props.hasBlockGapSupport Whether or not the theme opts-in to blockGap support.\n * @param {boolean} props.hasFallbackGapSupport Whether or not the theme allows fallback gap styles.\n * @param {?string} props.fallbackGapValue An optional fallback gap value if no real gap value is available.\n * @return {string} Generated CSS rules for the layout styles.\n */\nexport function getLayoutStyles( {\n\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\tstyle,\n\tselector,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tfallbackGapValue,\n} ) {\n\tlet ruleset = '';\n\tlet gapValue = hasBlockGapSupport\n\t\t? getGapCSSValue( style?.spacing?.blockGap )\n\t\t: '';\n\n\t// Ensure a fallback gap value for the root layout definitions,\n\t// and use a fallback value if one is provided for the current block.\n\tif ( hasFallbackGapSupport ) {\n\t\tif ( selector === ROOT_BLOCK_SELECTOR ) {\n\t\t\tgapValue = ! gapValue ? '0.5em' : gapValue;\n\t\t} else if ( ! hasBlockGapSupport && fallbackGapValue ) {\n\t\t\tgapValue = fallbackGapValue;\n\t\t}\n\t}\n\n\tif ( gapValue && layoutDefinitions ) {\n\t\tObject.values( layoutDefinitions ).forEach(\n\t\t\t( { className, name, spacingStyles } ) => {\n\t\t\t\t// Allow outputting fallback gap styles for flex layout type when block gap support isn't available.\n\t\t\t\tif (\n\t\t\t\t\t! hasBlockGapSupport &&\n\t\t\t\t\t'flex' !== name &&\n\t\t\t\t\t'grid' !== name\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( spacingStyles?.length ) {\n\t\t\t\t\tspacingStyles.forEach( ( spacingStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( spacingStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( spacingStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${\n\t\t\t\t\t\t\t\t\t\t\tcssValue ? cssValue : gapValue\n\t\t\t\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tlet combinedSelector = '';\n\n\t\t\t\t\t\t\tif ( ! hasBlockGapSupport ) {\n\t\t\t\t\t\t\t\t// For fallback gap styles, use lower specificity, to ensure styles do not unintentionally override theme styles.\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `:where(.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`\n\t\t\t\t\t\t\t\t\t\t: `:where(${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `:root :where(.${ className })${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`\n\t\t\t\t\t\t\t\t\t\t: `:root :where(${ selector }-${ className })${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\n\t\t\t\t\t\t\t\t'; '\n\t\t\t\t\t\t\t) }; }`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\t// For backwards compatibility, ensure the legacy block gap CSS variable is still available.\n\t\tif ( selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport ) {\n\t\t\truleset += `${ ROOT_CSS_PROPERTIES_SELECTOR } { --wp--style--block-gap: ${ gapValue }; }`;\n\t\t}\n\t}\n\n\t// Output base styles\n\tif ( selector === ROOT_BLOCK_SELECTOR && layoutDefinitions ) {\n\t\tconst validDisplayModes = [ 'block', 'flex', 'grid' ];\n\t\tObject.values( layoutDefinitions ).forEach(\n\t\t\t( { className, displayMode, baseStyles } ) => {\n\t\t\t\tif (\n\t\t\t\t\tdisplayMode &&\n\t\t\t\t\tvalidDisplayModes.includes( displayMode )\n\t\t\t\t) {\n\t\t\t\t\truleset += `${ selector } .${ className } { display:${ displayMode }; }`;\n\t\t\t\t}\n\n\t\t\t\tif ( baseStyles?.length ) {\n\t\t\t\t\tbaseStyles.forEach( ( baseStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( baseStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( baseStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${ cssValue }`\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tconst combinedSelector = `.${ className }${\n\t\t\t\t\t\t\t\tbaseStyle?.selector || ''\n\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\n\t\t\t\t\t\t\t\t'; '\n\t\t\t\t\t\t\t) }; }`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\treturn ruleset;\n}\n\nconst STYLE_KEYS = [\n\t'border',\n\t'color',\n\t'dimensions',\n\t'spacing',\n\t'typography',\n\t'filter',\n\t'outline',\n\t'shadow',\n\t'background',\n];\n\nfunction pickStyleKeys( treeToPickFrom ) {\n\tif ( ! treeToPickFrom ) {\n\t\treturn {};\n\t}\n\tconst entries = Object.entries( treeToPickFrom );\n\tconst pickedEntries = entries.filter( ( [ key ] ) =>\n\t\tSTYLE_KEYS.includes( key )\n\t);\n\t// clone the style objects so that `getFeatureDeclarations` can remove consumed keys from it\n\tconst clonedEntries = pickedEntries.map( ( [ key, style ] ) => [\n\t\tkey,\n\t\tJSON.parse( JSON.stringify( style ) ),\n\t] );\n\treturn Object.fromEntries( clonedEntries );\n}\n\nexport const getNodesWithStyles = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.styles ) {\n\t\treturn nodes;\n\t}\n\n\t// Top-level.\n\tconst styles = pickStyleKeys( tree.styles );\n\tif ( styles ) {\n\t\tnodes.push( {\n\t\t\tstyles,\n\t\t\tselector: ROOT_BLOCK_SELECTOR,\n\t\t\t// Root selector (body) styles should not be wrapped in `:root where()` to keep\n\t\t\t// specificity at (0,0,1) and maintain backwards compatibility.\n\t\t\tskipSelectorWrapper: true,\n\t\t} );\n\t}\n\n\tObject.entries( ELEMENTS ).forEach( ( [ name, selector ] ) => {\n\t\tif ( tree.styles?.elements?.[ name ] ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: tree.styles?.elements?.[ name ],\n\t\t\t\tselector,\n\t\t\t\t// Top level elements that don't use a class name should not receive the\n\t\t\t\t// `:root :where()` wrapper to maintain backwards compatibility.\n\t\t\t\tskipSelectorWrapper: ! ELEMENT_CLASS_NAMES[ name ],\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// Iterate over blocks: they can have styles & elements.\n\tObject.entries( tree.styles?.blocks ?? {} ).forEach(\n\t\t( [ blockName, node ] ) => {\n\t\t\tconst blockStyles = pickStyleKeys( node );\n\n\t\t\tif ( node?.variations ) {\n\t\t\t\tconst variations = {};\n\t\t\t\tObject.entries( node.variations ).forEach(\n\t\t\t\t\t( [ variationName, variation ] ) => {\n\t\t\t\t\t\tvariations[ variationName ] =\n\t\t\t\t\t\t\tpickStyleKeys( variation );\n\t\t\t\t\t\tif ( variation?.css ) {\n\t\t\t\t\t\t\tvariations[ variationName ].css = variation.css;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst variationSelector =\n\t\t\t\t\t\t\tblockSelectors[ blockName ]\n\t\t\t\t\t\t\t\t?.styleVariationSelectors?.[ variationName ];\n\n\t\t\t\t\t\t// Process the variation's inner element styles.\n\t\t\t\t\t\t// This comes before the inner block styles so the\n\t\t\t\t\t\t// element styles within the block type styles take\n\t\t\t\t\t\t// precedence over these.\n\t\t\t\t\t\tObject.entries( variation?.elements ?? {} ).forEach(\n\t\t\t\t\t\t\t( [ element, elementStyles ] ) => {\n\t\t\t\t\t\t\t\tif ( elementStyles && ELEMENTS[ element ] ) {\n\t\t\t\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\t\t\t\tstyles: elementStyles,\n\t\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\t\t\tELEMENTS[ element ]\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Process the variations inner block type styles.\n\t\t\t\t\t\tObject.entries( variation?.blocks ?? {} ).forEach(\n\t\t\t\t\t\t\t( [\n\t\t\t\t\t\t\t\tvariationBlockName,\n\t\t\t\t\t\t\t\tvariationBlockStyles,\n\t\t\t\t\t\t\t] ) => {\n\t\t\t\t\t\t\t\tconst variationBlockSelector = scopeSelector(\n\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t?.selector\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst variationDuotoneSelector = scopeSelector(\n\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t?.duotoneSelector\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst variationFeatureSelectors =\n\t\t\t\t\t\t\t\t\tscopeFeatureSelectors(\n\t\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t\t?.featureSelectors\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst variationBlockStyleNodes =\n\t\t\t\t\t\t\t\t\tpickStyleKeys( variationBlockStyles );\n\n\t\t\t\t\t\t\t\tif ( variationBlockStyles?.css ) {\n\t\t\t\t\t\t\t\t\tvariationBlockStyleNodes.css =\n\t\t\t\t\t\t\t\t\t\tvariationBlockStyles.css;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\t\t\tselector: variationBlockSelector,\n\t\t\t\t\t\t\t\t\tduotoneSelector: variationDuotoneSelector,\n\t\t\t\t\t\t\t\t\tfeatureSelectors: variationFeatureSelectors,\n\t\t\t\t\t\t\t\t\tfallbackGapValue:\n\t\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t\t?.fallbackGapValue,\n\t\t\t\t\t\t\t\t\thasLayoutSupport:\n\t\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t\t?.hasLayoutSupport,\n\t\t\t\t\t\t\t\t\tstyles: variationBlockStyleNodes,\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t// Process element styles for the inner blocks\n\t\t\t\t\t\t\t\t// of the variation.\n\t\t\t\t\t\t\t\tObject.entries(\n\t\t\t\t\t\t\t\t\tvariationBlockStyles.elements ?? {}\n\t\t\t\t\t\t\t\t).forEach(\n\t\t\t\t\t\t\t\t\t( [\n\t\t\t\t\t\t\t\t\t\tvariationBlockElement,\n\t\t\t\t\t\t\t\t\t\tvariationBlockElementStyles,\n\t\t\t\t\t\t\t\t\t] ) => {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tvariationBlockElementStyles &&\n\t\t\t\t\t\t\t\t\t\t\tELEMENTS[ variationBlockElement ]\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\t\t\t\t\t\tstyles: variationBlockElementStyles,\n\t\t\t\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariationBlockSelector,\n\t\t\t\t\t\t\t\t\t\t\t\t\tELEMENTS[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariationBlockElement\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tblockStyles.variations = variations;\n\t\t\t}\n\n\t\t\tif ( blockSelectors?.[ blockName ]?.selector ) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tduotoneSelector:\n\t\t\t\t\t\tblockSelectors[ blockName ].duotoneSelector,\n\t\t\t\t\tfallbackGapValue:\n\t\t\t\t\t\tblockSelectors[ blockName ].fallbackGapValue,\n\t\t\t\t\thasLayoutSupport:\n\t\t\t\t\t\tblockSelectors[ blockName ].hasLayoutSupport,\n\t\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t\t\tstyles: blockStyles,\n\t\t\t\t\tfeatureSelectors:\n\t\t\t\t\t\tblockSelectors[ blockName ].featureSelectors,\n\t\t\t\t\tstyleVariationSelectors:\n\t\t\t\t\t\tblockSelectors[ blockName ].styleVariationSelectors,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tObject.entries( node?.elements ?? {} ).forEach(\n\t\t\t\t( [ elementName, value ] ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tvalue &&\n\t\t\t\t\t\tblockSelectors?.[ blockName ] &&\n\t\t\t\t\t\tELEMENTS[ elementName ]\n\t\t\t\t\t) {\n\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\tstyles: value,\n\t\t\t\t\t\t\tselector: blockSelectors[ blockName ]?.selector\n\t\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t\t.map( ( sel ) => {\n\t\t\t\t\t\t\t\t\tconst elementSelectors =\n\t\t\t\t\t\t\t\t\t\tELEMENTS[ elementName ].split( ',' );\n\t\t\t\t\t\t\t\t\treturn elementSelectors.map(\n\t\t\t\t\t\t\t\t\t\t( elementSelector ) =>\n\t\t\t\t\t\t\t\t\t\t\tsel + ' ' + elementSelector\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.join( ',' ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\treturn nodes;\n};\n\nexport const getNodesWithSettings = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.settings ) {\n\t\treturn nodes;\n\t}\n\n\tconst pickPresets = ( treeToPickFrom ) => {\n\t\tlet presets = {};\n\t\tPRESET_METADATA.forEach( ( { path } ) => {\n\t\t\tconst value = getValueFromObjectPath( treeToPickFrom, path, false );\n\t\t\tif ( value !== false ) {\n\t\t\t\tpresets = setImmutably( presets, path, value );\n\t\t\t}\n\t\t} );\n\t\treturn presets;\n\t};\n\n\t// Top-level.\n\tconst presets = pickPresets( tree.settings );\n\tconst custom = tree.settings?.custom;\n\tif ( Object.keys( presets ).length > 0 || custom ) {\n\t\tnodes.push( {\n\t\t\tpresets,\n\t\t\tcustom,\n\t\t\tselector: ROOT_CSS_PROPERTIES_SELECTOR,\n\t\t} );\n\t}\n\n\t// Blocks.\n\tObject.entries( tree.settings?.blocks ?? {} ).forEach(\n\t\t( [ blockName, node ] ) => {\n\t\t\tconst blockPresets = pickPresets( node );\n\t\t\tconst blockCustom = node.custom;\n\t\t\tif ( Object.keys( blockPresets ).length > 0 || blockCustom ) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tpresets: blockPresets,\n\t\t\t\t\tcustom: blockCustom,\n\t\t\t\t\tselector: blockSelectors[ blockName ]?.selector,\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t);\n\n\treturn nodes;\n};\n\nexport const toCustomProperties = ( tree, blockSelectors ) => {\n\tconst settings = getNodesWithSettings( tree, blockSelectors );\n\tlet ruleset = '';\n\tsettings.forEach( ( { presets, custom, selector } ) => {\n\t\tconst declarations = getPresetsDeclarations( presets, tree?.settings );\n\t\tconst customProps = flattenTree( custom, '--wp--custom--', '--' );\n\t\tif ( customProps.length > 0 ) {\n\t\t\tdeclarations.push( ...customProps );\n\t\t}\n\n\t\tif ( declarations.length > 0 ) {\n\t\t\truleset += `${ selector }{${ declarations.join( ';' ) };}`;\n\t\t}\n\t} );\n\n\treturn ruleset;\n};\n\nexport const toStyles = (\n\ttree,\n\tblockSelectors,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tdisableLayoutStyles = false,\n\tdisableRootPadding = false,\n\tstyleOptions = undefined\n) => {\n\t// These allow opting out of certain sets of styles.\n\tconst options = {\n\t\tblockGap: true,\n\t\tblockStyles: true,\n\t\tlayoutStyles: true,\n\t\tmarginReset: true,\n\t\tpresets: true,\n\t\trootPadding: true,\n\t\tvariationStyles: false,\n\t\t...styleOptions,\n\t};\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\tconst useRootPaddingAlign = tree?.settings?.useRootPaddingAwareAlignments;\n\tconst { contentSize, wideSize } = tree?.settings?.layout || {};\n\tconst hasBodyStyles =\n\t\toptions.marginReset || options.rootPadding || options.layoutStyles;\n\n\tlet ruleset = '';\n\n\tif ( options.presets && ( contentSize || wideSize ) ) {\n\t\truleset += `${ ROOT_CSS_PROPERTIES_SELECTOR } {`;\n\t\truleset = contentSize\n\t\t\t? ruleset + ` --wp--style--global--content-size: ${ contentSize };`\n\t\t\t: ruleset;\n\t\truleset = wideSize\n\t\t\t? ruleset + ` --wp--style--global--wide-size: ${ wideSize };`\n\t\t\t: ruleset;\n\t\truleset += '}';\n\t}\n\n\tif ( hasBodyStyles ) {\n\t\t/*\n\t\t * Reset default browser margin on the body element.\n\t\t * This is set on the body selector **before** generating the ruleset\n\t\t * from the `theme.json`. This is to ensure that if the `theme.json` declares\n\t\t * `margin` in its `spacing` declaration for the `body` element then these\n\t\t * user-generated values take precedence in the CSS cascade.\n\t\t * @link https://github.com/WordPress/gutenberg/issues/36147.\n\t\t */\n\t\truleset += ':where(body) {margin: 0;';\n\n\t\t// Root padding styles should be output for full templates, patterns and template parts.\n\t\tif ( options.rootPadding && useRootPaddingAlign ) {\n\t\t\t/*\n\t\t\t * These rules reproduce the ones from https://github.com/WordPress/gutenberg/blob/79103f124925d1f457f627e154f52a56228ed5ad/lib/class-wp-theme-json-gutenberg.php#L2508\n\t\t\t * almost exactly, but for the selectors that target block wrappers in the front end. This code only runs in the editor, so it doesn't need those selectors.\n\t\t\t */\n\t\t\truleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) }\n\t\t\t\t.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }\n\t\t\t\t.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }\n\t\t\t\t.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }\n\t\t\t\t.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0;\n\t\t\t\t`;\n\t\t}\n\n\t\truleset += '}';\n\t}\n\n\tif ( options.blockStyles ) {\n\t\tnodesWithStyles.forEach(\n\t\t\t( {\n\t\t\t\tselector,\n\t\t\t\tduotoneSelector,\n\t\t\t\tstyles,\n\t\t\t\tfallbackGapValue,\n\t\t\t\thasLayoutSupport,\n\t\t\t\tfeatureSelectors,\n\t\t\t\tstyleVariationSelectors,\n\t\t\t\tskipSelectorWrapper,\n\t\t\t} ) => {\n\t\t\t\t// Process styles for block support features with custom feature level\n\t\t\t\t// CSS selectors set.\n\t\t\t\tif ( featureSelectors ) {\n\t\t\t\t\tconst featureDeclarations = getFeatureDeclarations(\n\t\t\t\t\t\tfeatureSelectors,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t);\n\n\t\t\t\t\tObject.entries( featureDeclarations ).forEach(\n\t\t\t\t\t\t( [ cssSelector, declarations ] ) => {\n\t\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\t\tconst rules = declarations.join( ';' );\n\t\t\t\t\t\t\t\truleset += `:root :where(${ cssSelector }){${ rules };}`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Process duotone styles.\n\t\t\t\tif ( duotoneSelector ) {\n\t\t\t\t\tconst duotoneStyles = {};\n\t\t\t\t\tif ( styles?.filter ) {\n\t\t\t\t\t\tduotoneStyles.filter = styles.filter;\n\t\t\t\t\t\tdelete styles.filter;\n\t\t\t\t\t}\n\t\t\t\t\tconst duotoneDeclarations =\n\t\t\t\t\t\tgetStylesDeclarations( duotoneStyles );\n\t\t\t\t\tif ( duotoneDeclarations.length ) {\n\t\t\t\t\t\truleset += `${ duotoneSelector }{${ duotoneDeclarations.join(\n\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t) };}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process blockGap and layout styles.\n\t\t\t\tif (\n\t\t\t\t\t! disableLayoutStyles &&\n\t\t\t\t\t( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport )\n\t\t\t\t) {\n\t\t\t\t\truleset += getLayoutStyles( {\n\t\t\t\t\t\tstyle: styles,\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\t\tfallbackGapValue,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Process the remaining block styles (they use either normal block class or __experimentalSelector).\n\t\t\t\tconst styleDeclarations = getStylesDeclarations(\n\t\t\t\t\tstyles,\n\t\t\t\t\tselector,\n\t\t\t\t\tuseRootPaddingAlign,\n\t\t\t\t\ttree,\n\t\t\t\t\tdisableRootPadding\n\t\t\t\t);\n\t\t\t\tif ( styleDeclarations?.length ) {\n\t\t\t\t\tconst generalSelector = skipSelectorWrapper\n\t\t\t\t\t\t? selector\n\t\t\t\t\t\t: `:root :where(${ selector })`;\n\t\t\t\t\truleset += `${ generalSelector }{${ styleDeclarations.join(\n\t\t\t\t\t\t';'\n\t\t\t\t\t) };}`;\n\t\t\t\t}\n\t\t\t\tif ( styles?.css ) {\n\t\t\t\t\truleset += processCSSNesting(\n\t\t\t\t\t\tstyles.css,\n\t\t\t\t\t\t`:root :where(${ selector })`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( options.variationStyles && styleVariationSelectors ) {\n\t\t\t\t\tObject.entries( styleVariationSelectors ).forEach(\n\t\t\t\t\t\t( [ styleVariationName, styleVariationSelector ] ) => {\n\t\t\t\t\t\t\tconst styleVariations =\n\t\t\t\t\t\t\t\tstyles?.variations?.[ styleVariationName ];\n\t\t\t\t\t\t\tif ( styleVariations ) {\n\t\t\t\t\t\t\t\t// If the block uses any custom selectors for block support, add those first.\n\t\t\t\t\t\t\t\tif ( featureSelectors ) {\n\t\t\t\t\t\t\t\t\tconst featureDeclarations =\n\t\t\t\t\t\t\t\t\t\tgetFeatureDeclarations(\n\t\t\t\t\t\t\t\t\t\t\tfeatureSelectors,\n\t\t\t\t\t\t\t\t\t\t\tstyleVariations\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tObject.entries(\n\t\t\t\t\t\t\t\t\t\tfeatureDeclarations\n\t\t\t\t\t\t\t\t\t).forEach(\n\t\t\t\t\t\t\t\t\t\t( [ baseSelector, declarations ] ) => {\n\t\t\t\t\t\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst cssSelector =\n\t\t\t\t\t\t\t\t\t\t\t\t\tconcatFeatureVariationSelectorString(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbaseSelector,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyleVariationSelector\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tconst rules =\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeclarations.join( ';' );\n\t\t\t\t\t\t\t\t\t\t\t\truleset += `:root :where(${ cssSelector }){${ rules };}`;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Otherwise add regular selectors.\n\t\t\t\t\t\t\t\tconst styleVariationDeclarations =\n\t\t\t\t\t\t\t\t\tgetStylesDeclarations(\n\t\t\t\t\t\t\t\t\t\tstyleVariations,\n\t\t\t\t\t\t\t\t\t\tstyleVariationSelector,\n\t\t\t\t\t\t\t\t\t\tuseRootPaddingAlign,\n\t\t\t\t\t\t\t\t\t\ttree\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif ( styleVariationDeclarations.length ) {\n\t\t\t\t\t\t\t\t\truleset += `:root :where(${ styleVariationSelector }){${ styleVariationDeclarations.join(\n\t\t\t\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t\t\t\t) };}`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( styleVariations?.css ) {\n\t\t\t\t\t\t\t\t\truleset += processCSSNesting(\n\t\t\t\t\t\t\t\t\t\tstyleVariations.css,\n\t\t\t\t\t\t\t\t\t\t`:root :where(${ styleVariationSelector })`\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Check for pseudo selector in `styles` and handle separately.\n\t\t\t\tconst pseudoSelectorStyles = Object.entries( styles ).filter(\n\t\t\t\t\t( [ key ] ) => key.startsWith( ':' )\n\t\t\t\t);\n\n\t\t\t\tif ( pseudoSelectorStyles?.length ) {\n\t\t\t\t\tpseudoSelectorStyles.forEach(\n\t\t\t\t\t\t( [ pseudoKey, pseudoStyle ] ) => {\n\t\t\t\t\t\t\tconst pseudoDeclarations =\n\t\t\t\t\t\t\t\tgetStylesDeclarations( pseudoStyle );\n\n\t\t\t\t\t\t\tif ( ! pseudoDeclarations?.length ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// `selector` may be provided in a form\n\t\t\t\t\t\t\t// where block level selectors have sub element\n\t\t\t\t\t\t\t// selectors appended to them as a comma separated\n\t\t\t\t\t\t\t// string.\n\t\t\t\t\t\t\t// e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;\n\t\t\t\t\t\t\t// Split and append pseudo selector to create\n\t\t\t\t\t\t\t// the proper rules to target the elements.\n\t\t\t\t\t\t\tconst _selector = selector\n\t\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t\t.map( ( sel ) => sel + pseudoKey )\n\t\t\t\t\t\t\t\t.join( ',' );\n\n\t\t\t\t\t\t\t// As pseudo classes such as :hover, :focus etc. have class-level\n\t\t\t\t\t\t\t// specificity, they must use the `:root :where()` wrapper. This.\n\t\t\t\t\t\t\t// caps the specificity at `0-1-0` to allow proper nesting of variations\n\t\t\t\t\t\t\t// and block type element styles.\n\t\t\t\t\t\t\tconst pseudoRule = `:root :where(${ _selector }){${ pseudoDeclarations.join(\n\t\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t\t) };}`;\n\n\t\t\t\t\t\t\truleset += pseudoRule;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tif ( options.layoutStyles ) {\n\t\t/* Add alignment / layout styles */\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';\n\t}\n\n\tif ( options.blockGap && hasBlockGapSupport ) {\n\t\t// Use fallback of `0.5em` just in case, however if there is blockGap support, there should nearly always be a real value.\n\t\tconst gapValue =\n\t\t\tgetGapCSSValue( tree?.styles?.spacing?.blockGap ) || '0.5em';\n\t\truleset =\n\t\t\truleset +\n\t\t\t`:root :where(.wp-site-blocks) > * { margin-block-start: ${ gapValue }; margin-block-end: 0; }`;\n\t\truleset =\n\t\t\truleset +\n\t\t\t':root :where(.wp-site-blocks) > :first-child { margin-block-start: 0; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t':root :where(.wp-site-blocks) > :last-child { margin-block-end: 0; }';\n\t}\n\n\tif ( options.presets ) {\n\t\tnodesWithSettings.forEach( ( { selector, presets } ) => {\n\t\t\tif (\n\t\t\t\tROOT_BLOCK_SELECTOR === selector ||\n\t\t\t\tROOT_CSS_PROPERTIES_SELECTOR === selector\n\t\t\t) {\n\t\t\t\t// Do not add extra specificity for top-level classes.\n\t\t\t\tselector = '';\n\t\t\t}\n\n\t\t\tconst classes = getPresetsClasses( selector, presets );\n\t\t\tif ( classes.length > 0 ) {\n\t\t\t\truleset += classes;\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn ruleset;\n};\n\nexport function toSvgFilters( tree, blockSelectors ) {\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\treturn nodesWithSettings.flatMap( ( { presets } ) => {\n\t\treturn getPresetsSvgFilters( presets );\n\t} );\n}\n\nconst getSelectorsConfig = ( blockType, rootSelector ) => {\n\tif (\n\t\tblockType?.selectors &&\n\t\tObject.keys( blockType.selectors ).length > 0\n\t) {\n\t\treturn blockType.selectors;\n\t}\n\n\tconst config = { root: rootSelector };\n\tObject.entries( BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS ).forEach(\n\t\t( [ featureKey, featureName ] ) => {\n\t\t\tconst featureSelector = getBlockCSSSelector(\n\t\t\t\tblockType,\n\t\t\t\tfeatureKey\n\t\t\t);\n\n\t\t\tif ( featureSelector ) {\n\t\t\t\tconfig[ featureName ] = featureSelector;\n\t\t\t}\n\t\t}\n\t);\n\n\treturn config;\n};\n\nexport const getBlockSelectors = (\n\tblockTypes,\n\tgetBlockStyles,\n\tvariationInstanceId\n) => {\n\tconst result = {};\n\tblockTypes.forEach( ( blockType ) => {\n\t\tconst name = blockType.name;\n\t\tconst selector = getBlockCSSSelector( blockType );\n\t\tlet duotoneSelector = getBlockCSSSelector(\n\t\t\tblockType,\n\t\t\t'filter.duotone'\n\t\t);\n\n\t\t// Keep backwards compatibility for support.color.__experimentalDuotone.\n\t\tif ( ! duotoneSelector ) {\n\t\t\tconst rootSelector = getBlockCSSSelector( blockType );\n\t\t\tconst duotoneSupport = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'color.__experimentalDuotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tduotoneSelector =\n\t\t\t\tduotoneSupport && scopeSelector( rootSelector, duotoneSupport );\n\t\t}\n\n\t\tconst hasLayoutSupport =\n\t\t\t!! blockType?.supports?.layout ||\n\t\t\t!! blockType?.supports?.__experimentalLayout;\n\t\tconst fallbackGapValue =\n\t\t\tblockType?.supports?.spacing?.blockGap?.__experimentalDefault;\n\n\t\tconst blockStyleVariations = getBlockStyles( name );\n\t\tconst styleVariationSelectors = {};\n\t\tblockStyleVariations?.forEach( ( variation ) => {\n\t\t\tconst variationSuffix = variationInstanceId\n\t\t\t\t? `-${ variationInstanceId }`\n\t\t\t\t: '';\n\t\t\tconst variationName = `${ variation.name }${ variationSuffix }`;\n\t\t\tconst styleVariationSelector = getBlockStyleVariationSelector(\n\t\t\t\tvariationName,\n\t\t\t\tselector\n\t\t\t);\n\n\t\t\tstyleVariationSelectors[ variationName ] = styleVariationSelector;\n\t\t} );\n\n\t\t// For each block support feature add any custom selectors.\n\t\tconst featureSelectors = getSelectorsConfig( blockType, selector );\n\n\t\tresult[ name ] = {\n\t\t\tduotoneSelector,\n\t\t\tfallbackGapValue,\n\t\t\tfeatureSelectors: Object.keys( featureSelectors ).length\n\t\t\t\t? featureSelectors\n\t\t\t\t: undefined,\n\t\t\thasLayoutSupport,\n\t\t\tname,\n\t\t\tselector,\n\t\t\tstyleVariationSelectors: blockStyleVariations?.length\n\t\t\t\t? styleVariationSelectors\n\t\t\t\t: undefined,\n\t\t};\n\t} );\n\n\treturn result;\n};\n\n/**\n * If there is a separator block whose color is defined in theme.json via background,\n * update the separator color to the same value by using border color.\n *\n * @param {Object} config Theme.json configuration file object.\n * @return {Object} configTheme.json configuration file object updated.\n */\nfunction updateConfigWithSeparator( config ) {\n\tconst needsSeparatorStyleUpdate =\n\t\tconfig.styles?.blocks?.[ 'core/separator' ] &&\n\t\tconfig.styles?.blocks?.[ 'core/separator' ].color?.background &&\n\t\t! config.styles?.blocks?.[ 'core/separator' ].color?.text &&\n\t\t! config.styles?.blocks?.[ 'core/separator' ].border?.color;\n\tif ( needsSeparatorStyleUpdate ) {\n\t\treturn {\n\t\t\t...config,\n\t\t\tstyles: {\n\t\t\t\t...config.styles,\n\t\t\t\tblocks: {\n\t\t\t\t\t...config.styles.blocks,\n\t\t\t\t\t'core/separator': {\n\t\t\t\t\t\t...config.styles.blocks[ 'core/separator' ],\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...config.styles.blocks[ 'core/separator' ].color,\n\t\t\t\t\t\t\ttext: config.styles?.blocks[ 'core/separator' ]\n\t\t\t\t\t\t\t\t.color.background,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\treturn config;\n}\n\nexport function processCSSNesting( css, blockSelector ) {\n\tlet processedCSS = '';\n\n\tif ( ! css || css.trim() === '' ) {\n\t\treturn processedCSS;\n\t}\n\n\t// Split CSS nested rules.\n\tconst parts = css.split( '&' );\n\tparts.forEach( ( part ) => {\n\t\tif ( ! part || part.trim() === '' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isRootCss = ! part.includes( '{' );\n\t\tif ( isRootCss ) {\n\t\t\t// If the part doesn't contain braces, it applies to the root level.\n\t\t\tprocessedCSS += `:root :where(${ blockSelector }){${ part.trim() }}`;\n\t\t} else {\n\t\t\t// If the part contains braces, it's a nested CSS rule.\n\t\t\tconst splittedPart = part.replace( '}', '' ).split( '{' );\n\t\t\tif ( splittedPart.length !== 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [ nestedSelector, cssValue ] = splittedPart;\n\n\t\t\t// Handle pseudo elements such as ::before, ::after, etc. Regex will also\n\t\t\t// capture any leading combinator such as >, +, or ~, as well as spaces.\n\t\t\t// This allows pseudo elements as descendants e.g. `.parent ::before`.\n\t\t\tconst matches = nestedSelector.match( /([>+~\\s]*::[a-zA-Z-]+)/ );\n\t\t\tconst pseudoPart = matches ? matches[ 1 ] : '';\n\t\t\tconst withoutPseudoElement = matches\n\t\t\t\t? nestedSelector.replace( pseudoPart, '' ).trim()\n\t\t\t\t: nestedSelector.trim();\n\n\t\t\tlet combinedSelector;\n\t\t\tif ( withoutPseudoElement === '' ) {\n\t\t\t\t// Only contained a pseudo element to use the block selector to form\n\t\t\t\t// the final `:root :where()` selector.\n\t\t\t\tcombinedSelector = blockSelector;\n\t\t\t} else {\n\t\t\t\t// If the nested selector is a descendant of the block scope it with the\n\t\t\t\t// block selector. Otherwise append it to the block selector.\n\t\t\t\tcombinedSelector = nestedSelector.startsWith( ' ' )\n\t\t\t\t\t? scopeSelector( blockSelector, withoutPseudoElement )\n\t\t\t\t\t: appendToSelector( blockSelector, withoutPseudoElement );\n\t\t\t}\n\n\t\t\t// Build final rule, re-adding any pseudo element outside the `:where()`\n\t\t\t// to maintain valid CSS selector.\n\t\t\tprocessedCSS += `:root :where(${ combinedSelector })${ pseudoPart }{${ cssValue.trim() }}`;\n\t\t}\n\t} );\n\treturn processedCSS;\n}\n\n/**\n * Returns the global styles output using a global styles configuration.\n * If wishing to generate global styles and settings based on the\n * global styles config loaded in the editor context, use `useGlobalStylesOutput()`.\n * The use case for a custom config is to generate bespoke styles\n * and settings for previews, or other out-of-editor experiences.\n *\n * @param {Object} mergedConfig Global styles configuration.\n * @param {boolean} disableRootPadding Disable root padding styles.\n *\n * @return {Array} Array of stylesheets and settings.\n */\nexport function useGlobalStylesOutputWithConfig(\n\tmergedConfig = {},\n\tdisableRootPadding\n) {\n\tconst [ blockGap ] = useGlobalSetting( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGap !== null;\n\tconst hasFallbackGapSupport = ! hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.\n\tconst disableLayoutStyles = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn !! getSettings().disableLayoutStyles;\n\t} );\n\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\treturn useMemo( () => {\n\t\tif ( ! mergedConfig?.styles || ! mergedConfig?.settings ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst updatedConfig = updateConfigWithSeparator( mergedConfig );\n\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles\n\t\t);\n\n\t\tconst customProperties = toCustomProperties(\n\t\t\tupdatedConfig,\n\t\t\tblockSelectors\n\t\t);\n\n\t\tconst globalStyles = toStyles(\n\t\t\tupdatedConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tdisableRootPadding\n\t\t);\n\t\tconst svgs = toSvgFilters( updatedConfig, blockSelectors );\n\n\t\tconst styles = [\n\t\t\t{\n\t\t\t\tcss: customProperties,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcss: globalStyles,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t// Load custom CSS in own stylesheet so that any invalid CSS entered in the input won't break all the global styles in the editor.\n\t\t\t{\n\t\t\t\tcss: updatedConfig.styles.css ?? '',\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tassets: svgs,\n\t\t\t\t__unstableType: 'svg',\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t];\n\n\t\t// Loop through the blocks to check if there are custom CSS values.\n\t\t// If there are, get the block selector and push the selector together with\n\t\t// the CSS value to the 'stylesheets' array.\n\t\tgetBlockTypes().forEach( ( blockType ) => {\n\t\t\tif ( updatedConfig.styles.blocks[ blockType.name ]?.css ) {\n\t\t\t\tconst selector = blockSelectors[ blockType.name ].selector;\n\t\t\t\tstyles.push( {\n\t\t\t\t\tcss: processCSSNesting(\n\t\t\t\t\t\tupdatedConfig.styles.blocks[ blockType.name ]?.css,\n\t\t\t\t\t\tselector\n\t\t\t\t\t),\n\t\t\t\t\tisGlobalStyles: true,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn [ styles, updatedConfig.settings ];\n\t}, [\n\t\thasBlockGapSupport,\n\t\thasFallbackGapSupport,\n\t\tmergedConfig,\n\t\tdisableLayoutStyles,\n\t\tdisableRootPadding,\n\t\tgetBlockStyles,\n\t] );\n}\n\n/**\n * Returns the global styles output based on the current state of global styles config loaded in the editor context.\n *\n * @param {boolean} disableRootPadding Disable root padding styles.\n *\n * @return {Array} Array of stylesheets and settings.\n */\nexport function useGlobalStylesOutput( disableRootPadding = false ) {\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\treturn useGlobalStylesOutputWithConfig( mergedConfig, disableRootPadding );\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockTypes, store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tGlobalStylesContext,\n\ttoStyles,\n\tgetBlockSelectors,\n} from '../components/global-styles';\nimport { usePrivateStyleOverride } from './utils';\nimport { getValueFromObjectPath } from '../utils/object';\nimport { store as blockEditorStore } from '../store';\nimport { globalStylesDataKey } from '../store/private-keys';\nimport { unlock } from '../lock-unlock';\n\nconst VARIATION_PREFIX = 'is-style-';\n\nfunction getVariationMatches( className ) {\n\tif ( ! className ) {\n\t\treturn [];\n\t}\n\treturn className.split( /\\s+/ ).reduce( ( matches, name ) => {\n\t\tif ( name.startsWith( VARIATION_PREFIX ) ) {\n\t\t\tconst match = name.slice( VARIATION_PREFIX.length );\n\t\t\tif ( match !== 'default' ) {\n\t\t\t\tmatches.push( match );\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}, [] );\n}\n\n/**\n * Get the first block style variation that has been registered from the class string.\n *\n * @param {string} className CSS class string for a block.\n * @param {Array} registeredStyles Currently registered block styles.\n *\n * @return {string|null} The name of the first registered variation.\n */\nfunction getVariationNameFromClass( className, registeredStyles = [] ) {\n\t// The global flag affects how capturing groups work in JS. So the regex\n\t// below will only return full CSS classes not just the variation name.\n\tconst matches = getVariationMatches( className );\n\n\tif ( ! matches ) {\n\t\treturn null;\n\t}\n\n\tfor ( const variation of matches ) {\n\t\tif ( registeredStyles.some( ( style ) => style.name === variation ) ) {\n\t\t\treturn variation;\n\t\t}\n\t}\n\treturn null;\n}\n\n// A helper component to apply a style override using the useStyleOverride hook.\nfunction OverrideStyles( { override } ) {\n\tusePrivateStyleOverride( override );\n}\n\n/**\n * This component is used to generate new block style variation overrides\n * based on an incoming theme config. If a matching style is found in the config,\n * a new override is created and returned. The overrides can be used in conjunction with\n * useStyleOverride to apply the new styles to the editor. Its use is\n * subject to change.\n *\n * @param {Object} props Props.\n * @param {Object} props.config A global styles object, containing settings and styles.\n * @return {JSX.Element|undefined} An array of new block variation overrides.\n */\nexport function __unstableBlockStyleVariationOverridesWithConfig( { config } ) {\n\tconst { getBlockStyles, overrides } = useSelect(\n\t\t( select ) => ( {\n\t\t\tgetBlockStyles: select( blocksStore ).getBlockStyles,\n\t\t\toverrides: unlock( select( blockEditorStore ) ).getStyleOverrides(),\n\t\t} ),\n\t\t[]\n\t);\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\n\tconst overridesWithConfig = useMemo( () => {\n\t\tif ( ! overrides?.length ) {\n\t\t\treturn;\n\t\t}\n\t\tconst newOverrides = [];\n\t\tconst overriddenClientIds = [];\n\t\tfor ( const [ , override ] of overrides ) {\n\t\t\tif (\n\t\t\t\toverride?.variation &&\n\t\t\t\toverride?.clientId &&\n\t\t\t\t/*\n\t\t\t\t * Because this component overwrites existing style overrides,\n\t\t\t\t * filter out any overrides that are already present in the store.\n\t\t\t\t */\n\t\t\t\t! overriddenClientIds.includes( override.clientId )\n\t\t\t) {\n\t\t\t\tconst blockName = getBlockName( override.clientId );\n\t\t\t\tconst configStyles =\n\t\t\t\t\tconfig?.styles?.blocks?.[ blockName ]?.variations?.[\n\t\t\t\t\t\toverride.variation\n\t\t\t\t\t];\n\t\t\t\tif ( configStyles ) {\n\t\t\t\t\tconst variationConfig = {\n\t\t\t\t\t\tsettings: config?.settings,\n\t\t\t\t\t\t// The variation style data is all that is needed to generate\n\t\t\t\t\t\t// the styles for the current application to a block. The variation\n\t\t\t\t\t\t// name is updated to match the instance specific class name.\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\tblocks: {\n\t\t\t\t\t\t\t\t[ blockName ]: {\n\t\t\t\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t\t\t\t[ `${ override.variation }-${ override.clientId }` ]:\n\t\t\t\t\t\t\t\t\t\t\tconfigStyles,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tconst blockSelectors = getBlockSelectors(\n\t\t\t\t\t\tgetBlockTypes(),\n\t\t\t\t\t\tgetBlockStyles,\n\t\t\t\t\t\toverride.clientId\n\t\t\t\t\t);\n\t\t\t\t\tconst hasBlockGapSupport = false;\n\t\t\t\t\tconst hasFallbackGapSupport = true;\n\t\t\t\t\tconst disableLayoutStyles = true;\n\t\t\t\t\tconst disableRootPadding = true;\n\t\t\t\t\tconst variationStyles = toStyles(\n\t\t\t\t\t\tvariationConfig,\n\t\t\t\t\t\tblockSelectors,\n\t\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\t\tdisableLayoutStyles,\n\t\t\t\t\t\tdisableRootPadding,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tblockGap: false,\n\t\t\t\t\t\t\tblockStyles: true,\n\t\t\t\t\t\t\tlayoutStyles: false,\n\t\t\t\t\t\t\tmarginReset: false,\n\t\t\t\t\t\t\tpresets: false,\n\t\t\t\t\t\t\trootPadding: false,\n\t\t\t\t\t\t\tvariationStyles: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tnewOverrides.push( {\n\t\t\t\t\t\tid: `${ override.variation }-${ override.clientId }`,\n\t\t\t\t\t\tcss: variationStyles,\n\t\t\t\t\t\t__unstableType: 'variation',\n\t\t\t\t\t\tvariation: override.variation,\n\t\t\t\t\t\t// The clientId will be stored with the override and used to ensure\n\t\t\t\t\t\t// the order of overrides matches the order of blocks so that the\n\t\t\t\t\t\t// correct CSS cascade is maintained.\n\t\t\t\t\t\tclientId: override.clientId,\n\t\t\t\t\t} );\n\t\t\t\t\toverriddenClientIds.push( override.clientId );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn newOverrides;\n\t}, [ config, overrides, getBlockStyles, getBlockName ] );\n\n\tif ( ! overridesWithConfig || ! overridesWithConfig.length ) {\n\t\treturn;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ overridesWithConfig.map( ( override ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\n/**\n * Retrieves any variation styles data and resolves any referenced values.\n *\n * @param {Object} globalStyles A complete global styles object, containing settings and styles.\n * @param {string} name The name of the desired block type.\n * @param {variation} variation The of the block style variation to retrieve data for.\n *\n * @return {Object|undefined} The global styles data for the specified variation.\n */\nexport function getVariationStylesWithRefValues(\n\tglobalStyles,\n\tname,\n\tvariation\n) {\n\tif ( ! globalStyles?.styles?.blocks?.[ name ]?.variations?.[ variation ] ) {\n\t\treturn;\n\t}\n\n\t// Helper to recursively look for `ref` values to resolve.\n\tconst replaceRefs = ( variationStyles ) => {\n\t\tObject.keys( variationStyles ).forEach( ( key ) => {\n\t\t\tconst value = variationStyles[ key ];\n\n\t\t\t// Only process objects.\n\t\t\tif ( typeof value === 'object' && value !== null ) {\n\t\t\t\t// Process `ref` value if present.\n\t\t\t\tif ( value.ref !== undefined ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value.ref !== 'string' ||\n\t\t\t\t\t\tvalue.ref.trim() === ''\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Remove invalid ref.\n\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Resolve `ref` value.\n\t\t\t\t\t\tconst refValue = getValueFromObjectPath(\n\t\t\t\t\t\t\tglobalStyles,\n\t\t\t\t\t\t\tvalue.ref\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( refValue ) {\n\t\t\t\t\t\t\tvariationStyles[ key ] = refValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Recursively resolve `ref` values in nested objects.\n\t\t\t\t\treplaceRefs( value );\n\n\t\t\t\t\t// After recursion, if value is empty due to explicitly\n\t\t\t\t\t// `undefined` ref value, remove it.\n\t\t\t\t\tif ( Object.keys( value ).length === 0 ) {\n\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n\t// Deep clone variation node to avoid mutating it within global styles and losing refs.\n\tconst styles = JSON.parse(\n\t\tJSON.stringify(\n\t\t\tglobalStyles.styles.blocks[ name ].variations[ variation ]\n\t\t)\n\t);\n\treplaceRefs( styles );\n\n\treturn styles;\n}\n\nfunction useBlockStyleVariation( name, variation, clientId ) {\n\t// Prefer global styles data in GlobalStylesContext, which are available\n\t// if in the site editor. Otherwise fall back to whatever is in the\n\t// editor settings and available in the post editor.\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst { globalSettings, globalStyles } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tglobalSettings: settings.__experimentalFeatures,\n\t\t\tglobalStyles: settings[ globalStylesDataKey ],\n\t\t};\n\t}, [] );\n\n\treturn useMemo( () => {\n\t\tconst variationStyles = getVariationStylesWithRefValues(\n\t\t\t{\n\t\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t\tstyles: mergedConfig?.styles ?? globalStyles,\n\t\t\t},\n\t\t\tname,\n\t\t\tvariation\n\t\t);\n\n\t\treturn {\n\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t// The variation style data is all that is needed to generate\n\t\t\t// the styles for the current application to a block. The variation\n\t\t\t// name is updated to match the instance specific class name.\n\t\t\tstyles: {\n\t\t\t\tblocks: {\n\t\t\t\t\t[ name ]: {\n\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t[ `${ variation }-${ clientId }` ]: variationStyles,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}, [\n\t\tmergedConfig,\n\t\tglobalSettings,\n\t\tglobalStyles,\n\t\tvariation,\n\t\tclientId,\n\t\tname,\n\t] );\n}\n\n// Rather than leveraging `useInstanceId` here, the `clientId` is used.\n// This is so that the variation style override's ID is predictable\n// when the order of applied style variations changes.\nfunction useBlockProps( { name, className, clientId } ) {\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\tconst registeredStyles = getBlockStyles( name );\n\tconst variation = getVariationNameFromClass( className, registeredStyles );\n\tconst variationClass = `${ VARIATION_PREFIX }${ variation }-${ clientId }`;\n\n\tconst { settings, styles } = useBlockStyleVariation(\n\t\tname,\n\t\tvariation,\n\t\tclientId\n\t);\n\n\tconst variationStyles = useMemo( () => {\n\t\tif ( ! variation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst variationConfig = { settings, styles };\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles,\n\t\t\tclientId\n\t\t);\n\t\tconst hasBlockGapSupport = false;\n\t\tconst hasFallbackGapSupport = true;\n\t\tconst disableLayoutStyles = true;\n\t\tconst disableRootPadding = true;\n\n\t\treturn toStyles(\n\t\t\tvariationConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tdisableRootPadding,\n\t\t\t{\n\t\t\t\tblockGap: false,\n\t\t\t\tblockStyles: true,\n\t\t\t\tlayoutStyles: false,\n\t\t\t\tmarginReset: false,\n\t\t\t\tpresets: false,\n\t\t\t\trootPadding: false,\n\t\t\t\tvariationStyles: true,\n\t\t\t}\n\t\t);\n\t}, [ variation, settings, styles, getBlockStyles, clientId ] );\n\n\tusePrivateStyleOverride( {\n\t\tid: `variation-${ clientId }`,\n\t\tcss: variationStyles,\n\t\t__unstableType: 'variation',\n\t\tvariation,\n\t\t// The clientId will be stored with the override and used to ensure\n\t\t// the order of overrides matches the order of blocks so that the\n\t\t// correct CSS cascade is maintained.\n\t\tclientId,\n\t} );\n\n\treturn variation ? { className: variationClass } : {};\n}\n\nexport default {\n\thasSupport: () => true,\n\tattributeKeys: [ 'className' ],\n\tisMatch: ( { className } ) => getVariationMatches( className ).length > 0,\n\tuseBlockProps,\n};\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tButtonGroup,\n\tToggleControl,\n\tPanelBody,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport { useSettings } from '../components/use-settings';\nimport { getLayoutType, getLayoutTypes } from '../layouts';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { LAYOUT_DEFINITIONS } from '../layouts/definitions';\nimport { useBlockSettings, useStyleOverride } from './utils';\nimport { unlock } from '../lock-unlock';\n\nconst layoutBlockSupportKey = 'layout';\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nfunction hasLayoutBlockSupport( blockName ) {\n\treturn (\n\t\thasBlockSupport( blockName, 'layout' ) ||\n\t\thasBlockSupport( blockName, '__experimentalLayout' )\n\t);\n}\n\n/**\n * Generates the utility classnames for the given block's layout attributes.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n *\n * @return { Array } Array of CSS classname strings.\n */\nexport function useLayoutClasses( blockAttributes = {}, blockName = '' ) {\n\tconst { layout } = blockAttributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( blockName, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst layoutClassnames = [];\n\n\tif ( LAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className ) {\n\t\tconst baseClassName =\n\t\t\tLAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className;\n\t\tconst splitBlockName = blockName.split( '/' );\n\t\tconst fullBlockName =\n\t\t\tsplitBlockName[ 0 ] === 'core'\n\t\t\t\t? splitBlockName.pop()\n\t\t\t\t: splitBlockName.join( '-' );\n\t\tconst compoundClassName = `wp-block-${ fullBlockName }-${ baseClassName }`;\n\t\tlayoutClassnames.push( baseClassName, compoundClassName );\n\t}\n\n\tconst hasGlobalPadding = useSelect(\n\t\t( select ) => {\n\t\t\treturn (\n\t\t\t\t( usedLayout?.inherit ||\n\t\t\t\t\tusedLayout?.contentSize ||\n\t\t\t\t\tusedLayout?.type === 'constrained' ) &&\n\t\t\t\tselect( blockEditorStore ).getSettings().__experimentalFeatures\n\t\t\t\t\t?.useRootPaddingAwareAlignments\n\t\t\t);\n\t\t},\n\t\t[ usedLayout?.contentSize, usedLayout?.inherit, usedLayout?.type ]\n\t);\n\n\tif ( hasGlobalPadding ) {\n\t\tlayoutClassnames.push( 'has-global-padding' );\n\t}\n\n\tif ( usedLayout?.orientation ) {\n\t\tlayoutClassnames.push( `is-${ kebabCase( usedLayout.orientation ) }` );\n\t}\n\n\tif ( usedLayout?.justifyContent ) {\n\t\tlayoutClassnames.push(\n\t\t\t`is-content-justification-${ kebabCase(\n\t\t\t\tusedLayout.justifyContent\n\t\t\t) }`\n\t\t);\n\t}\n\n\tif ( usedLayout?.flexWrap && usedLayout.flexWrap === 'nowrap' ) {\n\t\tlayoutClassnames.push( 'is-nowrap' );\n\t}\n\n\treturn layoutClassnames;\n}\n\n/**\n * Generates a CSS rule with the given block's layout styles.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n * @param { string } selector A selector to use in generating the CSS rule.\n *\n * @return { string } CSS rule.\n */\nexport function useLayoutStyles( blockAttributes = {}, blockName, selector ) {\n\tconst { layout = {}, style = {} } = blockAttributes;\n\t// Update type for blocks using legacy layouts.\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || {};\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst [ blockGapSupport ] = useSettings( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\treturn fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName,\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\thasBlockGapSupport,\n\t} );\n}\n\nfunction LayoutPanelPure( {\n\tlayout,\n\tsetAttributes,\n\tname: blockName,\n\tclientId,\n} ) {\n\tconst settings = useBlockSettings( blockName );\n\t// Block settings come from theme.json under settings.[blockName].\n\tconst { layout: layoutSettings } = settings;\n\tconst { themeSupportsLayout } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tthemeSupportsLayout: getSettings().supportsLayout,\n\t\t};\n\t}, [] );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\t// Layout block support comes from the block's block.json.\n\tconst layoutBlockSupport = getBlockSupport(\n\t\tblockName,\n\t\tlayoutBlockSupportKey,\n\t\t{}\n\t);\n\tconst blockSupportAndThemeSettings = {\n\t\t...layoutSettings,\n\t\t...layoutBlockSupport,\n\t};\n\tconst {\n\t\tallowSwitching,\n\t\tallowEditing = true,\n\t\tallowInheriting = true,\n\t\tdefault: defaultBlockLayout,\n\t} = blockSupportAndThemeSettings;\n\n\tif ( ! allowEditing ) {\n\t\treturn null;\n\t}\n\n\t/*\n\t * Try to find the layout type from either the\n\t * block's layout settings or any saved layout config.\n\t */\n\tconst blockSupportAndLayout = {\n\t\t...layoutBlockSupport,\n\t\t...layout,\n\t};\n\tconst { type, default: { type: defaultType = 'default' } = {} } =\n\t\tblockSupportAndLayout;\n\tconst blockLayoutType = type || defaultType;\n\n\t// Only show the inherit toggle if it's supported,\n\t// and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.\n\tconst showInheritToggle = !! (\n\t\tallowInheriting &&\n\t\t( ! blockLayoutType ||\n\t\t\tblockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ||\n\t\t\tblockSupportAndLayout.inherit )\n\t);\n\n\tconst usedLayout = layout || defaultBlockLayout || {};\n\tconst { inherit = false, contentSize = null } = usedLayout;\n\t/**\n\t * `themeSupportsLayout` is only relevant to the `default/flow` or\n\t * `constrained` layouts and it should not be taken into account when other\n\t * `layout` types are used.\n\t */\n\tif (\n\t\t( blockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ) &&\n\t\t! themeSupportsLayout\n\t) {\n\t\treturn null;\n\t}\n\tconst layoutType = getLayoutType( blockLayoutType );\n\tconst constrainedType = getLayoutType( 'constrained' );\n\tconst displayControlsForLegacyLayouts =\n\t\t! usedLayout.type && ( contentSize || inherit );\n\tconst hasContentSizeOrLegacySettings = !! inherit || !! contentSize;\n\n\tconst onChangeType = ( newType ) =>\n\t\tsetAttributes( { layout: { type: newType } } );\n\tconst onChangeLayout = ( newLayout ) =>\n\t\tsetAttributes( { layout: newLayout } );\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ showInheritToggle && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutType?.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t'constrained' ||\n\t\t\t\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'constrained',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks use content width with options for full and wide widths.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks will fill the width of this container. Toggle to constrain.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && allowSwitching && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ layoutType && layoutType.name !== 'default' && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ constrainedType && displayControlsForLegacyLayouts && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: LayoutPanelPure,\n\tattributeKeys: [ 'layout' ],\n\thasSupport( name ) {\n\t\treturn hasLayoutBlockSupport( name );\n\t},\n};\n\nfunction LayoutTypeSwitcher( { type, onChange } ) {\n\treturn (\n\t\t\n\t\t\t{ getLayoutTypes().map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t onChange( name ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( 'type' in ( settings.attributes?.layout ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasLayoutBlockSupport( settings ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockWithLayoutStyles( {\n\tblock: BlockListBlock,\n\tprops,\n\tblockGapSupport,\n\tlayoutClasses,\n} ) {\n\tconst { name, attributes } = props;\n\tconst id = useInstanceId( BlockListBlock );\n\tconst { layout } = attributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( name, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst selectorPrefix = `wp-container-${ kebabCase( name ) }-is-layout-`;\n\t// Higher specificity to override defaults from theme.json.\n\tconst selector = `.${ selectorPrefix }${ id }`;\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\t// Get CSS string for the current layout type.\n\t// The CSS and `style` element is only output if it is not empty.\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst css = fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName: name,\n\t\tselector,\n\t\tlayout: usedLayout,\n\t\tstyle: attributes?.style,\n\t\thasBlockGapSupport,\n\t} );\n\n\t// Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.\n\tconst layoutClassNames = clsx(\n\t\t{\n\t\t\t[ `${ selectorPrefix }${ id }` ]: !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t},\n\t\tlayoutClasses\n\t);\n\n\tuseStyleOverride( { css } );\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { clientId, name, attributes } = props;\n\t\tconst blockSupportsLayout = hasLayoutBlockSupport( name );\n\t\tconst layoutClasses = useLayoutClasses( attributes, name );\n\t\tconst extraProps = useSelect(\n\t\t\t( select ) => {\n\t\t\t\t// The callback returns early to avoid block editor subscription.\n\t\t\t\tif ( ! blockSupportsLayout ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { getSettings, getBlockSettings } = unlock(\n\t\t\t\t\tselect( blockEditorStore )\n\t\t\t\t);\n\t\t\t\tconst { disableLayoutStyles } = getSettings();\n\n\t\t\t\tif ( disableLayoutStyles ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ blockGapSupport ] = getBlockSettings(\n\t\t\t\t\tclientId,\n\t\t\t\t\t'spacing.blockGap'\n\t\t\t\t);\n\n\t\t\t\treturn { blockGapSupport };\n\t\t\t},\n\t\t\t[ blockSupportsLayout, clientId ]\n\t\t);\n\n\t\tif ( ! extraProps ) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t},\n\t'withLayoutStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\n","export function range( start, length ) {\n\treturn Array.from( { length }, ( _, i ) => start + i );\n}\n\nexport class GridRect {\n\tconstructor( {\n\t\tcolumnStart,\n\t\trowStart,\n\t\tcolumnEnd,\n\t\trowEnd,\n\t\tcolumnSpan,\n\t\trowSpan,\n\t} = {} ) {\n\t\tthis.columnStart = columnStart ?? 1;\n\t\tthis.rowStart = rowStart ?? 1;\n\t\tif ( columnSpan !== undefined ) {\n\t\t\tthis.columnEnd = this.columnStart + columnSpan - 1;\n\t\t} else {\n\t\t\tthis.columnEnd = columnEnd ?? this.columnStart;\n\t\t}\n\t\tif ( rowSpan !== undefined ) {\n\t\t\tthis.rowEnd = this.rowStart + rowSpan - 1;\n\t\t} else {\n\t\t\tthis.rowEnd = rowEnd ?? this.rowStart;\n\t\t}\n\t}\n\n\tget columnSpan() {\n\t\treturn this.columnEnd - this.columnStart + 1;\n\t}\n\n\tget rowSpan() {\n\t\treturn this.rowEnd - this.rowStart + 1;\n\t}\n\n\tcontains( column, row ) {\n\t\treturn (\n\t\t\tcolumn >= this.columnStart &&\n\t\t\tcolumn <= this.columnEnd &&\n\t\t\trow >= this.rowStart &&\n\t\t\trow <= this.rowEnd\n\t\t);\n\t}\n\n\tcontainsRect( rect ) {\n\t\treturn (\n\t\t\tthis.contains( rect.columnStart, rect.rowStart ) &&\n\t\t\tthis.contains( rect.columnEnd, rect.rowEnd )\n\t\t);\n\t}\n\n\tintersectsRect( rect ) {\n\t\treturn (\n\t\t\tthis.columnStart <= rect.columnEnd &&\n\t\t\tthis.columnEnd >= rect.columnStart &&\n\t\t\tthis.rowStart <= rect.rowEnd &&\n\t\t\tthis.rowEnd >= rect.rowStart\n\t\t);\n\t}\n}\n\nexport function getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\n/**\n * Given a grid-template-columns or grid-template-rows CSS property value, gets the start and end\n * position in pixels of each grid track.\n *\n * https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track\n *\n * @param {string} template The grid-template-columns or grid-template-rows CSS property value.\n * Only supports fixed sizes in pixels.\n * @param {number} gap The gap between grid tracks in pixels.\n *\n * @return {Array<{start: number, end: number}>} An array of objects with the start and end\n * position in pixels of each grid track.\n */\nexport function getGridTracks( template, gap ) {\n\tconst tracks = [];\n\tfor ( const size of template.split( ' ' ) ) {\n\t\tconst previousTrack = tracks[ tracks.length - 1 ];\n\t\tconst start = previousTrack ? previousTrack.end + gap : 0;\n\t\tconst end = start + parseFloat( size );\n\t\ttracks.push( { start, end } );\n\t}\n\treturn tracks;\n}\n\n/**\n * Given an array of grid tracks and a position in pixels, gets the index of the closest track to\n * that position.\n *\n * https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track\n *\n * @param {Array<{start: number, end: number}>} tracks An array of objects with the start and end\n * position in pixels of each grid track.\n * @param {number} position The position in pixels.\n * @param {string} edge The edge of the track to compare the\n * position to. Either 'start' or 'end'.\n *\n * @return {number} The index of the closest track to the position. 0-based, unlike CSS grid which\n * is 1-based.\n */\nexport function getClosestTrack( tracks, position, edge = 'start' ) {\n\treturn tracks.reduce(\n\t\t( closest, track, index ) =>\n\t\t\tMath.abs( track[ edge ] - position ) <\n\t\t\tMath.abs( tracks[ closest ][ edge ] - position )\n\t\t\t\t? index\n\t\t\t\t: closest,\n\t\t0\n\t);\n}\n\nexport function getGridRect( gridElement, rect ) {\n\tconst columnGap = parseFloat( getComputedCSS( gridElement, 'column-gap' ) );\n\tconst rowGap = parseFloat( getComputedCSS( gridElement, 'row-gap' ) );\n\tconst gridColumnTracks = getGridTracks(\n\t\tgetComputedCSS( gridElement, 'grid-template-columns' ),\n\t\tcolumnGap\n\t);\n\tconst gridRowTracks = getGridTracks(\n\t\tgetComputedCSS( gridElement, 'grid-template-rows' ),\n\t\trowGap\n\t);\n\tconst columnStart = getClosestTrack( gridColumnTracks, rect.left ) + 1;\n\tconst rowStart = getClosestTrack( gridRowTracks, rect.top ) + 1;\n\tconst columnEnd =\n\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) + 1;\n\tconst rowEnd = getClosestTrack( gridRowTracks, rect.bottom, 'end' ) + 1;\n\treturn new GridRect( {\n\t\tcolumnStart,\n\t\tcolumnEnd,\n\t\trowStart,\n\t\trowEnd,\n\t} );\n}\n\nexport function getGridItemRect( gridItemElement ) {\n\treturn getGridRect(\n\t\tgridItemElement.parentElement,\n\t\tnew window.DOMRect(\n\t\t\tgridItemElement.offsetLeft,\n\t\t\tgridItemElement.offsetTop,\n\t\t\tgridItemElement.offsetWidth,\n\t\t\tgridItemElement.offsetHeight\n\t\t)\n\t);\n}\n\nexport function getGridInfo( gridElement ) {\n\tconst gridTemplateColumns = getComputedCSS(\n\t\tgridElement,\n\t\t'grid-template-columns'\n\t);\n\tconst gridTemplateRows = getComputedCSS(\n\t\tgridElement,\n\t\t'grid-template-rows'\n\t);\n\tconst numColumns = gridTemplateColumns.split( ' ' ).length;\n\tconst numRows = gridTemplateRows.split( ' ' ).length;\n\tconst numItems = numColumns * numRows;\n\treturn {\n\t\tnumColumns,\n\t\tnumRows,\n\t\tnumItems,\n\t\tcurrentColor: getComputedCSS( gridElement, 'color' ),\n\t\tstyle: {\n\t\t\tgridTemplateColumns,\n\t\t\tgridTemplateRows,\n\t\t\tgap: getComputedCSS( gridElement, 'gap' ),\n\t\t\tpadding: getComputedCSS( gridElement, 'padding' ),\n\t\t},\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { createInterpolateElement, useState } from '@wordpress/element';\nimport { Tip } from '@wordpress/components';\n\nconst globalTips = [\n\tcreateInterpolateElement(\n\t\t__(\n\t\t\t'While writing, you can press / to quickly insert new blocks.'\n\t\t),\n\t\t{ kbd: }\n\t),\n\tcreateInterpolateElement(\n\t\t__(\n\t\t\t'Indent a list by pressing space at the beginning of a line.'\n\t\t),\n\t\t{ kbd: }\n\t),\n\tcreateInterpolateElement(\n\t\t__(\n\t\t\t'Outdent a list by pressing backspace at the beginning of a line.'\n\t\t),\n\t\t{ kbd: }\n\t),\n\t__( 'Drag files into the editor to automatically insert media blocks.' ),\n\t__( \"Change a block's type by pressing the block icon on the toolbar.\" ),\n];\n\nfunction Tips() {\n\tconst [ randomIndex ] = useState(\n\t\t// Disable Reason: I'm not generating an HTML id.\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tMath.floor( Math.random() * globalTips.length )\n\t);\n\n\treturn { globalTips[ randomIndex ] };\n}\n\nexport default Tips;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronRight = (\n\t\n\t\t\n\t\n);\n\nexport default chevronRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronLeft = (\n\t\n\t\t\n\t\n);\n\nexport default chevronLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst blockDefault = (\n\t\n\t\t\n\t\n);\n\nexport default blockDefault;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Icon } from '@wordpress/components';\nimport { blockDefault } from '@wordpress/icons';\nimport { memo } from '@wordpress/element';\n\nfunction BlockIcon( { icon, showColors = false, className, context } ) {\n\tif ( icon?.src === 'block-default' ) {\n\t\ticon = {\n\t\t\tsrc: blockDefault,\n\t\t};\n\t}\n\n\tconst renderedIcon = (\n\t\t\n\t);\n\tconst style = showColors\n\t\t? {\n\t\t\t\tbackgroundColor: icon && icon.background,\n\t\t\t\tcolor: icon && icon.foreground,\n\t\t }\n\t\t: {};\n\n\treturn (\n\t\t\n\t\t\t{ renderedIcon }\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-icon/README.md\n */\nexport default memo( BlockIcon );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tButton,\n\t__experimentalText as Text,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { chevronLeft, chevronRight } from '@wordpress/icons';\nimport { __, isRTL, sprintf } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockCard( { title, icon, description, blockType, className, name } ) {\n\tif ( blockType ) {\n\t\tdeprecated( '`blockType` property in `BlockCard component`', {\n\t\t\tsince: '5.7',\n\t\t\talternative: '`title, icon and description` properties',\n\t\t} );\n\t\t( { title, icon, description } = blockType );\n\t}\n\n\tconst { parentNavBlockClientId } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\tselect( blockEditorStore );\n\n\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\n\t\treturn {\n\t\t\tparentNavBlockClientId: getBlockParentsByBlockName(\n\t\t\t\t_selectedBlockClientId,\n\t\t\t\t'core/navigation',\n\t\t\t\ttrue\n\t\t\t)[ 0 ],\n\t\t};\n\t}, [] );\n\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\treturn (\n\t\t
\n\t\t\t{ parentNavBlockClientId && ( // This is only used by the Navigation block for now. It's not ideal having Navigation block specific code here.\n\t\t\t\t selectBlock( parentNavBlockClientId ) }\n\t\t\t\t\tlabel={ __( 'Go to parent Navigation block' ) }\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t// TODO: This style override is also used in ToolsPanelHeader.\n\t\t\t\t\t\t// It should be supported out-of-the-box by Button.\n\t\t\t\t\t\t{ minWidth: 24, padding: 0 }\n\t\t\t\t\t}\n\t\t\t\t\ticon={ isRTL() ? chevronRight : chevronLeft }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\t{ name?.length\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %1$s: Custom block name. %2$s: Block title.\n\t\t\t\t\t\t\t\t__( '%1$s (%2$s)' ),\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\ttitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: title }\n\t\t\t\t

\n\t\t\t\t{ description && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ description }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport default BlockCard;\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { useRegistry, createRegistry, RegistryProvider } from '@wordpress/data';\nimport { createHigherOrderComponent } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { storeConfig } from '../../store';\nimport { STORE_NAME as blockEditorStoreName } from '../../store/constants';\n\nfunction getSubRegistry( subRegistries, registry, useSubRegistry ) {\n\tif ( ! useSubRegistry ) {\n\t\treturn registry;\n\t}\n\tlet subRegistry = subRegistries.get( registry );\n\tif ( ! subRegistry ) {\n\t\tsubRegistry = createRegistry( {}, registry );\n\t\tsubRegistry.registerStore( blockEditorStoreName, storeConfig );\n\t\tsubRegistries.set( registry, subRegistry );\n\t}\n\treturn subRegistry;\n}\n\nconst withRegistryProvider = createHigherOrderComponent(\n\t( WrappedComponent ) =>\n\t\t( { useSubRegistry = true, ...props } ) => {\n\t\t\tconst registry = useRegistry();\n\t\t\tconst [ subRegistries ] = useState( () => new WeakMap() );\n\t\t\tconst subRegistry = getSubRegistry(\n\t\t\t\tsubRegistries,\n\t\t\t\tregistry,\n\t\t\t\tuseSubRegistry\n\t\t\t);\n\n\t\t\tif ( subRegistry === registry ) {\n\t\t\t\treturn ;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t);\n\t\t},\n\t'withRegistryProvider'\n);\n\nexport default withRegistryProvider;\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { cloneBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\n/**\n * A function to call when the block value has been updated in the block-editor\n * store.\n *\n * @callback onBlockUpdate\n * @param {Object[]} blocks The updated blocks.\n * @param {Object} options The updated block options, such as selectionStart\n * and selectionEnd.\n */\n\n/**\n * useBlockSync is a side effect which handles bidirectional sync between the\n * block-editor store and a controlling data source which provides blocks. This\n * is most commonly used by the BlockEditorProvider to synchronize the contents\n * of the block-editor store with the root entity, like a post.\n *\n * Another example would be the template part block, which provides blocks from\n * a separate entity data source than a root entity. This hook syncs edits to\n * the template part in the block editor back to the entity and vice-versa.\n *\n * Here are some of its basic functions:\n * - Initalizes the block-editor store for the given clientID to the blocks\n * given via props.\n * - Adds incoming changes (like undo) to the block-editor store.\n * - Adds outgoing changes (like editing content) to the controlling entity,\n * determining if a change should be considered persistent or not.\n * - Handles edge cases and race conditions which occur in those operations.\n * - Ignores changes which happen to other entities (like nested inner block\n * controllers.\n * - Passes selection state from the block-editor store to the controlling entity.\n *\n * @param {Object} props Props for the block sync hook\n * @param {string} props.clientId The client ID of the inner block controller.\n * If none is passed, then it is assumed to be a\n * root controller rather than an inner block\n * controller.\n * @param {Object[]} props.value The control value for the blocks. This value\n * is used to initalize the block-editor store\n * and for resetting the blocks to incoming\n * changes like undo.\n * @param {Object} props.selection The selection state responsible to restore the selection on undo/redo.\n * @param {onBlockUpdate} props.onChange Function to call when a persistent\n * change has been made in the block-editor blocks\n * for the given clientId. For example, after\n * this function is called, an entity is marked\n * dirty because it has changes to save.\n * @param {onBlockUpdate} props.onInput Function to call when a non-persistent\n * change has been made in the block-editor blocks\n * for the given clientId. When this is called,\n * controlling sources do not become dirty.\n */\nexport default function useBlockSync( {\n\tclientId = null,\n\tvalue: controlledBlocks,\n\tselection: controlledSelection,\n\tonChange = noop,\n\tonInput = noop,\n} ) {\n\tconst registry = useRegistry();\n\n\tconst {\n\t\tresetBlocks,\n\t\tresetSelection,\n\t\treplaceInnerBlocks,\n\t\tsetHasControlledInnerBlocks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = registry.dispatch( blockEditorStore );\n\tconst { getBlockName, getBlocks, getSelectionStart, getSelectionEnd } =\n\t\tregistry.select( blockEditorStore );\n\tconst isControlled = useSelect(\n\t\t( select ) => {\n\t\t\treturn (\n\t\t\t\t! clientId ||\n\t\t\t\tselect( blockEditorStore ).areInnerBlocksControlled( clientId )\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst pendingChangesRef = useRef( { incoming: null, outgoing: [] } );\n\tconst subscribedRef = useRef( false );\n\n\tconst setControlledBlocks = () => {\n\t\tif ( ! controlledBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't need to persist this change because we only replace\n\t\t// controlled inner blocks when the change was caused by an entity,\n\t\t// and so it would already be persisted.\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tif ( clientId ) {\n\t\t\t// It is important to batch here because otherwise,\n\t\t\t// as soon as `setHasControlledInnerBlocks` is called\n\t\t\t// the effect to restore might be triggered\n\t\t\t// before the actual blocks get set properly in state.\n\t\t\tregistry.batch( () => {\n\t\t\t\tsetHasControlledInnerBlocks( clientId, true );\n\t\t\t\tconst storeBlocks = controlledBlocks.map( ( block ) =>\n\t\t\t\t\tcloneBlock( block )\n\t\t\t\t);\n\t\t\t\tif ( subscribedRef.current ) {\n\t\t\t\t\tpendingChangesRef.current.incoming = storeBlocks;\n\t\t\t\t}\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\treplaceInnerBlocks( clientId, storeBlocks );\n\t\t\t} );\n\t\t} else {\n\t\t\tif ( subscribedRef.current ) {\n\t\t\t\tpendingChangesRef.current.incoming = controlledBlocks;\n\t\t\t}\n\t\t\tresetBlocks( controlledBlocks );\n\t\t}\n\t};\n\n\t// Clean up the changes made by setControlledBlocks() when the component\n\t// containing useBlockSync() unmounts.\n\tconst unsetControlledBlocks = () => {\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tif ( clientId ) {\n\t\t\tsetHasControlledInnerBlocks( clientId, false );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\treplaceInnerBlocks( clientId, [] );\n\t\t} else {\n\t\t\tresetBlocks( [] );\n\t\t}\n\t};\n\n\t// Add a subscription to the block-editor registry to detect when changes\n\t// have been made. This lets us inform the data source of changes. This\n\t// is an effect so that the subscriber can run synchronously without\n\t// waiting for React renders for changes.\n\tconst onInputRef = useRef( onInput );\n\tconst onChangeRef = useRef( onChange );\n\tuseEffect( () => {\n\t\tonInputRef.current = onInput;\n\t\tonChangeRef.current = onChange;\n\t}, [ onInput, onChange ] );\n\n\t// Determine if blocks need to be reset when they change.\n\tuseEffect( () => {\n\t\tif ( pendingChangesRef.current.outgoing.includes( controlledBlocks ) ) {\n\t\t\t// Skip block reset if the value matches expected outbound sync\n\t\t\t// triggered by this component by a preceding change detection.\n\t\t\t// Only skip if the value matches expectation, since a reset should\n\t\t\t// still occur if the value is modified (not equal by reference),\n\t\t\t// to allow that the consumer may apply modifications to reflect\n\t\t\t// back on the editor.\n\t\t\tif (\n\t\t\t\tpendingChangesRef.current.outgoing[\n\t\t\t\t\tpendingChangesRef.current.outgoing.length - 1\n\t\t\t\t] === controlledBlocks\n\t\t\t) {\n\t\t\t\tpendingChangesRef.current.outgoing = [];\n\t\t\t}\n\t\t} else if ( getBlocks( clientId ) !== controlledBlocks ) {\n\t\t\t// Reset changing value in all other cases than the sync described\n\t\t\t// above. Since this can be reached in an update following an out-\n\t\t\t// bound sync, unset the outbound value to avoid considering it in\n\t\t\t// subsequent renders.\n\t\t\tpendingChangesRef.current.outgoing = [];\n\t\t\tsetControlledBlocks();\n\n\t\t\tif ( controlledSelection ) {\n\t\t\t\tresetSelection(\n\t\t\t\t\tcontrolledSelection.selectionStart,\n\t\t\t\t\tcontrolledSelection.selectionEnd,\n\t\t\t\t\tcontrolledSelection.initialPosition\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}, [ controlledBlocks, clientId ] );\n\n\tconst isMountedRef = useRef( false );\n\n\tuseEffect( () => {\n\t\t// On mount, controlled blocks are already set in the effect above.\n\t\tif ( ! isMountedRef.current ) {\n\t\t\tisMountedRef.current = true;\n\t\t\treturn;\n\t\t}\n\n\t\t// When the block becomes uncontrolled, it means its inner state has been reset\n\t\t// we need to take the blocks again from the external value property.\n\t\tif ( ! isControlled ) {\n\t\t\tpendingChangesRef.current.outgoing = [];\n\t\t\tsetControlledBlocks();\n\t\t}\n\t}, [ isControlled ] );\n\n\tuseEffect( () => {\n\t\tconst {\n\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\tisLastBlockChangePersistent,\n\t\t\t__unstableIsLastBlockChangeIgnored,\n\t\t\tareInnerBlocksControlled,\n\t\t} = registry.select( blockEditorStore );\n\n\t\tlet blocks = getBlocks( clientId );\n\t\tlet isPersistent = isLastBlockChangePersistent();\n\t\tlet previousAreBlocksDifferent = false;\n\n\t\tsubscribedRef.current = true;\n\t\tconst unsubscribe = registry.subscribe( () => {\n\t\t\t// Sometimes, when changing block lists, lingering subscriptions\n\t\t\t// might trigger before they are cleaned up. If the block for which\n\t\t\t// the subscription runs is no longer in the store, this would clear\n\t\t\t// its parent entity's block list. To avoid this, we bail out if\n\t\t\t// the subscription is triggering for a block (`clientId !== null`)\n\t\t\t// and its block name can't be found because it's not on the list.\n\t\t\t// (`getBlockName( clientId ) === null`).\n\t\t\tif ( clientId !== null && getBlockName( clientId ) === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// When RESET_BLOCKS on parent blocks get called, the controlled blocks\n\t\t\t// can reset to uncontrolled, in these situations, it means we need to populate\n\t\t\t// the blocks again from the external blocks (the value property here)\n\t\t\t// and we should stop triggering onChange\n\t\t\tconst isStillControlled =\n\t\t\t\t! clientId || areInnerBlocksControlled( clientId );\n\t\t\tif ( ! isStillControlled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newIsPersistent = isLastBlockChangePersistent();\n\t\t\tconst newBlocks = getBlocks( clientId );\n\t\t\tconst areBlocksDifferent = newBlocks !== blocks;\n\t\t\tblocks = newBlocks;\n\t\t\tif (\n\t\t\t\tareBlocksDifferent &&\n\t\t\t\t( pendingChangesRef.current.incoming ||\n\t\t\t\t\t__unstableIsLastBlockChangeIgnored() )\n\t\t\t) {\n\t\t\t\tpendingChangesRef.current.incoming = null;\n\t\t\t\tisPersistent = newIsPersistent;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Since we often dispatch an action to mark the previous action as\n\t\t\t// persistent, we need to make sure that the blocks changed on the\n\t\t\t// previous action before committing the change.\n\t\t\tconst didPersistenceChange =\n\t\t\t\tpreviousAreBlocksDifferent &&\n\t\t\t\t! areBlocksDifferent &&\n\t\t\t\tnewIsPersistent &&\n\t\t\t\t! isPersistent;\n\n\t\t\tif ( areBlocksDifferent || didPersistenceChange ) {\n\t\t\t\tisPersistent = newIsPersistent;\n\t\t\t\t// We know that onChange/onInput will update controlledBlocks.\n\t\t\t\t// We need to be aware that it was caused by an outgoing change\n\t\t\t\t// so that we do not treat it as an incoming change later on,\n\t\t\t\t// which would cause a block reset.\n\t\t\t\tpendingChangesRef.current.outgoing.push( blocks );\n\n\t\t\t\t// Inform the controlling entity that changes have been made to\n\t\t\t\t// the block-editor store they should be aware about.\n\t\t\t\tconst updateParent = isPersistent\n\t\t\t\t\t? onChangeRef.current\n\t\t\t\t\t: onInputRef.current;\n\t\t\t\tupdateParent( blocks, {\n\t\t\t\t\tselection: {\n\t\t\t\t\t\tselectionStart: getSelectionStart(),\n\t\t\t\t\t\tselectionEnd: getSelectionEnd(),\n\t\t\t\t\t\tinitialPosition:\n\t\t\t\t\t\t\tgetSelectedBlocksInitialCaretPosition(),\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t\tpreviousAreBlocksDifferent = areBlocksDifferent;\n\t\t}, blockEditorStore );\n\n\t\treturn () => {\n\t\t\tsubscribedRef.current = false;\n\t\t\tunsubscribe();\n\t\t};\n\t}, [ registry, clientId ] );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tunsetControlledBlocks();\n\t\t};\n\t}, [] );\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"keyboardShortcuts\"];","/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';\nimport { __ } from '@wordpress/i18n';\n\nfunction KeyboardShortcuts() {\n\treturn null;\n}\n\nfunction KeyboardShortcutsRegister() {\n\t// Registering the shortcuts.\n\tconst { registerShortcut } = useDispatch( keyboardShortcutsStore );\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/duplicate',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Duplicate the selected block(s).' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryShift',\n\t\t\t\tcharacter: 'd',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/remove',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Remove the selected block(s).' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'access',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/insert-before',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __(\n\t\t\t\t'Insert a new block before the selected block(s).'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryAlt',\n\t\t\t\tcharacter: 't',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/insert-after',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __(\n\t\t\t\t'Insert a new block after the selected block(s).'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryAlt',\n\t\t\t\tcharacter: 'y',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/delete-multi-selection',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Delete selection.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tcharacter: 'del',\n\t\t\t},\n\t\t\taliases: [\n\t\t\t\t{\n\t\t\t\t\tcharacter: 'backspace',\n\t\t\t\t},\n\t\t\t],\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/select-all',\n\t\t\tcategory: 'selection',\n\t\t\tdescription: __(\n\t\t\t\t'Select all text when typing. Press again to select all blocks.'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'a',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/unselect',\n\t\t\tcategory: 'selection',\n\t\t\tdescription: __( 'Clear selection.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tcharacter: 'escape',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/multi-text-selection',\n\t\t\tcategory: 'selection',\n\t\t\tdescription: __( 'Select text across multiple blocks.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'shift',\n\t\t\t\tcharacter: 'arrow',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/focus-toolbar',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Navigate to the nearest toolbar.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'alt',\n\t\t\t\tcharacter: 'F10',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/move-up',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Move the selected block(s) up.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'secondary',\n\t\t\t\tcharacter: 't',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/move-down',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Move the selected block(s) down.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'secondary',\n\t\t\t\tcharacter: 'y',\n\t\t\t},\n\t\t} );\n\n\t\t// List view shortcuts.\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/collapse-list-view',\n\t\t\tcategory: 'list-view',\n\t\t\tdescription: __( 'Collapse all other items.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'alt',\n\t\t\t\tcharacter: 'l',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/group',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __(\n\t\t\t\t'Create a group block from the selected multiple blocks.'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'g',\n\t\t\t},\n\t\t} );\n\t}, [ registerShortcut ] );\n\n\treturn null;\n}\n\nKeyboardShortcuts.Register = KeyboardShortcutsRegister;\n\nexport default KeyboardShortcuts;\n","/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { useEffect } from '@wordpress/element';\nimport { SlotFillProvider } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport withRegistryProvider from './with-registry-provider';\nimport useBlockSync from './use-block-sync';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockRefsProvider } from './block-refs-provider';\nimport { unlock } from '../../lock-unlock';\nimport KeyboardShortcuts from '../keyboard-shortcuts';\n\n/** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */\n\nexport const ExperimentalBlockEditorProvider = withRegistryProvider(\n\t( props ) => {\n\t\tconst { children, settings, stripExperimentalSettings = false } = props;\n\n\t\tconst { __experimentalUpdateSettings } = unlock(\n\t\t\tuseDispatch( blockEditorStore )\n\t\t);\n\t\tuseEffect( () => {\n\t\t\t__experimentalUpdateSettings(\n\t\t\t\t{\n\t\t\t\t\t...settings,\n\t\t\t\t\t__internalIsInitialized: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstripExperimentalSettings,\n\t\t\t\t\treset: true,\n\t\t\t\t}\n\t\t\t);\n\t\t}, [\n\t\t\tsettings,\n\t\t\tstripExperimentalSettings,\n\t\t\t__experimentalUpdateSettings,\n\t\t] );\n\n\t\t// Syncs the entity provider with changes in the block-editor store.\n\t\tuseBlockSync( props );\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ ! settings?.__unstableIsPreviewMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t}\n);\n\nexport const BlockEditorProvider = ( props ) => {\n\treturn (\n\t\t\n\t\t\t{ props.children }\n\t\t\n\t);\n};\n\nexport default BlockEditorProvider;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext, useMemo } from '@wordpress/element';\n\n/** @typedef {import('react').ReactNode} ReactNode */\n\n/**\n * @typedef BlockContextProviderProps\n *\n * @property {Record} value Context value to merge with current\n * value.\n * @property {ReactNode} children Component children.\n */\n\n/** @type {import('react').Context>} */\nconst Context = createContext( {} );\n\n/**\n * Component which merges passed value with current consumed block context.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-context/README.md\n *\n * @param {BlockContextProviderProps} props\n */\nexport function BlockContextProvider( { value, children } ) {\n\tconst context = useContext( Context );\n\tconst nextValue = useMemo(\n\t\t() => ( { ...context, ...value } ),\n\t\t[ context, value ]\n\t);\n\n\treturn ;\n}\n\nexport default Context;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { withFilters } from '@wordpress/components';\nimport {\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tgetBlockType,\n} from '@wordpress/blocks';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\n\n/**\n * Default value used for blocks which do not define their own context needs,\n * used to guarantee that a block's `context` prop will always be an object. It\n * is assigned as a constant since it is always expected to be an empty object,\n * and in order to avoid unnecessary React reconciliations of a changing object.\n *\n * @type {{}}\n */\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nconst Edit = ( props ) => {\n\tconst { name } = props;\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\t// `edit` and `save` are functions or components describing the markup\n\t// with which a block is displayed. If `blockType` is valid, assign\n\t// them preferentially as the render value for the block.\n\tconst Component = blockType.edit || blockType.save;\n\n\treturn ;\n};\n\nconst EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );\n\nconst EditWithGeneratedProps = ( props ) => {\n\tconst { attributes = {}, name } = props;\n\tconst blockType = getBlockType( name );\n\tconst blockContext = useContext( BlockContext );\n\n\t// Assign context values using the block type's declared context needs.\n\tconst context = useMemo( () => {\n\t\treturn blockType && blockType.usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tblockType.usesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t}, [ blockType, blockContext ] );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\tif ( blockType.apiVersion > 1 ) {\n\t\treturn ;\n\t}\n\n\t// Generate a class name for the block's editable form.\n\tconst generatedClassName = hasBlockSupport( blockType, 'className', true )\n\t\t? getBlockDefaultClassName( name )\n\t\t: null;\n\tconst className = clsx(\n\t\tgeneratedClassName,\n\t\tattributes.className,\n\t\tprops.className\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\nexport default EditWithGeneratedProps;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst moreVertical = (\n\t\n\t\t\n\t\n);\n\nexport default moreVertical;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Children } from '@wordpress/element';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { moreVertical } from '@wordpress/icons';\n\nfunction Warning( { className, actions, children, secondaryActions } ) {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t

\n\n\t\t\t\t\t{ ( Children.count( actions ) > 0 || secondaryActions ) && (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{ Children.count( actions ) > 0 &&\n\t\t\t\t\t\t\t\tChildren.map( actions, ( action, i ) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ action }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t{ secondaryActions && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ () => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ secondaryActions.map(\n\t\t\t\t\t\t\t\t\t\t\t\t( item, pos ) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t
\n\t\t\t\t\t) }\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/warning/README.md\n */\nexport default Warning;\n","/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { Button } from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport Warning from '../warning';\n\nexport function MultipleUsageWarning( {\n\toriginalBlockClientId,\n\tname,\n\tonReplace,\n} ) {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst blockType = getBlockType( name );\n\n\treturn (\n\t\t selectBlock( originalBlockClientId ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Find original' ) }\n\t\t\t\t,\n\t\t\t\t onReplace( [] ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t,\n\t\t\t] }\n\t\t>\n\t\t\t{ blockType?.title }: \n\t\t\t{ __( 'This block can only be used once.' ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nexport const PrivateBlockContext = createContext( {} );\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useContext } from '@wordpress/element';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport Edit from './edit';\nimport {\n\tBlockEditContextProvider,\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n\tmayDisplayParentControlsKey,\n\tblockEditingModeKey,\n\tblockBindingsKey,\n\tisPreviewModeKey,\n} from './context';\nimport { MultipleUsageWarning } from './multiple-usage-warning';\nimport { PrivateBlockContext } from '../block-list/private-block-context';\n\n/**\n * The `useBlockEditContext` hook provides information about the block this hook is being used in.\n * It returns an object with the `name`, `isSelected` state, and the `clientId` of the block.\n * It is useful if you want to create custom hooks that need access to the current blocks clientId\n * but don't want to rely on the data getting passed in as a parameter.\n *\n * @return {Object} Block edit context\n */\nexport { useBlockEditContext };\n\nexport default function BlockEdit( {\n\tmayDisplayControls,\n\tmayDisplayParentControls,\n\tblockEditingMode,\n\tisPreviewMode,\n\t// The remaining props are passed through the BlockEdit filters and are thus\n\t// public API!\n\t...props\n} ) {\n\tconst {\n\t\tname,\n\t\tisSelected,\n\t\tclientId,\n\t\tattributes = {},\n\t\t__unstableLayoutClassNames,\n\t} = props;\n\tconst { layout = null, metadata = {} } = attributes;\n\tconst { bindings } = metadata;\n\tconst layoutSupport =\n\t\thasBlockSupport( name, 'layout', false ) ||\n\t\thasBlockSupport( name, '__experimentalLayout', false );\n\tconst { originalBlockClientId } = useContext( PrivateBlockContext );\n\n\treturn (\n\t\t ( {\n\t\t\t\t\tname,\n\t\t\t\t\tisSelected,\n\t\t\t\t\tclientId,\n\t\t\t\t\tlayout: layoutSupport ? layout : null,\n\t\t\t\t\t__unstableLayoutClassNames,\n\t\t\t\t\t// We use symbols in favour of an __unstable prefix to avoid\n\t\t\t\t\t// usage outside of the package (this context is exposed).\n\t\t\t\t\t[ mayDisplayControlsKey ]: mayDisplayControls,\n\t\t\t\t\t[ mayDisplayParentControlsKey ]: mayDisplayParentControls,\n\t\t\t\t\t[ blockEditingModeKey ]: blockEditingMode,\n\t\t\t\t\t[ blockBindingsKey ]: bindings,\n\t\t\t\t\t[ isPreviewModeKey ]: isPreviewMode,\n\t\t\t\t} ),\n\t\t\t\t[\n\t\t\t\t\tname,\n\t\t\t\t\tisSelected,\n\t\t\t\t\tclientId,\n\t\t\t\t\tlayoutSupport,\n\t\t\t\t\tlayout,\n\t\t\t\t\t__unstableLayoutClassNames,\n\t\t\t\t\tmayDisplayControls,\n\t\t\t\t\tmayDisplayParentControls,\n\t\t\t\t\tblockEditingMode,\n\t\t\t\t\tbindings,\n\t\t\t\t\tisPreviewMode,\n\t\t\t\t]\n\t\t\t) }\n\t\t>\n\t\t\t\n\t\t\t{ originalBlockClientId && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { RawHTML } from '@wordpress/element';\nimport { safeHTML } from '@wordpress/dom';\n\nexport default function BlockView( {\n\ttitle,\n\trawContent,\n\trenderedContent,\n\taction,\n\tactionText,\n\tclassName,\n} ) {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t{ title }\n\t\t\t\t

\n\n\t\t\t\t
\n\t\t\t\t\t{ rawContent }\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t{ safeHTML( renderedContent ) }\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{ actionText }\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n// diff doesn't tree-shake correctly, so we import from the individual\n// module here, to avoid including too much of the library\nimport { diffChars } from 'diff/lib/diff/character';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { getSaveContent } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport BlockView from './block-view';\n\nfunction BlockCompare( {\n\tblock,\n\tonKeep,\n\tonConvert,\n\tconvertor,\n\tconvertButtonText,\n} ) {\n\tfunction getDifference( originalContent, newContent ) {\n\t\tconst difference = diffChars( originalContent, newContent );\n\n\t\treturn difference.map( ( item, pos ) => {\n\t\t\tconst classes = clsx( {\n\t\t\t\t'block-editor-block-compare__added': item.added,\n\t\t\t\t'block-editor-block-compare__removed': item.removed,\n\t\t\t} );\n\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{ item.value }\n\t\t\t\t\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction getConvertedContent( convertedBlock ) {\n\t\t// The convertor may return an array of items or a single item.\n\t\tconst newBlocks = Array.isArray( convertedBlock )\n\t\t\t? convertedBlock\n\t\t\t: [ convertedBlock ];\n\n\t\t// Get converted block details.\n\t\tconst newContent = newBlocks.map( ( item ) =>\n\t\t\tgetSaveContent( item.name, item.attributes, item.innerBlocks )\n\t\t);\n\n\t\treturn newContent.join( '' );\n\t}\n\n\tconst converted = getConvertedContent( convertor( block ) );\n\tconst difference = getDifference( block.originalContent, converted );\n\n\treturn (\n\t\t
\n\t\t\t\n\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default BlockCompare;\n","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { Button, Modal } from '@wordpress/components';\nimport { useState, useCallback, useMemo } from '@wordpress/element';\nimport { createBlock, rawHandler } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport Warning from '../warning';\nimport BlockCompare from '../block-compare';\nimport { store as blockEditorStore } from '../../store';\n\nconst blockToBlocks = ( block ) =>\n\trawHandler( {\n\t\tHTML: block.originalContent,\n\t} );\n\nexport default function BlockInvalidWarning( { clientId } ) {\n\tconst { block, canInsertHTMLBlock, canInsertClassicBlock } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType, getBlock, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( clientId ),\n\t\t\t\tcanInsertHTMLBlock: canInsertBlockType(\n\t\t\t\t\t'core/html',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertClassicBlock: canInsertBlockType(\n\t\t\t\t\t'core/freeform',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\n\tconst [ compare, setCompare ] = useState( false );\n\tconst onCompareClose = useCallback( () => setCompare( false ), [] );\n\n\tconst convert = useMemo(\n\t\t() => ( {\n\t\t\ttoClassic() {\n\t\t\t\tconst classicBlock = createBlock( 'core/freeform', {\n\t\t\t\t\tcontent: block.originalContent,\n\t\t\t\t} );\n\t\t\t\treturn replaceBlock( block.clientId, classicBlock );\n\t\t\t},\n\t\t\ttoHTML() {\n\t\t\t\tconst htmlBlock = createBlock( 'core/html', {\n\t\t\t\t\tcontent: block.originalContent,\n\t\t\t\t} );\n\t\t\t\treturn replaceBlock( block.clientId, htmlBlock );\n\t\t\t},\n\t\t\ttoBlocks() {\n\t\t\t\tconst newBlocks = blockToBlocks( block );\n\t\t\t\treturn replaceBlock( block.clientId, newBlocks );\n\t\t\t},\n\t\t\ttoRecoveredBlock() {\n\t\t\t\tconst recoveredBlock = createBlock(\n\t\t\t\t\tblock.name,\n\t\t\t\t\tblock.attributes,\n\t\t\t\t\tblock.innerBlocks\n\t\t\t\t);\n\t\t\t\treturn replaceBlock( block.clientId, recoveredBlock );\n\t\t\t},\n\t\t} ),\n\t\t[ block, replaceBlock ]\n\t);\n\n\tconst secondaryActions = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\t// translators: Button to fix block content\n\t\t\t\t\ttitle: _x( 'Resolve', 'imperative verb' ),\n\t\t\t\t\tonClick: () => setCompare( true ),\n\t\t\t\t},\n\t\t\t\tcanInsertHTMLBlock && {\n\t\t\t\t\ttitle: __( 'Convert to HTML' ),\n\t\t\t\t\tonClick: convert.toHTML,\n\t\t\t\t},\n\t\t\t\tcanInsertClassicBlock && {\n\t\t\t\t\ttitle: __( 'Convert to Classic Block' ),\n\t\t\t\t\tonClick: convert.toClassic,\n\t\t\t\t},\n\t\t\t].filter( Boolean ),\n\t\t[ canInsertHTMLBlock, canInsertClassicBlock, convert ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\t\t{ __( 'Attempt recovery' ) }\n\t\t\t\t\t,\n\t\t\t\t] }\n\t\t\t\tsecondaryActions={ secondaryActions }\n\t\t\t>\n\t\t\t\t{ __( 'Block contains unexpected or invalid content.' ) }\n\t\t\t\n\t\t\t{ compare && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport Warning from '../warning';\n\nconst warning = (\n\t\n\t\t{ __( 'This block has encountered an error and cannot be previewed.' ) }\n\t\n);\n\nexport default () => warning;\n","/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\n\nclass BlockCrashBoundary extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.state = {\n\t\t\thasError: false,\n\t\t};\n\t}\n\n\tcomponentDidCatch() {\n\t\tthis.setState( {\n\t\t\thasError: true,\n\t\t} );\n\t}\n\n\trender() {\n\t\tif ( this.state.hasError ) {\n\t\t\treturn this.props.fallback;\n\t\t}\n\n\t\treturn this.props.children;\n\t}\n}\n\nexport default BlockCrashBoundary;\n","/**\n * External dependencies\n */\nimport TextareaAutosize from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tgetBlockAttributes,\n\tgetBlockContent,\n\tgetBlockType,\n\tgetSaveContent,\n\tvalidateBlock,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockHTML( { clientId } ) {\n\tconst [ html, setHtml ] = useState( '' );\n\tconst block = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst { updateBlock } = useDispatch( blockEditorStore );\n\tconst onChange = () => {\n\t\tconst blockType = getBlockType( block.name );\n\n\t\tif ( ! blockType ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst attributes = getBlockAttributes(\n\t\t\tblockType,\n\t\t\thtml,\n\t\t\tblock.attributes\n\t\t);\n\n\t\t// If html is empty we reset the block to the default HTML and mark it as valid to avoid triggering an error\n\t\tconst content = html ? html : getSaveContent( blockType, attributes );\n\t\tconst [ isValid ] = html\n\t\t\t? validateBlock( {\n\t\t\t\t\t...block,\n\t\t\t\t\tattributes,\n\t\t\t\t\toriginalContent: content,\n\t\t\t } )\n\t\t\t: [ true ];\n\n\t\tupdateBlock( clientId, {\n\t\t\tattributes,\n\t\t\toriginalContent: content,\n\t\t\tisValid,\n\t\t} );\n\n\t\t// Ensure the state is updated if we reset so it displays the default content.\n\t\tif ( ! html ) {\n\t\t\tsetHtml( content );\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tsetHtml( getBlockContent( block ) );\n\t}, [ block ] );\n\n\treturn (\n\t\t setHtml( event.target.value ) }\n\t\t/>\n\t);\n}\n\nexport default BlockHTML;\n","let updateQueue = makeQueue();\nconst raf = fn => schedule(fn, updateQueue);\nlet writeQueue = makeQueue();\n\nraf.write = fn => schedule(fn, writeQueue);\n\nlet onStartQueue = makeQueue();\n\nraf.onStart = fn => schedule(fn, onStartQueue);\n\nlet onFrameQueue = makeQueue();\n\nraf.onFrame = fn => schedule(fn, onFrameQueue);\n\nlet onFinishQueue = makeQueue();\n\nraf.onFinish = fn => schedule(fn, onFinishQueue);\n\nlet timeouts = [];\n\nraf.setTimeout = (handler, ms) => {\n let time = raf.now() + ms;\n\n let cancel = () => {\n let i = timeouts.findIndex(t => t.cancel == cancel);\n if (~i) timeouts.splice(i, 1);\n pendingCount -= ~i ? 1 : 0;\n };\n\n let timeout = {\n time,\n handler,\n cancel\n };\n timeouts.splice(findTimeout(time), 0, timeout);\n pendingCount += 1;\n start();\n return timeout;\n};\n\nlet findTimeout = time => ~(~timeouts.findIndex(t => t.time > time) || ~timeouts.length);\n\nraf.cancel = fn => {\n onStartQueue.delete(fn);\n onFrameQueue.delete(fn);\n onFinishQueue.delete(fn);\n updateQueue.delete(fn);\n writeQueue.delete(fn);\n};\n\nraf.sync = fn => {\n sync = true;\n raf.batchedUpdates(fn);\n sync = false;\n};\n\nraf.throttle = fn => {\n let lastArgs;\n\n function queuedFn() {\n try {\n fn(...lastArgs);\n } finally {\n lastArgs = null;\n }\n }\n\n function throttled(...args) {\n lastArgs = args;\n raf.onStart(queuedFn);\n }\n\n throttled.handler = fn;\n\n throttled.cancel = () => {\n onStartQueue.delete(queuedFn);\n lastArgs = null;\n };\n\n return throttled;\n};\n\nlet nativeRaf = typeof window != 'undefined' ? window.requestAnimationFrame : () => {};\n\nraf.use = impl => nativeRaf = impl;\n\nraf.now = typeof performance != 'undefined' ? () => performance.now() : Date.now;\n\nraf.batchedUpdates = fn => fn();\n\nraf.catch = console.error;\nraf.frameLoop = 'always';\n\nraf.advance = () => {\n if (raf.frameLoop !== 'demand') {\n console.warn('Cannot call the manual advancement of rafz whilst frameLoop is not set as demand');\n } else {\n update();\n }\n};\n\nlet ts = -1;\nlet pendingCount = 0;\nlet sync = false;\n\nfunction schedule(fn, queue) {\n if (sync) {\n queue.delete(fn);\n fn(0);\n } else {\n queue.add(fn);\n start();\n }\n}\n\nfunction start() {\n if (ts < 0) {\n ts = 0;\n\n if (raf.frameLoop !== 'demand') {\n nativeRaf(loop);\n }\n }\n}\n\nfunction stop() {\n ts = -1;\n}\n\nfunction loop() {\n if (~ts) {\n nativeRaf(loop);\n raf.batchedUpdates(update);\n }\n}\n\nfunction update() {\n let prevTs = ts;\n ts = raf.now();\n let count = findTimeout(ts);\n\n if (count) {\n eachSafely(timeouts.splice(0, count), t => t.handler());\n pendingCount -= count;\n }\n\n if (!pendingCount) {\n stop();\n return;\n }\n\n onStartQueue.flush();\n updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n onFrameQueue.flush();\n writeQueue.flush();\n onFinishQueue.flush();\n}\n\nfunction makeQueue() {\n let next = new Set();\n let current = next;\n return {\n add(fn) {\n pendingCount += current == next && !next.has(fn) ? 1 : 0;\n next.add(fn);\n },\n\n delete(fn) {\n pendingCount -= current == next && next.has(fn) ? 1 : 0;\n return next.delete(fn);\n },\n\n flush(arg) {\n if (current.size) {\n next = new Set();\n pendingCount -= current.size;\n eachSafely(current, fn => fn(arg) && next.add(fn));\n pendingCount += next.size;\n current = next;\n }\n }\n\n };\n}\n\nfunction eachSafely(values, each) {\n values.forEach(value => {\n try {\n each(value);\n } catch (e) {\n raf.catch(e);\n }\n });\n}\n\nconst __raf = {\n count() {\n return pendingCount;\n },\n\n isRunning() {\n return ts >= 0;\n },\n\n clear() {\n ts = -1;\n timeouts = [];\n onStartQueue = makeQueue();\n updateQueue = makeQueue();\n onFrameQueue = makeQueue();\n writeQueue = makeQueue();\n onFinishQueue = makeQueue();\n pendingCount = 0;\n }\n\n};\n\nexport { __raf, raf };\n","import { raf } from '@react-spring/rafz';\nexport { raf } from '@react-spring/rafz';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nfunction noop() {}\nconst defineHidden = (obj, key, value) => Object.defineProperty(obj, key, {\n value,\n writable: true,\n configurable: true\n});\nconst is = {\n arr: Array.isArray,\n obj: a => !!a && a.constructor.name === 'Object',\n fun: a => typeof a === 'function',\n str: a => typeof a === 'string',\n num: a => typeof a === 'number',\n und: a => a === undefined\n};\nfunction isEqual(a, b) {\n if (is.arr(a)) {\n if (!is.arr(b) || a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n return a === b;\n}\nconst each = (obj, fn) => obj.forEach(fn);\nfunction eachProp(obj, fn, ctx) {\n if (is.arr(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn.call(ctx, obj[i], `${i}`);\n }\n\n return;\n }\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(ctx, obj[key], key);\n }\n }\n}\nconst toArray = a => is.und(a) ? [] : is.arr(a) ? a : [a];\nfunction flush(queue, iterator) {\n if (queue.size) {\n const items = Array.from(queue);\n queue.clear();\n each(items, iterator);\n }\n}\nconst flushCalls = (queue, ...args) => flush(queue, fn => fn(...args));\nconst isSSR = () => typeof window === 'undefined' || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\n\nlet createStringInterpolator$1;\nlet to;\nlet colors$1 = null;\nlet skipAnimation = false;\nlet willAdvance = noop;\nconst assign = globals => {\n if (globals.to) to = globals.to;\n if (globals.now) raf.now = globals.now;\n if (globals.colors !== undefined) colors$1 = globals.colors;\n if (globals.skipAnimation != null) skipAnimation = globals.skipAnimation;\n if (globals.createStringInterpolator) createStringInterpolator$1 = globals.createStringInterpolator;\n if (globals.requestAnimationFrame) raf.use(globals.requestAnimationFrame);\n if (globals.batchedUpdates) raf.batchedUpdates = globals.batchedUpdates;\n if (globals.willAdvance) willAdvance = globals.willAdvance;\n if (globals.frameLoop) raf.frameLoop = globals.frameLoop;\n};\n\nvar globals = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get createStringInterpolator () { return createStringInterpolator$1; },\n get to () { return to; },\n get colors () { return colors$1; },\n get skipAnimation () { return skipAnimation; },\n get willAdvance () { return willAdvance; },\n assign: assign\n});\n\nconst startQueue = new Set();\nlet currentFrame = [];\nlet prevFrame = [];\nlet priority = 0;\nconst frameLoop = {\n get idle() {\n return !startQueue.size && !currentFrame.length;\n },\n\n start(animation) {\n if (priority > animation.priority) {\n startQueue.add(animation);\n raf.onStart(flushStartQueue);\n } else {\n startSafely(animation);\n raf(advance);\n }\n },\n\n advance,\n\n sort(animation) {\n if (priority) {\n raf.onFrame(() => frameLoop.sort(animation));\n } else {\n const prevIndex = currentFrame.indexOf(animation);\n\n if (~prevIndex) {\n currentFrame.splice(prevIndex, 1);\n startUnsafely(animation);\n }\n }\n },\n\n clear() {\n currentFrame = [];\n startQueue.clear();\n }\n\n};\n\nfunction flushStartQueue() {\n startQueue.forEach(startSafely);\n startQueue.clear();\n raf(advance);\n}\n\nfunction startSafely(animation) {\n if (!currentFrame.includes(animation)) startUnsafely(animation);\n}\n\nfunction startUnsafely(animation) {\n currentFrame.splice(findIndex(currentFrame, other => other.priority > animation.priority), 0, animation);\n}\n\nfunction advance(dt) {\n const nextFrame = prevFrame;\n\n for (let i = 0; i < currentFrame.length; i++) {\n const animation = currentFrame[i];\n priority = animation.priority;\n\n if (!animation.idle) {\n willAdvance(animation);\n animation.advance(dt);\n\n if (!animation.idle) {\n nextFrame.push(animation);\n }\n }\n }\n\n priority = 0;\n prevFrame = currentFrame;\n prevFrame.length = 0;\n currentFrame = nextFrame;\n return currentFrame.length > 0;\n}\n\nfunction findIndex(arr, test) {\n const index = arr.findIndex(test);\n return index < 0 ? arr.length : index;\n}\n\nconst colors = {\n transparent: 0x00000000,\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff\n};\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...parts) {\n return '\\\\(\\\\s*(' + parts.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nconst rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\nconst rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER));\nconst hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE));\nconst hsla = new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));\nconst hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex6 = /^#([0-9a-fA-F]{6})$/;\nconst hex8 = /^#([0-9a-fA-F]{8})$/;\n\nfunction normalizeColor(color) {\n let match;\n\n if (typeof color === 'number') {\n return color >>> 0 === color && color >= 0 && color <= 0xffffffff ? color : null;\n }\n\n if (match = hex6.exec(color)) return parseInt(match[1] + 'ff', 16) >>> 0;\n\n if (colors$1 && colors$1[color] !== undefined) {\n return colors$1[color];\n }\n\n if (match = rgb.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | 0x000000ff) >>> 0;\n }\n\n if (match = rgba.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | parse1(match[4])) >>> 0;\n }\n\n if (match = hex3.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + 'ff', 16) >>> 0;\n }\n\n if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;\n\n if (match = hex4.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + match[4] + match[4], 16) >>> 0;\n }\n\n if (match = hsl.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | 0x000000ff) >>> 0;\n }\n\n if (match = hsla.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | parse1(match[4])) >>> 0;\n }\n\n return null;\n}\n\nfunction hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nfunction hslToRgb(h, s, l) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;\n}\n\nfunction parse255(str) {\n const int = parseInt(str, 10);\n if (int < 0) return 0;\n if (int > 255) return 255;\n return int;\n}\n\nfunction parse360(str) {\n const int = parseFloat(str);\n return (int % 360 + 360) % 360 / 360;\n}\n\nfunction parse1(str) {\n const num = parseFloat(str);\n if (num < 0) return 0;\n if (num > 1) return 255;\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n const int = parseFloat(str);\n if (int < 0) return 0;\n if (int > 100) return 1;\n return int / 100;\n}\n\nfunction colorToRgba(input) {\n let int32Color = normalizeColor(input);\n if (int32Color === null) return input;\n int32Color = int32Color || 0;\n let r = (int32Color & 0xff000000) >>> 24;\n let g = (int32Color & 0x00ff0000) >>> 16;\n let b = (int32Color & 0x0000ff00) >>> 8;\n let a = (int32Color & 0x000000ff) / 255;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\nconst createInterpolator = (range, output, extrapolate) => {\n if (is.fun(range)) {\n return range;\n }\n\n if (is.arr(range)) {\n return createInterpolator({\n range,\n output: output,\n extrapolate\n });\n }\n\n if (is.str(range.output[0])) {\n return createStringInterpolator$1(range);\n }\n\n const config = range;\n const outputRange = config.output;\n const inputRange = config.range || [0, 1];\n const extrapolateLeft = config.extrapolateLeft || config.extrapolate || 'extend';\n const extrapolateRight = config.extrapolateRight || config.extrapolate || 'extend';\n\n const easing = config.easing || (t => t);\n\n return input => {\n const range = findRange(input, inputRange);\n return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight, config.map);\n };\n};\n\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {\n let result = map ? map(input) : input;\n\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') return result;else if (extrapolateLeft === 'clamp') result = inputMin;\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') return result;else if (extrapolateRight === 'clamp') result = inputMax;\n }\n\n if (outputMin === outputMax) return outputMin;\n if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax;\n if (inputMin === -Infinity) result = -result;else if (inputMax === Infinity) result = result - inputMin;else result = (result - inputMin) / (inputMax - inputMin);\n result = easing(result);\n if (outputMin === -Infinity) result = -result;else if (outputMax === Infinity) result = result + outputMin;else result = result * (outputMax - outputMin) + outputMin;\n return result;\n}\n\nfunction findRange(input, inputRange) {\n for (var i = 1; i < inputRange.length - 1; ++i) if (inputRange[i] >= input) break;\n\n return i - 1;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst $get = Symbol.for('FluidValue.get');\nconst $observers = Symbol.for('FluidValue.observers');\n\nconst hasFluidValue = arg => Boolean(arg && arg[$get]);\n\nconst getFluidValue = arg => arg && arg[$get] ? arg[$get]() : arg;\n\nconst getFluidObservers = target => target[$observers] || null;\n\nfunction callFluidObserver(observer, event) {\n if (observer.eventObserved) {\n observer.eventObserved(event);\n } else {\n observer(event);\n }\n}\n\nfunction callFluidObservers(target, event) {\n let observers = target[$observers];\n\n if (observers) {\n observers.forEach(observer => {\n callFluidObserver(observer, event);\n });\n }\n}\n\nclass FluidValue {\n constructor(get) {\n this[$get] = void 0;\n this[$observers] = void 0;\n\n if (!get && !(get = this.get)) {\n throw Error('Unknown getter');\n }\n\n setFluidGetter(this, get);\n }\n\n}\n\nconst setFluidGetter = (target, get) => setHidden(target, $get, get);\n\nfunction addFluidObserver(target, observer) {\n if (target[$get]) {\n let observers = target[$observers];\n\n if (!observers) {\n setHidden(target, $observers, observers = new Set());\n }\n\n if (!observers.has(observer)) {\n observers.add(observer);\n\n if (target.observerAdded) {\n target.observerAdded(observers.size, observer);\n }\n }\n }\n\n return observer;\n}\n\nfunction removeFluidObserver(target, observer) {\n let observers = target[$observers];\n\n if (observers && observers.has(observer)) {\n const count = observers.size - 1;\n\n if (count) {\n observers.delete(observer);\n } else {\n target[$observers] = null;\n }\n\n if (target.observerRemoved) {\n target.observerRemoved(count, observer);\n }\n }\n}\n\nconst setHidden = (target, key, value) => Object.defineProperty(target, key, {\n value,\n writable: true,\n configurable: true\n});\n\nconst numberRegex = /[+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\nconst colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d\\.]+%?\\))/gi;\nconst unitRegex = new RegExp(`(${numberRegex.source})(%|[a-z]+)`, 'i');\nconst rgbaRegex = /rgba\\(([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+)\\)/gi;\nconst cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nconst variableToRgba = input => {\n const [token, fallback] = parseCSSVariable(input);\n\n if (!token || isSSR()) {\n return input;\n }\n\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(token);\n\n if (value) {\n return value.trim();\n } else if (fallback && fallback.startsWith('--')) {\n const _value = window.getComputedStyle(document.documentElement).getPropertyValue(fallback);\n\n if (_value) {\n return _value;\n } else {\n return input;\n }\n } else if (fallback && cssVariableRegex.test(fallback)) {\n return variableToRgba(fallback);\n } else if (fallback) {\n return fallback;\n }\n\n return input;\n};\n\nconst parseCSSVariable = current => {\n const match = cssVariableRegex.exec(current);\n if (!match) return [,];\n const [, token, fallback] = match;\n return [token, fallback];\n};\n\nlet namedColorRegex;\n\nconst rgbaRound = (_, p1, p2, p3, p4) => `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})`;\n\nconst createStringInterpolator = config => {\n if (!namedColorRegex) namedColorRegex = colors$1 ? new RegExp(`(${Object.keys(colors$1).join('|')})(?!\\\\w)`, 'g') : /^\\b$/;\n const output = config.output.map(value => {\n return getFluidValue(value).replace(cssVariableRegex, variableToRgba).replace(colorRegex, colorToRgba).replace(namedColorRegex, colorToRgba);\n });\n const keyframes = output.map(value => value.match(numberRegex).map(Number));\n const outputRanges = keyframes[0].map((_, i) => keyframes.map(values => {\n if (!(i in values)) {\n throw Error('The arity of each \"output\" value must be equal');\n }\n\n return values[i];\n }));\n const interpolators = outputRanges.map(output => createInterpolator(_extends({}, config, {\n output\n })));\n return input => {\n var _output$find;\n\n const missingUnit = !unitRegex.test(output[0]) && ((_output$find = output.find(value => unitRegex.test(value))) == null ? void 0 : _output$find.replace(numberRegex, ''));\n let i = 0;\n return output[0].replace(numberRegex, () => `${interpolators[i++](input)}${missingUnit || ''}`).replace(rgbaRegex, rgbaRound);\n };\n};\n\nconst prefix = 'react-spring: ';\n\nconst once = fn => {\n const func = fn;\n let called = false;\n\n if (typeof func != 'function') {\n throw new TypeError(`${prefix}once requires a function parameter`);\n }\n\n return (...args) => {\n if (!called) {\n func(...args);\n called = true;\n }\n };\n};\n\nconst warnInterpolate = once(console.warn);\nfunction deprecateInterpolate() {\n warnInterpolate(`${prefix}The \"interpolate\" function is deprecated in v9 (use \"to\" instead)`);\n}\nconst warnDirectCall = once(console.warn);\nfunction deprecateDirectCall() {\n warnDirectCall(`${prefix}Directly calling start instead of using the api object is deprecated in v9 (use \".start\" instead), this will be removed in later 0.X.0 versions`);\n}\n\nfunction isAnimatedString(value) {\n return is.str(value) && (value[0] == '#' || /\\d/.test(value) || !isSSR() && cssVariableRegex.test(value) || value in (colors$1 || {}));\n}\n\nconst useIsomorphicLayoutEffect = isSSR() ? useEffect : useLayoutEffect;\n\nconst useIsMounted = () => {\n const isMounted = useRef(false);\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return isMounted;\n};\n\nfunction useForceUpdate() {\n const update = useState()[1];\n const isMounted = useIsMounted();\n return () => {\n if (isMounted.current) {\n update(Math.random());\n }\n };\n}\n\nfunction useMemoOne(getResult, inputs) {\n const [initial] = useState(() => ({\n inputs,\n result: getResult()\n }));\n const committed = useRef();\n const prevCache = committed.current;\n let cache = prevCache;\n\n if (cache) {\n const useCache = Boolean(inputs && cache.inputs && areInputsEqual(inputs, cache.inputs));\n\n if (!useCache) {\n cache = {\n inputs,\n result: getResult()\n };\n }\n } else {\n cache = initial;\n }\n\n useEffect(() => {\n committed.current = cache;\n\n if (prevCache == initial) {\n initial.inputs = initial.result = undefined;\n }\n }, [cache]);\n return cache.result;\n}\n\nfunction areInputsEqual(next, prev) {\n if (next.length !== prev.length) {\n return false;\n }\n\n for (let i = 0; i < next.length; i++) {\n if (next[i] !== prev[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nconst useOnce = effect => useEffect(effect, emptyDeps);\nconst emptyDeps = [];\n\nfunction usePrev(value) {\n const prevRef = useRef();\n useEffect(() => {\n prevRef.current = value;\n });\n return prevRef.current;\n}\n\nconst useReducedMotion = () => {\n const [reducedMotion, setReducedMotion] = useState(null);\n useIsomorphicLayoutEffect(() => {\n const mql = window.matchMedia('(prefers-reduced-motion)');\n\n const handleMediaChange = e => {\n setReducedMotion(e.matches);\n assign({\n skipAnimation: e.matches\n });\n };\n\n handleMediaChange(mql);\n mql.addEventListener('change', handleMediaChange);\n return () => {\n mql.removeEventListener('change', handleMediaChange);\n };\n }, []);\n return reducedMotion;\n};\n\nexport { FluidValue, globals as Globals, addFluidObserver, callFluidObserver, callFluidObservers, colorToRgba, colors, createInterpolator, createStringInterpolator, defineHidden, deprecateDirectCall, deprecateInterpolate, each, eachProp, flush, flushCalls, frameLoop, getFluidObservers, getFluidValue, hasFluidValue, hex3, hex4, hex6, hex8, hsl, hsla, is, isAnimatedString, isEqual, isSSR, noop, removeFluidObserver, rgb, rgba, setFluidGetter, toArray, useForceUpdate, useIsomorphicLayoutEffect, useMemoOne, useOnce, usePrev, useReducedMotion };\n","import { defineHidden, is, createInterpolator, eachProp, hasFluidValue, getFluidValue, each, isAnimatedString, useForceUpdate, useIsomorphicLayoutEffect, addFluidObserver, removeFluidObserver, raf, useOnce } from '@react-spring/shared';\nimport * as React from 'react';\nimport { forwardRef, useRef, useCallback, useEffect } from 'react';\n\nconst $node = Symbol.for('Animated:node');\nconst isAnimated = value => !!value && value[$node] === value;\nconst getAnimated = owner => owner && owner[$node];\nconst setAnimated = (owner, node) => defineHidden(owner, $node, node);\nconst getPayload = owner => owner && owner[$node] && owner[$node].getPayload();\nclass Animated {\n constructor() {\n this.payload = void 0;\n setAnimated(this, this);\n }\n\n getPayload() {\n return this.payload || [];\n }\n\n}\n\nclass AnimatedValue extends Animated {\n constructor(_value) {\n super();\n this.done = true;\n this.elapsedTime = void 0;\n this.lastPosition = void 0;\n this.lastVelocity = void 0;\n this.v0 = void 0;\n this.durationProgress = 0;\n this._value = _value;\n\n if (is.num(this._value)) {\n this.lastPosition = this._value;\n }\n }\n\n static create(value) {\n return new AnimatedValue(value);\n }\n\n getPayload() {\n return [this];\n }\n\n getValue() {\n return this._value;\n }\n\n setValue(value, step) {\n if (is.num(value)) {\n this.lastPosition = value;\n\n if (step) {\n value = Math.round(value / step) * step;\n\n if (this.done) {\n this.lastPosition = value;\n }\n }\n }\n\n if (this._value === value) {\n return false;\n }\n\n this._value = value;\n return true;\n }\n\n reset() {\n const {\n done\n } = this;\n this.done = false;\n\n if (is.num(this._value)) {\n this.elapsedTime = 0;\n this.durationProgress = 0;\n this.lastPosition = this._value;\n if (done) this.lastVelocity = null;\n this.v0 = null;\n }\n }\n\n}\n\nclass AnimatedString extends AnimatedValue {\n constructor(value) {\n super(0);\n this._string = null;\n this._toString = void 0;\n this._toString = createInterpolator({\n output: [value, value]\n });\n }\n\n static create(value) {\n return new AnimatedString(value);\n }\n\n getValue() {\n let value = this._string;\n return value == null ? this._string = this._toString(this._value) : value;\n }\n\n setValue(value) {\n if (is.str(value)) {\n if (value == this._string) {\n return false;\n }\n\n this._string = value;\n this._value = 1;\n } else if (super.setValue(value)) {\n this._string = null;\n } else {\n return false;\n }\n\n return true;\n }\n\n reset(goal) {\n if (goal) {\n this._toString = createInterpolator({\n output: [this.getValue(), goal]\n });\n }\n\n this._value = 0;\n super.reset();\n }\n\n}\n\nconst TreeContext = {\n dependencies: null\n};\n\nclass AnimatedObject extends Animated {\n constructor(source) {\n super();\n this.source = source;\n this.setValue(source);\n }\n\n getValue(animated) {\n const values = {};\n eachProp(this.source, (source, key) => {\n if (isAnimated(source)) {\n values[key] = source.getValue(animated);\n } else if (hasFluidValue(source)) {\n values[key] = getFluidValue(source);\n } else if (!animated) {\n values[key] = source;\n }\n });\n return values;\n }\n\n setValue(source) {\n this.source = source;\n this.payload = this._makePayload(source);\n }\n\n reset() {\n if (this.payload) {\n each(this.payload, node => node.reset());\n }\n }\n\n _makePayload(source) {\n if (source) {\n const payload = new Set();\n eachProp(source, this._addToPayload, payload);\n return Array.from(payload);\n }\n }\n\n _addToPayload(source) {\n if (TreeContext.dependencies && hasFluidValue(source)) {\n TreeContext.dependencies.add(source);\n }\n\n const payload = getPayload(source);\n\n if (payload) {\n each(payload, node => this.add(node));\n }\n }\n\n}\n\nclass AnimatedArray extends AnimatedObject {\n constructor(source) {\n super(source);\n }\n\n static create(source) {\n return new AnimatedArray(source);\n }\n\n getValue() {\n return this.source.map(node => node.getValue());\n }\n\n setValue(source) {\n const payload = this.getPayload();\n\n if (source.length == payload.length) {\n return payload.map((node, i) => node.setValue(source[i])).some(Boolean);\n }\n\n super.setValue(source.map(makeAnimated));\n return true;\n }\n\n}\n\nfunction makeAnimated(value) {\n const nodeType = isAnimatedString(value) ? AnimatedString : AnimatedValue;\n return nodeType.create(value);\n}\n\nfunction getAnimatedType(value) {\n const parentNode = getAnimated(value);\n return parentNode ? parentNode.constructor : is.arr(value) ? AnimatedArray : isAnimatedString(value) ? AnimatedString : AnimatedValue;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst withAnimated = (Component, host) => {\n const hasInstance = !is.fun(Component) || Component.prototype && Component.prototype.isReactComponent;\n return forwardRef((givenProps, givenRef) => {\n const instanceRef = useRef(null);\n const ref = hasInstance && useCallback(value => {\n instanceRef.current = updateRef(givenRef, value);\n }, [givenRef]);\n const [props, deps] = getAnimatedState(givenProps, host);\n const forceUpdate = useForceUpdate();\n\n const callback = () => {\n const instance = instanceRef.current;\n\n if (hasInstance && !instance) {\n return;\n }\n\n const didUpdate = instance ? host.applyAnimatedValues(instance, props.getValue(true)) : false;\n\n if (didUpdate === false) {\n forceUpdate();\n }\n };\n\n const observer = new PropsObserver(callback, deps);\n const observerRef = useRef();\n useIsomorphicLayoutEffect(() => {\n observerRef.current = observer;\n each(deps, dep => addFluidObserver(dep, observer));\n return () => {\n if (observerRef.current) {\n each(observerRef.current.deps, dep => removeFluidObserver(dep, observerRef.current));\n raf.cancel(observerRef.current.update);\n }\n };\n });\n useEffect(callback, []);\n useOnce(() => () => {\n const observer = observerRef.current;\n each(observer.deps, dep => removeFluidObserver(dep, observer));\n });\n const usedProps = host.getComponentProps(props.getValue());\n return React.createElement(Component, _extends({}, usedProps, {\n ref: ref\n }));\n });\n};\n\nclass PropsObserver {\n constructor(update, deps) {\n this.update = update;\n this.deps = deps;\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n raf.write(this.update);\n }\n }\n\n}\n\nfunction getAnimatedState(props, host) {\n const dependencies = new Set();\n TreeContext.dependencies = dependencies;\n if (props.style) props = _extends({}, props, {\n style: host.createAnimatedStyle(props.style)\n });\n props = new AnimatedObject(props);\n TreeContext.dependencies = null;\n return [props, dependencies];\n}\n\nfunction updateRef(ref, value) {\n if (ref) {\n if (is.fun(ref)) ref(value);else ref.current = value;\n }\n\n return value;\n}\n\nconst cacheKey = Symbol.for('AnimatedComponent');\nconst createHost = (components, {\n applyAnimatedValues: _applyAnimatedValues = () => false,\n createAnimatedStyle: _createAnimatedStyle = style => new AnimatedObject(style),\n getComponentProps: _getComponentProps = props => props\n} = {}) => {\n const hostConfig = {\n applyAnimatedValues: _applyAnimatedValues,\n createAnimatedStyle: _createAnimatedStyle,\n getComponentProps: _getComponentProps\n };\n\n const animated = Component => {\n const displayName = getDisplayName(Component) || 'Anonymous';\n\n if (is.str(Component)) {\n Component = animated[Component] || (animated[Component] = withAnimated(Component, hostConfig));\n } else {\n Component = Component[cacheKey] || (Component[cacheKey] = withAnimated(Component, hostConfig));\n }\n\n Component.displayName = `Animated(${displayName})`;\n return Component;\n };\n\n eachProp(components, (Component, key) => {\n if (is.arr(components)) {\n key = getDisplayName(Component);\n }\n\n animated[key] = animated(Component);\n });\n return {\n animated\n };\n};\n\nconst getDisplayName = arg => is.str(arg) ? arg : arg && is.str(arg.displayName) ? arg.displayName : is.fun(arg) && arg.name || null;\n\nexport { Animated, AnimatedArray, AnimatedObject, AnimatedString, AnimatedValue, createHost, getAnimated, getAnimatedType, getPayload, isAnimated, setAnimated };\n","import { eachProp, is, toArray, getFluidValue, isAnimatedString, Globals, useIsomorphicLayoutEffect, each, raf, flush, FluidValue, deprecateInterpolate, callFluidObservers, frameLoop, hasFluidValue, flushCalls, isEqual, getFluidObservers, addFluidObserver, removeFluidObserver, noop, useMemoOne, deprecateDirectCall, useForceUpdate, usePrev, useOnce, createInterpolator, createStringInterpolator } from '@react-spring/shared';\nexport { Globals, createInterpolator, useIsomorphicLayoutEffect, useReducedMotion } from '@react-spring/shared';\nimport * as React from 'react';\nimport { useContext, useMemo, useRef, useState } from 'react';\nimport { getAnimated, AnimatedValue, getPayload, AnimatedString, getAnimatedType, setAnimated } from '@react-spring/animated';\nexport * from '@react-spring/types/animated';\nexport * from '@react-spring/types/interpolation';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction callProp(value, ...args) {\n return is.fun(value) ? value(...args) : value;\n}\nconst matchProp = (value, key) => value === true || !!(key && value && (is.fun(value) ? value(key) : toArray(value).includes(key)));\nconst resolveProp = (prop, key) => is.obj(prop) ? key && prop[key] : prop;\nconst getDefaultProp = (props, key) => props.default === true ? props[key] : props.default ? props.default[key] : undefined;\n\nconst noopTransform = value => value;\n\nconst getDefaultProps = (props, transform = noopTransform) => {\n let keys = DEFAULT_PROPS;\n\n if (props.default && props.default !== true) {\n props = props.default;\n keys = Object.keys(props);\n }\n\n const defaults = {};\n\n for (const key of keys) {\n const value = transform(props[key], key);\n\n if (!is.und(value)) {\n defaults[key] = value;\n }\n }\n\n return defaults;\n};\nconst DEFAULT_PROPS = ['config', 'onProps', 'onStart', 'onChange', 'onPause', 'onResume', 'onRest'];\nconst RESERVED_PROPS = {\n config: 1,\n from: 1,\n to: 1,\n ref: 1,\n loop: 1,\n reset: 1,\n pause: 1,\n cancel: 1,\n reverse: 1,\n immediate: 1,\n default: 1,\n delay: 1,\n onProps: 1,\n onStart: 1,\n onChange: 1,\n onPause: 1,\n onResume: 1,\n onRest: 1,\n onResolve: 1,\n items: 1,\n trail: 1,\n sort: 1,\n expires: 1,\n initial: 1,\n enter: 1,\n update: 1,\n leave: 1,\n children: 1,\n onDestroyed: 1,\n keys: 1,\n callId: 1,\n parentId: 1\n};\n\nfunction getForwardProps(props) {\n const forward = {};\n let count = 0;\n eachProp(props, (value, prop) => {\n if (!RESERVED_PROPS[prop]) {\n forward[prop] = value;\n count++;\n }\n });\n\n if (count) {\n return forward;\n }\n}\n\nfunction inferTo(props) {\n const to = getForwardProps(props);\n\n if (to) {\n const out = {\n to\n };\n eachProp(props, (val, key) => key in to || (out[key] = val));\n return out;\n }\n\n return _extends({}, props);\n}\nfunction computeGoal(value) {\n value = getFluidValue(value);\n return is.arr(value) ? value.map(computeGoal) : isAnimatedString(value) ? Globals.createStringInterpolator({\n range: [0, 1],\n output: [value, value]\n })(1) : value;\n}\nfunction hasProps(props) {\n for (const _ in props) return true;\n\n return false;\n}\nfunction isAsyncTo(to) {\n return is.fun(to) || is.arr(to) && is.obj(to[0]);\n}\nfunction detachRefs(ctrl, ref) {\n var _ctrl$ref;\n\n (_ctrl$ref = ctrl.ref) == null ? void 0 : _ctrl$ref.delete(ctrl);\n ref == null ? void 0 : ref.delete(ctrl);\n}\nfunction replaceRef(ctrl, ref) {\n if (ref && ctrl.ref !== ref) {\n var _ctrl$ref2;\n\n (_ctrl$ref2 = ctrl.ref) == null ? void 0 : _ctrl$ref2.delete(ctrl);\n ref.add(ctrl);\n ctrl.ref = ref;\n }\n}\n\nfunction useChain(refs, timeSteps, timeFrame = 1000) {\n useIsomorphicLayoutEffect(() => {\n if (timeSteps) {\n let prevDelay = 0;\n each(refs, (ref, i) => {\n const controllers = ref.current;\n\n if (controllers.length) {\n let delay = timeFrame * timeSteps[i];\n if (isNaN(delay)) delay = prevDelay;else prevDelay = delay;\n each(controllers, ctrl => {\n each(ctrl.queue, props => {\n const memoizedDelayProp = props.delay;\n\n props.delay = key => delay + callProp(memoizedDelayProp || 0, key);\n });\n });\n ref.start();\n }\n });\n } else {\n let p = Promise.resolve();\n each(refs, ref => {\n const controllers = ref.current;\n\n if (controllers.length) {\n const queues = controllers.map(ctrl => {\n const q = ctrl.queue;\n ctrl.queue = [];\n return q;\n });\n p = p.then(() => {\n each(controllers, (ctrl, i) => each(queues[i] || [], update => ctrl.queue.push(update)));\n return Promise.all(ref.start());\n });\n }\n });\n }\n });\n}\n\nconst config = {\n default: {\n tension: 170,\n friction: 26\n },\n gentle: {\n tension: 120,\n friction: 14\n },\n wobbly: {\n tension: 180,\n friction: 12\n },\n stiff: {\n tension: 210,\n friction: 20\n },\n slow: {\n tension: 280,\n friction: 60\n },\n molasses: {\n tension: 280,\n friction: 120\n }\n};\nconst c1 = 1.70158;\nconst c2 = c1 * 1.525;\nconst c3 = c1 + 1;\nconst c4 = 2 * Math.PI / 3;\nconst c5 = 2 * Math.PI / 4.5;\n\nconst bounceOut = x => {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1) {\n return n1 * x * x;\n } else if (x < 2 / d1) {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n } else if (x < 2.5 / d1) {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n } else {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n};\n\nconst easings = {\n linear: x => x,\n easeInQuad: x => x * x,\n easeOutQuad: x => 1 - (1 - x) * (1 - x),\n easeInOutQuad: x => x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n easeInCubic: x => x * x * x,\n easeOutCubic: x => 1 - Math.pow(1 - x, 3),\n easeInOutCubic: x => x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2,\n easeInQuart: x => x * x * x * x,\n easeOutQuart: x => 1 - Math.pow(1 - x, 4),\n easeInOutQuart: x => x < 0.5 ? 8 * x * x * x * x : 1 - Math.pow(-2 * x + 2, 4) / 2,\n easeInQuint: x => x * x * x * x * x,\n easeOutQuint: x => 1 - Math.pow(1 - x, 5),\n easeInOutQuint: x => x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2,\n easeInSine: x => 1 - Math.cos(x * Math.PI / 2),\n easeOutSine: x => Math.sin(x * Math.PI / 2),\n easeInOutSine: x => -(Math.cos(Math.PI * x) - 1) / 2,\n easeInExpo: x => x === 0 ? 0 : Math.pow(2, 10 * x - 10),\n easeOutExpo: x => x === 1 ? 1 : 1 - Math.pow(2, -10 * x),\n easeInOutExpo: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2,\n easeInCirc: x => 1 - Math.sqrt(1 - Math.pow(x, 2)),\n easeOutCirc: x => Math.sqrt(1 - Math.pow(x - 1, 2)),\n easeInOutCirc: x => x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2,\n easeInBack: x => c3 * x * x * x - c1 * x * x,\n easeOutBack: x => 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2),\n easeInOutBack: x => x < 0.5 ? Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2,\n easeInElastic: x => x === 0 ? 0 : x === 1 ? 1 : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4),\n easeOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1,\n easeInOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2 : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5) / 2 + 1,\n easeInBounce: x => 1 - bounceOut(1 - x),\n easeOutBounce: bounceOut,\n easeInOutBounce: x => x < 0.5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2\n};\n\nconst defaults = _extends({}, config.default, {\n mass: 1,\n damping: 1,\n easing: easings.linear,\n clamp: false\n});\n\nclass AnimationConfig {\n constructor() {\n this.tension = void 0;\n this.friction = void 0;\n this.frequency = void 0;\n this.damping = void 0;\n this.mass = void 0;\n this.velocity = 0;\n this.restVelocity = void 0;\n this.precision = void 0;\n this.progress = void 0;\n this.duration = void 0;\n this.easing = void 0;\n this.clamp = void 0;\n this.bounce = void 0;\n this.decay = void 0;\n this.round = void 0;\n Object.assign(this, defaults);\n }\n\n}\nfunction mergeConfig(config, newConfig, defaultConfig) {\n if (defaultConfig) {\n defaultConfig = _extends({}, defaultConfig);\n sanitizeConfig(defaultConfig, newConfig);\n newConfig = _extends({}, defaultConfig, newConfig);\n }\n\n sanitizeConfig(config, newConfig);\n Object.assign(config, newConfig);\n\n for (const key in defaults) {\n if (config[key] == null) {\n config[key] = defaults[key];\n }\n }\n\n let {\n mass,\n frequency,\n damping\n } = config;\n\n if (!is.und(frequency)) {\n if (frequency < 0.01) frequency = 0.01;\n if (damping < 0) damping = 0;\n config.tension = Math.pow(2 * Math.PI / frequency, 2) * mass;\n config.friction = 4 * Math.PI * damping * mass / frequency;\n }\n\n return config;\n}\n\nfunction sanitizeConfig(config, props) {\n if (!is.und(props.decay)) {\n config.duration = undefined;\n } else {\n const isTensionConfig = !is.und(props.tension) || !is.und(props.friction);\n\n if (isTensionConfig || !is.und(props.frequency) || !is.und(props.damping) || !is.und(props.mass)) {\n config.duration = undefined;\n config.decay = undefined;\n }\n\n if (isTensionConfig) {\n config.frequency = undefined;\n }\n }\n}\n\nconst emptyArray = [];\nclass Animation {\n constructor() {\n this.changed = false;\n this.values = emptyArray;\n this.toValues = null;\n this.fromValues = emptyArray;\n this.to = void 0;\n this.from = void 0;\n this.config = new AnimationConfig();\n this.immediate = false;\n }\n\n}\n\nfunction scheduleProps(callId, {\n key,\n props,\n defaultProps,\n state,\n actions\n}) {\n return new Promise((resolve, reject) => {\n var _props$cancel;\n\n let delay;\n let timeout;\n let cancel = matchProp((_props$cancel = props.cancel) != null ? _props$cancel : defaultProps == null ? void 0 : defaultProps.cancel, key);\n\n if (cancel) {\n onStart();\n } else {\n if (!is.und(props.pause)) {\n state.paused = matchProp(props.pause, key);\n }\n\n let pause = defaultProps == null ? void 0 : defaultProps.pause;\n\n if (pause !== true) {\n pause = state.paused || matchProp(pause, key);\n }\n\n delay = callProp(props.delay || 0, key);\n\n if (pause) {\n state.resumeQueue.add(onResume);\n actions.pause();\n } else {\n actions.resume();\n onResume();\n }\n }\n\n function onPause() {\n state.resumeQueue.add(onResume);\n state.timeouts.delete(timeout);\n timeout.cancel();\n delay = timeout.time - raf.now();\n }\n\n function onResume() {\n if (delay > 0 && !Globals.skipAnimation) {\n state.delayed = true;\n timeout = raf.setTimeout(onStart, delay);\n state.pauseQueue.add(onPause);\n state.timeouts.add(timeout);\n } else {\n onStart();\n }\n }\n\n function onStart() {\n if (state.delayed) {\n state.delayed = false;\n }\n\n state.pauseQueue.delete(onPause);\n state.timeouts.delete(timeout);\n\n if (callId <= (state.cancelId || 0)) {\n cancel = true;\n }\n\n try {\n actions.start(_extends({}, props, {\n callId,\n cancel\n }), resolve);\n } catch (err) {\n reject(err);\n }\n }\n });\n}\n\nconst getCombinedResult = (target, results) => results.length == 1 ? results[0] : results.some(result => result.cancelled) ? getCancelledResult(target.get()) : results.every(result => result.noop) ? getNoopResult(target.get()) : getFinishedResult(target.get(), results.every(result => result.finished));\nconst getNoopResult = value => ({\n value,\n noop: true,\n finished: true,\n cancelled: false\n});\nconst getFinishedResult = (value, finished, cancelled = false) => ({\n value,\n finished,\n cancelled\n});\nconst getCancelledResult = value => ({\n value,\n cancelled: true,\n finished: false\n});\n\nfunction runAsync(to, props, state, target) {\n const {\n callId,\n parentId,\n onRest\n } = props;\n const {\n asyncTo: prevTo,\n promise: prevPromise\n } = state;\n\n if (!parentId && to === prevTo && !props.reset) {\n return prevPromise;\n }\n\n return state.promise = (async () => {\n state.asyncId = callId;\n state.asyncTo = to;\n const defaultProps = getDefaultProps(props, (value, key) => key === 'onRest' ? undefined : value);\n let preventBail;\n let bail;\n const bailPromise = new Promise((resolve, reject) => (preventBail = resolve, bail = reject));\n\n const bailIfEnded = bailSignal => {\n const bailResult = callId <= (state.cancelId || 0) && getCancelledResult(target) || callId !== state.asyncId && getFinishedResult(target, false);\n\n if (bailResult) {\n bailSignal.result = bailResult;\n bail(bailSignal);\n throw bailSignal;\n }\n };\n\n const animate = (arg1, arg2) => {\n const bailSignal = new BailSignal();\n const skipAnimationSignal = new SkipAniamtionSignal();\n return (async () => {\n if (Globals.skipAnimation) {\n stopAsync(state);\n skipAnimationSignal.result = getFinishedResult(target, false);\n bail(skipAnimationSignal);\n throw skipAnimationSignal;\n }\n\n bailIfEnded(bailSignal);\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n to: arg1\n });\n props.parentId = callId;\n eachProp(defaultProps, (value, key) => {\n if (is.und(props[key])) {\n props[key] = value;\n }\n });\n const result = await target.start(props);\n bailIfEnded(bailSignal);\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n return result;\n })();\n };\n\n let result;\n\n if (Globals.skipAnimation) {\n stopAsync(state);\n return getFinishedResult(target, false);\n }\n\n try {\n let animating;\n\n if (is.arr(to)) {\n animating = (async queue => {\n for (const props of queue) {\n await animate(props);\n }\n })(to);\n } else {\n animating = Promise.resolve(to(animate, target.stop.bind(target)));\n }\n\n await Promise.all([animating.then(preventBail), bailPromise]);\n result = getFinishedResult(target.get(), true, false);\n } catch (err) {\n if (err instanceof BailSignal) {\n result = err.result;\n } else if (err instanceof SkipAniamtionSignal) {\n result = err.result;\n } else {\n throw err;\n }\n } finally {\n if (callId == state.asyncId) {\n state.asyncId = parentId;\n state.asyncTo = parentId ? prevTo : undefined;\n state.promise = parentId ? prevPromise : undefined;\n }\n }\n\n if (is.fun(onRest)) {\n raf.batchedUpdates(() => {\n onRest(result, target, target.item);\n });\n }\n\n return result;\n })();\n}\nfunction stopAsync(state, cancelId) {\n flush(state.timeouts, t => t.cancel());\n state.pauseQueue.clear();\n state.resumeQueue.clear();\n state.asyncId = state.asyncTo = state.promise = undefined;\n if (cancelId) state.cancelId = cancelId;\n}\nclass BailSignal extends Error {\n constructor() {\n super('An async animation has been interrupted. You see this error because you ' + 'forgot to use `await` or `.catch(...)` on its returned promise.');\n this.result = void 0;\n }\n\n}\nclass SkipAniamtionSignal extends Error {\n constructor() {\n super('SkipAnimationSignal');\n this.result = void 0;\n }\n\n}\n\nconst isFrameValue = value => value instanceof FrameValue;\nlet nextId$1 = 1;\nclass FrameValue extends FluidValue {\n constructor(...args) {\n super(...args);\n this.id = nextId$1++;\n this.key = void 0;\n this._priority = 0;\n }\n\n get priority() {\n return this._priority;\n }\n\n set priority(priority) {\n if (this._priority != priority) {\n this._priority = priority;\n\n this._onPriorityChange(priority);\n }\n }\n\n get() {\n const node = getAnimated(this);\n return node && node.getValue();\n }\n\n to(...args) {\n return Globals.to(this, args);\n }\n\n interpolate(...args) {\n deprecateInterpolate();\n return Globals.to(this, args);\n }\n\n toJSON() {\n return this.get();\n }\n\n observerAdded(count) {\n if (count == 1) this._attach();\n }\n\n observerRemoved(count) {\n if (count == 0) this._detach();\n }\n\n _attach() {}\n\n _detach() {}\n\n _onChange(value, idle = false) {\n callFluidObservers(this, {\n type: 'change',\n parent: this,\n value,\n idle\n });\n }\n\n _onPriorityChange(priority) {\n if (!this.idle) {\n frameLoop.sort(this);\n }\n\n callFluidObservers(this, {\n type: 'priority',\n parent: this,\n priority\n });\n }\n\n}\n\nconst $P = Symbol.for('SpringPhase');\nconst HAS_ANIMATED = 1;\nconst IS_ANIMATING = 2;\nconst IS_PAUSED = 4;\nconst hasAnimated = target => (target[$P] & HAS_ANIMATED) > 0;\nconst isAnimating = target => (target[$P] & IS_ANIMATING) > 0;\nconst isPaused = target => (target[$P] & IS_PAUSED) > 0;\nconst setActiveBit = (target, active) => active ? target[$P] |= IS_ANIMATING | HAS_ANIMATED : target[$P] &= ~IS_ANIMATING;\nconst setPausedBit = (target, paused) => paused ? target[$P] |= IS_PAUSED : target[$P] &= ~IS_PAUSED;\n\nclass SpringValue extends FrameValue {\n constructor(arg1, arg2) {\n super();\n this.key = void 0;\n this.animation = new Animation();\n this.queue = void 0;\n this.defaultProps = {};\n this._state = {\n paused: false,\n delayed: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._pendingCalls = new Set();\n this._lastCallId = 0;\n this._lastToId = 0;\n this._memoizedDuration = 0;\n\n if (!is.und(arg1) || !is.und(arg2)) {\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n from: arg1\n });\n\n if (is.und(props.default)) {\n props.default = true;\n }\n\n this.start(props);\n }\n }\n\n get idle() {\n return !(isAnimating(this) || this._state.asyncTo) || isPaused(this);\n }\n\n get goal() {\n return getFluidValue(this.animation.to);\n }\n\n get velocity() {\n const node = getAnimated(this);\n return node instanceof AnimatedValue ? node.lastVelocity || 0 : node.getPayload().map(node => node.lastVelocity || 0);\n }\n\n get hasAnimated() {\n return hasAnimated(this);\n }\n\n get isAnimating() {\n return isAnimating(this);\n }\n\n get isPaused() {\n return isPaused(this);\n }\n\n get isDelayed() {\n return this._state.delayed;\n }\n\n advance(dt) {\n let idle = true;\n let changed = false;\n const anim = this.animation;\n let {\n config,\n toValues\n } = anim;\n const payload = getPayload(anim.to);\n\n if (!payload && hasFluidValue(anim.to)) {\n toValues = toArray(getFluidValue(anim.to));\n }\n\n anim.values.forEach((node, i) => {\n if (node.done) return;\n const to = node.constructor == AnimatedString ? 1 : payload ? payload[i].lastPosition : toValues[i];\n let finished = anim.immediate;\n let position = to;\n\n if (!finished) {\n position = node.lastPosition;\n\n if (config.tension <= 0) {\n node.done = true;\n return;\n }\n\n let elapsed = node.elapsedTime += dt;\n const from = anim.fromValues[i];\n const v0 = node.v0 != null ? node.v0 : node.v0 = is.arr(config.velocity) ? config.velocity[i] : config.velocity;\n let velocity;\n const precision = config.precision || (from == to ? 0.005 : Math.min(1, Math.abs(to - from) * 0.001));\n\n if (!is.und(config.duration)) {\n let p = 1;\n\n if (config.duration > 0) {\n if (this._memoizedDuration !== config.duration) {\n this._memoizedDuration = config.duration;\n\n if (node.durationProgress > 0) {\n node.elapsedTime = config.duration * node.durationProgress;\n elapsed = node.elapsedTime += dt;\n }\n }\n\n p = (config.progress || 0) + elapsed / this._memoizedDuration;\n p = p > 1 ? 1 : p < 0 ? 0 : p;\n node.durationProgress = p;\n }\n\n position = from + config.easing(p) * (to - from);\n velocity = (position - node.lastPosition) / dt;\n finished = p == 1;\n } else if (config.decay) {\n const decay = config.decay === true ? 0.998 : config.decay;\n const e = Math.exp(-(1 - decay) * elapsed);\n position = from + v0 / (1 - decay) * (1 - e);\n finished = Math.abs(node.lastPosition - position) <= precision;\n velocity = v0 * e;\n } else {\n velocity = node.lastVelocity == null ? v0 : node.lastVelocity;\n const restVelocity = config.restVelocity || precision / 10;\n const bounceFactor = config.clamp ? 0 : config.bounce;\n const canBounce = !is.und(bounceFactor);\n const isGrowing = from == to ? node.v0 > 0 : from < to;\n let isMoving;\n let isBouncing = false;\n const step = 1;\n const numSteps = Math.ceil(dt / step);\n\n for (let n = 0; n < numSteps; ++n) {\n isMoving = Math.abs(velocity) > restVelocity;\n\n if (!isMoving) {\n finished = Math.abs(to - position) <= precision;\n\n if (finished) {\n break;\n }\n }\n\n if (canBounce) {\n isBouncing = position == to || position > to == isGrowing;\n\n if (isBouncing) {\n velocity = -velocity * bounceFactor;\n position = to;\n }\n }\n\n const springForce = -config.tension * 0.000001 * (position - to);\n const dampingForce = -config.friction * 0.001 * velocity;\n const acceleration = (springForce + dampingForce) / config.mass;\n velocity = velocity + acceleration * step;\n position = position + velocity * step;\n }\n }\n\n node.lastVelocity = velocity;\n\n if (Number.isNaN(position)) {\n console.warn(`Got NaN while animating:`, this);\n finished = true;\n }\n }\n\n if (payload && !payload[i].done) {\n finished = false;\n }\n\n if (finished) {\n node.done = true;\n } else {\n idle = false;\n }\n\n if (node.setValue(position, config.round)) {\n changed = true;\n }\n });\n const node = getAnimated(this);\n const currVal = node.getValue();\n\n if (idle) {\n const finalVal = getFluidValue(anim.to);\n\n if ((currVal !== finalVal || changed) && !config.decay) {\n node.setValue(finalVal);\n\n this._onChange(finalVal);\n } else if (changed && config.decay) {\n this._onChange(currVal);\n }\n\n this._stop();\n } else if (changed) {\n this._onChange(currVal);\n }\n }\n\n set(value) {\n raf.batchedUpdates(() => {\n this._stop();\n\n this._focus(value);\n\n this._set(value);\n });\n return this;\n }\n\n pause() {\n this._update({\n pause: true\n });\n }\n\n resume() {\n this._update({\n pause: false\n });\n }\n\n finish() {\n if (isAnimating(this)) {\n const {\n to,\n config\n } = this.animation;\n raf.batchedUpdates(() => {\n this._onStart();\n\n if (!config.decay) {\n this._set(to, false);\n }\n\n this._stop();\n });\n }\n\n return this;\n }\n\n update(props) {\n const queue = this.queue || (this.queue = []);\n queue.push(props);\n return this;\n }\n\n start(to, arg2) {\n let queue;\n\n if (!is.und(to)) {\n queue = [is.obj(to) ? to : _extends({}, arg2, {\n to\n })];\n } else {\n queue = this.queue || [];\n this.queue = [];\n }\n\n return Promise.all(queue.map(props => {\n const up = this._update(props);\n\n return up;\n })).then(results => getCombinedResult(this, results));\n }\n\n stop(cancel) {\n const {\n to\n } = this.animation;\n\n this._focus(this.get());\n\n stopAsync(this._state, cancel && this._lastCallId);\n raf.batchedUpdates(() => this._stop(to, cancel));\n return this;\n }\n\n reset() {\n this._update({\n reset: true\n });\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._start();\n } else if (event.type == 'priority') {\n this.priority = event.priority + 1;\n }\n }\n\n _prepareNode(props) {\n const key = this.key || '';\n let {\n to,\n from\n } = props;\n to = is.obj(to) ? to[key] : to;\n\n if (to == null || isAsyncTo(to)) {\n to = undefined;\n }\n\n from = is.obj(from) ? from[key] : from;\n\n if (from == null) {\n from = undefined;\n }\n\n const range = {\n to,\n from\n };\n\n if (!hasAnimated(this)) {\n if (props.reverse) [to, from] = [from, to];\n from = getFluidValue(from);\n\n if (!is.und(from)) {\n this._set(from);\n } else if (!getAnimated(this)) {\n this._set(to);\n }\n }\n\n return range;\n }\n\n _update(_ref, isLoop) {\n let props = _extends({}, _ref);\n\n const {\n key,\n defaultProps\n } = this;\n if (props.default) Object.assign(defaultProps, getDefaultProps(props, (value, prop) => /^on/.test(prop) ? resolveProp(value, key) : value));\n mergeActiveFn(this, props, 'onProps');\n sendEvent(this, 'onProps', props, this);\n\n const range = this._prepareNode(props);\n\n if (Object.isFrozen(this)) {\n throw Error('Cannot animate a `SpringValue` object that is frozen. ' + 'Did you forget to pass your component to `animated(...)` before animating its props?');\n }\n\n const state = this._state;\n return scheduleProps(++this._lastCallId, {\n key,\n props,\n defaultProps,\n state,\n actions: {\n pause: () => {\n if (!isPaused(this)) {\n setPausedBit(this, true);\n flushCalls(state.pauseQueue);\n sendEvent(this, 'onPause', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n resume: () => {\n if (isPaused(this)) {\n setPausedBit(this, false);\n\n if (isAnimating(this)) {\n this._resume();\n }\n\n flushCalls(state.resumeQueue);\n sendEvent(this, 'onResume', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n start: this._merge.bind(this, range)\n }\n }).then(result => {\n if (props.loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props);\n\n if (nextProps) {\n return this._update(nextProps, true);\n }\n }\n\n return result;\n });\n }\n\n _merge(range, props, resolve) {\n if (props.cancel) {\n this.stop(true);\n return resolve(getCancelledResult(this));\n }\n\n const hasToProp = !is.und(range.to);\n const hasFromProp = !is.und(range.from);\n\n if (hasToProp || hasFromProp) {\n if (props.callId > this._lastToId) {\n this._lastToId = props.callId;\n } else {\n return resolve(getCancelledResult(this));\n }\n }\n\n const {\n key,\n defaultProps,\n animation: anim\n } = this;\n const {\n to: prevTo,\n from: prevFrom\n } = anim;\n let {\n to = prevTo,\n from = prevFrom\n } = range;\n\n if (hasFromProp && !hasToProp && (!props.default || is.und(to))) {\n to = from;\n }\n\n if (props.reverse) [to, from] = [from, to];\n const hasFromChanged = !isEqual(from, prevFrom);\n\n if (hasFromChanged) {\n anim.from = from;\n }\n\n from = getFluidValue(from);\n const hasToChanged = !isEqual(to, prevTo);\n\n if (hasToChanged) {\n this._focus(to);\n }\n\n const hasAsyncTo = isAsyncTo(props.to);\n const {\n config\n } = anim;\n const {\n decay,\n velocity\n } = config;\n\n if (hasToProp || hasFromProp) {\n config.velocity = 0;\n }\n\n if (props.config && !hasAsyncTo) {\n mergeConfig(config, callProp(props.config, key), props.config !== defaultProps.config ? callProp(defaultProps.config, key) : void 0);\n }\n\n let node = getAnimated(this);\n\n if (!node || is.und(to)) {\n return resolve(getFinishedResult(this, true));\n }\n\n const reset = is.und(props.reset) ? hasFromProp && !props.default : !is.und(from) && matchProp(props.reset, key);\n const value = reset ? from : this.get();\n const goal = computeGoal(to);\n const isAnimatable = is.num(goal) || is.arr(goal) || isAnimatedString(goal);\n const immediate = !hasAsyncTo && (!isAnimatable || matchProp(defaultProps.immediate || props.immediate, key));\n\n if (hasToChanged) {\n const nodeType = getAnimatedType(to);\n\n if (nodeType !== node.constructor) {\n if (immediate) {\n node = this._set(goal);\n } else throw Error(`Cannot animate between ${node.constructor.name} and ${nodeType.name}, as the \"to\" prop suggests`);\n }\n }\n\n const goalType = node.constructor;\n let started = hasFluidValue(to);\n let finished = false;\n\n if (!started) {\n const hasValueChanged = reset || !hasAnimated(this) && hasFromChanged;\n\n if (hasToChanged || hasValueChanged) {\n finished = isEqual(computeGoal(value), goal);\n started = !finished;\n }\n\n if (!isEqual(anim.immediate, immediate) && !immediate || !isEqual(config.decay, decay) || !isEqual(config.velocity, velocity)) {\n started = true;\n }\n }\n\n if (finished && isAnimating(this)) {\n if (anim.changed && !reset) {\n started = true;\n } else if (!started) {\n this._stop(prevTo);\n }\n }\n\n if (!hasAsyncTo) {\n if (started || hasFluidValue(prevTo)) {\n anim.values = node.getPayload();\n anim.toValues = hasFluidValue(to) ? null : goalType == AnimatedString ? [1] : toArray(goal);\n }\n\n if (anim.immediate != immediate) {\n anim.immediate = immediate;\n\n if (!immediate && !reset) {\n this._set(prevTo);\n }\n }\n\n if (started) {\n const {\n onRest\n } = anim;\n each(ACTIVE_EVENTS, type => mergeActiveFn(this, props, type));\n const result = getFinishedResult(this, checkFinished(this, prevTo));\n flushCalls(this._pendingCalls, result);\n\n this._pendingCalls.add(resolve);\n\n if (anim.changed) raf.batchedUpdates(() => {\n anim.changed = !reset;\n onRest == null ? void 0 : onRest(result, this);\n\n if (reset) {\n callProp(defaultProps.onRest, result);\n } else {\n anim.onStart == null ? void 0 : anim.onStart(result, this);\n }\n });\n }\n }\n\n if (reset) {\n this._set(value);\n }\n\n if (hasAsyncTo) {\n resolve(runAsync(props.to, props, this._state, this));\n } else if (started) {\n this._start();\n } else if (isAnimating(this) && !hasToChanged) {\n this._pendingCalls.add(resolve);\n } else {\n resolve(getNoopResult(value));\n }\n }\n\n _focus(value) {\n const anim = this.animation;\n\n if (value !== anim.to) {\n if (getFluidObservers(this)) {\n this._detach();\n }\n\n anim.to = value;\n\n if (getFluidObservers(this)) {\n this._attach();\n }\n }\n }\n\n _attach() {\n let priority = 0;\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n addFluidObserver(to, this);\n\n if (isFrameValue(to)) {\n priority = to.priority + 1;\n }\n }\n\n this.priority = priority;\n }\n\n _detach() {\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n removeFluidObserver(to, this);\n }\n }\n\n _set(arg, idle = true) {\n const value = getFluidValue(arg);\n\n if (!is.und(value)) {\n const oldNode = getAnimated(this);\n\n if (!oldNode || !isEqual(value, oldNode.getValue())) {\n const nodeType = getAnimatedType(value);\n\n if (!oldNode || oldNode.constructor != nodeType) {\n setAnimated(this, nodeType.create(value));\n } else {\n oldNode.setValue(value);\n }\n\n if (oldNode) {\n raf.batchedUpdates(() => {\n this._onChange(value, idle);\n });\n }\n }\n }\n\n return getAnimated(this);\n }\n\n _onStart() {\n const anim = this.animation;\n\n if (!anim.changed) {\n anim.changed = true;\n sendEvent(this, 'onStart', getFinishedResult(this, checkFinished(this, anim.to)), this);\n }\n }\n\n _onChange(value, idle) {\n if (!idle) {\n this._onStart();\n\n callProp(this.animation.onChange, value, this);\n }\n\n callProp(this.defaultProps.onChange, value, this);\n\n super._onChange(value, idle);\n }\n\n _start() {\n const anim = this.animation;\n getAnimated(this).reset(getFluidValue(anim.to));\n\n if (!anim.immediate) {\n anim.fromValues = anim.values.map(node => node.lastPosition);\n }\n\n if (!isAnimating(this)) {\n setActiveBit(this, true);\n\n if (!isPaused(this)) {\n this._resume();\n }\n }\n }\n\n _resume() {\n if (Globals.skipAnimation) {\n this.finish();\n } else {\n frameLoop.start(this);\n }\n }\n\n _stop(goal, cancel) {\n if (isAnimating(this)) {\n setActiveBit(this, false);\n const anim = this.animation;\n each(anim.values, node => {\n node.done = true;\n });\n\n if (anim.toValues) {\n anim.onChange = anim.onPause = anim.onResume = undefined;\n }\n\n callFluidObservers(this, {\n type: 'idle',\n parent: this\n });\n const result = cancel ? getCancelledResult(this.get()) : getFinishedResult(this.get(), checkFinished(this, goal != null ? goal : anim.to));\n flushCalls(this._pendingCalls, result);\n\n if (anim.changed) {\n anim.changed = false;\n sendEvent(this, 'onRest', result, this);\n }\n }\n }\n\n}\n\nfunction checkFinished(target, to) {\n const goal = computeGoal(to);\n const value = computeGoal(target.get());\n return isEqual(value, goal);\n}\n\nfunction createLoopUpdate(props, loop = props.loop, to = props.to) {\n let loopRet = callProp(loop);\n\n if (loopRet) {\n const overrides = loopRet !== true && inferTo(loopRet);\n const reverse = (overrides || props).reverse;\n const reset = !overrides || overrides.reset;\n return createUpdate(_extends({}, props, {\n loop,\n default: false,\n pause: undefined,\n to: !reverse || isAsyncTo(to) ? to : undefined,\n from: reset ? props.from : undefined,\n reset\n }, overrides));\n }\n}\nfunction createUpdate(props) {\n const {\n to,\n from\n } = props = inferTo(props);\n const keys = new Set();\n if (is.obj(to)) findDefined(to, keys);\n if (is.obj(from)) findDefined(from, keys);\n props.keys = keys.size ? Array.from(keys) : null;\n return props;\n}\nfunction declareUpdate(props) {\n const update = createUpdate(props);\n\n if (is.und(update.default)) {\n update.default = getDefaultProps(update);\n }\n\n return update;\n}\n\nfunction findDefined(values, keys) {\n eachProp(values, (value, key) => value != null && keys.add(key));\n}\n\nconst ACTIVE_EVENTS = ['onStart', 'onRest', 'onChange', 'onPause', 'onResume'];\n\nfunction mergeActiveFn(target, props, type) {\n target.animation[type] = props[type] !== getDefaultProp(props, type) ? resolveProp(props[type], target.key) : undefined;\n}\n\nfunction sendEvent(target, type, ...args) {\n var _target$animation$typ, _target$animation, _target$defaultProps$, _target$defaultProps;\n\n (_target$animation$typ = (_target$animation = target.animation)[type]) == null ? void 0 : _target$animation$typ.call(_target$animation, ...args);\n (_target$defaultProps$ = (_target$defaultProps = target.defaultProps)[type]) == null ? void 0 : _target$defaultProps$.call(_target$defaultProps, ...args);\n}\n\nconst BATCHED_EVENTS = ['onStart', 'onChange', 'onRest'];\nlet nextId = 1;\nclass Controller {\n constructor(props, flush) {\n this.id = nextId++;\n this.springs = {};\n this.queue = [];\n this.ref = void 0;\n this._flush = void 0;\n this._initialProps = void 0;\n this._lastAsyncId = 0;\n this._active = new Set();\n this._changed = new Set();\n this._started = false;\n this._item = void 0;\n this._state = {\n paused: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._events = {\n onStart: new Map(),\n onChange: new Map(),\n onRest: new Map()\n };\n this._onFrame = this._onFrame.bind(this);\n\n if (flush) {\n this._flush = flush;\n }\n\n if (props) {\n this.start(_extends({\n default: true\n }, props));\n }\n }\n\n get idle() {\n return !this._state.asyncTo && Object.values(this.springs).every(spring => {\n return spring.idle && !spring.isDelayed && !spring.isPaused;\n });\n }\n\n get item() {\n return this._item;\n }\n\n set item(item) {\n this._item = item;\n }\n\n get() {\n const values = {};\n this.each((spring, key) => values[key] = spring.get());\n return values;\n }\n\n set(values) {\n for (const key in values) {\n const value = values[key];\n\n if (!is.und(value)) {\n this.springs[key].set(value);\n }\n }\n }\n\n update(props) {\n if (props) {\n this.queue.push(createUpdate(props));\n }\n\n return this;\n }\n\n start(props) {\n let {\n queue\n } = this;\n\n if (props) {\n queue = toArray(props).map(createUpdate);\n } else {\n this.queue = [];\n }\n\n if (this._flush) {\n return this._flush(this, queue);\n }\n\n prepareKeys(this, queue);\n return flushUpdateQueue(this, queue);\n }\n\n stop(arg, keys) {\n if (arg !== !!arg) {\n keys = arg;\n }\n\n if (keys) {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].stop(!!arg));\n } else {\n stopAsync(this._state, this._lastAsyncId);\n this.each(spring => spring.stop(!!arg));\n }\n\n return this;\n }\n\n pause(keys) {\n if (is.und(keys)) {\n this.start({\n pause: true\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].pause());\n }\n\n return this;\n }\n\n resume(keys) {\n if (is.und(keys)) {\n this.start({\n pause: false\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].resume());\n }\n\n return this;\n }\n\n each(iterator) {\n eachProp(this.springs, iterator);\n }\n\n _onFrame() {\n const {\n onStart,\n onChange,\n onRest\n } = this._events;\n const active = this._active.size > 0;\n const changed = this._changed.size > 0;\n\n if (active && !this._started || changed && !this._started) {\n this._started = true;\n flush(onStart, ([onStart, result]) => {\n result.value = this.get();\n onStart(result, this, this._item);\n });\n }\n\n const idle = !active && this._started;\n const values = changed || idle && onRest.size ? this.get() : null;\n\n if (changed && onChange.size) {\n flush(onChange, ([onChange, result]) => {\n result.value = values;\n onChange(result, this, this._item);\n });\n }\n\n if (idle) {\n this._started = false;\n flush(onRest, ([onRest, result]) => {\n result.value = values;\n onRest(result, this, this._item);\n });\n }\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._changed.add(event.parent);\n\n if (!event.idle) {\n this._active.add(event.parent);\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else return;\n\n raf.onFrame(this._onFrame);\n }\n\n}\nfunction flushUpdateQueue(ctrl, queue) {\n return Promise.all(queue.map(props => flushUpdate(ctrl, props))).then(results => getCombinedResult(ctrl, results));\n}\nasync function flushUpdate(ctrl, props, isLoop) {\n const {\n keys,\n to,\n from,\n loop,\n onRest,\n onResolve\n } = props;\n const defaults = is.obj(props.default) && props.default;\n\n if (loop) {\n props.loop = false;\n }\n\n if (to === false) props.to = null;\n if (from === false) props.from = null;\n const asyncTo = is.arr(to) || is.fun(to) ? to : undefined;\n\n if (asyncTo) {\n props.to = undefined;\n props.onRest = undefined;\n\n if (defaults) {\n defaults.onRest = undefined;\n }\n } else {\n each(BATCHED_EVENTS, key => {\n const handler = props[key];\n\n if (is.fun(handler)) {\n const queue = ctrl['_events'][key];\n\n props[key] = ({\n finished,\n cancelled\n }) => {\n const result = queue.get(handler);\n\n if (result) {\n if (!finished) result.finished = false;\n if (cancelled) result.cancelled = true;\n } else {\n queue.set(handler, {\n value: null,\n finished: finished || false,\n cancelled: cancelled || false\n });\n }\n };\n\n if (defaults) {\n defaults[key] = props[key];\n }\n }\n });\n }\n\n const state = ctrl['_state'];\n\n if (props.pause === !state.paused) {\n state.paused = props.pause;\n flushCalls(props.pause ? state.pauseQueue : state.resumeQueue);\n } else if (state.paused) {\n props.pause = true;\n }\n\n const promises = (keys || Object.keys(ctrl.springs)).map(key => ctrl.springs[key].start(props));\n const cancel = props.cancel === true || getDefaultProp(props, 'cancel') === true;\n\n if (asyncTo || cancel && state.asyncId) {\n promises.push(scheduleProps(++ctrl['_lastAsyncId'], {\n props,\n state,\n actions: {\n pause: noop,\n resume: noop,\n\n start(props, resolve) {\n if (cancel) {\n stopAsync(state, ctrl['_lastAsyncId']);\n resolve(getCancelledResult(ctrl));\n } else {\n props.onRest = onRest;\n resolve(runAsync(asyncTo, props, state, ctrl));\n }\n }\n\n }\n }));\n }\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n const result = getCombinedResult(ctrl, await Promise.all(promises));\n\n if (loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props, loop, to);\n\n if (nextProps) {\n prepareKeys(ctrl, [nextProps]);\n return flushUpdate(ctrl, nextProps, true);\n }\n }\n\n if (onResolve) {\n raf.batchedUpdates(() => onResolve(result, ctrl, ctrl.item));\n }\n\n return result;\n}\nfunction getSprings(ctrl, props) {\n const springs = _extends({}, ctrl.springs);\n\n if (props) {\n each(toArray(props), props => {\n if (is.und(props.keys)) {\n props = createUpdate(props);\n }\n\n if (!is.obj(props.to)) {\n props = _extends({}, props, {\n to: undefined\n });\n }\n\n prepareSprings(springs, props, key => {\n return createSpring(key);\n });\n });\n }\n\n setSprings(ctrl, springs);\n return springs;\n}\nfunction setSprings(ctrl, springs) {\n eachProp(springs, (spring, key) => {\n if (!ctrl.springs[key]) {\n ctrl.springs[key] = spring;\n addFluidObserver(spring, ctrl);\n }\n });\n}\n\nfunction createSpring(key, observer) {\n const spring = new SpringValue();\n spring.key = key;\n\n if (observer) {\n addFluidObserver(spring, observer);\n }\n\n return spring;\n}\n\nfunction prepareSprings(springs, props, create) {\n if (props.keys) {\n each(props.keys, key => {\n const spring = springs[key] || (springs[key] = create(key));\n spring['_prepareNode'](props);\n });\n }\n}\n\nfunction prepareKeys(ctrl, queue) {\n each(queue, props => {\n prepareSprings(ctrl.springs, props, key => {\n return createSpring(key, ctrl);\n });\n });\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded$3 = [\"children\"];\nconst SpringContext = _ref => {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$3);\n\n const inherited = useContext(ctx);\n const pause = props.pause || !!inherited.pause,\n immediate = props.immediate || !!inherited.immediate;\n props = useMemoOne(() => ({\n pause,\n immediate\n }), [pause, immediate]);\n const {\n Provider\n } = ctx;\n return React.createElement(Provider, {\n value: props\n }, children);\n};\nconst ctx = makeContext(SpringContext, {});\nSpringContext.Provider = ctx.Provider;\nSpringContext.Consumer = ctx.Consumer;\n\nfunction makeContext(target, init) {\n Object.assign(target, React.createContext(init));\n target.Provider._context = target;\n target.Consumer._context = target;\n return target;\n}\n\nconst SpringRef = () => {\n const current = [];\n\n const SpringRef = function SpringRef(props) {\n deprecateDirectCall();\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = _getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.current = current;\n\n SpringRef.add = function (ctrl) {\n if (!current.includes(ctrl)) {\n current.push(ctrl);\n }\n };\n\n SpringRef.delete = function (ctrl) {\n const i = current.indexOf(ctrl);\n if (~i) current.splice(i, 1);\n };\n\n SpringRef.pause = function () {\n each(current, ctrl => ctrl.pause(...arguments));\n return this;\n };\n\n SpringRef.resume = function () {\n each(current, ctrl => ctrl.resume(...arguments));\n return this;\n };\n\n SpringRef.set = function (values) {\n each(current, ctrl => ctrl.set(values));\n };\n\n SpringRef.start = function (props) {\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = this._getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.stop = function () {\n each(current, ctrl => ctrl.stop(...arguments));\n return this;\n };\n\n SpringRef.update = function (props) {\n each(current, (ctrl, i) => ctrl.update(this._getProps(props, ctrl, i)));\n return this;\n };\n\n const _getProps = function _getProps(arg, ctrl, index) {\n return is.fun(arg) ? arg(index, ctrl) : arg;\n };\n\n SpringRef._getProps = _getProps;\n return SpringRef;\n};\n\nfunction useSprings(length, props, deps) {\n const propsFn = is.fun(props) && props;\n if (propsFn && !deps) deps = [];\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const layoutId = useRef(0);\n const forceUpdate = useForceUpdate();\n const state = useMemo(() => ({\n ctrls: [],\n queue: [],\n\n flush(ctrl, updates) {\n const springs = getSprings(ctrl, updates);\n const canFlushSync = layoutId.current > 0 && !state.queue.length && !Object.keys(springs).some(key => !ctrl.springs[key]);\n return canFlushSync ? flushUpdateQueue(ctrl, updates) : new Promise(resolve => {\n setSprings(ctrl, springs);\n state.queue.push(() => {\n resolve(flushUpdateQueue(ctrl, updates));\n });\n forceUpdate();\n });\n }\n\n }), []);\n const ctrls = useRef([...state.ctrls]);\n const updates = [];\n const prevLength = usePrev(length) || 0;\n useMemo(() => {\n each(ctrls.current.slice(length, prevLength), ctrl => {\n detachRefs(ctrl, ref);\n ctrl.stop(true);\n });\n ctrls.current.length = length;\n declareUpdates(prevLength, length);\n }, [length]);\n useMemo(() => {\n declareUpdates(0, Math.min(prevLength, length));\n }, deps);\n\n function declareUpdates(startIndex, endIndex) {\n for (let i = startIndex; i < endIndex; i++) {\n const ctrl = ctrls.current[i] || (ctrls.current[i] = new Controller(null, state.flush));\n const update = propsFn ? propsFn(i, ctrl) : props[i];\n\n if (update) {\n updates[i] = declareUpdate(update);\n }\n }\n }\n\n const springs = ctrls.current.map((ctrl, i) => getSprings(ctrl, updates[i]));\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useIsomorphicLayoutEffect(() => {\n layoutId.current++;\n state.ctrls = ctrls.current;\n const {\n queue\n } = state;\n\n if (queue.length) {\n state.queue = [];\n each(queue, cb => cb());\n }\n\n each(ctrls.current, (ctrl, i) => {\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext) {\n ctrl.start({\n default: context\n });\n }\n\n const update = updates[i];\n\n if (update) {\n replaceRef(ctrl, update.ref);\n\n if (ctrl.ref) {\n ctrl.queue.push(update);\n } else {\n ctrl.start(update);\n }\n }\n });\n });\n useOnce(() => () => {\n each(state.ctrls, ctrl => ctrl.stop(true));\n });\n const values = springs.map(x => _extends({}, x));\n return ref ? [values, ref] : values;\n}\n\nfunction useSpring(props, deps) {\n const isFn = is.fun(props);\n const [[values], ref] = useSprings(1, isFn ? props : [props], isFn ? deps || [] : deps);\n return isFn || arguments.length == 2 ? [values, ref] : values;\n}\n\nconst initSpringRef = () => SpringRef();\n\nconst useSpringRef = () => useState(initSpringRef)[0];\n\nfunction useTrail(length, propsArg, deps) {\n var _passedRef;\n\n const propsFn = is.fun(propsArg) && propsArg;\n if (propsFn && !deps) deps = [];\n let reverse = true;\n let passedRef = undefined;\n const result = useSprings(length, (i, ctrl) => {\n const props = propsFn ? propsFn(i, ctrl) : propsArg;\n passedRef = props.ref;\n reverse = reverse && props.reverse;\n return props;\n }, deps || [{}]);\n const ref = (_passedRef = passedRef) != null ? _passedRef : result[1];\n useIsomorphicLayoutEffect(() => {\n each(ref.current, (ctrl, i) => {\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n ctrl.start({\n to: parent.springs\n });\n } else {\n ctrl.start();\n }\n });\n }, deps);\n\n if (propsFn || arguments.length == 3) {\n ref['_getProps'] = (propsArg, ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n\n if (props) {\n const parent = ref.current[i + (props.reverse ? 1 : -1)];\n if (parent) props.to = parent.springs;\n return props;\n }\n };\n\n return result;\n }\n\n ref['start'] = propsArg => {\n const results = [];\n each(ref.current, (ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n results.push(ctrl.start(_extends({}, props, {\n to: parent.springs\n })));\n } else {\n results.push(ctrl.start(_extends({}, props)));\n }\n });\n return results;\n };\n\n return result[0];\n}\n\nlet TransitionPhase;\n\n(function (TransitionPhase) {\n TransitionPhase[\"MOUNT\"] = \"mount\";\n TransitionPhase[\"ENTER\"] = \"enter\";\n TransitionPhase[\"UPDATE\"] = \"update\";\n TransitionPhase[\"LEAVE\"] = \"leave\";\n})(TransitionPhase || (TransitionPhase = {}));\n\nfunction useTransition(data, props, deps) {\n const propsFn = is.fun(props) && props;\n const {\n reset,\n sort,\n trail = 0,\n expires = true,\n exitBeforeEnter = false,\n onDestroyed,\n ref: propsRef,\n config: propsConfig\n } = propsFn ? propsFn() : props;\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const items = toArray(data);\n const transitions = [];\n const usedTransitions = useRef(null);\n const prevTransitions = reset ? null : usedTransitions.current;\n useIsomorphicLayoutEffect(() => {\n usedTransitions.current = transitions;\n });\n useOnce(() => {\n each(transitions, t => {\n ref == null ? void 0 : ref.add(t.ctrl);\n t.ctrl.ref = ref;\n });\n return () => {\n each(usedTransitions.current, t => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n }\n\n detachRefs(t.ctrl, ref);\n t.ctrl.stop(true);\n });\n };\n });\n const keys = getKeys(items, propsFn ? propsFn() : props, prevTransitions);\n const expired = reset && usedTransitions.current || [];\n useIsomorphicLayoutEffect(() => each(expired, ({\n ctrl,\n item,\n key\n }) => {\n detachRefs(ctrl, ref);\n callProp(onDestroyed, item, key);\n }));\n const reused = [];\n if (prevTransitions) each(prevTransitions, (t, i) => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n expired.push(t);\n } else {\n i = reused[i] = keys.indexOf(t.key);\n if (~i) transitions[i] = t;\n }\n });\n each(items, (item, i) => {\n if (!transitions[i]) {\n transitions[i] = {\n key: keys[i],\n item,\n phase: TransitionPhase.MOUNT,\n ctrl: new Controller()\n };\n transitions[i].ctrl.item = item;\n }\n });\n\n if (reused.length) {\n let i = -1;\n const {\n leave\n } = propsFn ? propsFn() : props;\n each(reused, (keyIndex, prevIndex) => {\n const t = prevTransitions[prevIndex];\n\n if (~keyIndex) {\n i = transitions.indexOf(t);\n transitions[i] = _extends({}, t, {\n item: items[keyIndex]\n });\n } else if (leave) {\n transitions.splice(++i, 0, t);\n }\n });\n }\n\n if (is.fun(sort)) {\n transitions.sort((a, b) => sort(a.item, b.item));\n }\n\n let delay = -trail;\n const forceUpdate = useForceUpdate();\n const defaultProps = getDefaultProps(props);\n const changes = new Map();\n const exitingTransitions = useRef(new Map());\n const forceChange = useRef(false);\n each(transitions, (t, i) => {\n const key = t.key;\n const prevPhase = t.phase;\n const p = propsFn ? propsFn() : props;\n let to;\n let phase;\n let propsDelay = callProp(p.delay || 0, key);\n\n if (prevPhase == TransitionPhase.MOUNT) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else {\n const isLeave = keys.indexOf(key) < 0;\n\n if (prevPhase != TransitionPhase.LEAVE) {\n if (isLeave) {\n to = p.leave;\n phase = TransitionPhase.LEAVE;\n } else if (to = p.update) {\n phase = TransitionPhase.UPDATE;\n } else return;\n } else if (!isLeave) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else return;\n }\n\n to = callProp(to, t.item, i);\n to = is.obj(to) ? inferTo(to) : {\n to\n };\n\n if (!to.config) {\n const config = propsConfig || defaultProps.config;\n to.config = callProp(config, t.item, i, phase);\n }\n\n delay += trail;\n\n const payload = _extends({}, defaultProps, {\n delay: propsDelay + delay,\n ref: propsRef,\n immediate: p.immediate,\n reset: false\n }, to);\n\n if (phase == TransitionPhase.ENTER && is.und(payload.from)) {\n const _p = propsFn ? propsFn() : props;\n\n const from = is.und(_p.initial) || prevTransitions ? _p.from : _p.initial;\n payload.from = callProp(from, t.item, i);\n }\n\n const {\n onResolve\n } = payload;\n\n payload.onResolve = result => {\n callProp(onResolve, result);\n const transitions = usedTransitions.current;\n const t = transitions.find(t => t.key === key);\n if (!t) return;\n\n if (result.cancelled && t.phase != TransitionPhase.UPDATE) {\n return;\n }\n\n if (t.ctrl.idle) {\n const idle = transitions.every(t => t.ctrl.idle);\n\n if (t.phase == TransitionPhase.LEAVE) {\n const expiry = callProp(expires, t.item);\n\n if (expiry !== false) {\n const expiryMs = expiry === true ? 0 : expiry;\n t.expired = true;\n\n if (!idle && expiryMs > 0) {\n if (expiryMs <= 0x7fffffff) t.expirationId = setTimeout(forceUpdate, expiryMs);\n return;\n }\n }\n }\n\n if (idle && transitions.some(t => t.expired)) {\n exitingTransitions.current.delete(t);\n\n if (exitBeforeEnter) {\n forceChange.current = true;\n }\n\n forceUpdate();\n }\n }\n };\n\n const springs = getSprings(t.ctrl, payload);\n\n if (phase === TransitionPhase.LEAVE && exitBeforeEnter) {\n exitingTransitions.current.set(t, {\n phase,\n springs,\n payload\n });\n } else {\n changes.set(t, {\n phase,\n springs,\n payload\n });\n }\n });\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useIsomorphicLayoutEffect(() => {\n if (hasContext) {\n each(transitions, t => {\n t.ctrl.start({\n default: context\n });\n });\n }\n }, [context]);\n each(changes, (_, t) => {\n if (exitingTransitions.current.size) {\n const ind = transitions.findIndex(state => state.key === t.key);\n transitions.splice(ind, 1);\n }\n });\n useIsomorphicLayoutEffect(() => {\n each(exitingTransitions.current.size ? exitingTransitions.current : changes, ({\n phase,\n payload\n }, t) => {\n const {\n ctrl\n } = t;\n t.phase = phase;\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext && phase == TransitionPhase.ENTER) {\n ctrl.start({\n default: context\n });\n }\n\n if (payload) {\n replaceRef(ctrl, payload.ref);\n\n if ((ctrl.ref || ref) && !forceChange.current) {\n ctrl.update(payload);\n } else {\n ctrl.start(payload);\n\n if (forceChange.current) {\n forceChange.current = false;\n }\n }\n }\n });\n }, reset ? void 0 : deps);\n\n const renderTransitions = render => React.createElement(React.Fragment, null, transitions.map((t, i) => {\n const {\n springs\n } = changes.get(t) || t.ctrl;\n const elem = render(_extends({}, springs), t.item, t, i);\n return elem && elem.type ? React.createElement(elem.type, _extends({}, elem.props, {\n key: is.str(t.key) || is.num(t.key) ? t.key : t.ctrl.id,\n ref: elem.ref\n })) : elem;\n }));\n\n return ref ? [renderTransitions, ref] : renderTransitions;\n}\nlet nextKey = 1;\n\nfunction getKeys(items, {\n key,\n keys = key\n}, prevTransitions) {\n if (keys === null) {\n const reused = new Set();\n return items.map(item => {\n const t = prevTransitions && prevTransitions.find(t => t.item === item && t.phase !== TransitionPhase.LEAVE && !reused.has(t));\n\n if (t) {\n reused.add(t);\n return t.key;\n }\n\n return nextKey++;\n });\n }\n\n return is.und(keys) ? items : is.fun(keys) ? items.map(keys) : toArray(keys);\n}\n\nconst _excluded$2 = [\"children\"];\nfunction Spring(_ref) {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n return children(useSpring(props));\n}\n\nconst _excluded$1 = [\"items\", \"children\"];\nfunction Trail(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const trails = useTrail(items.length, props);\n return items.map((item, index) => {\n const result = children(item, index);\n return is.fun(result) ? result(trails[index]) : result;\n });\n}\n\nconst _excluded = [\"items\", \"children\"];\nfunction Transition(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return useTransition(items, props)(children);\n}\n\nclass Interpolation extends FrameValue {\n constructor(source, args) {\n super();\n this.key = void 0;\n this.idle = true;\n this.calc = void 0;\n this._active = new Set();\n this.source = source;\n this.calc = createInterpolator(...args);\n\n const value = this._get();\n\n const nodeType = getAnimatedType(value);\n setAnimated(this, nodeType.create(value));\n }\n\n advance(_dt) {\n const value = this._get();\n\n const oldValue = this.get();\n\n if (!isEqual(value, oldValue)) {\n getAnimated(this).setValue(value);\n\n this._onChange(value, this.idle);\n }\n\n if (!this.idle && checkIdle(this._active)) {\n becomeIdle(this);\n }\n }\n\n _get() {\n const inputs = is.arr(this.source) ? this.source.map(getFluidValue) : toArray(getFluidValue(this.source));\n return this.calc(...inputs);\n }\n\n _start() {\n if (this.idle && !checkIdle(this._active)) {\n this.idle = false;\n each(getPayload(this), node => {\n node.done = false;\n });\n\n if (Globals.skipAnimation) {\n raf.batchedUpdates(() => this.advance());\n becomeIdle(this);\n } else {\n frameLoop.start(this);\n }\n }\n }\n\n _attach() {\n let priority = 1;\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n addFluidObserver(source, this);\n }\n\n if (isFrameValue(source)) {\n if (!source.idle) {\n this._active.add(source);\n }\n\n priority = Math.max(priority, source.priority + 1);\n }\n });\n this.priority = priority;\n\n this._start();\n }\n\n _detach() {\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n removeFluidObserver(source, this);\n }\n });\n\n this._active.clear();\n\n becomeIdle(this);\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n if (event.idle) {\n this.advance();\n } else {\n this._active.add(event.parent);\n\n this._start();\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else if (event.type == 'priority') {\n this.priority = toArray(this.source).reduce((highest, parent) => Math.max(highest, (isFrameValue(parent) ? parent.priority : 0) + 1), 0);\n }\n }\n\n}\n\nfunction isIdle(source) {\n return source.idle !== false;\n}\n\nfunction checkIdle(active) {\n return !active.size || Array.from(active).every(isIdle);\n}\n\nfunction becomeIdle(self) {\n if (!self.idle) {\n self.idle = true;\n each(getPayload(self), node => {\n node.done = true;\n });\n callFluidObservers(self, {\n type: 'idle',\n parent: self\n });\n }\n}\n\nconst to = (source, ...args) => new Interpolation(source, args);\nconst interpolate = (source, ...args) => (deprecateInterpolate(), new Interpolation(source, args));\n\nGlobals.assign({\n createStringInterpolator,\n to: (source, args) => new Interpolation(source, args)\n});\nconst update = frameLoop.advance;\n\nexport { BailSignal, Controller, FrameValue, Interpolation, Spring, SpringContext, SpringRef, SpringValue, Trail, Transition, config, easings, inferTo, interpolate, to, update, useChain, useSpring, useSpringRef, useSprings, useTrail, useTransition };\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"ReactDOM\"];","import { Globals } from '@react-spring/core';\nexport * from '@react-spring/core';\nimport { unstable_batchedUpdates } from 'react-dom';\nimport { eachProp, is, toArray, FluidValue, each, getFluidValue, hasFluidValue, addFluidObserver, removeFluidObserver, callFluidObservers, createStringInterpolator, colors } from '@react-spring/shared';\nimport { AnimatedObject, createHost } from '@react-spring/animated';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded$2 = [\"style\", \"children\", \"scrollTop\", \"scrollLeft\"];\nconst isCustomPropRE = /^--/;\n\nfunction dangerousStyleValue(name, value) {\n if (value == null || typeof value === 'boolean' || value === '') return '';\n if (typeof value === 'number' && value !== 0 && !isCustomPropRE.test(name) && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) return value + 'px';\n return ('' + value).trim();\n}\n\nconst attributeCache = {};\nfunction applyAnimatedValues(instance, props) {\n if (!instance.nodeType || !instance.setAttribute) {\n return false;\n }\n\n const isFilterElement = instance.nodeName === 'filter' || instance.parentNode && instance.parentNode.nodeName === 'filter';\n\n const _ref = props,\n {\n style,\n children,\n scrollTop,\n scrollLeft\n } = _ref,\n attributes = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n const values = Object.values(attributes);\n const names = Object.keys(attributes).map(name => isFilterElement || instance.hasAttribute(name) ? name : attributeCache[name] || (attributeCache[name] = name.replace(/([A-Z])/g, n => '-' + n.toLowerCase())));\n\n if (children !== void 0) {\n instance.textContent = children;\n }\n\n for (let name in style) {\n if (style.hasOwnProperty(name)) {\n const value = dangerousStyleValue(name, style[name]);\n\n if (isCustomPropRE.test(name)) {\n instance.style.setProperty(name, value);\n } else {\n instance.style[name] = value;\n }\n }\n }\n\n names.forEach((name, i) => {\n instance.setAttribute(name, values[i]);\n });\n\n if (scrollTop !== void 0) {\n instance.scrollTop = scrollTop;\n }\n\n if (scrollLeft !== void 0) {\n instance.scrollLeft = scrollLeft;\n }\n}\nlet isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\nconst prefixKey = (prefix, key) => prefix + key.charAt(0).toUpperCase() + key.substring(1);\n\nconst prefixes = ['Webkit', 'Ms', 'Moz', 'O'];\nisUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => {\n prefixes.forEach(prefix => acc[prefixKey(prefix, prop)] = acc[prop]);\n return acc;\n}, isUnitlessNumber);\n\nconst _excluded$1 = [\"x\", \"y\", \"z\"];\nconst domTransforms = /^(matrix|translate|scale|rotate|skew)/;\nconst pxTransforms = /^(translate)/;\nconst degTransforms = /^(rotate|skew)/;\n\nconst addUnit = (value, unit) => is.num(value) && value !== 0 ? value + unit : value;\n\nconst isValueIdentity = (value, id) => is.arr(value) ? value.every(v => isValueIdentity(v, id)) : is.num(value) ? value === id : parseFloat(value) === id;\n\nclass AnimatedStyle extends AnimatedObject {\n constructor(_ref) {\n let {\n x,\n y,\n z\n } = _ref,\n style = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const inputs = [];\n const transforms = [];\n\n if (x || y || z) {\n inputs.push([x || 0, y || 0, z || 0]);\n transforms.push(xyz => [`translate3d(${xyz.map(v => addUnit(v, 'px')).join(',')})`, isValueIdentity(xyz, 0)]);\n }\n\n eachProp(style, (value, key) => {\n if (key === 'transform') {\n inputs.push([value || '']);\n transforms.push(transform => [transform, transform === '']);\n } else if (domTransforms.test(key)) {\n delete style[key];\n if (is.und(value)) return;\n const unit = pxTransforms.test(key) ? 'px' : degTransforms.test(key) ? 'deg' : '';\n inputs.push(toArray(value));\n transforms.push(key === 'rotate3d' ? ([x, y, z, deg]) => [`rotate3d(${x},${y},${z},${addUnit(deg, unit)})`, isValueIdentity(deg, 0)] : input => [`${key}(${input.map(v => addUnit(v, unit)).join(',')})`, isValueIdentity(input, key.startsWith('scale') ? 1 : 0)]);\n }\n });\n\n if (inputs.length) {\n style.transform = new FluidTransform(inputs, transforms);\n }\n\n super(style);\n }\n\n}\n\nclass FluidTransform extends FluidValue {\n constructor(inputs, transforms) {\n super();\n this._value = null;\n this.inputs = inputs;\n this.transforms = transforms;\n }\n\n get() {\n return this._value || (this._value = this._get());\n }\n\n _get() {\n let transform = '';\n let identity = true;\n each(this.inputs, (input, i) => {\n const arg1 = getFluidValue(input[0]);\n const [t, id] = this.transforms[i](is.arr(arg1) ? arg1 : input.map(getFluidValue));\n transform += ' ' + t;\n identity = identity && id;\n });\n return identity ? 'none' : transform;\n }\n\n observerAdded(count) {\n if (count == 1) each(this.inputs, input => each(input, value => hasFluidValue(value) && addFluidObserver(value, this)));\n }\n\n observerRemoved(count) {\n if (count == 0) each(this.inputs, input => each(input, value => hasFluidValue(value) && removeFluidObserver(value, this)));\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._value = null;\n }\n\n callFluidObservers(this, event);\n }\n\n}\n\nconst primitives = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', 'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nconst _excluded = [\"scrollTop\", \"scrollLeft\"];\nGlobals.assign({\n batchedUpdates: unstable_batchedUpdates,\n createStringInterpolator,\n colors\n});\nconst host = createHost(primitives, {\n applyAnimatedValues,\n createAnimatedStyle: style => new AnimatedStyle(style),\n getComponentProps: _ref => {\n let props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return props;\n }\n});\nconst animated = host.animated;\n\nexport { animated as a, animated };\n","/**\n * External dependencies\n */\nimport { Controller } from '@react-spring/web';\n\n/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useMemo, useRef } from '@wordpress/element';\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * If the block count exceeds the threshold, we disable the reordering animation\n * to avoid laginess.\n */\nconst BLOCK_ANIMATION_THRESHOLD = 200;\n\nfunction getAbsolutePosition( element ) {\n\treturn {\n\t\ttop: element.offsetTop,\n\t\tleft: element.offsetLeft,\n\t};\n}\n\n/**\n * Hook used to compute the styles required to move a div into a new position.\n *\n * The way this animation works is the following:\n * - It first renders the element as if there was no animation.\n * - It takes a snapshot of the position of the block to use it\n * as a destination point for the animation.\n * - It restores the element to the previous position using a CSS transform\n * - It uses the \"resetAnimation\" flag to reset the animation\n * from the beginning in order to animate to the new destination point.\n *\n * @param {Object} $1 Options\n * @param {*} $1.triggerAnimationOnChange Variable used to trigger the animation if it changes.\n * @param {string} $1.clientId\n */\nfunction useMovingAnimation( { triggerAnimationOnChange, clientId } ) {\n\tconst ref = useRef();\n\tconst {\n\t\tisTyping,\n\t\tgetGlobalBlockCount,\n\t\tisBlockSelected,\n\t\tisFirstMultiSelectedBlock,\n\t\tisBlockMultiSelected,\n\t\tisAncestorMultiSelected,\n\t} = useSelect( blockEditorStore );\n\n\t// Whenever the trigger changes, we need to take a snapshot of the current\n\t// position of the block to use it as a destination point for the animation.\n\tconst { previous, prevRect } = useMemo(\n\t\t() => ( {\n\t\t\tprevious: ref.current && getAbsolutePosition( ref.current ),\n\t\t\tprevRect: ref.current && ref.current.getBoundingClientRect(),\n\t\t} ),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[ triggerAnimationOnChange ]\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! previous || ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( ref.current );\n\t\tconst isSelected = isBlockSelected( clientId );\n\t\tconst adjustScrolling =\n\t\t\tisSelected || isFirstMultiSelectedBlock( clientId );\n\n\t\tfunction preserveScrollPosition() {\n\t\t\tif ( adjustScrolling && prevRect ) {\n\t\t\t\tconst blockRect = ref.current.getBoundingClientRect();\n\t\t\t\tconst diff = blockRect.top - prevRect.top;\n\n\t\t\t\tif ( diff ) {\n\t\t\t\t\tscrollContainer.scrollTop += diff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We disable the animation if the user has a preference for reduced\n\t\t// motion, if the user is typing (insertion by Enter), or if the block\n\t\t// count exceeds the threshold (insertion caused all the blocks that\n\t\t// follow to animate).\n\t\t// To do: consider enableing the _moving_ animation even for large\n\t\t// posts, while only disabling the _insertion_ animation?\n\t\tconst disableAnimation =\n\t\t\twindow.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ||\n\t\t\tisTyping() ||\n\t\t\tgetGlobalBlockCount() > BLOCK_ANIMATION_THRESHOLD;\n\n\t\tif ( disableAnimation ) {\n\t\t\t// If the animation is disabled and the scroll needs to be adjusted,\n\t\t\t// just move directly to the final scroll position.\n\t\t\tpreserveScrollPosition();\n\t\t\treturn;\n\t\t}\n\n\t\tconst isPartOfSelection =\n\t\t\tisSelected ||\n\t\t\tisBlockMultiSelected( clientId ) ||\n\t\t\tisAncestorMultiSelected( clientId );\n\t\t// Make sure the other blocks move under the selected block(s).\n\t\tconst zIndex = isPartOfSelection ? '1' : '';\n\n\t\tconst controller = new Controller( {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tconfig: { mass: 5, tension: 2000, friction: 200 },\n\t\t\tonChange( { value } ) {\n\t\t\t\tif ( ! ref.current ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet { x, y } = value;\n\t\t\t\tx = Math.round( x );\n\t\t\t\ty = Math.round( y );\n\t\t\t\tconst finishedMoving = x === 0 && y === 0;\n\t\t\t\tref.current.style.transformOrigin = 'center center';\n\t\t\t\tref.current.style.transform = finishedMoving\n\t\t\t\t\t? null // Set to `null` to explicitly remove the transform.\n\t\t\t\t\t: `translate3d(${ x }px,${ y }px,0)`;\n\t\t\t\tref.current.style.zIndex = zIndex;\n\t\t\t\tpreserveScrollPosition();\n\t\t\t},\n\t\t} );\n\n\t\tref.current.style.transform = undefined;\n\t\tconst destination = getAbsolutePosition( ref.current );\n\n\t\tconst x = Math.round( previous.left - destination.left );\n\t\tconst y = Math.round( previous.top - destination.top );\n\n\t\tcontroller.start( { x: 0, y: 0, from: { x, y } } );\n\n\t\treturn () => {\n\t\t\tcontroller.stop();\n\t\t\tcontroller.set( { x: 0, y: 0 } );\n\t\t};\n\t}, [\n\t\tprevious,\n\t\tprevRect,\n\t\tclientId,\n\t\tisTyping,\n\t\tgetGlobalBlockCount,\n\t\tisBlockSelected,\n\t\tisFirstMultiSelectedBlock,\n\t\tisBlockMultiSelected,\n\t\tisAncestorMultiSelected,\n\t] );\n\n\treturn ref;\n}\n\nexport default useMovingAnimation;\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\nimport {\n\tfocus,\n\tisFormElement,\n\tisTextField,\n\tplaceCaretAtHorizontalEdge,\n} from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { isInsideRootBlock } from '../../../utils/dom';\nimport { store as blockEditorStore } from '../../../store';\n\n/** @typedef {import('@wordpress/element').RefObject} RefObject */\n\n/**\n * Transitions focus to the block or inner tabbable when the block becomes\n * selected and an initial position is set.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {RefObject} React ref with the block element.\n */\nexport function useFocusFirstElement( { clientId, initialPosition } ) {\n\tconst ref = useRef();\n\tconst { isBlockSelected, isMultiSelecting, __unstableGetEditorMode } =\n\t\tuseSelect( blockEditorStore );\n\n\tuseEffect( () => {\n\t\t// Check if the block is still selected at the time this effect runs.\n\t\tif (\n\t\t\t! isBlockSelected( clientId ) ||\n\t\t\tisMultiSelecting() ||\n\t\t\t__unstableGetEditorMode() === 'zoom-out'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( initialPosition === undefined || initialPosition === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { ownerDocument } = ref.current;\n\n\t\t// Do not focus the block if it already contains the active element.\n\t\tif ( isInsideRootBlock( ref.current, ownerDocument.activeElement ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find all tabbables within node.\n\t\tconst textInputs = focus.tabbable\n\t\t\t.find( ref.current )\n\t\t\t.filter( ( node ) => isTextField( node ) );\n\n\t\t// If reversed (e.g. merge via backspace), use the last in the set of\n\t\t// tabbables.\n\t\tconst isReverse = -1 === initialPosition;\n\t\tconst target =\n\t\t\ttextInputs[ isReverse ? textInputs.length - 1 : 0 ] || ref.current;\n\n\t\tif ( ! isInsideRootBlock( ref.current, target ) ) {\n\t\t\tref.current.focus();\n\t\t\treturn;\n\t\t}\n\n\t\t// Check to see if element is focussable before a generic caret insert.\n\t\tif ( ! ref.current.getAttribute( 'contenteditable' ) ) {\n\t\t\tconst focusElement = focus.tabbable.findNext( ref.current );\n\t\t\t// Make sure focusElement is valid, contained in the same block, and a form field.\n\t\t\tif (\n\t\t\t\tfocusElement &&\n\t\t\t\tisInsideRootBlock( ref.current, focusElement ) &&\n\t\t\t\tisFormElement( focusElement )\n\t\t\t) {\n\t\t\t\tfocusElement.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tplaceCaretAtHorizontalEdge( target, isReverse );\n\t}, [ initialPosition, clientId ] );\n\n\treturn ref;\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/*\n * Adds `is-hovered` class when the block is hovered and in navigation or\n * outline mode.\n */\nexport function useIsHovered( { clientId } ) {\n\tconst { hoverBlock } = useDispatch( blockEditorStore );\n\n\tfunction listener( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst action = event.type === 'mouseover' ? 'add' : 'remove';\n\n\t\tevent.preventDefault();\n\t\tevent.currentTarget.classList[ action ]( 'is-hovered' );\n\n\t\tif ( action === 'add' ) {\n\t\t\thoverBlock( clientId );\n\t\t} else {\n\t\t\thoverBlock( null );\n\t\t}\n\t}\n\n\treturn useRefEffect( ( node ) => {\n\t\tnode.addEventListener( 'mouseout', listener );\n\t\tnode.addEventListener( 'mouseover', listener );\n\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'mouseout', listener );\n\t\t\tnode.removeEventListener( 'mouseover', listener );\n\n\t\t\t// Remove class in case it lingers.\n\t\t\tnode.classList.remove( 'is-hovered' );\n\t\t\thoverBlock( null );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { isInsideRootBlock } from '../../../utils/dom';\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Selects the block if it receives focus.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useFocusHandler( clientId ) {\n\tconst { isBlockSelected } = useSelect( blockEditorStore );\n\tconst { selectBlock, selectionChange } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\t/**\n\t\t\t * Marks the block as selected when focused and not already\n\t\t\t * selected. This specifically handles the case where block does not\n\t\t\t * set focus on its own (via `setFocus`), typically if there is no\n\t\t\t * focusable input in the block.\n\t\t\t *\n\t\t\t * @param {FocusEvent} event Focus event.\n\t\t\t */\n\t\t\tfunction onFocus( event ) {\n\t\t\t\t// When the whole editor is editable, let writing flow handle\n\t\t\t\t// selection.\n\t\t\t\tif (\n\t\t\t\t\tnode.parentElement.closest( '[contenteditable=\"true\"]' )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check synchronously because a non-selected block might be\n\t\t\t\t// getting data through `useSelect` asynchronously.\n\t\t\t\tif ( isBlockSelected( clientId ) ) {\n\t\t\t\t\t// Potentially change selection away from rich text.\n\t\t\t\t\tif ( ! event.target.isContentEditable ) {\n\t\t\t\t\t\tselectionChange( clientId );\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If an inner block is focussed, that block is resposible for\n\t\t\t\t// setting the selected block.\n\t\t\t\tif ( ! isInsideRootBlock( node, event.target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselectBlock( clientId );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'focusin', onFocus );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'focusin', onFocus );\n\t\t\t};\n\t\t},\n\t\t[ isBlockSelected, selectBlock ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { isTextField } from '@wordpress/dom';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Adds block behaviour:\n * - Removes the block on BACKSPACE.\n * - Inserts a default block on ENTER.\n * - Disables dragging of block contents.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useEventHandlers( { clientId, isSelected } ) {\n\tconst { getBlockRootClientId, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertAfterBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Interprets keydown event intent to remove or insert after block if\n\t\t\t * key event occurs on wrapper node. This can occur when the block has\n\t\t\t * no text fields of its own, particularly after initial insertion, to\n\t\t\t * allow for easy deletion and continuous writing flow to add additional\n\t\t\t * content.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keydown event.\n\t\t\t */\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, target } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode !== ENTER &&\n\t\t\t\t\tkeyCode !== BACKSPACE &&\n\t\t\t\t\tkeyCode !== DELETE\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( target !== node || isTextField( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( keyCode === ENTER ) {\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t} else {\n\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Prevents default dragging behavior within a block. To do: we must\n\t\t\t * handle this in the future and clean up the drag target.\n\t\t\t *\n\t\t\t * @param {DragEvent} event Drag event.\n\t\t\t */\n\t\t\tfunction onDragStart( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'dragstart', onDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'dragstart', onDragStart );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tisSelected,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockIndex,\n\t\t\tinsertAfterBlock,\n\t\t\tremoveBlock,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Allows navigation mode to be exited by clicking in the selected block.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useNavModeExit( clientId ) {\n\tconst { isNavigationMode, isBlockSelected } = useSelect( blockEditorStore );\n\tconst { setNavigationMode, selectBlock } = useDispatch( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\t// Don't select a block if it's already handled by a child\n\t\t\t\t// block.\n\t\t\t\tif ( isNavigationMode() && ! event.defaultPrevented ) {\n\t\t\t\t\t// Prevent focus from moving to the block.\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// When clicking on a selected block, exit navigation mode.\n\t\t\t\t\tif ( isBlockSelected( clientId ) ) {\n\t\t\t\t\t\tsetNavigationMode( false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectBlock( clientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t};\n\t\t},\n\t\t[ clientId, isNavigationMode, isBlockSelected, setNavigationMode ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\n/**\n * Allows Zoom Out mode to be exited by double clicking in the selected block.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useZoomOutModeExit( { editorMode } ) {\n\tconst { getSettings, isZoomOut } = unlock( useSelect( blockEditorStore ) );\n\tconst { __unstableSetEditorMode, resetZoomLevel } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\t// In \"compose\" mode.\n\t\t\tconst composeMode = editorMode === 'zoom-out' && isZoomOut();\n\n\t\t\tif ( ! composeMode ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onDoubleClick( event ) {\n\t\t\t\tif ( ! event.defaultPrevented ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\tconst { __experimentalSetIsInserterOpened } = getSettings();\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof __experimentalSetIsInserterOpened === 'function'\n\t\t\t\t\t) {\n\t\t\t\t\t\t__experimentalSetIsInserterOpened( false );\n\t\t\t\t\t}\n\t\t\t\t\t__unstableSetEditorMode( 'edit' );\n\t\t\t\t\tresetZoomLevel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'dblclick', onDoubleClick );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'dblclick', onDoubleClick );\n\t\t\t};\n\t\t},\n\t\t[ editorMode, getSettings, __unstableSetEditorMode ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { IntersectionObserver } from '../';\n\nexport function useIntersectionObserver() {\n\tconst observer = useContext( IntersectionObserver );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( observer ) {\n\t\t\t\tobserver.observe( node );\n\t\t\t\treturn () => {\n\t\t\t\t\tobserver.unobserve( node );\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t[ observer ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useReducedMotion, useRefEffect } from '@wordpress/compose';\n\nexport function useScrollIntoView( { isSelected } ) {\n\tconst prefersReducedMotion = useReducedMotion();\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( isSelected ) {\n\t\t\t\tconst { ownerDocument } = node;\n\t\t\t\tconst { defaultView } = ownerDocument;\n\t\t\t\tif ( ! defaultView.IntersectionObserver ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst observer = new defaultView.IntersectionObserver(\n\t\t\t\t\t( entries ) => {\n\t\t\t\t\t\t// Once observing starts, we always get an initial\n\t\t\t\t\t\t// entry with the intersecting state.\n\t\t\t\t\t\tif ( ! entries[ 0 ].isIntersecting ) {\n\t\t\t\t\t\t\tnode.scrollIntoView( {\n\t\t\t\t\t\t\t\tbehavior: prefersReducedMotion\n\t\t\t\t\t\t\t\t\t? 'instant'\n\t\t\t\t\t\t\t\t\t: 'smooth',\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tobserver.observe( node );\n\t\t\t\treturn () => {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t[ isSelected ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function useFlashEditableBlocks( {\n\tclientId = '',\n\tisEnabled = true,\n} = {} ) {\n\tconst { getEnabledClientIdsTree } = unlock( useSelect( blockEditorStore ) );\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst flashEditableBlocks = () => {\n\t\t\t\tgetEnabledClientIdsTree( clientId ).forEach(\n\t\t\t\t\t( { clientId: id } ) => {\n\t\t\t\t\t\tconst block = element.querySelector(\n\t\t\t\t\t\t\t`[data-block=\"${ id }\"]`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( ! block ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.classList.remove( 'has-editable-outline' );\n\t\t\t\t\t\t// Force reflow to trigger the animation.\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\tblock.offsetWidth;\n\t\t\t\t\t\tblock.classList.add( 'has-editable-outline' );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst handleClick = ( event ) => {\n\t\t\t\tconst shouldFlash =\n\t\t\t\t\tevent.target === element ||\n\t\t\t\t\tevent.target.classList.contains( 'is-root-container' );\n\t\t\t\tif ( ! shouldFlash ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tflashEditableBlocks();\n\t\t\t};\n\n\t\t\telement.addEventListener( 'click', handleClick );\n\t\t\treturn () => element.removeEventListener( 'click', handleClick );\n\t\t},\n\t\t[ isEnabled ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useMemo, useContext } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport isURLLike from '../components/link-control/is-url-like';\nimport { unlock } from '../lock-unlock';\nimport BlockContext from '../components/block-context';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Given a binding of block attributes, returns a higher order component that\n * overrides its `attributes` and `setAttributes` props to sync any changes needed.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\n\nconst BLOCK_BINDINGS_ALLOWED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/image': [ 'id', 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget', 'rel' ],\n};\n\nconst DEFAULT_ATTRIBUTE = '__default';\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param {string} blockName The block name (e.g. 'core/paragraph').\n * @param {Object} bindings A block's bindings from the metadata attribute.\n *\n * @return {Object} The bindings with default replaced for pattern overrides.\n */\nfunction replacePatternOverrideDefaultBindings( blockName, bindings ) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif (\n\t\tbindings?.[ DEFAULT_ATTRIBUTE ]?.source === 'core/pattern-overrides'\n\t) {\n\t\tconst supportedAttributes = BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];\n\t\tconst bindingsWithDefaults = {};\n\t\tfor ( const attributeName of supportedAttributes ) {\n\t\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t\t? bindings[ attributeName ]\n\t\t\t\t: { source: 'core/pattern-overrides' };\n\t\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t\t}\n\n\t\treturn bindingsWithDefaults;\n\t}\n\n\treturn bindings;\n}\n\n/**\n * Based on the given block name,\n * check if it is possible to bind the block.\n *\n * @param {string} blockName - The block name.\n * @return {boolean} Whether it is possible to bind the block to sources.\n */\nexport function canBindBlock( blockName ) {\n\treturn blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;\n}\n\n/**\n * Based on the given block name and attribute name,\n * check if it is possible to bind the block attribute.\n *\n * @param {string} blockName - The block name.\n * @param {string} attributeName - The attribute name.\n * @return {boolean} Whether it is possible to bind the block attribute.\n */\nexport function canBindAttribute( blockName, attributeName ) {\n\treturn (\n\t\tcanBindBlock( blockName ) &&\n\t\tBLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ].includes( attributeName )\n\t);\n}\n\nexport function getBindableAttributes( blockName ) {\n\treturn BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];\n}\n\nexport const withBlockBindingSupport = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst registry = useRegistry();\n\t\tconst blockContext = useContext( BlockContext );\n\t\tconst sources = useSelect( ( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources()\n\t\t);\n\t\tconst { name, clientId, context, setAttributes } = props;\n\t\tconst blockBindings = useMemo(\n\t\t\t() =>\n\t\t\t\treplacePatternOverrideDefaultBindings(\n\t\t\t\t\tname,\n\t\t\t\t\tprops.attributes.metadata?.bindings\n\t\t\t\t),\n\t\t\t[ props.attributes.metadata?.bindings, name ]\n\t\t);\n\n\t\t// While this hook doesn't directly call any selectors, `useSelect` is\n\t\t// used purposely here to ensure `boundAttributes` is updated whenever\n\t\t// there are attribute updates.\n\t\t// `source.getValues` may also call a selector via `registry.select`.\n\t\tconst updatedContext = { ...context };\n\t\tconst boundAttributes = useSelect( () => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst attributes = {};\n\n\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\tfor ( const [ attributeName, binding ] of Object.entries(\n\t\t\t\tblockBindings\n\t\t\t) ) {\n\t\t\t\tconst { source: sourceName, args: sourceArgs } = binding;\n\t\t\t\tconst source = sources[ sourceName ];\n\t\t\t\tif ( ! source || ! canBindAttribute( name, attributeName ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Populate context.\n\t\t\t\tfor ( const key of source.usesContext || [] ) {\n\t\t\t\t\tupdatedContext[ key ] = blockContext[ key ];\n\t\t\t\t}\n\n\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\targs: sourceArgs,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\tfor ( const [ source, bindings ] of blockBindingsBySource ) {\n\t\t\t\t\t// Get values in batch if the source supports it.\n\t\t\t\t\tlet values = {};\n\t\t\t\t\tif ( ! source.getValues ) {\n\t\t\t\t\t\tObject.keys( bindings ).forEach( ( attr ) => {\n\t\t\t\t\t\t\t// Default to the the source label when `getValues` doesn't exist.\n\t\t\t\t\t\t\tvalues[ attr ] = source.label;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = source.getValues( {\n\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\tcontext: updatedContext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\tvalues\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattributeName === 'url' &&\n\t\t\t\t\t\t\t( ! value || ! isURLLike( value ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Return null if value is not a valid URL.\n\t\t\t\t\t\t\tattributes[ attributeName ] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributes[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t}, [\n\t\t\tblockBindings,\n\t\t\tname,\n\t\t\tclientId,\n\t\t\tupdatedContext,\n\t\t\tregistry,\n\t\t\tsources,\n\t\t] );\n\n\t\tconst hasParentPattern = !! updatedContext[ 'pattern/overrides' ];\n\t\tconst hasPatternOverridesDefaultBinding =\n\t\t\tprops.attributes.metadata?.bindings?.[ DEFAULT_ATTRIBUTE ]\n\t\t\t\t?.source === 'core/pattern-overrides';\n\n\t\tconst _setAttributes = useCallback(\n\t\t\t( nextAttributes ) => {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tif ( ! blockBindings ) {\n\t\t\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\t\tkeptAttributes\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! blockBindings[ attributeName ] ||\n\t\t\t\t\t\t\t! canBindAttribute( name, attributeName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst binding = blockBindings[ attributeName ];\n\t\t\t\t\t\tconst source = sources[ binding?.source ];\n\t\t\t\t\t\tif ( ! source?.setValues ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\t\t\tfor ( const [\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t] of blockBindingsBySource ) {\n\t\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\t\tcontext: updatedContext,\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Don't update non-connected attributes if the block is using pattern overrides\n\t\t\t\t\t\t// and the editing is happening while overriding the pattern (not editing the original).\n\t\t\t\t\t\t! (\n\t\t\t\t\t\t\thasPatternOverridesDefaultBinding &&\n\t\t\t\t\t\t\thasParentPattern\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Don't update caption and href until they are supported.\n\t\t\t\t\t\tif ( hasPatternOverridesDefaultBinding ) {\n\t\t\t\t\t\t\tdelete keptAttributes?.caption;\n\t\t\t\t\t\t\tdelete keptAttributes?.href;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tregistry,\n\t\t\t\tblockBindings,\n\t\t\t\tname,\n\t\t\t\tclientId,\n\t\t\t\tupdatedContext,\n\t\t\t\tsetAttributes,\n\t\t\t\tsources,\n\t\t\t\thasPatternOverridesDefaultBinding,\n\t\t\t\thasParentPattern,\n\t\t\t]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\t'withBlockBindingSupport'\n);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade bound attributes.\n *\n * @param {WPBlockSettings} settings - Registered block settings.\n * @param {string} name - Block name.\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings, name ) {\n\tif ( ! canBindBlock( name ) ) {\n\t\treturn settings;\n\t}\n\n\treturn {\n\t\t...settings,\n\t\tedit: withBlockBindingSupport( settings.edit ),\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { __unstableGetBlockProps as getBlockProps } from '@wordpress/blocks';\nimport { useMergeRefs, useDisabled } from '@wordpress/compose';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../../use-moving-animation';\nimport { PrivateBlockContext } from '../private-block-context';\nimport { useFocusFirstElement } from './use-focus-first-element';\nimport { useIsHovered } from './use-is-hovered';\nimport {\n\tblockBindingsKey,\n\tuseBlockEditContext,\n} from '../../block-edit/context';\nimport { useFocusHandler } from './use-focus-handler';\nimport { useEventHandlers } from './use-selected-block-event-handlers';\nimport { useNavModeExit } from './use-nav-mode-exit';\nimport { useZoomOutModeExit } from './use-zoom-out-mode-exit';\nimport { useBlockRefProvider } from './use-block-refs';\nimport { useIntersectionObserver } from './use-intersection-observer';\nimport { useScrollIntoView } from './use-scroll-into-view';\nimport { useFlashEditableBlocks } from '../../use-flash-editable-blocks';\nimport { canBindBlock } from '../../../hooks/use-bindings-attributes';\n\n/**\n * This hook is used to lightly mark an element as a block element. The element\n * should be the outermost element of a block. Call this hook and pass the\n * returned props to the element to mark as a block. If you define a ref for the\n * element, it is important to pass the ref to this hook, which the hook in turn\n * will pass to the component through the props it returns. Optionally, you can\n * also pass any other props through this hook, and they will be merged and\n * returned.\n *\n * Use of this hook on the outermost element of a block is required if using API >= v2.\n *\n * @example\n * ```js\n * import { useBlockProps } from '@wordpress/block-editor';\n *\n * export default function Edit() {\n *\n * const blockProps = useBlockProps( {\n * className: 'my-custom-class',\n * style: {\n * color: '#222222',\n * backgroundColor: '#eeeeee'\n * }\n * } )\n *\n * return (\n *\t
\n *\n *
\n * )\n * }\n *\n * ```\n *\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Options for internal use only.\n * @param {boolean} options.__unstableIsHtml\n *\n * @return {Object} Props to pass to the element to mark as a block.\n */\nexport function useBlockProps( props = {}, { __unstableIsHtml } = {} ) {\n\tconst {\n\t\tclientId,\n\t\tclassName,\n\t\twrapperProps = {},\n\t\tisAligned,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\teditorMode,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\ttemplateLock,\n\t} = useContext( PrivateBlockContext );\n\n\t// translators: %s: Type of block (i.e. Text, Image etc)\n\tconst blockLabel = sprintf( __( 'Block: %s' ), blockTitle );\n\tconst htmlSuffix = mode === 'html' && ! __unstableIsHtml ? '-visual' : '';\n\tconst mergedRefs = useMergeRefs( [\n\t\tprops.ref,\n\t\tuseFocusFirstElement( { clientId, initialPosition } ),\n\t\tuseBlockRefProvider( clientId ),\n\t\tuseFocusHandler( clientId ),\n\t\tuseEventHandlers( { clientId, isSelected } ),\n\t\tuseNavModeExit( clientId ),\n\t\tuseZoomOutModeExit( { editorMode } ),\n\t\tuseIsHovered( { clientId } ),\n\t\tuseIntersectionObserver(),\n\t\tuseMovingAnimation( { triggerAnimationOnChange: index, clientId } ),\n\t\tuseDisabled( { isDisabled: ! hasOverlay } ),\n\t\tuseFlashEditableBlocks( {\n\t\t\tclientId,\n\t\t\tisEnabled: name === 'core/block' || templateLock === 'contentOnly',\n\t\t} ),\n\t\tuseScrollIntoView( { isSelected } ),\n\t] );\n\n\tconst blockEditContext = useBlockEditContext();\n\tconst hasBlockBindings = !! blockEditContext[ blockBindingsKey ];\n\tconst bindingsStyle =\n\t\thasBlockBindings && canBindBlock( name )\n\t\t\t? {\n\t\t\t\t\t'--wp-admin-theme-color': 'var(--wp-block-synced-color)',\n\t\t\t\t\t'--wp-admin-theme-color--rgb':\n\t\t\t\t\t\t'var(--wp-block-synced-color--rgb)',\n\t\t\t }\n\t\t\t: {};\n\n\t// Ensures it warns only inside the `edit` implementation for the block.\n\tif ( blockApiVersion < 2 && clientId === blockEditContext.clientId ) {\n\t\twarning(\n\t\t\t`Block type \"${ name }\" must support API version 2 or higher to work correctly with \"useBlockProps\" method.`\n\t\t);\n\t}\n\n\tlet hasNegativeMargin = false;\n\tif (\n\t\twrapperProps?.style?.marginTop?.charAt( 0 ) === '-' ||\n\t\twrapperProps?.style?.marginBottom?.charAt( 0 ) === '-' ||\n\t\twrapperProps?.style?.marginLeft?.charAt( 0 ) === '-' ||\n\t\twrapperProps?.style?.marginRight?.charAt( 0 ) === '-'\n\t) {\n\t\thasNegativeMargin = true;\n\t}\n\n\treturn {\n\t\ttabIndex: blockEditingMode === 'disabled' ? -1 : 0,\n\t\t...wrapperProps,\n\t\t...props,\n\t\tref: mergedRefs,\n\t\tid: `block-${ clientId }${ htmlSuffix }`,\n\t\trole: 'document',\n\t\t'aria-label': blockLabel,\n\t\t'data-block': clientId,\n\t\t'data-type': name,\n\t\t'data-title': blockTitle,\n\t\tinert: isSubtreeDisabled ? 'true' : undefined,\n\t\tclassName: clsx(\n\t\t\t'block-editor-block-list__block',\n\t\t\t{\n\t\t\t\t// The wp-block className is important for editor styles.\n\t\t\t\t'wp-block': ! isAligned,\n\t\t\t\t'has-block-overlay': hasOverlay,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-highlighted': isHighlighted,\n\t\t\t\t'is-multi-selected': isMultiSelected,\n\t\t\t\t'is-partially-selected': isPartiallySelected,\n\t\t\t\t'is-reusable': isReusable,\n\t\t\t\t'is-dragging': isDragging,\n\t\t\t\t'has-child-selected': hasChildSelected,\n\t\t\t\t'is-block-moving-mode': isBlockMovingMode,\n\t\t\t\t'can-insert-moving-block': canInsertMovingBlock,\n\t\t\t\t'is-editing-disabled': isEditingDisabled,\n\t\t\t\t'has-editable-outline': hasEditableOutline,\n\t\t\t\t'has-negative-margin': hasNegativeMargin,\n\t\t\t\t'is-content-locked-temporarily-editing-as-blocks':\n\t\t\t\t\tisTemporarilyEditingAsBlocks,\n\t\t\t},\n\t\t\tclassName,\n\t\t\tprops.className,\n\t\t\twrapperProps.className,\n\t\t\tdefaultClassName\n\t\t),\n\t\tstyle: { ...wrapperProps.style, ...props.style, ...bindingsStyle },\n\t};\n}\n\n/**\n * Call within a save function to get the props for the block wrapper.\n *\n * @param {Object} props Optional. Props to pass to the element.\n */\nuseBlockProps.save = getBlockProps;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tmemo,\n\tuseCallback,\n\tRawHTML,\n\tuseContext,\n\tuseMemo,\n} from '@wordpress/element';\nimport {\n\tgetBlockType,\n\tgetSaveContent,\n\tisUnmodifiedDefaultBlock,\n\tserializeRawBlock,\n\tswitchToBlockType,\n\tgetDefaultBlockName,\n\tisUnmodifiedBlock,\n\tisReusableBlock,\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { withDispatch, useDispatch, useSelect } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\nimport { safeHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport BlockEdit from '../block-edit';\nimport BlockInvalidWarning from './block-invalid-warning';\nimport BlockCrashWarning from './block-crash-warning';\nimport BlockCrashBoundary from './block-crash-boundary';\nimport BlockHtml from './block-html';\nimport { useBlockProps } from './use-block-props';\nimport { store as blockEditorStore } from '../../store';\nimport { useLayout } from './layout';\nimport { PrivateBlockContext } from './private-block-context';\n\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Merges wrapper props with special handling for classNames and styles.\n *\n * @param {Object} propsA\n * @param {Object} propsB\n *\n * @return {Object} Merged props.\n */\nfunction mergeWrapperProps( propsA, propsB ) {\n\tconst newProps = {\n\t\t...propsA,\n\t\t...propsB,\n\t};\n\n\t// May be set to undefined, so check if the property is set!\n\tif (\n\t\tpropsA?.hasOwnProperty( 'className' ) &&\n\t\tpropsB?.hasOwnProperty( 'className' )\n\t) {\n\t\tnewProps.className = clsx( propsA.className, propsB.className );\n\t}\n\n\tif (\n\t\tpropsA?.hasOwnProperty( 'style' ) &&\n\t\tpropsB?.hasOwnProperty( 'style' )\n\t) {\n\t\tnewProps.style = { ...propsA.style, ...propsB.style };\n\t}\n\n\treturn newProps;\n}\n\nfunction Block( { children, isHtml, ...props } ) {\n\treturn (\n\t\t
\n\t\t\t{ children }\n\t\t
\n\t);\n}\n\nfunction BlockListBlock( {\n\tblock: { __unstableBlockSource },\n\tmode,\n\tisLocked,\n\tcanRemove,\n\tclientId,\n\tisSelected,\n\tisSelectionEnabled,\n\tclassName,\n\t__unstableLayoutClassNames: layoutClassNames,\n\tname,\n\tisValid,\n\tattributes,\n\twrapperProps,\n\tsetAttributes,\n\tonReplace,\n\tonInsertBlocksAfter,\n\tonMerge,\n\ttoggleSelection,\n} ) {\n\tconst {\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tthemeSupportsLayout,\n\t\t...context\n\t} = useContext( PrivateBlockContext );\n\tconst { removeBlock } = useDispatch( blockEditorStore );\n\tconst onRemove = useCallback(\n\t\t() => removeBlock( clientId ),\n\t\t[ clientId, removeBlock ]\n\t);\n\n\tconst parentLayout = useLayout() || {};\n\n\t// We wrap the BlockEdit component in a div that hides it when editing in\n\t// HTML mode. This allows us to render all of the ancillary pieces\n\t// (InspectorControls, etc.) which are inside `BlockEdit` but not\n\t// `BlockHTML`, even in HTML mode.\n\tlet blockEdit = (\n\t\t\n\t);\n\n\tconst blockType = getBlockType( name );\n\n\t// Determine whether the block has props to apply to the wrapper.\n\tif ( blockType?.getEditWrapperProps ) {\n\t\twrapperProps = mergeWrapperProps(\n\t\t\twrapperProps,\n\t\t\tblockType.getEditWrapperProps( attributes )\n\t\t);\n\t}\n\n\tconst isAligned =\n\t\twrapperProps &&\n\t\t!! wrapperProps[ 'data-align' ] &&\n\t\t! themeSupportsLayout;\n\n\t// Support for sticky position in classic themes with alignment wrappers.\n\n\tconst isSticky = className?.includes( 'is-position-sticky' );\n\n\t// For aligned blocks, provide a wrapper element so the block can be\n\t// positioned relative to the block column.\n\t// This is only kept for classic themes that don't support layout\n\t// Historically we used to rely on extra divs and data-align to\n\t// provide the alignments styles in the editor.\n\t// Due to the differences between frontend and backend, we migrated\n\t// to the layout feature, and we're now aligning the markup of frontend\n\t// and backend.\n\tif ( isAligned ) {\n\t\tblockEdit = (\n\t\t\t\n\t\t\t\t{ blockEdit }\n\t\t\t\n\t\t);\n\t}\n\n\tlet block;\n\n\tif ( ! isValid ) {\n\t\tconst saveContent = __unstableBlockSource\n\t\t\t? serializeRawBlock( __unstableBlockSource )\n\t\t\t: getSaveContent( blockType, attributes );\n\n\t\tblock = (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ safeHTML( saveContent ) }\n\t\t\t\n\t\t);\n\t} else if ( mode === 'html' ) {\n\t\t// Render blockEdit so the inspector controls don't disappear.\n\t\t// See #8969.\n\t\tblock = (\n\t\t\t<>\n\t\t\t\t
{ blockEdit }
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t} else if ( blockType?.apiVersion > 1 ) {\n\t\tblock = blockEdit;\n\t} else {\n\t\tblock = { blockEdit };\n\t}\n\n\tconst { 'data-align': dataAlign, ...restWrapperProps } = wrapperProps ?? {};\n\tconst updatedWrapperProps = {\n\t\t...restWrapperProps,\n\t\tclassName: clsx(\n\t\t\trestWrapperProps.className,\n\t\t\tdataAlign && themeSupportsLayout && `align${ dataAlign }`,\n\t\t\t! ( dataAlign && isSticky ) && className\n\t\t),\n\t};\n\n\t// We set a new context with the adjusted and filtered wrapperProps (through\n\t// `editor.BlockListBlock`), which the `BlockListBlockProvider` did not have\n\t// access to.\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ block }\n\t\t\t\n\t\t\n\t);\n}\n\nconst applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tinsertBlocks,\n\t\tmergeBlocks,\n\t\treplaceBlocks,\n\t\ttoggleSelection,\n\t\t__unstableMarkLastChangeAsPersistent,\n\t\tmoveBlocksToPosition,\n\t\tremoveBlock,\n\t\tselectBlock,\n\t} = dispatch( blockEditorStore );\n\n\t// Do not add new properties here, use `useDispatch` instead to avoid\n\t// leaking new props to the public API (editor.BlockListBlock filter).\n\treturn {\n\t\tsetAttributes( newAttributes ) {\n\t\t\tconst { getMultiSelectedBlockClientIds } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst multiSelectedBlockClientIds =\n\t\t\t\tgetMultiSelectedBlockClientIds();\n\t\t\tconst { clientId } = ownProps;\n\t\t\tconst clientIds = multiSelectedBlockClientIds.length\n\t\t\t\t? multiSelectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes );\n\t\t},\n\t\tonInsertBlocks( blocks, index ) {\n\t\t\tconst { rootClientId } = ownProps;\n\t\t\tinsertBlocks( blocks, index, rootClientId );\n\t\t},\n\t\tonInsertBlocksAfter( blocks ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst { getBlockIndex } = registry.select( blockEditorStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tinsertBlocks( blocks, index + 1, rootClientId );\n\t\t},\n\t\tonMerge( forward ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst {\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = registry.select( blockEditorStore );\n\n\t\t\tfunction switchToDefaultOrRemove() {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\tif ( getBlockName( clientId ) !== defaultBlockName ) {\n\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\tblock,\n\t\t\t\t\t\tdefaultBlockName\n\t\t\t\t\t);\n\t\t\t\t\tif ( replacement && replacement.length ) {\n\t\t\t\t\t\treplaceBlocks( clientId, replacement );\n\t\t\t\t\t}\n\t\t\t\t} else if ( isUnmodifiedDefaultBlock( block ) ) {\n\t\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\t\t\t\t\tif ( nextBlockClientId ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t\tselectBlock( nextBlockClientId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Moves the block with clientId up one level. If the block type\n\t\t\t * cannot be inserted at the new location, it will be attempted to\n\t\t\t * convert to the default block type.\n\t\t\t *\n\t\t\t * @param {string} _clientId The block to move.\n\t\t\t * @param {boolean} changeSelection Whether to change the selection\n\t\t\t * to the moved block.\n\t\t\t */\n\t\t\tfunction moveFirstItemUp( _clientId, changeSelection = true ) {\n\t\t\t\tconst targetRootClientId = getBlockRootClientId( _clientId );\n\t\t\t\tconst blockOrder = getBlockOrder( _clientId );\n\t\t\t\tconst [ firstClientId ] = blockOrder;\n\n\t\t\t\tif (\n\t\t\t\t\tblockOrder.length === 1 &&\n\t\t\t\t\tisUnmodifiedBlock( getBlock( firstClientId ) )\n\t\t\t\t) {\n\t\t\t\t\tremoveBlock( _clientId );\n\t\t\t\t} else {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tgetBlockName( firstClientId ),\n\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ firstClientId ],\n\t\t\t\t\t\t\t\t_clientId,\n\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\tgetBlockIndex( _clientId )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\t\t\tgetBlock( firstClientId ),\n\t\t\t\t\t\t\t\tgetDefaultBlockName()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treplacement &&\n\t\t\t\t\t\t\t\treplacement.length &&\n\t\t\t\t\t\t\t\treplacement.every( ( block ) =>\n\t\t\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\treplacement,\n\t\t\t\t\t\t\t\t\tgetBlockIndex( _clientId ),\n\t\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\t\tchangeSelection\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( firstClientId, false );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! getBlockOrder( _clientId ).length &&\n\t\t\t\t\t\t\tisUnmodifiedBlock( getBlock( _clientId ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveBlock( _clientId, false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For `Delete` or forward merge, we should do the exact same thing\n\t\t\t// as `Backspace`, but from the other block.\n\t\t\tif ( forward ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tconst nextRootClientId =\n\t\t\t\t\t\tgetNextBlockClientId( rootClientId );\n\n\t\t\t\t\tif ( nextRootClientId ) {\n\t\t\t\t\t\t// If there is a block that follows with the same parent\n\t\t\t\t\t\t// block name and the same attributes, merge the inner\n\t\t\t\t\t\t// blocks.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( nextRootClientId )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( nextRootClientId );\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t\tgetBlockOrder( nextRootClientId ),\n\t\t\t\t\t\t\t\t\t\tnextRootClientId,\n\t\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tremoveBlock( nextRootClientId, false );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeBlocks( rootClientId, nextRootClientId );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\n\t\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( getBlockOrder( nextBlockClientId ).length ) {\n\t\t\t\t\tmoveFirstItemUp( nextBlockClientId, false );\n\t\t\t\t} else {\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst previousBlockClientId =\n\t\t\t\t\tgetPreviousBlockClientId( clientId );\n\n\t\t\t\tif ( previousBlockClientId ) {\n\t\t\t\t\tmergeBlocks( previousBlockClientId, clientId );\n\t\t\t\t} else if ( rootClientId ) {\n\t\t\t\t\tconst previousRootClientId =\n\t\t\t\t\t\tgetPreviousBlockClientId( rootClientId );\n\n\t\t\t\t\t// If there is a preceding block with the same parent block\n\t\t\t\t\t// name and the same attributes, merge the inner blocks.\n\t\t\t\t\tif (\n\t\t\t\t\t\tpreviousRootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( previousRootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( previousRootClientId );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\tgetBlockOrder( rootClientId ),\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tpreviousRootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( rootClientId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmoveFirstItemUp( rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonReplace( blocks, indexToSelect, initialPosition ) {\n\t\t\tif (\n\t\t\t\tblocks.length &&\n\t\t\t\t! isUnmodifiedDefaultBlock( blocks[ blocks.length - 1 ] )\n\t\t\t) {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}\n\t\t\t//Unsynced patterns are nested in an array so we need to flatten them.\n\t\t\tconst replacementBlocks =\n\t\t\t\tblocks?.length === 1 && Array.isArray( blocks[ 0 ] )\n\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t: blocks;\n\t\t\treplaceBlocks(\n\t\t\t\t[ ownProps.clientId ],\n\t\t\t\treplacementBlocks,\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition\n\t\t\t);\n\t\t},\n\t\ttoggleSelection( selectionEnabled ) {\n\t\t\ttoggleSelection( selectionEnabled );\n\t\t},\n\t};\n} );\n\n// This component is used by the BlockListBlockProvider component below. It will\n// add the props necessary for the `editor.BlockListBlock` filters.\nBlockListBlock = compose(\n\tapplyWithDispatch,\n\twithFilters( 'editor.BlockListBlock' )\n)( BlockListBlock );\n\n// This component provides all the information we need through a single store\n// subscription (useSelect mapping). Only the necessary props are passed down\n// to the BlockListBlock component, which is a filtered component, so these\n// props are public API. To avoid adding to the public API, we use a private\n// context to pass the rest of the information to the filtered BlockListBlock\n// component, and useBlockProps.\nfunction BlockListBlockProvider( props ) {\n\tconst { clientId, rootClientId } = props;\n\tconst selectedProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\tgetBlockMode,\n\t\t\t\tisSelectionEnabled,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockWithoutAttributes,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tisFirstMultiSelectedBlock,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlocksByName,\n\n\t\t\t\tgetBlockIndex,\n\t\t\t\tisBlockMultiSelected,\n\t\t\t\tisBlockSubtreeDisabled,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\t__unstableIsFullySelected,\n\t\t\t\t__unstableSelectionHasUnmergeableBlock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tisDragging,\n\t\t\t\thasBlockMovingClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst blockWithoutAttributes =\n\t\t\t\tgetBlockWithoutAttributes( clientId );\n\n\t\t\t// This is a temporary fix.\n\t\t\t// This function should never be called when a block is not\n\t\t\t// present in the state. It happens now because the order in\n\t\t\t// withSelect rendering is not correct.\n\t\t\tif ( ! blockWithoutAttributes ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\thasBlockSupport: _hasBlockSupport,\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t} = select( blocksStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst { name: blockName, isValid } = blockWithoutAttributes;\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst { supportsLayout, __unstableIsPreviewMode: isPreviewMode } =\n\t\t\t\tgetSettings();\n\t\t\tconst hasLightBlockWrapper = blockType?.apiVersion > 1;\n\t\t\tconst previewContext = {\n\t\t\t\tisPreviewMode,\n\t\t\t\tblockWithoutAttributes,\n\t\t\t\tname: blockName,\n\t\t\t\tattributes,\n\t\t\t\tisValid,\n\t\t\t\tthemeSupportsLayout: supportsLayout,\n\t\t\t\tindex: getBlockIndex( clientId ),\n\t\t\t\tisReusable: isReusableBlock( blockType ),\n\t\t\t\tclassName: hasLightBlockWrapper\n\t\t\t\t\t? attributes.className\n\t\t\t\t\t: undefined,\n\t\t\t\tdefaultClassName: hasLightBlockWrapper\n\t\t\t\t\t? getBlockDefaultClassName( blockName )\n\t\t\t\t\t: undefined,\n\t\t\t\tblockTitle: blockType?.title,\n\t\t\t};\n\n\t\t\t// When in preview mode, we can avoid a lot of selection and\n\t\t\t// editing related selectors.\n\t\t\tif ( isPreviewMode ) {\n\t\t\t\treturn previewContext;\n\t\t\t}\n\n\t\t\tconst _isSelected = isBlockSelected( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isMultiSelected = isBlockMultiSelected( clientId );\n\t\t\tconst checkDeep = true;\n\t\t\tconst isAncestorOfSelectedBlock = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\tcheckDeep\n\t\t\t);\n\t\t\tconst movingClientId = hasBlockMovingClientId();\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\n\t\t\tconst multiple = hasBlockSupport( blockName, 'multiple', true );\n\n\t\t\t// For block types with `multiple` support, there is no \"original\n\t\t\t// block\" to be found in the content, as the block itself is valid.\n\t\t\tconst blocksWithSameName = multiple\n\t\t\t\t? []\n\t\t\t\t: getBlocksByName( blockName );\n\t\t\tconst isInvalid =\n\t\t\t\tblocksWithSameName.length &&\n\t\t\t\tblocksWithSameName[ 0 ] !== clientId;\n\n\t\t\tconst editorMode = __unstableGetEditorMode();\n\n\t\t\treturn {\n\t\t\t\t...previewContext,\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tisSelectionEnabled: isSelectionEnabled(),\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\ttemplateLock: getTemplateLock( clientId ),\n\t\t\t\tcanRemove,\n\t\t\t\tcanMove,\n\t\t\t\tisSelected: _isSelected,\n\t\t\t\tisTemporarilyEditingAsBlocks:\n\t\t\t\t\tgetTemporarilyEditingAsBlocks() === clientId,\n\t\t\t\tblockEditingMode,\n\t\t\t\tmayDisplayControls:\n\t\t\t\t\t_isSelected ||\n\t\t\t\t\t( isFirstMultiSelectedBlock( clientId ) &&\n\t\t\t\t\t\tgetMultiSelectedBlockClientIds().every(\n\t\t\t\t\t\t\t( id ) => getBlockName( id ) === blockName\n\t\t\t\t\t\t) ),\n\t\t\t\tmayDisplayParentControls:\n\t\t\t\t\t_hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( clientId ),\n\t\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) && hasSelectedInnerBlock( clientId ),\n\t\t\t\tblockApiVersion: blockType?.apiVersion || 1,\n\t\t\t\tblockTitle: match?.title || blockType?.title,\n\t\t\t\teditorMode,\n\t\t\t\tisSubtreeDisabled:\n\t\t\t\t\tblockEditingMode === 'disabled' &&\n\t\t\t\t\tisBlockSubtreeDisabled( clientId ),\n\t\t\t\thasOverlay:\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive( clientId ) &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tinitialPosition:\n\t\t\t\t\t_isSelected &&\n\t\t\t\t\t( editorMode === 'edit' || editorMode === 'zoom-out' ) // Don't recalculate the initialPosition when toggling in/out of zoom-out mode\n\t\t\t\t\t\t? getSelectedBlocksInitialCaretPosition()\n\t\t\t\t\t\t: undefined,\n\t\t\t\tisHighlighted: isBlockHighlighted( clientId ),\n\t\t\t\tisMultiSelected,\n\t\t\t\tisPartiallySelected:\n\t\t\t\t\tisMultiSelected &&\n\t\t\t\t\t! __unstableIsFullySelected() &&\n\t\t\t\t\t! __unstableSelectionHasUnmergeableBlock(),\n\t\t\t\tisDragging: isBlockBeingDragged( clientId ),\n\t\t\t\thasChildSelected: isAncestorOfSelectedBlock,\n\t\t\t\tisBlockMovingMode: !! movingClientId,\n\t\t\t\tcanInsertMovingBlock:\n\t\t\t\t\tmovingClientId &&\n\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\tgetBlockName( movingClientId ),\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\tisEditingDisabled: blockEditingMode === 'disabled',\n\t\t\t\thasEditableOutline:\n\t\t\t\t\tblockEditingMode !== 'disabled' &&\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled',\n\t\t\t\toriginalBlockClientId: isInvalid\n\t\t\t\t\t? blocksWithSameName[ 0 ]\n\t\t\t\t\t: false,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\tconst {\n\t\tisPreviewMode,\n\t\t// Fill values that end up as a public API and may not be defined in\n\t\t// preview mode.\n\t\tmode = 'visual',\n\t\tisSelectionEnabled = false,\n\t\tisLocked = false,\n\t\tcanRemove = false,\n\t\tcanMove = false,\n\t\tblockWithoutAttributes,\n\t\tname,\n\t\tattributes,\n\t\tisValid,\n\t\tisSelected = false,\n\t\tthemeSupportsLayout,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tblockEditingMode,\n\t\teditorMode,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tindex,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\ttemplateLock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tclassName,\n\t\tdefaultClassName,\n\t\toriginalBlockClientId,\n\t} = selectedProps;\n\n\t// Users of the editor.BlockListBlock filter used to be able to\n\t// access the block prop.\n\t// Ideally these blocks would rely on the clientId prop only.\n\t// This is kept for backward compatibility reasons.\n\tconst block = useMemo(\n\t\t() => ( { ...blockWithoutAttributes, attributes } ),\n\t\t[ blockWithoutAttributes, attributes ]\n\t);\n\n\t// Block is sometimes not mounted at the right time, causing it be\n\t// undefined see issue for more info\n\t// https://github.com/WordPress/gutenberg/issues/17013\n\tif ( ! selectedProps ) {\n\t\treturn null;\n\t}\n\n\tconst privateContext = {\n\t\tisPreviewMode,\n\t\tclientId,\n\t\tclassName,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\teditorMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\ttemplateLock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\toriginalBlockClientId,\n\t\tthemeSupportsLayout,\n\t};\n\n\t// Here we separate between the props passed to BlockListBlock and any other\n\t// information we selected for internal use. BlockListBlock is a filtered\n\t// component and thus ALL the props are PUBLIC API.\n\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default memo( BlockListBlockProvider );\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"htmlEntities\"];","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { ENTER, SPACE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Zero width non-breaking space, used as padding for the paragraph when it is\n * empty.\n */\nexport const ZWNBSP = '\\ufeff';\n\nexport default function DefaultBlockAppender( { rootClientId } ) {\n\tconst { showPrompt, isLocked, placeholder, isManualGrid } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst isEmpty = ! getBlockCount( rootClientId );\n\t\t\tconst { bodyPlaceholder } = getSettings();\n\n\t\t\treturn {\n\t\t\t\tshowPrompt: isEmpty,\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tplaceholder: bodyPlaceholder,\n\t\t\t\tisManualGrid:\n\t\t\t\t\tgetBlockAttributes( rootClientId )?.layout\n\t\t\t\t\t\t?.isManualPlacement,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst { insertDefaultBlock, startTyping } = useDispatch( blockEditorStore );\n\n\tif ( isLocked || isManualGrid ) {\n\t\treturn null;\n\t}\n\n\tconst value =\n\t\tdecodeEntities( placeholder ) || __( 'Type / to choose a block' );\n\n\tconst onAppend = () => {\n\t\tinsertDefaultBlock( undefined, rootClientId );\n\t\tstartTyping();\n\t};\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif ( ENTER === event.keyCode || SPACE === event.keyCode ) {\n\t\t\t\t\t\tonAppend();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tonClick={ () => onAppend() }\n\t\t\t\tonFocus={ () => {\n\t\t\t\t\tif ( showPrompt ) {\n\t\t\t\t\t\tonAppend();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ showPrompt ? value : ZWNBSP }\n\t\t\t

\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { getDefaultBlockName } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport DefaultBlockAppender from '../default-block-appender';\nimport ButtonBlockAppender from '../button-block-appender';\nimport { store as blockEditorStore } from '../../store';\n\nfunction DefaultAppender( { rootClientId } ) {\n\tconst canInsertDefaultBlock = useSelect( ( select ) =>\n\t\tselect( blockEditorStore ).canInsertBlockType(\n\t\t\tgetDefaultBlockName(),\n\t\t\trootClientId\n\t\t)\n\t);\n\n\tif ( canInsertDefaultBlock ) {\n\t\t// Render the default block appender if the context supports use\n\t\t// of the default appender.\n\t\treturn ;\n\t}\n\n\t// Fallback in case the default block can't be inserted.\n\treturn (\n\t\t\n\t);\n}\n\nexport default function BlockListAppender( {\n\trootClientId,\n\tCustomAppender,\n\tclassName,\n\ttagName: TagName = 'div',\n} ) {\n\tconst isDragOver = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockInsertionPoint,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t\tgetBlockCount,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\t\t// Ideally we should also check for `isDragging` but currently it\n\t\t\t// requires a lot more setup. We can revisit this once we refactor\n\t\t\t// the DnD utility hooks.\n\t\t\treturn (\n\t\t\t\tisBlockInsertionPointVisible() &&\n\t\t\t\trootClientId === insertionPoint?.rootClientId &&\n\t\t\t\tgetBlockCount( rootClientId ) === 0\n\t\t\t);\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ CustomAppender ? (\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tuseMemo,\n\tcreateContext,\n\tuseReducer,\n\tuseLayoutEffect,\n} from '@wordpress/element';\nimport { Popover } from '@wordpress/components';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport usePopoverScroll from './use-popover-scroll';\n\nconst MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;\n\nexport const InsertionPointOpenRef = createContext();\n\nfunction BlockPopoverInbetween( {\n\tpreviousClientId,\n\tnextClientId,\n\tchildren,\n\t__unstablePopoverSlot,\n\t__unstableContentRef,\n\toperation = 'insert',\n\tnearestSide = 'right',\n\t...props\n} ) {\n\t// This is a temporary hack to get the inbetween inserter to recompute properly.\n\tconst [ popoverRecomputeCounter, forcePopoverRecompute ] = useReducer(\n\t\t// Module is there to make sure that the counter doesn't overflow.\n\t\t( s ) => ( s + 1 ) % MAX_POPOVER_RECOMPUTE_COUNTER,\n\t\t0\n\t);\n\n\tconst { orientation, rootClientId, isVisible } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tisBlockVisible,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst _rootClientId = getBlockRootClientId(\n\t\t\t\tpreviousClientId ?? nextClientId\n\t\t\t);\n\t\t\treturn {\n\t\t\t\torientation:\n\t\t\t\t\tgetBlockListSettings( _rootClientId )?.orientation ||\n\t\t\t\t\t'vertical',\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t\tisVisible:\n\t\t\t\t\tisBlockVisible( previousClientId ) &&\n\t\t\t\t\tisBlockVisible( nextClientId ),\n\t\t\t};\n\t\t},\n\t\t[ previousClientId, nextClientId ]\n\t);\n\tconst previousElement = useBlockElement( previousClientId );\n\tconst nextElement = useBlockElement( nextClientId );\n\tconst isVertical = orientation === 'vertical';\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tif (\n\t\t\t// popoverRecomputeCounter is by definition always equal or greater than 0.\n\t\t\t// This check is only there to satisfy the correctness of the\n\t\t\t// exhaustive-deps rule for the `useMemo` hook.\n\t\t\tpopoverRecomputeCounter < 0 ||\n\t\t\t( ! previousElement && ! nextElement ) ||\n\t\t\t! isVisible\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst contextElement =\n\t\t\toperation === 'group'\n\t\t\t\t? nextElement || previousElement\n\t\t\t\t: previousElement || nextElement;\n\n\t\treturn {\n\t\t\tcontextElement,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\tconst previousRect = previousElement\n\t\t\t\t\t? previousElement.getBoundingClientRect()\n\t\t\t\t\t: null;\n\t\t\t\tconst nextRect = nextElement\n\t\t\t\t\t? nextElement.getBoundingClientRect()\n\t\t\t\t\t: null;\n\n\t\t\t\tlet left = 0;\n\t\t\t\tlet top = 0;\n\t\t\t\tlet width = 0;\n\t\t\t\tlet height = 0;\n\n\t\t\t\tif ( operation === 'group' ) {\n\t\t\t\t\tconst targetRect = nextRect || previousRect;\n\t\t\t\t\ttop = targetRect.top;\n\t\t\t\t\t// No spacing is likely around blocks in this operation.\n\t\t\t\t\t// So width of the inserter containing rect is set to 0.\n\t\t\t\t\twidth = 0;\n\t\t\t\t\theight = targetRect.bottom - targetRect.top;\n\t\t\t\t\t// Popover calculates its distance from mid-block so some\n\t\t\t\t\t// adjustments are needed to make it appear in the right place.\n\t\t\t\t\tleft =\n\t\t\t\t\t\tnearestSide === 'left'\n\t\t\t\t\t\t\t? targetRect.left - 2\n\t\t\t\t\t\t\t: targetRect.right - 2;\n\t\t\t\t} else if ( isVertical ) {\n\t\t\t\t\t// vertical\n\t\t\t\t\ttop = previousRect ? previousRect.bottom : nextRect.top;\n\t\t\t\t\twidth = previousRect ? previousRect.width : nextRect.width;\n\t\t\t\t\theight =\n\t\t\t\t\t\tnextRect && previousRect\n\t\t\t\t\t\t\t? nextRect.top - previousRect.bottom\n\t\t\t\t\t\t\t: 0;\n\t\t\t\t\tleft = previousRect ? previousRect.left : nextRect.left;\n\t\t\t\t} else {\n\t\t\t\t\ttop = previousRect ? previousRect.top : nextRect.top;\n\t\t\t\t\theight = previousRect\n\t\t\t\t\t\t? previousRect.height\n\t\t\t\t\t\t: nextRect.height;\n\n\t\t\t\t\tif ( isRTL() ) {\n\t\t\t\t\t\t// non vertical, rtl\n\t\t\t\t\t\tleft = nextRect ? nextRect.right : previousRect.left;\n\t\t\t\t\t\twidth =\n\t\t\t\t\t\t\tpreviousRect && nextRect\n\t\t\t\t\t\t\t\t? previousRect.left - nextRect.right\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// non vertical, ltr\n\t\t\t\t\t\tleft = previousRect\n\t\t\t\t\t\t\t? previousRect.right\n\t\t\t\t\t\t\t: nextRect.left;\n\t\t\t\t\t\twidth =\n\t\t\t\t\t\t\tpreviousRect && nextRect\n\t\t\t\t\t\t\t\t? nextRect.left - previousRect.right\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn new window.DOMRect( left, top, width, height );\n\t\t\t},\n\t\t};\n\t}, [\n\t\tpreviousElement,\n\t\tnextElement,\n\t\tpopoverRecomputeCounter,\n\t\tisVertical,\n\t\tisVisible,\n\t\toperation,\n\t\tnearestSide,\n\t] );\n\n\tconst popoverScrollRef = usePopoverScroll( __unstableContentRef );\n\n\t// This is only needed for a smooth transition when moving blocks.\n\t// When blocks are moved up/down, their position can be set by\n\t// updating the `transform` property manually (i.e. without using CSS\n\t// transitions or animations). The animation, which can also scroll the block\n\t// editor, can sometimes cause the position of the Popover to get out of sync.\n\t// A MutationObserver is therefore used to make sure that changes to the\n\t// selectedElement's attribute (i.e. `transform`) can be tracked and used to\n\t// trigger the Popover to rerender.\n\tuseLayoutEffect( () => {\n\t\tif ( ! previousElement ) {\n\t\t\treturn;\n\t\t}\n\t\tconst observer = new window.MutationObserver( forcePopoverRecompute );\n\t\tobserver.observe( previousElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ previousElement ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! nextElement ) {\n\t\t\treturn;\n\t\t}\n\t\tconst observer = new window.MutationObserver( forcePopoverRecompute );\n\t\tobserver.observe( nextElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ nextElement ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! previousElement ) {\n\t\t\treturn;\n\t\t}\n\t\tpreviousElement.ownerDocument.defaultView.addEventListener(\n\t\t\t'resize',\n\t\t\tforcePopoverRecompute\n\t\t);\n\t\treturn () => {\n\t\t\tpreviousElement.ownerDocument.defaultView?.removeEventListener(\n\t\t\t\t'resize',\n\t\t\t\tforcePopoverRecompute\n\t\t\t);\n\t\t};\n\t}, [ previousElement ] );\n\n\t// If there's either a previous or a next element, show the inbetween popover.\n\t// Note that drag and drop uses the inbetween popover to show the drop indicator\n\t// before the first block and after the last block.\n\tif ( ( ! previousElement && ! nextElement ) || ! isVisible ) {\n\t\treturn null;\n\t}\n\n\t/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */\n\t// While ideally it would be enough to capture the\n\t// bubbling focus event from the Inserter, due to the\n\t// characteristics of click focusing of `button`s in\n\t// Firefox and Safari, it is not reliable.\n\t//\n\t// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{ children }\n\t\t\t
\n\t\t\n\t);\n\t/* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */\n}\n\nexport default BlockPopoverInbetween;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { __unstableMotion as motion } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockPopoverCover from './cover';\n\nconst animateVariants = {\n\thide: { opacity: 0, scaleY: 0.75 },\n\tshow: { opacity: 1, scaleY: 1 },\n\texit: { opacity: 0, scaleY: 0.9 },\n};\n\nfunction BlockDropZonePopover( {\n\t__unstablePopoverSlot,\n\t__unstableContentRef,\n} ) {\n\tconst { clientId } = useSelect( ( select ) => {\n\t\tconst { getBlockOrder, getBlockInsertionPoint } =\n\t\t\tselect( blockEditorStore );\n\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\tconst order = getBlockOrder( insertionPoint.rootClientId );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\treturn {\n\t\t\tclientId: order[ insertionPoint.index ],\n\t\t};\n\t}, [] );\n\tconst reducedMotion = useReducedMotion();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default BlockDropZonePopover;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRef, createContext, useContext } from '@wordpress/element';\nimport { __unstableMotion as motion } from '@wordpress/components';\nimport { useReducedMotion } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { store as blockEditorStore } from '../../store';\nimport BlockPopoverInbetween from '../block-popover/inbetween';\nimport BlockDropZonePopover from '../block-popover/drop-zone';\n\nexport const InsertionPointOpenRef = createContext();\n\nfunction InbetweenInsertionPointPopover( {\n\t__unstablePopoverSlot,\n\t__unstableContentRef,\n\toperation = 'insert',\n\tnearestSide = 'right',\n} ) {\n\tconst { selectBlock, hideInsertionPoint } = useDispatch( blockEditorStore );\n\tconst openRef = useContext( InsertionPointOpenRef );\n\tconst ref = useRef();\n\tconst {\n\t\torientation,\n\t\tpreviousClientId,\n\t\tnextClientId,\n\t\trootClientId,\n\t\tisInserterShown,\n\t\tisDistractionFree,\n\t\tisNavigationMode,\n\t\tisZoomOutMode,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockOrder,\n\t\t\tgetBlockListSettings,\n\t\t\tgetBlockInsertionPoint,\n\t\t\tisBlockBeingDragged,\n\t\t\tgetPreviousBlockClientId,\n\t\t\tgetNextBlockClientId,\n\t\t\tgetSettings,\n\t\t\tisNavigationMode: _isNavigationMode,\n\t\t\t__unstableGetEditorMode,\n\t\t} = select( blockEditorStore );\n\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\tconst order = getBlockOrder( insertionPoint.rootClientId );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet _previousClientId = order[ insertionPoint.index - 1 ];\n\t\tlet _nextClientId = order[ insertionPoint.index ];\n\n\t\twhile ( isBlockBeingDragged( _previousClientId ) ) {\n\t\t\t_previousClientId = getPreviousBlockClientId( _previousClientId );\n\t\t}\n\n\t\twhile ( isBlockBeingDragged( _nextClientId ) ) {\n\t\t\t_nextClientId = getNextBlockClientId( _nextClientId );\n\t\t}\n\n\t\tconst settings = getSettings();\n\n\t\treturn {\n\t\t\tpreviousClientId: _previousClientId,\n\t\t\tnextClientId: _nextClientId,\n\t\t\torientation:\n\t\t\t\tgetBlockListSettings( insertionPoint.rootClientId )\n\t\t\t\t\t?.orientation || 'vertical',\n\t\t\trootClientId: insertionPoint.rootClientId,\n\t\t\tisNavigationMode: _isNavigationMode(),\n\t\t\tisDistractionFree: settings.isDistractionFree,\n\t\t\tisInserterShown: insertionPoint?.__unstableWithInserter,\n\t\t\tisZoomOutMode: __unstableGetEditorMode() === 'zoom-out',\n\t\t};\n\t}, [] );\n\tconst { getBlockEditingMode } = useSelect( blockEditorStore );\n\n\tconst disableMotion = useReducedMotion();\n\n\tfunction onClick( event ) {\n\t\tif (\n\t\t\tevent.target === ref.current &&\n\t\t\tnextClientId &&\n\t\t\tgetBlockEditingMode( nextClientId ) !== 'disabled'\n\t\t) {\n\t\t\tselectBlock( nextClientId, -1 );\n\t\t}\n\t}\n\n\tfunction maybeHideInserterPoint( event ) {\n\t\t// Only hide the inserter if it's triggered on the wrapper,\n\t\t// and the inserter is not open.\n\t\tif ( event.target === ref.current && ! openRef.current ) {\n\t\t\thideInsertionPoint();\n\t\t}\n\t}\n\n\tfunction onFocus( event ) {\n\t\t// Only handle click on the wrapper specifically, and not an event\n\t\t// bubbled from the inserter itself.\n\t\tif ( event.target !== ref.current ) {\n\t\t\topenRef.current = true;\n\t\t}\n\t}\n\n\tconst lineVariants = {\n\t\t// Initial position starts from the center and invisible.\n\t\tstart: {\n\t\t\topacity: 0,\n\t\t\tscale: 0,\n\t\t},\n\t\t// The line expands to fill the container. If the inserter is visible it\n\t\t// is delayed so it appears orchestrated.\n\t\trest: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\ttransition: { delay: isInserterShown ? 0.5 : 0, type: 'tween' },\n\t\t},\n\t\thover: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\ttransition: { delay: 0.5, type: 'tween' },\n\t\t},\n\t};\n\n\tconst inserterVariants = {\n\t\tstart: {\n\t\t\tscale: disableMotion ? 1 : 0,\n\t\t},\n\t\trest: {\n\t\t\tscale: 1,\n\t\t\ttransition: { delay: 0.4, type: 'tween' },\n\t\t},\n\t};\n\n\tif ( isDistractionFree && ! isNavigationMode ) {\n\t\treturn null;\n\t}\n\n\t// Zoom out mode should only show the insertion point for the insert operation.\n\t// Other operations such as \"group\" are when the editor tries to create a row\n\t// block by grouping the block being dragged with the block it's being dropped\n\t// onto.\n\tif ( isZoomOutMode && operation !== 'insert' ) {\n\t\treturn null;\n\t}\n\n\tconst orientationClassname =\n\t\torientation === 'horizontal' || operation === 'group'\n\t\t\t? 'is-horizontal'\n\t\t\t: 'is-vertical';\n\n\tconst className = clsx(\n\t\t'block-editor-block-list__insertion-point',\n\t\torientationClassname\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ isInserterShown && (\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\topenRef.current = isOpen;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonSelectOrClose={ () => {\n\t\t\t\t\t\t\t\topenRef.current = false;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function InsertionPoint( props ) {\n\tconst { insertionPoint, isVisible, isBlockListEmpty } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockInsertionPoint,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t\tgetBlockCount,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst blockInsertionPoint = getBlockInsertionPoint();\n\t\t\treturn {\n\t\t\t\tinsertionPoint: blockInsertionPoint,\n\t\t\t\tisVisible: isBlockInsertionPointVisible(),\n\t\t\t\tisBlockListEmpty:\n\t\t\t\t\tgetBlockCount( blockInsertionPoint?.rootClientId ) === 0,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tif (\n\t\t! isVisible ||\n\t\t// Don't render the insertion point if the block list is empty.\n\t\t// The insertion point will be represented by the appender instead.\n\t\tisBlockListEmpty\n\t) {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Render a popover that overlays the block when the desired operation is to replace it.\n\t * Otherwise, render a popover in between blocks for the indication of inserting between them.\n\t */\n\treturn insertionPoint.operation === 'replace' ? (\n\t\t\n\t) : (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useContext } from '@wordpress/element';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { InsertionPointOpenRef } from '../block-tools/insertion-point';\n\nexport function useInBetweenInserter() {\n\tconst openRef = useContext( InsertionPointOpenRef );\n\tconst isInBetweenInserterDisabled = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree ||\n\t\t\tselect( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',\n\t\t[]\n\t);\n\tconst {\n\t\tgetBlockListSettings,\n\t\tgetBlockIndex,\n\t\tisMultiSelecting,\n\t\tgetSelectedBlockClientIds,\n\t\tgetSettings,\n\t\tgetTemplateLock,\n\t\t__unstableIsWithinBlockOverlay,\n\t\tgetBlockEditingMode,\n\t\tgetBlockName,\n\t\tgetBlockAttributes,\n\t} = useSelect( blockEditorStore );\n\tconst { showInsertionPoint, hideInsertionPoint } =\n\t\tuseDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( isInBetweenInserterDisabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onMouseMove( event ) {\n\t\t\t\t// openRef is the reference to the insertion point between blocks.\n\t\t\t\t// If the reference is not set or the insertion point is already open, return.\n\t\t\t\tif ( openRef === undefined || openRef.current ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ignore text nodes sometimes detected in FireFox.\n\t\t\t\tif ( event.target.nodeType === event.target.TEXT_NODE ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isMultiSelecting() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t! event.target.classList.contains(\n\t\t\t\t\t\t'block-editor-block-list__layout'\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet rootClientId;\n\t\t\t\tif (\n\t\t\t\t\t! event.target.classList.contains( 'is-root-container' )\n\t\t\t\t) {\n\t\t\t\t\tconst blockElement = !! event.target.getAttribute(\n\t\t\t\t\t\t'data-block'\n\t\t\t\t\t)\n\t\t\t\t\t\t? event.target\n\t\t\t\t\t\t: event.target.closest( '[data-block]' );\n\t\t\t\t\trootClientId = blockElement.getAttribute( 'data-block' );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tgetTemplateLock( rootClientId ) ||\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled' ||\n\t\t\t\t\tgetBlockName( rootClientId ) === 'core/block' ||\n\t\t\t\t\t( rootClientId &&\n\t\t\t\t\t\tgetBlockAttributes( rootClientId ).layout\n\t\t\t\t\t\t\t?.isManualPlacement )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blockListSettings = getBlockListSettings( rootClientId );\n\t\t\t\tconst orientation =\n\t\t\t\t\tblockListSettings?.orientation || 'vertical';\n\t\t\t\tconst captureToolbars =\n\t\t\t\t\t!! blockListSettings?.__experimentalCaptureToolbars;\n\t\t\t\tconst offsetTop = event.clientY;\n\t\t\t\tconst offsetLeft = event.clientX;\n\n\t\t\t\tconst children = Array.from( event.target.children );\n\t\t\t\tlet element = children.find( ( blockEl ) => {\n\t\t\t\t\tconst blockElRect = blockEl.getBoundingClientRect();\n\t\t\t\t\treturn (\n\t\t\t\t\t\t( blockEl.classList.contains( 'wp-block' ) &&\n\t\t\t\t\t\t\torientation === 'vertical' &&\n\t\t\t\t\t\t\tblockElRect.top > offsetTop ) ||\n\t\t\t\t\t\t( blockEl.classList.contains( 'wp-block' ) &&\n\t\t\t\t\t\t\torientation === 'horizontal' &&\n\t\t\t\t\t\t\t( isRTL()\n\t\t\t\t\t\t\t\t? blockElRect.right < offsetLeft\n\t\t\t\t\t\t\t\t: blockElRect.left > offsetLeft ) )\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\tif ( ! element ) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// The block may be in an alignment wrapper, so check the first direct\n\t\t\t\t// child if the element has no ID.\n\t\t\t\tif ( ! element.id ) {\n\t\t\t\t\telement = element.firstElementChild;\n\n\t\t\t\t\tif ( ! element ) {\n\t\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Don't show the insertion point if a parent block has an \"overlay\"\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/34012#pullrequestreview-727762337\n\t\t\t\tconst clientId = element.id.slice( 'block-'.length );\n\t\t\t\tif (\n\t\t\t\t\t! clientId ||\n\t\t\t\t\t__unstableIsWithinBlockOverlay( clientId )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Don't show the inserter if the following conditions are met,\n\t\t\t\t// as it conflicts with the block toolbar:\n\t\t\t\t// 1. when hovering above or inside selected block(s)\n\t\t\t\t// 2. when the orientation is vertical\n\t\t\t\t// 3. when the __experimentalCaptureToolbars is not enabled\n\t\t\t\t// 4. when the Top Toolbar is not disabled\n\t\t\t\tif (\n\t\t\t\t\tgetSelectedBlockClientIds().includes( clientId ) &&\n\t\t\t\t\torientation === 'vertical' &&\n\t\t\t\t\t! captureToolbars &&\n\t\t\t\t\t! getSettings().hasFixedToolbar\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst elementRect = element.getBoundingClientRect();\n\n\t\t\t\tif (\n\t\t\t\t\t( orientation === 'horizontal' &&\n\t\t\t\t\t\t( event.clientY > elementRect.bottom ||\n\t\t\t\t\t\t\tevent.clientY < elementRect.top ) ) ||\n\t\t\t\t\t( orientation === 'vertical' &&\n\t\t\t\t\t\t( event.clientX > elementRect.right ||\n\t\t\t\t\t\t\tevent.clientX < elementRect.left ) )\n\t\t\t\t) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst index = getBlockIndex( clientId );\n\n\t\t\t\t// Don't show the in-between inserter before the first block in\n\t\t\t\t// the list (preserves the original behaviour).\n\t\t\t\tif ( index === 0 ) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tshowInsertionPoint( rootClientId, index, {\n\t\t\t\t\t__unstableWithInserter: true,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousemove', onMouseMove );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousemove', onMouseMove );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\topenRef,\n\t\t\tgetBlockListSettings,\n\t\t\tgetBlockIndex,\n\t\t\tisMultiSelecting,\n\t\t\tshowInsertionPoint,\n\t\t\thideInsertionPoint,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisInBetweenInserterDisabled,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Pass the returned ref callback to an element that should clear block\n * selection. Selection will only be cleared if the element is clicked directly,\n * not if a child element is clicked.\n *\n * @return {import('react').RefCallback} Ref callback.\n */\nexport function useBlockSelectionClearer() {\n\tconst { getSettings, hasSelectedBlock, hasMultiSelection } =\n\t\tuseSelect( blockEditorStore );\n\tconst { clearSelectedBlock } = useDispatch( blockEditorStore );\n\tconst { clearBlockSelection: isEnabled } = getSettings();\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\tif ( ! hasSelectedBlock() && ! hasMultiSelection() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only handle clicks on the element, not the children.\n\t\t\t\tif ( event.target !== node ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearSelectedBlock();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t};\n\t\t},\n\t\t[ hasSelectedBlock, hasMultiSelection, clearSelectedBlock, isEnabled ]\n\t);\n}\n\nexport default function BlockSelectionClearer( props ) {\n\treturn
;\n}\n","/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useMemo, useState } from '@wordpress/element';\nimport { useRegistry } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getLayoutType } from '../../layouts';\n\n/** @typedef {import('../../selectors').WPDirectInsertBlock } WPDirectInsertBlock */\n\nconst pendingSettingsUpdates = new WeakMap();\n\nfunction useShallowMemo( value ) {\n\tconst [ prevValue, setPrevValue ] = useState( value );\n\tif ( ! isShallowEqual( prevValue, value ) ) {\n\t\tsetPrevValue( value );\n\t}\n\treturn prevValue;\n}\n\n/**\n * This hook is a side effect which updates the block-editor store when changes\n * happen to inner block settings. The given props are transformed into a\n * settings object, and if that is different from the current settings object in\n * the block-editor store, then the store is updated with the new settings which\n * came from props.\n *\n * @param {string} clientId The client ID of the block to update.\n * @param {string} parentLock\n * @param {string[]} allowedBlocks An array of block names which are permitted\n * in inner blocks.\n * @param {string[]} prioritizedInserterBlocks Block names and/or block variations to be prioritized in the inserter, in the format {blockName}/{variationName}.\n * @param {?WPDirectInsertBlock} defaultBlock The default block to insert: [ blockName, { blockAttributes } ].\n * @param {?boolean} directInsert If a default block should be inserted directly by the appender.\n *\n * @param {?WPDirectInsertBlock} __experimentalDefaultBlock A deprecated prop for the default block to insert: [ blockName, { blockAttributes } ]. Use `defaultBlock` instead.\n *\n * @param {?boolean} __experimentalDirectInsert A deprecated prop for whether a default block should be inserted directly by the appender. Use `directInsert` instead.\n *\n * @param {string} [templateLock] The template lock specified for the inner\n * blocks component. (e.g. \"all\")\n * @param {boolean} captureToolbars Whether or children toolbars should be shown\n * in the inner blocks component rather than on\n * the child block.\n * @param {string} orientation The direction in which the block\n * should face.\n * @param {Object} layout The layout object for the block container.\n */\nexport default function useNestedSettingsUpdate(\n\tclientId,\n\tparentLock,\n\tallowedBlocks,\n\tprioritizedInserterBlocks,\n\tdefaultBlock,\n\tdirectInsert,\n\t__experimentalDefaultBlock,\n\t__experimentalDirectInsert,\n\ttemplateLock,\n\tcaptureToolbars,\n\torientation,\n\tlayout\n) {\n\t// Instead of adding a useSelect mapping here, please add to the useSelect\n\t// mapping in InnerBlocks! Every subscription impacts performance.\n\n\tconst registry = useRegistry();\n\n\t// Implementors often pass a new array on every render,\n\t// and the contents of the arrays are just strings, so the entire array\n\t// can be passed as dependencies but We need to include the length of the array,\n\t// otherwise if the arrays change length but the first elements are equal the comparison,\n\t// does not works as expected.\n\tconst _allowedBlocks = useShallowMemo( allowedBlocks );\n\n\tconst _prioritizedInserterBlocks = useMemo(\n\t\t() => prioritizedInserterBlocks,\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\tprioritizedInserterBlocks\n\t);\n\n\tconst _templateLock =\n\t\ttemplateLock === undefined || parentLock === 'contentOnly'\n\t\t\t? parentLock\n\t\t\t: templateLock;\n\n\tuseLayoutEffect( () => {\n\t\tconst newSettings = {\n\t\t\tallowedBlocks: _allowedBlocks,\n\t\t\tprioritizedInserterBlocks: _prioritizedInserterBlocks,\n\t\t\ttemplateLock: _templateLock,\n\t\t};\n\n\t\t// These values are not defined for RN, so only include them if they\n\t\t// are defined.\n\t\tif ( captureToolbars !== undefined ) {\n\t\t\tnewSettings.__experimentalCaptureToolbars = captureToolbars;\n\t\t}\n\n\t\t// Orientation depends on layout,\n\t\t// ideally the separate orientation prop should be deprecated.\n\t\tif ( orientation !== undefined ) {\n\t\t\tnewSettings.orientation = orientation;\n\t\t} else {\n\t\t\tconst layoutType = getLayoutType( layout?.type );\n\t\t\tnewSettings.orientation = layoutType.getOrientation( layout );\n\t\t}\n\n\t\tif ( __experimentalDefaultBlock !== undefined ) {\n\t\t\tdeprecated( '__experimentalDefaultBlock', {\n\t\t\t\talternative: 'defaultBlock',\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.4',\n\t\t\t} );\n\t\t\tnewSettings.defaultBlock = __experimentalDefaultBlock;\n\t\t}\n\n\t\tif ( defaultBlock !== undefined ) {\n\t\t\tnewSettings.defaultBlock = defaultBlock;\n\t\t}\n\n\t\tif ( __experimentalDirectInsert !== undefined ) {\n\t\t\tdeprecated( '__experimentalDirectInsert', {\n\t\t\t\talternative: 'directInsert',\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.4',\n\t\t\t} );\n\t\t\tnewSettings.directInsert = __experimentalDirectInsert;\n\t\t}\n\n\t\tif ( directInsert !== undefined ) {\n\t\t\tnewSettings.directInsert = directInsert;\n\t\t}\n\n\t\tif (\n\t\t\tnewSettings.directInsert !== undefined &&\n\t\t\ttypeof newSettings.directInsert !== 'boolean'\n\t\t) {\n\t\t\tdeprecated( 'Using `Function` as a `directInsert` argument', {\n\t\t\t\talternative: '`boolean` values',\n\t\t\t\tsince: '6.5',\n\t\t\t} );\n\t\t}\n\n\t\t// Batch updates to block list settings to avoid triggering cascading renders\n\t\t// for each container block included in a tree and optimize initial render.\n\t\t// To avoid triggering updateBlockListSettings for each container block\n\t\t// causing X re-renderings for X container blocks,\n\t\t// we batch all the updatedBlockListSettings in a single \"data\" batch\n\t\t// which results in a single re-render.\n\t\tif ( ! pendingSettingsUpdates.get( registry ) ) {\n\t\t\tpendingSettingsUpdates.set( registry, {} );\n\t\t}\n\t\tpendingSettingsUpdates.get( registry )[ clientId ] = newSettings;\n\t\twindow.queueMicrotask( () => {\n\t\t\tconst settings = pendingSettingsUpdates.get( registry );\n\t\t\tif ( Object.keys( settings ).length ) {\n\t\t\t\tconst { updateBlockListSettings } =\n\t\t\t\t\tregistry.dispatch( blockEditorStore );\n\t\t\t\tupdateBlockListSettings( settings );\n\t\t\t\tpendingSettingsUpdates.set( registry, {} );\n\t\t\t}\n\t\t} );\n\t}, [\n\t\tclientId,\n\t\t_allowedBlocks,\n\t\t_prioritizedInserterBlocks,\n\t\t_templateLock,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\tcaptureToolbars,\n\t\torientation,\n\t\tlayout,\n\t\tregistry,\n\t] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport {\n\tcloneBlock,\n\tcreateBlock,\n\tfindTransform,\n\tgetBlockTransforms,\n\tpasteHandler,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('react').SyntheticEvent} SyntheticEvent */\n/** @typedef {import('./types').WPDropOperation} WPDropOperation */\n\n/**\n * Retrieve the data for a block drop event.\n *\n * @param {SyntheticEvent} event The drop event.\n *\n * @return {Object} An object with block drag and drop data.\n */\nexport function parseDropEvent( event ) {\n\tlet result = {\n\t\tsrcRootClientId: null,\n\t\tsrcClientIds: null,\n\t\tsrcIndex: null,\n\t\ttype: null,\n\t\tblocks: null,\n\t};\n\n\tif ( ! event.dataTransfer ) {\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tresult = Object.assign(\n\t\t\tresult,\n\t\t\tJSON.parse( event.dataTransfer.getData( 'wp-blocks' ) )\n\t\t);\n\t} catch ( err ) {\n\t\treturn result;\n\t}\n\n\treturn result;\n}\n\n/**\n * A function that returns an event handler function for block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} getBlockIndex A function that gets the index of a block.\n * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.\n * @param {Function} moveBlocks A function that moves blocks.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n * @param {Function} clearSelectedBlock A function that clears block selection.\n * @param {string} operation The type of operation to perform on drop. Could be `insert` or `replace` or `group`.\n * @param {Function} getBlock A function that returns a block given its client id.\n * @return {Function} The event handler for a block drop event.\n */\nexport function onBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tgetBlockIndex,\n\tgetClientIdsOfDescendants,\n\tmoveBlocks,\n\tinsertOrReplaceBlocks,\n\tclearSelectedBlock,\n\toperation,\n\tgetBlock\n) {\n\treturn ( event ) => {\n\t\tconst {\n\t\t\tsrcRootClientId: sourceRootClientId,\n\t\t\tsrcClientIds: sourceClientIds,\n\t\t\ttype: dropType,\n\t\t\tblocks,\n\t\t} = parseDropEvent( event );\n\n\t\t// If the user is inserting a block.\n\t\tif ( dropType === 'inserter' ) {\n\t\t\tclearSelectedBlock();\n\t\t\tconst blocksToInsert = blocks.map( ( block ) =>\n\t\t\t\tcloneBlock( block )\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocksToInsert, true, null );\n\t\t}\n\n\t\t// If the user is moving a block.\n\t\tif ( dropType === 'block' ) {\n\t\t\tconst sourceBlockIndex = getBlockIndex( sourceClientIds[ 0 ] );\n\n\t\t\t// If the user is dropping to the same position, return early.\n\t\t\tif (\n\t\t\t\tsourceRootClientId === targetRootClientId &&\n\t\t\t\tsourceBlockIndex === targetBlockIndex\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is attempting to drop a block within its own\n\t\t\t// nested blocks, return early as this would create infinite\n\t\t\t// recursion.\n\t\t\tif (\n\t\t\t\tsourceClientIds.includes( targetRootClientId ) ||\n\t\t\t\tgetClientIdsOfDescendants( sourceClientIds ).some(\n\t\t\t\t\t( id ) => id === targetRootClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is dropping a block over another block, replace both blocks\n\t\t\t// with a group block containing them\n\t\t\tif ( operation === 'group' ) {\n\t\t\t\tconst blocksToInsert = sourceClientIds.map( ( clientId ) =>\n\t\t\t\t\tgetBlock( clientId )\n\t\t\t\t);\n\t\t\t\tinsertOrReplaceBlocks(\n\t\t\t\t\tblocksToInsert,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnull,\n\t\t\t\t\tsourceClientIds\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isAtSameLevel = sourceRootClientId === targetRootClientId;\n\t\t\tconst draggedBlockCount = sourceClientIds.length;\n\n\t\t\t// If the block is kept at the same level and moved downwards,\n\t\t\t// subtract to take into account that the blocks being dragged\n\t\t\t// were removed from the block list above the insertion point.\n\t\t\tconst insertIndex =\n\t\t\t\tisAtSameLevel && sourceBlockIndex < targetBlockIndex\n\t\t\t\t\t? targetBlockIndex - draggedBlockCount\n\t\t\t\t\t: targetBlockIndex;\n\n\t\t\tmoveBlocks( sourceClientIds, sourceRootClientId, insertIndex );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related file drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {Function} getSettings A function that gets the block editor settings.\n * @param {Function} updateBlockAttributes A function that updates a block's attributes.\n * @param {Function} canInsertBlockType A function that returns checks whether a block type can be inserted.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related file drop event.\n */\nexport function onFilesDrop(\n\ttargetRootClientId,\n\tgetSettings,\n\tupdateBlockAttributes,\n\tcanInsertBlockType,\n\tinsertOrReplaceBlocks\n) {\n\treturn ( files ) => {\n\t\tif ( ! getSettings().mediaUpload ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformation = findTransform(\n\t\t\tgetBlockTransforms( 'from' ),\n\t\t\t( transform ) =>\n\t\t\t\ttransform.type === 'files' &&\n\t\t\t\tcanInsertBlockType( transform.blockName, targetRootClientId ) &&\n\t\t\t\ttransform.isMatch( files )\n\t\t);\n\n\t\tif ( transformation ) {\n\t\t\tconst blocks = transformation.transform(\n\t\t\t\tfiles,\n\t\t\t\tupdateBlockAttributes\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related HTML drop events.\n *\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related HTML drop event.\n */\nexport function onHTMLDrop( insertOrReplaceBlocks ) {\n\treturn ( HTML ) => {\n\t\tconst blocks = pasteHandler( { HTML, mode: 'BLOCKS' } );\n\n\t\tif ( blocks.length ) {\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A React hook for handling block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Object} options The optional options.\n * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.\n *\n * @return {Function} A function to be passed to the onDrop handler.\n */\nexport default function useOnBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\toptions = {}\n) {\n\tconst { operation = 'insert', nearestSide = 'right' } = options;\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tgetBlockOrder,\n\t\tgetBlocksByClientId,\n\t\tgetSettings,\n\t\tgetBlock,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\tconst {\n\t\tinsertBlocks,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\tclearSelectedBlock,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst registry = useRegistry();\n\n\tconst insertOrReplaceBlocks = useCallback(\n\t\t(\n\t\t\tblocks,\n\t\t\tupdateSelection = true,\n\t\t\tinitialPosition = 0,\n\t\t\tclientIdsToReplace = []\n\t\t) => {\n\t\t\tif ( ! Array.isArray( blocks ) ) {\n\t\t\t\tblocks = [ blocks ];\n\t\t\t}\n\t\t\tconst clientIds = getBlockOrder( targetRootClientId );\n\t\t\tconst clientId = clientIds[ targetBlockIndex ];\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\treplaceBlocks( clientId, blocks, undefined, initialPosition );\n\t\t\t} else if ( operation === 'group' ) {\n\t\t\t\tconst targetBlock = getBlock( clientId );\n\t\t\t\tif ( nearestSide === 'left' ) {\n\t\t\t\t\tblocks.push( targetBlock );\n\t\t\t\t} else {\n\t\t\t\t\tblocks.unshift( targetBlock );\n\t\t\t\t}\n\n\t\t\t\tconst groupInnerBlocks = blocks.map( ( block ) => {\n\t\t\t\t\treturn createBlock(\n\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\tblock.attributes,\n\t\t\t\t\t\tblock.innerBlocks\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\tconst areAllImages = blocks.every( ( block ) => {\n\t\t\t\t\treturn block.name === 'core/image';\n\t\t\t\t} );\n\n\t\t\t\tconst galleryBlock = canInsertBlockType(\n\t\t\t\t\t'core/gallery',\n\t\t\t\t\ttargetRootClientId\n\t\t\t\t);\n\n\t\t\t\tconst wrappedBlocks = createBlock(\n\t\t\t\t\tareAllImages && galleryBlock\n\t\t\t\t\t\t? 'core/gallery'\n\t\t\t\t\t\t: getGroupingBlockName(),\n\t\t\t\t\t{\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\ttype: 'flex',\n\t\t\t\t\t\t\tflexWrap:\n\t\t\t\t\t\t\t\tareAllImages && galleryBlock ? null : 'nowrap',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgroupInnerBlocks\n\t\t\t\t);\n\t\t\t\t// Need to make sure both the target block and the block being dragged are replaced\n\t\t\t\t// otherwise the dragged block will be duplicated.\n\t\t\t\treplaceBlocks(\n\t\t\t\t\t[ clientId, ...clientIdsToReplace ],\n\t\t\t\t\twrappedBlocks,\n\t\t\t\t\tundefined,\n\t\t\t\t\tinitialPosition\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tblocks,\n\t\t\t\t\ttargetBlockIndex,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tupdateSelection,\n\t\t\t\t\tinitialPosition\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tgetBlockOrder,\n\t\t\ttargetRootClientId,\n\t\t\ttargetBlockIndex,\n\t\t\toperation,\n\t\t\treplaceBlocks,\n\t\t\tgetBlock,\n\t\t\tnearestSide,\n\t\t\tcanInsertBlockType,\n\t\t\tgetGroupingBlockName,\n\t\t\tinsertBlocks,\n\t\t]\n\t);\n\n\tconst moveBlocks = useCallback(\n\t\t( sourceClientIds, sourceRootClientId, insertIndex ) => {\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\tconst sourceBlocks = getBlocksByClientId( sourceClientIds );\n\t\t\t\tconst targetBlockClientIds =\n\t\t\t\t\tgetBlockOrder( targetRootClientId );\n\t\t\t\tconst targetBlockClientId =\n\t\t\t\t\ttargetBlockClientIds[ targetBlockIndex ];\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t// Remove the source blocks.\n\t\t\t\t\tremoveBlocks( sourceClientIds, false );\n\t\t\t\t\t// Replace the target block with the source blocks.\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\ttargetBlockClientId,\n\t\t\t\t\t\tsourceBlocks,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t0\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\tsourceClientIds,\n\t\t\t\t\tsourceRootClientId,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tinsertIndex\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\toperation,\n\t\t\tgetBlockOrder,\n\t\t\tgetBlocksByClientId,\n\t\t\tmoveBlocksToPosition,\n\t\t\tregistry,\n\t\t\tremoveBlocks,\n\t\t\treplaceBlocks,\n\t\t\ttargetBlockIndex,\n\t\t\ttargetRootClientId,\n\t\t]\n\t);\n\n\tconst _onDrop = onBlockDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tmoveBlocks,\n\t\tinsertOrReplaceBlocks,\n\t\tclearSelectedBlock,\n\t\toperation,\n\t\tgetBlock\n\t);\n\tconst _onFilesDrop = onFilesDrop(\n\t\ttargetRootClientId,\n\t\tgetSettings,\n\t\tupdateBlockAttributes,\n\t\tcanInsertBlockType,\n\t\tinsertOrReplaceBlocks\n\t);\n\tconst _onHTMLDrop = onHTMLDrop( insertOrReplaceBlocks );\n\n\treturn ( event ) => {\n\t\tconst files = getFilesFromDataTransfer( event.dataTransfer );\n\t\tconst html = event.dataTransfer.getData( 'text/html' );\n\n\t\t/**\n\t\t * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.\n\t\t * The order of the checks is important to recognise the HTML drop.\n\t\t */\n\t\tif ( html ) {\n\t\t\t_onHTMLDrop( html );\n\t\t} else if ( files.length ) {\n\t\t\t_onFilesDrop( files );\n\t\t} else {\n\t\t\t_onDrop( event );\n\t\t}\n\t};\n}\n","/**\n * A string representing the name of an edge.\n *\n * @typedef {'top'|'right'|'bottom'|'left'} WPEdgeName\n */\n\n/**\n * @typedef {Object} WPPoint\n * @property {number} x The horizontal position.\n * @property {number} y The vertical position.\n */\n\n/**\n * Given a point, a DOMRect and the name of an edge, returns the distance to\n * that edge of the rect.\n *\n * This function works for edges that are horizontal or vertical (e.g. not\n * rotated), the following terms are used so that the function works in both\n * orientations:\n *\n * - Forward, meaning the axis running horizontally when an edge is vertical\n * and vertically when an edge is horizontal.\n * - Lateral, meaning the axis running vertically when an edge is vertical\n * and horizontally when an edge is horizontal.\n *\n * @param {WPPoint} point The point to measure distance from.\n * @param {DOMRect} rect A DOM Rect containing edge positions.\n * @param {WPEdgeName} edge The edge to measure to.\n */\nexport function getDistanceFromPointToEdge( point, rect, edge ) {\n\tconst isHorizontal = edge === 'top' || edge === 'bottom';\n\tconst { x, y } = point;\n\tconst pointLateralPosition = isHorizontal ? x : y;\n\tconst pointForwardPosition = isHorizontal ? y : x;\n\tconst edgeStart = isHorizontal ? rect.left : rect.top;\n\tconst edgeEnd = isHorizontal ? rect.right : rect.bottom;\n\tconst edgeForwardPosition = rect[ edge ];\n\n\t// Measure the straight line distance to the edge of the rect, when the\n\t// point is adjacent to the edge.\n\t// Else, if the point is positioned diagonally to the edge of the rect,\n\t// measure diagonally to the nearest corner that the edge meets.\n\tlet edgeLateralPosition;\n\tif (\n\t\tpointLateralPosition >= edgeStart &&\n\t\tpointLateralPosition <= edgeEnd\n\t) {\n\t\tedgeLateralPosition = pointLateralPosition;\n\t} else if ( pointLateralPosition < edgeEnd ) {\n\t\tedgeLateralPosition = edgeStart;\n\t} else {\n\t\tedgeLateralPosition = edgeEnd;\n\t}\n\n\treturn Math.sqrt(\n\t\t( pointLateralPosition - edgeLateralPosition ) ** 2 +\n\t\t\t( pointForwardPosition - edgeForwardPosition ) ** 2\n\t);\n}\n\n/**\n * Given a point, a DOMRect and a list of allowed edges returns the name of and\n * distance to the nearest edge.\n *\n * @param {WPPoint} point The point to measure distance from.\n * @param {DOMRect} rect A DOM Rect containing edge positions.\n * @param {WPEdgeName[]} allowedEdges A list of the edges included in the\n * calculation. Defaults to all edges.\n *\n * @return {[number, string]} An array where the first value is the distance\n * and a second is the edge name.\n */\nexport function getDistanceToNearestEdge(\n\tpoint,\n\trect,\n\tallowedEdges = [ 'top', 'bottom', 'left', 'right' ]\n) {\n\tlet candidateDistance;\n\tlet candidateEdge;\n\n\tallowedEdges.forEach( ( edge ) => {\n\t\tconst distance = getDistanceFromPointToEdge( point, rect, edge );\n\n\t\tif ( candidateDistance === undefined || distance < candidateDistance ) {\n\t\t\tcandidateDistance = distance;\n\t\t\tcandidateEdge = edge;\n\t\t}\n\t} );\n\n\treturn [ candidateDistance, candidateEdge ];\n}\n\n/**\n * Is the point contained by the rectangle.\n *\n * @param {WPPoint} point The point.\n * @param {DOMRect} rect The rectangle.\n *\n * @return {boolean} True if the point is contained by the rectangle, false otherwise.\n */\nexport function isPointContainedByRect( point, rect ) {\n\treturn (\n\t\trect.left <= point.x &&\n\t\trect.right >= point.x &&\n\t\trect.top <= point.y &&\n\t\trect.bottom >= point.y\n\t);\n}\n\n/**\n * Is the point within the top and bottom boundaries of the rectangle.\n *\n * @param {WPPoint} point The point.\n * @param {DOMRect} rect The rectangle.\n *\n * @return {boolean} True if the point is within top and bottom of rectangle, false otherwise.\n */\nexport function isPointWithinTopAndBottomBoundariesOfRect( point, rect ) {\n\treturn rect.top <= point.y && rect.bottom >= point.y;\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport {\n\tisUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useOnBlockDrop from '../use-on-block-drop';\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n\tisPointWithinTopAndBottomBoundariesOfRect,\n} from '../../utils/math';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst THRESHOLD_DISTANCE = 30;\nconst MINIMUM_HEIGHT_FOR_THRESHOLD = 120;\nconst MINIMUM_WIDTH_FOR_THRESHOLD = 120;\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\n/**\n * The orientation of a block list.\n *\n * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation\n */\n\n/**\n * The insert position when dropping a block.\n *\n * @typedef {'before'|'after'} WPInsertPosition\n */\n\n/**\n * @typedef {Object} WPBlockData\n * @property {boolean} isUnmodifiedDefaultBlock Is the block unmodified default block.\n * @property {() => DOMRect} getBoundingClientRect Get the bounding client rect of the block.\n * @property {number} blockIndex The index of the block.\n */\n\n/**\n * Get the drop target position from a given drop point and the orientation.\n *\n * @param {WPBlockData[]} blocksData The block data list.\n * @param {WPPoint} position The position of the item being dragged.\n * @param {WPBlockListOrientation} orientation The orientation of the block list.\n * @param {Object} options Additional options.\n * @return {[number, WPDropOperation]} The drop target position.\n */\nexport function getDropTargetPosition(\n\tblocksData,\n\tposition,\n\torientation = 'vertical',\n\toptions = {}\n) {\n\tconst allowedEdges =\n\t\torientation === 'horizontal'\n\t\t\t? [ 'left', 'right' ]\n\t\t\t: [ 'top', 'bottom' ];\n\n\tlet nearestIndex = 0;\n\tlet insertPosition = 'before';\n\tlet minDistance = Infinity;\n\tlet targetBlockIndex = null;\n\tlet nearestSide = 'right';\n\n\tconst {\n\t\tdropZoneElement,\n\t\tparentBlockOrientation,\n\t\trootBlockIndex = 0,\n\t} = options;\n\n\t// Allow before/after when dragging over the top/bottom edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation !== 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'top',\n\t\t\t'bottom',\n\t\t] );\n\n\t\t// If dragging over the top or bottom of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group or Cover.\n\t\tif (\n\t\t\trect.height > MINIMUM_HEIGHT_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif ( edge === 'top' ) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif ( edge === 'bottom' ) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst isRightToLeft = isRTL();\n\n\t// Allow before/after when dragging over the left/right edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation === 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'left',\n\t\t\t'right',\n\t\t] );\n\n\t\t// If dragging over the left or right of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group.\n\t\tif (\n\t\t\trect.width > MINIMUM_WIDTH_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'right' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'left' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'left' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'right' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tblocksData.forEach(\n\t\t( {\n\t\t\tisUnmodifiedDefaultBlock,\n\t\t\tgetBoundingClientRect,\n\t\t\tblockIndex,\n\t\t\tblockOrientation,\n\t\t} ) => {\n\t\t\tconst rect = getBoundingClientRect();\n\n\t\t\tlet [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\tallowedEdges\n\t\t\t);\n\t\t\t// If the the point is close to a side, prioritize that side.\n\t\t\tconst [ sideDistance, sideEdge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\t[ 'left', 'right' ]\n\t\t\t);\n\n\t\t\tconst isPointInsideRect = isPointContainedByRect( position, rect );\n\n\t\t\t// Prioritize the element if the point is inside of an unmodified default block.\n\t\t\tif ( isUnmodifiedDefaultBlock && isPointInsideRect ) {\n\t\t\t\tdistance = 0;\n\t\t\t} else if (\n\t\t\t\torientation === 'vertical' &&\n\t\t\t\tblockOrientation !== 'horizontal' &&\n\t\t\t\t( ( isPointInsideRect && sideDistance < THRESHOLD_DISTANCE ) ||\n\t\t\t\t\t( ! isPointInsideRect &&\n\t\t\t\t\t\tisPointWithinTopAndBottomBoundariesOfRect(\n\t\t\t\t\t\t\tposition,\n\t\t\t\t\t\t\trect\n\t\t\t\t\t\t) ) )\n\t\t\t) {\n\t\t\t\t/**\n\t\t\t\t * This condition should only apply when the layout is vertical (otherwise there's\n\t\t\t\t * no need to create a Row) and dropzones should only activate when the block is\n\t\t\t\t * either within and close to the sides of the target block or on its outer sides.\n\t\t\t\t */\n\t\t\t\ttargetBlockIndex = blockIndex;\n\t\t\t\tnearestSide = sideEdge;\n\t\t\t}\n\n\t\t\tif ( distance < minDistance ) {\n\t\t\t\t// Where the dropped block will be inserted on the nearest block.\n\t\t\t\tinsertPosition =\n\t\t\t\t\tedge === 'bottom' ||\n\t\t\t\t\t( ! isRightToLeft && edge === 'right' ) ||\n\t\t\t\t\t( isRightToLeft && edge === 'left' )\n\t\t\t\t\t\t? 'after'\n\t\t\t\t\t\t: 'before';\n\n\t\t\t\t// Update the currently known best candidate.\n\t\t\t\tminDistance = distance;\n\t\t\t\tnearestIndex = blockIndex;\n\t\t\t}\n\t\t}\n\t);\n\n\tconst adjacentIndex =\n\t\tnearestIndex + ( insertPosition === 'after' ? 1 : -1 );\n\tconst isNearestBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ nearestIndex ]?.isUnmodifiedDefaultBlock;\n\tconst isAdjacentBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ adjacentIndex ]?.isUnmodifiedDefaultBlock;\n\n\t// If the target index is set then group with the block at that index.\n\tif ( targetBlockIndex !== null ) {\n\t\treturn [ targetBlockIndex, 'group', nearestSide ];\n\t}\n\t// If both blocks are not unmodified default blocks then just insert between them.\n\tif (\n\t\t! isNearestBlockUnmodifiedDefaultBlock &&\n\t\t! isAdjacentBlockUnmodifiedDefaultBlock\n\t) {\n\t\t// If the user is dropping to the trailing edge of the block\n\t\t// add 1 to the index to represent dragging after.\n\t\tconst insertionIndex =\n\t\t\tinsertPosition === 'after' ? nearestIndex + 1 : nearestIndex;\n\t\treturn [ insertionIndex, 'insert' ];\n\t}\n\n\t// Otherwise, replace the nearest unmodified default block.\n\treturn [\n\t\tisNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex,\n\t\t'replace',\n\t];\n}\n\n/**\n * Check if the dragged blocks can be dropped on the target.\n * @param {Function} getBlockType\n * @param {Object[]} allowedBlocks\n * @param {string[]} draggedBlockNames\n * @param {string} targetBlockName\n * @return {boolean} Whether the dragged blocks can be dropped on the target.\n */\nexport function isDropTargetValid(\n\tgetBlockType,\n\tallowedBlocks,\n\tdraggedBlockNames,\n\ttargetBlockName\n) {\n\t// At root level allowedBlocks is undefined and all blocks are allowed.\n\t// Otherwise, check if all dragged blocks are allowed.\n\tlet areBlocksAllowed = true;\n\tif ( allowedBlocks ) {\n\t\tconst allowedBlockNames = allowedBlocks?.map( ( { name } ) => name );\n\n\t\tareBlocksAllowed = draggedBlockNames.every( ( name ) =>\n\t\t\tallowedBlockNames?.includes( name )\n\t\t);\n\t}\n\n\t// Work out if dragged blocks have an allowed parent and if so\n\t// check target block matches the allowed parent.\n\tconst draggedBlockTypes = draggedBlockNames.map( ( name ) =>\n\t\tgetBlockType( name )\n\t);\n\tconst targetMatchesDraggedBlockParents = draggedBlockTypes.every(\n\t\t( block ) => {\n\t\t\tconst [ allowedParentName ] = block?.parent || [];\n\t\t\tif ( ! allowedParentName ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn allowedParentName === targetBlockName;\n\t\t}\n\t);\n\n\treturn areBlocksAllowed && targetMatchesDraggedBlockParents;\n}\n\n/**\n * Checks if the given element is an insertion point.\n *\n * @param {EventTarget|null} targetToCheck - The element to check.\n * @param {Document} ownerDocument - The owner document of the element.\n * @return {boolean} True if the element is a insertion point, false otherwise.\n */\nfunction isInsertionPoint( targetToCheck, ownerDocument ) {\n\tconst { defaultView } = ownerDocument;\n\n\treturn !! (\n\t\tdefaultView &&\n\t\ttargetToCheck instanceof defaultView.HTMLElement &&\n\t\ttargetToCheck.dataset.isInsertionPoint\n\t);\n}\n\n/**\n * @typedef {Object} WPBlockDropZoneConfig\n * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.\n * @property {string} rootClientId The root client id for the block list.\n */\n\n/**\n * A React hook that can be used to make a block list handle drag and drop.\n *\n * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.\n */\nexport default function useBlockDropZone( {\n\tdropZoneElement,\n\t// An undefined value represents a top-level block. Default to an empty\n\t// string for this so that `targetRootClientId` can be easily compared to\n\t// values returned by the `getRootBlockClientId` selector, which also uses\n\t// an empty string to represent top-level blocks.\n\trootClientId: targetRootClientId = '',\n\tparentClientId: parentBlockClientId = '',\n\tisDisabled = false,\n} = {} ) {\n\tconst registry = useRegistry();\n\tconst [ dropTarget, setDropTarget ] = useState( {\n\t\tindex: null,\n\t\toperation: 'insert',\n\t} );\n\n\tconst { getBlockType, getBlockVariations, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockListSettings,\n\t\tgetBlocks,\n\t\tgetBlockIndex,\n\t\tgetDraggedBlockClientIds,\n\t\tgetBlockNamesByClientId,\n\t\tgetAllowedBlocks,\n\t\tisDragging,\n\t\tisGroupable,\n\t\tisZoomOutMode,\n\t\tgetSectionRootClientId,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst {\n\t\tshowInsertionPoint,\n\t\thideInsertionPoint,\n\t\tstartDragging,\n\t\tstopDragging,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst onBlockDrop = useOnBlockDrop(\n\t\tdropTarget.operation === 'before' || dropTarget.operation === 'after'\n\t\t\t? parentBlockClientId\n\t\t\t: targetRootClientId,\n\t\tdropTarget.index,\n\t\t{\n\t\t\toperation: dropTarget.operation,\n\t\t\tnearestSide: dropTarget.nearestSide,\n\t\t}\n\t);\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, ownerDocument ) => {\n\t\t\t\tif ( ! isDragging() ) {\n\t\t\t\t\t// When dragging from the desktop, no drag start event is fired.\n\t\t\t\t\t// So, ensure that the drag state is set when the user drags over a drop zone.\n\t\t\t\t\tstartDragging();\n\t\t\t\t}\n\t\t\t\tconst allowedBlocks = getAllowedBlocks( targetRootClientId );\n\t\t\t\tconst targetBlockName = getBlockNamesByClientId( [\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t] )[ 0 ];\n\n\t\t\t\tconst draggedBlockNames = getBlockNamesByClientId(\n\t\t\t\t\tgetDraggedBlockClientIds()\n\t\t\t\t);\n\t\t\t\tconst isBlockDroppingAllowed = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\tallowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetBlockName\n\t\t\t\t);\n\n\t\t\t\tif ( ! isBlockDroppingAllowed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\n\t\t\t\t// In Zoom Out mode, if the target is not the section root provided by settings then\n\t\t\t\t// do not allow dropping as the drop target is not within the root (that which is\n\t\t\t\t// treated as \"the content\" by Zoom Out Mode).\n\t\t\t\tif (\n\t\t\t\t\tisZoomOutMode() &&\n\t\t\t\t\tsectionRootClientId !== targetRootClientId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocks = getBlocks( targetRootClientId );\n\n\t\t\t\t// The block list is empty, don't show the insertion point but still allow dropping.\n\t\t\t\tif ( blocks.length === 0 ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tshowInsertionPoint( targetRootClientId, 0, {\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocksData = blocks.map( ( block ) => {\n\t\t\t\t\tconst clientId = block.clientId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisUnmodifiedDefaultBlock:\n\t\t\t\t\t\t\tgetIsUnmodifiedDefaultBlock( block ),\n\t\t\t\t\t\tgetBoundingClientRect: () =>\n\t\t\t\t\t\t\townerDocument\n\t\t\t\t\t\t\t\t.getElementById( `block-${ clientId }` )\n\t\t\t\t\t\t\t\t.getBoundingClientRect(),\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t\tblockOrientation:\n\t\t\t\t\t\t\tgetBlockListSettings( clientId )?.orientation,\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst dropTargetPosition = getDropTargetPosition(\n\t\t\t\t\tblocksData,\n\t\t\t\t\t{ x: event.clientX, y: event.clientY },\n\t\t\t\t\tgetBlockListSettings( targetRootClientId )?.orientation,\n\t\t\t\t\t{\n\t\t\t\t\t\tdropZoneElement,\n\t\t\t\t\t\tparentBlockClientId,\n\t\t\t\t\t\tparentBlockOrientation: parentBlockClientId\n\t\t\t\t\t\t\t? getBlockListSettings( parentBlockClientId )\n\t\t\t\t\t\t\t\t\t?.orientation\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\trootBlockIndex: getBlockIndex( targetRootClientId ),\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst [ targetIndex, operation, nearestSide ] =\n\t\t\t\t\tdropTargetPosition;\n\n\t\t\t\tif ( isZoomOutMode() && operation !== 'insert' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( operation === 'group' ) {\n\t\t\t\t\tconst targetBlock = blocks[ targetIndex ];\n\t\t\t\t\tconst areAllImages = [\n\t\t\t\t\t\ttargetBlock.name,\n\t\t\t\t\t\t...draggedBlockNames,\n\t\t\t\t\t].every( ( name ) => name === 'core/image' );\n\t\t\t\t\tconst canInsertGalleryBlock = canInsertBlockType(\n\t\t\t\t\t\t'core/gallery',\n\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t);\n\t\t\t\t\tconst areGroupableBlocks = isGroupable( [\n\t\t\t\t\t\ttargetBlock.clientId,\n\t\t\t\t\t\tgetDraggedBlockClientIds(),\n\t\t\t\t\t] );\n\t\t\t\t\tconst groupBlockVariations = getBlockVariations(\n\t\t\t\t\t\tgetGroupingBlockName(),\n\t\t\t\t\t\t'block'\n\t\t\t\t\t);\n\t\t\t\t\tconst canInsertRow =\n\t\t\t\t\t\tgroupBlockVariations &&\n\t\t\t\t\t\tgroupBlockVariations.find(\n\t\t\t\t\t\t\t( { name } ) => name === 'group-row'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t// If the dragged blocks and the target block are all images,\n\t\t\t\t\t// check if it is creatable either a Row variation or a Gallery block.\n\t\t\t\t\tif (\n\t\t\t\t\t\tareAllImages &&\n\t\t\t\t\t\t! canInsertGalleryBlock &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// If the dragged blocks and the target block are not all images,\n\t\t\t\t\t// check if it is creatable a Row variation.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! areAllImages &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\tindex: targetIndex,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst insertionPointClientId = [\n\t\t\t\t\t\t'before',\n\t\t\t\t\t\t'after',\n\t\t\t\t\t].includes( operation )\n\t\t\t\t\t\t? parentBlockClientId\n\t\t\t\t\t\t: targetRootClientId;\n\n\t\t\t\t\tshowInsertionPoint( insertionPointClientId, targetIndex, {\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tisDragging,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetBlockType,\n\t\t\t\tgetSectionRootClientId,\n\t\t\t\tisZoomOutMode,\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tdropZoneElement,\n\t\t\t\tparentBlockClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tregistry,\n\t\t\t\tstartDragging,\n\t\t\t\tshowInsertionPoint,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tisGroupable,\n\t\t\t\tgetBlockVariations,\n\t\t\t\tgetGroupingBlockName,\n\t\t\t]\n\t\t),\n\t\t200\n\t);\n\n\treturn useDropZone( {\n\t\tdropZoneElement,\n\t\tisDisabled,\n\t\tonDrop: onBlockDrop,\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget.ownerDocument );\n\t\t},\n\t\tonDragLeave( event ) {\n\t\t\tconst { ownerDocument } = event.currentTarget;\n\n\t\t\t// If the drag event is leaving the drop zone and entering an insertion point,\n\t\t\t// do not hide the insertion point as it is conceptually within the dropzone.\n\t\t\tif (\n\t\t\t\tisInsertionPoint( event.relatedTarget, ownerDocument ) ||\n\t\t\t\tisInsertionPoint( event.target, ownerDocument )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\tstopDragging();\n\t\t\thideInsertionPoint();\n\t\t},\n\t} );\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef, useMemo, memo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tgetBlockSupport,\n\tstore as blocksStore,\n\t__unstableGetInnerBlocksProps as getInnerBlocksProps,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport ButtonBlockAppender from './button-block-appender';\nimport DefaultBlockAppender from './default-block-appender';\nimport useNestedSettingsUpdate from './use-nested-settings-update';\nimport useInnerBlockTemplateSync from './use-inner-block-template-sync';\nimport useBlockContext from './use-block-context';\nimport { BlockListItems } from '../block-list';\nimport { BlockContextProvider } from '../block-context';\nimport { useBlockEditContext } from '../block-edit/context';\nimport useBlockSync from '../provider/use-block-sync';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDropZone from '../use-block-drop-zone';\nimport { unlock } from '../../lock-unlock';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockContext( { children, clientId } ) {\n\tconst context = useBlockContext( clientId );\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst BlockListItemsMemo = memo( BlockListItems );\n\n/**\n * InnerBlocks is a component which allows a single block to have multiple blocks\n * as children. The UncontrolledInnerBlocks component is used whenever the inner\n * blocks are not controlled by another entity. In other words, it is normally\n * used for inner blocks in the post editor\n *\n * @param {Object} props The component props.\n */\nfunction UncontrolledInnerBlocks( props ) {\n\tconst {\n\t\tclientId,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\twrapperRef,\n\t\ttemplateInsertUpdatesSelection,\n\t\t__experimentalCaptureToolbars: captureToolbars,\n\t\t__experimentalAppenderTagName,\n\t\trenderAppender,\n\t\torientation,\n\t\tplaceholder,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t} = props;\n\n\tuseNestedSettingsUpdate(\n\t\tclientId,\n\t\tparentLock,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplateLock,\n\t\tcaptureToolbars,\n\t\torientation,\n\t\tlayout\n\t);\n\n\tuseInnerBlockTemplateSync(\n\t\tclientId,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\ttemplateInsertUpdatesSelection\n\t);\n\n\tconst defaultLayoutBlockSupport =\n\t\tgetBlockSupport( name, 'layout' ) ||\n\t\tgetBlockSupport( name, '__experimentalLayout' ) ||\n\t\tEMPTY_OBJECT;\n\n\tconst { allowSizingOnChildren = false } = defaultLayoutBlockSupport;\n\tconst usedLayout = layout || defaultLayoutBlockSupport;\n\n\tconst memoedLayout = useMemo(\n\t\t() => ( {\n\t\t\t// Default layout will know about any content/wide size defined by the theme.\n\t\t\t...defaultLayout,\n\t\t\t...usedLayout,\n\t\t\t...( allowSizingOnChildren && {\n\t\t\t\tallowSizingOnChildren: true,\n\t\t\t} ),\n\t\t} ),\n\t\t[ defaultLayout, usedLayout, allowSizingOnChildren ]\n\t);\n\n\t// For controlled inner blocks, we don't want a change in blocks to\n\t// re-render the blocks list.\n\tconst items = (\n\t\t\n\t);\n\n\tif (\n\t\t! blockType?.providesContext ||\n\t\tObject.keys( blockType.providesContext ).length === 0\n\t) {\n\t\treturn items;\n\t}\n\n\treturn { items };\n}\n\n/**\n * The controlled inner blocks component wraps the uncontrolled inner blocks\n * component with the blockSync hook. This keeps the innerBlocks of the block in\n * the block-editor store in sync with the blocks of the controlling entity. An\n * example of an inner block controller is a template part block, which provides\n * its own blocks from the template part entity data source.\n *\n * @param {Object} props The component props.\n */\nfunction ControlledInnerBlocks( props ) {\n\tuseBlockSync( props );\n\treturn ;\n}\n\nconst ForwardedInnerBlocks = forwardRef( ( props, ref ) => {\n\tconst innerBlocksProps = useInnerBlocksProps( { ref }, props );\n\treturn (\n\t\t
\n\t\t\t
\n\t\t
\n\t);\n} );\n\n/**\n * This hook is used to lightly mark an element as an inner blocks wrapper\n * element. Call this hook and pass the returned props to the element to mark as\n * an inner blocks wrapper, automatically rendering inner blocks as children. If\n * you define a ref for the element, it is important to pass the ref to this\n * hook, which the hook in turn will pass to the component through the props it\n * returns. Optionally, you can also pass any other props through this hook, and\n * they will be merged and returned.\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Optional. Inner blocks options.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport function useInnerBlocksProps( props = {}, options = {} ) {\n\tconst {\n\t\t__unstableDisableLayoutClassNames,\n\t\t__unstableDisableDropZone,\n\t\tdropZoneElement,\n\t} = options;\n\tconst {\n\t\tclientId,\n\t\tlayout = null,\n\t\t__unstableLayoutClassNames: layoutClassNames = '',\n\t} = useBlockEditContext();\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockSettings,\n\t\t\t\tisDragging,\n\t\t\t\tgetSectionRootClientId,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tlet _isDropZoneDisabled;\n\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn { isDropZoneDisabled: _isDropZoneDisabled };\n\t\t\t}\n\n\t\t\tconst { hasBlockSupport, getBlockType } = select( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst enableClickThrough =\n\t\t\t\t__unstableGetEditorMode() === 'navigation';\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\t\t\tconst parentClientId = getBlockRootClientId( clientId );\n\t\t\tconst [ defaultLayout ] = getBlockSettings( clientId, 'layout' );\n\n\t\t\t_isDropZoneDisabled = blockEditingMode === 'disabled';\n\n\t\t\tif ( __unstableGetEditorMode() === 'zoom-out' ) {\n\t\t\t\t// In zoom out mode, we want to disable the drop zone for the sections.\n\t\t\t\t// The inner blocks belonging to the section drop zone is\n\t\t\t\t// already disabled by the blocks themselves being disabled.\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\n\t\t\t\t_isDropZoneDisabled = clientId !== sectionRootClientId;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t__experimentalCaptureToolbars: hasBlockSupport(\n\t\t\t\t\tblockName,\n\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\thasOverlay:\n\t\t\t\t\tblockName !== 'core/template' &&\n\t\t\t\t\t! isBlockSelected( clientId ) &&\n\t\t\t\t\t! hasSelectedInnerBlock( clientId, true ) &&\n\t\t\t\t\tenableClickThrough &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tname: blockName,\n\t\t\t\tblockType: getBlockType( blockName ),\n\t\t\t\tparentLock: getTemplateLock( parentClientId ),\n\t\t\t\tparentClientId,\n\t\t\t\tisDropZoneDisabled: _isDropZoneDisabled,\n\t\t\t\tdefaultLayout,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst {\n\t\t__experimentalCaptureToolbars,\n\t\thasOverlay,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tparentClientId,\n\t\tisDropZoneDisabled,\n\t\tdefaultLayout,\n\t} = selected;\n\n\tconst blockDropZoneRef = useBlockDropZone( {\n\t\tdropZoneElement,\n\t\trootClientId: clientId,\n\t\tparentClientId,\n\t} );\n\n\tconst ref = useMergeRefs( [\n\t\tprops.ref,\n\t\t__unstableDisableDropZone ||\n\t\tisDropZoneDisabled ||\n\t\t( layout?.isManualPlacement &&\n\t\t\twindow.__experimentalEnableGridInteractivity )\n\t\t\t? null\n\t\t\t: blockDropZoneRef,\n\t] );\n\n\tconst innerBlocksProps = {\n\t\t__experimentalCaptureToolbars,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t\t...options,\n\t};\n\tconst InnerBlocks =\n\t\tinnerBlocksProps.value && innerBlocksProps.onChange\n\t\t\t? ControlledInnerBlocks\n\t\t\t: UncontrolledInnerBlocks;\n\n\treturn {\n\t\t...props,\n\t\tref,\n\t\tclassName: clsx(\n\t\t\tprops.className,\n\t\t\t'block-editor-block-list__layout',\n\t\t\t__unstableDisableLayoutClassNames ? '' : layoutClassNames,\n\t\t\t{\n\t\t\t\t'has-overlay': hasOverlay,\n\t\t\t}\n\t\t),\n\t\tchildren: clientId ? (\n\t\t\t\n\t\t) : (\n\t\t\t\n\t\t),\n\t};\n}\n\nuseInnerBlocksProps.save = getInnerBlocksProps;\n\n// Expose default appender placeholders as components.\nForwardedInnerBlocks.DefaultBlockAppender = DefaultBlockAppender;\nForwardedInnerBlocks.ButtonBlockAppender = ButtonBlockAppender;\n\nForwardedInnerBlocks.Content = () => useInnerBlocksProps.save().children;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport default ForwardedInnerBlocks;\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns a context object for a given block.\n *\n * @param {string} clientId The block client ID.\n *\n * @return {Record} Context value.\n */\nexport default function useBlockContext( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst block = select( blockEditorStore ).getBlock( clientId );\n\t\t\tif ( ! block ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst blockType = select( blocksStore ).getBlockType( block.name );\n\t\t\tif ( ! blockType ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif ( Object.keys( blockType.providesContext ).length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( blockType.providesContext ).map(\n\t\t\t\t\t( [ contextName, attributeName ] ) => [\n\t\t\t\t\t\tcontextName,\n\t\t\t\t\t\tblock.attributes[ attributeName ],\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useRef, useLayoutEffect } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { synchronizeBlocksWithTemplate } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * This hook makes sure that a block's inner blocks stay in sync with the given\n * block \"template\". The template is a block hierarchy to which inner blocks must\n * conform. If the blocks get \"out of sync\" with the template and the template\n * is meant to be locked (e.g. templateLock = \"all\" or templateLock = \"contentOnly\"),\n * then we replace the inner blocks with the correct value after synchronizing it with the template.\n *\n * @param {string} clientId The block client ID.\n * @param {Object} template The template to match.\n * @param {string} templateLock The template lock state for the inner blocks. For\n * example, if the template lock is set to \"all\",\n * then the inner blocks will stay in sync with the\n * template. If not defined or set to false, then\n * the inner blocks will not be synchronized with\n * the given template.\n * @param {boolean} templateInsertUpdatesSelection Whether or not to update the\n * block-editor selection state when inner blocks\n * are replaced after template synchronization.\n */\nexport default function useInnerBlockTemplateSync(\n\tclientId,\n\ttemplate,\n\ttemplateLock,\n\ttemplateInsertUpdatesSelection\n) {\n\t// Instead of adding a useSelect mapping here, please add to the useSelect\n\t// mapping in InnerBlocks! Every subscription impacts performance.\n\n\tconst {\n\t\tgetBlocks,\n\t\tgetSelectedBlocksInitialCaretPosition,\n\t\tisBlockSelected,\n\t} = useSelect( blockEditorStore );\n\tconst { replaceInnerBlocks, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Maintain a reference to the previous value so we can do a deep equality check.\n\tconst existingTemplateRef = useRef( null );\n\n\tuseLayoutEffect( () => {\n\t\tlet isCancelled = false;\n\n\t\t// There's an implicit dependency between useInnerBlockTemplateSync and useNestedSettingsUpdate\n\t\t// The former needs to happen after the latter and since the latter is using microtasks to batch updates (performance optimization),\n\t\t// we need to schedule this one in a microtask as well.\n\t\t// Example: If you remove queueMicrotask here, ctrl + click to insert quote block won't close the inserter.\n\t\twindow.queueMicrotask( () => {\n\t\t\tif ( isCancelled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only synchronize innerBlocks with template if innerBlocks are empty\n\t\t\t// or a locking \"all\" or \"contentOnly\" exists directly on the block.\n\t\t\tconst currentInnerBlocks = getBlocks( clientId );\n\t\t\tconst shouldApplyTemplate =\n\t\t\t\tcurrentInnerBlocks.length === 0 ||\n\t\t\t\ttemplateLock === 'all' ||\n\t\t\t\ttemplateLock === 'contentOnly';\n\n\t\t\tconst hasTemplateChanged = ! fastDeepEqual(\n\t\t\t\ttemplate,\n\t\t\t\texistingTemplateRef.current\n\t\t\t);\n\n\t\t\tif ( ! shouldApplyTemplate || ! hasTemplateChanged ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\texistingTemplateRef.current = template;\n\t\t\tconst nextBlocks = synchronizeBlocksWithTemplate(\n\t\t\t\tcurrentInnerBlocks,\n\t\t\t\ttemplate\n\t\t\t);\n\n\t\t\tif ( ! fastDeepEqual( nextBlocks, currentInnerBlocks ) ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\treplaceInnerBlocks(\n\t\t\t\t\tclientId,\n\t\t\t\t\tnextBlocks,\n\t\t\t\t\tcurrentInnerBlocks.length === 0 &&\n\t\t\t\t\t\ttemplateInsertUpdatesSelection &&\n\t\t\t\t\t\tnextBlocks.length !== 0 &&\n\t\t\t\t\t\tisBlockSelected( clientId ),\n\t\t\t\t\t// This ensures the \"initialPosition\" doesn't change when applying the template\n\t\t\t\t\t// If we're supposed to focus the block, we'll focus the first inner block\n\t\t\t\t\t// otherwise, we won't apply any auto-focus.\n\t\t\t\t\t// This ensures for instance that the focus stays in the inserter when inserting the \"buttons\" block.\n\t\t\t\t\tgetSelectedBlocksInitialCaretPosition()\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn () => {\n\t\t\tisCancelled = true;\n\t\t};\n\t}, [ template, templateLock, clientId ] );\n}\n","/**\n * Internal dependencies\n */\nimport BaseDefaultBlockAppender from '../default-block-appender';\nimport { useBlockEditContext } from '../block-edit/context';\n\nexport default function DefaultBlockAppender() {\n\tconst { clientId } = useBlockEditContext();\n\treturn ;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Internal dependencies\n */\nimport BaseButtonBlockAppender from '../button-block-appender';\nimport { useBlockEditContext } from '../block-edit/context';\n\nexport default function ButtonBlockAppender( {\n\tshowSeparator,\n\tisFloating,\n\tonAddBlock,\n\tisToggle,\n} ) {\n\tconst { clientId } = useBlockEditContext();\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { isTextField } from '@wordpress/dom';\nimport {\n\tUP,\n\tRIGHT,\n\tDOWN,\n\tLEFT,\n\tENTER,\n\tBACKSPACE,\n\tESCAPE,\n\tTAB,\n} from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Set of key codes upon which typing is to be initiated on a keydown event.\n *\n * @type {Set}\n */\nconst KEY_DOWN_ELIGIBLE_KEY_CODES = new Set( [\n\tUP,\n\tRIGHT,\n\tDOWN,\n\tLEFT,\n\tENTER,\n\tBACKSPACE,\n] );\n\n/**\n * Returns true if a given keydown event can be inferred as intent to start\n * typing, or false otherwise. A keydown is considered eligible if it is a\n * text navigation without shift active.\n *\n * @param {KeyboardEvent} event Keydown event to test.\n *\n * @return {boolean} Whether event is eligible to start typing.\n */\nfunction isKeyDownEligibleForStartTyping( event ) {\n\tconst { keyCode, shiftKey } = event;\n\treturn ! shiftKey && KEY_DOWN_ELIGIBLE_KEY_CODES.has( keyCode );\n}\n\n/**\n * Removes the `isTyping` flag when the mouse moves in the document of the given\n * element.\n */\nexport function useMouseMoveTypingReset() {\n\tconst isTyping = useSelect(\n\t\t( select ) => select( blockEditorStore ).isTyping(),\n\t\t[]\n\t);\n\tconst { stopTyping } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isTyping ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { ownerDocument } = node;\n\t\t\tlet lastClientX;\n\t\t\tlet lastClientY;\n\n\t\t\t/**\n\t\t\t * On mouse move, unset typing flag if user has moved cursor.\n\t\t\t *\n\t\t\t * @param {MouseEvent} event Mousemove event.\n\t\t\t */\n\t\t\tfunction stopTypingOnMouseMove( event ) {\n\t\t\t\tconst { clientX, clientY } = event;\n\n\t\t\t\t// We need to check that the mouse really moved because Safari\n\t\t\t\t// triggers mousemove events when shift or ctrl are pressed.\n\t\t\t\tif (\n\t\t\t\t\tlastClientX &&\n\t\t\t\t\tlastClientY &&\n\t\t\t\t\t( lastClientX !== clientX || lastClientY !== clientY )\n\t\t\t\t) {\n\t\t\t\t\tstopTyping();\n\t\t\t\t}\n\n\t\t\t\tlastClientX = clientX;\n\t\t\t\tlastClientY = clientY;\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'mousemove',\n\t\t\t\tstopTypingOnMouseMove\n\t\t\t);\n\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tstopTypingOnMouseMove\n\t\t\t\t);\n\t\t\t};\n\t\t},\n\t\t[ isTyping, stopTyping ]\n\t);\n}\n\n/**\n * Sets and removes the `isTyping` flag based on user actions:\n *\n * - Sets the flag if the user types within the given element.\n * - Removes the flag when the user selects some text, focusses a non-text\n * field, presses ESC or TAB, or moves the mouse in the document.\n */\nexport function useTypingObserver() {\n\tconst { isTyping } = useSelect( ( select ) => {\n\t\tconst { isTyping: _isTyping } = select( blockEditorStore );\n\t\treturn {\n\t\t\tisTyping: _isTyping(),\n\t\t};\n\t}, [] );\n\tconst { startTyping, stopTyping } = useDispatch( blockEditorStore );\n\n\tconst ref1 = useMouseMoveTypingReset();\n\tconst ref2 = useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t// Listeners to stop typing should only be added when typing.\n\t\t\t// Listeners to start typing should only be added when not typing.\n\t\t\tif ( isTyping ) {\n\t\t\t\tlet timerId;\n\n\t\t\t\t/**\n\t\t\t\t * Stops typing when focus transitions to a non-text field element.\n\t\t\t\t *\n\t\t\t\t * @param {FocusEvent} event Focus event.\n\t\t\t\t */\n\t\t\t\tfunction stopTypingOnNonTextField( event ) {\n\t\t\t\t\tconst { target } = event;\n\n\t\t\t\t\t// Since focus to a non-text field via arrow key will trigger\n\t\t\t\t\t// before the keydown event, wait until after current stack\n\t\t\t\t\t// before evaluating whether typing is to be stopped. Otherwise,\n\t\t\t\t\t// typing will re-start.\n\t\t\t\t\ttimerId = defaultView.setTimeout( () => {\n\t\t\t\t\t\tif ( ! isTextField( target ) ) {\n\t\t\t\t\t\t\tstopTyping();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Unsets typing flag if user presses Escape while typing flag is\n\t\t\t\t * active.\n\t\t\t\t *\n\t\t\t\t * @param {KeyboardEvent} event Keypress or keydown event to\n\t\t\t\t * interpret.\n\t\t\t\t */\n\t\t\t\tfunction stopTypingOnEscapeKey( event ) {\n\t\t\t\t\tconst { keyCode } = event;\n\n\t\t\t\t\tif ( keyCode === ESCAPE || keyCode === TAB ) {\n\t\t\t\t\t\tstopTyping();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * On selection change, unset typing flag if user has made an\n\t\t\t\t * uncollapsed (shift) selection.\n\t\t\t\t */\n\t\t\t\tfunction stopTypingOnSelectionUncollapse() {\n\t\t\t\t\tif ( ! selection.isCollapsed ) {\n\t\t\t\t\t\tstopTyping();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnode.addEventListener( 'focus', stopTypingOnNonTextField );\n\t\t\t\tnode.addEventListener( 'keydown', stopTypingOnEscapeKey );\n\n\t\t\t\townerDocument.addEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tstopTypingOnSelectionUncollapse\n\t\t\t\t);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tdefaultView.clearTimeout( timerId );\n\t\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t\t'focus',\n\t\t\t\t\t\tstopTypingOnNonTextField\n\t\t\t\t\t);\n\t\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t\t'keydown',\n\t\t\t\t\t\tstopTypingOnEscapeKey\n\t\t\t\t\t);\n\t\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t\t'selectionchange',\n\t\t\t\t\t\tstopTypingOnSelectionUncollapse\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Handles a keypress or keydown event to infer intention to start\n\t\t\t * typing.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keypress or keydown event to interpret.\n\t\t\t */\n\t\t\tfunction startTypingInTextField( event ) {\n\t\t\t\tconst { type, target } = event;\n\n\t\t\t\t// Abort early if already typing, or key press is incurred outside a\n\t\t\t\t// text field (e.g. arrow-ing through toolbar buttons).\n\t\t\t\t// Ignore typing if outside the current DOM container\n\t\t\t\tif ( ! isTextField( target ) || ! node.contains( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Special-case keydown because certain keys do not emit a keypress\n\t\t\t\t// event. Conversely avoid keydown as the canonical event since\n\t\t\t\t// there are many keydown which are explicitly not targeted for\n\t\t\t\t// typing.\n\t\t\t\tif (\n\t\t\t\t\ttype === 'keydown' &&\n\t\t\t\t\t! isKeyDownEligibleForStartTyping( event )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tstartTyping();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keypress', startTypingInTextField );\n\t\t\tnode.addEventListener( 'keydown', startTypingInTextField );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keypress', startTypingInTextField );\n\t\t\t\tnode.removeEventListener( 'keydown', startTypingInTextField );\n\t\t\t};\n\t\t},\n\t\t[ isTyping, startTyping, stopTyping ]\n\t);\n\n\treturn useMergeRefs( [ ref1, ref2 ] );\n}\n\nfunction ObserveTyping( { children } ) {\n\treturn
{ children }
;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/observe-typing/README.md\n */\nexport default ObserveTyping;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function ZoomOutSeparator( {\n\tclientId,\n\trootClientId = '',\n\tposition = 'top',\n} ) {\n\tconst [ isDraggedOver, setIsDraggedOver ] = useState( false );\n\tconst {\n\t\tsectionRootClientId,\n\t\tsectionClientIds,\n\t\tblockInsertionPoint,\n\t\tblockInsertionPointVisible,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockInsertionPoint,\n\t\t\tgetBlockOrder,\n\t\t\tisBlockInsertionPointVisible,\n\t\t\tgetSectionRootClientId,\n\t\t} = unlock( select( blockEditorStore ) );\n\n\t\tconst root = getSectionRootClientId();\n\t\tconst sectionRootClientIds = getBlockOrder( root );\n\t\treturn {\n\t\t\tsectionRootClientId: root,\n\t\t\tsectionClientIds: sectionRootClientIds,\n\t\t\tblockOrder: getBlockOrder( root ),\n\t\t\tblockInsertionPoint: getBlockInsertionPoint(),\n\t\t\tblockInsertionPointVisible: isBlockInsertionPointVisible(),\n\t\t};\n\t}, [] );\n\n\tconst isReducedMotion = useReducedMotion();\n\n\tif ( ! clientId ) {\n\t\treturn;\n\t}\n\n\tlet isVisible = false;\n\n\tconst isSectionBlock =\n\t\trootClientId === sectionRootClientId &&\n\t\tsectionClientIds &&\n\t\tsectionClientIds.includes( clientId );\n\n\tif ( ! isSectionBlock ) {\n\t\treturn null;\n\t}\n\n\tif ( position === 'top' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tblockInsertionPoint.index === 0 &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index ];\n\t}\n\n\tif ( position === 'bottom' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index - 1 ];\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ isVisible && (\n\t\t\t\t setIsDraggedOver( true ) }\n\t\t\t\t\tonDragLeave={ () => setIsDraggedOver( false ) }\n\t\t\t\t>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tAsyncModeProvider,\n\tuseSelect,\n\tuseDispatch,\n\tuseRegistry,\n} from '@wordpress/data';\nimport {\n\tuseViewportMatch,\n\tuseMergeRefs,\n\tuseDebounce,\n} from '@wordpress/compose';\nimport {\n\tcreateContext,\n\tuseMemo,\n\tuseCallback,\n\tuseEffect,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockListBlock from './block';\nimport BlockListAppender from '../block-list-appender';\nimport { useInBetweenInserter } from './use-in-between-inserter';\nimport { store as blockEditorStore } from '../../store';\nimport { LayoutProvider, defaultLayout } from './layout';\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useInnerBlocksProps } from '../inner-blocks';\nimport {\n\tBlockEditContextProvider,\n\tDEFAULT_BLOCK_EDIT_CONTEXT,\n} from '../block-edit/context';\nimport { useTypingObserver } from '../observe-typing';\nimport { ZoomOutSeparator } from './zoom-out-separator';\nimport { unlock } from '../../lock-unlock';\n\nexport const IntersectionObserver = createContext();\nconst pendingBlockVisibilityUpdatesPerRegistry = new WeakMap();\n\nfunction Root( { className, ...settings } ) {\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst {\n\t\tisOutlineMode,\n\t\tisFocusMode,\n\t\teditorMode,\n\t\ttemporarilyEditingAsBlocks,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSettings,\n\t\t\t__unstableGetEditorMode,\n\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\tisTyping,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst { outlineMode, focusMode } = getSettings();\n\t\treturn {\n\t\t\tisOutlineMode: outlineMode && ! isTyping(),\n\t\t\tisFocusMode: focusMode,\n\t\t\teditorMode: __unstableGetEditorMode(),\n\t\t\ttemporarilyEditingAsBlocks: getTemporarilyEditingAsBlocks(),\n\t\t};\n\t}, [] );\n\tconst registry = useRegistry();\n\tconst { setBlockVisibility } = useDispatch( blockEditorStore );\n\n\tconst delayedBlockVisibilityUpdates = useDebounce(\n\t\tuseCallback( () => {\n\t\t\tconst updates = {};\n\t\t\tpendingBlockVisibilityUpdatesPerRegistry\n\t\t\t\t.get( registry )\n\t\t\t\t.forEach( ( [ id, isIntersecting ] ) => {\n\t\t\t\t\tupdates[ id ] = isIntersecting;\n\t\t\t\t} );\n\t\t\tsetBlockVisibility( updates );\n\t\t}, [ registry ] ),\n\t\t300,\n\t\t{\n\t\t\ttrailing: true,\n\t\t}\n\t);\n\tconst intersectionObserver = useMemo( () => {\n\t\tconst { IntersectionObserver: Observer } = window;\n\n\t\tif ( ! Observer ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn new Observer( ( entries ) => {\n\t\t\tif ( ! pendingBlockVisibilityUpdatesPerRegistry.get( registry ) ) {\n\t\t\t\tpendingBlockVisibilityUpdatesPerRegistry.set( registry, [] );\n\t\t\t}\n\t\t\tfor ( const entry of entries ) {\n\t\t\t\tconst clientId = entry.target.getAttribute( 'data-block' );\n\t\t\t\tpendingBlockVisibilityUpdatesPerRegistry\n\t\t\t\t\t.get( registry )\n\t\t\t\t\t.push( [ clientId, entry.isIntersecting ] );\n\t\t\t}\n\t\t\tdelayedBlockVisibilityUpdates();\n\t\t} );\n\t}, [] );\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\t{\n\t\t\tref: useMergeRefs( [\n\t\t\t\tuseBlockSelectionClearer(),\n\t\t\t\tuseInBetweenInserter(),\n\t\t\t\tuseTypingObserver(),\n\t\t\t] ),\n\t\t\tclassName: clsx( 'is-root-container', className, {\n\t\t\t\t'is-outline-mode': isOutlineMode,\n\t\t\t\t'is-focus-mode': isFocusMode && isLargeViewport,\n\t\t\t\t'is-navigate-mode': editorMode === 'navigation',\n\t\t\t} ),\n\t\t},\n\t\tsettings\n\t);\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t{ !! temporarilyEditingAsBlocks && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction StopEditingAsBlocksOnOutsideSelect( { clientId } ) {\n\tconst { stopEditingAsBlocks } = unlock( useDispatch( blockEditorStore ) );\n\tconst isBlockOrDescendantSelected = useSelect(\n\t\t( select ) => {\n\t\t\tconst { isBlockSelected, hasSelectedInnerBlock } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn (\n\t\t\t\tisBlockSelected( clientId ) ||\n\t\t\t\thasSelectedInnerBlock( clientId, true )\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n\tuseEffect( () => {\n\t\tif ( ! isBlockOrDescendantSelected ) {\n\t\t\tstopEditingAsBlocks( clientId );\n\t\t}\n\t}, [ isBlockOrDescendantSelected, clientId, stopEditingAsBlocks ] );\n\treturn null;\n}\n\nexport default function BlockList( settings ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nconst EMPTY_ARRAY = [];\nconst EMPTY_SET = new Set();\n\nfunction Items( {\n\tplaceholder,\n\trootClientId,\n\trenderAppender: CustomAppender,\n\t__experimentalAppenderTagName,\n\tlayout = defaultLayout,\n} ) {\n\t// Avoid passing CustomAppender to useSelect because it could be a new\n\t// function on every render.\n\tconst hasAppender = CustomAppender !== false;\n\tconst hasCustomAppender = !! CustomAppender;\n\tconst {\n\t\torder,\n\t\tisZoomOut,\n\t\tselectedBlocks,\n\t\tvisibleBlocks,\n\t\tshouldRenderAppender,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetSettings,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\t__unstableGetVisibleBlocks,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst _order = getBlockOrder( rootClientId );\n\n\t\t\tif ( getSettings().__unstableIsPreviewMode ) {\n\t\t\t\treturn {\n\t\t\t\t\torder: _order,\n\t\t\t\t\tselectedBlocks: EMPTY_ARRAY,\n\t\t\t\t\tvisibleBlocks: EMPTY_SET,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\t\treturn {\n\t\t\t\torder: _order,\n\t\t\t\tselectedBlocks: getSelectedBlockClientIds(),\n\t\t\t\tvisibleBlocks: __unstableGetVisibleBlocks(),\n\t\t\t\tisZoomOut: __unstableGetEditorMode() === 'zoom-out',\n\t\t\t\tshouldRenderAppender:\n\t\t\t\t\thasAppender &&\n\t\t\t\t\t__unstableGetEditorMode() !== 'zoom-out' &&\n\t\t\t\t\t( hasCustomAppender\n\t\t\t\t\t\t? ! getTemplateLock( rootClientId ) &&\n\t\t\t\t\t\t getBlockEditingMode( rootClientId ) !== 'disabled'\n\t\t\t\t\t\t: rootClientId === selectedBlockClientId ||\n\t\t\t\t\t\t ( ! rootClientId &&\n\t\t\t\t\t\t\t\t! selectedBlockClientId &&\n\t\t\t\t\t\t\t\t! _order.length ) ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId, hasAppender, hasCustomAppender ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ order.map( ( clientId ) => (\n\t\t\t\t\n\t\t\t\t\t{ isZoomOut && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t{ isZoomOut && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\t{ order.length < 1 && placeholder }\n\t\t\t{ shouldRenderAppender && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport function BlockListItems( props ) {\n\t// This component needs to always be synchronous as it's the one changing\n\t// the async mode depending on the block selection.\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction selector( select ) {\n\tconst {\n\t\tisMultiSelecting,\n\t\tgetMultiSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSelectedBlockClientId,\n\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t__unstableIsFullySelected,\n\t} = select( blockEditorStore );\n\n\treturn {\n\t\tisMultiSelecting: isMultiSelecting(),\n\t\tmultiSelectedBlockClientIds: getMultiSelectedBlockClientIds(),\n\t\thasMultiSelection: hasMultiSelection(),\n\t\tselectedBlockClientId: getSelectedBlockClientId(),\n\t\tinitialPosition: getSelectedBlocksInitialCaretPosition(),\n\t\tisFullSelection: __unstableIsFullySelected(),\n\t};\n}\n\nexport default function useMultiSelection() {\n\tconst {\n\t\tinitialPosition,\n\t\tisMultiSelecting,\n\t\tmultiSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tselectedBlockClientId,\n\t\tisFullSelection,\n\t} = useSelect( selector, [] );\n\n\t/**\n\t * When the component updates, and there is multi selection, we need to\n\t * select the entire block contents.\n\t */\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\t// Allow initialPosition to bypass focus behavior. This is useful\n\t\t\t// for the list view or other areas where we don't want to transfer\n\t\t\t// focus to the editor canvas.\n\t\t\tif ( initialPosition === undefined || initialPosition === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! hasMultiSelection || isMultiSelecting ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { length } = multiSelectedBlockClientIds;\n\n\t\t\tif ( length < 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! isFullSelection ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow cross contentEditable selection by temporarily making\n\t\t\t// all content editable. We can't rely on using the store and\n\t\t\t// React because re-rending happens too slowly. We need to be\n\t\t\t// able to select across instances immediately.\n\t\t\tnode.contentEditable = true;\n\n\t\t\t// For some browsers, like Safari, it is important that focus\n\t\t\t// happens BEFORE selection removal.\n\t\t\tnode.focus();\n\n\t\t\tdefaultView.getSelection().removeAllRanges();\n\t\t},\n\t\t[\n\t\t\thasMultiSelection,\n\t\t\tisMultiSelecting,\n\t\t\tmultiSelectedBlockClientIds,\n\t\t\tselectedBlockClientId,\n\t\t\tinitialPosition,\n\t\t\tisFullSelection,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tcomputeCaretRect,\n\tfocus,\n\tisHorizontalEdge,\n\tisVerticalEdge,\n\tplaceCaretAtHorizontalEdge,\n\tplaceCaretAtVerticalEdge,\n\tisRTL,\n} from '@wordpress/dom';\nimport { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getBlockClientId, isInSameBlock } from '../../utils/dom';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns true if the element should consider edge navigation upon a keyboard\n * event of the given directional key code, or false otherwise.\n *\n * @param {Element} element HTML element to test.\n * @param {number} keyCode KeyboardEvent keyCode to test.\n * @param {boolean} hasModifier Whether a modifier is pressed.\n *\n * @return {boolean} Whether element should consider edge navigation.\n */\nexport function isNavigationCandidate( element, keyCode, hasModifier ) {\n\tconst isVertical = keyCode === UP || keyCode === DOWN;\n\tconst { tagName } = element;\n\tconst elementType = element.getAttribute( 'type' );\n\n\t// Native inputs should not navigate vertically, unless they are simple types that don't need up/down arrow keys.\n\tif ( isVertical && ! hasModifier ) {\n\t\tif ( tagName === 'INPUT' ) {\n\t\t\tconst verticalInputTypes = [\n\t\t\t\t'date',\n\t\t\t\t'datetime-local',\n\t\t\t\t'month',\n\t\t\t\t'number',\n\t\t\t\t'range',\n\t\t\t\t'time',\n\t\t\t\t'week',\n\t\t\t];\n\t\t\treturn ! verticalInputTypes.includes( elementType );\n\t\t}\n\t\treturn true;\n\t}\n\n\t// Native inputs should not navigate horizontally, unless they are simple types that don't need left/right arrow keys.\n\tif ( tagName === 'INPUT' ) {\n\t\tconst simpleInputTypes = [\n\t\t\t'button',\n\t\t\t'checkbox',\n\t\t\t'number',\n\t\t\t'color',\n\t\t\t'file',\n\t\t\t'image',\n\t\t\t'radio',\n\t\t\t'reset',\n\t\t\t'submit',\n\t\t];\n\t\treturn simpleInputTypes.includes( elementType );\n\t}\n\n\t// Native textareas should not navigate horizontally.\n\treturn tagName !== 'TEXTAREA';\n}\n\n/**\n * Returns the optimal tab target from the given focused element in the desired\n * direction. A preference is made toward text fields, falling back to the block\n * focus stop if no other candidates exist for the block.\n *\n * @param {Element} target Currently focused text field.\n * @param {boolean} isReverse True if considering as the first field.\n * @param {Element} containerElement Element containing all blocks.\n * @param {boolean} onlyVertical Whether to only consider tabbable elements\n * that are visually above or under the\n * target.\n *\n * @return {?Element} Optimal tab target, if one exists.\n */\nexport function getClosestTabbable(\n\ttarget,\n\tisReverse,\n\tcontainerElement,\n\tonlyVertical\n) {\n\t// Since the current focus target is not guaranteed to be a text field, find\n\t// all focusables. Tabbability is considered later.\n\tlet focusableNodes = focus.focusable.find( containerElement );\n\n\tif ( isReverse ) {\n\t\tfocusableNodes.reverse();\n\t}\n\n\t// Consider as candidates those focusables after the current target. It's\n\t// assumed this can only be reached if the target is focusable (on its\n\t// keydown event), so no need to verify it exists in the set.\n\tfocusableNodes = focusableNodes.slice(\n\t\tfocusableNodes.indexOf( target ) + 1\n\t);\n\n\tlet targetRect;\n\n\tif ( onlyVertical ) {\n\t\ttargetRect = target.getBoundingClientRect();\n\t}\n\n\tfunction isTabCandidate( node ) {\n\t\tif ( node.closest( '[inert]' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if there's only one child that is content editable (and thus a\n\t\t// better candidate).\n\t\tif (\n\t\t\tnode.children.length === 1 &&\n\t\t\tisInSameBlock( node, node.firstElementChild ) &&\n\t\t\tnode.firstElementChild.getAttribute( 'contenteditable' ) === 'true'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Not a candidate if the node is not tabbable.\n\t\tif ( ! focus.tabbable.isTabbableIndex( node ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Skip focusable elements such as links within content editable nodes.\n\t\tif ( node.isContentEditable && node.contentEditable !== 'true' ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( onlyVertical ) {\n\t\t\tconst nodeRect = node.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tnodeRect.left >= targetRect.right ||\n\t\t\t\tnodeRect.right <= targetRect.left\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn focusableNodes.find( isTabCandidate );\n}\n\nexport default function useArrowNav() {\n\tconst {\n\t\tgetMultiSelectedBlocksStartClientId,\n\t\tgetMultiSelectedBlocksEndClientId,\n\t\tgetSettings,\n\t\thasMultiSelection,\n\t\t__unstableIsFullySelected,\n\t} = useSelect( blockEditorStore );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\treturn useRefEffect( ( node ) => {\n\t\t// Here a DOMRect is stored while moving the caret vertically so\n\t\t// vertical position of the start position can be restored. This is to\n\t\t// recreate browser behaviour across blocks.\n\t\tlet verticalRect;\n\n\t\tfunction onMouseDown() {\n\t\t\tverticalRect = null;\n\t\t}\n\n\t\tfunction isClosestTabbableABlock( target, isReverse ) {\n\t\t\tconst closestTabbable = getClosestTabbable(\n\t\t\t\ttarget,\n\t\t\t\tisReverse,\n\t\t\t\tnode\n\t\t\t);\n\t\t\treturn closestTabbable && getBlockClientId( closestTabbable );\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\t\t\t// Abort if navigation has already been handled (e.g. RichText\n\t\t\t// inline boundaries).\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { keyCode, target, shiftKey, ctrlKey, altKey, metaKey } =\n\t\t\t\tevent;\n\t\t\tconst isUp = keyCode === UP;\n\t\t\tconst isDown = keyCode === DOWN;\n\t\t\tconst isLeft = keyCode === LEFT;\n\t\t\tconst isRight = keyCode === RIGHT;\n\t\t\tconst isReverse = isUp || isLeft;\n\t\t\tconst isHorizontal = isLeft || isRight;\n\t\t\tconst isVertical = isUp || isDown;\n\t\t\tconst isNav = isHorizontal || isVertical;\n\t\t\tconst hasModifier = shiftKey || ctrlKey || altKey || metaKey;\n\t\t\tconst isNavEdge = isVertical ? isVerticalEdge : isHorizontalEdge;\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tif ( ! isNav ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there is a multi-selection, the arrow keys should collapse the\n\t\t\t// selection to the start or end of the selection.\n\t\t\tif ( hasMultiSelection() ) {\n\t\t\t\tif ( shiftKey ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only handle if we have a full selection (not a native partial\n\t\t\t\t// selection).\n\t\t\t\tif ( ! __unstableIsFullySelected() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( isReverse ) {\n\t\t\t\t\tselectBlock( getMultiSelectedBlocksStartClientId() );\n\t\t\t\t} else {\n\t\t\t\t\tselectBlock( getMultiSelectedBlocksEndClientId(), -1 );\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Abort if our current target is not a candidate for navigation\n\t\t\t// (e.g. preserve native input behaviors).\n\t\t\tif ( ! isNavigationCandidate( target, keyCode, hasModifier ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// When presing any key other than up or down, the initial vertical\n\t\t\t// position must ALWAYS be reset. The vertical position is saved so\n\t\t\t// it can be restored as well as possible on sebsequent vertical\n\t\t\t// arrow key presses. It may not always be possible to restore the\n\t\t\t// exact same position (such as at an empty line), so it wouldn't be\n\t\t\t// good to compute the position right before any vertical arrow key\n\t\t\t// press.\n\t\t\tif ( ! isVertical ) {\n\t\t\t\tverticalRect = null;\n\t\t\t} else if ( ! verticalRect ) {\n\t\t\t\tverticalRect = computeCaretRect( defaultView );\n\t\t\t}\n\n\t\t\t// In the case of RTL scripts, right means previous and left means\n\t\t\t// next, which is the exact reverse of LTR.\n\t\t\tconst isReverseDir = isRTL( target ) ? ! isReverse : isReverse;\n\t\t\tconst { keepCaretInsideBlock } = getSettings();\n\n\t\t\tif ( shiftKey ) {\n\t\t\t\tif (\n\t\t\t\t\tisClosestTabbableABlock( target, isReverse ) &&\n\t\t\t\t\tisNavEdge( target, isReverse )\n\t\t\t\t) {\n\t\t\t\t\tnode.contentEditable = true;\n\t\t\t\t\t// Firefox doesn't automatically move focus.\n\t\t\t\t\tnode.focus();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tisVertical &&\n\t\t\t\tisVerticalEdge( target, isReverse ) &&\n\t\t\t\t// When Alt is pressed, only intercept if the caret is also at\n\t\t\t\t// the horizontal edge.\n\t\t\t\t( altKey ? isHorizontalEdge( target, isReverseDir ) : true ) &&\n\t\t\t\t! keepCaretInsideBlock\n\t\t\t) {\n\t\t\t\tconst closestTabbable = getClosestTabbable(\n\t\t\t\t\ttarget,\n\t\t\t\t\tisReverse,\n\t\t\t\t\tnode,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\tif ( closestTabbable ) {\n\t\t\t\t\tplaceCaretAtVerticalEdge(\n\t\t\t\t\t\tclosestTabbable,\n\t\t\t\t\t\t// When Alt is pressed, place the caret at the furthest\n\t\t\t\t\t\t// horizontal edge and the furthest vertical edge.\n\t\t\t\t\t\taltKey ? ! isReverse : isReverse,\n\t\t\t\t\t\taltKey ? undefined : verticalRect\n\t\t\t\t\t);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tisHorizontal &&\n\t\t\t\tdefaultView.getSelection().isCollapsed &&\n\t\t\t\tisHorizontalEdge( target, isReverseDir ) &&\n\t\t\t\t! keepCaretInsideBlock\n\t\t\t) {\n\t\t\t\tconst closestTabbable = getClosestTabbable(\n\t\t\t\t\ttarget,\n\t\t\t\t\tisReverseDir,\n\t\t\t\t\tnode\n\t\t\t\t);\n\t\t\t\tplaceCaretAtHorizontalEdge( closestTabbable, isReverse );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { isEntirelySelected } from '@wordpress/dom';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useSelectAll() {\n\tconst { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { multiSelect, selectBlock } = useDispatch( blockEditorStore );\n\tconst isMatch = useShortcutEventMatch();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( ! isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedClientIds = getSelectedBlockClientIds();\n\n\t\t\tif (\n\t\t\t\tselectedClientIds.length < 2 &&\n\t\t\t\t! isEntirelySelected( event.target )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconst [ firstSelectedClientId ] = selectedClientIds;\n\t\t\tconst rootClientId = getBlockRootClientId( firstSelectedClientId );\n\t\t\tconst blockClientIds = getBlockOrder( rootClientId );\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a\n\t\t\t// level. See: https://github.com/WordPress/gutenberg/pull/31859/\n\t\t\tif ( selectedClientIds.length === blockClientIds.length ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tnode.ownerDocument.defaultView\n\t\t\t\t\t\t.getSelection()\n\t\t\t\t\t\t.removeAllRanges();\n\t\t\t\t\tselectBlock( rootClientId );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmultiSelect(\n\t\t\t\tblockClientIds[ 0 ],\n\t\t\t\tblockClientIds[ blockClientIds.length - 1 ]\n\t\t\t);\n\t\t}\n\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Sets the `contenteditable` wrapper element to `value`.\n *\n * @param {HTMLElement} node Block element.\n * @param {boolean} value `contentEditable` value (true or false)\n */\nfunction setContentEditableWrapper( node, value ) {\n\tnode.contentEditable = value;\n\t// Firefox doesn't automatically move focus.\n\tif ( value ) {\n\t\tnode.focus();\n\t}\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useDragSelection() {\n\tconst { startMultiSelect, stopMultiSelect } =\n\t\tuseDispatch( blockEditorStore );\n\tconst {\n\t\tisSelectionEnabled,\n\t\thasSelectedBlock,\n\t\tisDraggingBlocks,\n\t\tisMultiSelecting,\n\t} = useSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tlet anchorElement;\n\t\t\tlet rafId;\n\n\t\t\tfunction onMouseUp() {\n\t\t\t\tstopMultiSelect();\n\t\t\t\t// Equivalent to attaching the listener once.\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onMouseUp );\n\t\t\t\t// The browser selection won't have updated yet at this point,\n\t\t\t\t// so wait until the next animation frame to get the browser\n\t\t\t\t// selection.\n\t\t\t\trafId = defaultView.requestAnimationFrame( () => {\n\t\t\t\t\tif ( ! hasSelectedBlock() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the selection is complete (on mouse up), and no\n\t\t\t\t\t// multiple blocks have been selected, set focus back to the\n\t\t\t\t\t// anchor element. if the anchor element contains the\n\t\t\t\t\t// selection. Additionally, the contentEditable wrapper can\n\t\t\t\t\t// now be disabled again.\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\n\t\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst { commonAncestorContainer } = range;\n\t\t\t\t\t\tconst clonedRange = range.cloneRange();\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tanchorElement.contains( commonAncestorContainer )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tanchorElement.focus();\n\t\t\t\t\t\t\tselection.removeAllRanges();\n\t\t\t\t\t\t\tselection.addRange( clonedRange );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfunction onMouseLeave( { buttons, target, relatedTarget } ) {\n\t\t\t\t// If we're moving into a child element, ignore. We're tracking\n\t\t\t\t// the mouse leaving the element to a parent, no a child.\n\t\t\t\tif ( target.contains( relatedTarget ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Avoid triggering a multi-selection if the user is already\n\t\t\t\t// dragging blocks.\n\t\t\t\tif ( isDraggingBlocks() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// The primary button must be pressed to initiate selection.\n\t\t\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n\t\t\t\tif ( buttons !== 1 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Abort if we are already multi-selecting.\n\t\t\t\tif ( isMultiSelecting() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Abort if selection is leaving writing flow.\n\t\t\t\tif ( node === target ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check the attribute, not the contentEditable attribute. All\n\t\t\t\t// child elements of the content editable wrapper are editable\n\t\t\t\t// and return true for this property. We only want to start\n\t\t\t\t// multi selecting when the mouse leaves the wrapper.\n\t\t\t\tif ( target.getAttribute( 'contenteditable' ) !== 'true' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( ! isSelectionEnabled() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Do not rely on the active element because it may change after\n\t\t\t\t// the mouse leaves for the first time. See\n\t\t\t\t// https://github.com/WordPress/gutenberg/issues/48747.\n\t\t\t\tanchorElement = target;\n\n\t\t\t\tstartMultiSelect();\n\n\t\t\t\t// `onSelectionStart` is called after `mousedown` and\n\t\t\t\t// `mouseleave` (from a block). The selection ends when\n\t\t\t\t// `mouseup` happens anywhere in the window.\n\t\t\t\tdefaultView.addEventListener( 'mouseup', onMouseUp );\n\n\t\t\t\t// Allow cross contentEditable selection by temporarily making\n\t\t\t\t// all content editable. We can't rely on using the store and\n\t\t\t\t// React because re-rending happens too slowly. We need to be\n\t\t\t\t// able to select across instances immediately.\n\t\t\t\tsetContentEditableWrapper( node, true );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mouseout', onMouseLeave );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mouseout', onMouseLeave );\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onMouseUp );\n\t\t\t\tdefaultView.cancelAnimationFrame( rafId );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tstartMultiSelect,\n\t\t\tstopMultiSelect,\n\t\t\tisSelectionEnabled,\n\t\t\thasSelectedBlock,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport { create } from '@wordpress/rich-text';\nimport { isSelectionForward } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\n\n/**\n * Extract the selection start node from the selection. When the anchor node is\n * not a text node, the selection offset is the index of a child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionStartNode( selection ) {\n\tconst { anchorNode, anchorOffset } = selection;\n\n\tif ( anchorNode.nodeType === anchorNode.TEXT_NODE ) {\n\t\treturn anchorNode;\n\t}\n\n\tif ( anchorOffset === 0 ) {\n\t\treturn anchorNode;\n\t}\n\n\treturn anchorNode.childNodes[ anchorOffset - 1 ];\n}\n\n/**\n * Extract the selection end node from the selection. When the focus node is not\n * a text node, the selection offset is the index of a child node. The selection\n * reaches up to but excluding that child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionEndNode( selection ) {\n\tconst { focusNode, focusOffset } = selection;\n\n\tif ( focusNode.nodeType === focusNode.TEXT_NODE ) {\n\t\treturn focusNode;\n\t}\n\n\tif ( focusOffset === focusNode.childNodes.length ) {\n\t\treturn focusNode;\n\t}\n\n\t// When the selection is forward (the selection ends with the focus node),\n\t// the selection may extend into the next element with an offset of 0. This\n\t// may trigger multi selection even though the selection does not visually\n\t// end in the next block.\n\tif ( focusOffset === 0 && isSelectionForward( selection ) ) {\n\t\treturn focusNode.previousSibling ?? focusNode.parentElement;\n\t}\n\n\treturn focusNode.childNodes[ focusOffset ];\n}\n\nfunction findDepth( a, b ) {\n\tlet depth = 0;\n\n\twhile ( a[ depth ] === b[ depth ] ) {\n\t\tdepth++;\n\t}\n\n\treturn depth;\n}\n\n/**\n * Sets the `contenteditable` wrapper element to `value`.\n *\n * @param {HTMLElement} node Block element.\n * @param {boolean} value `contentEditable` value (true or false)\n */\nfunction setContentEditableWrapper( node, value ) {\n\t// Since we are calling this on every selection change, check if the value\n\t// needs to be updated first because it trigger the browser to recalculate\n\t// style.\n\tif ( node.contentEditable !== String( value ) ) {\n\t\tnode.contentEditable = value;\n\n\t\t// Firefox doesn't automatically move focus.\n\t\tif ( value ) {\n\t\t\tnode.focus();\n\t\t}\n\t}\n}\n\nfunction getRichTextElement( node ) {\n\tconst element =\n\t\tnode.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n\treturn element?.closest( '[data-wp-block-attribute-key]' );\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useSelectionObserver() {\n\tconst { multiSelect, selectBlock, selectionChange } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { getBlockParents, getBlockSelectionStart, isMultiSelecting } =\n\t\tuseSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tfunction onSelectionChange( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startNode = extractSelectionStartNode( selection );\n\t\t\t\tconst endNode = extractSelectionEndNode( selection );\n\n\t\t\t\tif (\n\t\t\t\t\t! node.contains( startNode ) ||\n\t\t\t\t\t! node.contains( endNode )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If selection is collapsed and we haven't used `shift+click`,\n\t\t\t\t// end multi selection and disable the contentEditable wrapper.\n\t\t\t\t// We have to check about `shift+click` case because elements\n\t\t\t\t// that don't support text selection might be involved, and we might\n\t\t\t\t// update the clientIds to multi-select blocks.\n\t\t\t\t// For now we check if the event is a `mouse` event.\n\t\t\t\tconst isClickShift = event.shiftKey && event.type === 'mouseup';\n\t\t\t\tif ( selection.isCollapsed && ! isClickShift ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.contentEditable === 'true' &&\n\t\t\t\t\t\t! isMultiSelecting()\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\t\tlet element =\n\t\t\t\t\t\t\tstartNode.nodeType === startNode.ELEMENT_NODE\n\t\t\t\t\t\t\t\t? startNode\n\t\t\t\t\t\t\t\t: startNode.parentElement;\n\t\t\t\t\t\telement = element?.closest( '[contenteditable]' );\n\t\t\t\t\t\telement?.focus();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet startClientId = getBlockClientId( startNode );\n\t\t\t\tlet endClientId = getBlockClientId( endNode );\n\n\t\t\t\t// If the selection has changed and we had pressed `shift+click`,\n\t\t\t\t// we need to check if in an element that doesn't support\n\t\t\t\t// text selection has been clicked.\n\t\t\t\tif ( isClickShift ) {\n\t\t\t\t\tconst selectedClientId = getBlockSelectionStart();\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\t// `endClientId` is not defined if we end the selection by clicking a non-selectable block.\n\t\t\t\t\t// We need to check if there was already a selection with a non-selectable focusNode.\n\t\t\t\t\tconst focusNodeIsNonSelectable =\n\t\t\t\t\t\tclickedClientId !== endClientId;\n\t\t\t\t\tif (\n\t\t\t\t\t\t( startClientId === endClientId &&\n\t\t\t\t\t\t\tselection.isCollapsed ) ||\n\t\t\t\t\t\t! endClientId ||\n\t\t\t\t\t\tfocusNodeIsNonSelectable\n\t\t\t\t\t) {\n\t\t\t\t\t\tendClientId = clickedClientId;\n\t\t\t\t\t}\n\t\t\t\t\t// Handle the case when we have a non-selectable block\n\t\t\t\t\t// selected and click another one.\n\t\t\t\t\tif ( startClientId !== selectedClientId ) {\n\t\t\t\t\t\tstartClientId = selectedClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the selection did not involve a block, return.\n\t\t\t\tif (\n\t\t\t\t\tstartClientId === undefined &&\n\t\t\t\t\tendClientId === undefined\n\t\t\t\t) {\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst isSingularSelection = startClientId === endClientId;\n\t\t\t\tif ( isSingularSelection ) {\n\t\t\t\t\tif ( ! isMultiSelecting() ) {\n\t\t\t\t\t\tselectBlock( startClientId );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, startClientId );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst startPath = [\n\t\t\t\t\t\t...getBlockParents( startClientId ),\n\t\t\t\t\t\tstartClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst endPath = [\n\t\t\t\t\t\t...getBlockParents( endClientId ),\n\t\t\t\t\t\tendClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst depth = findDepth( startPath, endPath );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartPath[ depth ] !== startClientId ||\n\t\t\t\t\t\tendPath[ depth ] !== endClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\tmultiSelect( startPath[ depth ], endPath[ depth ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst richTextElementStart =\n\t\t\t\t\t\tgetRichTextElement( startNode );\n\t\t\t\t\tconst richTextElementEnd = getRichTextElement( endNode );\n\n\t\t\t\t\tif ( richTextElementStart && richTextElementEnd ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst richTextDataStart = create( {\n\t\t\t\t\t\t\telement: richTextElementStart,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tconst richTextDataEnd = create( {\n\t\t\t\t\t\t\telement: richTextElementEnd,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst startOffset =\n\t\t\t\t\t\t\trichTextDataStart.start ?? richTextDataStart.end;\n\t\t\t\t\t\tconst endOffset =\n\t\t\t\t\t\t\trichTextDataEnd.start ?? richTextDataEnd.end;\n\t\t\t\t\t\tselectionChange( {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementStart.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tclientId: endClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementEnd.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: endOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, endClientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'selectionchange',\n\t\t\t\tonSelectionChange\n\t\t\t);\n\t\t\tdefaultView.addEventListener( 'mouseup', onSelectionChange );\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tonSelectionChange\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onSelectionChange );\n\t\t\t};\n\t\t},\n\t\t[ multiSelect, selectBlock, selectionChange, getBlockParents ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\n\nexport default function useClickSelection() {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst { isSelectionEnabled, getBlockSelectionStart, hasMultiSelection } =\n\t\tuseSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\t// The main button.\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n\t\t\t\tif ( ! isSelectionEnabled() || event.button !== 0 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startClientId = getBlockSelectionStart();\n\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tif ( startClientId !== clickedClientId ) {\n\t\t\t\t\t\tnode.contentEditable = true;\n\t\t\t\t\t\t// Firefox doesn't automatically move focus.\n\t\t\t\t\t\tnode.focus();\n\t\t\t\t\t}\n\t\t\t\t} else if ( hasMultiSelection() ) {\n\t\t\t\t\t// Allow user to escape out of a multi-selection to a\n\t\t\t\t\t// singular selection of a block via click. This is handled\n\t\t\t\t\t// here since focus handling excludes blocks when there is\n\t\t\t\t\t// multiselection, as focus can be incurred by starting a\n\t\t\t\t\t// multiselection (focus moved to first block's multi-\n\t\t\t\t\t// controls).\n\t\t\t\t\tselectBlock( clickedClientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tselectBlock,\n\t\t\tisSelectionEnabled,\n\t\t\tgetBlockSelectionStart,\n\t\t\thasMultiSelection,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\thasBlockSupport,\n\tgetBlockTransforms,\n\tfindTransform,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Handles input for selections across blocks.\n */\nexport default function useInput() {\n\tconst {\n\t\t__unstableIsFullySelected,\n\t\tgetSelectedBlockClientIds,\n\t\tgetSelectedBlockClientId,\n\t\t__unstableIsSelectionMergeable,\n\t\thasMultiSelection,\n\t\tgetBlockName,\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t\tgetSelectionStart,\n\t\tgetSelectionEnd,\n\t\tgetBlockAttributes,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\treplaceBlocks,\n\t\t__unstableSplitSelection,\n\t\tremoveBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t\t__unstableMarkAutomaticChange,\n\t} = useDispatch( blockEditorStore );\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction onBeforeInput( event ) {\n\t\t\t// If writing flow is editable, NEVER allow the browser to alter the\n\t\t\t// DOM. This will cause React errors (and the DOM should only be\n\t\t\t// altered in a controlled fashion).\n\t\t\tif ( node.contentEditable === 'true' ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tif ( event.keyCode === ENTER ) {\n\t\t\t\t\tif ( event.shiftKey || __unstableIsFullySelected() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst clientId = getSelectedBlockClientId();\n\t\t\t\t\tconst blockName = getBlockName( clientId );\n\t\t\t\t\tconst selectionStart = getSelectionStart();\n\t\t\t\t\tconst selectionEnd = getSelectionEnd();\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectionStart.attributeKey ===\n\t\t\t\t\t\tselectionEnd.attributeKey\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst selectedAttributeValue =\n\t\t\t\t\t\t\tgetBlockAttributes( clientId )[\n\t\t\t\t\t\t\t\tselectionStart.attributeKey\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\tconst transforms = getBlockTransforms( 'from' ).filter(\n\t\t\t\t\t\t\t( { type } ) => type === 'enter'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\t\t\ttransforms,\n\t\t\t\t\t\t\t( item ) => {\n\t\t\t\t\t\t\t\treturn item.regExp.test(\n\t\t\t\t\t\t\t\t\tselectedAttributeValue\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( transformation ) {\n\t\t\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\ttransformation.transform( {\n\t\t\t\t\t\t\t\t\tcontent: selectedAttributeValue,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t__unstableMarkAutomaticChange();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! hasBlockSupport( blockName, 'splitting', false ) &&\n\t\t\t\t\t\t! event.__deprecatedOnSplit\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ensure template is not locked.\n\t\t\t\t\tif (\n\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\t__unstableSplitSelection();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.keyCode === ENTER ) {\n\t\t\t\tnode.contentEditable = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( __unstableIsFullySelected() ) {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tgetSelectedBlockClientIds(),\n\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t__unstableSplitSelection();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tevent.keyCode === BACKSPACE ||\n\t\t\t\tevent.keyCode === DELETE\n\t\t\t) {\n\t\t\t\tnode.contentEditable = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( __unstableIsFullySelected() ) {\n\t\t\t\t\tremoveBlocks( getSelectedBlockClientIds() );\n\t\t\t\t} else if ( __unstableIsSelectionMergeable() ) {\n\t\t\t\t\t__unstableDeleteSelection( event.keyCode === DELETE );\n\t\t\t\t} else {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t// If key.length is longer than 1, it's a control key that doesn't\n\t\t\t\t// input anything.\n\t\t\t\tevent.key.length === 1 &&\n\t\t\t\t! ( event.metaKey || event.ctrlKey )\n\t\t\t) {\n\t\t\t\tnode.contentEditable = false;\n\t\t\t\tif ( __unstableIsSelectionMergeable() ) {\n\t\t\t\t\t__unstableDeleteSelection( event.keyCode === DELETE );\n\t\t\t\t} else {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t// Safari does not stop default behaviour with either\n\t\t\t\t\t// event.preventDefault() or node.contentEditable = false, so\n\t\t\t\t\t// remove the selection to stop browser manipulation.\n\t\t\t\t\tnode.ownerDocument.defaultView\n\t\t\t\t\t\t.getSelection()\n\t\t\t\t\t\t.removeAllRanges();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onCompositionStart( event ) {\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnode.contentEditable = false;\n\n\t\t\tif ( __unstableIsSelectionMergeable() ) {\n\t\t\t\t__unstableDeleteSelection();\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// Safari does not stop default behaviour with either\n\t\t\t\t// event.preventDefault() or node.contentEditable = false, so\n\t\t\t\t// remove the selection to stop browser manipulation.\n\t\t\t\tnode.ownerDocument.defaultView.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'beforeinput', onBeforeInput );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'compositionstart', onCompositionStart );\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'beforeinput', onBeforeInput );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'compositionstart', onCompositionStart );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\n\nexport function useNotifyCopy() {\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\tconst { getBlockType } = useSelect( blocksStore );\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\treturn useCallback( ( eventType, selectedBlockClientIds ) => {\n\t\tlet notice = '';\n\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\tconst clientId = selectedBlockClientIds[ 0 ];\n\t\t\tconst title = getBlockType( getBlockName( clientId ) )?.title;\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being copied, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Copied \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being cut, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Moved \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t );\n\t\t} else {\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being copied.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Copied %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Copied %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being cut.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Moved %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Moved %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t );\n\t\t}\n\t\tcreateSuccessNotice( notice, {\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Normalizes a given string of HTML to remove the Windows-specific \"Fragment\"\n * comments and any preceding and trailing content.\n *\n * @param {string} html the html to be normalized\n * @return {string} the normalized html\n */\nfunction removeWindowsFragments( html ) {\n\tconst startStr = '';\n\tconst startIdx = html.indexOf( startStr );\n\tif ( startIdx > -1 ) {\n\t\thtml = html.substring( startIdx + startStr.length );\n\t} else {\n\t\t// No point looking for EndFragment\n\t\treturn html;\n\t}\n\n\tconst endStr = '';\n\tconst endIdx = html.indexOf( endStr );\n\tif ( endIdx > -1 ) {\n\t\thtml = html.substring( 0, endIdx );\n\t}\n\n\treturn html;\n}\n\n/**\n * Removes the charset meta tag inserted by Chromium.\n * See:\n * - https://github.com/WordPress/gutenberg/issues/33585\n * - https://bugs.chromium.org/p/chromium/issues/detail?id=1264616#c4\n *\n * @param {string} html the html to be stripped of the meta tag.\n * @return {string} the cleaned html\n */\nfunction removeCharsetMetaTag( html ) {\n\tconst metaTag = ``;\n\n\tif ( html.startsWith( metaTag ) ) {\n\t\treturn html.slice( metaTag.length );\n\t}\n\n\treturn html;\n}\n\nexport function getPasteEventData( { clipboardData } ) {\n\tlet plainText = '';\n\tlet html = '';\n\n\ttry {\n\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\thtml = clipboardData.getData( 'text/html' );\n\t} catch ( error ) {\n\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t// don't support clipboardData at all, so allow default\n\t\t// behaviour.\n\t\treturn;\n\t}\n\n\t// Remove Windows-specific metadata appended within copied HTML text.\n\thtml = removeWindowsFragments( html );\n\n\t// Strip meta tag.\n\thtml = removeCharsetMetaTag( html );\n\n\tconst files = getFilesFromDataTransfer( clipboardData );\n\n\tif ( files.length && ! shouldDismissPastedFiles( files, html ) ) {\n\t\treturn { files };\n\t}\n\n\treturn { html, plainText, files: [] };\n}\n\n/**\n * Given a collection of DataTransfer files and HTML and plain text strings,\n * determine whether the files are to be dismissed in favor of the HTML.\n *\n * Certain office-type programs, like Microsoft Word or Apple Numbers,\n * will, upon copy, generate a screenshot of the content being copied and\n * attach it to the clipboard alongside the actual rich text that the user\n * sought to copy. In those cases, we should let Gutenberg handle the rich text\n * content and not the screenshot, since this allows Gutenberg to insert\n * meaningful blocks, like paragraphs, lists or even tables.\n *\n * @param {File[]} files File objects obtained from a paste event\n * @param {string} html HTML content obtained from a paste event\n * @return {boolean} True if the files should be dismissed\n */\nexport function shouldDismissPastedFiles( files, html /*, plainText */ ) {\n\t// The question is only relevant when there is actual HTML content and when\n\t// there is exactly one image file.\n\tif (\n\t\thtml &&\n\t\tfiles?.length === 1 &&\n\t\tfiles[ 0 ].type.indexOf( 'image/' ) === 0\n\t) {\n\t\t// A single tag found in the HTML source suggests that the\n\t\t// content being pasted revolves around an image. Sometimes there are\n\t\t// other elements found, like
, but we assume that the user's\n\t\t// intention is to paste the actual image file.\n\t\tconst IMAGE_TAG = /<\\s*img\\b/gi;\n\t\tif ( html.match( IMAGE_TAG )?.length !== 1 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Even when there is exactly one tag in the HTML payload, we\n\t\t// choose to weed out local images, i.e. those whose source starts with\n\t\t// \"file://\". These payloads occur in specific configurations, such as\n\t\t// when copying an entire document from Microsoft Word, that contains\n\t\t// text and exactly one image, and pasting that content using Google\n\t\t// Chrome.\n\t\tconst IMG_WITH_LOCAL_SRC = /<\\s*img\\b[^>]*\\bsrc=\"file:\\/\\//i;\n\t\tif ( html.match( IMG_WITH_LOCAL_SRC ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tserialize,\n\tcreateBlock,\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport const requiresWrapperOnCopy = Symbol( 'requiresWrapperOnCopy' );\n\n/**\n * Sets the clipboard data for the provided blocks, with both HTML and plain\n * text representations.\n *\n * @param {ClipboardEvent} event Clipboard event.\n * @param {WPBlock[]} blocks Blocks to set as clipboard data.\n * @param {Object} registry The registry to select from.\n */\nexport function setClipboardBlocks( event, blocks, registry ) {\n\tlet _blocks = blocks;\n\n\tconst [ firstBlock ] = blocks;\n\n\tif ( firstBlock ) {\n\t\tconst firstBlockType = registry\n\t\t\t.select( blocksStore )\n\t\t\t.getBlockType( firstBlock.name );\n\n\t\tif ( firstBlockType[ requiresWrapperOnCopy ] ) {\n\t\t\tconst { getBlockRootClientId, getBlockName, getBlockAttributes } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst wrapperBlockClientId = getBlockRootClientId(\n\t\t\t\tfirstBlock.clientId\n\t\t\t);\n\t\t\tconst wrapperBlockName = getBlockName( wrapperBlockClientId );\n\n\t\t\tif ( wrapperBlockName ) {\n\t\t\t\t_blocks = createBlock(\n\t\t\t\t\twrapperBlockName,\n\t\t\t\t\tgetBlockAttributes( wrapperBlockClientId ),\n\t\t\t\t\t_blocks\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst serialized = serialize( _blocks );\n\n\tevent.clipboardData.setData( 'text/plain', toPlainText( serialized ) );\n\tevent.clipboardData.setData( 'text/html', serialized );\n}\n\n/**\n * Returns the blocks to be pasted from the clipboard event.\n *\n * @param {ClipboardEvent} event The clipboard event.\n * @param {boolean} canUserUseUnfilteredHTML Whether the user can or can't post unfiltered HTML.\n * @return {Array|string} A list of blocks or a string, depending on `handlerMode`.\n */\nexport function getPasteBlocks( event, canUserUseUnfilteredHTML ) {\n\tconst { plainText, html, files } = getPasteEventData( event );\n\tlet blocks = [];\n\n\tif ( files.length ) {\n\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\tblocks = files\n\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\tfromTransforms,\n\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t);\n\t\t\t\tif ( transformation ) {\n\t\t\t\t\taccumulator.push( transformation.transform( [ file ] ) );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] )\n\t\t\t.flat();\n\t} else {\n\t\tblocks = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode: 'BLOCKS',\n\t\t\tcanUserUseUnfilteredHTML,\n\t\t} );\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Given a string of HTML representing serialized blocks, returns the plain\n * text extracted after stripping the HTML of any tags and fixing line breaks.\n *\n * @param {string} html Serialized blocks.\n * @return {string} The plain-text content with any html removed.\n */\nfunction toPlainText( html ) {\n\t// Manually handle BR tags as line breaks prior to `stripHTML` call\n\thtml = html.replace( /
/g, '\\n' );\n\n\tconst plainText = stripHTML( html ).trim();\n\n\t// Merge any consecutive line breaks\n\treturn plainText.replace( /\\n\\n+/g, '\\n\\n' );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\thasBlockSupport,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tdocumentHasSelection,\n\tdocumentHasUncollapsedSelection,\n} from '@wordpress/dom';\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport { setClipboardBlocks } from './utils';\nimport { getPasteEventData } from '../../utils/pasting';\n\nexport default function useClipboardHandler() {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSettings,\n\t\tgetBlockName,\n\t\t__unstableIsFullySelected,\n\t\t__unstableIsSelectionCollapsed,\n\t\t__unstableIsSelectionMergeable,\n\t\t__unstableGetSelectedBlocksWithPartialSelection,\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tflashBlock,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t\t__unstableSplitSelection,\n\t} = useDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction handler( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t// This was likely already handled in rich-text/use-paste-handler.js.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Let native copy/paste behaviour take over in input fields.\n\t\t\t// But always handle multiple selected blocks.\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tconst { target } = event;\n\t\t\t\tconst { ownerDocument } = target;\n\t\t\t\t// If copying, only consider actual text selection as selection.\n\t\t\t\t// Otherwise, any focus on an input field is considered.\n\t\t\t\tconst hasSelection =\n\t\t\t\t\tevent.type === 'copy' || event.type === 'cut'\n\t\t\t\t\t\t? documentHasUncollapsedSelection( ownerDocument )\n\t\t\t\t\t\t: documentHasSelection( ownerDocument ) &&\n\t\t\t\t\t\t ! ownerDocument.activeElement.isContentEditable;\n\n\t\t\t\t// Let native copy behaviour take over in input fields.\n\t\t\t\tif ( hasSelection ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { activeElement } = event.target.ownerDocument;\n\n\t\t\tif ( ! node.contains( activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isSelectionMergeable = __unstableIsSelectionMergeable();\n\t\t\tconst shouldHandleWholeBlocks =\n\t\t\t\t__unstableIsSelectionCollapsed() || __unstableIsFullySelected();\n\t\t\tconst expandSelectionIsNeeded =\n\t\t\t\t! shouldHandleWholeBlocks && ! isSelectionMergeable;\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t\t// If we have a partial selection that is not mergeable, just\n\t\t\t\t// expand the selection to the whole blocks.\n\t\t\t\tif ( expandSelectionIsNeeded ) {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t} else {\n\t\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\t\tlet blocks;\n\t\t\t\t\t// Check if we have partial selection.\n\t\t\t\t\tif ( shouldHandleWholeBlocks ) {\n\t\t\t\t\t\tblocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [ head, tail ] =\n\t\t\t\t\t\t\t__unstableGetSelectedBlocksWithPartialSelection();\n\t\t\t\t\t\tconst inBetweenBlocks = getBlocksByClientId(\n\t\t\t\t\t\t\tselectedBlockClientIds.slice(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length - 1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tblocks = [ head, ...inBetweenBlocks, tail ];\n\t\t\t\t\t}\n\n\t\t\t\t\tsetClipboardBlocks( event, blocks, registry );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// We need to also check if at the start we needed to\n\t\t\t\t// expand the selection, as in this point we might have\n\t\t\t\t// programmatically fully selected the blocks above.\n\t\t\t\tif ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {\n\t\t\t\t\tremoveBlocks( selectedBlockClientIds );\n\t\t\t\t} else {\n\t\t\t\t\tevent.target.ownerDocument.activeElement.contentEditable = false;\n\t\t\t\t\t__unstableDeleteSelection();\n\t\t\t\t}\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML:\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst isInternal =\n\t\t\t\t\tevent.clipboardData.getData( 'rich-text' ) === 'true';\n\t\t\t\tif ( isInternal ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { plainText, html, files } = getPasteEventData( event );\n\t\t\t\tconst isFullySelected = __unstableIsFullySelected();\n\t\t\t\tlet blocks = [];\n\n\t\t\t\tif ( files.length ) {\n\t\t\t\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\t\t\t\tblocks = files\n\t\t\t\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\t\t\t\tfromTransforms,\n\t\t\t\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif ( transformation ) {\n\t\t\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\t\t\ttransformation.transform( [ file ] )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t\t}, [] )\n\t\t\t\t\t\t.flat();\n\t\t\t\t} else {\n\t\t\t\t\tblocks = pasteHandler( {\n\t\t\t\t\t\tHTML: html,\n\t\t\t\t\t\tplainText,\n\t\t\t\t\t\tmode: isFullySelected ? 'BLOCKS' : 'AUTO',\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Inline paste: let rich text handle it.\n\t\t\t\tif ( typeof blocks === 'string' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isFullySelected ) {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t\t-1\n\t\t\t\t\t);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a block doesn't support splitting, let rich text paste\n\t\t\t\t// inline.\n\t\t\t\tif (\n\t\t\t\t\t! hasMultiSelection() &&\n\t\t\t\t\t! hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( selectedBlockClientIds[ 0 ] ),\n\t\t\t\t\t\t'splitting',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) &&\n\t\t\t\t\t! event.__deprecatedOnSplit\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ firstSelectedClientId ] = selectedBlockClientIds;\n\t\t\t\tconst rootClientId = getBlockRootClientId(\n\t\t\t\t\tfirstSelectedClientId\n\t\t\t\t);\n\n\t\t\t\tconst newBlocks = [];\n\n\t\t\t\tfor ( const block of blocks ) {\n\t\t\t\t\tif ( canInsertBlockType( block.name, rootClientId ) ) {\n\t\t\t\t\t\tnewBlocks.push( block );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If a block cannot be inserted in a root block, try\n\t\t\t\t\t\t// converting it to that root block type and insert the\n\t\t\t\t\t\t// inner blocks.\n\t\t\t\t\t\t// Example: paragraphs cannot be inserted into a list,\n\t\t\t\t\t\t// so convert the paragraphs to a list for list items.\n\t\t\t\t\t\tconst rootBlockName = getBlockName( rootClientId );\n\t\t\t\t\t\tconst switchedBlocks =\n\t\t\t\t\t\t\tblock.name !== rootBlockName\n\t\t\t\t\t\t\t\t? switchToBlockType( block, rootBlockName )\n\t\t\t\t\t\t\t\t: [ block ];\n\n\t\t\t\t\t\tif ( ! switchedBlocks ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( const switchedBlock of switchedBlocks ) {\n\t\t\t\t\t\t\tfor ( const innerBlock of switchedBlock.innerBlocks ) {\n\t\t\t\t\t\t\t\tnewBlocks.push( innerBlock );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t__unstableSplitSelection( newBlocks );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useMergeRefs, useRefEffect } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMultiSelection from './use-multi-selection';\nimport useTabNav from './use-tab-nav';\nimport useArrowNav from './use-arrow-nav';\nimport useSelectAll from './use-select-all';\nimport useDragSelection from './use-drag-selection';\nimport useSelectionObserver from './use-selection-observer';\nimport useClickSelection from './use-click-selection';\nimport useInput from './use-input';\nimport useClipboardHandler from './use-clipboard-handler';\nimport { store as blockEditorStore } from '../../store';\n\nexport function useWritingFlow() {\n\tconst [ before, ref, after ] = useTabNav();\n\tconst hasMultiSelection = useSelect(\n\t\t( select ) => select( blockEditorStore ).hasMultiSelection(),\n\t\t[]\n\t);\n\n\treturn [\n\t\tbefore,\n\t\tuseMergeRefs( [\n\t\t\tref,\n\t\t\tuseClipboardHandler(),\n\t\t\tuseInput(),\n\t\t\tuseDragSelection(),\n\t\t\tuseSelectionObserver(),\n\t\t\tuseClickSelection(),\n\t\t\tuseMultiSelection(),\n\t\t\tuseSelectAll(),\n\t\t\tuseArrowNav(),\n\t\t\tuseRefEffect(\n\t\t\t\t( node ) => {\n\t\t\t\t\tnode.tabIndex = 0;\n\n\t\t\t\t\tif ( ! hasMultiSelection ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.classList.add( 'has-multi-selection' );\n\t\t\t\t\tnode.setAttribute(\n\t\t\t\t\t\t'aria-label',\n\t\t\t\t\t\t__( 'Multiple selected blocks' )\n\t\t\t\t\t);\n\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tnode.classList.remove( 'has-multi-selection' );\n\t\t\t\t\t\tnode.removeAttribute( 'aria-label' );\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\t[ hasMultiSelection ]\n\t\t\t),\n\t\t] ),\n\t\tafter,\n\t];\n}\n\nfunction WritingFlow( { children, ...props }, forwardedRef ) {\n\tconst [ before, ref, after ] = useWritingFlow();\n\treturn (\n\t\t<>\n\t\t\t{ before }\n\t\t\t\n\t\t\t\t{ children }\n\t\t\t
\n\t\t\t{ after }\n\t\t\n\t);\n}\n\n/**\n * Handles selection and navigation across blocks. This component should be\n * wrapped around BlockList.\n *\n * @param {Object} props Component properties.\n * @param {Element} props.children Children to be rendered.\n */\nexport default forwardRef( WritingFlow );\n","/**\n * WordPress dependencies\n */\nimport { focus, isFormElement } from '@wordpress/dom';\nimport { TAB, ESCAPE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { isInSameBlock, isInsideRootBlock } from '../../utils/dom';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\n\tconst { hasMultiSelection, getSelectedBlockClientId, getBlockCount } =\n\t\tuseSelect( blockEditorStore );\n\tconst { setNavigationMode, setLastFocus } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst isNavigationMode = useSelect(\n\t\t( select ) => select( blockEditorStore ).isNavigationMode(),\n\t\t[]\n\t);\n\n\tconst { getLastFocus } = unlock( useSelect( blockEditorStore ) );\n\n\t// Don't allow tabbing to this element in Navigation mode.\n\tconst focusCaptureTabIndex = ! isNavigationMode ? '0' : undefined;\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCaptureRef = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCaptureRef.current ) {\n\t\t\tnoCaptureRef.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tif ( getLastFocus()?.current ) {\n\t\t\t\tgetLastFocus().current.focus();\n\t\t\t} else {\n\t\t\t\t// Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.\n\t\t\t\tcontainer.current\n\t\t\t\t\t.querySelector(\n\t\t\t\t\t\t`[data-block=\"${ getSelectedBlockClientId() }\"]`\n\t\t\t\t\t)\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t} else {\n\t\t\tsetNavigationMode( true );\n\n\t\t\tconst canvasElement =\n\t\t\t\tcontainer.current.ownerDocument === event.target.ownerDocument\n\t\t\t\t\t? container.current\n\t\t\t\t\t: container.current.ownerDocument.defaultView.frameElement;\n\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( canvasElement ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst tabbables = focus.tabbable.find( container.current );\n\n\t\t\tif ( tabbables.length ) {\n\t\t\t\tconst next = isBefore\n\t\t\t\t\t? tabbables[ 0 ]\n\t\t\t\t\t: tabbables[ tabbables.length - 1 ];\n\n\t\t\t\tnext.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst before = (\n\t\t\n\t);\n\n\tconst after = (\n\t\t\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.keyCode === ESCAPE && ! hasMultiSelection() ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\t// Preserve the behaviour of entering navigation mode when\n\t\t\t\t// tabbing into the content without a block selection.\n\t\t\t\t// `onFocusCapture` already did this previously, but we need to\n\t\t\t\t// do it again here because after clearing block selection,\n\t\t\t\t// focus land on the writing flow container and pressing Tab\n\t\t\t\t// will no longer send focus through the focus capture element.\n\t\t\t\tif ( event.target === node ) {\n\t\t\t\t\tsetNavigationMode( true );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextTabbable = focus.tabbable[ direction ]( event.target );\n\n\t\t\t// We want to constrain the tabbing to the block and its child blocks.\n\t\t\t// If the preceding form element is within a different block,\n\t\t\t// such as two sibling image blocks in the placeholder state,\n\t\t\t// we want shift + tab from the first form element to move to the image\n\t\t\t// block toolbar and not the previous image block's form element.\n\t\t\tconst currentBlock = event.target.closest( '[data-block]' );\n\t\t\tconst isElementPartOfSelectedBlock =\n\t\t\t\tcurrentBlock &&\n\t\t\t\tnextTabbable &&\n\t\t\t\t( isInSameBlock( currentBlock, nextTabbable ) ||\n\t\t\t\t\tisInsideRootBlock( currentBlock, nextTabbable ) );\n\n\t\t\t// Allow tabbing from the block wrapper to a form element,\n\t\t\t// and between form elements rendered in a block and its child blocks,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( nextTabbable ) &&\n\t\t\t\tisElementPartOfSelectedBlock\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCaptureRef.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tsetLastFocus( { ...getLastFocus(), current: event.target } );\n\n\t\t\tconst { ownerDocument } = node;\n\n\t\t\t// If focus disappears due to there being no blocks, move focus to\n\t\t\t// the writing flow wrapper.\n\t\t\tif (\n\t\t\t\t! event.relatedTarget &&\n\t\t\t\townerDocument.activeElement === ownerDocument.body &&\n\t\t\t\tgetBlockCount() === 0\n\t\t\t) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// Only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tconst { ownerDocument } = node;\n\t\tconst { defaultView } = ownerDocument;\n\t\tdefaultView.addEventListener( 'keydown', preventScrollOnTab );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tdefaultView.removeEventListener( 'keydown', preventScrollOnTab );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n","let compatibilityStyles = null;\n\n/**\n * Returns a list of stylesheets that target the editor canvas. A stylesheet is\n * considered targetting the editor a canvas if it contains the\n * `editor-styles-wrapper`, `wp-block`, or `wp-block-*` class selectors.\n *\n * Ideally, this hook should be removed in the future and styles should be added\n * explicitly as editor styles.\n */\nexport function getCompatibilityStyles() {\n\tif ( compatibilityStyles ) {\n\t\treturn compatibilityStyles;\n\t}\n\n\t// Only memoize the result once on load, since these stylesheets should not\n\t// change.\n\tcompatibilityStyles = Array.from( document.styleSheets ).reduce(\n\t\t( accumulator, styleSheet ) => {\n\t\t\ttry {\n\t\t\t\t// May fail for external styles.\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tstyleSheet.cssRules;\n\t\t\t} catch ( e ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tconst { ownerNode, cssRules } = styleSheet;\n\n\t\t\t// Stylesheet is added by another stylesheet. See\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet/ownerNode#notes.\n\t\t\tif ( ownerNode === null ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tif ( ! cssRules ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Don't try to add the reset styles, which were removed as a dependency\n\t\t\t// from `edit-blocks` for the iframe since we don't need to reset admin\n\t\t\t// styles.\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\t'wp-reset-editor-styles-css',\n\t\t\t\t\t'wp-reset-editor-styles-rtl-css',\n\t\t\t\t].includes( ownerNode.id )\n\t\t\t) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Don't try to add styles without ID. Styles enqueued via the WP dependency system will always have IDs.\n\t\t\tif ( ! ownerNode.id ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tfunction matchFromRules( _cssRules ) {\n\t\t\t\treturn Array.from( _cssRules ).find(\n\t\t\t\t\t( {\n\t\t\t\t\t\tselectorText,\n\t\t\t\t\t\tconditionText,\n\t\t\t\t\t\tcssRules: __cssRules,\n\t\t\t\t\t} ) => {\n\t\t\t\t\t\t// If the rule is conditional then it will not have selector text.\n\t\t\t\t\t\t// Recurse into child CSS ruleset to determine selector eligibility.\n\t\t\t\t\t\tif ( conditionText ) {\n\t\t\t\t\t\t\treturn matchFromRules( __cssRules );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tselectorText &&\n\t\t\t\t\t\t\t( selectorText.includes(\n\t\t\t\t\t\t\t\t'.editor-styles-wrapper'\n\t\t\t\t\t\t\t) ||\n\t\t\t\t\t\t\t\tselectorText.includes( '.wp-block' ) )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif ( matchFromRules( cssRules ) ) {\n\t\t\t\tconst isInline = ownerNode.tagName === 'STYLE';\n\n\t\t\t\tif ( isInline ) {\n\t\t\t\t\t// If the current target is inline,\n\t\t\t\t\t// it could be a dependency of an existing stylesheet.\n\t\t\t\t\t// Look for that dependency and add it BEFORE the current target.\n\t\t\t\t\tconst mainStylesCssId = ownerNode.id.replace(\n\t\t\t\t\t\t'-inline-css',\n\t\t\t\t\t\t'-css'\n\t\t\t\t\t);\n\t\t\t\t\tconst mainStylesElement =\n\t\t\t\t\t\tdocument.getElementById( mainStylesCssId );\n\t\t\t\t\tif ( mainStylesElement ) {\n\t\t\t\t\t\taccumulator.push( mainStylesElement.cloneNode( true ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taccumulator.push( ownerNode.cloneNode( true ) );\n\n\t\t\t\tif ( ! isInline ) {\n\t\t\t\t\t// If the current target is not inline,\n\t\t\t\t\t// we still look for inline styles that could be relevant for the current target.\n\t\t\t\t\t// If they exist, add them AFTER the current target.\n\t\t\t\t\tconst inlineStylesCssId = ownerNode.id.replace(\n\t\t\t\t\t\t'-css',\n\t\t\t\t\t\t'-inline-css'\n\t\t\t\t\t);\n\t\t\t\t\tconst inlineStylesElement =\n\t\t\t\t\t\tdocument.getElementById( inlineStylesCssId );\n\t\t\t\t\tif ( inlineStylesElement ) {\n\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\tinlineStylesElement.cloneNode( true )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\n\treturn compatibilityStyles;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tcreatePortal,\n\tforwardRef,\n\tuseMemo,\n\tuseEffect,\n\tuseRef,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseResizeObserver,\n\tuseMergeRefs,\n\tuseRefEffect,\n\tuseDisabled,\n} from '@wordpress/compose';\nimport { __experimentalStyleProvider as StyleProvider } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useWritingFlow } from '../writing-flow';\nimport { getCompatibilityStyles } from './get-compatibility-styles';\nimport { store as blockEditorStore } from '../../store';\n\nfunction bubbleEvent( event, Constructor, frame ) {\n\tconst init = {};\n\n\tfor ( const key in event ) {\n\t\tinit[ key ] = event[ key ];\n\t}\n\n\t// Check if the event is a MouseEvent generated within the iframe.\n\t// If so, adjust the coordinates to be relative to the position of\n\t// the iframe. This ensures that components such as Draggable\n\t// receive coordinates relative to the window, instead of relative\n\t// to the iframe. Without this, the Draggable event handler would\n\t// result in components \"jumping\" position as soon as the user\n\t// drags over the iframe.\n\tif ( event instanceof frame.contentDocument.defaultView.MouseEvent ) {\n\t\tconst rect = frame.getBoundingClientRect();\n\t\tinit.clientX += rect.left;\n\t\tinit.clientY += rect.top;\n\t}\n\n\tconst newEvent = new Constructor( event.type, init );\n\tif ( init.defaultPrevented ) {\n\t\tnewEvent.preventDefault();\n\t}\n\tconst cancelled = ! frame.dispatchEvent( newEvent );\n\n\tif ( cancelled ) {\n\t\tevent.preventDefault();\n\t}\n}\n\n/**\n * Bubbles some event types (keydown, keypress, and dragover) to parent document\n * document to ensure that the keyboard shortcuts and drag and drop work.\n *\n * Ideally, we should remove event bubbling in the future. Keyboard shortcuts\n * should be context dependent, e.g. actions on blocks like Cmd+A should not\n * work globally outside the block editor.\n *\n * @param {Document} iframeDocument Document to attach listeners to.\n */\nfunction useBubbleEvents( iframeDocument ) {\n\treturn useRefEffect( () => {\n\t\tconst { defaultView } = iframeDocument;\n\t\tif ( ! defaultView ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { frameElement } = defaultView;\n\t\tconst html = iframeDocument.documentElement;\n\t\tconst eventTypes = [ 'dragover', 'mousemove' ];\n\t\tconst handlers = {};\n\t\tfor ( const name of eventTypes ) {\n\t\t\thandlers[ name ] = ( event ) => {\n\t\t\t\tconst prototype = Object.getPrototypeOf( event );\n\t\t\t\tconst constructorName = prototype.constructor.name;\n\t\t\t\tconst Constructor = window[ constructorName ];\n\t\t\t\tbubbleEvent( event, Constructor, frameElement );\n\t\t\t};\n\t\t\thtml.addEventListener( name, handlers[ name ] );\n\t\t}\n\n\t\treturn () => {\n\t\t\tfor ( const name of eventTypes ) {\n\t\t\t\thtml.removeEventListener( name, handlers[ name ] );\n\t\t\t}\n\t\t};\n\t} );\n}\n\nfunction Iframe( {\n\tcontentRef,\n\tchildren,\n\ttabIndex = 0,\n\tscale = 1,\n\tframeSize = 0,\n\treadonly,\n\tforwardedRef: ref,\n\ttitle = __( 'Editor canvas' ),\n\t...props\n} ) {\n\tconst { resolvedAssets, isPreviewMode } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\t\treturn {\n\t\t\tresolvedAssets: settings.__unstableResolvedAssets,\n\t\t\tisPreviewMode: settings.__unstableIsPreviewMode,\n\t\t};\n\t}, [] );\n\tconst { styles = '', scripts = '' } = resolvedAssets;\n\tconst [ iframeDocument, setIframeDocument ] = useState();\n\tconst prevContainerWidthRef = useRef();\n\tconst [ bodyClasses, setBodyClasses ] = useState( [] );\n\tconst clearerRef = useBlockSelectionClearer();\n\tconst [ before, writingFlowRef, after ] = useWritingFlow();\n\tconst [ contentResizeListener, { height: contentHeight } ] =\n\t\tuseResizeObserver();\n\tconst [ containerResizeListener, { width: containerWidth } ] =\n\t\tuseResizeObserver();\n\n\tconst setRef = useRefEffect( ( node ) => {\n\t\tnode._load = () => {\n\t\t\tsetIframeDocument( node.contentDocument );\n\t\t};\n\t\tlet iFrameDocument;\n\t\t// Prevent the default browser action for files dropped outside of dropzones.\n\t\tfunction preventFileDropDefault( event ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onLoad() {\n\t\t\tconst { contentDocument, ownerDocument } = node;\n\t\t\tconst { documentElement } = contentDocument;\n\t\t\tiFrameDocument = contentDocument;\n\n\t\t\tdocumentElement.classList.add( 'block-editor-iframe__html' );\n\n\t\t\tclearerRef( documentElement );\n\n\t\t\t// Ideally ALL classes that are added through get_body_class should\n\t\t\t// be added in the editor too, which we'll somehow have to get from\n\t\t\t// the server in the future (which will run the PHP filters).\n\t\t\tsetBodyClasses(\n\t\t\t\tArray.from( ownerDocument.body.classList ).filter(\n\t\t\t\t\t( name ) =>\n\t\t\t\t\t\tname.startsWith( 'admin-color-' ) ||\n\t\t\t\t\t\tname.startsWith( 'post-type-' ) ||\n\t\t\t\t\t\tname === 'wp-embed-responsive'\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tcontentDocument.dir = ownerDocument.dir;\n\n\t\t\tfor ( const compatStyle of getCompatibilityStyles() ) {\n\t\t\t\tif ( contentDocument.getElementById( compatStyle.id ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcontentDocument.head.appendChild(\n\t\t\t\t\tcompatStyle.cloneNode( true )\n\t\t\t\t);\n\n\t\t\t\tif ( ! isPreviewMode ) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`${ compatStyle.id } was added to the iframe incorrectly. Please use block.json or enqueue_block_assets to add styles to the iframe.`,\n\t\t\t\t\t\tcompatStyle\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tiFrameDocument.addEventListener(\n\t\t\t\t'dragover',\n\t\t\t\tpreventFileDropDefault,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tiFrameDocument.addEventListener(\n\t\t\t\t'drop',\n\t\t\t\tpreventFileDropDefault,\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\n\t\tnode.addEventListener( 'load', onLoad );\n\n\t\treturn () => {\n\t\t\tdelete node._load;\n\t\t\tnode.removeEventListener( 'load', onLoad );\n\t\t\tiFrameDocument?.removeEventListener(\n\t\t\t\t'dragover',\n\t\t\t\tpreventFileDropDefault\n\t\t\t);\n\t\t\tiFrameDocument?.removeEventListener(\n\t\t\t\t'drop',\n\t\t\t\tpreventFileDropDefault\n\t\t\t);\n\t\t};\n\t}, [] );\n\n\tconst [ iframeWindowInnerHeight, setIframeWindowInnerHeight ] = useState();\n\n\tconst iframeResizeRef = useRefEffect( ( node ) => {\n\t\tconst nodeWindow = node.ownerDocument.defaultView;\n\n\t\tsetIframeWindowInnerHeight( nodeWindow.innerHeight );\n\t\tconst onResize = () => {\n\t\t\tsetIframeWindowInnerHeight( nodeWindow.innerHeight );\n\t\t};\n\t\tnodeWindow.addEventListener( 'resize', onResize );\n\t\treturn () => {\n\t\t\tnodeWindow.removeEventListener( 'resize', onResize );\n\t\t};\n\t}, [] );\n\n\tconst [ windowInnerWidth, setWindowInnerWidth ] = useState();\n\n\tconst windowResizeRef = useRefEffect( ( node ) => {\n\t\tconst nodeWindow = node.ownerDocument.defaultView;\n\n\t\tsetWindowInnerWidth( nodeWindow.innerWidth );\n\t\tconst onResize = () => {\n\t\t\tsetWindowInnerWidth( nodeWindow.innerWidth );\n\t\t};\n\t\tnodeWindow.addEventListener( 'resize', onResize );\n\t\treturn () => {\n\t\t\tnodeWindow.removeEventListener( 'resize', onResize );\n\t\t};\n\t}, [] );\n\n\tconst isZoomedOut = scale !== 1;\n\n\tuseEffect( () => {\n\t\tif ( ! isZoomedOut ) {\n\t\t\tprevContainerWidthRef.current = containerWidth;\n\t\t}\n\t}, [ containerWidth, isZoomedOut ] );\n\n\tconst disabledRef = useDisabled( { isDisabled: ! readonly } );\n\tconst bodyRef = useMergeRefs( [\n\t\tuseBubbleEvents( iframeDocument ),\n\t\tcontentRef,\n\t\tclearerRef,\n\t\twritingFlowRef,\n\t\tdisabledRef,\n\t\t// Avoid resize listeners when not needed, these will trigger\n\t\t// unnecessary re-renders when animating the iframe width, or when\n\t\t// expanding preview iframes.\n\t\tisZoomedOut ? iframeResizeRef : null,\n\t] );\n\n\t// Correct doctype is required to enable rendering in standards\n\t// mode. Also preload the styles to avoid a flash of unstyled\n\t// content.\n\tconst html = `\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t${ styles }\n\t\t${ scripts }\n\t\n\t\n\t\t\n\t\n`;\n\n\tconst [ src, cleanup ] = useMemo( () => {\n\t\tconst _src = URL.createObjectURL(\n\t\t\tnew window.Blob( [ html ], { type: 'text/html' } )\n\t\t);\n\t\treturn [ _src, () => URL.revokeObjectURL( _src ) ];\n\t}, [ html ] );\n\n\tuseEffect( () => cleanup, [ cleanup ] );\n\n\tuseEffect( () => {\n\t\tif ( ! iframeDocument || ! isZoomedOut ) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframeDocument.documentElement.classList.add( 'is-zoomed-out' );\n\n\t\tconst maxWidth = 750;\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-scale',\n\t\t\tscale === 'default'\n\t\t\t\t? Math.min( containerWidth, maxWidth ) /\n\t\t\t\t\t\tprevContainerWidthRef.current\n\t\t\t\t: scale\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-frame-size',\n\t\t\ttypeof frameSize === 'number' ? `${ frameSize }px` : frameSize\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-content-height',\n\t\t\t`${ contentHeight }px`\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-inner-height',\n\t\t\t`${ iframeWindowInnerHeight }px`\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-container-width',\n\t\t\t`${ containerWidth }px`\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-prev-container-width',\n\t\t\t`${ prevContainerWidthRef.current }px`\n\t\t);\n\n\t\treturn () => {\n\t\t\tiframeDocument.documentElement.classList.remove( 'is-zoomed-out' );\n\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-scale'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-frame-size'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-content-height'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-inner-height'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-container-width'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-prev-container-width'\n\t\t\t);\n\t\t};\n\t}, [\n\t\tscale,\n\t\tframeSize,\n\t\tiframeDocument,\n\t\tiframeWindowInnerHeight,\n\t\tcontentHeight,\n\t\tcontainerWidth,\n\t\twindowInnerWidth,\n\t\tisZoomedOut,\n\t] );\n\n\t// Make sure to not render the before and after focusable div elements in view\n\t// mode. They're only needed to capture focus in edit mode.\n\tconst shouldRenderFocusCaptureElements = tabIndex >= 0 && ! isPreviewMode;\n\n\tconst iframe = (\n\t\t<>\n\t\t\t{ shouldRenderFocusCaptureElements && before }\n\t\t\t{ /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */ }\n\t\t\t {\n\t\t\t\t\tif ( props.onKeyDown ) {\n\t\t\t\t\t\tprops.onKeyDown( event );\n\t\t\t\t\t}\n\t\t\t\t\t// If the event originates from inside the iframe, it means\n\t\t\t\t\t// it bubbled through the portal, but only with React\n\t\t\t\t\t// events. We need to to bubble native events as well,\n\t\t\t\t\t// though by doing so we also trigger another React event,\n\t\t\t\t\t// so we need to stop the propagation of this event to avoid\n\t\t\t\t\t// duplication.\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.currentTarget.ownerDocument !==\n\t\t\t\t\t\tevent.target.ownerDocument\n\t\t\t\t\t) {\n\t\t\t\t\t\t// We should only stop propagation of the React event,\n\t\t\t\t\t\t// the native event should further bubble inside the\n\t\t\t\t\t\t// iframe to the document and window.\n\t\t\t\t\t\t// Alternatively, we could consider redispatching the\n\t\t\t\t\t\t// native event in the iframe.\n\t\t\t\t\t\tconst { stopPropagation } = event.nativeEvent;\n\t\t\t\t\t\tevent.nativeEvent.stopPropagation = () => {};\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.nativeEvent.stopPropagation = stopPropagation;\n\t\t\t\t\t\tbubbleEvent(\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\twindow.KeyboardEvent,\n\t\t\t\t\t\t\tevent.currentTarget\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ iframeDocument &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t// We want to prevent React events from bubbling throught the iframe\n\t\t\t\t\t\t// we bubble these manually.\n\t\t\t\t\t\t/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ contentResizeListener }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t,\n\t\t\t\t\t\tiframeDocument.documentElement\n\t\t\t\t\t) }\n\t\t\t\n\t\t\t{ shouldRenderFocusCaptureElements && after }\n\t\t\n\t);\n\n\treturn (\n\t\t
\n\t\t\t{ containerResizeListener }\n\t\t\t\n\t\t\t\t{ iframe }\n\t\t\t
\n\t\t
\n\t);\n}\n\nfunction IframeIfReady( props, ref ) {\n\tconst isInitialised = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().__internalIsInitialized,\n\t\t[]\n\t);\n\n\t// We shouldn't render the iframe until the editor settings are initialised.\n\t// The initial settings are needed to get the styles for the srcDoc, which\n\t// cannot be changed after the iframe is mounted. srcDoc is used to to set\n\t// the initial iframe HTML, which is required to avoid a flash of unstyled\n\t// content.\n\tif ( ! isInitialised ) {\n\t\treturn null;\n\t}\n\n\treturn \n\t\t\n\t);\n}\n\nexport default function AutoBlockPreview( props ) {\n\tconst [ containerResizeListener, { width: containerWidth } ] =\n\t\tuseResizeObserver();\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t{ containerResizeListener }\n\t\t\t
\n\t\t\t
\n\t\t\t\t{ !! containerWidth && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useDisabled, useMergeRefs } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { memo, useMemo } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { ExperimentalBlockEditorProvider } from '../provider';\nimport AutoHeightBlockPreview from './auto';\nimport EditorStyles from '../editor-styles';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockListItems } from '../block-list';\n\nconst EMPTY_ADDITIONAL_STYLES = [];\n\nexport function BlockPreview( {\n\tblocks,\n\tviewportWidth = 1200,\n\tminHeight,\n\tadditionalStyles = EMPTY_ADDITIONAL_STYLES,\n\t// Deprecated props:\n\t__experimentalMinHeight,\n\t__experimentalPadding,\n} ) {\n\tif ( __experimentalMinHeight ) {\n\t\tminHeight = __experimentalMinHeight;\n\t\tdeprecated( 'The __experimentalMinHeight prop', {\n\t\t\tsince: '6.2',\n\t\t\tversion: '6.4',\n\t\t\talternative: 'minHeight',\n\t\t} );\n\t}\n\tif ( __experimentalPadding ) {\n\t\tadditionalStyles = [\n\t\t\t...additionalStyles,\n\t\t\t{ css: `body { padding: ${ __experimentalPadding }px; }` },\n\t\t];\n\t\tdeprecated( 'The __experimentalPadding prop of BlockPreview', {\n\t\t\tsince: '6.2',\n\t\t\tversion: '6.4',\n\t\t\talternative: 'additionalStyles',\n\t\t} );\n\t}\n\n\tconst originalSettings = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings(),\n\t\t[]\n\t);\n\tconst settings = useMemo(\n\t\t() => ( {\n\t\t\t...originalSettings,\n\t\t\tfocusMode: false, // Disable \"Spotlight mode\".\n\t\t\t__unstableIsPreviewMode: true,\n\t\t} ),\n\t\t[ originalSettings ]\n\t);\n\tconst renderedBlocks = useMemo(\n\t\t() => ( Array.isArray( blocks ) ? blocks : [ blocks ] ),\n\t\t[ blocks ]\n\t);\n\n\tif ( ! blocks || blocks.length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\n/**\n * BlockPreview renders a preview of a block or array of blocks.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-preview/README.md\n *\n * @param {Object} preview options for how the preview should be shown\n * @param {Array|Object} preview.blocks A block instance (object) or an array of blocks to be previewed.\n * @param {number} preview.viewportWidth Width of the preview container in pixels. Controls at what size the blocks will be rendered inside the preview. Default: 700.\n *\n * @return {Component} The component to be rendered.\n */\nexport default memo( BlockPreview );\n\n/**\n * This hook is used to lightly mark an element as a block preview wrapper\n * element. Call this hook and pass the returned props to the element to mark as\n * a block preview wrapper, automatically rendering inner blocks as children. If\n * you define a ref for the element, it is important to pass the ref to this\n * hook, which the hook in turn will pass to the component through the props it\n * returns. Optionally, you can also pass any other props through this hook, and\n * they will be merged and returned.\n *\n * @param {Object} options Preview options.\n * @param {WPBlock[]} options.blocks Block objects.\n * @param {Object} options.props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options.layout Layout settings to be used in the preview.\n */\nexport function useBlockPreview( { blocks, props = {}, layout } ) {\n\tconst originalSettings = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings(),\n\t\t[]\n\t);\n\tconst settings = useMemo(\n\t\t() => ( {\n\t\t\t...originalSettings,\n\t\t\tstyles: undefined, // Clear styles included by the parent settings, as they are already output by the parent's EditorStyles.\n\t\t\tfocusMode: false, // Disable \"Spotlight mode\".\n\t\t\t__unstableIsPreviewMode: true,\n\t\t} ),\n\t\t[ originalSettings ]\n\t);\n\tconst disabledRef = useDisabled();\n\tconst ref = useMergeRefs( [ props.ref, disabledRef ] );\n\tconst renderedBlocks = useMemo(\n\t\t() => ( Array.isArray( blocks ) ? blocks : [ blocks ] ),\n\t\t[ blocks ]\n\t);\n\n\tconst children = (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n\n\treturn {\n\t\t...props,\n\t\tref,\n\t\tclassName: clsx(\n\t\t\tprops.className,\n\t\t\t'block-editor-block-preview__live-content',\n\t\t\t'components-disabled'\n\t\t),\n\t\tchildren: blocks?.length ? children : null,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tisReusableBlock,\n\tcreateBlock,\n\tgetBlockFromExample,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockCard from '../block-card';\nimport BlockPreview from '../block-preview';\n\nfunction InserterPreviewPanel( { item } ) {\n\tconst { name, title, icon, description, initialAttributes, example } = item;\n\tconst isReusable = isReusableBlock( item );\n\tconst blocks = useMemo( () => {\n\t\tif ( ! example ) {\n\t\t\treturn createBlock( name, initialAttributes );\n\t\t}\n\t\treturn getBlockFromExample( name, {\n\t\t\tattributes: {\n\t\t\t\t...example.attributes,\n\t\t\t\t...initialAttributes,\n\t\t\t},\n\t\t\tinnerBlocks: example.innerBlocks,\n\t\t} );\n\t}, [ name, example, initialAttributes ] );\n\t// Same as height of BlockPreviewPanel.\n\tconst previewHeight = 144;\n\tconst sidebarWidth = 280;\n\tconst viewportWidth = example?.viewportWidth ?? 500;\n\tconst scale = sidebarWidth / viewportWidth;\n\tconst minHeight =\n\t\tscale !== 0 && scale < 1 && previewHeight\n\t\t\t? previewHeight / scale\n\t\t\t: previewHeight;\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t{ isReusable || example ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t
\n\t\t\t\t\t\t{ __( 'No preview available.' ) }\n\t\t\t\t\t
\n\t\t\t\t) }\n\t\t\t
\n\t\t\t{ ! isReusable && (\n\t\t\t\t\n\t\t\t) }\n\t\t
\n\t);\n}\n\nexport default InserterPreviewPanel;\n","/**\n * WordPress dependencies\n */\nimport { Button, Composite } from '@wordpress/components';\nimport { forwardRef } from '@wordpress/element';\n\nfunction InserterListboxItem(\n\t{ isFirst, as: Component, children, ...props },\n\tref\n) {\n\treturn (\n\t\t {\n\t\t\t\tconst propsWithTabIndex = {\n\t\t\t\t\t...htmlProps,\n\t\t\t\t\ttabIndex: isFirst ? 0 : htmlProps.tabIndex,\n\t\t\t\t};\n\t\t\t\tif ( Component ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif ( typeof children === 'function' ) {\n\t\t\t\t\treturn children( propsWithTabIndex );\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( InserterListboxItem );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst dragHandle = (\n\t\n\t\t\n\t\n);\n\nexport default dragHandle;\n","/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { Flex, FlexItem } from '@wordpress/components';\nimport { dragHandle } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\n\nexport default function BlockDraggableChip( {\n\tcount,\n\ticon,\n\tisPattern,\n\tfadeWhenDisabled,\n} ) {\n\tconst patternLabel = isPattern && __( 'Pattern' );\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ icon ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpatternLabel ||\n\t\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t\t/* translators: %d: Number of blocks. */\n\t\t\t\t\t\t\t\t_n( '%d block', '%d blocks', count ),\n\t\t\t\t\t\t\t\tcount\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ fadeWhenDisabled && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Draggable } from '@wordpress/components';\nimport {\n\tcreateBlock,\n\tserialize,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggableChip from '../block-draggable/draggable-chip';\nimport { INSERTER_PATTERN_TYPES } from '../inserter/block-patterns-tab/utils';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst InserterDraggableBlocks = ( {\n\tisEnabled,\n\tblocks,\n\ticon,\n\tchildren,\n\tpattern,\n} ) => {\n\tconst transferData = {\n\t\ttype: 'inserter',\n\t\tblocks,\n\t};\n\n\tconst blockTypeIcon = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockType } = select( blocksStore );\n\t\t\treturn (\n\t\t\t\tblocks.length === 1 && getBlockType( blocks[ 0 ].name )?.icon\n\t\t\t);\n\t\t},\n\t\t[ blocks ]\n\t);\n\n\tconst { startDragging, stopDragging } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tif ( ! isEnabled ) {\n\t\treturn children( {\n\t\t\tdraggable: false,\n\t\t\tonDragStart: undefined,\n\t\t\tonDragEnd: undefined,\n\t\t} );\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tstartDragging();\n\t\t\t\tconst parsedBlocks =\n\t\t\t\t\tpattern?.type === INSERTER_PATTERN_TYPES.user &&\n\t\t\t\t\tpattern?.syncStatus !== 'unsynced'\n\t\t\t\t\t\t? [ createBlock( 'core/block', { ref: pattern.id } ) ]\n\t\t\t\t\t\t: blocks;\n\t\t\t\tevent.dataTransfer.setData(\n\t\t\t\t\t'text/html',\n\t\t\t\t\tserialize( parsedBlocks )\n\t\t\t\t);\n\t\t\t} }\n\t\t\tonDragEnd={ () => {\n\t\t\t\tstopDragging();\n\t\t\t} }\n\t\t\t__experimentalDragComponent={\n\t\t\t\t\n\t\t\t}\n\t\t>\n\t\t\t{ ( { onDraggableStart, onDraggableEnd } ) => {\n\t\t\t\treturn children( {\n\t\t\t\t\tdraggable: true,\n\t\t\t\t\tonDragStart: onDraggableStart,\n\t\t\t\t\tonDragEnd: onDraggableEnd,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\n\t);\n};\n\nexport default InserterDraggableBlocks;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMemo, useRef, memo } from '@wordpress/element';\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { __experimentalTruncate as Truncate } from '@wordpress/components';\nimport { ENTER, isAppleOS } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { InserterListboxItem } from '../inserter-listbox';\nimport InserterDraggableBlocks from '../inserter-draggable-blocks';\n\nfunction InserterListItem( {\n\tclassName,\n\tisFirst,\n\titem,\n\tonSelect,\n\tonHover,\n\tisDraggable,\n\t...props\n} ) {\n\tconst isDraggingRef = useRef( false );\n\tconst itemIconStyle = item.icon\n\t\t? {\n\t\t\t\tbackgroundColor: item.icon.background,\n\t\t\t\tcolor: item.icon.foreground,\n\t\t }\n\t\t: {};\n\tconst blocks = useMemo(\n\t\t() => [\n\t\t\tcreateBlock(\n\t\t\t\titem.name,\n\t\t\t\titem.initialAttributes,\n\t\t\t\tcreateBlocksFromInnerBlocksTemplate( item.innerBlocks )\n\t\t\t),\n\t\t],\n\t\t[ item.name, item.initialAttributes, item.innerBlocks ]\n\t);\n\n\tconst isSynced =\n\t\t( isReusableBlock( item ) && item.syncStatus !== 'unsynced' ) ||\n\t\tisTemplatePart( item );\n\n\treturn (\n\t\t\n\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t {\n\t\t\t\t\t\tisDraggingRef.current = true;\n\t\t\t\t\t\tif ( onDragStart ) {\n\t\t\t\t\t\t\tonHover( null );\n\t\t\t\t\t\t\tonDragStart( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tonDragEnd={ ( event ) => {\n\t\t\t\t\t\tisDraggingRef.current = false;\n\t\t\t\t\t\tif ( onDragEnd ) {\n\t\t\t\t\t\t\tonDragEnd( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonSelect(\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tisAppleOS() ? event.metaKey : event.ctrlKey\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tonHover( null );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\t\t\t\tconst { keyCode } = event;\n\t\t\t\t\t\t\tif ( keyCode === ENTER ) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tonSelect(\n\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\tisAppleOS() ? event.metaKey : event.ctrlKey\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tonHover( null );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonMouseEnter={ () => {\n\t\t\t\t\t\t\tif ( isDraggingRef.current ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonHover( item );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonMouseLeave={ () => onHover( null ) }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default memo( InserterListItem );\n","/**\n * WordPress dependencies\n */\nimport { forwardRef, useEffect, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\n\nfunction InserterListboxGroup( props, ref ) {\n\tconst [ shouldSpeak, setShouldSpeak ] = useState( false );\n\n\tuseEffect( () => {\n\t\tif ( shouldSpeak ) {\n\t\t\tspeak(\n\t\t\t\t__( 'Use left and right arrow keys to move through blocks' )\n\t\t\t);\n\t\t}\n\t}, [ shouldSpeak ] );\n\n\treturn (\n\t\t {\n\t\t\t\tsetShouldSpeak( true );\n\t\t\t} }\n\t\t\tonBlur={ ( event ) => {\n\t\t\t\tconst focusingOutsideGroup = ! event.currentTarget.contains(\n\t\t\t\t\tevent.relatedTarget\n\t\t\t\t);\n\t\t\t\tif ( focusingOutsideGroup ) {\n\t\t\t\t\tsetShouldSpeak( false );\n\t\t\t\t}\n\t\t\t} }\n\t\t\t{ ...props }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( InserterListboxGroup );\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport { Composite } from '@wordpress/components';\n\nfunction InserterListboxRow( props, ref ) {\n\treturn ;\n}\n\nexport default forwardRef( InserterListboxRow );\n","/**\n * WordPress dependencies\n */\nimport { getBlockMenuDefaultClassName } from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport InserterListItem from '../inserter-list-item';\nimport { InserterListboxGroup, InserterListboxRow } from '../inserter-listbox';\n\nfunction chunk( array, size ) {\n\tconst chunks = [];\n\tfor ( let i = 0, j = array.length; i < j; i += size ) {\n\t\tchunks.push( array.slice( i, i + size ) );\n\t}\n\treturn chunks;\n}\n\nfunction BlockTypesList( {\n\titems = [],\n\tonSelect,\n\tonHover = () => {},\n\tchildren,\n\tlabel,\n\tisDraggable = true,\n} ) {\n\tconst className = 'block-editor-block-types-list';\n\tconst listId = useInstanceId( BlockTypesList, className );\n\treturn (\n\t\t\n\t\t\t{ chunk( items, 3 ).map( ( row, i ) => (\n\t\t\t\t\n\t\t\t\t\t{ row.map( ( item, j ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default BlockTypesList;\n","/**\n * WordPress dependencies\n */\nimport { Icon } from '@wordpress/components';\n\nfunction InserterPanel( { title, icon, children } ) {\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t{ title }\n\t\t\t\t

\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t{ children }\n\t\t\t
\n\t\t\n\t);\n}\n\nexport default InserterPanel;\n","/**\n * WordPress dependencies\n */\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n\tparse,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { withRootClientIdOptionKey } from '../../../store/utils';\n\n/**\n * Retrieves the block types inserter state.\n *\n * @param {string=} rootClientId Insertion's root client ID.\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {boolean} isQuick\n * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)\n */\nconst useBlockTypesState = ( rootClientId, onInsert, isQuick ) => {\n\tconst options = useMemo(\n\t\t() => ( { [ withRootClientIdOptionKey ]: ! isQuick } ),\n\t\t[ isQuick ]\n\t);\n\tconst [ items ] = useSelect(\n\t\t( select ) => [\n\t\t\tselect( blockEditorStore ).getInserterItems(\n\t\t\t\trootClientId,\n\t\t\t\toptions\n\t\t\t),\n\t\t],\n\t\t[ rootClientId, options ]\n\t);\n\n\tconst [ categories, collections ] = useSelect( ( select ) => {\n\t\tconst { getCategories, getCollections } = select( blocksStore );\n\t\treturn [ getCategories(), getCollections() ];\n\t}, [] );\n\n\tconst onSelectItem = useCallback(\n\t\t(\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tinnerBlocks,\n\t\t\t\tsyncStatus,\n\t\t\t\tcontent,\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t},\n\t\t\tshouldFocusBlock\n\t\t) => {\n\t\t\tconst insertedBlock =\n\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t? parse( content, {\n\t\t\t\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t\t\t } )\n\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tinitialAttributes,\n\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate( innerBlocks )\n\t\t\t\t\t );\n\n\t\t\tonInsert(\n\t\t\t\tinsertedBlock,\n\t\t\t\tundefined,\n\t\t\t\tshouldFocusBlock,\n\t\t\t\t_rootClientId\n\t\t\t);\n\t\t},\n\t\t[ onInsert ]\n\t);\n\n\treturn [ items, categories, collections, onSelectItem ];\n};\n\nexport default useBlockTypesState;\n","/**\n * WordPress dependencies\n */\nimport { Composite } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\n\nexport { default as InserterListboxGroup } from './group';\nexport { default as InserterListboxRow } from './row';\nexport { default as InserterListboxItem } from './item';\n\nfunction InserterListbox( { children } ) {\n\treturn (\n\t\t }>\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default InserterListbox;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Icon, blockDefault } from '@wordpress/icons';\n\nfunction InserterNoResults() {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t

{ __( 'No results found.' ) }

\n\t\t
\n\t);\n}\n\nexport default InserterNoResults;\n","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { useMemo, useEffect, forwardRef } from '@wordpress/element';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport InserterListbox from '../inserter-listbox';\nimport { orderBy } from '../../utils/sorting';\nimport InserterNoResults from './no-results';\n\nconst getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];\n\nconst MAX_SUGGESTED_ITEMS = 6;\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation and rerendering the component.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nexport function BlockTypesTabPanel( {\n\titems,\n\tcollections,\n\tcategories,\n\tonSelectItem,\n\tonHover,\n\tshowMostUsedBlocks,\n\tclassName,\n} ) {\n\tconst suggestedItems = useMemo( () => {\n\t\treturn orderBy( items, 'frecency', 'desc' ).slice(\n\t\t\t0,\n\t\t\tMAX_SUGGESTED_ITEMS\n\t\t);\n\t}, [ items ] );\n\n\tconst uncategorizedItems = useMemo( () => {\n\t\treturn items.filter( ( item ) => ! item.category );\n\t}, [ items ] );\n\n\tconst itemsPerCollection = useMemo( () => {\n\t\t// Create a new Object to avoid mutating collection.\n\t\tconst result = { ...collections };\n\t\tObject.keys( collections ).forEach( ( namespace ) => {\n\t\t\tresult[ namespace ] = items.filter(\n\t\t\t\t( item ) => getBlockNamespace( item ) === namespace\n\t\t\t);\n\t\t\tif ( result[ namespace ].length === 0 ) {\n\t\t\t\tdelete result[ namespace ];\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ items, collections ] );\n\n\t// Hide block preview on unmount.\n\tuseEffect( () => () => onHover( null ), [] );\n\n\t/**\n\t * The inserter contains a big number of blocks and opening it is a costful operation.\n\t * The rendering is the most costful part of it, in order to improve the responsiveness\n\t * of the \"opening\" action, these lazy lists allow us to render the inserter category per category,\n\t * once all the categories are rendered, we start rendering the collections and the uncategorized block types.\n\t */\n\tconst currentlyRenderedCategories = useAsyncList( categories );\n\tconst didRenderAllCategories =\n\t\tcategories.length === currentlyRenderedCategories.length;\n\n\t// Async List requires an array.\n\tconst collectionEntries = useMemo( () => {\n\t\treturn Object.entries( collections );\n\t}, [ collections ] );\n\tconst currentlyRenderedCollections = useAsyncList(\n\t\tdidRenderAllCategories ? collectionEntries : EMPTY_ARRAY\n\t);\n\n\treturn (\n\t\t
\n\t\t\t{ showMostUsedBlocks &&\n\t\t\t\t// Only show the most used blocks if the total amount of block\n\t\t\t\t// is larger than 1 row, otherwise it is not so useful.\n\t\t\t\titems.length > 3 &&\n\t\t\t\t!! suggestedItems.length && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t{ currentlyRenderedCategories.map( ( category ) => {\n\t\t\t\tconst categoryItems = items.filter(\n\t\t\t\t\t( item ) => item.category === category.slug\n\t\t\t\t);\n\t\t\t\tif ( ! categoryItems || ! categoryItems.length ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\n\t\t\t{ didRenderAllCategories && uncategorizedItems.length > 0 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ currentlyRenderedCollections.map(\n\t\t\t\t( [ namespace, collection ] ) => {\n\t\t\t\t\tconst collectionItems = itemsPerCollection[ namespace ];\n\t\t\t\t\tif ( ! collectionItems || ! collectionItems.length ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t) }\n\t\t
\n\t);\n}\n\nexport function BlockTypesTab(\n\t{ rootClientId, onInsert, onHover, showMostUsedBlocks },\n\tref\n) {\n\tconst [ items, categories, collections, onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tif ( ! items.length ) {\n\t\treturn ;\n\t}\n\n\tconst itemsForCurrentRoot = [];\n\tconst itemsRemaining = [];\n\n\tfor ( const item of items ) {\n\t\t// Skip reusable blocks, they moved to the patterns tab.\n\t\tif ( item.category === 'reusable' ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( rootClientId && item.rootClientId === rootClientId ) {\n\t\t\titemsForCurrentRoot.push( item );\n\t\t} else {\n\t\t\titemsRemaining.push( item );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{ !! itemsForCurrentRoot.length && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport default forwardRef( BlockTypesTab );\n","/**\n * WordPress dependencies\n */\nimport { Button, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nfunction PatternCategoriesList( {\n\tselectedCategory,\n\tpatternCategories,\n\tonClickCategory,\n} ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__sidebar';\n\treturn (\n\t\t
\n\t\t\t{ patternCategories.map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonClickCategory( name );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t
\n\t);\n}\n\nfunction PatternsExplorerSearch( { searchValue, setSearchValue } ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__search';\n\treturn (\n\t\t
\n\t\t\t\n\t\t
\n\t);\n}\n\nfunction PatternExplorerSidebar( {\n\tselectedCategory,\n\tpatternCategories,\n\tonClickCategory,\n\tsearchValue,\n\tsetSearchValue,\n} ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__sidebar';\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t{ ! searchValue && (\n\t\t\t\t\n\t\t\t) }\n\t\t
\n\t);\n}\n\nexport default PatternExplorerSidebar;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n\t__experimentalText as Text,\n\tButton,\n} from '@wordpress/components';\nimport { __, _x, _n, sprintf } from '@wordpress/i18n';\n\nexport default function Pagination( {\n\tcurrentPage,\n\tnumPages,\n\tchangePage,\n\ttotalItems,\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ sprintf(\n\t\t\t\t\t// translators: %s: Total number of patterns.\n\t\t\t\t\t_n( '%s item', '%s items', totalItems ),\n\t\t\t\t\ttotalItems\n\t\t\t\t) }\n\t\t\t\n\n\t\t\t{ numPages > 1 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t changePage( 1 ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === 1 }\n\t\t\t\t\t\t\taria-label={ __( 'First page' ) }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t«\n\t\t\t\t\t\t\n\t\t\t\t\t\t changePage( currentPage - 1 ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === 1 }\n\t\t\t\t\t\t\taria-label={ __( 'Previous page' ) }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %1$s: Current page number, %2$s: Total number of pages.\n\t\t\t\t\t\t\t_x( '%1$s of %2$s', 'paging' ),\n\t\t\t\t\t\t\tcurrentPage,\n\t\t\t\t\t\t\tnumPages\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t changePage( currentPage + 1 ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === numPages }\n\t\t\t\t\t\t\taria-label={ __( 'Next page' ) }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t changePage( numPages ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === numPages }\n\t\t\t\t\t\t\taria-label={ __( 'Last page' ) }\n\t\t\t\t\t\t\tsize=\"default\"\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t»\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { cloneBlock } from '@wordpress/blocks';\nimport { useEffect, useState, forwardRef, useMemo } from '@wordpress/element';\nimport {\n\tComposite,\n\tVisuallyHidden,\n\tTooltip,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport { Icon, symbol } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockPreview from '../block-preview';\nimport InserterDraggableBlocks from '../inserter-draggable-blocks';\nimport BlockPatternsPaging from '../block-patterns-paging';\nimport { INSERTER_PATTERN_TYPES } from '../inserter/block-patterns-tab/utils';\n\nconst WithToolTip = ( { showTooltip, title, children } ) => {\n\tif ( showTooltip ) {\n\t\treturn { children };\n\t}\n\treturn <>{ children };\n};\n\nfunction BlockPattern( {\n\tid,\n\tisDraggable,\n\tpattern,\n\tonClick,\n\tonHover,\n\tshowTitle = true,\n\tshowTooltip,\n\tcategory,\n} ) {\n\tconst [ isDragging, setIsDragging ] = useState( false );\n\tconst { blocks, viewportWidth } = pattern;\n\tconst instanceId = useInstanceId( BlockPattern );\n\tconst descriptionId = `block-editor-block-patterns-list__item-description-${ instanceId }`;\n\n\t// When we have a selected category and the pattern is draggable, we need to update the\n\t// pattern's categories in metadata to only contain the selected category, and pass this to\n\t// InserterDraggableBlocks component. We do that because we use this information for pattern\n\t// shuffling and it makes more sense to show only the ones from the initially selected category during insertion.\n\tconst patternBlocks = useMemo( () => {\n\t\tif ( ! category || ! isDraggable ) {\n\t\t\treturn blocks;\n\t\t}\n\t\treturn ( blocks ?? [] ).map( ( block ) => {\n\t\t\tconst clonedBlock = cloneBlock( block );\n\t\t\tif (\n\t\t\t\tclonedBlock.attributes.metadata?.categories?.includes(\n\t\t\t\t\tcategory\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tclonedBlock.attributes.metadata.categories = [ category ];\n\t\t\t}\n\t\t\treturn clonedBlock;\n\t\t} );\n\t}, [ blocks, isDraggable, category ] );\n\n\treturn (\n\t\t\n\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t {\n\t\t\t\t\t\tsetIsDragging( true );\n\t\t\t\t\t\tif ( onDragStart ) {\n\t\t\t\t\t\t\tonHover?.( null );\n\t\t\t\t\t\t\tonDragStart( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tonDragEnd={ ( event ) => {\n\t\t\t\t\t\tsetIsDragging( false );\n\t\t\t\t\t\tif ( onDragEnd ) {\n\t\t\t\t\t\t\tonDragEnd( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tonClick( pattern, blocks );\n\t\t\t\t\t\t\t\tonHover?.( null );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonMouseEnter={ () => {\n\t\t\t\t\t\t\t\tif ( isDragging ) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonHover?.( pattern );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonMouseLeave={ () => onHover?.( null ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{ showTitle && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ pattern.type ===\n\t\t\t\t\t\t\t\t\t\tINSERTER_PATTERN_TYPES.user &&\n\t\t\t\t\t\t\t\t\t\t! pattern.syncStatus && (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ ( ! showTooltip ||\n\t\t\t\t\t\t\t\t\t\tpattern.type ===\n\t\t\t\t\t\t\t\t\t\t\tINSERTER_PATTERN_TYPES.user ) && (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{ pattern.title }\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t\t{ !! pattern.description && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ pattern.description }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction BlockPatternPlaceholder() {\n\treturn (\n\t\t
\n\t);\n}\n\nfunction BlockPatternsList(\n\t{\n\t\tisDraggable,\n\t\tblockPatterns,\n\t\tshownPatterns,\n\t\tonHover,\n\t\tonClickPattern,\n\t\torientation,\n\t\tlabel = __( 'Block patterns' ),\n\t\tcategory,\n\t\tshowTitle = true,\n\t\tshowTitlesAsTooltip,\n\t\tpagingProps,\n\t},\n\tref\n) {\n\tconst [ activeCompositeId, setActiveCompositeId ] = useState( undefined );\n\n\tuseEffect( () => {\n\t\t// Reset the active composite item whenever the available patterns change,\n\t\t// to make sure that Composite widget can receive focus correctly when its\n\t\t// composite items change. The first composite item will receive focus.\n\t\tconst firstCompositeItemId = blockPatterns.find( ( pattern ) =>\n\t\t\tshownPatterns.includes( pattern )\n\t\t)?.name;\n\t\tsetActiveCompositeId( firstCompositeItemId );\n\t}, [ shownPatterns, blockPatterns ] );\n\n\treturn (\n\t\t\n\t\t\t{ blockPatterns.map( ( pattern ) => {\n\t\t\t\tconst isShown = shownPatterns.includes( pattern );\n\t\t\t\treturn isShown ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ pagingProps && }\n\t\t\n\t);\n}\n\nexport default forwardRef( BlockPatternsList );\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { isUnmodifiedDefaultBlock } from '@wordpress/blocks';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\nfunction getIndex( {\n\tdestinationRootClientId,\n\tdestinationIndex,\n\trootClientId,\n\tregistry,\n} ) {\n\tif ( rootClientId === destinationRootClientId ) {\n\t\treturn destinationIndex;\n\t}\n\tconst parents = [\n\t\t'',\n\t\t...registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockParents( destinationRootClientId ),\n\t\tdestinationRootClientId,\n\t];\n\tconst parentIndex = parents.indexOf( rootClientId );\n\tif ( parentIndex !== -1 ) {\n\t\treturn (\n\t\t\tregistry\n\t\t\t\t.select( blockEditorStore )\n\t\t\t\t.getBlockIndex( parents[ parentIndex + 1 ] ) + 1\n\t\t);\n\t}\n\treturn registry.select( blockEditorStore ).getBlockOrder( rootClientId )\n\t\t.length;\n}\n\n/**\n * @typedef WPInserterConfig\n *\n * @property {string=} rootClientId If set, insertion will be into the\n * block with this ID.\n * @property {number=} insertionIndex If set, insertion will be into this\n * explicit position.\n * @property {string=} clientId If set, insertion will be after the\n * block with this ID.\n * @property {boolean=} isAppender Whether the inserter is an appender\n * or not.\n * @property {Function=} onSelect Called after insertion.\n */\n\n/**\n * Returns the insertion point state given the inserter config.\n *\n * @param {WPInserterConfig} config Inserter Config.\n * @return {Array} Insertion Point State (rootClientID, onInsertBlocks and onToggle).\n */\nfunction useInsertionPoint( {\n\trootClientId = '',\n\tinsertionIndex,\n\tclientId,\n\tisAppender,\n\tonSelect,\n\tshouldFocusBlock = true,\n\tselectBlockOnInsert = true,\n} ) {\n\tconst registry = useRegistry();\n\tconst { getSelectedBlock } = useSelect( blockEditorStore );\n\tconst { destinationRootClientId, destinationIndex } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockOrder,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\n\t\t\tlet _destinationRootClientId = rootClientId;\n\t\t\tlet _destinationIndex;\n\n\t\t\tif ( insertionIndex !== undefined ) {\n\t\t\t\t// Insert into a specific index.\n\t\t\t\t_destinationIndex = insertionIndex;\n\t\t\t} else if ( clientId ) {\n\t\t\t\t// Insert after a specific client ID.\n\t\t\t\t_destinationIndex = getBlockIndex( clientId );\n\t\t\t} else if ( ! isAppender && selectedBlockClientId ) {\n\t\t\t\t_destinationRootClientId = getBlockRootClientId(\n\t\t\t\t\tselectedBlockClientId\n\t\t\t\t);\n\t\t\t\t_destinationIndex = getBlockIndex( selectedBlockClientId ) + 1;\n\t\t\t} else {\n\t\t\t\t// Insert at the end of the list.\n\t\t\t\t_destinationIndex = getBlockOrder(\n\t\t\t\t\t_destinationRootClientId\n\t\t\t\t).length;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdestinationRootClientId: _destinationRootClientId,\n\t\t\t\tdestinationIndex: _destinationIndex,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId, insertionIndex, clientId, isAppender ]\n\t);\n\n\tconst {\n\t\treplaceBlocks,\n\t\tinsertBlocks,\n\t\tshowInsertionPoint,\n\t\thideInsertionPoint,\n\t\tsetLastFocus,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst onInsertBlocks = useCallback(\n\t\t( blocks, meta, shouldForceFocusBlock = false, _rootClientId ) => {\n\t\t\t// When we are trying to move focus or select a new block on insert, we also\n\t\t\t// need to clear the last focus to avoid the focus being set to the wrong block\n\t\t\t// when tabbing back into the canvas if the block was added from outside the\n\t\t\t// editor canvas.\n\t\t\tif (\n\t\t\t\tshouldForceFocusBlock ||\n\t\t\t\tshouldFocusBlock ||\n\t\t\t\tselectBlockOnInsert\n\t\t\t) {\n\t\t\t\tsetLastFocus( null );\n\t\t\t}\n\n\t\t\tconst selectedBlock = getSelectedBlock();\n\n\t\t\tif (\n\t\t\t\t! isAppender &&\n\t\t\t\tselectedBlock &&\n\t\t\t\tisUnmodifiedDefaultBlock( selectedBlock )\n\t\t\t) {\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tselectedBlock.clientId,\n\t\t\t\t\tblocks,\n\t\t\t\t\tnull,\n\t\t\t\t\tshouldFocusBlock || shouldForceFocusBlock ? 0 : null,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tblocks,\n\t\t\t\t\tisAppender || _rootClientId === undefined\n\t\t\t\t\t\t? destinationIndex\n\t\t\t\t\t\t: getIndex( {\n\t\t\t\t\t\t\t\tdestinationRootClientId,\n\t\t\t\t\t\t\t\tdestinationIndex,\n\t\t\t\t\t\t\t\trootClientId: _rootClientId,\n\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t } ),\n\t\t\t\t\tisAppender || _rootClientId === undefined\n\t\t\t\t\t\t? destinationRootClientId\n\t\t\t\t\t\t: _rootClientId,\n\t\t\t\t\tselectBlockOnInsert,\n\t\t\t\t\tshouldFocusBlock || shouldForceFocusBlock ? 0 : null,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst blockLength = Array.isArray( blocks ) ? blocks.length : 1;\n\t\t\tconst message = sprintf(\n\t\t\t\t// translators: %d: the name of the block that has been added\n\t\t\t\t_n( '%d block added.', '%d blocks added.', blockLength ),\n\t\t\t\tblockLength\n\t\t\t);\n\t\t\tspeak( message );\n\n\t\t\tif ( onSelect ) {\n\t\t\t\tonSelect( blocks );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tisAppender,\n\t\t\tgetSelectedBlock,\n\t\t\treplaceBlocks,\n\t\t\tinsertBlocks,\n\t\t\tdestinationRootClientId,\n\t\t\tdestinationIndex,\n\t\t\tonSelect,\n\t\t\tshouldFocusBlock,\n\t\t\tselectBlockOnInsert,\n\t\t]\n\t);\n\n\tconst onToggleInsertionPoint = useCallback(\n\t\t( item ) => {\n\t\t\tif ( item?.hasOwnProperty( 'rootClientId' ) ) {\n\t\t\t\tshowInsertionPoint(\n\t\t\t\t\titem.rootClientId,\n\t\t\t\t\tgetIndex( {\n\t\t\t\t\t\tdestinationRootClientId,\n\t\t\t\t\t\tdestinationIndex,\n\t\t\t\t\t\trootClientId: item.rootClientId,\n\t\t\t\t\t\tregistry,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\thideInsertionPoint();\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tshowInsertionPoint,\n\t\t\thideInsertionPoint,\n\t\t\tdestinationRootClientId,\n\t\t\tdestinationIndex,\n\t\t]\n\t);\n\n\treturn [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ];\n}\n\nexport default useInsertionPoint;\n","/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { cloneBlock, createBlock } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { INSERTER_PATTERN_TYPES } from '../block-patterns-tab/utils';\n\n/**\n * Retrieves the block patterns inserter state.\n *\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {string=} rootClientId Insertion's root client ID.\n *\n * @param {string} selectedCategory The selected pattern category.\n * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)\n */\nconst usePatternsState = ( onInsert, rootClientId, selectedCategory ) => {\n\tconst { patternCategories, patterns, userPatternCategories } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst {\n\t\t\t\t__experimentalUserPatternCategories,\n\t\t\t\t__experimentalBlockPatternCategories,\n\t\t\t} = getSettings();\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tuserPatternCategories: __experimentalUserPatternCategories,\n\t\t\t\tpatternCategories: __experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst allCategories = useMemo( () => {\n\t\tconst categories = [ ...patternCategories ];\n\t\tuserPatternCategories?.forEach( ( userCategory ) => {\n\t\t\tif (\n\t\t\t\t! categories.find(\n\t\t\t\t\t( existingCategory ) =>\n\t\t\t\t\t\texistingCategory.name === userCategory.name\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcategories.push( userCategory );\n\t\t\t}\n\t\t} );\n\t\treturn categories;\n\t}, [ patternCategories, userPatternCategories ] );\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback(\n\t\t( pattern, blocks ) => {\n\t\t\tconst patternBlocks =\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user &&\n\t\t\t\tpattern.syncStatus !== 'unsynced'\n\t\t\t\t\t? [ createBlock( 'core/block', { ref: pattern.id } ) ]\n\t\t\t\t\t: blocks;\n\t\t\tonInsert(\n\t\t\t\t( patternBlocks ?? [] ).map( ( block ) => {\n\t\t\t\t\tconst clonedBlock = cloneBlock( block );\n\t\t\t\t\tif (\n\t\t\t\t\t\tclonedBlock.attributes.metadata?.categories?.includes(\n\t\t\t\t\t\t\tselectedCategory\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tclonedBlock.attributes.metadata.categories = [\n\t\t\t\t\t\t\tselectedCategory,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn clonedBlock;\n\t\t\t\t} ),\n\t\t\t\tpattern.name\n\t\t\t);\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: block pattern title. */\n\t\t\t\t\t__( 'Block pattern \"%s\" inserted.' ),\n\t\t\t\t\tpattern.title\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'block-pattern-inserted-notice',\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t[ createSuccessNotice, onInsert, selectedCategory ]\n\t);\n\n\treturn [ patterns, allCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n","/**\n * Locale character mapping rules.\n */\ninterface Locale {\n regexp: RegExp;\n map: Record;\n}\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nconst SUPPORTED_LOCALE: Record = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n az: {\n regexp: /\\u0130/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n lt: {\n regexp: /\\u0049|\\u004A|\\u012E|\\u00CC|\\u00CD|\\u0128/g,\n map: {\n I: \"\\u0069\\u0307\",\n J: \"\\u006A\\u0307\",\n Į: \"\\u012F\\u0307\",\n Ì: \"\\u0069\\u0307\\u0300\",\n Í: \"\\u0069\\u0307\\u0301\",\n Ĩ: \"\\u0069\\u0307\\u0303\",\n },\n },\n};\n\n/**\n * Localized lower case.\n */\nexport function localeLowerCase(str: string, locale: string) {\n const lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang) return lowerCase(str.replace(lang.regexp, (m) => lang.map[m]));\n return lowerCase(str);\n}\n\n/**\n * Lower case as a function.\n */\nexport function lowerCase(str: string) {\n return str.toLowerCase();\n}\n","import { lowerCase } from \"lower-case\";\n\nexport interface Options {\n splitRegexp?: RegExp | RegExp[];\n stripRegexp?: RegExp | RegExp[];\n delimiter?: string;\n transform?: (part: string, index: number, parts: string[]) => string;\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nconst DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n\n// Remove all non-word characters.\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nexport function noCase(input: string, options: Options = {}) {\n const {\n splitRegexp = DEFAULT_SPLIT_REGEXP,\n stripRegexp = DEFAULT_STRIP_REGEXP,\n transform = lowerCase,\n delimiter = \" \",\n } = options;\n\n let result = replace(\n replace(input, splitRegexp, \"$1\\0$2\"),\n stripRegexp,\n \"\\0\"\n );\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input: string, re: RegExp | RegExp[], value: string) {\n if (re instanceof RegExp) return input.replace(re, value);\n return re.reduce((input, re) => input.replace(re, value), input);\n}\n","/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\nimport { noCase } from 'change-case';\n\n// Default search helpers.\nconst defaultGetName = ( item ) => item.name || '';\nconst defaultGetTitle = ( item ) => item.title;\nconst defaultGetDescription = ( item ) => item.description || '';\nconst defaultGetKeywords = ( item ) => item.keywords || [];\nconst defaultGetCategory = ( item ) => item.category;\nconst defaultGetCollection = () => null;\n\n// Normalization regexes\nconst splitRegexp = [\n\t/([\\p{Ll}\\p{Lo}\\p{N}])([\\p{Lu}\\p{Lt}])/gu, // One lowercase or digit, followed by one uppercase.\n\t/([\\p{Lu}\\p{Lt}])([\\p{Lu}\\p{Lt}][\\p{Ll}\\p{Lo}])/gu, // One uppercase followed by one uppercase and one lowercase.\n];\nconst stripRegexp = /(\\p{C}|\\p{P}|\\p{S})+/giu; // Anything that's not a punctuation, symbol or control/format character.\n\n// Normalization cache\nconst extractedWords = new Map();\nconst normalizedStrings = new Map();\n\n/**\n * Extracts words from an input string.\n *\n * @param {string} input The input string.\n *\n * @return {Array} Words, extracted from the input string.\n */\nexport function extractWords( input = '' ) {\n\tif ( extractedWords.has( input ) ) {\n\t\treturn extractedWords.get( input );\n\t}\n\n\tconst result = noCase( input, {\n\t\tsplitRegexp,\n\t\tstripRegexp,\n\t} )\n\t\t.split( ' ' )\n\t\t.filter( Boolean );\n\n\textractedWords.set( input, result );\n\n\treturn result;\n}\n\n/**\n * Sanitizes the search input string.\n *\n * @param {string} input The search input to normalize.\n *\n * @return {string} The normalized search input.\n */\nexport function normalizeString( input = '' ) {\n\tif ( normalizedStrings.has( input ) ) {\n\t\treturn normalizedStrings.get( input );\n\t}\n\n\t// Disregard diacritics.\n\t// Input: \"média\"\n\tlet result = removeAccents( input );\n\n\t// Accommodate leading slash, matching autocomplete expectations.\n\t// Input: \"/media\"\n\tresult = result.replace( /^\\//, '' );\n\n\t// Lowercase.\n\t// Input: \"MEDIA\"\n\tresult = result.toLowerCase();\n\n\tnormalizedStrings.set( input, result );\n\n\treturn result;\n}\n\n/**\n * Converts the search term into a list of normalized terms.\n *\n * @param {string} input The search term to normalize.\n *\n * @return {string[]} The normalized list of search terms.\n */\nexport const getNormalizedSearchTerms = ( input = '' ) => {\n\treturn extractWords( normalizeString( input ) );\n};\n\nconst removeMatchingTerms = ( unmatchedTerms, unprocessedTerms ) => {\n\treturn unmatchedTerms.filter(\n\t\t( term ) =>\n\t\t\t! getNormalizedSearchTerms( unprocessedTerms ).some(\n\t\t\t\t( unprocessedTerm ) => unprocessedTerm.includes( term )\n\t\t\t)\n\t);\n};\n\nexport const searchBlockItems = (\n\titems,\n\tcategories,\n\tcollections,\n\tsearchInput\n) => {\n\tconst normalizedSearchTerms = getNormalizedSearchTerms( searchInput );\n\tif ( normalizedSearchTerms.length === 0 ) {\n\t\treturn items;\n\t}\n\n\tconst config = {\n\t\tgetCategory: ( item ) =>\n\t\t\tcategories.find( ( { slug } ) => slug === item.category )?.title,\n\t\tgetCollection: ( item ) =>\n\t\t\tcollections[ item.name.split( '/' )[ 0 ] ]?.title,\n\t};\n\n\treturn searchItems( items, searchInput, config );\n};\n\n/**\n * Filters an item list given a search term.\n *\n * @param {Array} items Item list\n * @param {string} searchInput Search input.\n * @param {Object} config Search Config.\n *\n * @return {Array} Filtered item list.\n */\nexport const searchItems = ( items = [], searchInput = '', config = {} ) => {\n\tconst normalizedSearchTerms = getNormalizedSearchTerms( searchInput );\n\tif ( normalizedSearchTerms.length === 0 ) {\n\t\treturn items;\n\t}\n\n\tconst rankedItems = items\n\t\t.map( ( item ) => {\n\t\t\treturn [ item, getItemSearchRank( item, searchInput, config ) ];\n\t\t} )\n\t\t.filter( ( [ , rank ] ) => rank > 0 );\n\n\trankedItems.sort( ( [ , rank1 ], [ , rank2 ] ) => rank2 - rank1 );\n\treturn rankedItems.map( ( [ item ] ) => item );\n};\n\n/**\n * Get the search rank for a given item and a specific search term.\n * The better the match, the higher the rank.\n * If the rank equals 0, it should be excluded from the results.\n *\n * @param {Object} item Item to filter.\n * @param {string} searchTerm Search term.\n * @param {Object} config Search Config.\n *\n * @return {number} Search Rank.\n */\nexport function getItemSearchRank( item, searchTerm, config = {} ) {\n\tconst {\n\t\tgetName = defaultGetName,\n\t\tgetTitle = defaultGetTitle,\n\t\tgetDescription = defaultGetDescription,\n\t\tgetKeywords = defaultGetKeywords,\n\t\tgetCategory = defaultGetCategory,\n\t\tgetCollection = defaultGetCollection,\n\t} = config;\n\n\tconst name = getName( item );\n\tconst title = getTitle( item );\n\tconst description = getDescription( item );\n\tconst keywords = getKeywords( item );\n\tconst category = getCategory( item );\n\tconst collection = getCollection( item );\n\n\tconst normalizedSearchInput = normalizeString( searchTerm );\n\tconst normalizedTitle = normalizeString( title );\n\n\tlet rank = 0;\n\n\t// Prefers exact matches\n\t// Then prefers if the beginning of the title matches the search term\n\t// name, keywords, categories, collection, variations match come later.\n\tif ( normalizedSearchInput === normalizedTitle ) {\n\t\trank += 30;\n\t} else if ( normalizedTitle.startsWith( normalizedSearchInput ) ) {\n\t\trank += 20;\n\t} else {\n\t\tconst terms = [\n\t\t\tname,\n\t\t\ttitle,\n\t\t\tdescription,\n\t\t\t...keywords,\n\t\t\tcategory,\n\t\t\tcollection,\n\t\t].join( ' ' );\n\t\tconst normalizedSearchTerms = extractWords( normalizedSearchInput );\n\t\tconst unmatchedTerms = removeMatchingTerms(\n\t\t\tnormalizedSearchTerms,\n\t\t\tterms\n\t\t);\n\n\t\tif ( unmatchedTerms.length === 0 ) {\n\t\t\trank += 10;\n\t\t}\n\t}\n\n\t// Give a better rank to \"core\" namespaced items.\n\tif ( rank !== 0 && name.startsWith( 'core/' ) ) {\n\t\tconst isCoreBlockVariation = name !== item.id;\n\t\t// Give a bit better rank to \"core\" blocks over \"core\" block variations.\n\t\trank += isCoreBlockVariation ? 1 : 2;\n\t}\n\n\treturn rank;\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useEffect } from '@wordpress/element';\nimport { useAsyncList, usePrevious } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\nconst PAGE_SIZE = 20;\nconst INITIAL_INSERTER_RESULTS = 5;\n\n/**\n * Supplies values needed to page the patterns list client side.\n *\n * @param {Array} currentCategoryPatterns An array of the current patterns to display.\n * @param {string} currentCategory The currently selected category.\n * @param {Object} scrollContainerRef Ref of container to to find scroll container for when moving between pages.\n * @param {string} currentFilter The currently search filter.\n *\n * @return {Object} Returns the relevant paging values. (totalItems, categoryPatternsList, numPages, changePage, currentPage)\n */\nexport default function usePatternsPaging(\n\tcurrentCategoryPatterns,\n\tcurrentCategory,\n\tscrollContainerRef,\n\tcurrentFilter = ''\n) {\n\tconst [ currentPage, setCurrentPage ] = useState( 1 );\n\tconst previousCategory = usePrevious( currentCategory );\n\tconst previousFilter = usePrevious( currentFilter );\n\tif (\n\t\t( previousCategory !== currentCategory ||\n\t\t\tpreviousFilter !== currentFilter ) &&\n\t\tcurrentPage !== 1\n\t) {\n\t\tsetCurrentPage( 1 );\n\t}\n\tconst totalItems = currentCategoryPatterns.length;\n\tconst pageIndex = currentPage - 1;\n\tconst categoryPatterns = useMemo( () => {\n\t\treturn currentCategoryPatterns.slice(\n\t\t\tpageIndex * PAGE_SIZE,\n\t\t\tpageIndex * PAGE_SIZE + PAGE_SIZE\n\t\t);\n\t}, [ pageIndex, currentCategoryPatterns ] );\n\tconst categoryPatternsAsyncList = useAsyncList( categoryPatterns, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst numPages = Math.ceil( currentCategoryPatterns.length / PAGE_SIZE );\n\tconst changePage = ( page ) => {\n\t\tconst scrollContainer = getScrollContainer(\n\t\t\tscrollContainerRef?.current\n\t\t);\n\t\tscrollContainer?.scrollTo( 0, 0 );\n\n\t\tsetCurrentPage( page );\n\t};\n\n\tuseEffect(\n\t\tfunction scrollToTopOnCategoryChange() {\n\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\tscrollContainerRef?.current\n\t\t\t);\n\t\t\tscrollContainer?.scrollTo( 0, 0 );\n\t\t},\n\t\t[ currentCategory, scrollContainerRef ]\n\t);\n\n\treturn {\n\t\ttotalItems,\n\t\tcategoryPatterns,\n\t\tcategoryPatternsAsyncList,\n\t\tnumPages,\n\t\tchangePage,\n\t\tcurrentPage,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect, useRef, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce } from '@wordpress/compose';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockPatternsList from '../../block-patterns-list';\nimport useInsertionPoint from '../hooks/use-insertion-point';\nimport usePatternsState from '../hooks/use-patterns-state';\nimport InserterListbox from '../../inserter-listbox';\nimport { searchItems } from '../search-items';\nimport BlockPatternsPaging from '../../block-patterns-paging';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport {\n\tINSERTER_PATTERN_TYPES,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n} from '../block-patterns-tab/utils';\n\nfunction PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {\n\tif ( ! filterValue ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %d: number of patterns. */\n\t\t\t\t_n(\n\t\t\t\t\t'%d pattern found',\n\t\t\t\t\t'%d patterns found',\n\t\t\t\t\tfilteredBlockPatternsLength\n\t\t\t\t),\n\t\t\t\tfilteredBlockPatternsLength\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction PatternList( {\n\tsearchValue,\n\tselectedCategory,\n\tpatternCategories,\n\trootClientId,\n} ) {\n\tconst container = useRef();\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\trootClientId,\n\t\tshouldFocusBlock: true,\n\t} );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tselectedCategory\n\t);\n\n\tconst registeredPatternCategories = useMemo(\n\t\t() =>\n\t\t\tpatternCategories.map(\n\t\t\t\t( patternCategory ) => patternCategory.name\n\t\t\t),\n\t\t[ patternCategories ]\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tconst filteredPatterns = patterns.filter( ( pattern ) => {\n\t\t\tif ( selectedCategory === allPatternsCategory.name ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === myPatternsCategory.name &&\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( selectedCategory === 'uncategorized' ) {\n\t\t\t\tconst hasKnownCategory = pattern.categories.some(\n\t\t\t\t\t( category ) =>\n\t\t\t\t\t\tregisteredPatternCategories.includes( category )\n\t\t\t\t);\n\n\t\t\t\treturn ! pattern.categories?.length || ! hasKnownCategory;\n\t\t\t}\n\n\t\t\treturn pattern.categories?.includes( selectedCategory );\n\t\t} );\n\n\t\tif ( ! searchValue ) {\n\t\t\treturn filteredPatterns;\n\t\t}\n\n\t\treturn searchItems( filteredPatterns, searchValue );\n\t}, [\n\t\tsearchValue,\n\t\tpatterns,\n\t\tselectedCategory,\n\t\tregisteredPatternCategories,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! searchValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [ searchValue, debouncedSpeak, filteredBlockPatterns.length ] );\n\n\tconst pagingProps = usePatternsPaging(\n\t\tfilteredBlockPatterns,\n\t\tselectedCategory,\n\t\tcontainer\n\t);\n\n\t// Reset page when search value changes.\n\tconst [ previousSearchValue, setPreviousSearchValue ] =\n\t\tuseState( searchValue );\n\tif ( searchValue !== previousSearchValue ) {\n\t\tsetPreviousSearchValue( searchValue );\n\t\tpagingProps.changePage( 1 );\n\t}\n\n\tconst hasItems = !! filteredBlockPatterns?.length;\n\treturn (\n\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{ hasItems && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default PatternList;\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { _x, _n, sprintf } from '@wordpress/i18n';\n\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from '../hooks/use-patterns-state';\nimport {\n\tisPatternFiltered,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tINSERTER_PATTERN_TYPES,\n} from './utils';\n\nfunction hasRegisteredCategory( pattern, allCategories ) {\n\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\treturn false;\n\t}\n\n\treturn pattern.categories.some( ( cat ) =>\n\t\tallCategories.some( ( category ) => category.name === cat )\n\t);\n}\n\nexport function usePatternCategories( rootClientId, sourceFilter = 'all' ) {\n\tconst [ patterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst filteredPatterns = useMemo(\n\t\t() =>\n\t\t\tsourceFilter === 'all'\n\t\t\t\t? patterns\n\t\t\t\t: patterns.filter(\n\t\t\t\t\t\t( pattern ) =>\n\t\t\t\t\t\t\t! isPatternFiltered( pattern, sourceFilter )\n\t\t\t\t ),\n\t\t[ sourceFilter, patterns ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tfilteredPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( a, b ) => a.label.localeCompare( b.label ) );\n\n\t\tif (\n\t\t\tfilteredPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern, allCategories )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tfilteredPatterns.some(\n\t\t\t\t( pattern ) => pattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t)\n\t\t) {\n\t\t\tcategories.unshift( myPatternsCategory );\n\t\t}\n\t\tif ( filteredPatterns.length > 0 ) {\n\t\t\tcategories.unshift( {\n\t\t\t\tname: allPatternsCategory.name,\n\t\t\t\tlabel: allPatternsCategory.label,\n\t\t\t} );\n\t\t}\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of categories . */\n\t\t\t\t_n(\n\t\t\t\t\t'%d category button displayed.',\n\t\t\t\t\t'%d category buttons displayed.',\n\t\t\t\t\tcategories.length\n\t\t\t\t),\n\t\t\t\tcategories.length\n\t\t\t)\n\t\t);\n\t\treturn categories;\n\t}, [ allCategories, filteredPatterns ] );\n\n\treturn populatedCategories;\n}\n","/**\n * WordPress dependencies\n */\nimport { Modal } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport PatternExplorerSidebar from './pattern-explorer-sidebar';\nimport PatternList from './pattern-list';\nimport { usePatternCategories } from '../block-patterns-tab/use-pattern-categories';\n\nfunction PatternsExplorer( { initialCategory, rootClientId } ) {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst [ selectedCategory, setSelectedCategory ] = useState(\n\t\tinitialCategory?.name\n\t);\n\n\tconst patternCategories = usePatternCategories( rootClientId );\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n\nfunction PatternsExplorerModal( { onModalClose, ...restProps } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default PatternsExplorerModal;\n","/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalSpacer as Spacer,\n\t__experimentalHeading as Heading,\n\t__experimentalView as View,\n\t__experimentalNavigatorProvider as NavigatorProvider,\n\t__experimentalNavigatorScreen as NavigatorScreen,\n\t__experimentalNavigatorButton as NavigatorButton,\n\t__experimentalNavigatorBackButton as NavigatorBackButton,\n\tFlexBlock,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\n\nfunction ScreenHeader( { title } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function MobileTabNavigation( { categories, children } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t\n\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ children( category ) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tSVG,\n\tPath,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItemsChoice,\n\tExternalLink,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { Icon } from '@wordpress/icons';\nimport { useMemo, createInterpolateElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tmyPatternsCategory,\n\tINSERTER_SYNC_TYPES,\n\tINSERTER_PATTERN_TYPES,\n} from './utils';\n\nconst getShouldDisableSyncFilter = ( sourceFilter ) =>\n\tsourceFilter !== 'all' && sourceFilter !== 'user';\nconst getShouldHideSourcesFilter = ( category ) => {\n\treturn category.name === myPatternsCategory.name;\n};\n\nconst PATTERN_SOURCE_MENU_OPTIONS = [\n\t{\n\t\tvalue: 'all',\n\t\tlabel: _x( 'All', 'patterns' ),\n\t},\n\t{\n\t\tvalue: INSERTER_PATTERN_TYPES.directory,\n\t\tlabel: __( 'Pattern Directory' ),\n\t},\n\t{\n\t\tvalue: INSERTER_PATTERN_TYPES.theme,\n\t\tlabel: __( 'Theme & Plugins' ),\n\t},\n\t{\n\t\tvalue: INSERTER_PATTERN_TYPES.user,\n\t\tlabel: __( 'User' ),\n\t},\n];\n\nexport function PatternsFilter( {\n\tsetPatternSyncFilter,\n\tsetPatternSourceFilter,\n\tpatternSyncFilter,\n\tpatternSourceFilter,\n\tscrollContainerRef,\n\tcategory,\n} ) {\n\t// If the category is `myPatterns` then we need to set the source filter to `user`, but\n\t// we do this by deriving from props rather than calling setPatternSourceFilter otherwise\n\t// the user may be confused when switching to another category if the haven't explicity set\n\t// this filter themselves.\n\tconst currentPatternSourceFilter =\n\t\tcategory.name === myPatternsCategory.name\n\t\t\t? INSERTER_PATTERN_TYPES.user\n\t\t\t: patternSourceFilter;\n\n\t// We need to disable the sync filter option if the source filter is not 'all' or 'user'\n\t// otherwise applying them will just result in no patterns being shown.\n\tconst shouldDisableSyncFilter = getShouldDisableSyncFilter(\n\t\tcurrentPatternSourceFilter\n\t);\n\n\t// We also hide the directory and theme source filter if the category is `myPatterns`\n\t// otherwise there will only be one option available.\n\tconst shouldHideSourcesFilter = getShouldHideSourcesFilter( category );\n\n\tconst patternSyncMenuOptions = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tvalue: 'all',\n\t\t\t\tlabel: _x( 'All', 'patterns' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: INSERTER_SYNC_TYPES.full,\n\t\t\t\tlabel: _x( 'Synced', 'patterns' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: INSERTER_SYNC_TYPES.unsynced,\n\t\t\t\tlabel: _x( 'Not synced', 'patterns' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t],\n\t\t[ shouldDisableSyncFilter ]\n\t);\n\n\tfunction handleSetSourceFilterChange( newSourceFilter ) {\n\t\tsetPatternSourceFilter( newSourceFilter );\n\t\tif ( getShouldDisableSyncFilter( newSourceFilter ) ) {\n\t\t\tsetPatternSyncFilter( 'all' );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ () => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ ! shouldHideSourcesFilter && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\thandleSetSourceFilterChange( value );\n\t\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tvalue={ currentPatternSourceFilter }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tsetPatternSyncFilter( value );\n\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tvalue={ patternSyncFilter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t\t'Patterns are available from the WordPress.org Pattern Directory, bundled in the active theme, or created by users on this site. Only patterns created on this site can be synced.'\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tLink: (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalText as Text,\n\tFlexBlock,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from '../hooks/use-patterns-state';\nimport BlockPatternsList from '../../block-patterns-list';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport { PatternsFilter } from './patterns-filter';\nimport { usePatternCategories } from './use-pattern-categories';\nimport {\n\tisPatternFiltered,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tINSERTER_PATTERN_TYPES,\n} from './utils';\nimport { store as blockEditorStore } from '../../../store';\n\nconst noop = () => {};\n\nexport function PatternCategoryPreviews( {\n\trootClientId,\n\tonInsert,\n\tonHover = noop,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst isZoomOutMode = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',\n\t\t[]\n\t);\n\tconst [ allPatterns, , onClickPattern ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId,\n\t\tcategory?.name\n\t);\n\tconst [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' );\n\tconst [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );\n\n\tconst availableCategories = usePatternCategories(\n\t\trootClientId,\n\t\tpatternSourceFilter\n\t);\n\tconst scrollContainerRef = useRef();\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif (\n\t\t\t\t\tisPatternFiltered(\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tpatternSourceFilter,\n\t\t\t\t\t\tpatternSyncFilter\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === allPatternsCategory.name ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tcategory.name === myPatternsCategory.name &&\n\t\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === 'uncategorized' ) {\n\t\t\t\t\t// The uncategorized category should show all the patterns without any category...\n\t\t\t\t\tif ( ! pattern.categories ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// ...or with no available category.\n\t\t\t\t\treturn ! pattern.categories.some( ( catName ) =>\n\t\t\t\t\t\tavailableCategories.some( ( c ) => c.name === catName )\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t} ),\n\t\t[\n\t\t\tallPatterns,\n\t\t\tavailableCategories,\n\t\t\tcategory.name,\n\t\t\tpatternSourceFilter,\n\t\t\tpatternSyncFilter,\n\t\t]\n\t);\n\n\tconst pagingProps = usePatternsPaging(\n\t\tcurrentCategoryPatterns,\n\t\tcategory,\n\t\tscrollContainerRef\n\t);\n\tconst { changePage } = pagingProps;\n\n\t// Hide block pattern preview on unmount.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tconst onSetPatternSyncFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSyncFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSyncFilter, changePage ]\n\t);\n\tconst onSetPatternSourceFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSourceFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSourceFilter, changePage ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ ! currentCategoryPatterns.length && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'No results found' ) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t{ currentCategoryPatterns.length > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t{ isZoomOutMode && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Drag and drop patterns into the canvas.' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { usePrevious, useReducedMotion } from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport {\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tprivateApis as componentsPrivateApis,\n\t__unstableMotion as motion,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nfunction CategoryTabs( {\n\tcategories,\n\tselectedCategory,\n\tonSelectCategory,\n\tchildren,\n} ) {\n\t// Copied from InterfaceSkeleton.\n\tconst ANIMATION_DURATION = 0.25;\n\tconst disableMotion = useReducedMotion();\n\tconst defaultTransition = {\n\t\ttype: 'tween',\n\t\tduration: disableMotion ? 0 : ANIMATION_DURATION,\n\t\tease: [ 0.6, 0, 0.4, 1 ],\n\t};\n\n\tconst previousSelectedCategory = usePrevious( selectedCategory );\n\n\treturn (\n\t\t {\n\t\t\t\t// Pass the full category object\n\t\t\t\tonSelectCategory(\n\t\t\t\t\tcategories.find(\n\t\t\t\t\t\t( category ) => category.name === categoryId\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} }\n\t\t>\n\t\t\t\n\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport default CategoryTabs;\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { Button, Spinner } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport PatternsExplorerModal from '../block-patterns-explorer';\nimport MobileTabNavigation from '../mobile-tab-navigation';\nimport { PatternCategoryPreviews } from './pattern-category-previews';\nimport { usePatternCategories } from './use-pattern-categories';\nimport CategoryTabs from '../category-tabs';\nimport InserterNoResults from '../no-results';\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\nfunction BlockPatternsTab( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n\tchildren,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\n\tconst categories = usePatternCategories( rootClientId );\n\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\tconst isResolvingPatterns = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).isResolvingPatterns(),\n\t\t[]\n\t);\n\n\tif ( isResolvingPatterns ) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n\n\tif ( ! categories.length ) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\n\t\t\t\t\t setShowPatternsExplorer( true ) }\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t) }\n\t\t\t\t
\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t setShowPatternsExplorer( false ) }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockPatternsTab;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst external = (\n\t\n\t\t\n\t\n);\n\nexport default external;\n","/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\n\nconst mediaTypeTag = { image: 'img', video: 'video', audio: 'audio' };\n\n/** @typedef {import('./hooks').InserterMediaItem} InserterMediaItem */\n\n/**\n * Creates a block and a preview element from a media object.\n *\n * @param {InserterMediaItem} media The media object to create the block from.\n * @param {('image'|'audio'|'video')} mediaType The media type to create the block for.\n * @return {[WPBlock, JSX.Element]} An array containing the block and the preview element.\n */\nexport function getBlockAndPreviewFromMedia( media, mediaType ) {\n\t// Add the common attributes between the different media types.\n\tconst attributes = {\n\t\tid: media.id || undefined,\n\t\tcaption: media.caption || undefined,\n\t};\n\tconst mediaSrc = media.url;\n\tconst alt = media.alt || undefined;\n\tif ( mediaType === 'image' ) {\n\t\tattributes.url = mediaSrc;\n\t\tattributes.alt = alt;\n\t} else if ( [ 'video', 'audio' ].includes( mediaType ) ) {\n\t\tattributes.src = mediaSrc;\n\t}\n\tconst PreviewTag = mediaTypeTag[ mediaType ];\n\tconst preview = (\n\t\t {\n\t\t\t\t// Fall back to the media source if the preview cannot be loaded.\n\t\t\t\tif ( currentTarget.src === media.previewUrl ) {\n\t\t\t\t\tcurrentTarget.src = mediaSrc;\n\t\t\t\t}\n\t\t\t} }\n\t\t/>\n\t);\n\treturn [ createBlock( `core/${ mediaType }`, attributes ), preview ];\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tTooltip,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tSpinner,\n\tModal,\n\tFlex,\n\tFlexItem,\n\tButton,\n\tComposite,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useCallback, useState } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { moreVertical, external } from '@wordpress/icons';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport InserterDraggableBlocks from '../../inserter-draggable-blocks';\nimport { getBlockAndPreviewFromMedia } from './utils';\nimport { store as blockEditorStore } from '../../../store';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst MAXIMUM_TITLE_LENGTH = 25;\nconst MEDIA_OPTIONS_POPOVER_PROPS = {\n\tposition: 'bottom left',\n\tclassName:\n\t\t'block-editor-inserter__media-list__item-preview-options__popover',\n};\n\nfunction MediaPreviewOptions( { category, media } ) {\n\tif ( ! category.getReportUrl ) {\n\t\treturn null;\n\t}\n\tconst reportUrl = category.getReportUrl( media );\n\treturn (\n\t\t\n\t\t\t{ () => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\twindow.open( reportUrl, '_blank' ).focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: The media type to report e.g: \"image\", \"video\", \"audio\" */\n\t\t\t\t\t\t\t__( 'Report %s' ),\n\t\t\t\t\t\t\tcategory.mediaType\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction InsertExternalImageModal( { onClose, onSubmit } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'This image cannot be uploaded to your Media Library, but it can still be inserted as an external image.'\n\t\t\t\t\t) }\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'External images can be removed by the external provider without warning and could even have legal compliance issues related to privacy legislation.'\n\t\t\t\t\t) }\n\t\t\t\t

\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Insert' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport function MediaPreview( { media, onClick, category } ) {\n\tconst [ showExternalUploadModal, setShowExternalUploadModal ] =\n\t\tuseState( false );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ isInserting, setIsInserting ] = useState( false );\n\tconst [ block, preview ] = useMemo(\n\t\t() => getBlockAndPreviewFromMedia( media, category.mediaType ),\n\t\t[ media, category.mediaType ]\n\t);\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst onMediaInsert = useCallback(\n\t\t( previewBlock ) => {\n\t\t\t// Prevent multiple uploads when we're in the process of inserting.\n\t\t\tif ( isInserting ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst settings = getSettings();\n\t\t\tconst clonedBlock = cloneBlock( previewBlock );\n\t\t\tconst { id, url, caption } = clonedBlock.attributes;\n\n\t\t\t// User has no permission to upload media.\n\t\t\tif ( ! id && ! settings.mediaUpload ) {\n\t\t\t\tsetShowExternalUploadModal( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Media item already exists in library, so just insert it.\n\t\t\tif ( !! id ) {\n\t\t\t\tonClick( clonedBlock );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetIsInserting( true );\n\t\t\t// Media item does not exist in library, so try to upload it.\n\t\t\t// Fist fetch the image data. This may fail if the image host\n\t\t\t// doesn't allow CORS with the domain.\n\t\t\t// If this happens, we insert the image block using the external\n\t\t\t// URL and let the user know about the possible implications.\n\t\t\twindow\n\t\t\t\t.fetch( url )\n\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t.then( ( blob ) => {\n\t\t\t\t\tsettings.mediaUpload( {\n\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\tadditionalData: { caption },\n\t\t\t\t\t\tonFileChange( [ img ] ) {\n\t\t\t\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick( {\n\t\t\t\t\t\t\t\t...clonedBlock,\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t...clonedBlock.attributes,\n\t\t\t\t\t\t\t\t\tid: img.id,\n\t\t\t\t\t\t\t\t\turl: img.url,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t\t\t\t__( 'Image uploaded and inserted.' ),\n\t\t\t\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\t\t\tonError( message ) {\n\t\t\t\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\tsetShowExternalUploadModal( true );\n\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tisInserting,\n\t\t\tgetSettings,\n\t\t\tonClick,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tconst title =\n\t\ttypeof media.title === 'string'\n\t\t\t? media.title\n\t\t\t: media.title?.rendered || __( 'no title' );\n\n\tlet truncatedTitle;\n\tif ( title.length > MAXIMUM_TITLE_LENGTH ) {\n\t\tconst omission = '...';\n\t\ttruncatedTitle =\n\t\t\ttitle.slice( 0, MAXIMUM_TITLE_LENGTH - omission.length ) + omission;\n\t}\n\tconst onMouseEnter = useCallback( () => setIsHovered( true ), [] );\n\tconst onMouseLeave = useCallback( () => setIsHovered( false ), [] );\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{ /* Adding `is-hovered` class to the wrapper element is needed\n\t\t\t\t\t\tbecause the options Popover is rendered outside of this node. */ }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={ () => onMediaInsert( block ) }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{ preview }\n\t\t\t\t\t\t\t\t\t\t{ isInserting && (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{ ! isInserting && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
\n\t\t\t{ showExternalUploadModal && (\n\t\t\t\t setShowExternalUploadModal( false ) }\n\t\t\t\t\tonSubmit={ () => {\n\t\t\t\t\t\tonClick( cloneBlock( block ) );\n\t\t\t\t\t\tcreateSuccessNotice( __( 'Image inserted.' ), {\n\t\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tsetShowExternalUploadModal( false );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Composite } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { MediaPreview } from './media-preview';\n\nfunction MediaList( {\n\tmediaList,\n\tcategory,\n\tonClick,\n\tlabel = __( 'Media List' ),\n} ) {\n\treturn (\n\t\t\n\t\t\t{ mediaList.map( ( media, index ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport default MediaList;\n","/**\n * WordPress dependencies\n */\nimport { Spinner, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useDebouncedInput } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport MediaList from './media-list';\nimport { useMediaResults } from './hooks';\nimport InserterNoResults from '../no-results';\n\nconst INITIAL_MEDIA_ITEMS_PER_PAGE = 10;\n\nexport function MediaCategoryPanel( { rootClientId, onInsert, category } ) {\n\tconst [ search, setSearch, debouncedSearch ] = useDebouncedInput();\n\tconst { mediaList, isLoading } = useMediaResults( category, {\n\t\tper_page: !! debouncedSearch ? 20 : INITIAL_MEDIA_ITEMS_PER_PAGE,\n\t\tsearch: debouncedSearch,\n\t} );\n\tconst baseCssClass = 'block-editor-inserter__media-panel';\n\tconst searchLabel = category.labels.search_items || __( 'Search' );\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t{ isLoading && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t) }\n\t\t\t{ ! isLoading && ! mediaList?.length && }\n\t\t\t{ ! isLoading && !! mediaList?.length && (\n\t\t\t\t\n\t\t\t) }\n\t\t
\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\n/** @typedef {import('../../../store/actions').InserterMediaRequest} InserterMediaRequest */\n/** @typedef {import('../../../store/actions').InserterMediaItem} InserterMediaItem */\n\n/**\n * Fetches media items based on the provided category.\n * Each media category is responsible for providing a `fetch` function.\n *\n * @param {Object} category The media category to fetch results for.\n * @param {InserterMediaRequest} query The query args to use for the request.\n * @return {InserterMediaItem[]} The media results.\n */\nexport function useMediaResults( category, query = {} ) {\n\tconst [ mediaList, setMediaList ] = useState();\n\tconst [ isLoading, setIsLoading ] = useState( false );\n\t// We need to keep track of the last request made because\n\t// multiple request can be fired without knowing the order\n\t// of resolution, and we need to ensure we are showing\n\t// the results of the last request.\n\t// In the future we could use AbortController to cancel previous\n\t// requests, but we don't for now as it involves adding support\n\t// for this to `core-data` package.\n\tconst lastRequestRef = useRef();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst key = JSON.stringify( {\n\t\t\t\tcategory: category.name,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tlastRequestRef.current = key;\n\t\t\tsetIsLoading( true );\n\t\t\tsetMediaList( [] ); // Empty the previous results.\n\t\t\tconst _media = await category.fetch?.( query );\n\t\t\tif ( key === lastRequestRef.current ) {\n\t\t\t\tsetMediaList( _media );\n\t\t\t\tsetIsLoading( false );\n\t\t\t}\n\t\t} )();\n\t}, [ category.name, ...Object.values( query ) ] );\n\treturn { mediaList, isLoading };\n}\n\nexport function useMediaCategories( rootClientId ) {\n\tconst [ categories, setCategories ] = useState( [] );\n\n\tconst inserterMediaCategories = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getInserterMediaCategories(),\n\t\t[]\n\t);\n\tconst { canInsertImage, canInsertVideo, canInsertAudio } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanInsertImage: canInsertBlockType(\n\t\t\t\t\t'core/image',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertVideo: canInsertBlockType(\n\t\t\t\t\t'core/video',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertAudio: canInsertBlockType(\n\t\t\t\t\t'core/audio',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst _categories = [];\n\t\t\t// If `inserterMediaCategories` is not defined in\n\t\t\t// block editor settings, do not show any media categories.\n\t\t\tif ( ! inserterMediaCategories ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Loop through categories to check if they have at least one media item.\n\t\t\tconst categoriesHaveMedia = new Map(\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tinserterMediaCategories.map( async ( category ) => {\n\t\t\t\t\t\t// Some sources are external and we don't need to make a request.\n\t\t\t\t\t\tif ( category.isExternalResource ) {\n\t\t\t\t\t\t\treturn [ category.name, true ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet results = [];\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresults = await category.fetch( {\n\t\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t// If the request fails, we shallow the error and just don't show\n\t\t\t\t\t\t\t// the category, in order to not break the media tab.\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ category.name, !! results.length ];\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t);\n\t\t\t// We need to filter out categories that don't have any media items or\n\t\t\t// whose corresponding block type is not allowed to be inserted, based\n\t\t\t// on the category's `mediaType`.\n\t\t\tconst canInsertMediaType = {\n\t\t\t\timage: canInsertImage,\n\t\t\t\tvideo: canInsertVideo,\n\t\t\t\taudio: canInsertAudio,\n\t\t\t};\n\t\t\tinserterMediaCategories.forEach( ( category ) => {\n\t\t\t\tif (\n\t\t\t\t\tcanInsertMediaType[ category.mediaType ] &&\n\t\t\t\t\tcategoriesHaveMedia.get( category.name )\n\t\t\t\t) {\n\t\t\t\t\t_categories.push( category );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !! _categories.length ) {\n\t\t\t\tsetCategories( _categories );\n\t\t\t}\n\t\t} )();\n\t}, [\n\t\tcanInsertImage,\n\t\tcanInsertVideo,\n\t\tcanInsertAudio,\n\t\tinserterMediaCategories,\n\t] );\n\treturn categories;\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { Button } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { MediaCategoryPanel } from './media-panel';\nimport MediaUploadCheck from '../../media-upload/check';\nimport MediaUpload from '../../media-upload';\nimport { useMediaCategories } from './hooks';\nimport { getBlockAndPreviewFromMedia } from './utils';\nimport MobileTabNavigation from '../mobile-tab-navigation';\nimport CategoryTabs from '../category-tabs';\nimport InserterNoResults from '../no-results';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image', 'video', 'audio' ];\n\nfunction MediaTab( {\n\trootClientId,\n\tselectedCategory,\n\tonSelectCategory,\n\tonInsert,\n\tchildren,\n} ) {\n\tconst mediaCategories = useMediaCategories( rootClientId );\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\tconst baseCssClass = 'block-editor-inserter__media-tabs';\n\tconst onSelectMedia = useCallback(\n\t\t( media ) => {\n\t\t\tif ( ! media?.url ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [ block ] = getBlockAndPreviewFromMedia( media, media.type );\n\t\t\tonInsert( block );\n\t\t},\n\t\t[ onInsert ]\n\t);\n\tconst categories = useMemo(\n\t\t() =>\n\t\t\tmediaCategories.map( ( mediaCategory ) => ( {\n\t\t\t\t...mediaCategory,\n\t\t\t\tlabel: mediaCategory.labels.name,\n\t\t\t} ) ),\n\t\t[ mediaCategories ]\n\t);\n\n\tif ( ! categories.length ) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t// Safari doesn't emit a focus event on button elements when\n\t\t\t\t\t\t\t\t\t\t// clicked and we need to manually focus the button here.\n\t\t\t\t\t\t\t\t\t\t// The reason is that core's Media Library modal explicitly triggers a\n\t\t\t\t\t\t\t\t\t\t// focus event and therefore a `blur` event is triggered on a different\n\t\t\t\t\t\t\t\t\t\t// element, which doesn't contain the `data-unstable-ignore-focus-outside-for-relatedtarget`\n\t\t\t\t\t\t\t\t\t\t// attribute making the Inserter dialog to close.\n\t\t\t\t\t\t\t\t\t\tevent.target.focus();\n\t\t\t\t\t\t\t\t\t\topen();\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__media-library-button\"\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tdata-unstable-ignore-focus-outside-for-relatedtarget=\".media-modal\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Open Media Library' ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default MediaTab;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Fill: __unstableInserterMenuExtension, Slot } = createSlotFill(\n\t'__unstableInserterMenuExtension'\n);\n\n__unstableInserterMenuExtension.Slot = Slot;\n\nexport default __unstableInserterMenuExtension;\n","/** @typedef {import('../store/selectors').WPEditorInserterItem} WPEditorInserterItem */\n\n/**\n * Helper function to order inserter block items according to a provided array of prioritized blocks.\n *\n * @param {WPEditorInserterItem[]} items The array of editor inserter block items to be sorted.\n * @param {string[]} priority The array of block names to be prioritized.\n * @return {WPEditorInserterItem[]} The sorted array of editor inserter block items.\n */\nexport const orderInserterBlockItems = ( items, priority ) => {\n\tif ( ! priority ) {\n\t\treturn items;\n\t}\n\n\titems.sort( ( { id: aName }, { id: bName } ) => {\n\t\t// Sort block items according to `priority`.\n\t\tlet aIndex = priority.indexOf( aName );\n\t\tlet bIndex = priority.indexOf( bName );\n\t\t// All other block items should come after that.\n\t\tif ( aIndex < 0 ) {\n\t\t\taIndex = priority.length;\n\t\t}\n\t\tif ( bIndex < 0 ) {\n\t\t\tbIndex = priority.length;\n\t\t}\n\t\treturn aIndex - bIndex;\n\t} );\n\n\treturn items;\n};\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { VisuallyHidden } from '@wordpress/components';\nimport { useDebounce, useAsyncList } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport BlockPatternsList from '../block-patterns-list';\nimport __unstableInserterMenuExtension from '../inserter-menu-extension';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport usePatternsState from './hooks/use-patterns-state';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport { searchBlockItems, searchItems } from './search-items';\nimport InserterListbox from '../inserter-listbox';\nimport { orderBy } from '../../utils/sorting';\nimport { orderInserterBlockItems } from '../../utils/order-inserter-block-items';\nimport { store as blockEditorStore } from '../../store';\n\nconst INITIAL_INSERTER_RESULTS = 9;\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation and rerendering the component.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nfunction InserterSearchResults( {\n\tfilterValue,\n\tonSelect,\n\tonHover,\n\tonHoverPattern,\n\trootClientId,\n\tclientId,\n\tisAppender,\n\t__experimentalInsertionIndex,\n\tmaxBlockPatterns,\n\tmaxBlockTypes,\n\tshowBlockDirectory = false,\n\tisDraggable = true,\n\tshouldFocusBlock = true,\n\tprioritizePatterns,\n\tselectBlockOnInsert,\n\tisQuick,\n} ) {\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\n\tconst { prioritizedBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst blockListSettings =\n\t\t\t\tselect( blockEditorStore ).getBlockListSettings( rootClientId );\n\n\t\t\treturn {\n\t\t\t\tprioritizedBlocks:\n\t\t\t\t\tblockListSettings?.prioritizedInserterBlocks || EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\tonSelect,\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\tshouldFocusBlock,\n\t\tselectBlockOnInsert,\n\t} );\n\tconst [\n\t\tblockTypes,\n\t\tblockTypeCategories,\n\t\tblockTypeCollections,\n\t\tonSelectBlockType,\n\t] = useBlockTypesState( destinationRootClientId, onInsertBlocks, isQuick );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tif ( maxBlockPatterns === 0 ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst results = searchItems( patterns, filterValue );\n\t\treturn maxBlockPatterns !== undefined\n\t\t\t? results.slice( 0, maxBlockPatterns )\n\t\t\t: results;\n\t}, [ filterValue, patterns, maxBlockPatterns ] );\n\n\tlet maxBlockTypesToShow = maxBlockTypes;\n\tif ( prioritizePatterns && filteredBlockPatterns.length > 2 ) {\n\t\tmaxBlockTypesToShow = 0;\n\t}\n\n\tconst filteredBlockTypes = useMemo( () => {\n\t\tif ( maxBlockTypesToShow === 0 ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst nonPatternBlockTypes = blockTypes.filter(\n\t\t\t( blockType ) => blockType.name !== 'core/block'\n\t\t);\n\t\tlet orderedItems = orderBy( nonPatternBlockTypes, 'frecency', 'desc' );\n\n\t\tif ( ! filterValue && prioritizedBlocks.length ) {\n\t\t\torderedItems = orderInserterBlockItems(\n\t\t\t\torderedItems,\n\t\t\t\tprioritizedBlocks\n\t\t\t);\n\t\t}\n\n\t\tconst results = searchBlockItems(\n\t\t\torderedItems,\n\t\t\tblockTypeCategories,\n\t\t\tblockTypeCollections,\n\t\t\tfilterValue\n\t\t);\n\n\t\treturn maxBlockTypesToShow !== undefined\n\t\t\t? results.slice( 0, maxBlockTypesToShow )\n\t\t\t: results;\n\t}, [\n\t\tfilterValue,\n\t\tblockTypes,\n\t\tblockTypeCategories,\n\t\tblockTypeCollections,\n\t\tmaxBlockTypesToShow,\n\t\tprioritizedBlocks,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! filterValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockTypes.length + filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [\n\t\tfilterValue,\n\t\tdebouncedSpeak,\n\t\tfilteredBlockTypes,\n\t\tfilteredBlockPatterns,\n\t] );\n\n\tconst currentShownBlockTypes = useAsyncList( filteredBlockTypes, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst currentShownPatterns = useAsyncList(\n\t\tcurrentShownBlockTypes.length === filteredBlockTypes.length\n\t\t\t? filteredBlockPatterns\n\t\t\t: EMPTY_ARRAY\n\t);\n\n\tconst hasItems =\n\t\tfilteredBlockTypes.length > 0 || filteredBlockPatterns.length > 0;\n\n\tconst blocksUI = !! filteredBlockTypes.length && (\n\t\t{ __( 'Blocks' ) } }\n\t\t>\n\t\t\t\n\t\t\n\t);\n\n\tconst patternsUI = !! filteredBlockPatterns.length && (\n\t\t{ __( 'Block patterns' ) }\n\t\t\t}\n\t\t>\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ ! showBlockDirectory && ! hasItems && }\n\n\t\t\t{ prioritizePatterns ? patternsUI : blocksUI }\n\n\t\t\t{ !! filteredBlockTypes.length &&\n\t\t\t\t!! filteredBlockPatterns.length && (\n\t\t\t\t\t
\n\t\t\t\t) }\n\n\t\t\t{ prioritizePatterns ? blocksUI : patternsUI }\n\n\t\t\t{ showBlockDirectory && (\n\t\t\t\t<__unstableInserterMenuExtension.Slot\n\t\t\t\t\tfillProps={ {\n\t\t\t\t\t\tonSelect: onSelectBlockType,\n\t\t\t\t\t\tonHover,\n\t\t\t\t\t\tfilterValue,\n\t\t\t\t\t\thasItems,\n\t\t\t\t\t\trootClientId: destinationRootClientId,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ ( fills ) => {\n\t\t\t\t\t\tif ( fills.length ) {\n\t\t\t\t\t\t\treturn fills;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( ! hasItems ) {\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default InserterSearchResults;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst closeSmall = (\n\t\n\t\t\n\t\n);\n\nexport default closeSmall;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { forwardRef } from '@wordpress/element';\nimport { closeSmall } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nfunction TabbedSidebar(\n\t{ defaultTabId, onClose, onSelect, selectedTab, tabs, closeButtonLabel },\n\tref\n) {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t onClose() }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t\n\t\t\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ tab.title }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{ tab.panel }\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default forwardRef( TabbedSidebar );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tforwardRef,\n\tuseState,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseLayoutEffect,\n} from '@wordpress/element';\nimport { VisuallyHidden, SearchControl, Popover } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useDebouncedInput } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport Tips from './tips';\nimport InserterPreviewPanel from './preview-panel';\nimport BlockTypesTab from './block-types-tab';\nimport BlockPatternsTab from './block-patterns-tab';\nimport { PatternCategoryPreviews } from './block-patterns-tab/pattern-category-previews';\nimport { MediaTab, MediaCategoryPanel } from './media-tab';\nimport InserterSearchResults from './search-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport { store as blockEditorStore } from '../../store';\nimport TabbedSidebar from '../tabbed-sidebar';\n\nconst NOOP = () => {};\nfunction InserterMenu(\n\t{\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\t__experimentalInsertionIndex,\n\t\tonSelect,\n\t\tshowInserterHelpPanel,\n\t\tshowMostUsedBlocks,\n\t\t__experimentalFilterValue = '',\n\t\tshouldFocusBlock = true,\n\t\tonPatternCategorySelection,\n\t\tonClose,\n\t\t__experimentalInitialTab,\n\t\t__experimentalInitialCategory,\n\t},\n\tref\n) {\n\tconst isZoomOutMode = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',\n\t\t[]\n\t);\n\tconst [ filterValue, setFilterValue, delayedFilterValue ] =\n\t\tuseDebouncedInput( __experimentalFilterValue );\n\tconst [ hoveredItem, setHoveredItem ] = useState( null );\n\tconst [ selectedPatternCategory, setSelectedPatternCategory ] = useState(\n\t\t__experimentalInitialCategory\n\t);\n\tconst [ patternFilter, setPatternFilter ] = useState( 'all' );\n\tconst [ selectedMediaCategory, setSelectedMediaCategory ] =\n\t\tuseState( null );\n\tfunction getInitialTab() {\n\t\tif ( __experimentalInitialTab ) {\n\t\t\treturn __experimentalInitialTab;\n\t\t}\n\n\t\tif ( isZoomOutMode ) {\n\t\t\treturn 'patterns';\n\t\t}\n\t}\n\tconst [ selectedTab, setSelectedTab ] = useState( getInitialTab() );\n\n\tconst [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ] =\n\t\tuseInsertionPoint( {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\t\tshouldFocusBlock,\n\t\t} );\n\tconst blockTypesTabRef = useRef();\n\n\tconst onInsert = useCallback(\n\t\t( blocks, meta, shouldForceFocusBlock, _rootClientId ) => {\n\t\t\tonInsertBlocks(\n\t\t\t\tblocks,\n\t\t\t\tmeta,\n\t\t\t\tshouldForceFocusBlock,\n\t\t\t\t_rootClientId\n\t\t\t);\n\t\t\tonSelect( blocks );\n\n\t\t\t// Check for focus loss due to filtering blocks by selected block type\n\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\tif (\n\t\t\t\t\t! shouldFocusBlock &&\n\t\t\t\t\t! blockTypesTabRef.current?.contains(\n\t\t\t\t\t\tref.current.ownerDocument.activeElement\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// There has been a focus loss, so focus the first button in the block types tab\n\t\t\t\t\tblockTypesTabRef.current?.querySelector( 'button' ).focus();\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t[ onInsertBlocks, onSelect, shouldFocusBlock ]\n\t);\n\n\tconst onInsertPattern = useCallback(\n\t\t( blocks, patternName ) => {\n\t\t\tonToggleInsertionPoint( false );\n\t\t\tonInsertBlocks( blocks, { patternName } );\n\t\t\tonSelect();\n\t\t},\n\t\t[ onInsertBlocks, onSelect ]\n\t);\n\n\tconst onHover = useCallback(\n\t\t( item ) => {\n\t\t\tonToggleInsertionPoint( item );\n\t\t\tsetHoveredItem( item );\n\t\t},\n\t\t[ onToggleInsertionPoint, setHoveredItem ]\n\t);\n\n\tconst onClickPatternCategory = useCallback(\n\t\t( patternCategory, filter ) => {\n\t\t\tsetSelectedPatternCategory( patternCategory );\n\t\t\tsetPatternFilter( filter );\n\t\t\tonPatternCategorySelection?.();\n\t\t},\n\t\t[ setSelectedPatternCategory, onPatternCategorySelection ]\n\t);\n\n\tconst showPatternPanel =\n\t\tselectedTab === 'patterns' &&\n\t\t! delayedFilterValue &&\n\t\t!! selectedPatternCategory;\n\n\tconst showMediaPanel = selectedTab === 'media' && !! selectedMediaCategory;\n\n\tconst inserterSearch = useMemo( () => {\n\t\tif ( selectedTab === 'media' ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t {\n\t\t\t\t\t\tif ( hoveredItem ) {\n\t\t\t\t\t\t\tsetHoveredItem( null );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetFilterValue( value );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ filterValue }\n\t\t\t\t\tlabel={ __( 'Search for blocks and patterns' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t/>\n\t\t\t\t{ !! delayedFilterValue && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tselectedTab,\n\t\thoveredItem,\n\t\tsetHoveredItem,\n\t\tsetFilterValue,\n\t\tfilterValue,\n\t\tdelayedFilterValue,\n\t\tonSelect,\n\t\tonHover,\n\t\tshouldFocusBlock,\n\t\tclientId,\n\t\trootClientId,\n\t\t__experimentalInsertionIndex,\n\t\tisAppender,\n\t] );\n\n\tconst blocksTab = useMemo( () => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t{ showInserterHelpPanel && (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'A tip for using the block editor' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tdestinationRootClientId,\n\t\tonInsert,\n\t\tonHover,\n\t\tshowMostUsedBlocks,\n\t\tshowInserterHelpPanel,\n\t] );\n\n\tconst patternsTab = useMemo( () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ showPatternPanel && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tdestinationRootClientId,\n\t\tonInsertPattern,\n\t\tonClickPatternCategory,\n\t\tpatternFilter,\n\t\tselectedPatternCategory,\n\t\tshowPatternPanel,\n\t] );\n\n\tconst mediaTab = useMemo( () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ showMediaPanel && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tdestinationRootClientId,\n\t\tonInsert,\n\t\tselectedMediaCategory,\n\t\tsetSelectedMediaCategory,\n\t\tshowMediaPanel,\n\t] );\n\n\tconst handleSetSelectedTab = ( value ) => {\n\t\t// If no longer on patterns tab remove the category setting.\n\t\tif ( value !== 'patterns' ) {\n\t\t\tsetSelectedPatternCategory( null );\n\t\t}\n\t\tsetSelectedTab( value );\n\t};\n\n\t// Focus first active tab, if any\n\tconst tabsRef = useRef();\n\tuseLayoutEffect( () => {\n\t\tif ( tabsRef.current ) {\n\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\ttabsRef.current\n\t\t\t\t\t.querySelector( '[role=\"tab\"][aria-selected=\"true\"]' )\n\t\t\t\t\t?.focus();\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ inserterSearch }\n\t\t\t\t\t\t\t\t\t{ selectedTab === 'blocks' &&\n\t\t\t\t\t\t\t\t\t\t! delayedFilterValue &&\n\t\t\t\t\t\t\t\t\t\tblocksTab }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'patterns',\n\t\t\t\t\t\t\ttitle: __( 'Patterns' ),\n\t\t\t\t\t\t\tpanel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{ inserterSearch }\n\t\t\t\t\t\t\t\t\t{ selectedTab === 'patterns' &&\n\t\t\t\t\t\t\t\t\t\t! delayedFilterValue &&\n\t\t\t\t\t\t\t\t\t\tpatternsTab }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'media',\n\t\t\t\t\t\t\ttitle: __( 'Media' ),\n\t\t\t\t\t\t\tpanel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{ inserterSearch }\n\t\t\t\t\t\t\t\t\t{ mediaTab }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t] }\n\t\t\t\t/>\n\t\t\t
\n\t\t\t{ showInserterHelpPanel && hoveredItem && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t
\n\t);\n}\n\nexport const PrivateInserterMenu = forwardRef( InserterMenu );\n\nfunction PublicInserterMenu( props, ref ) {\n\treturn (\n\t\t\n\t);\n}\n\nexport default forwardRef( PublicInserterMenu );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { Button, SearchControl } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InserterSearchResults from './search-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport usePatternsState from './hooks/use-patterns-state';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport { store as blockEditorStore } from '../../store';\n\nconst SEARCH_THRESHOLD = 6;\nconst SHOWN_BLOCK_TYPES = 6;\nconst SHOWN_BLOCK_PATTERNS = 2;\nconst SHOWN_BLOCK_PATTERNS_WITH_PRIORITIZATION = 4;\n\nexport default function QuickInserter( {\n\tonSelect,\n\trootClientId,\n\tclientId,\n\tisAppender,\n\tprioritizePatterns,\n\tselectBlockOnInsert,\n\thasSearch = true,\n} ) {\n\tconst [ filterValue, setFilterValue ] = useState( '' );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\tonSelect,\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tselectBlockOnInsert,\n\t} );\n\tconst [ blockTypes ] = useBlockTypesState(\n\t\tdestinationRootClientId,\n\t\tonInsertBlocks,\n\t\ttrue\n\t);\n\n\tconst [ patterns ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId\n\t);\n\n\tconst { setInserterIsOpened, insertionIndex } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings, getBlockIndex, getBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst settings = getSettings();\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tconst blockCount = getBlockCount();\n\n\t\t\treturn {\n\t\t\t\tsetInserterIsOpened: settings.__experimentalSetIsInserterOpened,\n\t\t\t\tinsertionIndex: index === -1 ? blockCount : index,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst showPatterns =\n\t\tpatterns.length && ( !! filterValue || prioritizePatterns );\n\tconst showSearch =\n\t\thasSearch &&\n\t\t( ( showPatterns && patterns.length > SEARCH_THRESHOLD ) ||\n\t\t\tblockTypes.length > SEARCH_THRESHOLD );\n\n\tuseEffect( () => {\n\t\tif ( setInserterIsOpened ) {\n\t\t\tsetInserterIsOpened( false );\n\t\t}\n\t}, [ setInserterIsOpened ] );\n\n\t// When clicking Browse All select the appropriate block so as\n\t// the insertion point can work as expected.\n\tconst onBrowseAll = () => {\n\t\tsetInserterIsOpened( {\n\t\t\trootClientId,\n\t\t\tinsertionIndex,\n\t\t\tfilterValue,\n\t\t\tonSelect,\n\t\t} );\n\t};\n\n\tlet maxBlockPatterns = 0;\n\tif ( showPatterns ) {\n\t\tmaxBlockPatterns = prioritizePatterns\n\t\t\t? SHOWN_BLOCK_PATTERNS_WITH_PRIORITIZATION\n\t\t\t: SHOWN_BLOCK_PATTERNS;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ showSearch && (\n\t\t\t\t {\n\t\t\t\t\t\tsetFilterValue( value );\n\t\t\t\t\t} }\n\t\t\t\t\tlabel={ __( 'Search for blocks and patterns' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\n\t\t\t{ setInserterIsOpened && (\n\t\t\t\t\n\t\t\t\t\t{ __( 'Browse all' ) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { speak } from '@wordpress/a11y';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Dropdown, Button } from '@wordpress/components';\nimport { Component } from '@wordpress/element';\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport InserterMenu from './menu';\nimport QuickInserter from './quick-inserter';\nimport { store as blockEditorStore } from '../../store';\n\nconst defaultRenderToggle = ( {\n\tonToggle,\n\tdisabled,\n\tisOpen,\n\tblockTitle,\n\thasSingleBlockType,\n\ttoggleProps = {},\n\tprioritizePatterns,\n} ) => {\n\tconst {\n\t\tas: Wrapper = Button,\n\t\tlabel: labelProp,\n\t\tonClick,\n\t\t...rest\n\t} = toggleProps;\n\n\tlet label = labelProp;\n\tif ( ! label && hasSingleBlockType ) {\n\t\tlabel = sprintf(\n\t\t\t// translators: %s: the name of the block when there is only one\n\t\t\t_x( 'Add %s', 'directly add the only allowed block' ),\n\t\t\tblockTitle\n\t\t);\n\t} else if ( ! label && prioritizePatterns ) {\n\t\tlabel = __( 'Add pattern' );\n\t} else if ( ! label ) {\n\t\tlabel = _x( 'Add block', 'Generic label for block inserter button' );\n\t}\n\n\t// Handle both onClick functions from the toggle and the parent component.\n\tfunction handleClick( event ) {\n\t\tif ( onToggle ) {\n\t\t\tonToggle( event );\n\t\t}\n\t\tif ( onClick ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t);\n};\n\nclass Inserter extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.onToggle = this.onToggle.bind( this );\n\t\tthis.renderToggle = this.renderToggle.bind( this );\n\t\tthis.renderContent = this.renderContent.bind( this );\n\t}\n\n\tonToggle( isOpen ) {\n\t\tconst { onToggle } = this.props;\n\n\t\t// Surface toggle callback to parent component.\n\t\tif ( onToggle ) {\n\t\t\tonToggle( isOpen );\n\t\t}\n\t}\n\n\t/**\n\t * Render callback to display Dropdown toggle element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onToggle Callback to invoke when toggle is\n\t * pressed.\n\t * @param {boolean} options.isOpen Whether dropdown is currently open.\n\t *\n\t * @return {Element} Dropdown toggle element.\n\t */\n\trenderToggle( { onToggle, isOpen } ) {\n\t\tconst {\n\t\t\tdisabled,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\thasItems,\n\t\t\trenderToggle = defaultRenderToggle,\n\t\t\tprioritizePatterns,\n\t\t} = this.props;\n\n\t\treturn renderToggle( {\n\t\t\tonToggle,\n\t\t\tisOpen,\n\t\t\tdisabled: disabled || ! hasItems,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\tprioritizePatterns,\n\t\t} );\n\t}\n\n\t/**\n\t * Render callback to display Dropdown content element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onClose Callback to invoke when dropdown is\n\t * closed.\n\t *\n\t * @return {Element} Dropdown content element.\n\t */\n\trenderContent( { onClose } ) {\n\t\tconst {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tshowInserterHelpPanel,\n\n\t\t\t// This prop is experimental to give some time for the quick inserter to mature\n\t\t\t// Feel free to make them stable after a few releases.\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tprioritizePatterns,\n\t\t\tonSelectOrClose,\n\t\t\tselectBlockOnInsert,\n\t\t} = this.props;\n\n\t\tif ( isQuick ) {\n\t\t\treturn (\n\t\t\t\t {\n\t\t\t\t\t\tconst firstBlock =\n\t\t\t\t\t\t\tArray.isArray( blocks ) && blocks?.length\n\t\t\t\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t\t\t\t: blocks;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonSelectOrClose &&\n\t\t\t\t\t\t\ttypeof onSelectOrClose === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tonSelectOrClose( firstBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisAppender={ isAppender }\n\t\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t\t\tselectBlockOnInsert={ selectBlockOnInsert }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t {\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ isAppender }\n\t\t\t\tshowInserterHelpPanel={ showInserterHelpPanel }\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tposition,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\tinsertOnlyAllowedBlock,\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tonSelectOrClose,\n\t\t} = this.props;\n\n\t\tif ( hasSingleBlockType || directInsertBlock ) {\n\t\t\treturn this.renderToggle( { onToggle: insertOnlyAllowedBlock } );\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default compose( [\n\twithSelect(\n\t\t( select, { clientId, rootClientId, shouldDirectInsert = true } ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasInserterItems,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\tgetDirectInsertBlock,\n\t\t\t\tgetSettings,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { getBlockVariations } = select( blocksStore );\n\n\t\t\trootClientId =\n\t\t\t\trootClientId || getBlockRootClientId( clientId ) || undefined;\n\n\t\t\tconst allowedBlocks = getAllowedBlocks( rootClientId );\n\n\t\t\tconst directInsertBlock =\n\t\t\t\tshouldDirectInsert && getDirectInsertBlock( rootClientId );\n\n\t\t\tconst settings = getSettings();\n\n\t\t\tconst hasSingleBlockType =\n\t\t\t\tallowedBlocks?.length === 1 &&\n\t\t\t\tgetBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )\n\t\t\t\t\t?.length === 0;\n\n\t\t\tlet allowedBlockType = false;\n\t\t\tif ( hasSingleBlockType ) {\n\t\t\t\tallowedBlockType = allowedBlocks[ 0 ];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thasItems: hasInserterItems( rootClientId ),\n\t\t\t\thasSingleBlockType,\n\t\t\t\tblockTitle: allowedBlockType ? allowedBlockType.title : '',\n\t\t\t\tallowedBlockType,\n\t\t\t\tdirectInsertBlock,\n\t\t\t\trootClientId,\n\t\t\t\tprioritizePatterns:\n\t\t\t\t\tsettings.__experimentalPreferPatternsOnRoot &&\n\t\t\t\t\t! rootClientId,\n\t\t\t};\n\t\t}\n\t),\n\twithDispatch( ( dispatch, ownProps, { select } ) => {\n\t\treturn {\n\t\t\tinsertOnlyAllowedBlock() {\n\t\t\t\tconst {\n\t\t\t\t\trootClientId,\n\t\t\t\t\tclientId,\n\t\t\t\t\tisAppender,\n\t\t\t\t\thasSingleBlockType,\n\t\t\t\t\tallowedBlockType,\n\t\t\t\t\tdirectInsertBlock,\n\t\t\t\t\tonSelectOrClose,\n\t\t\t\t\tselectBlockOnInsert,\n\t\t\t\t} = ownProps;\n\n\t\t\t\tif ( ! hasSingleBlockType && ! directInsertBlock ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfunction getAdjacentBlockAttributes( attributesToCopy ) {\n\t\t\t\t\tconst { getBlock, getPreviousBlockClientId } =\n\t\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! attributesToCopy ||\n\t\t\t\t\t\t( ! clientId && ! rootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = {};\n\t\t\t\t\tlet adjacentAttributes = {};\n\n\t\t\t\t\t// If there is no clientId, then attempt to get attributes\n\t\t\t\t\t// from the last block within innerBlocks of the root block.\n\t\t\t\t\tif ( ! clientId ) {\n\t\t\t\t\t\tconst parentBlock = getBlock( rootClientId );\n\n\t\t\t\t\t\tif ( parentBlock?.innerBlocks?.length ) {\n\t\t\t\t\t\t\tconst lastInnerBlock =\n\t\t\t\t\t\t\t\tparentBlock.innerBlocks[\n\t\t\t\t\t\t\t\t\tparentBlock.innerBlocks.length - 1\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tdirectInsertBlock &&\n\t\t\t\t\t\t\t\tdirectInsertBlock?.name === lastInnerBlock.name\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tadjacentAttributes = lastInnerBlock.attributes;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Otherwise, attempt to get attributes from the\n\t\t\t\t\t\t// previous block relative to the current clientId.\n\t\t\t\t\t\tconst currentBlock = getBlock( clientId );\n\t\t\t\t\t\tconst previousBlock = getBlock(\n\t\t\t\t\t\t\tgetPreviousBlockClientId( clientId )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( currentBlock?.name === previousBlock?.name ) {\n\t\t\t\t\t\t\tadjacentAttributes =\n\t\t\t\t\t\t\t\tpreviousBlock?.attributes || {};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy over only those attributes flagged to be copied.\n\t\t\t\t\tattributesToCopy.forEach( ( attribute ) => {\n\t\t\t\t\t\tif ( adjacentAttributes.hasOwnProperty( attribute ) ) {\n\t\t\t\t\t\t\tresult[ attribute ] =\n\t\t\t\t\t\t\t\tadjacentAttributes[ attribute ];\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tfunction getInsertionIndex() {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetBlockIndex,\n\t\t\t\t\t\tgetBlockSelectionEnd,\n\t\t\t\t\t\tgetBlockOrder,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\t\t// If the clientId is defined, we insert at the position of the block.\n\t\t\t\t\tif ( clientId ) {\n\t\t\t\t\t\treturn getBlockIndex( clientId );\n\t\t\t\t\t}\n\n\t\t\t\t\t// If there a selected block, we insert after the selected block.\n\t\t\t\t\tconst end = getBlockSelectionEnd();\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isAppender &&\n\t\t\t\t\t\tend &&\n\t\t\t\t\t\tgetBlockRootClientId( end ) === rootClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn getBlockIndex( end ) + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise, we insert at the end of the current rootClientId.\n\t\t\t\t\treturn getBlockOrder( rootClientId ).length;\n\t\t\t\t}\n\n\t\t\t\tconst { insertBlock } = dispatch( blockEditorStore );\n\n\t\t\t\tlet blockToInsert;\n\n\t\t\t\t// Attempt to augment the directInsertBlock with attributes from an adjacent block.\n\t\t\t\t// This ensures styling from nearby blocks is preserved in the newly inserted block.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/37904\n\t\t\t\tif ( directInsertBlock ) {\n\t\t\t\t\tconst newAttributes = getAdjacentBlockAttributes(\n\t\t\t\t\t\tdirectInsertBlock.attributesToCopy\n\t\t\t\t\t);\n\n\t\t\t\t\tblockToInsert = createBlock( directInsertBlock.name, {\n\t\t\t\t\t\t...( directInsertBlock.attributes || {} ),\n\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tblockToInsert = createBlock( allowedBlockType.name );\n\t\t\t\t}\n\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblockToInsert,\n\t\t\t\t\tgetInsertionIndex(),\n\t\t\t\t\trootClientId,\n\t\t\t\t\tselectBlockOnInsert\n\t\t\t\t);\n\n\t\t\t\tif ( onSelectOrClose ) {\n\t\t\t\t\tonSelectOrClose( {\n\t\t\t\t\t\tclientId: blockToInsert?.clientId,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tconst message = sprintf(\n\t\t\t\t\t// translators: %s: the name of the block that has been added\n\t\t\t\t\t__( '%s block added' ),\n\t\t\t\t\tallowedBlockType.title\n\t\t\t\t);\n\t\t\t\tspeak( message );\n\t\t\t},\n\t\t};\n\t} ),\n\t// The global inserter should always be visible, we are using ( ! isAppender && ! rootClientId && ! clientId ) as\n\t// a way to detect the global Inserter.\n\tifCondition(\n\t\t( { hasItems, isAppender, rootClientId, clientId } ) =>\n\t\t\thasItems || ( ! isAppender && ! rootClientId && ! clientId )\n\t),\n] )( Inserter );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { forwardRef, useRef } from '@wordpress/element';\nimport { _x, sprintf } from '@wordpress/i18n';\nimport { Icon, plus } from '@wordpress/icons';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { useMergeRefs } from '@wordpress/compose';\n\nfunction ButtonBlockAppender(\n\t{ rootClientId, className, onFocus, tabIndex, onSelect },\n\tref\n) {\n\tconst inserterButtonRef = useRef();\n\n\tconst mergedInserterButtonRef = useMergeRefs( [ inserterButtonRef, ref ] );\n\treturn (\n\t\t {\n\t\t\t\tif ( onSelect && typeof onSelect === 'function' ) {\n\t\t\t\t\tonSelect( ...args );\n\t\t\t\t}\n\t\t\t\tinserterButtonRef.current?.focus();\n\t\t\t} }\n\t\t\trenderToggle={ ( {\n\t\t\t\tonToggle,\n\t\t\t\tdisabled,\n\t\t\t\tisOpen,\n\t\t\t\tblockTitle,\n\t\t\t\thasSingleBlockType,\n\t\t\t} ) => {\n\t\t\t\tconst isToggleButton = ! hasSingleBlockType;\n\t\t\t\tconst label = hasSingleBlockType\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// translators: %s: the name of the block when there is only one\n\t\t\t\t\t\t\t_x(\n\t\t\t\t\t\t\t\t'Add %s',\n\t\t\t\t\t\t\t\t'directly add the only allowed block'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tblockTitle\n\t\t\t\t\t )\n\t\t\t\t\t: _x(\n\t\t\t\t\t\t\t'Add block',\n\t\t\t\t\t\t\t'Generic label for block inserter button'\n\t\t\t\t\t );\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\tisAppender\n\t\t/>\n\t);\n}\n\n/**\n * Use `ButtonBlockAppender` instead.\n *\n * @deprecated\n */\nexport const ButtonBlockerAppender = forwardRef( ( props, ref ) => {\n\tdeprecated( `wp.blockEditor.ButtonBlockerAppender`, {\n\t\talternative: 'wp.blockEditor.ButtonBlockAppender',\n\t\tsince: '5.9',\n\t} );\n\n\treturn ButtonBlockAppender( props, ref );\n} );\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/button-block-appender/README.md\n */\nexport default forwardRef( ButtonBlockAppender );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, forwardRef, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { range, GridRect, getGridInfo } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';\nimport ButtonBlockAppender from '../button-block-appender';\nimport { unlock } from '../../lock-unlock';\n\nexport function GridVisualizer( { clientId, contentRef, parentLayout } ) {\n\tconst isDistractionFree = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree,\n\t\t[]\n\t);\n\tconst gridElement = useBlockElement( clientId );\n\n\tif ( isDistractionFree || ! gridElement ) {\n\t\treturn null;\n\t}\n\n\tconst isManualGrid =\n\t\tparentLayout?.isManualPlacement &&\n\t\twindow.__experimentalEnableGridInteractivity;\n\treturn (\n\t\t\n\t);\n}\n\nconst GridVisualizerGrid = forwardRef(\n\t( { gridClientId, gridElement, isManualGrid }, ref ) => {\n\t\tconst [ gridInfo, setGridInfo ] = useState( () =>\n\t\t\tgetGridInfo( gridElement )\n\t\t);\n\t\tconst [ isDroppingAllowed, setIsDroppingAllowed ] = useState( false );\n\n\t\tuseEffect( () => {\n\t\t\tconst observers = [];\n\t\t\tfor ( const element of [ gridElement, ...gridElement.children ] ) {\n\t\t\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\t\t\tsetGridInfo( getGridInfo( gridElement ) );\n\t\t\t\t} );\n\t\t\t\tobserver.observe( element );\n\t\t\t\tobservers.push( observer );\n\t\t\t}\n\t\t\treturn () => {\n\t\t\t\tfor ( const observer of observers ) {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t};\n\t\t}, [ gridElement ] );\n\n\t\tuseEffect( () => {\n\t\t\tfunction onGlobalDrag() {\n\t\t\t\tsetIsDroppingAllowed( true );\n\t\t\t}\n\t\t\tfunction onGlobalDragEnd() {\n\t\t\t\tsetIsDroppingAllowed( false );\n\t\t\t}\n\t\t\tdocument.addEventListener( 'drag', onGlobalDrag );\n\t\t\tdocument.addEventListener( 'dragend', onGlobalDragEnd );\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener( 'drag', onGlobalDrag );\n\t\t\t\tdocument.removeEventListener( 'dragend', onGlobalDragEnd );\n\t\t\t};\n\t\t}, [] );\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ isManualGrid ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\tArray.from( { length: gridInfo.numItems }, ( _, i ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) )\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n);\n\nfunction ManualGridVisualizer( { gridClientId, gridInfo } ) {\n\tconst [ highlightedRect, setHighlightedRect ] = useState( null );\n\n\tconst gridItemStyles = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockOrder, getBlockStyles } = unlock(\n\t\t\t\tselect( blockEditorStore )\n\t\t\t);\n\t\t\tconst blockOrder = getBlockOrder( gridClientId );\n\t\t\treturn getBlockStyles( blockOrder );\n\t\t},\n\t\t[ gridClientId ]\n\t);\n\tconst occupiedRects = useMemo( () => {\n\t\tconst rects = [];\n\t\tfor ( const style of Object.values( gridItemStyles ) ) {\n\t\t\tconst {\n\t\t\t\tcolumnStart,\n\t\t\t\trowStart,\n\t\t\t\tcolumnSpan = 1,\n\t\t\t\trowSpan = 1,\n\t\t\t} = style?.layout ?? {};\n\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trects.push(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\t\treturn rects;\n\t}, [ gridItemStyles ] );\n\n\treturn range( 1, gridInfo.numRows ).map( ( row ) =>\n\t\trange( 1, gridInfo.numColumns ).map( ( column ) => {\n\t\t\tconst isCellOccupied = occupiedRects.some( ( rect ) =>\n\t\t\t\trect.contains( column, row )\n\t\t\t);\n\t\t\tconst isHighlighted =\n\t\t\t\thighlightedRect?.contains( column, row ) ?? false;\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{ isCellOccupied ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t);\n\t\t} )\n\t);\n}\n\nfunction GridVisualizerCell( { color, children, className } ) {\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nfunction useGridVisualizerDropZone(\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect\n) {\n\tconst {\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tcanInsertBlockType,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\treturn useDropZoneWithValidation( {\n\t\tvalidateDrag( srcClientId ) {\n\t\t\tconst blockName = getBlockName( srcClientId );\n\t\t\tif ( ! canInsertBlockType( blockName, gridClientId ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tconst rect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t} );\n\t\t\tconst isInBounds = new GridRect( {\n\t\t\t\tcolumnSpan: gridInfo.numColumns,\n\t\t\t\trowSpan: gridInfo.numRows,\n\t\t\t} ).containsRect( rect );\n\t\t\treturn isInBounds;\n\t\t},\n\t\tonDragEnter( srcClientId ) {\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tsetHighlightedRect(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\trowStart: row,\n\t\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tonDragLeave() {\n\t\t\t// onDragEnter can be called before onDragLeave if the user moves\n\t\t\t// their mouse quickly, so only clear the highlight if it was set\n\t\t\t// by this cell.\n\t\t\tsetHighlightedRect( ( prevHighlightedRect ) =>\n\t\t\t\tprevHighlightedRect?.columnStart === column &&\n\t\t\t\tprevHighlightedRect?.rowStart === row\n\t\t\t\t\t? null\n\t\t\t\t\t: prevHighlightedRect\n\t\t\t);\n\t\t},\n\t\tonDrop( srcClientId ) {\n\t\t\tsetHighlightedRect( null );\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tupdateBlockAttributes( srcClientId, {\n\t\t\t\tstyle: {\n\t\t\t\t\t...attributes.style,\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tmoveBlocksToPosition(\n\t\t\t\t[ srcClientId ],\n\t\t\t\tgetBlockRootClientId( srcClientId ),\n\t\t\t\tgridClientId,\n\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t);\n\t\t},\n\t} );\n}\n\nfunction GridVisualizerDropZone( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect,\n} ) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction GridVisualizerAppender( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect,\n} ) {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\treturn (\n\t\t {\n\t\t\t\tif ( ! block ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tupdateBlockAttributes( block.clientId, {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t[ block.clientId ],\n\t\t\t\t\tgridClientId,\n\t\t\t\t\tgridClientId,\n\t\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nfunction useDropZoneWithValidation( {\n\tvalidateDrag,\n\tonDragEnter,\n\tonDragLeave,\n\tonDrop,\n} ) {\n\tconst { getDraggedBlockClientIds } = useSelect( blockEditorStore );\n\treturn useDropZone( {\n\t\tonDragEnter() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDragEnter( srcClientId );\n\t\t\t}\n\t\t},\n\t\tonDragLeave() {\n\t\t\tonDragLeave();\n\t\t},\n\t\tonDrop() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDrop( srcClientId );\n\t\t\t}\n\t\t},\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { ResizableBox } from '@wordpress/components';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { getComputedCSS, getGridTracks, getClosestTrack } from './utils';\n\nexport function GridItemResizer( {\n\tclientId,\n\tbounds,\n\tonChange,\n\tparentLayout,\n} ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst rootBlockElement = blockElement?.parentElement;\n\tconst { isManualPlacement } = parentLayout;\n\n\tif ( ! blockElement || ! rootBlockElement ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t);\n}\n\nfunction GridItemResizerInner( {\n\tclientId,\n\tbounds,\n\tblockElement,\n\trootBlockElement,\n\tonChange,\n\tisManualGrid,\n} ) {\n\tconst [ resizeDirection, setResizeDirection ] = useState( null );\n\tconst [ enableSide, setEnableSide ] = useState( {\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t} );\n\n\tuseEffect( () => {\n\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\tconst blockClientRect = blockElement.getBoundingClientRect();\n\t\t\tconst rootBlockClientRect =\n\t\t\t\trootBlockElement.getBoundingClientRect();\n\t\t\tsetEnableSide( {\n\t\t\t\ttop: blockClientRect.top > rootBlockClientRect.top,\n\t\t\t\tbottom: blockClientRect.bottom < rootBlockClientRect.bottom,\n\t\t\t\tleft: blockClientRect.left > rootBlockClientRect.left,\n\t\t\t\tright: blockClientRect.right < rootBlockClientRect.right,\n\t\t\t} );\n\t\t} );\n\t\tobserver.observe( blockElement );\n\t\treturn () => observer.disconnect();\n\t}, [ blockElement, rootBlockElement ] );\n\n\tconst justification = {\n\t\tright: 'left',\n\t\tleft: 'right',\n\t};\n\n\tconst alignment = {\n\t\ttop: 'flex-end',\n\t\tbottom: 'flex-start',\n\t};\n\n\tconst styles = {\n\t\tdisplay: 'flex',\n\t\tjustifyContent: 'center',\n\t\talignItems: 'center',\n\t\t...( justification[ resizeDirection ] && {\n\t\t\tjustifyContent: justification[ resizeDirection ],\n\t\t} ),\n\t\t...( alignment[ resizeDirection ] && {\n\t\t\talignItems: alignment[ resizeDirection ],\n\t\t} ),\n\t};\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\t/*\n\t\t\t\t\t * Captures the pointer to avoid hiccups while dragging over objects\n\t\t\t\t\t * like iframes and ensures that the event to end the drag is\n\t\t\t\t\t * captured by the target (resize handle) whether or not it’s under\n\t\t\t\t\t * the pointer.\n\t\t\t\t\t */\n\t\t\t\t\ttarget.setPointerCapture( pointerId );\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ ( event, direction ) => {\n\t\t\t\t\t/*\n\t\t\t\t\t * The container justification and alignment need to be set\n\t\t\t\t\t * according to the direction the resizer is being dragged in,\n\t\t\t\t\t * so that it resizes in the right direction.\n\t\t\t\t\t */\n\t\t\t\t\tsetResizeDirection( direction );\n\t\t\t\t} }\n\t\t\t\tonResizeStop={ ( event, direction, boxElement ) => {\n\t\t\t\t\tconst columnGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'column-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst rowGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'row-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst gridColumnTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-columns'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcolumnGap\n\t\t\t\t\t);\n\t\t\t\t\tconst gridRowTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-rows'\n\t\t\t\t\t\t),\n\t\t\t\t\t\trowGap\n\t\t\t\t\t);\n\t\t\t\t\tconst rect = new window.DOMRect(\n\t\t\t\t\t\tblockElement.offsetLeft + boxElement.offsetLeft,\n\t\t\t\t\t\tblockElement.offsetTop + boxElement.offsetTop,\n\t\t\t\t\t\tboxElement.offsetWidth,\n\t\t\t\t\t\tboxElement.offsetHeight\n\t\t\t\t\t);\n\t\t\t\t\tconst columnStart =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.left ) + 1;\n\t\t\t\t\tconst rowStart =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.top ) + 1;\n\t\t\t\t\tconst columnEnd =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tconst rowEnd =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.bottom, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\tcolumnSpan: columnEnd - columnStart + 1,\n\t\t\t\t\t\trowSpan: rowEnd - rowStart + 1,\n\t\t\t\t\t\tcolumnStart: isManualGrid ? columnStart : undefined,\n\t\t\t\t\t\trowStart: isManualGrid ? rowStart : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronUp = (\n\t\n\t\t\n\t\n);\n\nexport default chevronUp;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronDown = (\n\t\n\t\t\n\t\n);\n\nexport default chevronDown;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tVisuallyHidden,\n\tToolbarButton,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport {\n\tchevronLeft,\n\tchevronUp,\n\tchevronDown,\n\tchevronRight,\n} from '@wordpress/icons';\nimport { useDispatch } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockControls from '../block-controls';\nimport { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';\nimport { store as blockEditorStore } from '../../store';\n\nexport function GridItemMovers( {\n\tlayout,\n\tparentLayout,\n\tonChange,\n\tgridClientId,\n\tblockClientId,\n} ) {\n\tconst { moveBlocksToPosition, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst columnStart = layout?.columnStart ?? 1;\n\tconst rowStart = layout?.rowStart ?? 1;\n\tconst columnSpan = layout?.columnSpan ?? 1;\n\tconst rowSpan = layout?.rowSpan ?? 1;\n\tconst columnEnd = columnStart + columnSpan - 1;\n\tconst rowEnd = rowStart + rowSpan - 1;\n\tconst columnCount = parentLayout?.columnCount;\n\tconst rowCount = parentLayout?.rowCount;\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tcolumnCount\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\tcolumnStart: columnStart - 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart - 1,\n\t\t\t\t\t\t\t\t\trowStart\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\trowStart: rowStart - 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\trowStart - 1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t= rowCount }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\trowStart: rowStart + 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\trowStart + 1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t= columnCount }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\tcolumnStart: columnStart + 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart + 1,\n\t\t\t\t\t\t\t\t\trowStart\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nfunction GridItemMover( {\n\tclassName,\n\ticon,\n\tlabel,\n\tisDisabled,\n\tonClick,\n\tdescription,\n} ) {\n\tconst instanceId = useInstanceId( GridItemMover );\n\tconst descriptionId = `block-editor-grid-item-mover-button__description-${ instanceId }`;\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\t{ description }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useStyleOverride } from './utils';\nimport { useLayout } from '../components/block-list/layout';\nimport {\n\tGridVisualizer,\n\tGridItemResizer,\n\tGridItemMovers,\n} from '../components/grid';\n\nfunction useBlockPropsChildLayoutStyles( { style } ) {\n\tconst shouldRenderChildLayoutStyles = useSelect( ( select ) => {\n\t\treturn ! select( blockEditorStore ).getSettings().disableLayoutStyles;\n\t} );\n\tconst layout = style?.layout ?? {};\n\tconst {\n\t\tselfStretch,\n\t\tflexSize,\n\t\tcolumnStart,\n\t\trowStart,\n\t\tcolumnSpan,\n\t\trowSpan,\n\t} = layout;\n\tconst parentLayout = useLayout() || {};\n\tconst { columnCount, minimumColumnWidth } = parentLayout;\n\tconst id = useInstanceId( useBlockPropsChildLayoutStyles );\n\tconst selector = `.wp-container-content-${ id }`;\n\n\t// Check that the grid layout attributes are of the correct type, so that we don't accidentally\n\t// write code that stores a string attribute instead of a number.\n\tif ( process.env.NODE_ENV === 'development' ) {\n\t\tif ( columnStart && typeof columnStart !== 'number' ) {\n\t\t\tthrow new Error( 'columnStart must be a number' );\n\t\t}\n\t\tif ( rowStart && typeof rowStart !== 'number' ) {\n\t\t\tthrow new Error( 'rowStart must be a number' );\n\t\t}\n\t\tif ( columnSpan && typeof columnSpan !== 'number' ) {\n\t\t\tthrow new Error( 'columnSpan must be a number' );\n\t\t}\n\t\tif ( rowSpan && typeof rowSpan !== 'number' ) {\n\t\t\tthrow new Error( 'rowSpan must be a number' );\n\t\t}\n\t}\n\n\tlet css = '';\n\tif ( shouldRenderChildLayoutStyles ) {\n\t\tif ( selfStretch === 'fixed' && flexSize ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tflex-basis: ${ flexSize };\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}`;\n\t\t} else if ( selfStretch === 'fill' ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tflex-grow: 1;\n\t\t\t}`;\n\t\t} else if ( columnStart && columnSpan ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tgrid-column: ${ columnStart } / span ${ columnSpan };\n\t\t\t}`;\n\t\t} else if ( columnStart ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tgrid-column: ${ columnStart };\n\t\t\t}`;\n\t\t} else if ( columnSpan ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tgrid-column: span ${ columnSpan };\n\t\t\t}`;\n\t\t}\n\t\tif ( rowStart && rowSpan ) {\n\t\t\tcss += `${ selector } {\n\t\t\t\tgrid-row: ${ rowStart } / span ${ rowSpan };\n\t\t\t}`;\n\t\t} else if ( rowStart ) {\n\t\t\tcss += `${ selector } {\n\t\t\t\tgrid-row: ${ rowStart };\n\t\t\t}`;\n\t\t} else if ( rowSpan ) {\n\t\t\tcss += `${ selector } {\n\t\t\t\tgrid-row: span ${ rowSpan };\n\t\t\t}`;\n\t\t}\n\t\t/**\n\t\t * If minimumColumnWidth is set on the parent, or if no\n\t\t * columnCount is set, the grid is responsive so a\n\t\t * container query is needed for the span to resize.\n\t\t */\n\t\tif (\n\t\t\t( columnSpan || columnStart ) &&\n\t\t\t( minimumColumnWidth || ! columnCount )\n\t\t) {\n\t\t\tlet parentColumnValue = parseFloat( minimumColumnWidth );\n\t\t\t/**\n\t\t\t * 12rem is the default minimumColumnWidth value.\n\t\t\t * If parentColumnValue is not a number, default to 12.\n\t\t\t */\n\t\t\tif ( isNaN( parentColumnValue ) ) {\n\t\t\t\tparentColumnValue = 12;\n\t\t\t}\n\n\t\t\tlet parentColumnUnit = minimumColumnWidth?.replace(\n\t\t\t\tparentColumnValue,\n\t\t\t\t''\n\t\t\t);\n\t\t\t/**\n\t\t\t * Check that parent column unit is either 'px', 'rem' or 'em'.\n\t\t\t * If not, default to 'rem'.\n\t\t\t */\n\t\t\tif ( ! [ 'px', 'rem', 'em' ].includes( parentColumnUnit ) ) {\n\t\t\t\tparentColumnUnit = 'rem';\n\t\t\t}\n\n\t\t\tlet numColsToBreakAt = 2;\n\n\t\t\tif ( columnSpan && columnStart ) {\n\t\t\t\tnumColsToBreakAt = columnSpan + columnStart - 1;\n\t\t\t} else if ( columnSpan ) {\n\t\t\t\tnumColsToBreakAt = columnSpan;\n\t\t\t} else {\n\t\t\t\tnumColsToBreakAt = columnStart;\n\t\t\t}\n\n\t\t\tconst defaultGapValue = parentColumnUnit === 'px' ? 24 : 1.5;\n\t\t\tconst containerQueryValue =\n\t\t\t\tnumColsToBreakAt * parentColumnValue +\n\t\t\t\t( numColsToBreakAt - 1 ) * defaultGapValue;\n\t\t\t// For blocks that only span one column, we want to remove any rowStart values as\n\t\t\t// the container reduces in size, so that blocks are still arranged in markup order.\n\t\t\tconst minimumContainerQueryValue =\n\t\t\t\tparentColumnValue * 2 + defaultGapValue - 1;\n\t\t\t// If a span is set we want to preserve it as long as possible, otherwise we just reset the value.\n\t\t\tconst gridColumnValue =\n\t\t\t\tcolumnSpan && columnSpan > 1 ? '1/-1' : 'auto';\n\n\t\t\tcss += `@container (max-width: ${ Math.max(\n\t\t\t\tcontainerQueryValue,\n\t\t\t\tminimumContainerQueryValue\n\t\t\t) }${ parentColumnUnit }) {\n\t\t\t\t${ selector } {\n\t\t\t\t\tgrid-column: ${ gridColumnValue };\n\t\t\t\t\tgrid-row: auto;\n\t\t\t\t}\n\t\t\t}`;\n\t\t}\n\t}\n\n\tuseStyleOverride( { css } );\n\n\t// Only attach a container class if there is generated CSS to be attached.\n\tif ( ! css ) {\n\t\treturn;\n\t}\n\n\t// Attach a `wp-container-content` id-based classname.\n\treturn { className: `wp-container-content-${ id }` };\n}\n\nfunction ChildLayoutControlsPure( { clientId, style, setAttributes } ) {\n\tconst parentLayout = useLayout() || {};\n\tconst {\n\t\ttype: parentLayoutType = 'default',\n\t\tallowSizingOnChildren = false,\n\t\tisManualPlacement,\n\t} = parentLayout;\n\n\tconst rootClientId = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( blockEditorStore ).getBlockRootClientId( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Use useState() instead of useRef() so that GridItemResizer updates when ref is set.\n\tconst [ resizerBounds, setResizerBounds ] = useState();\n\n\tif ( parentLayoutType !== 'grid' ) {\n\t\treturn null;\n\t}\n\n\tfunction updateLayout( layout ) {\n\t\tsetAttributes( {\n\t\t\tstyle: {\n\t\t\t\t...style,\n\t\t\t\tlayout: {\n\t\t\t\t\t...style?.layout,\n\t\t\t\t\t...layout,\n\t\t\t\t},\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ allowSizingOnChildren && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isManualPlacement &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\n\t);\n}\n\nexport default {\n\tuseBlockProps: useBlockPropsChildLayoutStyles,\n\tedit: ChildLayoutControlsPure,\n\tattributeKeys: [ 'style' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { ToolbarButton } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { BlockControls } from '../components';\nimport { unlock } from '../lock-unlock';\n\n// The implementation of content locking is mainly in this file, although the mechanism\n// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect\n// at block-editor/src/components/block-list/index.js.\n// Besides the components on this file and the file referenced above the implementation\n// also includes artifacts on the store (actions, reducers, and selector).\n\nfunction ContentLockControlsPure( { clientId } ) {\n\tconst { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetContentLockingParent,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\treturn {\n\t\t\t\ttemplateLock: getTemplateLock( clientId ),\n\t\t\t\tisLockedByParent: !! getContentLockingParent( clientId ),\n\t\t\t\tisEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { stopEditingAsBlocks } = unlock( useDispatch( blockEditorStore ) );\n\tconst isContentLocked =\n\t\t! isLockedByParent && templateLock === 'contentOnly';\n\n\tconst stopEditingAsBlockCallback = useCallback( () => {\n\t\tstopEditingAsBlocks( clientId );\n\t}, [ clientId, stopEditingAsBlocks ] );\n\n\tif ( ! isContentLocked && ! isEditingAsBlocks ) {\n\t\treturn null;\n\t}\n\n\tconst showStopEditingAsBlocks = isEditingAsBlocks && ! isContentLocked;\n\n\treturn (\n\t\tshowStopEditingAsBlocks && (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ __( 'Done' ) }\n\t\t\t\t\n\t\t\t\n\t\t)\n\t);\n}\n\nexport default {\n\tedit: ContentLockControlsPure,\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nconst META_ATTRIBUTE_NAME = 'metadata';\n\n/**\n * Filters registered block settings, extending attributes to include `metadata`.\n *\n * see: https://github.com/WordPress/gutenberg/pull/40393/files#r864632012\n *\n * @param {Object} blockTypeSettings Original block settings.\n * @return {Object} Filtered block settings.\n */\nexport function addMetaAttribute( blockTypeSettings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( blockTypeSettings?.attributes?.[ META_ATTRIBUTE_NAME ]?.type ) {\n\t\treturn blockTypeSettings;\n\t}\n\n\tblockTypeSettings.attributes = {\n\t\t...blockTypeSettings.attributes,\n\t\t[ META_ATTRIBUTE_NAME ]: {\n\t\t\ttype: 'object',\n\t\t},\n\t};\n\n\treturn blockTypeSettings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/metadata/addMetaAttribute',\n\taddMetaAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport { PanelBody, ToggleControl } from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( {\n\tname,\n\tclientId,\n\tmetadata: { ignoredHookedBlocks = [] } = {},\n} ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\t// A hooked block added via a filter will not be exposed through a block\n\t// type's `blockHooks` property; however, if the containing layout has been\n\t// modified, it will be present in the anchor block's `ignoredHookedBlocks`\n\t// metadata.\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { name: blockName, blockHooks } ) =>\n\t\t\t\t\t( blockHooks && name in blockHooks ) ||\n\t\t\t\t\tignoredHookedBlocks.includes( blockName )\n\t\t\t),\n\t\t[ blockTypes, name, ignoredHookedBlocks ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockRootClientId, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\t// If we haven't found a blockHooks field with a relative position for the hooked\n\t\t\t\t\t\t\t// block, it means that it was added by a filter. In this case, we look for the block\n\t\t\t\t\t\t\t// both among the current block's siblings and its children.\n\t\t\t\t\t\t\tcandidates = [\n\t\t\t\t\t\t\t\t...getBlocks( rootClientId ),\n\t\t\t\t\t\t\t\t...getBlocks( clientId ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId ]\n\t);\n\n\tconst { getBlockIndex, getBlockCount, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tconst blockIndex = getBlockIndex( clientId );\n\t\tconst innerBlocksLength = getBlockCount( clientId );\n\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase undefined:\n\t\t\t\t// If we do not know the relative position, it is because the block was\n\t\t\t\t// added via a filter. In this case, we default to inserting it after the\n\t\t\t\t// current block.\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\tblockIndex + 1,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t

\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

{ vendor }

\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t
\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t\n\t\t
\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useBlockEditContext } from '../components/block-edit';\n\nfunction isObjectEmpty( object ) {\n\treturn ! object || Object.keys( object ).length === 0;\n}\n\nexport function useBlockBindingsUtils() {\n\tconst { clientId } = useBlockEditContext();\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { getBlockAttributes } = useRegistry().select( blockEditorStore );\n\n\t/**\n\t * Updates the value of the bindings connected to block attributes.\n\t * It removes the binding when the new value is `undefined`.\n\t *\n\t * @param {Object} bindings Bindings including the attributes to update and the new object.\n\t * @param {string} bindings.source The source name to connect to.\n\t * @param {Object} [bindings.args] Object containing the arguments needed by the source.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { updateBlockBindings } = useBlockBindingsUtils();\n\t * updateBlockBindings( {\n\t * url: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'url_custom_field',\n\t * },\n\t * \t },\n\t * alt: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'text_custom_field',\n\t * },\n\t * \t }\n\t * } );\n\t * ```\n\t */\n\tconst updateBlockBindings = ( bindings ) => {\n\t\tconst { metadata: { bindings: currentBindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( clientId );\n\t\tconst newBindings = { ...currentBindings };\n\n\t\tObject.entries( bindings ).forEach( ( [ attribute, binding ] ) => {\n\t\t\tif ( ! binding && newBindings[ attribute ] ) {\n\t\t\t\tdelete newBindings[ attribute ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnewBindings[ attribute ] = binding;\n\t\t} );\n\n\t\tconst newMetadata = {\n\t\t\t...metadata,\n\t\t\tbindings: newBindings,\n\t\t};\n\n\t\tif ( isObjectEmpty( newMetadata.bindings ) ) {\n\t\t\tdelete newMetadata.bindings;\n\t\t}\n\n\t\tupdateBlockAttributes( clientId, {\n\t\t\tmetadata: isObjectEmpty( newMetadata ) ? undefined : newMetadata,\n\t\t} );\n\t};\n\n\t/**\n\t * Removes the bindings property of the `metadata` attribute.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { removeAllBlockBindings } = useBlockBindingsUtils();\n\t * removeAllBlockBindings();\n\t * ```\n\t */\n\tconst removeAllBlockBindings = () => {\n\t\tconst { metadata: { bindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( clientId );\n\t\tupdateBlockAttributes( clientId, {\n\t\t\tmetadata: isObjectEmpty( metadata ) ? undefined : metadata,\n\t\t} );\n\t};\n\n\treturn { updateBlockBindings, removeAllBlockBindings };\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { privateApis as blocksPrivateApis } from '@wordpress/blocks';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalText as Text,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useContext, Fragment } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tcanBindAttribute,\n\tgetBindableAttributes,\n} from '../hooks/use-bindings-attributes';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\nimport BlockContext from '../components/block-context';\nimport { useBlockBindingsUtils } from '../utils/block-bindings';\nimport { store as blockEditorStore } from '../store';\n\nconst { DropdownMenuV2 } = unlock( componentsPrivateApis );\n\nconst EMPTY_OBJECT = {};\n\nconst useToolsPanelDropdownMenuProps = () => {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n};\n\nfunction BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {\n\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\tconst registeredSources = getBlockBindingsSources();\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst currentKey = binding?.args?.key;\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( fieldsList ).map( ( [ name, fields ], i ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ Object.keys( fieldsList ).length > 1 && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ registeredSources[ name ].label }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ Object.entries( fields ).map( ( [ key, args ] ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t\t\t[ attribute ]: {\n\t\t\t\t\t\t\t\t\t\t\tsource: name,\n\t\t\t\t\t\t\t\t\t\t\targs: { key },\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tname={ attribute + '-binding' }\n\t\t\t\t\t\t\t\tvalue={ key }\n\t\t\t\t\t\t\t\tchecked={ key === currentKey }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ args?.label }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ args?.value }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t\n\t\t\t\t\t{ i !== Object.keys( fieldsList ).length - 1 && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction BlockBindingsAttribute( { attribute, binding, fieldsList } ) {\n\tconst { source: sourceName, args } = binding || {};\n\tconst sourceProps =\n\t\tunlock( blocksPrivateApis ).getBlockBindingsSource( sourceName );\n\tconst isSourceInvalid = ! sourceProps;\n\treturn (\n\t\t\n\t\t\t{ attribute }\n\t\t\t{ !! binding && (\n\t\t\t\t\n\t\t\t\t\t{ isSourceInvalid\n\t\t\t\t\t\t? __( 'Invalid source' )\n\t\t\t\t\t\t: fieldsList?.[ sourceName ]?.[ args?.key ]?.label ||\n\t\t\t\t\t\t sourceProps?.label ||\n\t\t\t\t\t\t sourceName }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction ReadOnlyBlockBindingsPanelItems( { bindings, fieldsList } ) {\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( bindings ).map( ( [ attribute, binding ] ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction EditableBlockBindingsPanelItems( {\n\tattributes,\n\tbindings,\n\tfieldsList,\n} ) {\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ attributes.map( ( attribute ) => {\n\t\t\t\tconst binding = bindings[ attribute ];\n\t\t\t\treturn (\n\t\t\t\t\t !! binding }\n\t\t\t\t\t\tlabel={ attribute }\n\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t[ attribute ]: undefined,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\nexport const BlockBindingsPanel = ( { name: blockName, metadata } ) => {\n\tconst registry = useRegistry();\n\tconst blockContext = useContext( BlockContext );\n\tconst { removeAllBlockBindings } = useBlockBindingsUtils();\n\tconst bindableAttributes = getBindableAttributes( blockName );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\t// `useSelect` is used purposely here to ensure `getFieldsList`\n\t// is updated whenever there are updates in block context.\n\t// `source.getFieldsList` may also call a selector via `registry.select`.\n\tconst _fieldsList = {};\n\tconst { fieldsList, canUpdateBlockBindings } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\t\t\tconst registeredSources = getBlockBindingsSources();\n\t\t\tObject.entries( registeredSources ).forEach(\n\t\t\t\t( [ sourceName, { getFieldsList, usesContext } ] ) => {\n\t\t\t\t\tif ( getFieldsList ) {\n\t\t\t\t\t\t// Populate context.\n\t\t\t\t\t\tconst context = {};\n\t\t\t\t\t\tif ( usesContext?.length ) {\n\t\t\t\t\t\t\tfor ( const key of usesContext ) {\n\t\t\t\t\t\t\t\tcontext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst sourceList = getFieldsList( {\n\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t// Only add source if the list is not empty.\n\t\t\t\t\t\tif ( Object.keys( sourceList || {} ).length ) {\n\t\t\t\t\t\t\t_fieldsList[ sourceName ] = { ...sourceList };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tfieldsList:\n\t\t\t\t\tObject.values( _fieldsList ).length > 0\n\t\t\t\t\t\t? _fieldsList\n\t\t\t\t\t\t: EMPTY_OBJECT,\n\t\t\t\tcanUpdateBlockBindings:\n\t\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t\t.canUpdateBlockBindings,\n\t\t\t};\n\t\t},\n\t\t[ blockContext, bindableAttributes, registry ]\n\t);\n\t// Return early if there are no bindable attributes.\n\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\treturn null;\n\t}\n\t// Filter bindings to only show bindable attributes and remove pattern overrides.\n\tconst { bindings } = metadata || {};\n\tconst filteredBindings = { ...bindings };\n\tObject.keys( filteredBindings ).forEach( ( key ) => {\n\t\tif (\n\t\t\t! canBindAttribute( blockName, key ) ||\n\t\t\tfilteredBindings[ key ].source === 'core/pattern-overrides'\n\t\t) {\n\t\t\tdelete filteredBindings[ key ];\n\t\t}\n\t} );\n\n\t// Lock the UI when the user can't update bindings or there are no fields to connect to.\n\tconst readOnly =\n\t\t! canUpdateBlockBindings || ! Object.keys( fieldsList ).length;\n\n\tif ( readOnly && Object.keys( filteredBindings ).length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tremoveAllBlockBindings();\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\tclassName=\"block-editor-bindings__panel\"\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t{ readOnly ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Attributes connected to custom fields or other dynamic data.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useEffect, useMemo } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { GridRect } from './utils';\nimport { setImmutably } from '../../utils/object';\n\nexport function useGridLayoutSync( { clientId: gridClientId } ) {\n\tconst { gridLayout, blockOrder, selectedBlockLayout } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getBlockOrder } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst selectedBlock = select( blockEditorStore ).getSelectedBlock();\n\t\t\treturn {\n\t\t\t\tgridLayout: getBlockAttributes( gridClientId ).layout ?? {},\n\t\t\t\tblockOrder: getBlockOrder( gridClientId ),\n\t\t\t\tselectedBlockLayout: selectedBlock?.attributes.style?.layout,\n\t\t\t};\n\t\t},\n\t\t[ gridClientId ]\n\t);\n\n\tconst { getBlockAttributes, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst selectedBlockRect = useMemo(\n\t\t() =>\n\t\t\tselectedBlockLayout ? new GridRect( selectedBlockLayout ) : null,\n\t\t[ selectedBlockLayout ]\n\t);\n\n\tconst previouslySelectedBlockRect = usePrevious( selectedBlockRect );\n\tconst previousIsManualPlacement = usePrevious(\n\t\tgridLayout.isManualPlacement\n\t);\n\tconst previousBlockOrder = usePrevious( blockOrder );\n\n\tuseEffect( () => {\n\t\tconst updates = {};\n\n\t\tif ( gridLayout.isManualPlacement ) {\n\t\t\tconst occupiedRects = [];\n\n\t\t\t// Respect the position of blocks that already have a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = getBlockAttributes( clientId ).style?.layout ?? {};\n\t\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\toccupiedRects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\trowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// When in manual mode, ensure that every block has a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = attributes.style?.layout ?? {};\n\t\t\t\tif ( columnStart && rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst [ newColumnStart, newRowStart ] = placeBlock(\n\t\t\t\t\toccupiedRects,\n\t\t\t\t\tgridLayout.columnCount,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan,\n\t\t\t\t\tpreviouslySelectedBlockRect?.columnEnd,\n\t\t\t\t\tpreviouslySelectedBlockRect?.rowEnd\n\t\t\t\t);\n\t\t\t\toccupiedRects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t\tupdates[ clientId ] = {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...attributes.style,\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Ensure there's enough rows to fit all blocks.\n\t\t\tconst bottomMostRow = Math.max(\n\t\t\t\t...occupiedRects.map( ( r ) => r.rowEnd )\n\t\t\t);\n\t\t\tif (\n\t\t\t\t! gridLayout.rowCount ||\n\t\t\t\tgridLayout.rowCount < bottomMostRow\n\t\t\t) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: bottomMostRow,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Unset grid layout attributes for blocks removed from the grid.\n\t\t\tfor ( const clientId of previousBlockOrder ?? [] ) {\n\t\t\t\tif ( ! blockOrder.includes( clientId ) ) {\n\t\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\t\t\t// Block was removed from the editor, so nothing to do.\n\t\t\t\t\tif ( rootClientId === null ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if the block is being moved to another grid.\n\t\t\t\t\t// If so, do nothing and let the new grid parent handle\n\t\t\t\t\t// the attributes.\n\t\t\t\t\tconst rootAttributes = getBlockAttributes( rootClientId );\n\t\t\t\t\tif ( rootAttributes?.layout?.type === 'grid' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\t\tconst {\n\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\trowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t...layout\n\t\t\t\t\t} = attributes.style?.layout ?? {};\n\n\t\t\t\t\tif ( columnStart || rowStart || columnSpan || rowSpan ) {\n\t\t\t\t\t\tconst hasEmptyLayoutAttribute =\n\t\t\t\t\t\t\tObject.keys( layout ).length === 0;\n\n\t\t\t\t\t\tupdates[ clientId ] = setImmutably(\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\t[ 'style', 'layout' ],\n\t\t\t\t\t\t\thasEmptyLayoutAttribute ? undefined : layout\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Remove all of the columnStart and rowStart values\n\t\t\t// when switching from manual to auto mode,\n\t\t\tif ( previousIsManualPlacement === true ) {\n\t\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\t\tconst { columnStart, rowStart, ...layout } =\n\t\t\t\t\t\tattributes.style?.layout ?? {};\n\t\t\t\t\t// Only update attributes if columnStart or rowStart are set.\n\t\t\t\t\tif ( columnStart || rowStart ) {\n\t\t\t\t\t\tconst hasEmptyLayoutAttribute =\n\t\t\t\t\t\t\tObject.keys( layout ).length === 0;\n\n\t\t\t\t\t\tupdates[ clientId ] = setImmutably(\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\t[ 'style', 'layout' ],\n\t\t\t\t\t\t\thasEmptyLayoutAttribute ? undefined : layout\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove row styles in auto mode\n\t\t\tif ( gridLayout.rowCount ) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( Object.keys( updates ).length ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes(\n\t\t\t\tObject.keys( updates ),\n\t\t\t\tupdates,\n\t\t\t\t/* uniqueByBlock: */ true\n\t\t\t);\n\t\t}\n\t}, [\n\t\t// Actual deps to sync:\n\t\tgridClientId,\n\t\tgridLayout,\n\t\tpreviousBlockOrder,\n\t\tblockOrder,\n\t\tpreviouslySelectedBlockRect,\n\t\tpreviousIsManualPlacement,\n\t\t// These won't change, but the linter thinks they might:\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tupdateBlockAttributes,\n\t] );\n}\n\n/**\n * @param {GridRect[]} occupiedRects\n * @param {number} gridColumnCount\n * @param {number} blockColumnSpan\n * @param {number} blockRowSpan\n * @param {number?} startColumn\n * @param {number?} startRow\n */\nfunction placeBlock(\n\toccupiedRects,\n\tgridColumnCount,\n\tblockColumnSpan,\n\tblockRowSpan,\n\tstartColumn = 1,\n\tstartRow = 1\n) {\n\tfor ( let row = startRow; ; row++ ) {\n\t\tfor (\n\t\t\tlet column = row === startRow ? startColumn : 1;\n\t\t\tcolumn <= gridColumnCount;\n\t\t\tcolumn++\n\t\t) {\n\t\t\tconst candidateRect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan: blockColumnSpan,\n\t\t\t\trowSpan: blockRowSpan,\n\t\t\t} );\n\t\t\tif (\n\t\t\t\t! occupiedRects.some( ( r ) =>\n\t\t\t\t\tr.intersectsRect( candidateRect )\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn [ column, row ];\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { GridVisualizer, useGridLayoutSync } from '../components/grid';\nimport { store as blockEditorStore } from '../store';\n\nfunction GridLayoutSync( props ) {\n\tuseGridLayoutSync( props );\n}\n\nfunction GridTools( { clientId, layout } ) {\n\tconst { isSelected, isDragging } = useSelect( ( select ) => {\n\t\tconst { isBlockSelected, isDraggingBlocks } =\n\t\t\tselect( blockEditorStore );\n\n\t\treturn {\n\t\t\tisSelected: isBlockSelected( clientId ),\n\t\t\tisDragging: isDraggingBlocks(),\n\t\t};\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ ( isSelected || isDragging ) && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nconst addGridVisualizerToBlockEdit = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tif ( props.attributes.layout?.type !== 'grid' ) {\n\t\t\treturn ;\n\t\t}\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\t'addGridVisualizerToBlockEdit'\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/grid-visualizer',\n\taddGridVisualizerToBlockEdit\n);\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Filters registered block settings, adding an `__experimentalLabel` callback if one does not already exist.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addLabelCallback( settings ) {\n\t// If blocks provide their own label callback, do not override it.\n\tif ( settings.__experimentalLabel ) {\n\t\treturn settings;\n\t}\n\n\tconst supportsBlockNaming = hasBlockSupport(\n\t\tsettings,\n\t\t'renaming',\n\t\ttrue // default value\n\t);\n\n\t// Check whether block metadata is supported before using it.\n\tif ( supportsBlockNaming ) {\n\t\tsettings.__experimentalLabel = ( attributes, { context } ) => {\n\t\t\tconst { metadata } = attributes;\n\n\t\t\t// In the list view, use the block's name attribute as the label.\n\t\t\tif ( context === 'list-view' && metadata?.name ) {\n\t\t\t\treturn metadata.name;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/metadata/addLabelCallback',\n\taddLabelCallback\n);\n","/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\nimport { getBorderClasses, getMultiOriginColor } from './border';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\n\n// This utility is intended to assist where the serialization of the border\n// block support is being skipped for a block but the border related CSS classes\n// & styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's border support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n * @return {Object} Border block support derived CSS classes & styles.\n */\nexport function getBorderClassesAndStyles( attributes ) {\n\tconst border = attributes.style?.border || {};\n\tconst className = getBorderClasses( attributes );\n\n\treturn {\n\t\tclassName: className || undefined,\n\t\tstyle: getInlineStyles( { border } ),\n\t};\n}\n\n/**\n * Derives the border related props for a block from its border block support\n * attributes.\n *\n * Inline styles are forced for named colors to ensure these selections are\n * reflected when themes do not load their color stylesheets in the editor.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} ClassName & style props from border block support.\n */\nexport function useBorderProps( attributes ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\tconst { borderColor } = attributes;\n\n\t// Force inline styles to apply named border colors when themes do not load\n\t// their color stylesheets in the editor.\n\tif ( borderColor ) {\n\t\tconst borderColorObject = getMultiOriginColor( {\n\t\t\tcolors,\n\t\t\tnamedColor: borderColor,\n\t\t} );\n\n\t\tborderProps.style.borderColor = borderColorObject.color;\n\t}\n\n\treturn borderProps;\n}\n","/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\n\n// This utility is intended to assist where the serialization of the shadow\n// block support is being skipped for a block but the shadow related CSS classes\n// & styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's shadow support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n * @return {Object} Shadow block support derived CSS classes & styles.\n */\nexport function getShadowClassesAndStyles( attributes ) {\n\tconst shadow = attributes.style?.shadow || '';\n\n\treturn {\n\t\tstyle: getInlineStyles( { shadow } ),\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\nimport {\n\tgetColorClassName,\n\tgetColorObjectByAttributeValues,\n} from '../components/colors';\nimport {\n\t__experimentalGetGradientClass,\n\tgetGradientValueBySlug,\n} from '../components/gradients';\nimport { useSettings } from '../components/use-settings';\n\n// The code in this file has largely been lifted from the color block support\n// hook.\n//\n// This utility is intended to assist where the serialization of the colors\n// block support is being skipped for a block but the color related CSS classes\n// & styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's color support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Color block support derived CSS classes & styles.\n */\nexport function getColorClassesAndStyles( attributes ) {\n\tconst { backgroundColor, textColor, gradient, style } = attributes;\n\n\t// Collect color CSS classes.\n\tconst backgroundClass = getColorClassName(\n\t\t'background-color',\n\t\tbackgroundColor\n\t);\n\tconst textClass = getColorClassName( 'color', textColor );\n\n\tconst gradientClass = __experimentalGetGradientClass( gradient );\n\tconst hasGradient = gradientClass || style?.color?.gradient;\n\n\t// Determine color CSS class name list.\n\tconst className = clsx( textClass, gradientClass, {\n\t\t// Don't apply the background class if there's a gradient.\n\t\t[ backgroundClass ]: ! hasGradient && !! backgroundClass,\n\t\t'has-text-color': textColor || style?.color?.text,\n\t\t'has-background':\n\t\t\tbackgroundColor ||\n\t\t\tstyle?.color?.background ||\n\t\t\tgradient ||\n\t\t\tstyle?.color?.gradient,\n\t\t'has-link-color': style?.elements?.link?.color,\n\t} );\n\n\t// Collect inline styles for colors.\n\tconst colorStyles = style?.color || {};\n\tconst styleProp = getInlineStyles( { color: colorStyles } );\n\n\treturn {\n\t\tclassName: className || undefined,\n\t\tstyle: styleProp,\n\t};\n}\n\n/**\n * Determines the color related props for a block derived from its color block\n * support attributes.\n *\n * Inline styles are forced for named colors to ensure these selections are\n * reflected when themes do not load their color stylesheets in the editor.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} ClassName & style props from colors block support.\n */\nexport function useColorProps( attributes ) {\n\tconst { backgroundColor, textColor, gradient } = attributes;\n\n\tconst [\n\t\tuserPalette,\n\t\tthemePalette,\n\t\tdefaultPalette,\n\t\tuserGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t] = useSettings(\n\t\t'color.palette.custom',\n\t\t'color.palette.theme',\n\t\t'color.palette.default',\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default'\n\t);\n\n\tconst colors = useMemo(\n\t\t() => [\n\t\t\t...( userPalette || [] ),\n\t\t\t...( themePalette || [] ),\n\t\t\t...( defaultPalette || [] ),\n\t\t],\n\t\t[ userPalette, themePalette, defaultPalette ]\n\t);\n\tconst gradients = useMemo(\n\t\t() => [\n\t\t\t...( userGradients || [] ),\n\t\t\t...( themeGradients || [] ),\n\t\t\t...( defaultGradients || [] ),\n\t\t],\n\t\t[ userGradients, themeGradients, defaultGradients ]\n\t);\n\n\tconst colorProps = getColorClassesAndStyles( attributes );\n\n\t// Force inline styles to apply colors when themes do not load their color\n\t// stylesheets in the editor.\n\tif ( backgroundColor ) {\n\t\tconst backgroundColorObject = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\tbackgroundColor\n\t\t);\n\n\t\tcolorProps.style.backgroundColor = backgroundColorObject.color;\n\t}\n\n\tif ( gradient ) {\n\t\tcolorProps.style.background = getGradientValueBySlug(\n\t\t\tgradients,\n\t\t\tgradient\n\t\t);\n\t}\n\n\tif ( textColor ) {\n\t\tconst textColorObject = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\ttextColor\n\t\t);\n\n\t\tcolorProps.style.color = textColorObject.color;\n\t}\n\n\treturn colorProps;\n}\n","/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\n\n// This utility is intended to assist where the serialization of the spacing\n// block support is being skipped for a block but the spacing related CSS\n// styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's spacing support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Spacing block support derived CSS classes & styles.\n */\nexport function getSpacingClassesAndStyles( attributes ) {\n\tconst { style } = attributes;\n\n\t// Collect inline styles for spacing.\n\tconst spacingStyles = style?.spacing || {};\n\tconst styleProp = getInlineStyles( { spacing: spacingStyles } );\n\n\treturn {\n\t\tstyle: styleProp,\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\nimport { getFontSizeClass } from '../components/font-sizes';\nimport { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';\nimport { unlock } from '../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/*\n * This utility is intended to assist where the serialization of the typography\n * block support is being skipped for a block but the typography related CSS\n * styles still need to be generated so they can be applied to inner elements.\n */\n/**\n * Provides the CSS class names and inline styles for a block's typography support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n * @param {Object|boolean} settings Merged theme.json settings\n *\n * @return {Object} Typography block support derived CSS classes & styles.\n */\nexport function getTypographyClassesAndStyles( attributes, settings ) {\n\tlet typographyStyles = attributes?.style?.typography || {};\n\ttypographyStyles = {\n\t\t...typographyStyles,\n\t\tfontSize: getTypographyFontSizeValue(\n\t\t\t{ size: attributes?.style?.typography?.fontSize },\n\t\t\tsettings\n\t\t),\n\t};\n\n\tconst style = getInlineStyles( { typography: typographyStyles } );\n\tconst fontFamilyClassName = !! attributes?.fontFamily\n\t\t? `has-${ kebabCase( attributes.fontFamily ) }-font-family`\n\t\t: '';\n\tconst textAlignClassName = !! attributes?.style?.typography?.textAlign\n\t\t? `has-text-align-${ attributes?.style?.typography?.textAlign }`\n\t\t: '';\n\tconst className = clsx(\n\t\tfontFamilyClassName,\n\t\ttextAlignClassName,\n\t\tgetFontSizeClass( attributes?.fontSize )\n\t);\n\n\treturn {\n\t\tclassName,\n\t\tstyle,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Keeps an up-to-date copy of the passed value and returns it. If value becomes falsy, it will return the last truthy copy.\n *\n * @param {any} value\n * @return {any} value\n */\nexport function useCachedTruthy( value ) {\n\tconst [ cachedValue, setCachedValue ] = useState( value );\n\tuseEffect( () => {\n\t\tif ( value ) {\n\t\t\tsetCachedValue( value );\n\t\t}\n\t}, [ value ] );\n\treturn cachedValue;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\n/**\n * A hook used to set the zoomed out view, invoking the hook sets the mode.\n *\n * @param {boolean} zoomOut If we should zoom out or not.\n */\nexport function useZoomOut( zoomOut = true ) {\n\tconst { setZoomLevel } = unlock( useDispatch( blockEditorStore ) );\n\tconst { isZoomOut } = unlock( useSelect( blockEditorStore ) );\n\n\tconst originalIsZoomOutRef = useRef( null );\n\n\tuseEffect( () => {\n\t\t// Only set this on mount so we know what to return to when we unmount.\n\t\tif ( ! originalIsZoomOutRef.current ) {\n\t\t\toriginalIsZoomOutRef.current = isZoomOut();\n\t\t}\n\n\t\t// The effect opens the zoom-out view if we want it open and the canvas is not currently zoomed-out.\n\t\tif ( zoomOut && isZoomOut() === false ) {\n\t\t\tsetZoomLevel( 50 );\n\t\t} else if (\n\t\t\t! zoomOut &&\n\t\t\tisZoomOut() &&\n\t\t\toriginalIsZoomOutRef.current !== isZoomOut()\n\t\t) {\n\t\t\tsetZoomLevel( originalIsZoomOutRef.current ? 50 : 100 );\n\t\t}\n\n\t\treturn () => {\n\t\t\tif ( isZoomOut() && isZoomOut() !== originalIsZoomOutRef.current ) {\n\t\t\t\tsetZoomLevel( originalIsZoomOutRef.current ? 50 : 100 );\n\t\t\t}\n\t\t};\n\t}, [ isZoomOut, setZoomLevel, zoomOut ] );\n}\n","/**\n * Internal dependencies\n */\nimport {\n\tcreateBlockEditFilter,\n\tcreateBlockListBlockFilter,\n\tcreateBlockSaveFilter,\n} from './utils';\nimport './compat';\nimport align from './align';\nimport background from './background';\nimport './lock';\nimport anchor from './anchor';\nimport ariaLabel from './aria-label';\nimport customClassName from './custom-class-name';\nimport './generated-class-name';\nimport style from './style';\nimport './settings';\nimport color from './color';\nimport dimensions from './dimensions';\nimport duotone from './duotone';\nimport fontFamily from './font-family';\nimport fontSize from './font-size';\nimport textAlign from './text-align';\nimport border from './border';\nimport position from './position';\nimport blockStyleVariation from './block-style-variation';\nimport layout from './layout';\nimport childLayout from './layout-child';\nimport contentLockUI from './content-lock-ui';\nimport './metadata';\nimport blockHooks from './block-hooks';\nimport blockBindingsPanel from './block-bindings';\nimport './block-renaming';\nimport './use-bindings-attributes';\nimport './grid-visualizer';\n\ncreateBlockEditFilter(\n\t[\n\t\talign,\n\t\ttextAlign,\n\t\tanchor,\n\t\tcustomClassName,\n\t\tstyle,\n\t\tduotone,\n\t\tposition,\n\t\tlayout,\n\t\tcontentLockUI,\n\t\tblockHooks,\n\t\tblockBindingsPanel,\n\t\tchildLayout,\n\t].filter( Boolean )\n);\ncreateBlockListBlockFilter( [\n\talign,\n\ttextAlign,\n\tbackground,\n\tstyle,\n\tcolor,\n\tdimensions,\n\tduotone,\n\tfontFamily,\n\tfontSize,\n\tborder,\n\tposition,\n\tblockStyleVariation,\n\tchildLayout,\n] );\ncreateBlockSaveFilter( [\n\talign,\n\ttextAlign,\n\tanchor,\n\tariaLabel,\n\tcustomClassName,\n\tborder,\n\tcolor,\n\tstyle,\n\tfontFamily,\n\tfontSize,\n] );\n\nexport { useCustomSides } from './dimensions';\nexport { useLayoutClasses, useLayoutStyles } from './layout';\nexport { getBorderClassesAndStyles, useBorderProps } from './use-border-props';\nexport { getShadowClassesAndStyles } from './use-shadow-props';\nexport { getColorClassesAndStyles, useColorProps } from './use-color-props';\nexport { getSpacingClassesAndStyles } from './use-spacing-props';\nexport { getTypographyClassesAndStyles } from './use-typography-props';\nexport { getGapCSSValue } from './gap';\nexport { useCachedTruthy } from './use-cached-truthy';\nexport { setBackgroundStyleDefaults } from './background';\nexport { useZoomOut } from './use-zoom-out';\nexport { __unstableBlockStyleVariationOverridesWithConfig } from './block-style-variation';\nexport { useStyleOverride } from './utils';\n","/**\n * WordPress dependencies\n */\nimport { useMemo, Component } from '@wordpress/element';\nimport { compose, createHigherOrderComponent } from '@wordpress/compose';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetColorClassName,\n\tgetColorObjectByColorValue,\n\tgetColorObjectByAttributeValues,\n\tgetMostReadableColor,\n} from './utils';\nimport { useSettings } from '../use-settings';\nimport { unlock } from '../../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Capitalizes the first letter in a string.\n *\n * @param {string} str The string whose first letter the function will capitalize.\n *\n * @return {string} Capitalized string.\n */\nconst upperFirst = ( [ firstLetter, ...rest ] ) =>\n\tfirstLetter.toUpperCase() + rest.join( '' );\n\n/**\n * Higher order component factory for injecting the `colorsArray` argument as\n * the colors prop in the `withCustomColors` HOC.\n *\n * @param {Array} colorsArray An array of color objects.\n *\n * @return {Function} The higher order component.\n */\nconst withCustomColorPalette = ( colorsArray ) =>\n\tcreateHigherOrderComponent(\n\t\t( WrappedComponent ) => ( props ) => (\n\t\t\t\n\t\t),\n\t\t'withCustomColorPalette'\n\t);\n\n/**\n * Higher order component factory for injecting the editor colors as the\n * `colors` prop in the `withColors` HOC.\n *\n * @return {Function} The higher order component.\n */\nconst withEditorColorPalette = () =>\n\tcreateHigherOrderComponent(\n\t\t( WrappedComponent ) => ( props ) => {\n\t\t\tconst [ userPalette, themePalette, defaultPalette ] = useSettings(\n\t\t\t\t'color.palette.custom',\n\t\t\t\t'color.palette.theme',\n\t\t\t\t'color.palette.default'\n\t\t\t);\n\t\t\tconst allColors = useMemo(\n\t\t\t\t() => [\n\t\t\t\t\t...( userPalette || [] ),\n\t\t\t\t\t...( themePalette || [] ),\n\t\t\t\t\t...( defaultPalette || [] ),\n\t\t\t\t],\n\t\t\t\t[ userPalette, themePalette, defaultPalette ]\n\t\t\t);\n\t\t\treturn ;\n\t\t},\n\t\t'withEditorColorPalette'\n\t);\n\n/**\n * Helper function used with `createHigherOrderComponent` to create\n * higher order components for managing color logic.\n *\n * @param {Array} colorTypes An array of color types (e.g. 'backgroundColor, borderColor).\n * @param {Function} withColorPalette A HOC for injecting the 'colors' prop into the WrappedComponent.\n *\n * @return {Component} The component that can be used as a HOC.\n */\nfunction createColorHOC( colorTypes, withColorPalette ) {\n\tconst colorMap = colorTypes.reduce( ( colorObject, colorType ) => {\n\t\treturn {\n\t\t\t...colorObject,\n\t\t\t...( typeof colorType === 'string'\n\t\t\t\t? { [ colorType ]: kebabCase( colorType ) }\n\t\t\t\t: colorType ),\n\t\t};\n\t}, {} );\n\n\treturn compose( [\n\t\twithColorPalette,\n\t\t( WrappedComponent ) => {\n\t\t\treturn class extends Component {\n\t\t\t\tconstructor( props ) {\n\t\t\t\t\tsuper( props );\n\n\t\t\t\t\tthis.setters = this.createSetters();\n\t\t\t\t\tthis.colorUtils = {\n\t\t\t\t\t\tgetMostReadableColor:\n\t\t\t\t\t\t\tthis.getMostReadableColor.bind( this ),\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.state = {};\n\t\t\t\t}\n\n\t\t\t\tgetMostReadableColor( colorValue ) {\n\t\t\t\t\tconst { colors } = this.props;\n\t\t\t\t\treturn getMostReadableColor( colors, colorValue );\n\t\t\t\t}\n\n\t\t\t\tcreateSetters() {\n\t\t\t\t\treturn Object.keys( colorMap ).reduce(\n\t\t\t\t\t\t( settersAccumulator, colorAttributeName ) => {\n\t\t\t\t\t\t\tconst upperFirstColorAttributeName =\n\t\t\t\t\t\t\t\tupperFirst( colorAttributeName );\n\t\t\t\t\t\t\tconst customColorAttributeName = `custom${ upperFirstColorAttributeName }`;\n\t\t\t\t\t\t\tsettersAccumulator[\n\t\t\t\t\t\t\t\t`set${ upperFirstColorAttributeName }`\n\t\t\t\t\t\t\t] = this.createSetColor(\n\t\t\t\t\t\t\t\tcolorAttributeName,\n\t\t\t\t\t\t\t\tcustomColorAttributeName\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn settersAccumulator;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcreateSetColor( colorAttributeName, customColorAttributeName ) {\n\t\t\t\t\treturn ( colorValue ) => {\n\t\t\t\t\t\tconst colorObject = getColorObjectByColorValue(\n\t\t\t\t\t\t\tthis.props.colors,\n\t\t\t\t\t\t\tcolorValue\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.props.setAttributes( {\n\t\t\t\t\t\t\t[ colorAttributeName ]:\n\t\t\t\t\t\t\t\tcolorObject && colorObject.slug\n\t\t\t\t\t\t\t\t\t? colorObject.slug\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t[ customColorAttributeName ]:\n\t\t\t\t\t\t\t\tcolorObject && colorObject.slug\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: colorValue,\n\t\t\t\t\t\t} );\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tstatic getDerivedStateFromProps(\n\t\t\t\t\t{ attributes, colors },\n\t\t\t\t\tpreviousState\n\t\t\t\t) {\n\t\t\t\t\treturn Object.entries( colorMap ).reduce(\n\t\t\t\t\t\t( newState, [ colorAttributeName, colorContext ] ) => {\n\t\t\t\t\t\t\tconst colorObject = getColorObjectByAttributeValues(\n\t\t\t\t\t\t\t\tcolors,\n\t\t\t\t\t\t\t\tattributes[ colorAttributeName ],\n\t\t\t\t\t\t\t\tattributes[\n\t\t\t\t\t\t\t\t\t`custom${ upperFirst(\n\t\t\t\t\t\t\t\t\t\tcolorAttributeName\n\t\t\t\t\t\t\t\t\t) }`\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst previousColorObject =\n\t\t\t\t\t\t\t\tpreviousState[ colorAttributeName ];\n\t\t\t\t\t\t\tconst previousColor = previousColorObject?.color;\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * The \"and previousColorObject\" condition checks that a previous color object was already computed.\n\t\t\t\t\t\t\t * At the start previousColorObject and colorValue are both equal to undefined\n\t\t\t\t\t\t\t * bus as previousColorObject does not exist we should compute the object.\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tpreviousColor === colorObject.color &&\n\t\t\t\t\t\t\t\tpreviousColorObject\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnewState[ colorAttributeName ] =\n\t\t\t\t\t\t\t\t\tpreviousColorObject;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnewState[ colorAttributeName ] = {\n\t\t\t\t\t\t\t\t\t...colorObject,\n\t\t\t\t\t\t\t\t\tclass: getColorClassName(\n\t\t\t\t\t\t\t\t\t\tcolorContext,\n\t\t\t\t\t\t\t\t\t\tcolorObject.slug\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn newState;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\trender() {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t] );\n}\n\n/**\n * A higher-order component factory for creating a 'withCustomColors' HOC, which handles color logic\n * for class generation color value, retrieval and color attribute setting.\n *\n * Use this higher-order component to work with a custom set of colors.\n *\n * @example\n *\n * ```jsx\n * const CUSTOM_COLORS = [ { name: 'Red', slug: 'red', color: '#ff0000' }, { name: 'Blue', slug: 'blue', color: '#0000ff' } ];\n * const withCustomColors = createCustomColorsHOC( CUSTOM_COLORS );\n * // ...\n * export default compose(\n * withCustomColors( 'backgroundColor', 'borderColor' ),\n * MyColorfulComponent,\n * );\n * ```\n *\n * @param {Array} colorsArray The array of color objects (name, slug, color, etc... ).\n *\n * @return {Function} Higher-order component.\n */\nexport function createCustomColorsHOC( colorsArray ) {\n\treturn ( ...colorTypes ) => {\n\t\tconst withColorPalette = withCustomColorPalette( colorsArray );\n\t\treturn createHigherOrderComponent(\n\t\t\tcreateColorHOC( colorTypes, withColorPalette ),\n\t\t\t'withCustomColors'\n\t\t);\n\t};\n}\n\n/**\n * A higher-order component, which handles color logic for class generation color value, retrieval and color attribute setting.\n *\n * For use with the default editor/theme color palette.\n *\n * @example\n *\n * ```jsx\n * export default compose(\n * withColors( 'backgroundColor', { textColor: 'color' } ),\n * MyColorfulComponent,\n * );\n * ```\n *\n * @param {...(Object|string)} colorTypes The arguments can be strings or objects. If the argument is an object,\n * it should contain the color attribute name as key and the color context as value.\n * If the argument is a string the value should be the color attribute name,\n * the color context is computed by applying a kebab case transform to the value.\n * Color context represents the context/place where the color is going to be used.\n * The class name of the color is generated using 'has' followed by the color name\n * and ending with the color context all in kebab case e.g: has-green-background-color.\n *\n * @return {Function} Higher-order component.\n */\nexport default function withColors( ...colorTypes ) {\n\tconst withColorPalette = withEditorColorPalette();\n\treturn createHigherOrderComponent(\n\t\tcreateColorHOC( colorTypes, withColorPalette ),\n\t\t'withColors'\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { FontSizePicker as BaseFontSizePicker } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nfunction FontSizePicker( props ) {\n\tconst [ fontSizes, customFontSize ] = useSettings(\n\t\t'typography.fontSizes',\n\t\t'typography.customFontSize'\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/font-sizes/README.md\n */\nexport default FontSizePicker;\n","/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, compose } from '@wordpress/compose';\nimport { Component } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getFontSize, getFontSizeClass } from './utils';\nimport { useSettings } from '../use-settings';\n\nconst DEFAULT_FONT_SIZES = [];\n\n/**\n * Capitalizes the first letter in a string.\n *\n * @param {string} str The string whose first letter the function will capitalize.\n *\n * @return {string} Capitalized string.\n */\nconst upperFirst = ( [ firstLetter, ...rest ] ) =>\n\tfirstLetter.toUpperCase() + rest.join( '' );\n\n/**\n * Higher-order component, which handles font size logic for class generation,\n * font size value retrieval, and font size change handling.\n *\n * @param {...(Object|string)} fontSizeNames The arguments should all be strings.\n * Each string contains the font size\n * attribute name e.g: 'fontSize'.\n *\n * @return {Function} Higher-order component.\n */\nexport default ( ...fontSizeNames ) => {\n\t/*\n\t * Computes an object whose key is the font size attribute name as passed in the array,\n\t * and the value is the custom font size attribute name.\n\t * Custom font size is automatically compted by appending custom followed by the font size attribute name in with the first letter capitalized.\n\t */\n\tconst fontSizeAttributeNames = fontSizeNames.reduce(\n\t\t( fontSizeAttributeNamesAccumulator, fontSizeAttributeName ) => {\n\t\t\tfontSizeAttributeNamesAccumulator[\n\t\t\t\tfontSizeAttributeName\n\t\t\t] = `custom${ upperFirst( fontSizeAttributeName ) }`;\n\t\t\treturn fontSizeAttributeNamesAccumulator;\n\t\t},\n\t\t{}\n\t);\n\n\treturn createHigherOrderComponent(\n\t\tcompose( [\n\t\t\tcreateHigherOrderComponent(\n\t\t\t\t( WrappedComponent ) => ( props ) => {\n\t\t\t\t\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t'withFontSizes'\n\t\t\t),\n\t\t\t( WrappedComponent ) => {\n\t\t\t\treturn class extends Component {\n\t\t\t\t\tconstructor( props ) {\n\t\t\t\t\t\tsuper( props );\n\n\t\t\t\t\t\tthis.setters = this.createSetters();\n\n\t\t\t\t\t\tthis.state = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tcreateSetters() {\n\t\t\t\t\t\treturn Object.entries( fontSizeAttributeNames ).reduce(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tsettersAccumulator,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName,\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\tconst upperFirstFontSizeAttributeName =\n\t\t\t\t\t\t\t\t\tupperFirst( fontSizeAttributeName );\n\t\t\t\t\t\t\t\tsettersAccumulator[\n\t\t\t\t\t\t\t\t\t`set${ upperFirstFontSizeAttributeName }`\n\t\t\t\t\t\t\t\t] = this.createSetFontSize(\n\t\t\t\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn settersAccumulator;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tcreateSetFontSize(\n\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\tcustomFontSizeAttributeName\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ( fontSizeValue ) => {\n\t\t\t\t\t\t\tconst fontSizeObject = this.props.fontSizes?.find(\n\t\t\t\t\t\t\t\t( { size } ) => size === Number( fontSizeValue )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.props.setAttributes( {\n\t\t\t\t\t\t\t\t[ fontSizeAttributeName ]:\n\t\t\t\t\t\t\t\t\tfontSizeObject && fontSizeObject.slug\n\t\t\t\t\t\t\t\t\t\t? fontSizeObject.slug\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t[ customFontSizeAttributeName ]:\n\t\t\t\t\t\t\t\t\tfontSizeObject && fontSizeObject.slug\n\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t: fontSizeValue,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tstatic getDerivedStateFromProps(\n\t\t\t\t\t\t{ attributes, fontSizes },\n\t\t\t\t\t\tpreviousState\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst didAttributesChange = (\n\t\t\t\t\t\t\tcustomFontSizeAttributeName,\n\t\t\t\t\t\t\tfontSizeAttributeName\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tif ( previousState[ fontSizeAttributeName ] ) {\n\t\t\t\t\t\t\t\t// If new font size is name compare with the previous slug.\n\t\t\t\t\t\t\t\tif ( attributes[ fontSizeAttributeName ] ) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tattributes[ fontSizeAttributeName ] !==\n\t\t\t\t\t\t\t\t\t\tpreviousState[ fontSizeAttributeName ]\n\t\t\t\t\t\t\t\t\t\t\t.slug\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// If font size is not named, update when the font size value changes.\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpreviousState[ fontSizeAttributeName ]\n\t\t\t\t\t\t\t\t\t\t.size !==\n\t\t\t\t\t\t\t\t\tattributes[ customFontSizeAttributeName ]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// In this case we need to build the font size object.\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! Object.values( fontSizeAttributeNames ).some(\n\t\t\t\t\t\t\t\tdidAttributesChange\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst newState = Object.entries(\n\t\t\t\t\t\t\tfontSizeAttributeNames\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter( ( [ key, value ] ) =>\n\t\t\t\t\t\t\t\tdidAttributesChange( value, key )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tnewStateAccumulator,\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName,\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst fontSizeAttributeValue =\n\t\t\t\t\t\t\t\t\t\tattributes[ fontSizeAttributeName ];\n\t\t\t\t\t\t\t\t\tconst fontSizeObject = getFontSize(\n\t\t\t\t\t\t\t\t\t\tfontSizes,\n\t\t\t\t\t\t\t\t\t\tfontSizeAttributeValue,\n\t\t\t\t\t\t\t\t\t\tattributes[\n\t\t\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewStateAccumulator[\n\t\t\t\t\t\t\t\t\t\tfontSizeAttributeName\n\t\t\t\t\t\t\t\t\t] = {\n\t\t\t\t\t\t\t\t\t\t...fontSizeObject,\n\t\t\t\t\t\t\t\t\t\tclass: getFontSizeClass(\n\t\t\t\t\t\t\t\t\t\t\tfontSizeAttributeValue\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\treturn newStateAccumulator;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...previousState,\n\t\t\t\t\t\t\t...newState,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trender() {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t] ),\n\t\t'withFontSizes'\n\t);\n};\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tparse,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { searchBlockItems } from '../components/inserter/search-items';\nimport useBlockTypesState from '../components/inserter/hooks/use-block-types-state';\nimport BlockIcon from '../components/block-icon';\nimport { store as blockEditorStore } from '../store';\nimport { orderBy } from '../utils/sorting';\nimport { orderInserterBlockItems } from '../utils/order-inserter-block-items';\n\nconst noop = () => {};\nconst SHOWN_BLOCK_TYPES = 9;\n\n/** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {WPCompleter} A blocks completer.\n */\nfunction createBlockCompleter() {\n\treturn {\n\t\tname: 'blocks',\n\t\tclassName: 'block-editor-autocompleters__block',\n\t\ttriggerPrefix: '/',\n\n\t\tuseItems( filterValue ) {\n\t\t\tconst { rootClientId, selectedBlockName, prioritizedBlocks } =\n\t\t\t\tuseSelect( ( select ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\t\t\tgetBlockName,\n\t\t\t\t\t\tgetBlockListSettings,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\t\t\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\t\t\t\tconst _rootClientId = getBlockRootClientId(\n\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tselectedBlockName: selectedBlockClientId\n\t\t\t\t\t\t\t? getBlockName( selectedBlockClientId )\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\trootClientId: _rootClientId,\n\t\t\t\t\t\tprioritizedBlocks:\n\t\t\t\t\t\t\tgetBlockListSettings( _rootClientId )\n\t\t\t\t\t\t\t\t?.prioritizedInserterBlocks,\n\t\t\t\t\t};\n\t\t\t\t}, [] );\n\t\t\tconst [ items, categories, collections ] = useBlockTypesState(\n\t\t\t\trootClientId,\n\t\t\t\tnoop,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tconst filteredItems = useMemo( () => {\n\t\t\t\tconst initialFilteredItems = !! filterValue.trim()\n\t\t\t\t\t? searchBlockItems(\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\tcategories,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tfilterValue\n\t\t\t\t\t )\n\t\t\t\t\t: orderInserterBlockItems(\n\t\t\t\t\t\t\torderBy( items, 'frecency', 'desc' ),\n\t\t\t\t\t\t\tprioritizedBlocks\n\t\t\t\t\t );\n\n\t\t\t\treturn initialFilteredItems\n\t\t\t\t\t.filter( ( item ) => item.name !== selectedBlockName )\n\t\t\t\t\t.slice( 0, SHOWN_BLOCK_TYPES );\n\t\t\t}, [\n\t\t\t\tfilterValue,\n\t\t\t\tselectedBlockName,\n\t\t\t\titems,\n\t\t\t\tcategories,\n\t\t\t\tcollections,\n\t\t\t\tprioritizedBlocks,\n\t\t\t] );\n\n\t\t\tconst options = useMemo(\n\t\t\t\t() =>\n\t\t\t\t\tfilteredItems.map( ( blockItem ) => {\n\t\t\t\t\t\tconst { title, icon, isDisabled } = blockItem;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkey: `block-${ blockItem.id }`,\n\t\t\t\t\t\t\tvalue: blockItem,\n\t\t\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisDisabled,\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t[ filteredItems ]\n\t\t\t);\n\n\t\t\treturn [ options ];\n\t\t},\n\t\tallowContext( before, after ) {\n\t\t\treturn ! ( /\\S/.test( before ) || /\\S/.test( after ) );\n\t\t},\n\t\tgetOptionCompletion( inserterItem ) {\n\t\t\tconst {\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tinnerBlocks,\n\t\t\t\tsyncStatus,\n\t\t\t\tcontent,\n\t\t\t} = inserterItem;\n\n\t\t\treturn {\n\t\t\t\taction: 'replace',\n\t\t\t\tvalue:\n\t\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t\t? parse( content, {\n\t\t\t\t\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tinitialAttributes,\n\t\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate(\n\t\t\t\t\t\t\t\t\tinnerBlocks\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t ),\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {WPCompleter} A blocks completer.\n */\nexport default createBlockCompleter();\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"apiFetch\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst post = (\n\t\n\t\t\n\t\n);\n\nexport default post;\n","/**\n * WordPress dependencies\n */\n// Disable Reason: Needs to be refactored.\n// eslint-disable-next-line no-restricted-imports\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Icon, page, post } from '@wordpress/icons';\n\nconst SHOWN_SUGGESTIONS = 10;\n\n/** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */\n\n/**\n * Creates a suggestion list for links to posts or pages.\n *\n * @return {WPCompleter} A links completer.\n */\nfunction createLinkCompleter() {\n\treturn {\n\t\tname: 'links',\n\t\tclassName: 'block-editor-autocompleters__link',\n\t\ttriggerPrefix: '[[',\n\t\toptions: async ( letters ) => {\n\t\t\tlet options = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/wp/v2/search', {\n\t\t\t\t\tper_page: SHOWN_SUGGESTIONS,\n\t\t\t\t\tsearch: letters,\n\t\t\t\t\ttype: 'post',\n\t\t\t\t\torder_by: 'menu_order',\n\t\t\t\t} ),\n\t\t\t} );\n\n\t\t\toptions = options.filter( ( option ) => option.title !== '' );\n\n\t\t\treturn options;\n\t\t},\n\t\tgetOptionKeywords( item ) {\n\t\t\tconst expansionWords = item.title.split( /\\s+/ );\n\t\t\treturn [ ...expansionWords ];\n\t\t},\n\t\tgetOptionLabel( item ) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t{ item.title }\n\t\t\t\t\n\t\t\t);\n\t\t},\n\t\tgetOptionCompletion( item ) {\n\t\t\treturn { item.title };\n\t\t},\n\t};\n}\n\n/**\n * Creates a suggestion list for links to posts or pages..\n *\n * @return {WPCompleter} A link completer.\n */\nexport default createLinkCompleter();\n","/**\n * WordPress dependencies\n */\nimport { applyFilters, hasFilter } from '@wordpress/hooks';\nimport {\n\tAutocomplete,\n\t__unstableUseAutocompleteProps as useAutocompleteProps,\n} from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { getDefaultBlockName, getBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\nimport blockAutocompleter from '../../autocompleters/block';\nimport linkAutocompleter from '../../autocompleters/link';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nfunction useCompleters( { completers = EMPTY_ARRAY } ) {\n\tconst { name } = useBlockEditContext();\n\treturn useMemo( () => {\n\t\tlet filteredCompleters = [ ...completers, linkAutocompleter ];\n\n\t\tif (\n\t\t\tname === getDefaultBlockName() ||\n\t\t\tgetBlockSupport( name, '__experimentalSlashInserter', false )\n\t\t) {\n\t\t\tfilteredCompleters = [ ...filteredCompleters, blockAutocompleter ];\n\t\t}\n\n\t\tif ( hasFilter( 'editor.Autocomplete.completers' ) ) {\n\t\t\t// Provide copies so filters may directly modify them.\n\t\t\tif ( filteredCompleters === completers ) {\n\t\t\t\tfilteredCompleters = filteredCompleters.map(\n\t\t\t\t\t( completer ) => ( { ...completer } )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfilteredCompleters = applyFilters(\n\t\t\t\t'editor.Autocomplete.completers',\n\t\t\t\tfilteredCompleters,\n\t\t\t\tname\n\t\t\t);\n\t\t}\n\n\t\treturn filteredCompleters;\n\t}, [ completers, name ] );\n}\n\nexport function useBlockEditorAutocompleteProps( props ) {\n\treturn useAutocompleteProps( {\n\t\t...props,\n\t\tcompleters: useCompleters( props ),\n\t} );\n}\n\n/**\n * Wrap the default Autocomplete component with one that supports a filter hook\n * for customizing its list of autocompleters.\n *\n * @type {import('react').FC}\n */\nfunction BlockEditorAutocomplete( props ) {\n\treturn ;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/autocomplete/README.md\n */\nexport default BlockEditorAutocomplete;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst fullscreen = (\n\t\n\t\t\n\t\n);\n\nexport default fullscreen;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport { fullscreen } from '@wordpress/icons';\n\nfunction BlockFullHeightAlignmentControl( {\n\tisActive,\n\tlabel = __( 'Toggle full height' ),\n\tonToggle,\n\tisDisabled,\n} ) {\n\treturn (\n\t\t onToggle( ! isActive ) }\n\t\t\tdisabled={ isDisabled }\n\t\t/>\n\t);\n}\n\nexport default BlockFullHeightAlignmentControl;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport {\n\tToolbarButton,\n\tDropdown,\n\tAlignmentMatrixControl,\n} from '@wordpress/components';\n\nconst noop = () => {};\n\nfunction BlockAlignmentMatrixControl( props ) {\n\tconst {\n\t\tlabel = __( 'Change matrix alignment' ),\n\t\tonChange = noop,\n\t\tvalue = 'center',\n\t\tisDisabled,\n\t} = props;\n\n\tconst icon = ;\n\n\treturn (\n\t\t {\n\t\t\t\tconst openOnArrowDown = ( event ) => {\n\t\t\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonToggle();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default BlockAlignmentMatrixControl;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\t__experimentalGetBlockLabel as getBlockLabel,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns the block's configured title as a string, or empty if the title\n * cannot be determined.\n *\n * @example\n *\n * ```js\n * useBlockDisplayTitle( { clientId: 'afd1cb17-2c08-4e7a-91be-007ba7ddc3a1', maximumLength: 17 } );\n * ```\n *\n * @param {Object} props\n * @param {string} props.clientId Client ID of block.\n * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.\n * @param {string|undefined} props.context The context to pass to `getBlockLabel`.\n * @return {?string} Block title.\n */\nexport default function useBlockDisplayTitle( {\n\tclientId,\n\tmaximumLength,\n\tcontext,\n} ) {\n\tconst blockTitle = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tif ( ! blockType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst label = getBlockLabel( blockType, attributes, context );\n\t\t\t// If the label is defined we prioritize it over a possible block variation title match.\n\t\t\tif ( label !== blockType.title ) {\n\t\t\t\treturn label;\n\t\t\t}\n\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\t// Label will fallback to the title if no label is defined for the current label context.\n\t\t\treturn match?.title || blockType.title;\n\t\t},\n\t\t[ clientId, context ]\n\t);\n\n\tif ( ! blockTitle ) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tmaximumLength &&\n\t\tmaximumLength > 0 &&\n\t\tblockTitle.length > maximumLength\n\t) {\n\t\tconst omission = '...';\n\t\treturn (\n\t\t\tblockTitle.slice( 0, maximumLength - omission.length ) + omission\n\t\t);\n\t}\n\n\treturn blockTitle;\n}\n","/**\n * Internal dependencies\n */\n\nimport useBlockDisplayTitle from './use-block-display-title';\n\n/**\n * Renders the block's configured title as a string, or empty if the title\n * cannot be determined.\n *\n * @example\n *\n * ```jsx\n * \n * ```\n *\n * @param {Object} props\n * @param {string} props.clientId Client ID of block.\n * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.\n * @param {string|undefined} props.context The context to pass to `getBlockLabel`.\n *\n * @return {JSX.Element} Block title.\n */\nexport default function BlockTitle( { clientId, maximumLength, context } ) {\n\treturn useBlockDisplayTitle( { clientId, maximumLength, context } );\n}\n","/**\n * Gets the editor region for a given editor canvas element or\n * returns the passed element if no region is found\n *\n * @param { Object } editor The editor canvas element.\n * @return { Object } The editor region or given editor element\n */\nexport default function getEditorRegion( editor ) {\n\tif ( ! editor ) {\n\t\treturn null;\n\t}\n\n\t// If there are multiple editors, we need to find the iframe that contains our contentRef to make sure\n\t// we're focusing the region that contains this editor.\n\tconst editorCanvas =\n\t\tArray.from(\n\t\t\tdocument.querySelectorAll( 'iframe[name=\"editor-canvas\"]' ).values()\n\t\t).find( ( iframe ) => {\n\t\t\t// Find the iframe that contains our contentRef\n\t\t\tconst iframeDocument =\n\t\t\t\tiframe.contentDocument || iframe.contentWindow.document;\n\n\t\t\treturn iframeDocument === editor.ownerDocument;\n\t\t} ) ?? editor;\n\n\t// The region is provided by the editor, not the block-editor.\n\t// We should send focus to the region if one is available to reuse the\n\t// same interface for navigating landmarks. If no region is available,\n\t// use the canvas instead.\n\treturn editorCanvas?.closest( '[role=\"region\"]' ) ?? editorCanvas;\n}\n","/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { chevronRightSmall, Icon } from '@wordpress/icons';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockTitle from '../block-title';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { useBlockElementRef } from '../block-list/use-block-props/use-block-refs';\nimport getEditorRegion from '../../utils/get-editor-region';\n\n/**\n * Block breadcrumb component, displaying the hierarchy of the current block selection as a breadcrumb.\n *\n * @param {Object} props Component props.\n * @param {string} props.rootLabelText Translated label for the root element of the breadcrumb trail.\n * @return {Element} Block Breadcrumb.\n */\nfunction BlockBreadcrumb( { rootLabelText } ) {\n\tconst { selectBlock, clearSelectedBlock } = useDispatch( blockEditorStore );\n\tconst { clientId, parents, hasSelection } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectionStart,\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetEnabledBlockParents,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\treturn {\n\t\t\tparents: getEnabledBlockParents( selectedBlockClientId ),\n\t\t\tclientId: selectedBlockClientId,\n\t\t\thasSelection: !! getSelectionStart().clientId,\n\t\t};\n\t}, [] );\n\tconst rootLabel = rootLabelText || __( 'Document' );\n\n\t// We don't care about this specific ref, but this is a way\n\t// to get a ref within the editor canvas so we can focus it later.\n\tconst blockRef = useRef();\n\tuseBlockElementRef( clientId, blockRef );\n\n\t/*\n\t * Disable reason: The `list` ARIA role is redundant but\n\t * Safari+VoiceOver won't announce the list otherwise.\n\t */\n\t/* eslint-disable jsx-a11y/no-redundant-roles */\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ hasSelection && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\t// Find the block editor wrapper for the selected block\n\t\t\t\t\t\t\tconst blockEditor = blockRef.current?.closest(\n\t\t\t\t\t\t\t\t'.editor-styles-wrapper'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tclearSelectedBlock();\n\n\t\t\t\t\t\t\tgetEditorRegion( blockEditor )?.focus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ rootLabel }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ ! hasSelection && rootLabel }\n\t\t\t\t{ !! clientId && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\n\t\t\t{ parents.map( ( parentClientId ) => (\n\t\t\t\t
  • \n\t\t\t\t\t selectBlock( parentClientId ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t) ) }\n\t\t\t{ !! clientId && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t\t/* eslint-enable jsx-a11y/no-redundant-roles */\n\t);\n}\n\nexport default BlockBreadcrumb;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useBlockOverlayActive( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst { __unstableHasActiveBlockOverlayActive } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn __unstableHasActiveBlockOverlayActive( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { getScrollContainer } from '@wordpress/dom';\nimport {\n\tuseCallback,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseState,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport { hasStickyOrFixedPositionValue } from '../../hooks/position';\nimport { getVisibleElementBounds } from '../../utils/dom';\n\nconst COMMON_PROPS = {\n\tplacement: 'top-start',\n};\n\n// By default the toolbar sets the `shift` prop. If the user scrolls the page\n// down the toolbar will stay on screen by adopting a sticky position at the\n// top of the viewport.\nconst DEFAULT_PROPS = {\n\t...COMMON_PROPS,\n\tflip: false,\n\tshift: true,\n};\n\n// When there isn't enough height between the top of the block and the editor\n// canvas, the `shift` prop is set to `false`, as it will cause the block to be\n// obscured. The `flip` behavior is enabled, which positions the toolbar below\n// the block. This only happens if the block is smaller than the viewport, as\n// otherwise the toolbar will be off-screen.\nconst RESTRICTED_HEIGHT_PROPS = {\n\t...COMMON_PROPS,\n\tflip: true,\n\tshift: false,\n};\n\n/**\n * Get the popover props for the block toolbar, determined by the space at the top of the canvas and the toolbar height.\n *\n * @param {Element} contentElement The DOM element that represents the editor content or canvas.\n * @param {Element} selectedBlockElement The outer DOM element of the first selected block.\n * @param {Element} scrollContainer The scrollable container for the contentElement.\n * @param {number} toolbarHeight The height of the toolbar in pixels.\n * @param {boolean} isSticky Whether or not the selected block is sticky or fixed.\n *\n * @return {Object} The popover props used to determine the position of the toolbar.\n */\nfunction getProps(\n\tcontentElement,\n\tselectedBlockElement,\n\tscrollContainer,\n\ttoolbarHeight,\n\tisSticky\n) {\n\tif ( ! contentElement || ! selectedBlockElement ) {\n\t\treturn DEFAULT_PROPS;\n\t}\n\n\t// Get how far the content area has been scrolled.\n\tconst scrollTop = scrollContainer?.scrollTop || 0;\n\n\tconst blockRect = getVisibleElementBounds( selectedBlockElement );\n\tconst contentRect = contentElement.getBoundingClientRect();\n\n\t// Get the vertical position of top of the visible content area.\n\tconst topOfContentElementInViewport = scrollTop + contentRect.top;\n\n\t// The document element's clientHeight represents the viewport height.\n\tconst viewportHeight =\n\t\tcontentElement.ownerDocument.documentElement.clientHeight;\n\n\t// The restricted height area is calculated as the sum of the\n\t// vertical position of the visible content area, plus the height\n\t// of the block toolbar.\n\tconst restrictedTopArea = topOfContentElementInViewport + toolbarHeight;\n\tconst hasSpaceForToolbarAbove = blockRect.top > restrictedTopArea;\n\n\tconst isBlockTallerThanViewport =\n\t\tblockRect.height > viewportHeight - toolbarHeight;\n\n\t// Sticky blocks are treated as if they will never have enough space for the toolbar above.\n\tif (\n\t\t! isSticky &&\n\t\t( hasSpaceForToolbarAbove || isBlockTallerThanViewport )\n\t) {\n\t\treturn DEFAULT_PROPS;\n\t}\n\n\treturn RESTRICTED_HEIGHT_PROPS;\n}\n\n/**\n * Determines the desired popover positioning behavior, returning a set of appropriate props.\n *\n * @param {Object} elements\n * @param {Element} elements.contentElement The DOM element that represents the editor content or canvas.\n * @param {string} elements.clientId The clientId of the first selected block.\n *\n * @return {Object} The popover props used to determine the position of the toolbar.\n */\nexport default function useBlockToolbarPopoverProps( {\n\tcontentElement,\n\tclientId,\n} ) {\n\tconst selectedBlockElement = useBlockElement( clientId );\n\tconst [ toolbarHeight, setToolbarHeight ] = useState( 0 );\n\tconst { blockIndex, isSticky } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockIndex, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\tisSticky: hasStickyOrFixedPositionValue(\n\t\t\t\t\tgetBlockAttributes( clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst scrollContainer = useMemo( () => {\n\t\tif ( ! contentElement ) {\n\t\t\treturn;\n\t\t}\n\t\treturn getScrollContainer( contentElement );\n\t}, [ contentElement ] );\n\tconst [ props, setProps ] = useState( () =>\n\t\tgetProps(\n\t\t\tcontentElement,\n\t\t\tselectedBlockElement,\n\t\t\tscrollContainer,\n\t\t\ttoolbarHeight,\n\t\t\tisSticky\n\t\t)\n\t);\n\n\tconst popoverRef = useRefEffect( ( popoverNode ) => {\n\t\tsetToolbarHeight( popoverNode.offsetHeight );\n\t}, [] );\n\n\tconst updateProps = useCallback(\n\t\t() =>\n\t\t\tsetProps(\n\t\t\t\tgetProps(\n\t\t\t\t\tcontentElement,\n\t\t\t\t\tselectedBlockElement,\n\t\t\t\t\tscrollContainer,\n\t\t\t\t\ttoolbarHeight,\n\t\t\t\t\tisSticky\n\t\t\t\t)\n\t\t\t),\n\t\t[ contentElement, selectedBlockElement, scrollContainer, toolbarHeight ]\n\t);\n\n\t// Update props when the block is moved. This also ensures the props are\n\t// correct on initial mount, and when the selected block or content element\n\t// changes (since the callback ref will update).\n\tuseLayoutEffect( updateProps, [ blockIndex, updateProps ] );\n\n\t// Update props when the viewport is resized or the block is resized.\n\tuseLayoutEffect( () => {\n\t\tif ( ! contentElement || ! selectedBlockElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update the toolbar props on viewport resize.\n\t\tconst contentView = contentElement?.ownerDocument?.defaultView;\n\t\tcontentView?.addEventHandler?.( 'resize', updateProps );\n\n\t\t// Update the toolbar props on block resize.\n\t\tlet resizeObserver;\n\t\tconst blockView = selectedBlockElement?.ownerDocument?.defaultView;\n\t\tif ( blockView.ResizeObserver ) {\n\t\t\tresizeObserver = new blockView.ResizeObserver( updateProps );\n\t\t\tresizeObserver.observe( selectedBlockElement );\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontentView?.removeEventHandler?.( 'resize', updateProps );\n\n\t\t\tif ( resizeObserver ) {\n\t\t\t\tresizeObserver.disconnect();\n\t\t\t}\n\t\t};\n\t}, [ updateProps, contentElement, selectedBlockElement ] );\n\n\treturn {\n\t\t...props,\n\t\tref: popoverRef,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns props for the selected block tools and empty block inserter.\n *\n * @param {string} clientId Selected block client ID.\n */\nexport default function useSelectedBlockToolProps( clientId ) {\n\tconst selectedBlockProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockParents,\n\t\t\t\t__experimentalGetBlockListSettingsForBlocks,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t\tgetBlockInsertionPoint,\n\t\t\t\tgetBlockOrder,\n\t\t\t\thasMultiSelection,\n\t\t\t\tgetLastMultiSelectedBlockClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst blockParentsClientIds = getBlockParents( clientId );\n\n\t\t\t// Get Block List Settings for all ancestors of the current Block clientId.\n\t\t\tconst parentBlockListSettings =\n\t\t\t\t__experimentalGetBlockListSettingsForBlocks(\n\t\t\t\t\tblockParentsClientIds\n\t\t\t\t);\n\n\t\t\t// Get the clientId of the topmost parent with the capture toolbars setting.\n\t\t\tconst capturingClientId = blockParentsClientIds.find(\n\t\t\t\t( parentClientId ) =>\n\t\t\t\t\tparentBlockListSettings[ parentClientId ]\n\t\t\t\t\t\t?.__experimentalCaptureToolbars\n\t\t\t);\n\n\t\t\tlet isInsertionPointVisible = false;\n\t\t\tif ( isBlockInsertionPointVisible() ) {\n\t\t\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\t\t\tconst order = getBlockOrder( insertionPoint.rootClientId );\n\t\t\t\tisInsertionPointVisible =\n\t\t\t\t\torder[ insertionPoint.index ] === clientId;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcapturingClientId,\n\t\t\t\tisInsertionPointVisible,\n\t\t\t\tlastClientId: hasMultiSelection()\n\t\t\t\t\t? getLastMultiSelectedBlockClientId()\n\t\t\t\t\t: null,\n\t\t\t\trootClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn selectedBlockProps;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../block-popover/cover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport Inserter from '../inserter';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\n\nexport default function EmptyBlockInserter( {\n\tclientId,\n\t__unstableContentRef,\n} ) {\n\tconst {\n\t\tcapturingClientId,\n\t\tisInsertionPointVisible,\n\t\tlastClientId,\n\t\trootClientId,\n\t} = useSelectedBlockToolProps( clientId );\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { Draggable } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\nimport { throttle } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggableChip from './draggable-chip';\nimport useScrollWhenDragging from './use-scroll-when-dragging';\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport { isDropTargetValid } from '../use-block-drop-zone';\n\nconst BlockDraggable = ( {\n\tappendToOwnerDocument,\n\tchildren,\n\tclientIds,\n\tcloneClassname,\n\telementId,\n\tonDragStart,\n\tonDragEnd,\n\tfadeWhenDisabled = false,\n\tdragComponent,\n} ) => {\n\tconst {\n\t\tsrcRootClientId,\n\t\tisDraggable,\n\t\ticon,\n\t\tvisibleInserter,\n\t\tgetBlockType,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getBlockType: _getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\tconst blockName = getBlockName( clientIds[ 0 ] );\n\t\t\tconst variation = getActiveBlockVariation(\n\t\t\t\tblockName,\n\t\t\t\tgetBlockAttributes( clientIds[ 0 ] )\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tsrcRootClientId: rootClientId,\n\t\t\t\tisDraggable: canMoveBlocks( clientIds ),\n\t\t\t\ticon: variation?.icon || _getBlockType( blockName )?.icon,\n\t\t\t\tvisibleInserter: isBlockInsertionPointVisible(),\n\t\t\t\tgetBlockType: _getBlockType,\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst isDraggingRef = useRef( false );\n\tconst [ startScrolling, scrollOnDragOver, stopScrolling ] =\n\t\tuseScrollWhenDragging();\n\n\tconst { getAllowedBlocks, getBlockNamesByClientId, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { startDraggingBlocks, stopDraggingBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Stop dragging blocks if the block draggable is unmounted.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( isDraggingRef.current ) {\n\t\t\t\tstopDraggingBlocks();\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\t// Find the root of the editor iframe.\n\tconst blockEl = useBlockElement( clientIds[ 0 ] );\n\tconst editorRoot = blockEl?.closest( 'body' );\n\n\t/*\n\t * Add a dragover event listener to the editor root to track the blocks being dragged over.\n\t * The listener has to be inside the editor iframe otherwise the target isn't accessible.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! editorRoot || ! fadeWhenDisabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onDragOver = ( event ) => {\n\t\t\tif ( ! event.target.closest( '[data-block]' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst draggedBlockNames = getBlockNamesByClientId( clientIds );\n\t\t\tconst targetClientId = event.target\n\t\t\t\t.closest( '[data-block]' )\n\t\t\t\t.getAttribute( 'data-block' );\n\n\t\t\tconst allowedBlocks = getAllowedBlocks( targetClientId );\n\t\t\tconst targetBlockName = getBlockNamesByClientId( [\n\t\t\t\ttargetClientId,\n\t\t\t] )[ 0 ];\n\n\t\t\t/*\n\t\t\t * Check if the target is valid to drop in.\n\t\t\t * If the target's allowedBlocks is an empty array,\n\t\t\t * it isn't a container block, in which case we check\n\t\t\t * its parent's validity instead.\n\t\t\t */\n\t\t\tlet dropTargetValid;\n\t\t\tif ( allowedBlocks?.length === 0 ) {\n\t\t\t\tconst targetRootClientId =\n\t\t\t\t\tgetBlockRootClientId( targetClientId );\n\t\t\t\tconst targetRootBlockName = getBlockNamesByClientId( [\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t] )[ 0 ];\n\t\t\t\tconst rootAllowedBlocks =\n\t\t\t\t\tgetAllowedBlocks( targetRootClientId );\n\t\t\t\tdropTargetValid = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\trootAllowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetRootBlockName\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdropTargetValid = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\tallowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetBlockName\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Update the body class to reflect if drop target is valid.\n\t\t\t * This has to be done on the document body because the draggable\n\t\t\t * chip is rendered outside of the editor iframe.\n\t\t\t */\n\t\t\tif ( ! dropTargetValid && ! visibleInserter ) {\n\t\t\t\twindow?.document?.body?.classList?.add(\n\t\t\t\t\t'block-draggable-invalid-drag-token'\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\twindow?.document?.body?.classList?.remove(\n\t\t\t\t\t'block-draggable-invalid-drag-token'\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst throttledOnDragOver = throttle( onDragOver, 200 );\n\n\t\teditorRoot.addEventListener( 'dragover', throttledOnDragOver );\n\n\t\treturn () => {\n\t\t\teditorRoot.removeEventListener( 'dragover', throttledOnDragOver );\n\t\t};\n\t}, [\n\t\tclientIds,\n\t\teditorRoot,\n\t\tfadeWhenDisabled,\n\t\tgetAllowedBlocks,\n\t\tgetBlockNamesByClientId,\n\t\tgetBlockRootClientId,\n\t\tgetBlockType,\n\t\tvisibleInserter,\n\t] );\n\n\tif ( ! isDraggable ) {\n\t\treturn children( { draggable: false } );\n\t}\n\n\tconst transferData = {\n\t\ttype: 'block',\n\t\tsrcClientIds: clientIds,\n\t\tsrcRootClientId,\n\t};\n\n\treturn (\n\t\t {\n\t\t\t\t// Defer hiding the dragged source element to the next\n\t\t\t\t// frame to enable dragging.\n\t\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\t\tstartDraggingBlocks( clientIds );\n\t\t\t\t\tisDraggingRef.current = true;\n\n\t\t\t\t\tstartScrolling( event );\n\n\t\t\t\t\tif ( onDragStart ) {\n\t\t\t\t\t\tonDragStart();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tonDragOver={ scrollOnDragOver }\n\t\t\tonDragEnd={ () => {\n\t\t\t\tstopDraggingBlocks();\n\t\t\t\tisDraggingRef.current = false;\n\n\t\t\t\tstopScrolling();\n\n\t\t\t\tif ( onDragEnd ) {\n\t\t\t\t\tonDragEnd();\n\t\t\t\t}\n\t\t\t} }\n\t\t\t__experimentalDragComponent={\n\t\t\t\t// Check against `undefined` so that `null` can be used to disable\n\t\t\t\t// the default drag component.\n\t\t\t\tdragComponent !== undefined ? (\n\t\t\t\t\tdragComponent\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\t\t\telementId={ elementId }\n\t\t>\n\t\t\t{ ( { onDraggableStart, onDraggableEnd } ) => {\n\t\t\t\treturn children( {\n\t\t\t\t\tdraggable: true,\n\t\t\t\t\tonDragStart: onDraggableStart,\n\t\t\t\t\tonDragEnd: onDraggableEnd,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\n\t);\n};\n\nexport default BlockDraggable;\n","/**\n * WordPress dependencies\n */\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useCallback, useEffect, useRef } from '@wordpress/element';\n\nconst SCROLL_INACTIVE_DISTANCE_PX = 50;\nconst SCROLL_INTERVAL_MS = 25;\nconst PIXELS_PER_SECOND_PER_PERCENTAGE = 1000;\nconst VELOCITY_MULTIPLIER =\n\tPIXELS_PER_SECOND_PER_PERCENTAGE * ( SCROLL_INTERVAL_MS / 1000 );\n\n/**\n * React hook that scrolls the scroll container when a block is being dragged.\n *\n * @return {Function[]} `startScrolling`, `scrollOnDragOver`, `stopScrolling`\n * functions to be called in `onDragStart`, `onDragOver`\n * and `onDragEnd` events respectively.\n */\nexport default function useScrollWhenDragging() {\n\tconst dragStartYRef = useRef( null );\n\tconst velocityYRef = useRef( null );\n\tconst scrollParentYRef = useRef( null );\n\tconst scrollEditorIntervalRef = useRef( null );\n\n\t// Clear interval when unmounting.\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif ( scrollEditorIntervalRef.current ) {\n\t\t\t\tclearInterval( scrollEditorIntervalRef.current );\n\t\t\t\tscrollEditorIntervalRef.current = null;\n\t\t\t}\n\t\t},\n\t\t[]\n\t);\n\n\tconst startScrolling = useCallback( ( event ) => {\n\t\tdragStartYRef.current = event.clientY;\n\n\t\t// Find nearest parent(s) to scroll.\n\t\tscrollParentYRef.current = getScrollContainer( event.target );\n\n\t\tscrollEditorIntervalRef.current = setInterval( () => {\n\t\t\tif ( scrollParentYRef.current && velocityYRef.current ) {\n\t\t\t\tconst newTop =\n\t\t\t\t\tscrollParentYRef.current.scrollTop + velocityYRef.current;\n\n\t\t\t\t// Setting `behavior: 'smooth'` as a scroll property seems to hurt performance.\n\t\t\t\t// Better to use a small scroll interval.\n\t\t\t\tscrollParentYRef.current.scroll( {\n\t\t\t\t\ttop: newTop,\n\t\t\t\t} );\n\t\t\t}\n\t\t}, SCROLL_INTERVAL_MS );\n\t}, [] );\n\n\tconst scrollOnDragOver = useCallback( ( event ) => {\n\t\tif ( ! scrollParentYRef.current ) {\n\t\t\treturn;\n\t\t}\n\t\tconst scrollParentHeight = scrollParentYRef.current.offsetHeight;\n\t\tconst offsetDragStartPosition =\n\t\t\tdragStartYRef.current - scrollParentYRef.current.offsetTop;\n\t\tconst offsetDragPosition =\n\t\t\tevent.clientY - scrollParentYRef.current.offsetTop;\n\n\t\tif ( event.clientY > offsetDragStartPosition ) {\n\t\t\t// User is dragging downwards.\n\t\t\tconst moveableDistance = Math.max(\n\t\t\t\tscrollParentHeight -\n\t\t\t\t\toffsetDragStartPosition -\n\t\t\t\t\tSCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst dragDistance = Math.max(\n\t\t\t\toffsetDragPosition -\n\t\t\t\t\toffsetDragStartPosition -\n\t\t\t\t\tSCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst distancePercentage =\n\t\t\t\tmoveableDistance === 0 || dragDistance === 0\n\t\t\t\t\t? 0\n\t\t\t\t\t: dragDistance / moveableDistance;\n\t\t\tvelocityYRef.current = VELOCITY_MULTIPLIER * distancePercentage;\n\t\t} else if ( event.clientY < offsetDragStartPosition ) {\n\t\t\t// User is dragging upwards.\n\t\t\tconst moveableDistance = Math.max(\n\t\t\t\toffsetDragStartPosition - SCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst dragDistance = Math.max(\n\t\t\t\toffsetDragStartPosition -\n\t\t\t\t\toffsetDragPosition -\n\t\t\t\t\tSCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst distancePercentage =\n\t\t\t\tmoveableDistance === 0 || dragDistance === 0\n\t\t\t\t\t? 0\n\t\t\t\t\t: dragDistance / moveableDistance;\n\t\t\tvelocityYRef.current = -VELOCITY_MULTIPLIER * distancePercentage;\n\t\t} else {\n\t\t\tvelocityYRef.current = 0;\n\t\t}\n\t}, [] );\n\n\tconst stopScrolling = () => {\n\t\tdragStartYRef.current = null;\n\t\tscrollParentYRef.current = null;\n\n\t\tif ( scrollEditorIntervalRef.current ) {\n\t\t\tclearInterval( scrollEditorIntervalRef.current );\n\t\t\tscrollEditorIntervalRef.current = null;\n\t\t}\n\t};\n\n\treturn [ startScrolling, scrollOnDragOver, stopScrolling ];\n}\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\n\nconst getMovementDirection = ( moveDirection, orientation ) => {\n\tif ( moveDirection === 'up' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? 'right' : 'left';\n\t\t}\n\t\treturn 'up';\n\t} else if ( moveDirection === 'down' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? 'left' : 'right';\n\t\t}\n\t\treturn 'down';\n\t}\n\treturn null;\n};\n\n/**\n * Return a label for the block movement controls depending on block position.\n *\n * @param {number} selectedCount Number of blocks selected.\n * @param {string} type Block type - in the case of a single block, should\n * define its 'type'. I.e. 'Text', 'Heading', 'Image' etc.\n * @param {number} firstIndex The index (position - 1) of the first block selected.\n * @param {boolean} isFirst This is the first block.\n * @param {boolean} isLast This is the last block.\n * @param {number} dir Direction of movement (> 0 is considered to be going\n * down, < 0 is up).\n * @param {string} orientation The orientation of the block movers, vertical or\n * horizontal.\n *\n * @return {string | undefined} Label for the block movement controls.\n */\nexport function getBlockMoverDescription(\n\tselectedCount,\n\ttype,\n\tfirstIndex,\n\tisFirst,\n\tisLast,\n\tdir,\n\torientation\n) {\n\tconst position = firstIndex + 1;\n\n\tif ( selectedCount > 1 ) {\n\t\treturn getMultiBlockMoverDescription(\n\t\t\tselectedCount,\n\t\t\tfirstIndex,\n\t\t\tisFirst,\n\t\t\tisLast,\n\t\t\tdir,\n\t\t\torientation\n\t\t);\n\t}\n\n\tif ( isFirst && isLast ) {\n\t\treturn sprintf(\n\t\t\t// translators: %s: Type of block (i.e. Text, Image etc)\n\t\t\t__( 'Block %s is the only block, and cannot be moved' ),\n\t\t\ttype\n\t\t);\n\t}\n\n\tif ( dir > 0 && ! isLast ) {\n\t\t// Moving down.\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d down to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition + 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d left to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition + 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d right to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition + 1\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir > 0 && isLast ) {\n\t\t// Moving down, and is the last item.\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the end of the content and can’t be moved down'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the end of the content and can’t be moved left'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the end of the content and can’t be moved right'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && ! isFirst ) {\n\t\t// Moving up.\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__( 'Move %1$s block from position %2$d up to position %3$d' ),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition - 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d left to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition - 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d right to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition - 1\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && isFirst ) {\n\t\t// Moving up, and is the first item.\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the beginning of the content and can’t be moved up'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the beginning of the content and can’t be moved left'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the beginning of the content and can’t be moved right'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Return a label for the block movement controls depending on block position.\n *\n * @param {number} selectedCount Number of blocks selected.\n * @param {number} firstIndex The index (position - 1) of the first block selected.\n * @param {boolean} isFirst This is the first block.\n * @param {boolean} isLast This is the last block.\n * @param {number} dir Direction of movement (> 0 is considered to be going\n * down, < 0 is up).\n * @param {string} orientation The orientation of the block movers, vertical or\n * horizontal.\n *\n * @return {string | undefined} Label for the block movement controls.\n */\nexport function getMultiBlockMoverDescription(\n\tselectedCount,\n\tfirstIndex,\n\tisFirst,\n\tisLast,\n\tdir,\n\torientation\n) {\n\tconst position = firstIndex + 1;\n\n\tif ( isFirst && isLast ) {\n\t\t// All blocks are selected\n\t\treturn __( 'All blocks are selected, and cannot be moved' );\n\t}\n\n\tif ( dir > 0 && ! isLast ) {\n\t\t// moving down\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d down by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d left by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d right by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir > 0 && isLast ) {\n\t\t// moving down, and the selected blocks are the last item\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved down as they are already at the bottom'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved left as they are already are at the leftmost position'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved right as they are already are at the rightmost position'\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && ! isFirst ) {\n\t\t// moving up\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d up by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d left by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d right by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && isFirst ) {\n\t\t// moving up, and the selected blocks are the first item\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved up as they are already at the top'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved left as they are already are at the leftmost position'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved right as they are already are at the rightmost position'\n\t\t\t);\n\t\t}\n\t}\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { Button, VisuallyHidden } from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tchevronLeft,\n\tchevronRight,\n\tchevronUp,\n\tchevronDown,\n} from '@wordpress/icons';\nimport { getBlockMoverDescription } from './mover-description';\nimport { store as blockEditorStore } from '../../store';\n\nconst getArrowIcon = ( direction, orientation ) => {\n\tif ( direction === 'up' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? chevronRight : chevronLeft;\n\t\t}\n\t\treturn chevronUp;\n\t} else if ( direction === 'down' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? chevronLeft : chevronRight;\n\t\t}\n\t\treturn chevronDown;\n\t}\n\treturn null;\n};\n\nconst getMovementDirectionLabel = ( moveDirection, orientation ) => {\n\tif ( moveDirection === 'up' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? __( 'Move right' ) : __( 'Move left' );\n\t\t}\n\t\treturn __( 'Move up' );\n\t} else if ( moveDirection === 'down' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? __( 'Move left' ) : __( 'Move right' );\n\t\t}\n\t\treturn __( 'Move down' );\n\t}\n\treturn null;\n};\n\nconst BlockMoverButton = forwardRef(\n\t(\n\t\t{ clientIds, direction, orientation: moverOrientation, ...props },\n\t\tref\n\t) => {\n\t\tconst instanceId = useInstanceId( BlockMoverButton );\n\t\tconst normalizedClientIds = Array.isArray( clientIds )\n\t\t\t? clientIds\n\t\t\t: [ clientIds ];\n\t\tconst blocksCount = normalizedClientIds.length;\n\t\tconst { disabled } = props;\n\n\t\tconst {\n\t\t\tblockType,\n\t\t\tisDisabled,\n\t\t\trootClientId,\n\t\t\tisFirst,\n\t\t\tisLast,\n\t\t\tfirstIndex,\n\t\t\torientation = 'vertical',\n\t\t} = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockIndex,\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetBlockOrder,\n\t\t\t\t\tgetBlock,\n\t\t\t\t\tgetBlockListSettings,\n\t\t\t\t} = select( blockEditorStore );\n\t\t\t\tconst firstClientId = normalizedClientIds[ 0 ];\n\t\t\t\tconst blockRootClientId = getBlockRootClientId( firstClientId );\n\t\t\t\tconst firstBlockIndex = getBlockIndex( firstClientId );\n\t\t\t\tconst lastBlockIndex = getBlockIndex(\n\t\t\t\t\tnormalizedClientIds[ normalizedClientIds.length - 1 ]\n\t\t\t\t);\n\t\t\t\tconst blockOrder = getBlockOrder( blockRootClientId );\n\t\t\t\tconst block = getBlock( firstClientId );\n\t\t\t\tconst isFirstBlock = firstBlockIndex === 0;\n\t\t\t\tconst isLastBlock = lastBlockIndex === blockOrder.length - 1;\n\t\t\t\tconst { orientation: blockListOrientation } =\n\t\t\t\t\tgetBlockListSettings( blockRootClientId ) || {};\n\n\t\t\t\treturn {\n\t\t\t\t\tblockType: block ? getBlockType( block.name ) : null,\n\t\t\t\t\tisDisabled:\n\t\t\t\t\t\tdisabled ||\n\t\t\t\t\t\t( direction === 'up' ? isFirstBlock : isLastBlock ),\n\t\t\t\t\trootClientId: blockRootClientId,\n\t\t\t\t\tfirstIndex: firstBlockIndex,\n\t\t\t\t\tisFirst: isFirstBlock,\n\t\t\t\t\tisLast: isLastBlock,\n\t\t\t\t\torientation: moverOrientation || blockListOrientation,\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientIds, direction ]\n\t\t);\n\n\t\tconst { moveBlocksDown, moveBlocksUp } =\n\t\t\tuseDispatch( blockEditorStore );\n\t\tconst moverFunction =\n\t\t\tdirection === 'up' ? moveBlocksUp : moveBlocksDown;\n\n\t\tconst onClick = ( event ) => {\n\t\t\tmoverFunction( clientIds, rootClientId );\n\t\t\tif ( props.onClick ) {\n\t\t\t\tprops.onClick( event );\n\t\t\t}\n\t\t};\n\n\t\tconst descriptionId = `block-editor-block-mover-button__description-${ instanceId }`;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ getBlockMoverDescription(\n\t\t\t\t\t\tblocksCount,\n\t\t\t\t\t\tblockType && blockType.title,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tisFirst,\n\t\t\t\t\t\tisLast,\n\t\t\t\t\t\tdirection === 'up' ? -1 : 1,\n\t\t\t\t\t\torientation\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n);\n\nexport const BlockMoverUpButton = forwardRef( ( props, ref ) => {\n\treturn ;\n} );\n\nexport const BlockMoverDownButton = forwardRef( ( props, ref ) => {\n\treturn ;\n} );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\n\nimport { dragHandle } from '@wordpress/icons';\nimport { ToolbarGroup, ToolbarItem, Button } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggable from '../block-draggable';\nimport { BlockMoverUpButton, BlockMoverDownButton } from './button';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockMover( {\n\tclientIds,\n\thideDragHandle,\n\tisBlockMoverUpButtonDisabled,\n\tisBlockMoverDownButtonDisabled,\n} ) {\n\tconst {\n\t\tcanMove,\n\t\trootClientId,\n\t\tisFirst,\n\t\tisLast,\n\t\torientation,\n\t\tisManualGrid,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst normalizedClientIds = Array.isArray( clientIds )\n\t\t\t\t? clientIds\n\t\t\t\t: [ clientIds ];\n\t\t\tconst firstClientId = normalizedClientIds[ 0 ];\n\t\t\tconst _rootClientId = getBlockRootClientId( firstClientId );\n\t\t\tconst firstIndex = getBlockIndex( firstClientId );\n\t\t\tconst lastIndex = getBlockIndex(\n\t\t\t\tnormalizedClientIds[ normalizedClientIds.length - 1 ]\n\t\t\t);\n\t\t\tconst blockOrder = getBlockOrder( _rootClientId );\n\t\t\tconst { layout = {} } = getBlockAttributes( _rootClientId ) ?? {};\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlocks( clientIds ),\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t\tisFirst: firstIndex === 0,\n\t\t\t\tisLast: lastIndex === blockOrder.length - 1,\n\t\t\t\torientation: getBlockListSettings( _rootClientId )?.orientation,\n\t\t\t\tisManualGrid:\n\t\t\t\t\tlayout.type === 'grid' &&\n\t\t\t\t\tlayout.isManualPlacement &&\n\t\t\t\t\twindow.__experimentalEnableGridInteractivity,\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tif (\n\t\t! canMove ||\n\t\t( isFirst && isLast && ! rootClientId ) ||\n\t\t( hideDragHandle && isManualGrid )\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ ! hideDragHandle && (\n\t\t\t\t\n\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ ! isManualGrid && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-mover/README.md\n */\nexport default BlockMover;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState, useRef, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst { clearTimeout, setTimeout } = window;\nconst DEBOUNCE_TIMEOUT = 200;\n\n/**\n * Hook that creates debounced callbacks when the node is hovered or focused.\n *\n * @param {Object} props Component props.\n * @param {Object} props.ref Element reference.\n * @param {boolean} props.isFocused Whether the component has current focus.\n * @param {number} props.highlightParent Whether to highlight the parent block. It defaults in highlighting the selected block.\n * @param {number} [props.debounceTimeout=250] Debounce timeout in milliseconds.\n */\nfunction useDebouncedShowGestures( {\n\tref,\n\tisFocused,\n\thighlightParent,\n\tdebounceTimeout = DEBOUNCE_TIMEOUT,\n} ) {\n\tconst { getSelectedBlockClientId, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\tconst timeoutRef = useRef();\n\tconst isDistractionFree = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree,\n\t\t[]\n\t);\n\tconst handleOnChange = ( nextIsFocused ) => {\n\t\tif ( nextIsFocused && isDistractionFree ) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst clientId = highlightParent\n\t\t\t? getBlockRootClientId( selectedBlockClientId )\n\t\t\t: selectedBlockClientId;\n\t\ttoggleBlockHighlight( clientId, nextIsFocused );\n\t};\n\n\tconst getIsHovered = () => {\n\t\treturn ref?.current && ref.current.matches( ':hover' );\n\t};\n\n\tconst shouldHideGestures = () => {\n\t\tconst isHovered = getIsHovered();\n\t\treturn ! isFocused && ! isHovered;\n\t};\n\n\tconst clearTimeoutRef = () => {\n\t\tconst timeout = timeoutRef.current;\n\n\t\tif ( timeout && clearTimeout ) {\n\t\t\tclearTimeout( timeout );\n\t\t}\n\t};\n\n\tconst debouncedShowGestures = ( event ) => {\n\t\tif ( event ) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\tclearTimeoutRef();\n\t\thandleOnChange( true );\n\t};\n\n\tconst debouncedHideGestures = ( event ) => {\n\t\tif ( event ) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\tclearTimeoutRef();\n\n\t\ttimeoutRef.current = setTimeout( () => {\n\t\t\tif ( shouldHideGestures() ) {\n\t\t\t\thandleOnChange( false );\n\t\t\t}\n\t\t}, debounceTimeout );\n\t};\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\t/**\n\t\t\t * We need to call the change handler with `isFocused`\n\t\t\t * set to false on unmount because we also clear the\n\t\t\t * timeout that would handle that.\n\t\t\t */\n\t\t\thandleOnChange( false );\n\t\t\tclearTimeoutRef();\n\t\t},\n\t\t[]\n\t);\n\n\treturn {\n\t\tdebouncedShowGestures,\n\t\tdebouncedHideGestures,\n\t};\n}\n\n/**\n * Hook that provides gesture events for DOM elements\n * that interact with the isFocused state.\n *\n * @param {Object} props Component props.\n * @param {Object} props.ref Element reference.\n * @param {number} [props.highlightParent=false] Whether to highlight the parent block. It defaults to highlighting the selected block.\n * @param {number} [props.debounceTimeout=250] Debounce timeout in milliseconds.\n */\nexport function useShowHoveredOrFocusedGestures( {\n\tref,\n\thighlightParent = false,\n\tdebounceTimeout = DEBOUNCE_TIMEOUT,\n} ) {\n\tconst [ isFocused, setIsFocused ] = useState( false );\n\tconst { debouncedShowGestures, debouncedHideGestures } =\n\t\tuseDebouncedShowGestures( {\n\t\t\tref,\n\t\t\tdebounceTimeout,\n\t\t\tisFocused,\n\t\t\thighlightParent,\n\t\t} );\n\n\tconst registerRef = useRef( false );\n\n\tconst isFocusedWithin = () => {\n\t\treturn (\n\t\t\tref?.current &&\n\t\t\tref.current.contains( ref.current.ownerDocument.activeElement )\n\t\t);\n\t};\n\n\tuseEffect( () => {\n\t\tconst node = ref.current;\n\n\t\tconst handleOnFocus = () => {\n\t\t\tif ( isFocusedWithin() ) {\n\t\t\t\tsetIsFocused( true );\n\t\t\t\tdebouncedShowGestures();\n\t\t\t}\n\t\t};\n\n\t\tconst handleOnBlur = () => {\n\t\t\tif ( ! isFocusedWithin() ) {\n\t\t\t\tsetIsFocused( false );\n\t\t\t\tdebouncedHideGestures();\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Events are added via DOM events (vs. React synthetic events),\n\t\t * as the child React components swallow mouse events.\n\t\t */\n\t\tif ( node && ! registerRef.current ) {\n\t\t\tnode.addEventListener( 'focus', handleOnFocus, true );\n\t\t\tnode.addEventListener( 'blur', handleOnBlur, true );\n\t\t\tregisterRef.current = true;\n\t\t}\n\n\t\treturn () => {\n\t\t\tif ( node ) {\n\t\t\t\tnode.removeEventListener( 'focus', handleOnFocus );\n\t\t\t\tnode.removeEventListener( 'blur', handleOnBlur );\n\t\t\t}\n\t\t};\n\t}, [\n\t\tref,\n\t\tregisterRef,\n\t\tsetIsFocused,\n\t\tdebouncedShowGestures,\n\t\tdebouncedHideGestures,\n\t] );\n\n\treturn {\n\t\tonMouseMove: debouncedShowGestures,\n\t\tonMouseLeave: debouncedHideGestures,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport BlockIcon from '../block-icon';\nimport { useShowHoveredOrFocusedGestures } from '../block-toolbar/utils';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Block parent selector component, displaying the hierarchy of the\n * current block selection as a single icon to \"go up\" a level.\n *\n * @return {Component} Parent block selector.\n */\nexport default function BlockParentSelector() {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst { firstParentClientId, isVisible } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockName,\n\t\t\tgetBlockParents,\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetBlockEditingMode,\n\t\t} = select( blockEditorStore );\n\t\tconst { hasBlockSupport } = select( blocksStore );\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst parents = getBlockParents( selectedBlockClientId );\n\t\tconst _firstParentClientId = parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( _firstParentClientId );\n\t\tconst _parentBlockType = getBlockType( parentBlockName );\n\t\treturn {\n\t\t\tfirstParentClientId: _firstParentClientId,\n\t\t\tisVisible:\n\t\t\t\t_firstParentClientId &&\n\t\t\t\tgetBlockEditingMode( _firstParentClientId ) === 'default' &&\n\t\t\t\thasBlockSupport(\n\t\t\t\t\t_parentBlockType,\n\t\t\t\t\t'__experimentalParentSelector',\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t};\n\t}, [] );\n\tconst blockInformation = useBlockDisplayInformation( firstParentClientId );\n\n\t// Allows highlighting the parent block outline when focusing or hovering\n\t// the parent block selector within the child.\n\tconst nodeRef = useRef();\n\tconst showHoveredOrFocusedGestures = useShowHoveredOrFocusedGestures( {\n\t\tref: nodeRef,\n\t\thighlightParent: true,\n\t} );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t selectBlock( firstParentClientId ) }\n\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t/* translators: %s: Name of the block's parent. */\n\t\t\t\t\t__( 'Select parent block: %s' ),\n\t\t\t\t\tblockInformation?.title\n\t\t\t\t) }\n\t\t\t\tshowTooltip\n\t\t\t\ticon={ }\n\t\t\t/>\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst copy = (\n\t\n\t\t\n\t\n);\n\nexport default copy;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Popover } from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockPreview from '../block-preview';\n\nexport default function PreviewBlockPopover( { blocks } ) {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\n\tif ( isMobile ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{ __( 'Preview' ) }\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tcloneBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\n\nconst EMPTY_OBJECT = {};\n\nexport function useBlockVariationTransforms( { clientIds, blocks } ) {\n\tconst { activeBlockVariation, blockVariationTransformations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, canRemoveBlocks } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getActiveBlockVariation, getBlockVariations } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst canRemove = canRemoveBlocks( clientIds );\n\t\t\t// Only handle single selected blocks for now.\n\t\t\tif ( blocks.length !== 1 || ! canRemove ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst [ firstBlock ] = blocks;\n\t\t\treturn {\n\t\t\t\tblockVariationTransformations: getBlockVariations(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\tgetBlockAttributes( firstBlock.clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, blocks ]\n\t);\n\tconst transformations = useMemo( () => {\n\t\treturn blockVariationTransformations?.filter(\n\t\t\t( { name } ) => name !== activeBlockVariation?.name\n\t\t);\n\t}, [ blockVariationTransformations, activeBlockVariation ] );\n\treturn transformations;\n}\n\nconst BlockVariationTransformations = ( {\n\ttransformations,\n\tonSelect,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\treturn (\n\t\t<>\n\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t name === hoveredTransformItemName\n\t\t\t\t\t\t).attributes\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ transformations?.map( ( item ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n};\n\nfunction BlockVariationTranformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title } = item;\n\treturn (\n\t\t {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t\n\t\t\t{ title }\n\t\t\n\t);\n}\n\nexport default BlockVariationTransformations;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup, MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\nimport BlockVariationTransformations from './block-variation-transformations';\n\n/**\n * Helper hook to group transformations to display them in a specific order in the UI.\n * For now we group only priority content driven transformations(ex. paragraph -> heading).\n *\n * Later on we could also group 'layout' transformations(ex. paragraph -> group) and\n * display them in different sections.\n *\n * @param {Object[]} possibleBlockTransformations The available block transformations.\n * @return {Record} The grouped block transformations.\n */\nfunction useGroupedTransforms( possibleBlockTransformations ) {\n\tconst priorityContentTranformationBlocks = {\n\t\t'core/paragraph': 1,\n\t\t'core/heading': 2,\n\t\t'core/list': 3,\n\t\t'core/quote': 4,\n\t};\n\tconst transformations = useMemo( () => {\n\t\tconst priorityTextTranformsNames = Object.keys(\n\t\t\tpriorityContentTranformationBlocks\n\t\t);\n\t\tconst groupedPossibleTransforms = possibleBlockTransformations.reduce(\n\t\t\t( accumulator, item ) => {\n\t\t\t\tconst { name } = item;\n\t\t\t\tif ( priorityTextTranformsNames.includes( name ) ) {\n\t\t\t\t\taccumulator.priorityTextTransformations.push( item );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.restTransformations.push( item );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ priorityTextTransformations: [], restTransformations: [] }\n\t\t);\n\t\t/**\n\t\t * If there is only one priority text transformation and it's a Quote,\n\t\t * is should move to the rest transformations. This is because Quote can\n\t\t * be a container for any block type, so in multi-block selection it will\n\t\t * always be suggested, even for non-text blocks.\n\t\t */\n\t\tif (\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations.length ===\n\t\t\t\t1 &&\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations[ 0 ].name ===\n\t\t\t\t'core/quote'\n\t\t) {\n\t\t\tconst singleQuote =\n\t\t\t\tgroupedPossibleTransforms.priorityTextTransformations.pop();\n\t\t\tgroupedPossibleTransforms.restTransformations.push( singleQuote );\n\t\t}\n\t\treturn groupedPossibleTransforms;\n\t}, [ possibleBlockTransformations ] );\n\n\t// Order the priority text transformations.\n\ttransformations.priorityTextTransformations.sort(\n\t\t( { name: currentName }, { name: nextName } ) => {\n\t\t\treturn priorityContentTranformationBlocks[ currentName ] <\n\t\t\t\tpriorityContentTranformationBlocks[ nextName ]\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t}\n\t);\n\treturn transformations;\n}\n\nconst BlockTransformationsMenu = ( {\n\tclassName,\n\tpossibleBlockTransformations,\n\tpossibleBlockVariationTransformations,\n\tonSelect,\n\tonSelectVariation,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\n\tconst { priorityTextTransformations, restTransformations } =\n\t\tuseGroupedTransforms( possibleBlockTransformations );\n\t// We have to check if both content transformations(priority and rest) are set\n\t// in order to create a separate MenuGroup for them.\n\tconst hasBothContentTransformations =\n\t\tpriorityTextTransformations.length && restTransformations.length;\n\tconst restTransformItems = !! restTransformations.length && (\n\t\t\n\t);\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ !! possibleBlockVariationTransformations?.length && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ priorityTextTransformations.map( ( item ) => (\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\t{ ! hasBothContentTransformations && restTransformItems }\n\t\t\t\n\t\t\t{ !! hasBothContentTransformations && (\n\t\t\t\t\n\t\t\t\t\t{ restTransformItems }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n};\n\nfunction RestTransformationItems( {\n\trestTransformations,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\treturn restTransformations.map( ( item ) => (\n\t\t\n\t) );\n}\n\nfunction BlockTranformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title, isDisabled } = item;\n\treturn (\n\t\t {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t\n\t\t\t{ title }\n\t\t\n\t);\n}\n\nexport default BlockTransformationsMenu;\n","/**\n * WordPress dependencies\n */\nimport TokenList from '@wordpress/token-list';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Returns the active style from the given className.\n *\n * @param {Array} styles Block styles.\n * @param {string} className Class name\n *\n * @return {Object?} The active style.\n */\nexport function getActiveStyle( styles, className ) {\n\tfor ( const style of new TokenList( className ).values() ) {\n\t\tif ( style.indexOf( 'is-style-' ) === -1 ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst potentialStyleName = style.substring( 9 );\n\t\tconst activeStyle = styles?.find(\n\t\t\t( { name } ) => name === potentialStyleName\n\t\t);\n\t\tif ( activeStyle ) {\n\t\t\treturn activeStyle;\n\t\t}\n\t}\n\n\treturn getDefaultStyle( styles );\n}\n\n/**\n * Replaces the active style in the block's className.\n *\n * @param {string} className Class name.\n * @param {Object?} activeStyle The replaced style.\n * @param {Object} newStyle The replacing style.\n *\n * @return {string} The updated className.\n */\nexport function replaceActiveStyle( className, activeStyle, newStyle ) {\n\tconst list = new TokenList( className );\n\n\tif ( activeStyle ) {\n\t\tlist.remove( 'is-style-' + activeStyle.name );\n\t}\n\n\tlist.add( 'is-style-' + newStyle.name );\n\n\treturn list.value;\n}\n\n/**\n * Returns a collection of styles that can be represented on the frontend.\n * The function checks a style collection for a default style. If none is found, it adds one to\n * act as a fallback for when there is no active style applied to a block. The default item also serves\n * as a switch on the frontend to deactivate non-default styles.\n *\n * @param {Array} styles Block styles.\n *\n * @return {Array} The style collection.\n */\nexport function getRenderedStyles( styles ) {\n\tif ( ! styles || styles.length === 0 ) {\n\t\treturn [];\n\t}\n\n\treturn getDefaultStyle( styles )\n\t\t? styles\n\t\t: [\n\t\t\t\t{\n\t\t\t\t\tname: 'default',\n\t\t\t\t\tlabel: _x( 'Default', 'block style' ),\n\t\t\t\t\tisDefault: true,\n\t\t\t\t},\n\t\t\t\t...styles,\n\t\t ];\n}\n\n/**\n * Returns a style object from a collection of styles where that style object is the default block style.\n *\n * @param {Array} styles Block styles.\n *\n * @return {Object?} The default style object, if found.\n */\nexport function getDefaultStyle( styles ) {\n\treturn styles?.find( ( style ) => style.isDefault );\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tcloneBlock,\n\tgetBlockType,\n\tgetBlockFromExample,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getActiveStyle, getRenderedStyles, replaceActiveStyle } from './utils';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n *\n * @param {WPBlock} block Block object.\n * @param {WPBlockType} type Block type settings.\n * @return {WPBlock} A generic block ready for styles preview.\n */\nfunction useGenericPreviewBlock( block, type ) {\n\treturn useMemo( () => {\n\t\tconst example = type?.example;\n\t\tconst blockName = type?.name;\n\n\t\tif ( example && blockName ) {\n\t\t\treturn getBlockFromExample( blockName, {\n\t\t\t\tattributes: example.attributes,\n\t\t\t\tinnerBlocks: example.innerBlocks,\n\t\t\t} );\n\t\t}\n\n\t\tif ( block ) {\n\t\t\treturn cloneBlock( block );\n\t\t}\n\t}, [ type?.example ? block?.name : block, type ] );\n}\n\n/**\n * @typedef useStylesForBlocksArguments\n * @property {string} clientId Block client ID.\n * @property {() => void} onSwitch Block style switch callback function.\n */\n\n/**\n *\n * @param {useStylesForBlocksArguments} useStylesForBlocks arguments.\n * @return {Object} Results of the select methods.\n */\nexport default function useStylesForBlocks( { clientId, onSwitch } ) {\n\tconst selector = ( select ) => {\n\t\tconst { getBlock } = select( blockEditorStore );\n\t\tconst block = getBlock( clientId );\n\n\t\tif ( ! block ) {\n\t\t\treturn {};\n\t\t}\n\t\tconst blockType = getBlockType( block.name );\n\t\tconst { getBlockStyles } = select( blocksStore );\n\n\t\treturn {\n\t\t\tblock,\n\t\t\tblockType,\n\t\t\tstyles: getBlockStyles( block.name ),\n\t\t\tclassName: block.attributes.className || '',\n\t\t};\n\t};\n\tconst { styles, block, blockType, className } = useSelect( selector, [\n\t\tclientId,\n\t] );\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst stylesToRender = getRenderedStyles( styles );\n\tconst activeStyle = getActiveStyle( stylesToRender, className );\n\tconst genericPreviewBlock = useGenericPreviewBlock( block, blockType );\n\n\tconst onSelect = ( style ) => {\n\t\tconst styleClassName = replaceActiveStyle(\n\t\t\tclassName,\n\t\t\tactiveStyle,\n\t\t\tstyle\n\t\t);\n\t\tupdateBlockAttributes( clientId, {\n\t\t\tclassName: styleClassName,\n\t\t} );\n\t\tonSwitch();\n\t};\n\n\treturn {\n\t\tonSelect,\n\t\tstylesToRender,\n\t\tactiveStyle,\n\t\tgenericPreviewBlock,\n\t\tclassName,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem, __experimentalText as Text } from '@wordpress/components';\nimport { check } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useStylesForBlocks from './use-styles-for-block';\n\nconst noop = () => {};\n\nexport default function BlockStylesMenuItems( { clientId, onSwitch = noop } ) {\n\tconst { onSelect, stylesToRender, activeStyle } = useStylesForBlocks( {\n\t\tclientId,\n\t\tonSwitch,\n\t} );\n\n\tif ( ! stylesToRender || stylesToRender.length === 0 ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<>\n\t\t\t{ stylesToRender.map( ( style ) => {\n\t\t\t\tconst menuItemText = style.label || style.name;\n\t\t\t\treturn (\n\t\t\t\t\t onSelect( style ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ menuItemText }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockStylesMenuItems from '../block-styles/menu-items';\n\nexport default function BlockStylesMenu( { hoveredBlock, onSwitch } ) {\n\tconst { clientId } = hoveredBlock;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalGetBlockAttributesNamesByRole as getBlockAttributesNamesByRole } from '@wordpress/blocks';\n\n/**\n * Try to find a matching block by a block's name in a provided\n * block. We recurse through InnerBlocks and return the reference\n * of the matched block (it could be an InnerBlock).\n * If no match is found return nothing.\n *\n * @param {WPBlock} block The block to try to find a match.\n * @param {string} selectedBlockName The block's name to use for matching condition.\n * @param {Set} consumedBlocks A set holding the previously matched/consumed blocks.\n *\n * @return {WPBlock | undefined} The matched block if found or nothing(`undefined`).\n */\nexport const getMatchingBlockByName = (\n\tblock,\n\tselectedBlockName,\n\tconsumedBlocks = new Set()\n) => {\n\tconst { clientId, name, innerBlocks = [] } = block;\n\t// Check if block has been consumed already.\n\tif ( consumedBlocks.has( clientId ) ) {\n\t\treturn;\n\t}\n\tif ( name === selectedBlockName ) {\n\t\treturn block;\n\t}\n\t// Try to find a matching block from InnerBlocks recursively.\n\tfor ( const innerBlock of innerBlocks ) {\n\t\tconst match = getMatchingBlockByName(\n\t\t\tinnerBlock,\n\t\t\tselectedBlockName,\n\t\t\tconsumedBlocks\n\t\t);\n\t\tif ( match ) {\n\t\t\treturn match;\n\t\t}\n\t}\n};\n\n/**\n * Find and return the block attributes to retain through\n * the transformation, based on Block Type's `role:content`\n * attributes. If no `role:content` attributes exist,\n * return selected block's attributes.\n *\n * @param {string} name Block type's namespaced name.\n * @param {Object} attributes Selected block's attributes.\n * @return {Object} The block's attributes to retain.\n */\nexport const getRetainedBlockAttributes = ( name, attributes ) => {\n\tconst contentAttributes = getBlockAttributesNamesByRole( name, 'content' );\n\tif ( ! contentAttributes?.length ) {\n\t\treturn attributes;\n\t}\n\n\treturn contentAttributes.reduce( ( _accumulator, attribute ) => {\n\t\tif ( attributes[ attribute ] ) {\n\t\t\t_accumulator[ attribute ] = attributes[ attribute ];\n\t\t}\n\t\treturn _accumulator;\n\t}, {} );\n};\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getMatchingBlockByName, getRetainedBlockAttributes } from './utils';\n\n/**\n * Mutate the matched block's attributes by getting\n * which block type's attributes to retain and prioritize\n * them in the merging of the attributes.\n *\n * @param {WPBlock} match The matched block.\n * @param {WPBlock} selectedBlock The selected block.\n * @return {void}\n */\nexport const transformMatchingBlock = ( match, selectedBlock ) => {\n\t// Get the block attributes to retain through the transformation.\n\tconst retainedBlockAttributes = getRetainedBlockAttributes(\n\t\tselectedBlock.name,\n\t\tselectedBlock.attributes\n\t);\n\tmatch.attributes = {\n\t\t...match.attributes,\n\t\t...retainedBlockAttributes,\n\t};\n};\n\n/**\n * By providing the selected blocks and pattern's blocks\n * find the matching blocks, transform them and return them.\n * If not all selected blocks are matched, return nothing.\n *\n * @param {WPBlock[]} selectedBlocks The selected blocks.\n * @param {WPBlock[]} patternBlocks The pattern's blocks.\n * @return {WPBlock[]|void} The transformed pattern's blocks or undefined if not all selected blocks have been matched.\n */\nexport const getPatternTransformedBlocks = (\n\tselectedBlocks,\n\tpatternBlocks\n) => {\n\t// Clone Pattern's blocks to produce new clientIds and be able to mutate the matches.\n\tconst _patternBlocks = patternBlocks.map( ( block ) =>\n\t\tcloneBlock( block )\n\t);\n\t/**\n\t * Keep track of the consumed pattern blocks.\n\t * This is needed because we loop the selected blocks\n\t * and for example we may have selected two paragraphs and\n\t * the pattern's blocks could have more `paragraphs`.\n\t */\n\tconst consumedBlocks = new Set();\n\tfor ( const selectedBlock of selectedBlocks ) {\n\t\tlet isMatch = false;\n\t\tfor ( const patternBlock of _patternBlocks ) {\n\t\t\tconst match = getMatchingBlockByName(\n\t\t\t\tpatternBlock,\n\t\t\t\tselectedBlock.name,\n\t\t\t\tconsumedBlocks\n\t\t\t);\n\t\t\tif ( ! match ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tisMatch = true;\n\t\t\tconsumedBlocks.add( match.clientId );\n\t\t\t// We update (mutate) the matching pattern block.\n\t\t\ttransformMatchingBlock( match, selectedBlock );\n\t\t\t// No need to loop through other pattern's blocks.\n\t\t\tbreak;\n\t\t}\n\t\t// Bail eary if a selected block has not been matched.\n\t\tif ( ! isMatch ) {\n\t\t\treturn;\n\t\t}\n\t}\n\treturn _patternBlocks;\n};\n\n/**\n * @typedef {WPBlockPattern & {transformedBlocks: WPBlock[]}} TransformedBlockPattern\n */\n\n/**\n * Custom hook that accepts patterns from state and the selected\n * blocks and tries to match these with the pattern's blocks.\n * If all selected blocks are matched with a Pattern's block,\n * we transform them by retaining block's attributes with `role:content`.\n * The transformed pattern's blocks are set to a new pattern\n * property `transformedBlocks`.\n *\n * @param {WPBlockPattern[]} patterns Patterns from state.\n * @param {WPBlock[]} selectedBlocks The currently selected blocks.\n * @return {TransformedBlockPattern[]} Returns the eligible matched patterns with all the selected blocks.\n */\nconst useTransformedPatterns = ( patterns, selectedBlocks ) => {\n\treturn useMemo(\n\t\t() =>\n\t\t\tpatterns.reduce( ( accumulator, _pattern ) => {\n\t\t\t\tconst transformedBlocks = getPatternTransformedBlocks(\n\t\t\t\t\tselectedBlocks,\n\t\t\t\t\t_pattern.blocks\n\t\t\t\t);\n\t\t\t\tif ( transformedBlocks ) {\n\t\t\t\t\taccumulator.push( {\n\t\t\t\t\t\t..._pattern,\n\t\t\t\t\t\ttransformedBlocks,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] ),\n\t\t[ patterns, selectedBlocks ]\n\t);\n};\n\nexport default useTransformedPatterns;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { useInstanceId, useViewportMatch } from '@wordpress/compose';\nimport { chevronRight } from '@wordpress/icons';\n\nimport {\n\tComposite,\n\tMenuGroup,\n\tMenuItem,\n\tPopover,\n\tVisuallyHidden,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockPreview from '../block-preview';\nimport useTransformedPatterns from './use-transformed-patterns';\n\nfunction PatternTransformationsMenu( {\n\tblocks,\n\tpatterns: statePatterns,\n\tonSelect,\n} ) {\n\tconst [ showTransforms, setShowTransforms ] = useState( false );\n\tconst patterns = useTransformedPatterns( statePatterns, blocks );\n\n\tif ( ! patterns.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ showTransforms && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetShowTransforms( ! showTransforms );\n\t\t\t\t} }\n\t\t\t\ticon={ chevronRight }\n\t\t\t>\n\t\t\t\t{ __( 'Patterns' ) }\n\t\t\t\n\t\t\n\t);\n}\n\nfunction PreviewPatternsPopover( { patterns, onSelect } ) {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction BlockPatternsList( { patterns, onSelect } ) {\n\treturn (\n\t\t\n\t\t\t{ patterns.map( ( pattern ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction BlockPattern( { pattern, onSelect } ) {\n\t// TODO check pattern/preview width...\n\tconst baseClassName =\n\t\t'block-editor-block-switcher__preview-patterns-container';\n\tconst descriptionId = useInstanceId(\n\t\tBlockPattern,\n\t\t`${ baseClassName }-list__item-description`\n\t);\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t}\n\t\t\t\tonClick={ () => onSelect( pattern.transformedBlocks ) }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{ pattern.title }\n\t\t\t\t
    \n\t\t\t\n\t\t\t{ !! pattern.description && (\n\t\t\t\t\n\t\t\t\t\t{ pattern.description }\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nexport default PatternTransformationsMenu;\n","/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf, _x } from '@wordpress/i18n';\nimport {\n\tDropdownMenu,\n\tToolbarButton,\n\tToolbarGroup,\n\tToolbarItem,\n\t__experimentalText as Text,\n\tMenuGroup,\n} from '@wordpress/components';\nimport {\n\tswitchToBlockType,\n\tstore as blocksStore,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { copy } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport BlockTransformationsMenu from './block-transformations-menu';\nimport { useBlockVariationTransforms } from './block-variation-transformations';\nimport BlockStylesMenu from './block-styles-menu';\nimport PatternTransformationsMenu from './pattern-transformations-menu';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\n\nfunction BlockSwitcherDropdownMenuContents( {\n\tonClose,\n\tclientIds,\n\thasBlockStyles,\n\tcanRemove,\n\tisUsingBindings,\n} ) {\n\tconst { replaceBlocks, multiSelect, updateBlockAttributes } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { possibleBlockTransformations, patterns, blocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockTransformItems,\n\t\t\t\t__experimentalGetPatternTransformItems,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId(\n\t\t\t\tArray.isArray( clientIds ) ? clientIds[ 0 ] : clientIds\n\t\t\t);\n\t\t\tconst _blocks = getBlocksByClientId( clientIds );\n\t\t\treturn {\n\t\t\t\tblocks: _blocks,\n\t\t\t\tpossibleBlockTransformations: getBlockTransformItems(\n\t\t\t\t\t_blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tpatterns: __experimentalGetPatternTransformItems(\n\t\t\t\t\t_blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\tconst blockVariationTransformations = useBlockVariationTransforms( {\n\t\tclientIds,\n\t\tblocks,\n\t} );\n\tfunction selectForMultipleBlocks( insertedBlocks ) {\n\t\tif ( insertedBlocks.length > 1 ) {\n\t\t\tmultiSelect(\n\t\t\t\tinsertedBlocks[ 0 ].clientId,\n\t\t\t\tinsertedBlocks[ insertedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t}\n\t// Simple block tranformation based on the `Block Transforms` API.\n\tfunction onBlockTransform( name ) {\n\t\tconst newBlocks = switchToBlockType( blocks, name );\n\t\treplaceBlocks( clientIds, newBlocks );\n\t\tselectForMultipleBlocks( newBlocks );\n\t}\n\tfunction onBlockVariationTransform( name ) {\n\t\tupdateBlockAttributes( blocks[ 0 ].clientId, {\n\t\t\t...blockVariationTransformations.find(\n\t\t\t\t( { name: variationName } ) => variationName === name\n\t\t\t).attributes,\n\t\t} );\n\t}\n\t// Pattern transformation through the `Patterns` API.\n\tfunction onPatternTransform( transformedBlocks ) {\n\t\treplaceBlocks( clientIds, transformedBlocks );\n\t\tselectForMultipleBlocks( transformedBlocks );\n\t}\n\t/**\n\t * The `isTemplate` check is a stopgap solution here.\n\t * Ideally, the Transforms API should handle this\n\t * by allowing to exclude blocks from wildcard transformations.\n\t */\n\tconst isSingleBlock = blocks.length === 1;\n\tconst isTemplate = isSingleBlock && isTemplatePart( blocks[ 0 ] );\n\tconst hasPossibleBlockTransformations =\n\t\t!! possibleBlockTransformations.length && canRemove && ! isTemplate;\n\tconst hasPossibleBlockVariationTransformations =\n\t\t!! blockVariationTransformations?.length;\n\tconst hasPatternTransformation = !! patterns?.length && canRemove;\n\tconst hasBlockOrBlockVariationTransforms =\n\t\thasPossibleBlockTransformations ||\n\t\thasPossibleBlockVariationTransformations;\n\tconst hasContents =\n\t\thasBlockStyles ||\n\t\thasBlockOrBlockVariationTransforms ||\n\t\thasPatternTransformation;\n\tif ( ! hasContents ) {\n\t\treturn (\n\t\t\t

    \n\t\t\t\t{ __( 'No transforms.' ) }\n\t\t\t

    \n\t\t);\n\t}\n\n\tconst connectedBlockDescription = isSingleBlock\n\t\t? _x(\n\t\t\t\t'This block is connected.',\n\t\t\t\t'block toolbar button label and description'\n\t\t )\n\t\t: _x(\n\t\t\t\t'These blocks are connected.',\n\t\t\t\t'block toolbar button label and description'\n\t\t );\n\n\treturn (\n\t\t
    \n\t\t\t{ hasPatternTransformation && (\n\t\t\t\t {\n\t\t\t\t\t\tonPatternTransform( transformedBlocks );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ hasBlockOrBlockVariationTransforms && (\n\t\t\t\t {\n\t\t\t\t\t\tonBlockTransform( name );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\tonSelectVariation={ ( name ) => {\n\t\t\t\t\t\tonBlockVariationTransform( name );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ hasBlockStyles && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isUsingBindings && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ connectedBlockDescription }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nconst BlockIndicator = ( { icon, showTitle, blockTitle } ) => (\n\t<>\n\t\t\n\t\t{ showTitle && blockTitle && (\n\t\t\t\n\t\t\t\t{ blockTitle }\n\t\t\t\n\t\t) }\n\t\n);\n\nexport const BlockSwitcher = ( { clientIds, disabled, isUsingBindings } ) => {\n\tconst {\n\t\thasContentOnlyLocking,\n\t\tcanRemove,\n\t\thasBlockStyles,\n\t\ticon,\n\t\tinvalidBlocks,\n\t\tisReusable,\n\t\tisTemplate,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getBlockStyles, getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst _blocks = getBlocksByClientId( clientIds );\n\t\t\tif ( ! _blocks.length || _blocks.some( ( block ) => ! block ) ) {\n\t\t\t\treturn { invalidBlocks: true };\n\t\t\t}\n\t\t\tconst [ { name: firstBlockName } ] = _blocks;\n\t\t\tconst _isSingleBlockSelected = _blocks.length === 1;\n\t\t\tconst blockType = getBlockType( firstBlockName );\n\n\t\t\tlet _icon;\n\t\t\tlet _hasTemplateLock;\n\t\t\tif ( _isSingleBlockSelected ) {\n\t\t\t\tconst match = getActiveBlockVariation(\n\t\t\t\t\tfirstBlockName,\n\t\t\t\t\tgetBlockAttributes( clientIds[ 0 ] )\n\t\t\t\t);\n\t\t\t\t// Take into account active block variations.\n\t\t\t\t_icon = match?.icon || blockType.icon;\n\t\t\t\t_hasTemplateLock =\n\t\t\t\t\tgetTemplateLock( clientIds[ 0 ] ) === 'contentOnly';\n\t\t\t} else {\n\t\t\t\tconst isSelectionOfSameType =\n\t\t\t\t\tnew Set( _blocks.map( ( { name } ) => name ) ).size === 1;\n\t\t\t\t_hasTemplateLock = clientIds.some(\n\t\t\t\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t\t\t\t);\n\t\t\t\t// When selection consists of blocks of multiple types, display an\n\t\t\t\t// appropriate icon to communicate the non-uniformity.\n\t\t\t\t_icon = isSelectionOfSameType ? blockType.icon : copy;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds ),\n\t\t\t\thasBlockStyles:\n\t\t\t\t\t_isSingleBlockSelected &&\n\t\t\t\t\t!! getBlockStyles( firstBlockName )?.length,\n\t\t\t\ticon: _icon,\n\t\t\t\tisReusable:\n\t\t\t\t\t_isSingleBlockSelected && isReusableBlock( _blocks[ 0 ] ),\n\t\t\t\tisTemplate:\n\t\t\t\t\t_isSingleBlockSelected && isTemplatePart( _blocks[ 0 ] ),\n\t\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId: clientIds?.[ 0 ],\n\t\tmaximumLength: 35,\n\t} );\n\n\tif ( invalidBlocks ) {\n\t\treturn null;\n\t}\n\n\tconst isSingleBlock = clientIds.length === 1;\n\tconst blockSwitcherLabel = isSingleBlock\n\t\t? blockTitle\n\t\t: __( 'Multiple blocks selected' );\n\n\tconst hideDropdown =\n\t\tdisabled ||\n\t\t( ! hasBlockStyles && ! canRemove ) ||\n\t\thasContentOnlyLocking;\n\n\tif ( hideDropdown ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\n\t\t);\n\t}\n\n\tconst blockSwitcherDescription = isSingleBlock\n\t\t? __( 'Change block type or style' )\n\t\t: sprintf(\n\t\t\t\t/* translators: %d: number of blocks. */\n\t\t\t\t_n(\n\t\t\t\t\t'Change type of %d block',\n\t\t\t\t\t'Change type of %d blocks',\n\t\t\t\t\tclientIds.length\n\t\t\t\t),\n\t\t\t\tclientIds.length\n\t\t );\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\tdescription: blockSwitcherDescription,\n\t\t\t\t\t\t\t...toggleProps,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tmenuProps={ { orientation: 'both' } }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n};\n\nexport default BlockSwitcher;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Fill: __unstableBlockToolbarLastItem, Slot } = createSlotFill(\n\t'__unstableBlockToolbarLastItem'\n);\n\n__unstableBlockToolbarLastItem.Slot = Slot;\n\nexport default __unstableBlockToolbarLastItem;\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { Platform } from '@wordpress/element';\n\nconst ALIGN_SUPPORT_KEY = 'align';\nconst ALIGN_WIDE_SUPPORT_KEY = 'alignWide';\nconst BORDER_SUPPORT_KEY = '__experimentalBorder';\nconst COLOR_SUPPORT_KEY = 'color';\nconst CUSTOM_CLASS_NAME_SUPPORT_KEY = 'customClassName';\nconst FONT_FAMILY_SUPPORT_KEY = 'typography.__experimentalFontFamily';\nconst FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';\nconst LINE_HEIGHT_SUPPORT_KEY = 'typography.lineHeight';\n/**\n * Key within block settings' support array indicating support for font style.\n */\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\n/**\n * Key within block settings' support array indicating support for font weight.\n */\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\n/**\n * Key within block settings' supports array indicating support for text\n * align e.g. settings found in `block.json`.\n */\nconst TEXT_ALIGN_SUPPORT_KEY = 'typography.textAlign';\n/**\n * Key within block settings' supports array indicating support for text\n * columns e.g. settings found in `block.json`.\n */\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\n/**\n * Key within block settings' supports array indicating support for text\n * decorations e.g. settings found in `block.json`.\n */\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\n/**\n * Key within block settings' supports array indicating support for writing mode\n * e.g. settings found in `block.json`.\n */\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\n/**\n * Key within block settings' supports array indicating support for text\n * transforms e.g. settings found in `block.json`.\n */\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\n\n/**\n * Key within block settings' supports array indicating support for letter-spacing\n * e.g. settings found in `block.json`.\n */\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst LAYOUT_SUPPORT_KEY = 'layout';\nconst TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_ALIGN_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n];\nconst EFFECTS_SUPPORT_KEYS = [ 'shadow' ];\nconst SPACING_SUPPORT_KEY = 'spacing';\nconst styleSupportKeys = [\n\t...EFFECTS_SUPPORT_KEYS,\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n];\n\n/**\n * Returns true if the block defines support for align.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasAlignSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, ALIGN_SUPPORT_KEY );\n\n/**\n * Returns the block support value for align, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getAlignSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, ALIGN_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for align wide.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasAlignWideSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, ALIGN_WIDE_SUPPORT_KEY );\n\n/**\n * Returns the block support value for align wide, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getAlignWideSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, ALIGN_WIDE_SUPPORT_KEY );\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( nameOrType, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( nameOrType, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Get block support for border properties.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @param {string} feature Border feature to get.\n *\n * @return {unknown} The block support.\n */\nexport const getBorderSupport = ( nameOrType, feature ) =>\n\tgetBlockSupport( nameOrType, [ BORDER_SUPPORT_KEY, feature ] );\n\n/**\n * Returns true if the block defines support for color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasColorSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\treturn (\n\t\tcolorSupport &&\n\t\t( colorSupport.link === true ||\n\t\t\tcolorSupport.gradient === true ||\n\t\t\tcolorSupport.background !== false ||\n\t\t\tcolorSupport.text !== false )\n\t);\n};\n\n/**\n * Returns true if the block defines support for link color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasLinkColorSupport = ( nameOrType ) => {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.link\n\t);\n};\n\n/**\n * Returns true if the block defines support for gradient color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasGradientSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.gradients\n\t);\n};\n\n/**\n * Returns true if the block defines support for background color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasBackgroundColorSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.background !== false;\n};\n\n/**\n * Returns true if the block defines support for text-align.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasTextAlignSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, TEXT_ALIGN_SUPPORT_KEY );\n\n/**\n * Returns the block support value for text-align, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getTextAlignSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, TEXT_ALIGN_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for background color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasTextColorSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.text !== false;\n};\n\n/**\n * Get block support for color properties.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @param {string} feature Color feature to get.\n *\n * @return {unknown} The block support.\n */\nexport const getColorSupport = ( nameOrType, feature ) =>\n\tgetBlockSupport( nameOrType, [ COLOR_SUPPORT_KEY, feature ] );\n\n/**\n * Returns true if the block defines support for custom class name.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasCustomClassNameSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, CUSTOM_CLASS_NAME_SUPPORT_KEY, true );\n\n/**\n * Returns the block support value for custom class name, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getCustomClassNameSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, CUSTOM_CLASS_NAME_SUPPORT_KEY, true );\n\n/**\n * Returns true if the block defines support for font family.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasFontFamilySupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, FONT_FAMILY_SUPPORT_KEY );\n\n/**\n * Returns the block support value for font family, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getFontFamilySupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, FONT_FAMILY_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for font size.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasFontSizeSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, FONT_SIZE_SUPPORT_KEY );\n\n/**\n * Returns the block support value for font size, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getFontSizeSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, FONT_SIZE_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for layout.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasLayoutSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, LAYOUT_SUPPORT_KEY );\n\n/**\n * Returns the block support value for layout, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getLayoutSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, LAYOUT_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for style.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasStyleSupport = ( nameOrType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( nameOrType, key ) );\n","/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { getBlockType, parse } from '@wordpress/blocks';\nimport { useDispatch, useRegistry } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport {\n\thasAlignSupport,\n\thasBorderSupport,\n\thasBackgroundColorSupport,\n\thasTextAlignSupport,\n\thasTextColorSupport,\n\thasGradientSupport,\n\thasCustomClassNameSupport,\n\thasFontFamilySupport,\n\thasFontSizeSupport,\n\thasLayoutSupport,\n\thasStyleSupport,\n} from '../../hooks/supports';\n\n/**\n * Determine if the copied text looks like serialized blocks or not.\n * Since plain text will always get parsed into a freeform block,\n * we check that if the parsed blocks is anything other than that.\n *\n * @param {string} text The copied text.\n * @return {boolean} True if the text looks like serialized blocks, false otherwise.\n */\nfunction hasSerializedBlocks( text ) {\n\ttry {\n\t\tconst blocks = parse( text, {\n\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tif ( blocks.length === 1 && blocks[ 0 ].name === 'core/freeform' ) {\n\t\t\t// It's likely that the text is just plain text and not serialized blocks.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t} catch ( err ) {\n\t\t// Parsing error, the text is not serialized blocks.\n\t\t// (Even though that it technically won't happen)\n\t\treturn false;\n\t}\n}\n\n/**\n * Style attributes are attributes being added in `block-editor/src/hooks/*`.\n * (Except for some unrelated to style like `anchor` or `settings`.)\n * They generally represent the default block supports.\n */\nconst STYLE_ATTRIBUTES = {\n\talign: hasAlignSupport,\n\tborderColor: ( nameOrType ) => hasBorderSupport( nameOrType, 'color' ),\n\tbackgroundColor: hasBackgroundColorSupport,\n\ttextAlign: hasTextAlignSupport,\n\ttextColor: hasTextColorSupport,\n\tgradient: hasGradientSupport,\n\tclassName: hasCustomClassNameSupport,\n\tfontFamily: hasFontFamilySupport,\n\tfontSize: hasFontSizeSupport,\n\tlayout: hasLayoutSupport,\n\tstyle: hasStyleSupport,\n};\n\n/**\n * Get the \"style attributes\" from a given block to a target block.\n *\n * @param {WPBlock} sourceBlock The source block.\n * @param {WPBlock} targetBlock The target block.\n * @return {Object} the filtered attributes object.\n */\nfunction getStyleAttributes( sourceBlock, targetBlock ) {\n\treturn Object.entries( STYLE_ATTRIBUTES ).reduce(\n\t\t( attributes, [ attributeKey, hasSupport ] ) => {\n\t\t\t// Only apply the attribute if both blocks support it.\n\t\t\tif (\n\t\t\t\thasSupport( sourceBlock.name ) &&\n\t\t\t\thasSupport( targetBlock.name )\n\t\t\t) {\n\t\t\t\t// Override attributes that are not present in the block to their defaults.\n\t\t\t\tattributes[ attributeKey ] =\n\t\t\t\t\tsourceBlock.attributes[ attributeKey ];\n\t\t\t}\n\t\t\treturn attributes;\n\t\t},\n\t\t{}\n\t);\n}\n\n/**\n * Update the target blocks with style attributes recursively.\n *\n * @param {WPBlock[]} targetBlocks The target blocks to be updated.\n * @param {WPBlock[]} sourceBlocks The source blocks to get th style attributes from.\n * @param {Function} updateBlockAttributes The function to update the attributes.\n */\nfunction recursivelyUpdateBlockAttributes(\n\ttargetBlocks,\n\tsourceBlocks,\n\tupdateBlockAttributes\n) {\n\tfor (\n\t\tlet index = 0;\n\t\tindex < Math.min( sourceBlocks.length, targetBlocks.length );\n\t\tindex += 1\n\t) {\n\t\tupdateBlockAttributes(\n\t\t\ttargetBlocks[ index ].clientId,\n\t\t\tgetStyleAttributes( sourceBlocks[ index ], targetBlocks[ index ] )\n\t\t);\n\n\t\trecursivelyUpdateBlockAttributes(\n\t\t\ttargetBlocks[ index ].innerBlocks,\n\t\t\tsourceBlocks[ index ].innerBlocks,\n\t\t\tupdateBlockAttributes\n\t\t);\n\t}\n}\n\n/**\n * A hook to return a pasteStyles event function for handling pasting styles to blocks.\n *\n * @return {Function} A function to update the styles to the blocks.\n */\nexport default function usePasteStyles() {\n\tconst registry = useRegistry();\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { createSuccessNotice, createWarningNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\n\treturn useCallback(\n\t\tasync ( targetBlocks ) => {\n\t\t\tlet html = '';\n\t\t\ttry {\n\t\t\t\t// `http:` sites won't have the clipboard property on navigator.\n\t\t\t\t// (with the exception of localhost.)\n\t\t\t\tif ( ! window.navigator.clipboard ) {\n\t\t\t\t\tcreateErrorNotice(\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Unable to paste styles. This feature is only available on secure (https) sites in supporting browsers.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thtml = await window.navigator.clipboard.readText();\n\t\t\t} catch ( error ) {\n\t\t\t\t// Possibly the permission is denied.\n\t\t\t\tcreateErrorNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Unable to paste styles. Please allow browser clipboard permissions before continuing.'\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Abort if the copied text is empty or doesn't look like serialized blocks.\n\t\t\tif ( ! html || ! hasSerializedBlocks( html ) ) {\n\t\t\t\tcreateWarningNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t\"Unable to paste styles. Block styles couldn't be found within the copied content.\"\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst copiedBlocks = parse( html );\n\n\t\t\tif ( copiedBlocks.length === 1 ) {\n\t\t\t\t// Apply styles of the block to all the target blocks.\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\trecursivelyUpdateBlockAttributes(\n\t\t\t\t\t\ttargetBlocks,\n\t\t\t\t\t\ttargetBlocks.map( () => copiedBlocks[ 0 ] ),\n\t\t\t\t\t\tupdateBlockAttributes\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\trecursivelyUpdateBlockAttributes(\n\t\t\t\t\t\ttargetBlocks,\n\t\t\t\t\t\tcopiedBlocks,\n\t\t\t\t\t\tupdateBlockAttributes\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( targetBlocks.length === 1 ) {\n\t\t\t\tconst title = getBlockType( targetBlocks[ 0 ].name )?.title;\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t// Translators: Name of the block being pasted, e.g. \"Paragraph\".\n\t\t\t\t\t\t__( 'Pasted styles to %s.' ),\n\t\t\t\t\t\ttitle\n\t\t\t\t\t),\n\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t// Translators: The number of the blocks.\n\t\t\t\t\t\t__( 'Pasted styles to %d blocks.' ),\n\t\t\t\t\t\ttargetBlocks.length\n\t\t\t\t\t),\n\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tregistry.batch,\n\t\t\tupdateBlockAttributes,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateWarningNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport usePasteStyles from '../use-paste-styles';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockActions( {\n\tclientIds,\n\tchildren,\n\t__experimentalUpdateSelection: updateSelection,\n} ) {\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetDirectInsertBlock,\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\t\t\tgetDefaultBlockName(),\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tconst directInsertBlock = rootClientId\n\t\t\t\t? getDirectInsertBlock( rootClientId )\n\t\t\t\t: null;\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlocks( clientIds ),\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds ),\n\t\t\t\tcanInsertBlock: canInsertDefaultBlock || !! directInsertBlock,\n\t\t\t\tcanCopyStyles: blocks.every( ( block ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t( hasBlockSupport( block.name, 'color' ) ||\n\t\t\t\t\t\t\thasBlockSupport( block.name, 'typography' ) )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\tcanDuplicate: blocks.every( ( block ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\t\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, getDefaultBlockName ]\n\t);\n\tconst { getBlocksByClientId, getBlocks } = useSelect( blockEditorStore );\n\n\tconst { canMove, canRemove, canInsertBlock, canCopyStyles, canDuplicate } =\n\t\tselected;\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tflashBlock,\n\t\tsetBlockMovingClientId,\n\t\tsetNavigationMode,\n\t\tselectBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst notifyCopy = useNotifyCopy();\n\tconst pasteStyles = usePasteStyles();\n\n\treturn children( {\n\t\tcanCopyStyles,\n\t\tcanDuplicate,\n\t\tcanInsertBlock,\n\t\tcanMove,\n\t\tcanRemove,\n\t\tonDuplicate() {\n\t\t\treturn duplicateBlocks( clientIds, updateSelection );\n\t\t},\n\t\tonRemove() {\n\t\t\treturn removeBlocks( clientIds, updateSelection );\n\t\t},\n\t\tonInsertBefore() {\n\t\t\tinsertBeforeBlock( clientIds[ 0 ] );\n\t\t},\n\t\tonInsertAfter() {\n\t\t\tinsertAfterBlock( clientIds[ clientIds.length - 1 ] );\n\t\t},\n\t\tonMoveTo() {\n\t\t\tsetNavigationMode( true );\n\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t},\n\t\tonGroup() {\n\t\t\tif ( ! clientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\tgetBlocksByClientId( clientIds ),\n\t\t\t\tgroupingBlockName\n\t\t\t);\n\n\t\t\tif ( ! newBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t},\n\t\tonUngroup() {\n\t\t\tif ( ! clientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst innerBlocks = getBlocks( clientIds[ 0 ] );\n\t\t\tif ( ! innerBlocks.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treplaceBlocks( clientIds, innerBlocks );\n\t\t},\n\t\tonCopy() {\n\t\t\tif ( clientIds.length === 1 ) {\n\t\t\t\tflashBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t\tnotifyCopy( 'copy', clientIds );\n\t\t},\n\t\tasync onPasteStyles() {\n\t\t\tawait pasteStyles( getBlocksByClientId( clientIds ) );\n\t\t},\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem } from '@wordpress/components';\nimport { rawHandler, getBlockContent } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockHTMLConvertButton( { clientId } ) {\n\tconst block = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\n\tif ( ! block || block.name !== 'core/html' ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tclientId,\n\t\t\t\t\trawHandler( { HTML: getBlockContent( block ) } )\n\t\t\t\t)\n\t\t\t}\n\t\t>\n\t\t\t{ __( 'Convert to Blocks' ) }\n\t\t\n\t);\n}\n\nexport default BlockHTMLConvertButton;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Fill: __unstableBlockSettingsMenuFirstItem, Slot } = createSlotFill(\n\t'__unstableBlockSettingsMenuFirstItem'\n);\n\n__unstableBlockSettingsMenuFirstItem.Slot = Slot;\n\nexport default __unstableBlockSettingsMenuFirstItem;\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Contains the properties `ConvertToGroupButton` component needs.\n *\n * @typedef {Object} ConvertToGroupButtonProps\n * @property {string[]} clientIds An array of the selected client ids.\n * @property {boolean} isGroupable Indicates if the selected blocks can be grouped.\n * @property {boolean} isUngroupable Indicates if the selected blocks can be ungrouped.\n * @property {WPBlock[]} blocksSelection An array of the selected blocks.\n * @property {string} groupingBlockName The name of block used for handling grouping interactions.\n */\n\n/**\n * Returns the properties `ConvertToGroupButton` component needs to work properly.\n * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`\n * should be rendered, to avoid ending up with an empty MenuGroup.\n *\n * @param {?string[]} selectedClientIds An optional array of clientIds to group. The selected blocks\n * from the block editor store are used if this is not provided.\n *\n * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.\n */\nexport default function useConvertToGroupButtonProps( selectedClientIds ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tisUngroupable,\n\t\t\t\tisGroupable,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getGroupingBlockName, getBlockType } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst clientIds = selectedClientIds?.length\n\t\t\t\t? selectedClientIds\n\t\t\t\t: getSelectedBlockClientIds();\n\t\t\tconst blocksSelection = getBlocksByClientId( clientIds );\n\t\t\tconst [ firstSelectedBlock ] = blocksSelection;\n\t\t\tconst _isUngroupable =\n\t\t\t\tclientIds.length === 1 && isUngroupable( clientIds[ 0 ] );\n\t\t\treturn {\n\t\t\t\tclientIds,\n\t\t\t\tisGroupable: isGroupable( clientIds ),\n\t\t\t\tisUngroupable: _isUngroupable,\n\t\t\t\tblocksSelection,\n\t\t\t\tgroupingBlockName: getGroupingBlockName(),\n\t\t\t\tonUngroup:\n\t\t\t\t\t_isUngroupable &&\n\t\t\t\t\tgetBlockType( firstSelectedBlock.name )?.transforms\n\t\t\t\t\t\t?.ungroup,\n\t\t\t};\n\t\t},\n\t\t[ selectedClientIds ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { _x } from '@wordpress/i18n';\nimport { switchToBlockType } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { displayShortcut } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport useConvertToGroupButtonProps from './use-convert-to-group-button-props';\nimport BlockGroupToolbar from './toolbar';\n\nfunction ConvertToGroupButton( {\n\tclientIds,\n\tisGroupable,\n\tisUngroupable,\n\tonUngroup,\n\tblocksSelection,\n\tgroupingBlockName,\n\tonClose = () => {},\n} ) {\n\tconst { getSelectedBlockClientIds } = useSelect( blockEditorStore );\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst onConvertToGroup = () => {\n\t\t// Activate the `transform` on the Grouping Block which does the conversion.\n\t\tconst newBlocks = switchToBlockType(\n\t\t\tblocksSelection,\n\t\t\tgroupingBlockName\n\t\t);\n\t\tif ( newBlocks ) {\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t}\n\t};\n\n\tconst onConvertFromGroup = () => {\n\t\tlet innerBlocks = blocksSelection[ 0 ].innerBlocks;\n\t\tif ( ! innerBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( onUngroup ) {\n\t\t\tinnerBlocks = onUngroup(\n\t\t\t\tblocksSelection[ 0 ].attributes,\n\t\t\t\tblocksSelection[ 0 ].innerBlocks\n\t\t\t);\n\t\t}\n\t\treplaceBlocks( clientIds, innerBlocks );\n\t};\n\n\tif ( ! isGroupable && ! isUngroupable ) {\n\t\treturn null;\n\t}\n\n\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\treturn (\n\t\t<>\n\t\t\t{ isGroupable && (\n\t\t\t\t 1\n\t\t\t\t\t\t\t? displayShortcut.primary( 'g' )\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tonConvertToGroup();\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ _x( 'Group', 'verb' ) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isUngroupable && (\n\t\t\t\t {\n\t\t\t\t\t\tonConvertFromGroup();\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ _x(\n\t\t\t\t\t\t'Ungroup',\n\t\t\t\t\t\t'Ungrouping blocks from within a grouping block back into individual blocks within the Editor'\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport {\n\tBlockGroupToolbar,\n\tConvertToGroupButton,\n\tuseConvertToGroupButtonProps,\n};\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Return details about the block lock status.\n *\n * @param {string} clientId The block client Id.\n *\n * @return {Object} Block lock status\n */\nexport default function useBlockLock( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanEditBlock,\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetTemplateLock,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst canEdit = canEditBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\n\t\t\treturn {\n\t\t\t\tcanEdit,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tcanLock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t\tisContentLocked: getTemplateLock( clientId ) === 'contentOnly',\n\t\t\t\tisLocked: ! canEdit || ! canMove || ! canRemove,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst unlock = (\n\t\n\t\t\n\t\n);\n\nexport default unlock;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst lockOutline = (\n\t\n\t\t\n\t\n);\n\nexport default lockOutline;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst lock = (\n\t\n\t\t\n\t\n);\n\nexport default lock;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n\tToggleControl,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getBlockType } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\n// Entity based blocks which allow edit locking\nconst ALLOWS_EDIT_LOCKING = [ 'core/block', 'core/navigation' ];\n\nfunction getTemplateLockValue( lock ) {\n\t// Prevents all operations.\n\tif ( lock.remove && lock.move ) {\n\t\treturn 'all';\n\t}\n\n\t// Prevents inserting or removing blocks, but allows moving existing blocks.\n\tif ( lock.remove && ! lock.move ) {\n\t\treturn 'insert';\n\t}\n\n\treturn false;\n}\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canEdit, canMove, canRemove } = useBlockLock( clientId );\n\tconst { allowsEditLocking, templateLock, hasTemplateLock } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\n\t\t\treturn {\n\t\t\t\tallowsEditLocking: ALLOWS_EDIT_LOCKING.includes( blockName ),\n\t\t\t\ttemplateLock: getBlockAttributes( clientId )?.templateLock,\n\t\t\t\thasTemplateLock: !! blockType?.attributes?.templateLock,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst [ applyTemplateLock, setApplyTemplateLock ] = useState(\n\t\t!! templateLock\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t\t...( allowsEditLocking ? { edit: ! canEdit } : {} ),\n\t\t} );\n\t}, [ canEdit, canMove, canRemove, allowsEditLocking ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isMixed = Object.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], {\n\t\t\t\t\t\tlock,\n\t\t\t\t\t\ttemplateLock: applyTemplateLock\n\t\t\t\t\t\t\t? getTemplateLockValue( lock )\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t} );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t{ /*\n\t\t\t\t\t * Disable reason: The `list` ARIA role is redundant but\n\t\t\t\t\t * Safari+VoiceOver won't announce the list otherwise.\n\t\t\t\t\t */\n\t\t\t\t\t/* eslint-disable jsx-a11y/no-redundant-roles */ }\n\t\t\t\t\t\n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\t\t\tremove: newValue,\n\t\t\t\t\t\t\t\t\t\t...( allowsEditLocking\n\t\t\t\t\t\t\t\t\t\t\t? { edit: newValue }\n\t\t\t\t\t\t\t\t\t\t\t: {} ),\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ allowsEditLocking && (\n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\t\t\tedit,\n\t\t\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\t\tmove,\n\t\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\t\tremove,\n\t\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ /* eslint-enable jsx-a11y/no-redundant-roles */ }\n\t\t\t\t\t{ hasTemplateLock && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tsetApplyTemplateLock( ! applyTemplateLock )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useReducer } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { lockOutline, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport BlockLockModal from './modal';\n\nexport default function BlockLockMenuItem( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tconst label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ label }\n\t\t\t\n\t\t\t{ isModalOpen && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem } from '@wordpress/components';\nimport { getBlockType, hasBlockSupport } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\nexport default function BlockModeToggle( { clientId, onToggle = noop } ) {\n\tconst { blockType, mode, isCodeEditingEnabled } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockMode, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst block = getBlock( clientId );\n\n\t\t\treturn {\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tblockType: block ? getBlockType( block.name ) : null,\n\t\t\t\tisCodeEditingEnabled: getSettings().codeEditingEnabled,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { toggleBlockMode } = useDispatch( blockEditorStore );\n\n\tif (\n\t\t! blockType ||\n\t\t! hasBlockSupport( blockType, 'html', true ) ||\n\t\t! isCodeEditingEnabled\n\t) {\n\t\treturn null;\n\t}\n\n\tconst label =\n\t\tmode === 'visual' ? __( 'Edit as HTML' ) : __( 'Edit visually' );\n\n\treturn (\n\t\t {\n\t\t\t\ttoggleBlockMode( clientId );\n\t\t\t\tonToggle();\n\t\t\t} }\n\t\t>\n\t\t\t{ label }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n// The implementation of content locking is mainly in this file, although the mechanism\n// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect\n// at block-editor/src/components/block-list/index.js.\n// Besides the components on this file and the file referenced above the implementation\n// also includes artifacts on the store (actions, reducers, and selector).\n\nexport function ModifyContentLockMenuItem( { clientId, onClose } ) {\n\tconst { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetContentLockingParent,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\treturn {\n\t\t\t\ttemplateLock: getTemplateLock( clientId ),\n\t\t\t\tisLockedByParent: !! getContentLockingParent( clientId ),\n\t\t\t\tisEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst blockEditorActions = useDispatch( blockEditorStore );\n\tconst isContentLocked =\n\t\t! isLockedByParent && templateLock === 'contentOnly';\n\tif ( ! isContentLocked && ! isEditingAsBlocks ) {\n\t\treturn null;\n\t}\n\n\tconst { modifyContentLockBlock } = unlock( blockEditorActions );\n\tconst showStartEditingAsBlocks = ! isEditingAsBlocks && isContentLocked;\n\n\treturn (\n\t\tshowStartEditingAsBlocks && (\n\t\t\t {\n\t\t\t\t\tmodifyContentLockBlock( clientId );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ _x( 'Modify', 'Unlock content locked blocks' ) }\n\t\t\t\n\t\t)\n\t);\n}\n","export default function isEmptyString( testString ) {\n\treturn testString?.trim()?.length === 0;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n\tTextControl,\n\tModal,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport isEmptyString from './is-empty-string';\n\nexport default function BlockRenameModal( {\n\tblockName,\n\toriginalBlockName,\n\tonClose,\n\tonSave,\n\t// Pattern Overrides is a WordPress-only feature but it also uses the Block Binding API.\n\t// Ideally this should not be inside the block editor package, but we keep it here for simplicity.\n\thasOverridesWarning,\n} ) {\n\tconst [ editedBlockName, setEditedBlockName ] = useState( blockName );\n\n\tconst nameHasChanged = editedBlockName !== blockName;\n\tconst nameIsOriginal = editedBlockName === originalBlockName;\n\tconst nameIsEmpty = isEmptyString( editedBlockName );\n\n\tconst isNameValid = nameHasChanged || nameIsOriginal;\n\n\tconst autoSelectInputText = ( event ) => event.target.select();\n\n\tconst handleSubmit = () => {\n\t\tconst message =\n\t\t\tnameIsOriginal || nameIsEmpty\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name reset to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name changed to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t );\n\n\t\t// Must be assertive to immediately announce change.\n\t\tspeak( message, 'assertive' );\n\t\tonSave( editedBlockName );\n\n\t\t// Immediate close avoids ability to hit save multiple times.\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif ( ! isNameValid ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thandleSubmit();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockDisplayInformation } from '..';\nimport isEmptyString from './is-empty-string';\nimport BlockRenameModal from './modal';\n\nexport default function BlockRenameControl( { clientId } ) {\n\tconst [ renamingBlock, setRenamingBlock ] = useState( false );\n\n\tconst { metadata } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\n\t\t\tconst _metadata = getBlockAttributes( clientId )?.metadata;\n\t\t\treturn {\n\t\t\t\tmetadata: _metadata,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\tconst customName = metadata?.name;\n\tconst hasPatternOverrides =\n\t\t!! customName &&\n\t\t!! metadata?.bindings &&\n\t\tObject.values( metadata.bindings ).some(\n\t\t\t( binding ) => binding.source === 'core/pattern-overrides'\n\t\t);\n\n\tfunction onChange( newName ) {\n\t\tupdateBlockAttributes( [ clientId ], {\n\t\t\tmetadata: {\n\t\t\t\t...metadata,\n\t\t\t\tname: newName,\n\t\t\t},\n\t\t} );\n\t}\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\treturn (\n\t\t<>\n\t\t\t {\n\t\t\t\t\tsetRenamingBlock( true );\n\t\t\t\t} }\n\t\t\t\taria-expanded={ renamingBlock }\n\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t>\n\t\t\t\t{ __( 'Rename' ) }\n\t\t\t\n\t\t\t{ renamingBlock && (\n\t\t\t\t setRenamingBlock( false ) }\n\t\t\t\t\tonSave={ ( newName ) => {\n\t\t\t\t\t\t// If the new value is the block's original name (e.g. `Group`)\n\t\t\t\t\t\t// or it is an empty string then assume the intent is to reset\n\t\t\t\t\t\t// the value. Therefore reset the metadata.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnewName === blockInformation?.title ||\n\t\t\t\t\t\t\tisEmptyString( newName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewName = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( newName );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tcreateSlotFill,\n\tMenuGroup,\n\tMenuItem,\n\t__experimentalStyleProvider as StyleProvider,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { pipe } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseConvertToGroupButtonProps,\n\tConvertToGroupButton,\n} from '../convert-to-group-buttons';\nimport { BlockLockMenuItem, useBlockLock } from '../block-lock';\nimport { store as blockEditorStore } from '../../store';\nimport BlockModeToggle from '../block-settings-menu/block-mode-toggle';\nimport { ModifyContentLockMenuItem } from '../content-lock';\nimport { BlockRenameControl, useBlockRename } from '../block-rename';\n\nconst { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );\n\nconst BlockSettingsMenuControlsSlot = ( { fillProps, clientIds = null } ) => {\n\tconst { selectedBlocks, selectedClientIds, isContentOnly } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst ids =\n\t\t\t\tclientIds !== null ? clientIds : getSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\tselectedBlocks: getBlockNamesByClientId( ids ),\n\t\t\t\tselectedClientIds: ids,\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( ids[ 0 ] ) === 'contentOnly',\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst { canLock } = useBlockLock( selectedClientIds[ 0 ] );\n\tconst { canRename } = useBlockRename( selectedBlocks[ 0 ] );\n\tconst showLockButton =\n\t\tselectedClientIds.length === 1 && canLock && ! isContentOnly;\n\tconst showRenameButton =\n\t\tselectedClientIds.length === 1 && canRename && ! isContentOnly;\n\n\t// Check if current selection of blocks is Groupable or Ungroupable\n\t// and pass this props down to ConvertToGroupButton.\n\tconst convertToGroupButtonProps =\n\t\tuseConvertToGroupButtonProps( selectedClientIds );\n\tconst { isGroupable, isUngroupable } = convertToGroupButtonProps;\n\tconst showConvertToGroupButton = isGroupable || isUngroupable;\n\n\treturn (\n\t\t\n\t\t\t{ ( fills ) => {\n\t\t\t\tif (\n\t\t\t\t\t! fills?.length > 0 &&\n\t\t\t\t\t! showConvertToGroupButton &&\n\t\t\t\t\t! showLockButton\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{ showConvertToGroupButton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ showLockButton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ showRenameButton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ fills }\n\t\t\t\t\t\t{ fillProps?.canMove &&\n\t\t\t\t\t\t\t! fillProps?.onlyBlock &&\n\t\t\t\t\t\t\t! isContentOnly && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ __( 'Move to' ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ selectedClientIds.length === 1 && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ fillProps?.count === 1 && ! isContentOnly && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md\n *\n * @param {Object} props Fill props.\n * @return {Element} Element.\n */\nfunction BlockSettingsMenuControls( { ...props } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nBlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;\n\nexport default BlockSettingsMenuControls;\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport } from '@wordpress/blocks';\n\nexport default function useBlockRename( name ) {\n\treturn {\n\t\tcanRename: getBlockSupport( name, 'renaming', true ),\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { useDispatch } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { useShowHoveredOrFocusedGestures } from '../block-toolbar/utils';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockParentSelectorMenuItem( {\n\tparentClientId,\n\tparentBlockType,\n} ) {\n\tconst isSmallViewport = useViewportMatch( 'medium', '<' );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\t// Allows highlighting the parent block outline when focusing or hovering\n\t// the parent block selector within the child.\n\tconst menuItemRef = useRef();\n\tconst gesturesProps = useShowHoveredOrFocusedGestures( {\n\t\tref: menuItemRef,\n\t\thighlightParent: true,\n\t} );\n\n\tif ( ! isSmallViewport ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t }\n\t\t\tonClick={ () => selectBlock( parentClientId ) }\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %s: Name of the block's parent. */\n\t\t\t\t__( 'Select parent block (%s)' ),\n\t\t\t\tparentBlockType.title\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockType,\n\tserialize,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { moreVertical } from '@wordpress/icons';\nimport { Children, cloneElement } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { displayShortcut } from '@wordpress/keycodes';\nimport { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';\nimport { pipe, useCopyToClipboard } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockActions from '../block-actions';\nimport BlockHTMLConvertButton from './block-html-convert-button';\nimport __unstableBlockSettingsMenuFirstItem from './block-settings-menu-first-item';\nimport BlockSettingsMenuControls from '../block-settings-menu-controls';\nimport BlockParentSelectorMenuItem from './block-parent-selector-menu-item';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-editor-block-settings-menu__popover',\n\tplacement: 'bottom-start',\n};\n\nfunction CopyMenuItem( { clientIds, onCopy, label, shortcut } ) {\n\tconst { getBlocksByClientId } = useSelect( blockEditorStore );\n\tconst ref = useCopyToClipboard(\n\t\t() => serialize( getBlocksByClientId( clientIds ) ),\n\t\tonCopy\n\t);\n\tconst copyMenuItemLabel = label ? label : __( 'Copy' );\n\treturn (\n\t\t\n\t\t\t{ copyMenuItemLabel }\n\t\t\n\t);\n}\n\nexport function BlockSettingsDropdown( {\n\tblock,\n\tclientIds,\n\tchildren,\n\t__experimentalSelectBlock,\n\t...props\n} ) {\n\t// Get the client id of the current block for this menu, if one is set.\n\tconst currentClientId = block?.clientId;\n\tconst count = clientIds.length;\n\tconst firstBlockClientId = clientIds[ 0 ];\n\tconst {\n\t\tfirstParentClientId,\n\t\tonlyBlock,\n\t\tparentBlockType,\n\t\tpreviousBlockClientId,\n\t\tselectedBlockClientIds,\n\t\topenedBlockSettingsMenu,\n\t\tisContentOnly,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetOpenedBlockSettingsMenu,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\n\t\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\n\t\t\tconst _firstParentClientId =\n\t\t\t\tgetBlockRootClientId( firstBlockClientId );\n\t\t\tconst parentBlockName =\n\t\t\t\t_firstParentClientId && getBlockName( _firstParentClientId );\n\n\t\t\treturn {\n\t\t\t\tfirstParentClientId: _firstParentClientId,\n\t\t\t\tonlyBlock: 1 === getBlockCount( _firstParentClientId ),\n\t\t\t\tparentBlockType:\n\t\t\t\t\t_firstParentClientId &&\n\t\t\t\t\t( getActiveBlockVariation(\n\t\t\t\t\t\tparentBlockName,\n\t\t\t\t\t\tgetBlockAttributes( _firstParentClientId )\n\t\t\t\t\t) ||\n\t\t\t\t\t\tgetBlockType( parentBlockName ) ),\n\t\t\t\tpreviousBlockClientId:\n\t\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ),\n\t\t\t\tselectedBlockClientIds: getSelectedBlockClientIds(),\n\t\t\t\topenedBlockSettingsMenu: getOpenedBlockSettingsMenu(),\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( firstBlockClientId ) === 'contentOnly',\n\t\t\t};\n\t\t},\n\t\t[ firstBlockClientId ]\n\t);\n\tconst { getBlockOrder, getSelectedBlockClientIds } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { setOpenedBlockSettingsMenu } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tconst shortcuts = useSelect( ( select ) => {\n\t\tconst { getShortcutRepresentation } = select( keyboardShortcutsStore );\n\t\treturn {\n\t\t\tduplicate: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/duplicate'\n\t\t\t),\n\t\t\tremove: getShortcutRepresentation( 'core/block-editor/remove' ),\n\t\t\tinsertAfter: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-after'\n\t\t\t),\n\t\t\tinsertBefore: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-before'\n\t\t\t),\n\t\t};\n\t}, [] );\n\tconst hasSelectedBlocks = selectedBlockClientIds.length > 0;\n\n\tasync function updateSelectionAfterDuplicate( clientIdsPromise ) {\n\t\tif ( ! __experimentalSelectBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ids = await clientIdsPromise;\n\t\tif ( ids && ids[ 0 ] ) {\n\t\t\t__experimentalSelectBlock( ids[ 0 ], false );\n\t\t}\n\t}\n\n\tfunction updateSelectionAfterRemove() {\n\t\tif ( ! __experimentalSelectBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet blockToFocus = previousBlockClientId || firstParentClientId;\n\n\t\t// Focus the first block if there's no previous block nor parent block.\n\t\tif ( ! blockToFocus ) {\n\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t}\n\n\t\t// Only update the selection if the original selection is removed.\n\t\tconst shouldUpdateSelection =\n\t\t\thasSelectedBlocks && getSelectedBlockClientIds().length === 0;\n\n\t\t__experimentalSelectBlock( blockToFocus, shouldUpdateSelection );\n\t}\n\n\t// This can occur when the selected block (the parent)\n\t// displays child blocks within a List View.\n\tconst parentBlockIsSelected =\n\t\tselectedBlockClientIds?.includes( firstParentClientId );\n\n\t// When a currentClientId is in use, treat the menu as a controlled component.\n\t// This ensures that only one block settings menu is open at a time.\n\t// This is a temporary solution to work around an issue with `onFocusOutside`\n\t// where it does not allow a dropdown to be closed if focus was never within\n\t// the dropdown to begin with. Examples include a user either CMD+Clicking or\n\t// right clicking into an inactive window.\n\t// See: https://github.com/WordPress/gutenberg/pull/54083\n\tconst open = ! currentClientId\n\t\t? undefined\n\t\t: openedBlockSettingsMenu === currentClientId || false;\n\n\tfunction onToggle( localOpen ) {\n\t\tif ( localOpen && openedBlockSettingsMenu !== currentClientId ) {\n\t\t\tsetOpenedBlockSettingsMenu( currentClientId );\n\t\t} else if (\n\t\t\t! localOpen &&\n\t\t\topenedBlockSettingsMenu &&\n\t\t\topenedBlockSettingsMenu === currentClientId\n\t\t) {\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ ( {\n\t\t\t\tcanCopyStyles,\n\t\t\t\tcanDuplicate,\n\t\t\t\tcanInsertBlock,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tonDuplicate,\n\t\t\t\tonInsertAfter,\n\t\t\t\tonInsertBefore,\n\t\t\t\tonRemove,\n\t\t\t\tonCopy,\n\t\t\t\tonPasteStyles,\n\t\t\t\tonMoveTo,\n\t\t\t} ) => (\n\t\t\t\t\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<__unstableBlockSettingsMenuFirstItem.Slot\n\t\t\t\t\t\t\t\t\tfillProps={ { onClose } }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ ! parentBlockIsSelected &&\n\t\t\t\t\t\t\t\t\t!! firstParentClientId && (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ count === 1 && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ ! isContentOnly && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ canDuplicate && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Duplicate' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ canInsertBlock && ! isContentOnly && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add before' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add after' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ canCopyStyles && ! isContentOnly && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Paste styles' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ typeof children === 'function'\n\t\t\t\t\t\t\t\t? children( { onClose } )\n\t\t\t\t\t\t\t\t: Children.map( ( child ) =>\n\t\t\t\t\t\t\t\t\t\tcloneElement( child, { onClose } )\n\t\t\t\t\t\t\t\t ) }\n\t\t\t\t\t\t\t{ canRemove && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockSettingsDropdown;\n","/**\n * WordPress dependencies\n */\nimport { ToolbarGroup, ToolbarItem } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockSettingsDropdown from './block-settings-dropdown';\n\nexport function BlockSettingsMenu( { clientIds, ...props } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\nexport default BlockSettingsMenu;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useReducer, useRef, useEffect } from '@wordpress/element';\nimport { lock, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport useBlockLock from './use-block-lock';\n\nexport default function BlockLockToolbar( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tconst hasLockButtonShownRef = useRef( false );\n\n\t// If the block lock button has been shown, we don't want to remove it\n\t// from the toolbar until the toolbar is rendered again without it.\n\t// Removing it beforehand can cause focus loss issues, such as when\n\t// unlocking the block from the modal. It needs to return focus from\n\t// whence it came, and to do that, we need to leave the button in the toolbar.\n\tuseEffect( () => {\n\t\tif ( isLocked ) {\n\t\t\thasLockButtonShownRef.current = true;\n\t\t}\n\t}, [ isLocked ] );\n\n\tif ( ! isLocked && ! hasLockButtonShownRef.current ) {\n\t\treturn null;\n\t}\n\n\tlet label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\tif ( ! canLock && isLocked ) {\n\t\tlabel = __( 'Locked' );\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{ isModalOpen && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst group = (\n\t\n\t\t\n\t\n);\n\nexport default group;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst row = (\n\t\n\t\t\n\t\n);\n\nexport default row;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst stack = (\n\t\n\t\t\n\t\n);\n\nexport default stack;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst grid = (\n\t\n\t\t\n\t\n);\n\nexport default grid;\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { switchToBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { group, row, stack, grid } from '@wordpress/icons';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useConvertToGroupButtonProps } from '../convert-to-group-buttons';\nimport { store as blockEditorStore } from '../../store';\n\nconst layouts = {\n\tgroup: { type: 'constrained' },\n\trow: { type: 'flex', flexWrap: 'nowrap' },\n\tstack: { type: 'flex', orientation: 'vertical' },\n\tgrid: { type: 'grid' },\n};\n\nfunction BlockGroupToolbar() {\n\tconst { blocksSelection, clientIds, groupingBlockName, isGroupable } =\n\t\tuseConvertToGroupButtonProps();\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\n\tconst { canRemove, variations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canRemoveBlocks } = select( blockEditorStore );\n\t\t\tconst { getBlockVariations } = select( blocksStore );\n\n\t\t\treturn {\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds ),\n\t\t\t\tvariations: getBlockVariations(\n\t\t\t\t\tgroupingBlockName,\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, groupingBlockName ]\n\t);\n\n\tconst onConvertToGroup = ( layout ) => {\n\t\tconst newBlocks = switchToBlockType(\n\t\t\tblocksSelection,\n\t\t\tgroupingBlockName\n\t\t);\n\n\t\tif ( typeof layout !== 'string' ) {\n\t\t\tlayout = 'group';\n\t\t}\n\n\t\tif ( newBlocks && newBlocks.length > 0 ) {\n\t\t\t// Because the block is not in the store yet we can't use\n\t\t\t// updateBlockAttributes so need to manually update attributes.\n\t\t\tnewBlocks[ 0 ].attributes.layout = layouts[ layout ];\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t}\n\t};\n\n\tconst onConvertToRow = () => onConvertToGroup( 'row' );\n\tconst onConvertToStack = () => onConvertToGroup( 'stack' );\n\tconst onConvertToGrid = () => onConvertToGroup( 'grid' );\n\n\t// Don't render the button if the current selection cannot be grouped.\n\t// A good example is selecting multiple button blocks within a Buttons block:\n\t// The group block is not a valid child of Buttons, so we should not show the button.\n\t// Any blocks that are locked against removal also cannot be grouped.\n\tif ( ! isGroupable || ! canRemove ) {\n\t\treturn null;\n\t}\n\n\tconst canInsertRow = !! variations.find(\n\t\t( { name } ) => name === 'group-row'\n\t);\n\tconst canInsertStack = !! variations.find(\n\t\t( { name } ) => name === 'group-stack'\n\t);\n\tconst canInsertGrid = !! variations.find(\n\t\t( { name } ) => name === 'group-grid'\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ canInsertRow && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ canInsertStack && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ canInsertGrid && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockGroupToolbar;\n","/**\n * WordPress dependencies\n */\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockEditVisuallyButton( { clientIds } ) {\n\t// Edit visually only works for single block selection.\n\tconst clientId = clientIds.length === 1 ? clientIds[ 0 ] : undefined;\n\tconst canEditVisually = useSelect(\n\t\t( select ) =>\n\t\t\t!! clientId &&\n\t\t\tselect( blockEditorStore ).getBlockMode( clientId ) === 'html',\n\t\t[ clientId ]\n\t);\n\tconst { toggleBlockMode } = useDispatch( blockEditorStore );\n\n\tif ( ! canEditVisually ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\ttoggleBlockMode( clientId );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Edit visually' ) }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nconst __unstableBlockNameContext = createContext( '' );\n\nexport default __unstableBlockNameContext;\n","/**\n * WordPress dependencies\n */\nimport { NavigableMenu, Toolbar } from '@wordpress/components';\nimport {\n\tuseState,\n\tuseRef,\n\tuseLayoutEffect,\n\tuseEffect,\n\tuseCallback,\n} from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { focus } from '@wordpress/dom';\nimport { useShortcut } from '@wordpress/keyboard-shortcuts';\nimport { ESCAPE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nfunction hasOnlyToolbarItem( elements ) {\n\tconst dataProp = 'toolbarItem';\n\treturn ! elements.some( ( element ) => ! ( dataProp in element.dataset ) );\n}\n\nfunction getAllFocusableToolbarItemsIn( container ) {\n\treturn Array.from(\n\t\tcontainer.querySelectorAll( '[data-toolbar-item]:not([disabled])' )\n\t);\n}\n\nfunction hasFocusWithin( container ) {\n\treturn container.contains( container.ownerDocument.activeElement );\n}\n\nfunction focusFirstTabbableIn( container ) {\n\tconst [ firstTabbable ] = focus.tabbable.find( container );\n\n\tif ( firstTabbable ) {\n\t\tfirstTabbable.focus( {\n\t\t\t// When focusing newly mounted toolbars,\n\t\t\t// the position of the popover is often not right on the first render\n\t\t\t// This prevents the layout shifts when focusing the dialogs.\n\t\t\tpreventScroll: true,\n\t\t} );\n\t}\n}\n\nfunction useIsAccessibleToolbar( toolbarRef ) {\n\t/*\n\t * By default, we'll assume the starting accessible state of the Toolbar\n\t * is true, as it seems to be the most common case.\n\t *\n\t * Transitioning from an (initial) false to true state causes the\n\t * component to mount twice, which is causing undesired\n\t * side-effects. These side-effects appear to only affect certain\n\t * E2E tests.\n\t *\n\t * This was initial discovered in this pull-request:\n\t * https://github.com/WordPress/gutenberg/pull/23425\n\t */\n\tconst initialAccessibleToolbarState = true;\n\n\t// By default, it's gonna render NavigableMenu. If all the tabbable elements\n\t// inside the toolbar are ToolbarItem components (or derived components like\n\t// ToolbarButton), then we can wrap them with the accessible Toolbar\n\t// component.\n\tconst [ isAccessibleToolbar, setIsAccessibleToolbar ] = useState(\n\t\tinitialAccessibleToolbarState\n\t);\n\n\tconst determineIsAccessibleToolbar = useCallback( () => {\n\t\tconst tabbables = focus.tabbable.find( toolbarRef.current );\n\t\tconst onlyToolbarItem = hasOnlyToolbarItem( tabbables );\n\t\tif ( ! onlyToolbarItem ) {\n\t\t\tdeprecated( 'Using custom components as toolbar controls', {\n\t\t\t\tsince: '5.6',\n\t\t\t\talternative:\n\t\t\t\t\t'ToolbarItem, ToolbarButton or ToolbarDropdownMenu components',\n\t\t\t\tlink: 'https://developer.wordpress.org/block-editor/components/toolbar-button/#inside-blockcontrols',\n\t\t\t} );\n\t\t}\n\t\tsetIsAccessibleToolbar( onlyToolbarItem );\n\t}, [ toolbarRef ] );\n\n\tuseLayoutEffect( () => {\n\t\t// Toolbar buttons may be rendered asynchronously, so we use\n\t\t// MutationObserver to check if the toolbar subtree has been modified.\n\t\tconst observer = new window.MutationObserver(\n\t\t\tdetermineIsAccessibleToolbar\n\t\t);\n\t\tobserver.observe( toolbarRef.current, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t} );\n\t\treturn () => observer.disconnect();\n\t}, [ determineIsAccessibleToolbar, isAccessibleToolbar, toolbarRef ] );\n\n\treturn isAccessibleToolbar;\n}\n\nfunction useToolbarFocus( {\n\ttoolbarRef,\n\tfocusOnMount,\n\tisAccessibleToolbar,\n\tdefaultIndex,\n\tonIndexChange,\n\tshouldUseKeyboardFocusShortcut,\n\tfocusEditorOnEscape,\n} ) {\n\t// Make sure we don't use modified versions of this prop.\n\tconst [ initialFocusOnMount ] = useState( focusOnMount );\n\tconst [ initialIndex ] = useState( defaultIndex );\n\n\tconst focusToolbar = useCallback( () => {\n\t\tfocusFirstTabbableIn( toolbarRef.current );\n\t}, [ toolbarRef ] );\n\n\tconst focusToolbarViaShortcut = () => {\n\t\tif ( shouldUseKeyboardFocusShortcut ) {\n\t\t\tfocusToolbar();\n\t\t}\n\t};\n\n\t// Focus on toolbar when pressing alt+F10 when the toolbar is visible.\n\tuseShortcut( 'core/block-editor/focus-toolbar', focusToolbarViaShortcut );\n\n\tuseEffect( () => {\n\t\tif ( initialFocusOnMount ) {\n\t\t\tfocusToolbar();\n\t\t}\n\t}, [ isAccessibleToolbar, initialFocusOnMount, focusToolbar ] );\n\n\tuseEffect( () => {\n\t\t// Store ref so we have access on useEffect cleanup: https://legacy.reactjs.org/blog/2020/08/10/react-v17-rc.html#effect-cleanup-timing\n\t\tconst navigableToolbarRef = toolbarRef.current;\n\t\t// If initialIndex is passed, we focus on that toolbar item when the\n\t\t// toolbar gets mounted and initial focus is not forced.\n\t\t// We have to wait for the next browser paint because block controls aren't\n\t\t// rendered right away when the toolbar gets mounted.\n\t\tlet raf = 0;\n\n\t\t// If the toolbar already had focus before the render, we don't want to move it.\n\t\t// https://github.com/WordPress/gutenberg/issues/58511\n\t\tif (\n\t\t\t! initialFocusOnMount &&\n\t\t\t! hasFocusWithin( navigableToolbarRef )\n\t\t) {\n\t\t\traf = window.requestAnimationFrame( () => {\n\t\t\t\tconst items =\n\t\t\t\t\tgetAllFocusableToolbarItemsIn( navigableToolbarRef );\n\t\t\t\tconst index = initialIndex || 0;\n\t\t\t\tif ( items[ index ] && hasFocusWithin( navigableToolbarRef ) ) {\n\t\t\t\t\titems[ index ].focus( {\n\t\t\t\t\t\t// When focusing newly mounted toolbars,\n\t\t\t\t\t\t// the position of the popover is often not right on the first render\n\t\t\t\t\t\t// This prevents the layout shifts when focusing the dialogs.\n\t\t\t\t\t\tpreventScroll: true,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn () => {\n\t\t\twindow.cancelAnimationFrame( raf );\n\t\t\tif ( ! onIndexChange || ! navigableToolbarRef ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// When the toolbar element is unmounted and onIndexChange is passed, we\n\t\t\t// pass the focused toolbar item index so it can be hydrated later.\n\t\t\tconst items = getAllFocusableToolbarItemsIn( navigableToolbarRef );\n\t\t\tconst index = items.findIndex( ( item ) => item.tabIndex === 0 );\n\t\t\tonIndexChange( index );\n\t\t};\n\t}, [ initialIndex, initialFocusOnMount, onIndexChange, toolbarRef ] );\n\n\tconst { getLastFocus } = unlock( useSelect( blockEditorStore ) );\n\t/**\n\t * Handles returning focus to the block editor canvas when pressing escape.\n\t */\n\tuseEffect( () => {\n\t\tconst navigableToolbarRef = toolbarRef.current;\n\n\t\tif ( focusEditorOnEscape ) {\n\t\t\tconst handleKeyDown = ( event ) => {\n\t\t\t\tconst lastFocus = getLastFocus();\n\t\t\t\tif ( event.keyCode === ESCAPE && lastFocus?.current ) {\n\t\t\t\t\t// Focus the last focused element when pressing escape.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tlastFocus.current.focus();\n\t\t\t\t}\n\t\t\t};\n\t\t\tnavigableToolbarRef.addEventListener( 'keydown', handleKeyDown );\n\t\t\treturn () => {\n\t\t\t\tnavigableToolbarRef.removeEventListener(\n\t\t\t\t\t'keydown',\n\t\t\t\t\thandleKeyDown\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\t}, [ focusEditorOnEscape, getLastFocus, toolbarRef ] );\n}\n\nexport default function NavigableToolbar( {\n\tchildren,\n\tfocusOnMount,\n\tfocusEditorOnEscape = false,\n\tshouldUseKeyboardFocusShortcut = true,\n\t__experimentalInitialIndex: initialIndex,\n\t__experimentalOnIndexChange: onIndexChange,\n\torientation = 'horizontal',\n\t...props\n} ) {\n\tconst toolbarRef = useRef();\n\tconst isAccessibleToolbar = useIsAccessibleToolbar( toolbarRef );\n\n\tuseToolbarFocus( {\n\t\ttoolbarRef,\n\t\tfocusOnMount,\n\t\tdefaultIndex: initialIndex,\n\t\tonIndexChange,\n\t\tisAccessibleToolbar,\n\t\tshouldUseKeyboardFocusShortcut,\n\t\tfocusEditorOnEscape,\n\t} );\n\n\tif ( isAccessibleToolbar ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalUseSlotFills as useSlotFills } from '@wordpress/components';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport groups from './groups';\n\nexport function useHasAnyBlockControls() {\n\tlet hasAnyBlockControls = false;\n\tfor ( const group in groups ) {\n\t\t// It is safe to violate the rules of hooks here as the `groups` object\n\t\t// is static and will not change length between renders. Do not return\n\t\t// early as that will cause the hook to be called a different number of\n\t\t// times between renders.\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tif ( useHasBlockControls( group ) ) {\n\t\t\thasAnyBlockControls = true;\n\t\t}\n\t}\n\treturn hasAnyBlockControls;\n}\n\nexport function useHasBlockControls( group = 'default' ) {\n\tconst Slot = groups[ group ]?.Slot;\n\tconst fills = useSlotFills( Slot?.__unstableName );\n\tif ( ! Slot ) {\n\t\twarning( `Unknown BlockControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\treturn !! fills?.length;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { getBlockType, hasBlockSupport } from '@wordpress/blocks';\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';\n\n/**\n * Returns true if the block toolbar should be shown.\n *\n * @return {boolean} Whether the block toolbar component will be rendered.\n */\nexport function useHasBlockToolbar() {\n\tconst { isToolbarEnabled, isDefaultEditingMode } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockSelectionStart,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\t// we only care about the 1st selected block\n\t\t\t// for the toolbar, so we use getBlockSelectionStart\n\t\t\t// instead of getSelectedBlockClientIds\n\t\t\tconst selectedBlockClientId = getBlockSelectionStart();\n\n\t\t\tconst blockType =\n\t\t\t\tselectedBlockClientId &&\n\t\t\t\tgetBlockType( getBlockName( selectedBlockClientId ) );\n\n\t\t\treturn {\n\t\t\t\tisToolbarEnabled:\n\t\t\t\t\tblockType &&\n\t\t\t\t\thasBlockSupport( blockType, '__experimentalToolbar', true ),\n\t\t\t\tisDefaultEditingMode:\n\t\t\t\t\tgetBlockEditingMode( selectedBlockClientId ) === 'default',\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst hasAnyBlockControls = useHasAnyBlockControls();\n\n\tif (\n\t\t! isToolbarEnabled ||\n\t\t( ! isDefaultEditingMode && ! hasAnyBlockControls )\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { useRef } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tgetBlockType,\n\thasBlockSupport,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { ToolbarGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockMover from '../block-mover';\nimport BlockParentSelector from '../block-parent-selector';\nimport BlockSwitcher from '../block-switcher';\nimport BlockControls from '../block-controls';\nimport __unstableBlockToolbarLastItem from './block-toolbar-last-item';\nimport BlockSettingsMenu from '../block-settings-menu';\nimport { BlockLockToolbar } from '../block-lock';\nimport { BlockGroupToolbar } from '../convert-to-group-buttons';\nimport BlockEditVisuallyButton from '../block-edit-visually-button';\nimport { useShowHoveredOrFocusedGestures } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport __unstableBlockNameContext from './block-name-context';\nimport NavigableToolbar from '../navigable-toolbar';\nimport { useHasBlockToolbar } from './use-has-block-toolbar';\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {boolean} props.focusOnMount Focus the toolbar when mounted.\n * @param {number} props.__experimentalInitialIndex The initial index of the toolbar item to focus.\n * @param {Function} props.__experimentalOnIndexChange Callback function to be called when the index of the focused toolbar item changes.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport function PrivateBlockToolbar( {\n\thideDragHandle,\n\tfocusOnMount,\n\t__experimentalInitialIndex,\n\t__experimentalOnIndexChange,\n\tvariant = 'unstyled',\n} ) {\n\tconst {\n\t\tblockClientId,\n\t\tblockClientIds,\n\t\tisContentOnlyEditingMode,\n\t\tisDefaultEditingMode,\n\t\tblockType,\n\t\ttoolbarKey,\n\t\tshouldShowVisualToolbar,\n\t\tshowParentSelector,\n\t\tisUsingBindings,\n\t\thasParentPattern,\n\t\thasContentOnlyLocking,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockName,\n\t\t\tgetBlockMode,\n\t\t\tgetBlockParents,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisBlockValid,\n\t\t\tgetBlockEditingMode,\n\t\t\tgetBlockAttributes,\n\t\t\tgetBlockParentsByBlockName,\n\t\t\tgetTemplateLock,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlockClientId = selectedBlockClientIds[ 0 ];\n\t\tconst parents = getBlockParents( selectedBlockClientId );\n\t\tconst firstParentClientId = parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( firstParentClientId );\n\t\tconst parentBlockType = getBlockType( parentBlockName );\n\t\tconst editingMode = getBlockEditingMode( selectedBlockClientId );\n\t\tconst _isDefaultEditingMode = editingMode === 'default';\n\t\tconst _blockName = getBlockName( selectedBlockClientId );\n\t\tconst isValid = selectedBlockClientIds.every( ( id ) =>\n\t\t\tisBlockValid( id )\n\t\t);\n\t\tconst isVisual = selectedBlockClientIds.every(\n\t\t\t( id ) => getBlockMode( id ) === 'visual'\n\t\t);\n\t\tconst _isUsingBindings = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\t!! getBlockAttributes( clientId )?.metadata?.bindings\n\t\t);\n\n\t\tconst _hasParentPattern = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\tgetBlockParentsByBlockName( clientId, 'core/block', true )\n\t\t\t\t\t.length > 0\n\t\t);\n\n\t\t// If one or more selected blocks are locked, do not show the BlockGroupToolbar.\n\t\tconst _hasTemplateLock = selectedBlockClientIds.some(\n\t\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t\t);\n\t\treturn {\n\t\t\tblockClientId: selectedBlockClientId,\n\t\t\tblockClientIds: selectedBlockClientIds,\n\t\t\tisContentOnlyEditingMode: editingMode === 'contentOnly',\n\t\t\tisDefaultEditingMode: _isDefaultEditingMode,\n\t\t\tblockType: selectedBlockClientId && getBlockType( _blockName ),\n\t\t\tshouldShowVisualToolbar: isValid && isVisual,\n\t\t\ttoolbarKey: `${ selectedBlockClientId }${ firstParentClientId }`,\n\t\t\tshowParentSelector:\n\t\t\t\tparentBlockType &&\n\t\t\t\tgetBlockEditingMode( firstParentClientId ) === 'default' &&\n\t\t\t\thasBlockSupport(\n\t\t\t\t\tparentBlockType,\n\t\t\t\t\t'__experimentalParentSelector',\n\t\t\t\t\ttrue\n\t\t\t\t) &&\n\t\t\t\tselectedBlockClientIds.length === 1 &&\n\t\t\t\t_isDefaultEditingMode,\n\t\t\tisUsingBindings: _isUsingBindings,\n\t\t\thasParentPattern: _hasParentPattern,\n\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t};\n\t}, [] );\n\n\tconst toolbarWrapperRef = useRef( null );\n\n\t// Handles highlighting the current block outline on hover or focus of the\n\t// block type toolbar area.\n\tconst nodeRef = useRef();\n\tconst showHoveredOrFocusedGestures = useShowHoveredOrFocusedGestures( {\n\t\tref: nodeRef,\n\t} );\n\n\tconst isLargeViewport = ! useViewportMatch( 'medium', '<' );\n\n\tconst hasBlockToolbar = useHasBlockToolbar();\n\tif ( ! hasBlockToolbar ) {\n\t\treturn null;\n\t}\n\n\tconst isMultiToolbar = blockClientIds.length > 1;\n\tconst isSynced =\n\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\n\t// Shifts the toolbar to make room for the parent block selector.\n\tconst classes = clsx( 'block-editor-block-contextual-toolbar', {\n\t\t'has-parent': showParentSelector,\n\t} );\n\n\tconst innerClasses = clsx( 'block-editor-block-toolbar', {\n\t\t'is-synced': isSynced,\n\t\t'is-connected': isUsingBindings,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t{ ! isMultiToolbar &&\n\t\t\t\t\tisLargeViewport &&\n\t\t\t\t\tisDefaultEditingMode && }\n\t\t\t\t{ ( shouldShowVisualToolbar || isMultiToolbar ) &&\n\t\t\t\t\t( isDefaultEditingMode ||\n\t\t\t\t\t\t( isContentOnlyEditingMode && ! hasParentPattern ) ||\n\t\t\t\t\t\tisSynced ) && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ ! isMultiToolbar && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t) }\n\t\t\t\t{ ! hasContentOnlyLocking &&\n\t\t\t\t\tshouldShowVisualToolbar &&\n\t\t\t\t\tisMultiToolbar && }\n\t\t\t\t{ shouldShowVisualToolbar && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<__unstableBlockNameContext.Provider\n\t\t\t\t\t\t\tvalue={ blockType?.name }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<__unstableBlockToolbarLastItem.Slot />\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport default function BlockToolbar( { hideDragHandle, variant } ) {\n\treturn (\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\nimport { useShortcut } from '@wordpress/keyboard-shortcuts';\n/**\n * Internal dependencies\n */\nimport BlockPopover from '../block-popover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\nimport { store as blockEditorStore } from '../../store';\nimport { PrivateBlockToolbar } from '../block-toolbar';\n\nexport default function BlockToolbarPopover( {\n\tclientId,\n\tisTyping,\n\t__unstableContentRef,\n} ) {\n\tconst { capturingClientId, isInsertionPointVisible, lastClientId } =\n\t\tuseSelectedBlockToolProps( clientId );\n\n\t// Stores the active toolbar item index so the block toolbar can return focus\n\t// to it when re-mounting.\n\tconst initialToolbarItemIndexRef = useRef();\n\n\tuseEffect( () => {\n\t\t// Resets the index whenever the active block changes so this is not\n\t\t// persisted. See https://github.com/WordPress/gutenberg/pull/25760#issuecomment-717906169\n\t\tinitialToolbarItemIndexRef.current = undefined;\n\t}, [ clientId ] );\n\n\tconst { stopTyping } = useDispatch( blockEditorStore );\n\tconst isToolbarForcedRef = useRef( false );\n\n\tuseShortcut( 'core/block-editor/focus-toolbar', () => {\n\t\tisToolbarForcedRef.current = true;\n\t\tstopTyping( true );\n\t} );\n\n\tuseEffect( () => {\n\t\tisToolbarForcedRef.current = false;\n\t} );\n\n\t// If the block has a parent with __experimentalCaptureToolbars enabled,\n\t// the toolbar should be positioned over the topmost capturing parent.\n\tconst clientIdToPositionOver = capturingClientId || clientId;\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId: clientIdToPositionOver,\n\t} );\n\n\treturn (\n\t\t! isTyping && (\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tinitialToolbarItemIndexRef.current = index;\n\t\t\t\t\t} }\n\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t/>\n\t\t\t\n\t\t)\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { dragHandle } from '@wordpress/icons';\nimport { Button, Flex, FlexItem } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { forwardRef, useEffect } from '@wordpress/element';\nimport {\n\tBACKSPACE,\n\tDELETE,\n\tUP,\n\tDOWN,\n\tLEFT,\n\tRIGHT,\n\tTAB,\n\tESCAPE,\n\tENTER,\n\tSPACE,\n} from '@wordpress/keycodes';\nimport {\n\t__experimentalGetAccessibleBlockLabel as getAccessibleBlockLabel,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { focus } from '@wordpress/dom';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTitle from '../block-title';\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\nimport BlockDraggable from '../block-draggable';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\n\n/**\n * Block selection button component, displaying the label of the block. If the block\n * descends from a root block, a button is displayed enabling the user to select\n * the root block.\n *\n * @param {string} props Component props.\n * @param {string} props.clientId Client ID of block.\n * @param {Object} ref Reference to the component.\n *\n * @return {Component} The component to be rendered.\n */\nfunction BlockSelectionButton( { clientId, rootClientId }, ref ) {\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockIndex,\n\t\t\t\thasBlockMovingClientId,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tcanMoveBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getActiveBlockVariation, getBlockType } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tconst { name, attributes } = getBlock( clientId );\n\t\t\tconst blockType = getBlockType( name );\n\t\t\tconst orientation =\n\t\t\t\tgetBlockListSettings( rootClientId )?.orientation;\n\t\t\tconst match = getActiveBlockVariation( name, attributes );\n\n\t\t\treturn {\n\t\t\t\tblockMovingMode: hasBlockMovingClientId(),\n\t\t\t\teditorMode: __unstableGetEditorMode(),\n\t\t\t\ticon: match?.icon || blockType.icon,\n\t\t\t\tlabel: getAccessibleBlockLabel(\n\t\t\t\t\tblockType,\n\t\t\t\t\tattributes,\n\t\t\t\t\tindex + 1,\n\t\t\t\t\torientation\n\t\t\t\t),\n\t\t\t\tcanMove: canMoveBlock( clientId, rootClientId ),\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\tconst { label, icon, blockMovingMode, editorMode, canMove } = selected;\n\tconst { setNavigationMode, removeBlock } = useDispatch( blockEditorStore );\n\n\t// Focus the breadcrumb in navigation mode.\n\tuseEffect( () => {\n\t\tif ( editorMode === 'navigation' ) {\n\t\t\tref.current.focus();\n\t\t\tspeak( label );\n\t\t}\n\t}, [ label, editorMode ] );\n\tconst blockElement = useBlockElement( clientId );\n\n\tconst {\n\t\thasBlockMovingClientId,\n\t\tgetBlockIndex,\n\t\tgetBlockRootClientId,\n\t\tgetClientIdsOfDescendants,\n\t\tgetSelectedBlockClientId,\n\t\tgetMultiSelectedBlocksEndClientId,\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tselectBlock,\n\t\tclearSelectedBlock,\n\t\tsetBlockMovingClientId,\n\t\tmoveBlockToPosition,\n\t} = useDispatch( blockEditorStore );\n\n\tfunction onKeyDown( event ) {\n\t\tconst { keyCode } = event;\n\t\tconst isUp = keyCode === UP;\n\t\tconst isDown = keyCode === DOWN;\n\t\tconst isLeft = keyCode === LEFT;\n\t\tconst isRight = keyCode === RIGHT;\n\t\tconst isTab = keyCode === TAB;\n\t\tconst isEscape = keyCode === ESCAPE;\n\t\tconst isEnter = keyCode === ENTER;\n\t\tconst isSpace = keyCode === SPACE;\n\t\tconst isShift = event.shiftKey;\n\n\t\tif ( keyCode === BACKSPACE || keyCode === DELETE ) {\n\t\t\tremoveBlock( clientId );\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst selectionEndClientId = getMultiSelectedBlocksEndClientId();\n\t\tconst selectionBeforeEndClientId = getPreviousBlockClientId(\n\t\t\tselectionEndClientId || selectedBlockClientId\n\t\t);\n\t\tconst selectionAfterEndClientId = getNextBlockClientId(\n\t\t\tselectionEndClientId || selectedBlockClientId\n\t\t);\n\n\t\tconst navigateUp = ( isTab && isShift ) || isUp;\n\t\tconst navigateDown = ( isTab && ! isShift ) || isDown;\n\t\t// Move out of current nesting level (no effect if at root level).\n\t\tconst navigateOut = isLeft;\n\t\t// Move into next nesting level (no effect if the current block has no innerBlocks).\n\t\tconst navigateIn = isRight;\n\n\t\tlet focusedBlockUid;\n\t\tif ( navigateUp ) {\n\t\t\tfocusedBlockUid = selectionBeforeEndClientId;\n\t\t} else if ( navigateDown ) {\n\t\t\tfocusedBlockUid = selectionAfterEndClientId;\n\t\t} else if ( navigateOut ) {\n\t\t\tfocusedBlockUid =\n\t\t\t\tgetBlockRootClientId( selectedBlockClientId ) ??\n\t\t\t\tselectedBlockClientId;\n\t\t} else if ( navigateIn ) {\n\t\t\tfocusedBlockUid =\n\t\t\t\tgetClientIdsOfDescendants( selectedBlockClientId )[ 0 ] ??\n\t\t\t\tselectedBlockClientId;\n\t\t}\n\t\tconst startingBlockClientId = hasBlockMovingClientId();\n\t\tif ( isEscape && startingBlockClientId && ! event.defaultPrevented ) {\n\t\t\tsetBlockMovingClientId( null );\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tif ( ( isEnter || isSpace ) && startingBlockClientId ) {\n\t\t\tconst sourceRoot = getBlockRootClientId( startingBlockClientId );\n\t\t\tconst destRoot = getBlockRootClientId( selectedBlockClientId );\n\t\t\tconst sourceBlockIndex = getBlockIndex( startingBlockClientId );\n\t\t\tlet destinationBlockIndex = getBlockIndex( selectedBlockClientId );\n\t\t\tif (\n\t\t\t\tsourceBlockIndex < destinationBlockIndex &&\n\t\t\t\tsourceRoot === destRoot\n\t\t\t) {\n\t\t\t\tdestinationBlockIndex -= 1;\n\t\t\t}\n\t\t\tmoveBlockToPosition(\n\t\t\t\tstartingBlockClientId,\n\t\t\t\tsourceRoot,\n\t\t\t\tdestRoot,\n\t\t\t\tdestinationBlockIndex\n\t\t\t);\n\t\t\tselectBlock( startingBlockClientId );\n\t\t\tsetBlockMovingClientId( null );\n\t\t}\n\t\t// Prevent the block from being moved into itself.\n\t\tif (\n\t\t\tstartingBlockClientId &&\n\t\t\tselectedBlockClientId === startingBlockClientId &&\n\t\t\tnavigateIn\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif ( navigateDown || navigateUp || navigateOut || navigateIn ) {\n\t\t\tif ( focusedBlockUid ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tselectBlock( focusedBlockUid );\n\t\t\t} else if ( isTab && selectedBlockClientId ) {\n\t\t\t\tlet nextTabbable;\n\n\t\t\t\tif ( navigateDown ) {\n\t\t\t\t\tnextTabbable = blockElement;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tnextTabbable = focus.tabbable.findNext( nextTabbable );\n\t\t\t\t\t} while (\n\t\t\t\t\t\tnextTabbable &&\n\t\t\t\t\t\tblockElement.contains( nextTabbable )\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( ! nextTabbable ) {\n\t\t\t\t\t\tnextTabbable =\n\t\t\t\t\t\t\tblockElement.ownerDocument.defaultView.frameElement;\n\t\t\t\t\t\tnextTabbable = focus.tabbable.findNext( nextTabbable );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnextTabbable = focus.tabbable.findPrevious( blockElement );\n\t\t\t\t}\n\n\t\t\t\tif ( nextTabbable ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnextTabbable.focus();\n\t\t\t\t\tclearSelectedBlock();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst classNames = clsx(\n\t\t'block-editor-block-list__block-selection-button',\n\t\t{\n\t\t\t'is-block-moving-mode': !! blockMovingMode,\n\t\t}\n\t);\n\n\tconst dragHandleLabel = __( 'Drag' );\n\tconst showBlockDraggable = canMove && editorMode === 'navigation';\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ showBlockDraggable && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ editorMode === 'navigation' && (\n\t\t\t\t\t\n\t\t\t\t\t\t setNavigationMode( false )\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\tshowTooltip={ false }\n\t\t\t\t\t\t\tclassName=\"block-selection-button_select-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default forwardRef( BlockSelectionButton );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockSelectionButton from './block-selection-button';\nimport { PrivateBlockPopover } from '../block-popover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\n\nfunction BlockToolbarBreadcrumb( { clientId, __unstableContentRef }, ref ) {\n\tconst {\n\t\tcapturingClientId,\n\t\tisInsertionPointVisible,\n\t\tlastClientId,\n\t\trootClientId,\n\t} = useSelectedBlockToolProps( clientId );\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default forwardRef( BlockToolbarBreadcrumb );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst trash = (\n\t\n\t\t\n\t\n);\n\nexport default trash;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst shuffle = (\n\t\n\t\t\n\t\n);\n\nexport default shuffle;\n","/**\n * WordPress dependencies\n */\nimport { shuffle } from '@wordpress/icons';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst EMPTY_ARRAY = [];\n\nfunction Container( props ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function Shuffle( { clientId, as = Container } ) {\n\tconst { categories, patterns, patternName } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\t__experimentalGetAllowedPatterns,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst _categories = attributes?.metadata?.categories || EMPTY_ARRAY;\n\t\t\tconst _patternName = attributes?.metadata?.patternName;\n\t\t\tconst rootBlock = getBlockRootClientId( clientId );\n\n\t\t\t// Calling `__experimentalGetAllowedPatterns` is expensive.\n\t\t\t// Checking if the block can be shuffled prevents unnecessary selector calls.\n\t\t\t// See: https://github.com/WordPress/gutenberg/pull/64736.\n\t\t\tconst _patterns =\n\t\t\t\t_categories.length > 0\n\t\t\t\t\t? __experimentalGetAllowedPatterns( rootBlock )\n\t\t\t\t\t: EMPTY_ARRAY;\n\t\t\treturn {\n\t\t\t\tcategories: _categories,\n\t\t\t\tpatterns: _patterns,\n\t\t\t\tpatternName: _patternName,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst sameCategoryPatternsWithSingleWrapper = useMemo( () => {\n\t\tif ( categories.length === 0 || ! patterns || patterns.length === 0 ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn patterns.filter( ( pattern ) => {\n\t\t\tconst isCorePattern =\n\t\t\t\tpattern.source === 'core' ||\n\t\t\t\t( pattern.source?.startsWith( 'pattern-directory' ) &&\n\t\t\t\t\tpattern.source !== 'pattern-directory/theme' );\n\t\t\treturn (\n\t\t\t\t// Check if the pattern has only one top level block,\n\t\t\t\t// otherwise we may shuffle to pattern that will not allow to continue shuffling.\n\t\t\t\tpattern.blocks.length === 1 &&\n\t\t\t\t// We exclude the core patterns and pattern directory patterns that are not theme patterns.\n\t\t\t\t! isCorePattern &&\n\t\t\t\tpattern.categories?.some( ( category ) => {\n\t\t\t\t\treturn categories.includes( category );\n\t\t\t\t} ) &&\n\t\t\t\t// Check if the pattern is not a synced pattern.\n\t\t\t\t( pattern.syncStatus === 'unsynced' || ! pattern.id )\n\t\t\t);\n\t\t} );\n\t}, [ categories, patterns ] );\n\n\tif ( sameCategoryPatternsWithSingleWrapper.length < 2 ) {\n\t\treturn null;\n\t}\n\n\tfunction getNextPattern() {\n\t\tconst numberOfPatterns = sameCategoryPatternsWithSingleWrapper.length;\n\t\tconst patternIndex = sameCategoryPatternsWithSingleWrapper.findIndex(\n\t\t\t( { name } ) => name === patternName\n\t\t);\n\t\tconst nextPatternIndex =\n\t\t\tpatternIndex + 1 < numberOfPatterns ? patternIndex + 1 : 0;\n\t\treturn sameCategoryPatternsWithSingleWrapper[ nextPatternIndex ];\n\t}\n\n\tconst ComponentToUse = as;\n\treturn (\n\t\t {\n\t\t\t\tconst nextPattern = getNextPattern();\n\t\t\t\tnextPattern.blocks[ 0 ].attributes = {\n\t\t\t\t\t...nextPattern.blocks[ 0 ].attributes,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...nextPattern.blocks[ 0 ].attributes.metadata,\n\t\t\t\t\t\tcategories,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treplaceBlocks( clientId, nextPattern.blocks );\n\t\t\t} }\n\t\t/>\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { dragHandle, trash, edit } from '@wordpress/icons';\nimport { Button, ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockDraggable from '../block-draggable';\nimport BlockMover from '../block-mover';\nimport Shuffle from '../block-toolbar/shuffle';\nimport NavigableToolbar from '../navigable-toolbar';\nimport { unlock } from '../../lock-unlock';\n\nexport default function ZoomOutToolbar( { clientId, __unstableContentRef } ) {\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlock,\n\t\t\t\thasBlockMovingClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\t\t\t\tgetSettings,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { __experimentalSetIsInserterOpened: setIsInserterOpened } =\n\t\t\t\tgetSettings();\n\n\t\t\tconst { getBlockType } = select( blocksStore );\n\t\t\tconst { name } = getBlock( clientId );\n\t\t\tconst blockType = getBlockType( name );\n\t\t\tconst isBlockTemplatePart =\n\t\t\t\tblockType?.name === 'core/template-part';\n\n\t\t\tlet isNextBlockTemplatePart = false;\n\t\t\tconst nextClientId = getNextBlockClientId();\n\t\t\tif ( nextClientId ) {\n\t\t\t\tconst { name: nextName } = getBlock( nextClientId );\n\t\t\t\tconst nextBlockType = getBlockType( nextName );\n\t\t\t\tisNextBlockTemplatePart =\n\t\t\t\t\tnextBlockType?.name === 'core/template-part';\n\t\t\t}\n\n\t\t\tlet isPrevBlockTemplatePart = false;\n\t\t\tconst prevClientId = getPreviousBlockClientId();\n\t\t\tif ( prevClientId ) {\n\t\t\t\tconst { name: prevName } = getBlock( prevClientId );\n\t\t\t\tconst prevBlockType = getBlockType( prevName );\n\t\t\t\tisPrevBlockTemplatePart =\n\t\t\t\t\tprevBlockType?.name === 'core/template-part';\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tblockMovingMode: hasBlockMovingClientId(),\n\t\t\t\tisBlockTemplatePart,\n\t\t\t\tisNextBlockTemplatePart,\n\t\t\t\tisPrevBlockTemplatePart,\n\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\tcanMove: canMoveBlock( clientId ),\n\t\t\t\tsetIsInserterOpened,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst {\n\t\tblockMovingMode,\n\t\tisBlockTemplatePart,\n\t\tisNextBlockTemplatePart,\n\t\tisPrevBlockTemplatePart,\n\t\tcanRemove,\n\t\tcanMove,\n\t\tsetIsInserterOpened,\n\t} = selected;\n\n\tconst { removeBlock, __unstableSetEditorMode, resetZoomLevel } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tconst classNames = clsx( 'zoom-out-toolbar', {\n\t\t'is-block-moving-mode': !! blockMovingMode,\n\t} );\n\n\tconst showBlockDraggable = canMove && ! isBlockTemplatePart;\n\n\treturn (\n\t\t\n\t\t\t{ showBlockDraggable && (\n\t\t\t\t\n\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ ! isBlockTemplatePart && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ canMove && canRemove && (\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ ! isBlockTemplatePart && (\n\t\t\t\t {\n\t\t\t\t\t\t// Setting may be undefined.\n\t\t\t\t\t\tif ( typeof setIsInserterOpened === 'function' ) {\n\t\t\t\t\t\t\tsetIsInserterOpened( false );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__unstableSetEditorMode( 'edit' );\n\t\t\t\t\t\tresetZoomLevel();\n\t\t\t\t\t\t__unstableContentRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ canRemove && ! isBlockTemplatePart && (\n\t\t\t\t {\n\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * Internal dependencies\n */\nimport BlockPopover from '../block-popover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\nimport ZoomOutToolbar from './zoom-out-toolbar';\n\nexport default function ZoomOutPopover( { clientId, __unstableContentRef } ) {\n\tconst { capturingClientId, isInsertionPointVisible, lastClientId } =\n\t\tuseSelectedBlockToolProps( clientId );\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId,\n\t} );\n\n\t// Override some of the popover props for the zoom-out toolbar.\n\tconst props = {\n\t\t...popoverProps,\n\t\tplacement: 'left-start',\n\t\tflip: false,\n\t\tshift: true,\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { Button } from '@wordpress/components';\nimport { plus } from '@wordpress/icons';\nimport { _x } from '@wordpress/i18n';\n\nfunction ZoomOutModeInserterButton( { isVisible, onClick } ) {\n\tconst [\n\t\tzoomOutModeInserterButtonHovered,\n\t\tsetZoomOutModeInserterButtonHovered,\n\t] = useState( false );\n\n\treturn (\n\t\t {\n\t\t\t\tsetZoomOutModeInserterButtonHovered( true );\n\t\t\t} }\n\t\t\tonMouseOut={ () => {\n\t\t\t\tsetZoomOutModeInserterButtonHovered( false );\n\t\t\t} }\n\t\t\tlabel={ _x(\n\t\t\t\t'Add pattern',\n\t\t\t\t'Generic label for pattern inserter button'\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default ZoomOutModeInserterButton;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverInbetween from '../block-popover/inbetween';\nimport ZoomOutModeInserterButton from './zoom-out-mode-inserter-button';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nfunction ZoomOutModeInserters() {\n\tconst [ isReady, setIsReady ] = useState( false );\n\tconst {\n\t\thasSelection,\n\t\tblockInsertionPoint,\n\t\tblockOrder,\n\t\tblockInsertionPointVisible,\n\t\tsetInserterIsOpened,\n\t\tsectionRootClientId,\n\t\tselectedBlockClientId,\n\t\thoveredBlockClientId,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSettings,\n\t\t\tgetBlockInsertionPoint,\n\t\t\tgetBlockOrder,\n\t\t\tgetSelectionStart,\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetHoveredBlockClientId,\n\t\t\tisBlockInsertionPointVisible,\n\t\t\tgetSectionRootClientId,\n\t\t} = unlock( select( blockEditorStore ) );\n\n\t\tconst root = getSectionRootClientId();\n\n\t\treturn {\n\t\t\thasSelection: !! getSelectionStart().clientId,\n\t\t\tblockInsertionPoint: getBlockInsertionPoint(),\n\t\t\tblockOrder: getBlockOrder( root ),\n\t\t\tblockInsertionPointVisible: isBlockInsertionPointVisible(),\n\t\t\tsectionRootClientId: root,\n\t\t\tsetInserterIsOpened:\n\t\t\t\tgetSettings().__experimentalSetIsInserterOpened,\n\t\t\tselectedBlockClientId: getSelectedBlockClientId(),\n\t\t\thoveredBlockClientId: getHoveredBlockClientId(),\n\t\t};\n\t}, [] );\n\n\tconst { showInsertionPoint } = useDispatch( blockEditorStore );\n\n\t// Defer the initial rendering to avoid the jumps due to the animation.\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetIsReady( true );\n\t\t}, 500 );\n\t\treturn () => {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t}, [] );\n\n\tif ( ! isReady ) {\n\t\treturn null;\n\t}\n\n\treturn [ undefined, ...blockOrder ].map( ( clientId, index ) => {\n\t\tconst shouldRenderInsertionPoint =\n\t\t\tblockInsertionPointVisible && blockInsertionPoint.index === index;\n\n\t\tconst previousClientId = clientId;\n\t\tconst nextClientId = blockOrder[ index ];\n\n\t\tconst isSelected =\n\t\t\thasSelection &&\n\t\t\t( selectedBlockClientId === previousClientId ||\n\t\t\t\tselectedBlockClientId === nextClientId );\n\n\t\tconst isHovered =\n\t\t\thoveredBlockClientId === previousClientId ||\n\t\t\thoveredBlockClientId === nextClientId;\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ ! shouldRenderInsertionPoint && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetInserterIsOpened( {\n\t\t\t\t\t\t\t\trootClientId: sectionRootClientId,\n\t\t\t\t\t\t\t\tinsertionIndex: index,\n\t\t\t\t\t\t\t\ttab: 'patterns',\n\t\t\t\t\t\t\t\tcategory: 'all',\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tshowInsertionPoint( sectionRootClientId, index, {\n\t\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t} );\n}\n\nexport default ZoomOutModeInserters;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { isTextField } from '@wordpress/dom';\nimport { Popover } from '@wordpress/components';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRef } from '@wordpress/element';\nimport { switchToBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport EmptyBlockInserter from './empty-block-inserter';\nimport {\n\tInsertionPointOpenRef,\n\tdefault as InsertionPoint,\n} from './insertion-point';\nimport BlockToolbarPopover from './block-toolbar-popover';\nimport BlockToolbarBreadcrumb from './block-toolbar-breadcrumb';\nimport ZoomOutPopover from './zoom-out-popover';\nimport { store as blockEditorStore } from '../../store';\nimport usePopoverScroll from '../block-popover/use-popover-scroll';\nimport ZoomOutModeInserters from './zoom-out-mode-inserters';\nimport { useShowBlockTools } from './use-show-block-tools';\nimport { unlock } from '../../lock-unlock';\nimport getEditorRegion from '../../utils/get-editor-region';\n\nfunction selector( select ) {\n\tconst {\n\t\tgetSelectedBlockClientId,\n\t\tgetFirstMultiSelectedBlockClientId,\n\t\tgetSettings,\n\t\t__unstableGetEditorMode,\n\t\tisTyping,\n\t} = select( blockEditorStore );\n\n\tconst clientId =\n\t\tgetSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();\n\n\tconst editorMode = __unstableGetEditorMode();\n\n\treturn {\n\t\tclientId,\n\t\thasFixedToolbar: getSettings().hasFixedToolbar,\n\t\tisTyping: isTyping(),\n\t\tisZoomOutMode: editorMode === 'zoom-out',\n\t};\n}\n\n/**\n * Renders block tools (the block toolbar, select/navigation mode toolbar, the\n * insertion point and a slot for the inline rich text toolbar). Must be wrapped\n * around the block content and editor styles wrapper or iframe.\n *\n * @param {Object} $0 Props.\n * @param {Object} $0.children The block content and style container.\n * @param {Object} $0.__unstableContentRef Ref holding the content scroll container.\n */\nexport default function BlockTools( {\n\tchildren,\n\t__unstableContentRef,\n\t...props\n} ) {\n\tconst { clientId, hasFixedToolbar, isTyping, isZoomOutMode } = useSelect(\n\t\tselector,\n\t\t[]\n\t);\n\tconst isMatch = useShortcutEventMatch();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\tgetBlockRootClientId,\n\t\tisGroupable,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\tconst {\n\t\tshowEmptyBlockSideInserter,\n\t\tshowBreadcrumb,\n\t\tshowBlockToolbarPopover,\n\t\tshowZoomOutToolbar,\n\t} = useShowBlockTools();\n\n\tconst {\n\t\tclearSelectedBlock,\n\t\tduplicateBlocks,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tselectBlock,\n\t\tmoveBlocksUp,\n\t\tmoveBlocksDown,\n\t\texpandBlock,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst blockSelectionButtonRef = useRef();\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isMatch( 'core/block-editor/move-up', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\t\tmoveBlocksUp( clientIds, rootClientId );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/move-down', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\t\tmoveBlocksDown( clientIds, rootClientId );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tduplicateBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/remove', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tremoveBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertAfterBlock( clientIds[ clientIds.length - 1 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertBeforeBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/unselect', event ) ) {\n\t\t\tif ( event.target.closest( '[role=toolbar]' ) ) {\n\t\t\t\t// This shouldn't be necessary, but we have a combination of a few things all combining to create a situation where:\n\t\t\t\t// - Because the block toolbar uses createPortal to populate the block toolbar fills, we can't rely on the React event bubbling to hit the onKeyDown listener for the block toolbar\n\t\t\t\t// - Since we can't use the React tree, we use the DOM tree which _should_ handle the event bubbling correctly from a `createPortal` element.\n\t\t\t\t// - This bubbles via the React tree, which hits this `unselect` escape keypress before the block toolbar DOM event listener has access to it.\n\t\t\t\t// An alternative would be to remove the addEventListener on the navigableToolbar and use this event to handle it directly right here. That feels hacky too though.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// If there is more than one block selected, select the first\n\t\t\t\t// block so that focus is directed back to the beginning of the selection.\n\t\t\t\t// In effect, to the user this feels like deselecting the multi-selection.\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t} else if (\n\t\t\t\tclientIds.length === 1 &&\n\t\t\t\tevent.target === blockSelectionButtonRef?.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tclearSelectedBlock();\n\t\t\t\tgetEditorRegion( __unstableContentRef.current )?.focus();\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\t// If focus is currently within a text field, such as a rich text block or other editable field,\n\t\t\t// skip collapsing the list view, and allow the keyboard shortcut to be handled by the text field.\n\t\t\t// This condition checks for both the active element and the active element within an iframed editor.\n\t\t\tif (\n\t\t\t\tisTextField( event.target ) ||\n\t\t\t\tisTextField(\n\t\t\t\t\tevent.target?.contentWindow?.document?.activeElement\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\texpandBlock( clientId );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 && isGroupable( clientIds ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t}\n\t\t}\n\t}\n\tconst blockToolbarRef = usePopoverScroll( __unstableContentRef );\n\tconst blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );\n\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/no-static-element-interactions\n\t\t
    \n\t\t\t\n\t\t\t\t{ ! isTyping && ! isZoomOutMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showEmptyBlockSideInserter && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showBlockToolbarPopover && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showBreadcrumb && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showZoomOutToolbar && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ /* Used for the inline rich text toolbar. Until this toolbar is combined into BlockToolbar, someone implementing their own BlockToolbar will also need to use this to see the image caption toolbar. */ }\n\t\t\t\t{ ! isZoomOutMode && ! hasFixedToolbar && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ children }\n\t\t\t\t{ /* Used for inline rich text popovers. */ }\n\t\t\t\t\n\t\t\t\t{ isZoomOutMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { isUnmodifiedDefaultBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Source of truth for which block tools are showing in the block editor.\n *\n * @return {Object} Object of which block tools will be shown.\n */\nexport function useShowBlockTools() {\n\treturn useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetFirstMultiSelectedBlockClientId,\n\t\t\tgetBlock,\n\t\t\tgetBlockMode,\n\t\t\tgetSettings,\n\t\t\thasMultiSelection,\n\t\t\t__unstableGetEditorMode,\n\t\t\tisTyping,\n\t\t} = select( blockEditorStore );\n\n\t\tconst clientId =\n\t\t\tgetSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();\n\n\t\tconst block = getBlock( clientId );\n\t\tconst editorMode = __unstableGetEditorMode();\n\t\tconst hasSelectedBlock = !! clientId && !! block;\n\t\tconst isEmptyDefaultBlock =\n\t\t\thasSelectedBlock &&\n\t\t\tisUnmodifiedDefaultBlock( block ) &&\n\t\t\tgetBlockMode( clientId ) !== 'html';\n\t\tconst _showEmptyBlockSideInserter =\n\t\t\tclientId &&\n\t\t\t! isTyping() &&\n\t\t\teditorMode === 'edit' &&\n\t\t\tisEmptyDefaultBlock;\n\t\tconst maybeShowBreadcrumb =\n\t\t\thasSelectedBlock &&\n\t\t\t! hasMultiSelection() &&\n\t\t\teditorMode === 'navigation';\n\n\t\tconst isZoomOut = editorMode === 'zoom-out';\n\t\tconst _showZoomOutToolbar =\n\t\t\tisZoomOut &&\n\t\t\tblock?.attributes?.align === 'full' &&\n\t\t\t! _showEmptyBlockSideInserter &&\n\t\t\t! maybeShowBreadcrumb;\n\t\tconst _showBlockToolbarPopover =\n\t\t\t! _showZoomOutToolbar &&\n\t\t\t! getSettings().hasFixedToolbar &&\n\t\t\t! _showEmptyBlockSideInserter &&\n\t\t\thasSelectedBlock &&\n\t\t\t! isEmptyDefaultBlock &&\n\t\t\t! maybeShowBreadcrumb;\n\n\t\treturn {\n\t\t\tshowEmptyBlockSideInserter: _showEmptyBlockSideInserter,\n\t\t\tshowBreadcrumb:\n\t\t\t\t! _showEmptyBlockSideInserter && maybeShowBreadcrumb,\n\t\t\tshowBlockToolbarPopover: _showBlockToolbarPopover,\n\t\t\tshowZoomOutToolbar: _showZoomOutToolbar,\n\t\t};\n\t}, [] );\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"commands\"];","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst moveTo = (\n\t\n\t\t\n\t\n);\n\nexport default moveTo;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst ungroup = (\n\t\n\t\t\n\t\n);\n\nexport default ungroup;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\thasBlockSupport,\n\tstore as blocksStore,\n\tswitchToBlockType,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCommandLoader } from '@wordpress/commands';\nimport {\n\tcopy,\n\ttrash as remove,\n\tplus as add,\n\tgroup,\n\tungroup,\n\tmoveTo as move,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nexport const useTransformCommands = () => {\n\tconst { replaceBlocks, multiSelect } = useDispatch( blockEditorStore );\n\tconst {\n\t\tblocks,\n\t\tclientIds,\n\t\tcanRemove,\n\t\tpossibleBlockTransformations,\n\t\tinvalidSelection,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockTransformItems,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tgetBlocksByClientId,\n\t\t\tcanRemoveBlocks,\n\t\t} = select( blockEditorStore );\n\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlocks = getBlocksByClientId( selectedBlockClientIds );\n\n\t\t// selectedBlocks can have `null`s when something tries to call `selectBlock` with an inexistent clientId.\n\t\t// These nulls will cause fatal errors down the line.\n\t\t// In order to prevent discrepancies between selectedBlockClientIds and selectedBlocks, we effectively treat the entire selection as invalid.\n\t\t// @see https://github.com/WordPress/gutenberg/pull/59410#issuecomment-2006304536\n\t\tif ( selectedBlocks.filter( ( block ) => ! block ).length > 0 ) {\n\t\t\treturn {\n\t\t\t\tinvalidSelection: true,\n\t\t\t};\n\t\t}\n\n\t\tconst rootClientId = getBlockRootClientId(\n\t\t\tselectedBlockClientIds[ 0 ]\n\t\t);\n\t\treturn {\n\t\t\tblocks: selectedBlocks,\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tpossibleBlockTransformations: getBlockTransformItems(\n\t\t\t\tselectedBlocks,\n\t\t\t\trootClientId\n\t\t\t),\n\t\t\tcanRemove: canRemoveBlocks( selectedBlockClientIds ),\n\t\t\tinvalidSelection: false,\n\t\t};\n\t}, [] );\n\n\tif ( invalidSelection ) {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t\tcommands: [],\n\t\t};\n\t}\n\tconst isTemplate = blocks.length === 1 && isTemplatePart( blocks[ 0 ] );\n\n\tfunction selectForMultipleBlocks( insertedBlocks ) {\n\t\tif ( insertedBlocks.length > 1 ) {\n\t\t\tmultiSelect(\n\t\t\t\tinsertedBlocks[ 0 ].clientId,\n\t\t\t\tinsertedBlocks[ insertedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t}\n\n\t// Simple block tranformation based on the `Block Transforms` API.\n\tfunction onBlockTransform( name ) {\n\t\tconst newBlocks = switchToBlockType( blocks, name );\n\t\treplaceBlocks( clientIds, newBlocks );\n\t\tselectForMultipleBlocks( newBlocks );\n\t}\n\n\t/**\n\t * The `isTemplate` check is a stopgap solution here.\n\t * Ideally, the Transforms API should handle this\n\t * by allowing to exclude blocks from wildcard transformations.\n\t */\n\tconst hasPossibleBlockTransformations =\n\t\t!! possibleBlockTransformations.length && canRemove && ! isTemplate;\n\n\tif (\n\t\t! clientIds ||\n\t\tclientIds.length < 1 ||\n\t\t! hasPossibleBlockTransformations\n\t) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst commands = possibleBlockTransformations.map( ( transformation ) => {\n\t\tconst { name, title, icon } = transformation;\n\t\treturn {\n\t\t\tname: 'core/block-editor/transform-to-' + name.replace( '/', '-' ),\n\t\t\t// translators: %s: block title/name.\n\t\t\tlabel: sprintf( __( 'Transform to %s' ), title ),\n\t\t\ticon: ,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tonBlockTransform( name );\n\t\t\t\tclose();\n\t\t\t},\n\t\t};\n\t} );\n\n\treturn { isLoading: false, commands };\n};\n\nconst useActionsCommands = () => {\n\tconst { clientIds } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientIds } = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t};\n\t}, [] );\n\n\tconst { getBlockRootClientId, canMoveBlocks, getBlockCount } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { setBlockMovingClientId, setNavigationMode, selectBlock } =\n\t\tuseDispatch( blockEditorStore );\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\n\tconst canMove =\n\t\tcanMoveBlocks( clientIds ) && getBlockCount( rootClientId ) !== 1;\n\n\tconst commands = [];\n\n\tif ( canMove ) {\n\t\tcommands.push( {\n\t\t\tname: 'move-to',\n\t\t\tlabel: __( 'Move to' ),\n\t\t\tcallback: () => {\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t\t},\n\t\t\ticon: move,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nconst useQuickActionsCommands = () => {\n\tconst { clientIds, isUngroupable, isGroupable } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable,\n\t\t\tisGroupable: _isGroupable,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable(),\n\t\t\tisGroupable: _isGroupable(),\n\t\t};\n\t}, [] );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\n\tconst blocks = getBlocksByClientId( clientIds );\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst onGroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\tconst newBlocks = switchToBlockType( blocks, groupingBlockName );\n\n\t\tif ( ! newBlocks ) {\n\t\t\treturn;\n\t\t}\n\t\treplaceBlocks( clientIds, newBlocks );\n\t};\n\tconst onUngroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst innerBlocks = blocks[ 0 ].innerBlocks;\n\n\t\tif ( ! innerBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\treplaceBlocks( clientIds, innerBlocks );\n\t};\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\tgetDefaultBlockName(),\n\t\trootClientId\n\t);\n\tconst canDuplicate = blocks.every( ( block ) => {\n\t\treturn (\n\t\t\t!! block &&\n\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t);\n\t} );\n\tconst canRemove = canRemoveBlocks( clientIds );\n\n\tconst commands = [];\n\n\tif ( canDuplicate ) {\n\t\tcommands.push( {\n\t\t\tname: 'duplicate',\n\t\t\tlabel: __( 'Duplicate' ),\n\t\t\tcallback: () => duplicateBlocks( clientIds, true ),\n\t\t\ticon: copy,\n\t\t} );\n\t}\n\n\tif ( canInsertDefaultBlock ) {\n\t\tcommands.push(\n\t\t\t{\n\t\t\t\tname: 'add-before',\n\t\t\t\tlabel: __( 'Add before' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ 0 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertBeforeBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-after',\n\t\t\t\tlabel: __( 'Add after' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ clientIds.length - 1 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t}\n\t\t);\n\t}\n\n\tif ( isGroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'Group',\n\t\t\tlabel: __( 'Group' ),\n\t\t\tcallback: onGroup,\n\t\t\ticon: group,\n\t\t} );\n\t}\n\n\tif ( isUngroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'ungroup',\n\t\t\tlabel: __( 'Ungroup' ),\n\t\t\tcallback: onUngroup,\n\t\t\ticon: ungroup,\n\t\t} );\n\t}\n\n\tif ( canRemove ) {\n\t\tcommands.push( {\n\t\t\tname: 'remove',\n\t\t\tlabel: __( 'Delete' ),\n\t\t\tcallback: () => removeBlocks( clientIds, true ),\n\t\t\ticon: remove,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nexport const useBlockCommands = () => {\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockTransforms',\n\t\thook: useTransformCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockActions',\n\t\thook: useActionsCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockQuickActions',\n\t\thook: useQuickActionsCommands,\n\t\tcontext: 'block-selection-edit',\n\t} );\n};\n","/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../block-list';\nimport BlockTools from '../block-tools';\nimport EditorStyles from '../editor-styles';\nimport Iframe from '../iframe';\nimport WritingFlow from '../writing-flow';\nimport { useMouseMoveTypingReset } from '../observe-typing';\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useBlockCommands } from '../use-block-commands';\n\n// EditorStyles is a memoized component, so avoid passing a new\n// object reference on each render.\nconst EDITOR_STYLE_TRANSFORM_OPTIONS = {\n\t// Don't transform selectors that already specify `.editor-styles-wrapper`.\n\tignoredSelectors: [ /\\.editor-styles-wrapper/gi ],\n};\n\nexport function ExperimentalBlockCanvas( {\n\tshouldIframe = true,\n\theight = '300px',\n\tchildren = ,\n\tstyles,\n\tcontentRef: contentRefProp,\n\tiframeProps,\n} ) {\n\tuseBlockCommands();\n\tconst resetTypingRef = useMouseMoveTypingReset();\n\tconst clearerRef = useBlockSelectionClearer();\n\tconst localRef = useRef();\n\tconst contentRef = useMergeRefs( [ contentRefProp, clearerRef, localRef ] );\n\n\tif ( ! shouldIframe ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ children }\n\t\t\t\n\t\t\n\t);\n}\n\n/**\n * BlockCanvas component is a component used to display the canvas of the block editor.\n * What we call the canvas is an iframe containing the block list that you can manipulate.\n * The component is also responsible of wiring up all the necessary hooks to enable\n * the keyboard navigation across blocks in the editor and inject content styles into the iframe.\n *\n * @example\n *\n * ```jsx\n * function MyBlockEditor() {\n * const [ blocks, updateBlocks ] = useState([]);\n * return (\n * \n * \n * \n * );\n * }\n * ```\n *\n * @param {Object} props Component props.\n * @param {string} props.height Canvas height, defaults to 300px.\n * @param {Array} props.styles Content styles to inject into the iframe.\n * @param {Element} props.children Content of the canvas, defaults to the BlockList component.\n * @return {Element} Block Breadcrumb.\n */\nfunction BlockCanvas( { children, height, styles } ) {\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default BlockCanvas;\n","/**\n * WordPress dependencies\n */\nimport {\n\tToolbarButton,\n\tDropdown,\n\tToolbarGroup,\n\tSVG,\n\tPath,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport deprecated from '@wordpress/deprecated';\n\nconst ColorSelectorSVGIcon = () => (\n\t\n\t\t\n\t\n);\n\n/**\n * Color Selector Icon component.\n *\n * @param {Object} props Component properties.\n * @param {Object} props.style Style object.\n * @param {string} props.className Class name for component.\n *\n * @return {*} React Icon component.\n */\nconst ColorSelectorIcon = ( { style, className } ) => {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n};\n\n/**\n * Renders the Colors Selector Toolbar with the icon button.\n *\n * @param {Object} props Component properties.\n * @param {Object} props.TextColor Text color component that wraps icon.\n * @param {Object} props.BackgroundColor Background color component that wraps icon.\n *\n * @return {*} React toggle button component.\n */\nconst renderToggleComponent =\n\t( { TextColor, BackgroundColor } ) =>\n\t( { onToggle, isOpen } ) => {\n\t\tconst openOnArrowDown = ( event ) => {\n\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonToggle();\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\n\t\t);\n\t};\n\nconst BlockColorsStyleSelector = ( { children, ...other } ) => {\n\tdeprecated( `wp.blockEditor.BlockColorsStyleSelector`, {\n\t\talternative: 'block supports API',\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t} );\n\n\treturn (\n\t\t children }\n\t\t/>\n\t);\n};\n\nexport default BlockColorsStyleSelector;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst listView = (\n\t\n\t\t\n\t\n);\n\nexport default listView;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\nexport const ListViewContext = createContext( {} );\n\nexport const useListViewContext = () => useContext( ListViewContext );\n","/**\n * WordPress dependencies\n */\nimport { useRef, useEffect } from '@wordpress/element';\n\n/**\n * A component specifically designed to be used as an element referenced\n * by ARIA attributes such as `aria-labelledby` or `aria-describedby`.\n *\n * @param {Object} props Props.\n * @param {import('react').ReactNode} props.children\n */\nexport default function AriaReferencedText( { children, ...props } ) {\n\tconst ref = useRef();\n\n\tuseEffect( () => {\n\t\tif ( ref.current ) {\n\t\t\t// This seems like a no-op, but it fixes a bug in Firefox where\n\t\t\t// it fails to recompute the text when only the text node changes.\n\t\t\t// @see https://github.com/WordPress/gutenberg/pull/51035\n\t\t\tref.current.textContent = ref.current.textContent;\n\t\t}\n\t}, [ children ] );\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef, useEffect } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport { useListViewContext } from './context';\nimport Inserter from '../inserter';\nimport AriaReferencedText from './aria-referenced-text';\n\nexport const Appender = forwardRef(\n\t( { nestingLevel, blockCount, clientId, ...props }, ref ) => {\n\t\tconst { insertedBlock, setInsertedBlock } = useListViewContext();\n\n\t\tconst instanceId = useInstanceId( Appender );\n\t\tconst hideInserter = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getTemplateLock, __unstableGetEditorMode } =\n\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\treturn (\n\t\t\t\t\t!! getTemplateLock( clientId ) ||\n\t\t\t\t\t__unstableGetEditorMode() === 'zoom-out'\n\t\t\t\t);\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\t\tconst blockTitle = useBlockDisplayTitle( {\n\t\t\tclientId,\n\t\t\tcontext: 'list-view',\n\t\t} );\n\n\t\tconst insertedBlockTitle = useBlockDisplayTitle( {\n\t\t\tclientId: insertedBlock?.clientId,\n\t\t\tcontext: 'list-view',\n\t\t} );\n\n\t\tuseEffect( () => {\n\t\t\tif ( ! insertedBlockTitle?.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tspeak(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: name of block being inserted (i.e. Paragraph, Image, Group etc)\n\t\t\t\t\t__( '%s block inserted' ),\n\t\t\t\t\tinsertedBlockTitle\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t}, [ insertedBlockTitle ] );\n\n\t\tif ( hideInserter ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst descriptionId = `list-view-appender__${ instanceId }`;\n\t\tconst description = sprintf(\n\t\t\t/* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */\n\t\t\t__( 'Append to %1$s block at position %2$d, Level %3$d' ),\n\t\t\tblockTitle,\n\t\t\tblockCount + 1,\n\t\t\tnestingLevel\n\t\t);\n\n\t\treturn (\n\t\t\t
    \n\t\t\t\t {\n\t\t\t\t\t\tif ( maybeInsertedBlock?.clientId ) {\n\t\t\t\t\t\t\tsetInsertedBlock( maybeInsertedBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\t{ description }\n\t\t\t\t\n\t\t\t
    \n\t\t);\n\t}\n);\n","/**\n * External dependencies\n */\nimport { animated } from '@react-spring/web';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalTreeGridRow as TreeGridRow } from '@wordpress/components';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../use-moving-animation';\n\nconst AnimatedTreeGridRow = animated( TreeGridRow );\n\nconst ListViewLeaf = forwardRef(\n\t(\n\t\t{\n\t\t\tisDragged,\n\t\t\tisSelected,\n\t\t\tposition,\n\t\t\tlevel,\n\t\t\trowCount,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tpath,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst animationRef = useMovingAnimation( {\n\t\t\tclientId: props[ 'data-block' ],\n\t\t\tenableAnimation: true,\n\t\t\ttriggerAnimationOnChange: path,\n\t\t} );\n\n\t\tconst mergedRef = useMergeRefs( [ ref, animationRef ] );\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t}\n);\n\nexport default ListViewLeaf;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst pinSmall = (\n\t\n\t\t\n\t\n);\n\nexport default pinSmall;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst lockSmall = (\n\t\n\t\t\n\t\n);\n\nexport default lockSmall;\n","/**\n * WordPress dependencies\n */\nimport { chevronRightSmall, chevronLeftSmall, Icon } from '@wordpress/icons';\nimport { isRTL } from '@wordpress/i18n';\n\nexport default function ListViewExpander( { onClick } ) {\n\treturn (\n\t\t// Keyboard events are handled by TreeGrid see: components/src/tree-grid/index.js\n\t\t//\n\t\t// The expander component is implemented as a pseudo element in the w3 example\n\t\t// https://www.w3.org/TR/wai-aria-practices/examples/treegrid/treegrid-1.html\n\t\t//\n\t\t// We've mimicked this by adding an icon with aria-hidden set to true to hide this from the accessibility tree.\n\t\t// For the current tree grid implementation, please do not try to make this a button.\n\t\t//\n\t\t// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n\t\t onClick( event, { forceToggle: true } ) }\n\t\t\taria-hidden=\"true\"\n\t\t\tdata-testid=\"list-view-expander\"\n\t\t>\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n// Maximum number of images to display in a list view row.\nconst MAX_IMAGES = 3;\n\nfunction getImage( block ) {\n\tif ( block.name !== 'core/image' ) {\n\t\treturn;\n\t}\n\n\tif ( block.attributes?.url ) {\n\t\treturn {\n\t\t\turl: block.attributes.url,\n\t\t\talt: block.attributes.alt,\n\t\t\tclientId: block.clientId,\n\t\t};\n\t}\n}\n\nfunction getImagesFromGallery( block ) {\n\tif ( block.name !== 'core/gallery' || ! block.innerBlocks ) {\n\t\treturn [];\n\t}\n\n\tconst images = [];\n\n\tfor ( const innerBlock of block.innerBlocks ) {\n\t\tconst img = getImage( innerBlock );\n\t\tif ( img ) {\n\t\t\timages.push( img );\n\t\t}\n\t\tif ( images.length >= MAX_IMAGES ) {\n\t\t\treturn images;\n\t\t}\n\t}\n\n\treturn images;\n}\n\nfunction getImagesFromBlock( block, isExpanded ) {\n\tconst img = getImage( block );\n\tif ( img ) {\n\t\treturn [ img ];\n\t}\n\treturn isExpanded ? [] : getImagesFromGallery( block );\n}\n\n/**\n * Get a block's preview images for display within a list view row.\n *\n * TODO: Currently only supports images from the core/image and core/gallery\n * blocks. This should be expanded to support other blocks that have images,\n * potentially via an API that blocks can opt into / provide their own logic.\n *\n * @param {Object} props Hook properties.\n * @param {string} props.clientId The block's clientId.\n * @param {boolean} props.isExpanded Whether or not the block is expanded in the list view.\n * @return {Array} Images.\n */\nexport default function useListViewImages( { clientId, isExpanded } ) {\n\tconst { block } = useSelect(\n\t\t( select ) => {\n\t\t\tconst _block = select( blockEditorStore ).getBlock( clientId );\n\t\t\treturn { block: _block };\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst images = useMemo( () => {\n\t\treturn getImagesFromBlock( block, isExpanded );\n\t}, [ block, isExpanded ] );\n\n\treturn images;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { forwardRef } from '@wordpress/element';\nimport { Icon, lockSmall as lock, pinSmall } from '@wordpress/icons';\nimport { SPACE, ENTER } from '@wordpress/keycodes';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport ListViewExpander from './expander';\nimport { useBlockLock } from '../block-lock';\nimport useListViewImages from './use-list-view-images';\nimport { store as blockEditorStore } from '../../store';\n\nfunction ListViewBlockSelectButton(\n\t{\n\t\tclassName,\n\t\tblock: { clientId },\n\t\tonClick,\n\t\tonContextMenu,\n\t\tonMouseDown,\n\t\tonToggleExpanded,\n\t\ttabIndex,\n\t\tonFocus,\n\t\tonDragStart,\n\t\tonDragEnd,\n\t\tdraggable,\n\t\tisExpanded,\n\t\tariaDescribedBy,\n\t},\n\tref\n) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId,\n\t\tcontext: 'list-view',\n\t} );\n\tconst { isLocked } = useBlockLock( clientId );\n\tconst { isContentOnly } = useSelect(\n\t\t( select ) => ( {\n\t\t\tisContentOnly:\n\t\t\t\tselect( blockEditorStore ).getBlockEditingMode( clientId ) ===\n\t\t\t\t'contentOnly',\n\t\t} ),\n\t\t[ clientId ]\n\t);\n\tconst shouldShowLockIcon = isLocked && ! isContentOnly;\n\tconst isSticky = blockInformation?.positionType === 'sticky';\n\tconst images = useListViewImages( { clientId, isExpanded } );\n\n\t// The `href` attribute triggers the browser's native HTML drag operations.\n\t// When the link is dragged, the element's outerHTML is set in DataTransfer object as text/html.\n\t// We need to clear any HTML drag data to prevent `pasteHandler` from firing\n\t// inside the `useOnBlockDrop` hook.\n\tconst onDragStartHandler = ( event ) => {\n\t\tevent.dataTransfer.clearData();\n\t\tonDragStart?.( event );\n\t};\n\n\t/**\n\t * @param {KeyboardEvent} event\n\t */\n\tfunction onKeyDown( event ) {\n\t\tif ( event.keyCode === ENTER || event.keyCode === SPACE ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ blockTitle }\n\t\t\t\t\n\t\t\t\t{ blockInformation?.anchor && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ blockInformation.anchor }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ isSticky && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ images.length ? (\n\t\t\t\t\t\n\t\t\t\t\t\t{ images.map( ( image, index ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t\n\t\t\t\t) : null }\n\t\t\t\t{ shouldShowLockIcon && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\nexport default forwardRef( ListViewBlockSelectButton );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlockSelectButton from './block-select-button';\nimport BlockDraggable from '../block-draggable';\nimport { store as blockEditorStore } from '../../store';\nimport { useListViewContext } from './context';\n\nconst ListViewBlockContents = forwardRef(\n\t(\n\t\t{\n\t\t\tonClick,\n\t\t\tonToggleExpanded,\n\t\t\tblock,\n\t\t\tisSelected,\n\t\t\tposition,\n\t\t\tsiblingBlockCount,\n\t\t\tlevel,\n\t\t\tisExpanded,\n\t\t\tselectedClientIds,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst { clientId } = block;\n\n\t\tconst { blockMovingClientId, selectedBlockInBlockEditor } = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { hasBlockMovingClientId, getSelectedBlockClientId } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\treturn {\n\t\t\t\t\tblockMovingClientId: hasBlockMovingClientId(),\n\t\t\t\t\tselectedBlockInBlockEditor: getSelectedBlockClientId(),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[]\n\t\t);\n\n\t\tconst { AdditionalBlockContent, insertedBlock, setInsertedBlock } =\n\t\t\tuseListViewContext();\n\n\t\tconst isBlockMoveTarget =\n\t\t\tblockMovingClientId && selectedBlockInBlockEditor === clientId;\n\n\t\tconst className = clsx( 'block-editor-list-view-block-contents', {\n\t\t\t'is-dropping-before': isBlockMoveTarget,\n\t\t} );\n\n\t\t// Only include all selected blocks if the currently clicked on block\n\t\t// is one of the selected blocks. This ensures that if a user attempts\n\t\t// to drag a block that isn't part of the selection, they're still able\n\t\t// to drag it and rearrange its position.\n\t\tconst draggableClientIds = selectedClientIds.includes( clientId )\n\t\t\t? selectedClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ AdditionalBlockContent && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n);\n\nexport default ListViewBlockContents;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { focus } from '@wordpress/dom';\n\nexport const getBlockPositionDescription = ( position, siblingCount, level ) =>\n\tsprintf(\n\t\t/* translators: 1: The numerical position of the block. 2: The total number of blocks. 3. The level of nesting for the block. */\n\t\t__( 'Block %1$d of %2$d, Level %3$d.' ),\n\t\tposition,\n\t\tsiblingCount,\n\t\tlevel\n\t);\n\nexport const getBlockPropertiesDescription = ( blockInformation, isLocked ) =>\n\t[\n\t\tblockInformation?.positionLabel\n\t\t\t? `${ sprintf(\n\t\t\t\t\t// translators: %s: Position of selected block, e.g. \"Sticky\" or \"Fixed\".\n\t\t\t\t\t__( 'Position: %s' ),\n\t\t\t\t\tblockInformation.positionLabel\n\t\t\t ) }.`\n\t\t\t: undefined,\n\t\tisLocked ? __( 'This block is locked.' ) : undefined,\n\t]\n\t\t.filter( Boolean )\n\t\t.join( ' ' );\n\n/**\n * Returns true if the client ID occurs within the block selection or multi-selection,\n * or false otherwise.\n *\n * @param {string} clientId Block client ID.\n * @param {string|string[]} selectedBlockClientIds Selected block client ID, or an array of multi-selected blocks client IDs.\n *\n * @return {boolean} Whether the block is in multi-selection set.\n */\nexport const isClientIdSelected = ( clientId, selectedBlockClientIds ) =>\n\tArray.isArray( selectedBlockClientIds ) && selectedBlockClientIds.length\n\t\t? selectedBlockClientIds.indexOf( clientId ) !== -1\n\t\t: selectedBlockClientIds === clientId;\n\n/**\n * From a start and end clientId of potentially different nesting levels,\n * return the nearest-depth ids that have a common level of depth in the\n * nesting hierarchy. For multiple block selection, this ensure that the\n * selection is always at the same nesting level, and not split across\n * separate levels.\n *\n * @param {string} startId The first id of a selection.\n * @param {string} endId The end id of a selection, usually one that has been clicked on.\n * @param {string[]} startParents An array of ancestor ids for the start id, in descending order.\n * @param {string[]} endParents An array of ancestor ids for the end id, in descending order.\n * @return {Object} An object containing the start and end ids.\n */\nexport function getCommonDepthClientIds(\n\tstartId,\n\tendId,\n\tstartParents,\n\tendParents\n) {\n\tconst startPath = [ ...startParents, startId ];\n\tconst endPath = [ ...endParents, endId ];\n\tconst depth = Math.min( startPath.length, endPath.length ) - 1;\n\tconst start = startPath[ depth ];\n\tconst end = endPath[ depth ];\n\n\treturn {\n\t\tstart,\n\t\tend,\n\t};\n}\n\n/**\n * Shift focus to the list view item associated with a particular clientId.\n *\n * @typedef {import('@wordpress/element').RefObject} RefObject\n *\n * @param {string} focusClientId The client ID of the block to focus.\n * @param {?HTMLElement} treeGridElement The container element to search within.\n */\nexport function focusListItem( focusClientId, treeGridElement ) {\n\tconst getFocusElement = () => {\n\t\tconst row = treeGridElement?.querySelector(\n\t\t\t`[role=row][data-block=\"${ focusClientId }\"]`\n\t\t);\n\t\tif ( ! row ) {\n\t\t\treturn null;\n\t\t}\n\t\t// Focus the first focusable in the row, which is the ListViewBlockSelectButton.\n\t\treturn focus.focusable.find( row )[ 0 ];\n\t};\n\n\tlet focusElement = getFocusElement();\n\tif ( focusElement ) {\n\t\tfocusElement.focus();\n\t} else {\n\t\t// The element hasn't been painted yet. Defer focusing on the next frame.\n\t\t// This could happen when all blocks have been deleted and the default block\n\t\t// hasn't been added to the editor yet.\n\t\twindow.requestAnimationFrame( () => {\n\t\t\tfocusElement = getFocusElement();\n\n\t\t\t// Ignore if the element still doesn't exist.\n\t\t\tif ( focusElement ) {\n\t\t\t\tfocusElement.focus();\n\t\t\t}\n\t\t} );\n\t}\n}\n\n/**\n * Get values for the block that flag whether the block should be displaced up or down,\n * whether the block is being nested, and whether the block appears after the dragged\n * blocks. These values are used to determine the class names to apply to the block.\n * The list view rows are displaced visually via CSS rules. Displacement rules:\n * - `normal`: no displacement — used to apply a translateY of `0` so that the block\n * appears in its original position, and moves to that position smoothly when dragging\n * outside of the list view area.\n * - `up`: the block should be displaced up, creating room beneath the block for the drop indicator.\n * - `down`: the block should be displaced down, creating room above the block for the drop indicator.\n *\n * @param {Object} props\n * @param {Object} props.blockIndexes The indexes of all the blocks in the list view, keyed by clientId.\n * @param {number|null|undefined} props.blockDropTargetIndex The index of the block that the user is dropping to.\n * @param {?string} props.blockDropPosition The position relative to the block that the user is dropping to.\n * @param {string} props.clientId The client id for the current block.\n * @param {?number} props.firstDraggedBlockIndex The index of the first dragged block.\n * @param {?boolean} props.isDragged Whether the current block is being dragged. Dragged blocks skip displacement.\n * @return {Object} An object containing the `displacement`, `isAfterDraggedBlocks` and `isNesting` values.\n */\nexport function getDragDisplacementValues( {\n\tblockIndexes,\n\tblockDropTargetIndex,\n\tblockDropPosition,\n\tclientId,\n\tfirstDraggedBlockIndex,\n\tisDragged,\n} ) {\n\tlet displacement;\n\tlet isNesting;\n\tlet isAfterDraggedBlocks;\n\n\tif ( ! isDragged ) {\n\t\tisNesting = false;\n\t\tconst thisBlockIndex = blockIndexes[ clientId ];\n\t\tisAfterDraggedBlocks = thisBlockIndex > firstDraggedBlockIndex;\n\n\t\t// Determine where to displace the position of the current block, relative\n\t\t// to the blocks being dragged (in their original position) and the drop target\n\t\t// (the position where a user is currently dragging the blocks to).\n\t\tif (\n\t\t\tblockDropTargetIndex !== undefined &&\n\t\t\tblockDropTargetIndex !== null &&\n\t\t\tfirstDraggedBlockIndex !== undefined\n\t\t) {\n\t\t\t// If the block is being dragged and there is a valid drop target,\n\t\t\t// determine if the block being rendered should be displaced up or down.\n\n\t\t\tif ( thisBlockIndex !== undefined ) {\n\t\t\t\tif (\n\t\t\t\t\tthisBlockIndex >= firstDraggedBlockIndex &&\n\t\t\t\t\tthisBlockIndex < blockDropTargetIndex\n\t\t\t\t) {\n\t\t\t\t\t// If the current block appears after the set of dragged blocks\n\t\t\t\t\t// (in their original position), but is before the drop target,\n\t\t\t\t\t// then the current block should be displaced up.\n\t\t\t\t\tdisplacement = 'up';\n\t\t\t\t} else if (\n\t\t\t\t\tthisBlockIndex < firstDraggedBlockIndex &&\n\t\t\t\t\tthisBlockIndex >= blockDropTargetIndex\n\t\t\t\t) {\n\t\t\t\t\t// If the current block appears before the set of dragged blocks\n\t\t\t\t\t// (in their original position), but is after the drop target,\n\t\t\t\t\t// then the current block should be displaced down.\n\t\t\t\t\tdisplacement = 'down';\n\t\t\t\t} else {\n\t\t\t\t\tdisplacement = 'normal';\n\t\t\t\t}\n\t\t\t\tisNesting =\n\t\t\t\t\ttypeof blockDropTargetIndex === 'number' &&\n\t\t\t\t\tblockDropTargetIndex - 1 === thisBlockIndex &&\n\t\t\t\t\tblockDropPosition === 'inside';\n\t\t\t}\n\t\t} else if (\n\t\t\tblockDropTargetIndex === null &&\n\t\t\tfirstDraggedBlockIndex !== undefined\n\t\t) {\n\t\t\t// A `null` value for `blockDropTargetIndex` indicates that the\n\t\t\t// drop target is outside of the valid areas within the list view.\n\t\t\t// In this case, the drag is still active, but as there is no\n\t\t\t// valid drop target, we should remove the gap indicating where\n\t\t\t// the block would be inserted.\n\t\t\tif (\n\t\t\t\tthisBlockIndex !== undefined &&\n\t\t\t\tthisBlockIndex >= firstDraggedBlockIndex\n\t\t\t) {\n\t\t\t\tdisplacement = 'up';\n\t\t\t} else {\n\t\t\t\tdisplacement = 'normal';\n\t\t\t}\n\t\t} else if (\n\t\t\tblockDropTargetIndex !== undefined &&\n\t\t\tblockDropTargetIndex !== null &&\n\t\t\tfirstDraggedBlockIndex === undefined\n\t\t) {\n\t\t\t// If the blockdrop target is defined, but there are no dragged blocks,\n\t\t\t// then the block should be displaced relative to the drop target.\n\t\t\tif ( thisBlockIndex !== undefined ) {\n\t\t\t\tif ( thisBlockIndex < blockDropTargetIndex ) {\n\t\t\t\t\tdisplacement = 'normal';\n\t\t\t\t} else {\n\t\t\t\t\tdisplacement = 'down';\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( blockDropTargetIndex === null ) {\n\t\t\tdisplacement = 'normal';\n\t\t}\n\t}\n\n\treturn {\n\t\tdisplacement,\n\t\tisNesting,\n\t\tisAfterDraggedBlocks,\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport useListViewScrollIntoView from './use-list-view-scroll-into-view';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport { useListViewContext } from './context';\nimport {\n\tgetBlockPositionDescription,\n\tgetBlockPropertiesDescription,\n\tfocusListItem,\n} from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useBlockLock } from '../block-lock';\nimport AriaReferencedText from './aria-referenced-text';\nimport { unlock } from '../../lock-unlock';\n\nfunction ListViewBlock( {\n\tblock: { clientId },\n\tdisplacement,\n\tisAfterDraggedBlocks,\n\tisDragged,\n\tisNesting,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n\tisSyncedBranch,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst rowRef = useRef( null );\n\tconst settingsRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ settingsAnchorRect, setSettingsAnchorRect ] = useState();\n\n\tconst { isLocked, canEdit, canMove } = useBlockLock( clientId );\n\n\tconst isFirstSelectedBlock =\n\t\tisSelected && selectedClientIds[ 0 ] === clientId;\n\tconst isLastSelectedBlock =\n\t\tisSelected &&\n\t\tselectedClientIds[ selectedClientIds.length - 1 ] === clientId;\n\n\tconst {\n\t\ttoggleBlockHighlight,\n\t\tduplicateBlocks,\n\t\tmultiSelect,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tsetOpenedBlockSettingsMenu,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetSelectedBlockClientIds,\n\t\tgetPreviousBlockClientId,\n\t\tgetBlockRootClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockParents,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t\tisGroupable,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\tconst { block, blockName, allowRightClickOverrides } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockName, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( clientId ),\n\t\t\t\tblockName: getBlockName( clientId ),\n\t\t\t\tallowRightClickOverrides:\n\t\t\t\t\tgetSettings().allowRightClickOverrides,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst showBlockActions =\n\t\t// When a block hides its toolbar it also hides the block settings menu,\n\t\t// since that menu is part of the toolbar in the editor canvas.\n\t\t// List View respects this by also hiding the block settings menu.\n\t\thasBlockSupport( blockName, '__experimentalToolbar', true );\n\tconst instanceId = useInstanceId( ListViewBlock );\n\tconst descriptionId = `list-view-block-select-button__description-${ instanceId }`;\n\n\tconst {\n\t\texpand,\n\t\tcollapse,\n\t\tcollapseAll,\n\t\tBlockSettingsMenu,\n\t\tlistViewInstanceId,\n\t\texpandedState,\n\t\tsetInsertedBlock,\n\t\ttreeGridElementRef,\n\t\trootClientId,\n\t} = useListViewContext();\n\tconst isMatch = useShortcutEventMatch();\n\n\t// Determine which blocks to update:\n\t// If the current (focused) block is part of the block selection, use the whole selection.\n\t// If the focused block is not part of the block selection, only update the focused block.\n\tfunction getBlocksToUpdate() {\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst isUpdatingSelectedBlocks =\n\t\t\tselectedBlockClientIds.includes( clientId );\n\t\tconst firstBlockClientId = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds[ 0 ]\n\t\t\t: clientId;\n\t\tconst firstBlockRootClientId =\n\t\t\tgetBlockRootClientId( firstBlockClientId );\n\n\t\tconst blocksToUpdate = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn {\n\t\t\tblocksToUpdate,\n\t\t\tfirstBlockClientId,\n\t\t\tfirstBlockRootClientId,\n\t\t\tselectedBlockClientIds,\n\t\t};\n\t}\n\n\t/**\n\t * @param {KeyboardEvent} event\n\t */\n\tasync function onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not handle events if it comes from modals;\n\t\t// retain the default behavior for these keys.\n\t\tif ( event.target.closest( '[role=dialog]' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isDeleteKey = [ BACKSPACE, DELETE ].includes( event.keyCode );\n\n\t\t// If multiple blocks are selected, deselect all blocks when the user\n\t\t// presses the escape key.\n\t\tif (\n\t\t\tisMatch( 'core/block-editor/unselect', event ) &&\n\t\t\tselectedClientIds.length > 0\n\t\t) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tselectBlock( event, undefined );\n\t\t} else if (\n\t\t\tisDeleteKey ||\n\t\t\tisMatch( 'core/block-editor/remove', event )\n\t\t) {\n\t\t\tconst {\n\t\t\t\tblocksToUpdate: blocksToDelete,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\tselectedBlockClientIds,\n\t\t\t} = getBlocksToUpdate();\n\n\t\t\t// Don't update the selection if the blocks cannot be deleted.\n\t\t\tif ( ! canRemoveBlocks( blocksToDelete ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet blockToFocus =\n\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ) ??\n\t\t\t\t// If the previous block is not found (when the first block is deleted),\n\t\t\t\t// fallback to focus the parent block.\n\t\t\t\tfirstBlockRootClientId;\n\n\t\t\tremoveBlocks( blocksToDelete, false );\n\n\t\t\t// Update the selection if the original selection has been removed.\n\t\t\tconst shouldUpdateSelection =\n\t\t\t\tselectedBlockClientIds.length > 0 &&\n\t\t\t\tgetSelectedBlockClientIds().length === 0;\n\n\t\t\t// If there's no previous block nor parent block, focus the first block.\n\t\t\tif ( ! blockToFocus ) {\n\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t}\n\n\t\t\tupdateFocusAndSelection( blockToFocus, shouldUpdateSelection );\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate, firstBlockRootClientId } =\n\t\t\t\tgetBlocksToUpdate();\n\n\t\t\tconst canDuplicate = getBlocksByClientId( blocksToUpdate ).every(\n\t\t\t\t( blockToUpdate ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! blockToUpdate &&\n\t\t\t\t\t\thasBlockSupport(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\t'multiple',\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\tfirstBlockRootClientId\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( canDuplicate ) {\n\t\t\t\tconst updatedBlocks = await duplicateBlocks(\n\t\t\t\t\tblocksToUpdate,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tif ( updatedBlocks?.length ) {\n\t\t\t\t\t// If blocks have been duplicated, focus the first duplicated block.\n\t\t\t\t\tupdateFocusAndSelection( updatedBlocks[ 0 ], false );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertBeforeBlock( blocksToUpdate[ 0 ] );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertAfterBlock( blocksToUpdate.at( -1 ) );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { firstBlockRootClientId, selectedBlockClientIds } =\n\t\t\t\tgetBlocksToUpdate();\n\t\t\tconst blockClientIds = getBlockOrder( firstBlockRootClientId );\n\t\t\tif ( ! blockClientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a level.\n\t\t\t// This is a similar implementation to that used by `useSelectAll`.\n\t\t\t// `isShallowEqual` is used for the list view instead of a length check,\n\t\t\t// as the array of siblings of the currently focused block may be a different\n\t\t\t// set of blocks from the current block selection if the user is focused\n\t\t\t// on a different part of the list view from the block selection.\n\t\t\tif ( isShallowEqual( selectedBlockClientIds, blockClientIds ) ) {\n\t\t\t\t// Only select up a level if the first block is not the root block.\n\t\t\t\t// This ensures that the block selection can't break out of the root block\n\t\t\t\t// used by the list view, if the list view is only showing a partial hierarchy.\n\t\t\t\tif (\n\t\t\t\t\tfirstBlockRootClientId &&\n\t\t\t\t\tfirstBlockRootClientId !== rootClientId\n\t\t\t\t) {\n\t\t\t\t\tupdateFocusAndSelection( firstBlockRootClientId, true );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Select all while passing `null` to skip focusing to the editor canvas,\n\t\t\t// and retain focus within the list view.\n\t\t\tmultiSelect(\n\t\t\t\tblockClientIds[ 0 ],\n\t\t\t\tblockClientIds[ blockClientIds.length - 1 ],\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\tevent.preventDefault();\n\t\t\tconst { firstBlockClientId } = getBlocksToUpdate();\n\t\t\tconst blockParents = getBlockParents( firstBlockClientId, false );\n\t\t\t// Collapse all blocks.\n\t\t\tcollapseAll();\n\t\t\t// Expand all parents of the current block.\n\t\t\texpand( blockParents );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tif ( blocksToUpdate.length > 1 && isGroupable( blocksToUpdate ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( blocksToUpdate );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( blocksToUpdate, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\t\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t\t}\n\t\t}\n\t}\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\ttoggleBlockHighlight( clientId, true );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\ttoggleBlockHighlight( clientId, false );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst updateFocusAndSelection = useCallback(\n\t\t( focusClientId, shouldSelectBlock ) => {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, treeGridElementRef?.current );\n\t\t},\n\t\t[ selectBlock, treeGridElementRef ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\t// Allow right-clicking an item in the List View to open up the block settings dropdown.\n\tconst onContextMenu = useCallback(\n\t\t( event ) => {\n\t\t\tif ( showBlockActions && allowRightClickOverrides ) {\n\t\t\t\tsettingsRef.current?.click();\n\t\t\t\t// Ensure the position of the settings dropdown is at the cursor.\n\t\t\t\tsetSettingsAnchorRect(\n\t\t\t\t\tnew window.DOMRect( event.clientX, event.clientY, 0, 0 )\n\t\t\t\t);\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides, settingsRef, showBlockActions ]\n\t);\n\n\tconst onMouseDown = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent right-click from focusing the block,\n\t\t\t// because focus will be handled when opening the block settings dropdown.\n\t\t\tif ( allowRightClickOverrides && event.button === 2 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides ]\n\t);\n\n\tconst settingsPopoverAnchor = useMemo( () => {\n\t\tconst { ownerDocument } = rowRef?.current || {};\n\n\t\t// If no custom position is set, the settings dropdown will be anchored to the\n\t\t// DropdownMenu toggle button.\n\t\tif ( ! settingsAnchorRect || ! ownerDocument ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Position the settings dropdown at the cursor when right-clicking a block.\n\t\treturn {\n\t\t\townerDocument,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn settingsAnchorRect;\n\t\t\t},\n\t\t};\n\t}, [ settingsAnchorRect ] );\n\n\tconst clearSettingsAnchorRect = useCallback( () => {\n\t\t// Clear the custom position for the settings dropdown so that it is restored back\n\t\t// to being anchored to the DropdownMenu toggle button.\n\t\tsetSettingsAnchorRect( undefined );\n\t}, [ setSettingsAnchorRect ] );\n\n\t// Pass in a ref to the row, so that it can be scrolled\n\t// into view when selected. For long lists, the placeholder for the\n\t// selected block is also observed, within ListViewLeafPlaceholder.\n\tuseListViewScrollIntoView( {\n\t\tisSelected,\n\t\trowItemRef: rowRef,\n\t\tselectedClientIds,\n\t} );\n\n\t// When switching between rendering modes (such as template preview and content only),\n\t// it is possible for a block to temporarily be unavailable. In this case, we should not\n\t// render the leaf, to avoid errors further down the tree.\n\tif ( ! block ) {\n\t\treturn null;\n\t}\n\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\tconst blockPropertiesDescription = getBlockPropertiesDescription(\n\t\tblockInformation,\n\t\tisLocked\n\t);\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = clsx(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = clsx(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isFirstSelectedBlock }\n\t);\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( ! showBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = clsx( {\n\t\t'is-selected': isSelected,\n\t\t'is-first-selected': isFirstSelectedBlock,\n\t\t'is-last-selected': isLastSelectedBlock,\n\t\t'is-branch-selected': isBranchSelected,\n\t\t'is-synced-branch': isSyncedBranch,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': ! showBlockActions,\n\t\t'is-synced': blockInformation?.isSynced,\n\t\t'is-draggable': canMove,\n\t\t'is-displacement-normal': displacement === 'normal',\n\t\t'is-displacement-up': displacement === 'up',\n\t\t'is-displacement-down': displacement === 'down',\n\t\t'is-after-dragged-blocks': isAfterDraggedBlocks,\n\t\t'is-nesting': isNesting,\n\t} );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\t// Detect if there is a block in the canvas currently being edited and multi-selection is not happening.\n\tconst currentlyEditingBlockInCanvas =\n\t\tisSelected && selectedClientIds.length === 1;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ [\n\t\t\t\t\t\t\t\tblockPositionDescription,\n\t\t\t\t\t\t\t\tblockPropertiesDescription,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t\t\t\t.join( ' ' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ showBlockActions && BlockSettingsMenu && (\n\t\t\t\t\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default memo( ListViewBlock );\n","/**\n * WordPress dependencies\n */\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useLayoutEffect } from '@wordpress/element';\n\nexport default function useListViewScrollIntoView( {\n\tisSelected,\n\tselectedClientIds,\n\trowItemRef,\n} ) {\n\tconst isSingleSelection = selectedClientIds.length === 1;\n\n\tuseLayoutEffect( () => {\n\t\t// Skip scrolling into view if this particular block isn't selected,\n\t\t// or if more than one block is selected overall. This is to avoid\n\t\t// scrolling the view in a multi selection where the user has intentionally\n\t\t// selected multiple blocks within the list view, but the initially\n\t\t// selected block may be out of view.\n\t\tif ( ! isSelected || ! isSingleSelection || ! rowItemRef.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( rowItemRef.current );\n\t\tconst { ownerDocument } = rowItemRef.current;\n\n\t\tconst windowScroll =\n\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\tscrollContainer === ownerDocument.documentElement;\n\n\t\t// If the there is no scroll container, of if the scroll container is the window,\n\t\t// do not scroll into view, as the block is already in view.\n\t\tif ( windowScroll || ! scrollContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rowRect = rowItemRef.current.getBoundingClientRect();\n\t\tconst scrollContainerRect = scrollContainer.getBoundingClientRect();\n\n\t\t// If the selected block is not currently visible, scroll to it.\n\t\tif (\n\t\t\trowRect.top < scrollContainerRect.top ||\n\t\t\trowRect.bottom > scrollContainerRect.bottom\n\t\t) {\n\t\t\trowItemRef.current.scrollIntoView();\n\t\t}\n\t}, [ isSelected, isSingleSelection, rowItemRef ] );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridRow as TreeGridRow,\n\t__experimentalTreeGridCell as TreeGridCell,\n} from '@wordpress/components';\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { Appender } from './appender';\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { getDragDisplacementValues, isClientIdSelected } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @param {boolean} isExpandedByDefault flag to determine the default fallback expanded state.\n * @return {number} block count\n */\nfunction countBlocks(\n\tblock,\n\texpandedState,\n\tdraggedClientIds,\n\tisExpandedByDefault\n) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? isExpandedByDefault;\n\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer(\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer =\n\t( expandedState, draggedClientIds, isExpandedByDefault ) =>\n\t( count, block ) => {\n\t\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\t\tif ( isDragged ) {\n\t\t\treturn count;\n\t\t}\n\t\tconst isExpanded =\n\t\t\texpandedState[ block.clientId ] ?? isExpandedByDefault;\n\t\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\t\treturn (\n\t\t\t\tcount +\n\t\t\t\tcountBlocks(\n\t\t\t\t\tblock,\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn count + 1;\n\t};\n\nconst noop = () => {};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock = noop,\n\t\tshowBlockMovers,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t\tisExpanded,\n\t\tparentId,\n\t\tshouldShowInnerBlocks = true,\n\t\tisSyncedBranch = false,\n\t\tshowAppender: showAppenderProp = true,\n\t} = props;\n\n\tconst parentBlockInformation = useBlockDisplayInformation( parentId );\n\tconst syncedBranch = isSyncedBranch || !! parentBlockInformation?.isSynced;\n\n\tconst canParentExpand = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! parentId ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn select( blockEditorStore ).canEditBlock( parentId );\n\t\t},\n\t\t[ parentId ]\n\t);\n\n\tconst {\n\t\tblockDropPosition,\n\t\tblockDropTargetIndex,\n\t\tfirstDraggedBlockIndex,\n\t\tblockIndexes,\n\t\texpandedState,\n\t\tdraggedClientIds,\n\t} = useListViewContext();\n\n\tif ( ! canParentExpand ) {\n\t\treturn null;\n\t}\n\n\t// Only show the appender at the first level.\n\tconst showAppender = showAppenderProp && level === 1;\n\tconst filteredBlocks = blocks.filter( Boolean );\n\tconst blockCount = filteredBlocks.length;\n\t// The appender means an extra row in List View, so add 1 to the row count.\n\tconst rowCount = showAppender ? blockCount + 1 : blockCount;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\t\tisExpanded\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\t// Determine the displacement of the block while dragging. This\n\t\t\t\t// works out whether the current block should be displaced up or\n\t\t\t\t// down, relative to the dragged blocks and the drop target.\n\t\t\t\tconst { displacement, isAfterDraggedBlocks, isNesting } =\n\t\t\t\t\tgetDragDisplacementValues( {\n\t\t\t\t\t\tblockIndexes,\n\t\t\t\t\t\tblockDropTargetIndex,\n\t\t\t\t\t\tblockDropPosition,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tfirstDraggedBlockIndex,\n\t\t\t\t\t\tisDragged,\n\t\t\t\t\t} );\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\t\t\t\tconst blockInView = itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks = !! innerBlocks?.length;\n\n\t\t\t\tconst shouldExpand =\n\t\t\t\t\thasNestedBlocks && shouldShowInnerBlocks\n\t\t\t\t\t\t? expandedState[ clientId ] ?? isExpanded\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\n\t\t\t\t// To avoid performance issues, we only render blocks that are in view,\n\t\t\t\t// or blocks that are selected or dragged. If a block is selected,\n\t\t\t\t// it is only counted if it is the first of the block selection.\n\t\t\t\t// This prevents the entire tree from being rendered when a branch is\n\t\t\t\t// selected, or a user selects all blocks, while still enabling scroll\n\t\t\t\t// into view behavior when selecting a block or opening the list view.\n\t\t\t\t// The first and last blocks of the list are always rendered, to ensure\n\t\t\t\t// that Home and End keys work as expected.\n\t\t\t\tconst showBlock =\n\t\t\t\t\tisDragged ||\n\t\t\t\t\tblockInView ||\n\t\t\t\t\t( isSelected && clientId === selectedClientIds[ 0 ] ) ||\n\t\t\t\t\tindex === 0 ||\n\t\t\t\t\tindex === blockCount - 1;\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && shouldExpand && ! isDragged && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ showAppender && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ( treeGridCellProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default memo( ListViewBranch );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n\tPopover,\n} from '@wordpress/components';\n\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport ListViewExpander from './expander';\n\nexport default function ListViewDropIndicatorPreview( {\n\tdraggedBlockClientId,\n\tlistViewRef,\n\tblockDropTarget,\n} ) {\n\tconst blockInformation = useBlockDisplayInformation( draggedBlockClientId );\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId: draggedBlockClientId,\n\t\tcontext: 'list-view',\n\t} );\n\n\tconst { rootClientId, clientId, dropPosition } = blockDropTarget || {};\n\n\tconst [ rootBlockElement, blockElement ] = useMemo( () => {\n\t\tif ( ! listViewRef.current ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// The rootClientId will be defined whenever dropping into inner\n\t\t// block lists, but is undefined when dropping at the root level.\n\t\tconst _rootBlockElement = rootClientId\n\t\t\t? listViewRef.current.querySelector(\n\t\t\t\t\t`[data-block=\"${ rootClientId }\"]`\n\t\t\t )\n\t\t\t: undefined;\n\n\t\t// The clientId represents the sibling block, the dragged block will\n\t\t// usually be inserted adjacent to it. It will be undefined when\n\t\t// dropping a block into an empty block list.\n\t\tconst _blockElement = clientId\n\t\t\t? listViewRef.current.querySelector(\n\t\t\t\t\t`[data-block=\"${ clientId }\"]`\n\t\t\t )\n\t\t\t: undefined;\n\n\t\treturn [ _rootBlockElement, _blockElement ];\n\t}, [ listViewRef, rootClientId, clientId ] );\n\n\t// The targetElement is the element that the drop indicator will appear\n\t// before or after. When dropping into an empty block list, blockElement\n\t// is undefined, so the indicator will appear after the rootBlockElement.\n\tconst targetElement = blockElement || rootBlockElement;\n\n\tconst rtl = isRTL();\n\n\tconst getDropIndicatorWidth = useCallback(\n\t\t( targetElementRect, indent ) => {\n\t\t\tif ( ! targetElement ) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// Default to assuming that the width of the drop indicator\n\t\t\t// should be the same as the target element.\n\t\t\tlet width = targetElement.offsetWidth;\n\n\t\t\t// In deeply nested lists, where a scrollbar is present,\n\t\t\t// the width of the drop indicator should be the width of\n\t\t\t// the scroll container, minus the distance from the left\n\t\t\t// edge of the scroll container to the left edge of the\n\t\t\t// target element.\n\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\ttargetElement,\n\t\t\t\t'horizontal'\n\t\t\t);\n\n\t\t\tconst ownerDocument = targetElement.ownerDocument;\n\t\t\tconst windowScroll =\n\t\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\t\tscrollContainer === ownerDocument.documentElement;\n\n\t\t\tif ( scrollContainer && ! windowScroll ) {\n\t\t\t\tconst scrollContainerRect =\n\t\t\t\t\tscrollContainer.getBoundingClientRect();\n\n\t\t\t\tconst distanceBetweenContainerAndTarget = isRTL()\n\t\t\t\t\t? scrollContainerRect.right - targetElementRect.right\n\t\t\t\t\t: targetElementRect.left - scrollContainerRect.left;\n\n\t\t\t\tconst scrollContainerWidth = scrollContainer.clientWidth;\n\n\t\t\t\tif (\n\t\t\t\t\tscrollContainerWidth <\n\t\t\t\t\twidth + distanceBetweenContainerAndTarget\n\t\t\t\t) {\n\t\t\t\t\twidth =\n\t\t\t\t\t\tscrollContainerWidth -\n\t\t\t\t\t\tdistanceBetweenContainerAndTarget;\n\t\t\t\t}\n\n\t\t\t\t// LTR logic for ensuring the drop indicator does not extend\n\t\t\t\t// beyond the right edge of the scroll container.\n\t\t\t\tif (\n\t\t\t\t\t! rtl &&\n\t\t\t\t\ttargetElementRect.left + indent < scrollContainerRect.left\n\t\t\t\t) {\n\t\t\t\t\twidth -= scrollContainerRect.left - targetElementRect.left;\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\n\t\t\t\t// RTL logic for ensuring the drop indicator does not extend\n\t\t\t\t// beyond the right edge of the scroll container.\n\t\t\t\tif (\n\t\t\t\t\trtl &&\n\t\t\t\t\ttargetElementRect.right - indent > scrollContainerRect.right\n\t\t\t\t) {\n\t\t\t\t\twidth -=\n\t\t\t\t\t\ttargetElementRect.right - scrollContainerRect.right;\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract the indent from the final width of the indicator.\n\t\t\treturn width - indent;\n\t\t},\n\t\t[ rtl, targetElement ]\n\t);\n\n\tconst style = useMemo( () => {\n\t\tif ( ! targetElement ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst targetElementRect = targetElement.getBoundingClientRect();\n\n\t\treturn {\n\t\t\twidth: getDropIndicatorWidth( targetElementRect, 0 ),\n\t\t};\n\t}, [ getDropIndicatorWidth, targetElement ] );\n\n\tconst horizontalScrollOffsetStyle = useMemo( () => {\n\t\tif ( ! targetElement ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( targetElement );\n\t\tconst ownerDocument = targetElement.ownerDocument;\n\t\tconst windowScroll =\n\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\tscrollContainer === ownerDocument.documentElement;\n\n\t\tif ( scrollContainer && ! windowScroll ) {\n\t\t\tconst scrollContainerRect = scrollContainer.getBoundingClientRect();\n\t\t\tconst targetElementRect = targetElement.getBoundingClientRect();\n\n\t\t\tconst distanceBetweenContainerAndTarget = rtl\n\t\t\t\t? scrollContainerRect.right - targetElementRect.right\n\t\t\t\t: targetElementRect.left - scrollContainerRect.left;\n\n\t\t\tif ( ! rtl && scrollContainerRect.left > targetElementRect.left ) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX( ${ distanceBetweenContainerAndTarget }px )`,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( rtl && scrollContainerRect.right < targetElementRect.right ) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX( ${\n\t\t\t\t\t\tdistanceBetweenContainerAndTarget * -1\n\t\t\t\t\t}px )`,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn {};\n\t}, [ rtl, targetElement ] );\n\n\tconst ariaLevel = useMemo( () => {\n\t\tif ( ! rootBlockElement ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst _ariaLevel = parseInt(\n\t\t\trootBlockElement.getAttribute( 'aria-level' ),\n\t\t\t10\n\t\t);\n\n\t\treturn _ariaLevel ? _ariaLevel + 1 : 1;\n\t}, [ rootBlockElement ] );\n\n\tconst hasAdjacentSelectedBranch = useMemo( () => {\n\t\tif ( ! targetElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn targetElement.classList.contains( 'is-branch-selected' );\n\t}, [ targetElement ] );\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tconst isValidDropPosition =\n\t\t\tdropPosition === 'top' ||\n\t\t\tdropPosition === 'bottom' ||\n\t\t\tdropPosition === 'inside';\n\t\tif ( ! targetElement || ! isValidDropPosition ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tcontextElement: targetElement,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\tconst rect = targetElement.getBoundingClientRect();\n\t\t\t\t// In RTL languages, the drop indicator should be positioned\n\t\t\t\t// to the left of the target element, with the width of the\n\t\t\t\t// indicator determining the indent at the right edge of the\n\t\t\t\t// target element. In LTR languages, the drop indicator should\n\t\t\t\t// end at the right edge of the target element, with the indent\n\t\t\t\t// added to the position of the left edge of the target element.\n\t\t\t\t// let left = rtl ? rect.left : rect.left + indent;\n\t\t\t\tlet left = rect.left;\n\t\t\t\tlet top = 0;\n\n\t\t\t\t// In deeply nested lists, where a scrollbar is present,\n\t\t\t\t// the width of the drop indicator should be the width of\n\t\t\t\t// the visible area of the scroll container. Additionally,\n\t\t\t\t// the left edge of the drop indicator line needs to be\n\t\t\t\t// offset by the distance the left edge of the target element\n\t\t\t\t// and the left edge of the scroll container. The ensures\n\t\t\t\t// that the drop indicator position never breaks out of the\n\t\t\t\t// visible area of the scroll container.\n\t\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\t\ttargetElement,\n\t\t\t\t\t'horizontal'\n\t\t\t\t);\n\n\t\t\t\tconst doc = targetElement.ownerDocument;\n\t\t\t\tconst windowScroll =\n\t\t\t\t\tscrollContainer === doc.body ||\n\t\t\t\t\tscrollContainer === doc.documentElement;\n\n\t\t\t\t// If the scroll container is not the window, offset the left position, if need be.\n\t\t\t\tif ( scrollContainer && ! windowScroll ) {\n\t\t\t\t\tconst scrollContainerRect =\n\t\t\t\t\t\tscrollContainer.getBoundingClientRect();\n\n\t\t\t\t\t// In RTL languages, a vertical scrollbar is present on the\n\t\t\t\t\t// left edge of the scroll container. The width of the\n\t\t\t\t\t// scrollbar needs to be accounted for when positioning the\n\t\t\t\t\t// drop indicator.\n\t\t\t\t\tconst scrollbarWidth = rtl\n\t\t\t\t\t\t? scrollContainer.offsetWidth -\n\t\t\t\t\t\t scrollContainer.clientWidth\n\t\t\t\t\t\t: 0;\n\n\t\t\t\t\tif ( left < scrollContainerRect.left + scrollbarWidth ) {\n\t\t\t\t\t\tleft = scrollContainerRect.left + scrollbarWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( dropPosition === 'top' ) {\n\t\t\t\t\ttop = rect.top - rect.height * 2;\n\t\t\t\t} else {\n\t\t\t\t\t// `dropPosition` is either `bottom` or `inside`\n\t\t\t\t\ttop = rect.top;\n\t\t\t\t}\n\n\t\t\t\tconst width = getDropIndicatorWidth( rect, 0 );\n\t\t\t\tconst height = rect.height;\n\n\t\t\t\treturn new window.DOMRect( left, top, width, height );\n\t\t\t},\n\t\t};\n\t}, [ targetElement, dropPosition, getDropIndicatorWidth, rtl ] );\n\n\tif ( ! targetElement ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {} } />\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ blockTitle }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useState, useCallback, useEffect } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n\tusePrevious,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n} from '../../utils/math';\nimport useOnBlockDrop from '../use-on-block-drop';\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n\n/**\n * The type of a drag event.\n *\n * @typedef {'default'|'file'|'html'} WPDragEventType\n */\n\n/**\n * An object representing data for blocks in the DOM used by drag and drop.\n *\n * @typedef {Object} WPListViewDropZoneBlock\n * @property {string} clientId The client id for the block.\n * @property {string} rootClientId The root client id for the block.\n * @property {number} blockIndex The block's index.\n * @property {Element} element The DOM element representing the block.\n * @property {number} innerBlockCount The number of inner blocks the block has.\n * @property {boolean} isDraggedBlock Whether the block is currently being dragged.\n * @property {boolean} isExpanded Whether the block is expanded in the UI.\n * @property {boolean} canInsertDraggedBlocksAsSibling Whether the dragged block can be a sibling of this block.\n * @property {boolean} canInsertDraggedBlocksAsChild Whether the dragged block can be a child of this block.\n */\n\n/**\n * An array representing data for blocks in the DOM used by drag and drop.\n *\n * @typedef {WPListViewDropZoneBlock[]} WPListViewDropZoneBlocks\n */\n\n/**\n * An object containing details of a drop target.\n *\n * @typedef {Object} WPListViewDropZoneTarget\n * @property {string} blockIndex The insertion index.\n * @property {string} rootClientId The root client id for the block.\n * @property {string|undefined} clientId The client id for the block.\n * @property {'top'|'bottom'|'inside'} dropPosition The position relative to the block that the user is dropping to.\n * 'inside' refers to nesting as an inner block.\n */\n\n// When the indentation level, the corresponding left margin in `style.scss`\n// must be updated as well to ensure the drop zone is aligned with the indentation.\nexport const NESTING_LEVEL_INDENTATION = 24;\n\n/**\n * Determines whether the user is positioning the dragged block to be\n * moved up to a parent level.\n *\n * Determined based on nesting level indentation of the current block.\n *\n * @param {WPPoint} point The point representing the cursor position when dragging.\n * @param {DOMRect} rect The rectangle.\n * @param {number} nestingLevel The nesting level of the block.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n * @return {boolean} Whether the gesture is an upward gesture.\n */\nfunction isUpGesture( point, rect, nestingLevel = 1, rtl = false ) {\n\t// If the block is nested, and the user is dragging to the bottom\n\t// left of the block (or bottom right in RTL languages), then it is an upward gesture.\n\tconst blockIndentPosition = rtl\n\t\t? rect.right - nestingLevel * NESTING_LEVEL_INDENTATION\n\t\t: rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;\n\treturn rtl ? point.x > blockIndentPosition : point.x < blockIndentPosition;\n}\n\n/**\n * Returns how many nesting levels up the user is attempting to drag to.\n *\n * The relative parent level is calculated based on how far\n * the cursor is from the provided nesting level (e.g. of a candidate block\n * that the user is hovering over). The nesting level is considered \"desired\"\n * because it is not guaranteed that the user will be able to drag to the desired level.\n *\n * The returned integer can be used to access an ascending array\n * of parent blocks, where the first item is the block the user\n * is hovering over, and the last item is the root block.\n *\n * @param {WPPoint} point The point representing the cursor position when dragging.\n * @param {DOMRect} rect The rectangle.\n * @param {number} nestingLevel The nesting level of the block.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n * @return {number} The desired relative parent level.\n */\nfunction getDesiredRelativeParentLevel(\n\tpoint,\n\trect,\n\tnestingLevel = 1,\n\trtl = false\n) {\n\t// In RTL languages, the block indent position is from the right edge of the block.\n\t// In LTR languages, the block indent position is from the left edge of the block.\n\tconst blockIndentPosition = rtl\n\t\t? rect.right - nestingLevel * NESTING_LEVEL_INDENTATION\n\t\t: rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;\n\n\tconst distanceBetweenPointAndBlockIndentPosition = rtl\n\t\t? blockIndentPosition - point.x\n\t\t: point.x - blockIndentPosition;\n\n\tconst desiredParentLevel = Math.round(\n\t\tdistanceBetweenPointAndBlockIndentPosition / NESTING_LEVEL_INDENTATION\n\t);\n\n\treturn Math.abs( desiredParentLevel );\n}\n\n/**\n * Returns an array of the parent blocks of the block the user is dropping to.\n *\n * @param {WPListViewDropZoneBlock} candidateBlockData The block the user is dropping to.\n * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.\n * @return {WPListViewDropZoneBlocks} An array of block parents, including the block the user is dropping to.\n */\nfunction getCandidateBlockParents( candidateBlockData, blocksData ) {\n\tconst candidateBlockParents = [];\n\tlet currentBlockData = candidateBlockData;\n\n\twhile ( currentBlockData ) {\n\t\tcandidateBlockParents.push( { ...currentBlockData } );\n\t\tcurrentBlockData = blocksData.find(\n\t\t\t( blockData ) =>\n\t\t\t\tblockData.clientId === currentBlockData.rootClientId\n\t\t);\n\t}\n\n\treturn candidateBlockParents;\n}\n\n/**\n * Given a list of blocks data and a block index, return the next non-dragged\n * block. This is used to determine the block that the user is dropping to,\n * while ignoring the dragged block.\n *\n * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.\n * @param {number} index The index to begin searching from.\n * @return {WPListViewDropZoneBlock | undefined} The next non-dragged block.\n */\nfunction getNextNonDraggedBlock( blocksData, index ) {\n\tconst nextBlockData = blocksData[ index + 1 ];\n\tif ( nextBlockData && nextBlockData.isDraggedBlock ) {\n\t\treturn getNextNonDraggedBlock( blocksData, index + 1 );\n\t}\n\n\treturn nextBlockData;\n}\n\n/**\n * Determines whether the user positioning the dragged block to nest as an\n * inner block.\n *\n * Determined based on nesting level indentation of the current block, plus\n * the indentation of the next level of nesting. The vertical position of the\n * cursor must also be within the block.\n *\n * @param {WPPoint} point The point representing the cursor position when dragging.\n * @param {DOMRect} rect The rectangle.\n * @param {number} nestingLevel The nesting level of the block.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n */\nfunction isNestingGesture( point, rect, nestingLevel = 1, rtl = false ) {\n\tconst blockIndentPosition = rtl\n\t\t? rect.right - nestingLevel * NESTING_LEVEL_INDENTATION\n\t\t: rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;\n\n\tconst isNestingHorizontalGesture = rtl\n\t\t? point.x < blockIndentPosition - NESTING_LEVEL_INDENTATION\n\t\t: point.x > blockIndentPosition + NESTING_LEVEL_INDENTATION;\n\n\treturn isNestingHorizontalGesture && point.y < rect.bottom;\n}\n\n// Block navigation is always a vertical list, so only allow dropping\n// to the above or below a block.\nconst ALLOWED_DROP_EDGES = [ 'top', 'bottom' ];\n\n/**\n * Given blocks data and the cursor position, compute the drop target.\n *\n * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.\n * @param {WPPoint} position The point representing the cursor position when dragging.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n *\n * @return {WPListViewDropZoneTarget | undefined} An object containing data about the drop target.\n */\nexport function getListViewDropTarget( blocksData, position, rtl = false ) {\n\tlet candidateEdge;\n\tlet candidateBlockData;\n\tlet candidateDistance;\n\tlet candidateRect;\n\tlet candidateBlockIndex;\n\n\tfor ( let i = 0; i < blocksData.length; i++ ) {\n\t\tconst blockData = blocksData[ i ];\n\t\tif ( blockData.isDraggedBlock ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rect = blockData.element.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\tposition,\n\t\t\trect,\n\t\t\tALLOWED_DROP_EDGES\n\t\t);\n\n\t\tconst isCursorWithinBlock = isPointContainedByRect( position, rect );\n\t\tif (\n\t\t\tcandidateDistance === undefined ||\n\t\t\tdistance < candidateDistance ||\n\t\t\tisCursorWithinBlock\n\t\t) {\n\t\t\tcandidateDistance = distance;\n\n\t\t\tconst index = blocksData.indexOf( blockData );\n\t\t\tconst previousBlockData = blocksData[ index - 1 ];\n\n\t\t\t// If dragging near the top of a block and the preceding block\n\t\t\t// is at the same level, use the preceding block as the candidate\n\t\t\t// instead, as later it makes determining a nesting drop easier.\n\t\t\tif (\n\t\t\t\tedge === 'top' &&\n\t\t\t\tpreviousBlockData &&\n\t\t\t\tpreviousBlockData.rootClientId === blockData.rootClientId &&\n\t\t\t\t! previousBlockData.isDraggedBlock\n\t\t\t) {\n\t\t\t\tcandidateBlockData = previousBlockData;\n\t\t\t\tcandidateEdge = 'bottom';\n\t\t\t\tcandidateRect =\n\t\t\t\t\tpreviousBlockData.element.getBoundingClientRect();\n\t\t\t\tcandidateBlockIndex = index - 1;\n\t\t\t} else {\n\t\t\t\tcandidateBlockData = blockData;\n\t\t\t\tcandidateEdge = edge;\n\t\t\t\tcandidateRect = rect;\n\t\t\t\tcandidateBlockIndex = index;\n\t\t\t}\n\n\t\t\t// If the mouse position is within the block, break early\n\t\t\t// as the user would intend to drop either before or after\n\t\t\t// this block.\n\t\t\t//\n\t\t\t// This solves an issue where some rows in the list view\n\t\t\t// tree overlap slightly due to sub-pixel rendering.\n\t\t\tif ( isCursorWithinBlock ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( ! candidateBlockData ) {\n\t\treturn;\n\t}\n\n\tconst candidateBlockParents = getCandidateBlockParents(\n\t\tcandidateBlockData,\n\t\tblocksData\n\t);\n\n\tconst isDraggingBelow = candidateEdge === 'bottom';\n\n\t// If the user is dragging towards the bottom of the block check whether\n\t// they might be trying to nest the block as a child.\n\t// If the block already has inner blocks, and is expanded, this should be treated\n\t// as nesting since the next block in the tree will be the first child.\n\t// However, if the block is collapsed, dragging beneath the block should\n\t// still be allowed, as the next visible block in the tree will be a sibling.\n\tif (\n\t\tisDraggingBelow &&\n\t\tcandidateBlockData.canInsertDraggedBlocksAsChild &&\n\t\t( ( candidateBlockData.innerBlockCount > 0 &&\n\t\t\tcandidateBlockData.isExpanded ) ||\n\t\t\tisNestingGesture(\n\t\t\t\tposition,\n\t\t\t\tcandidateRect,\n\t\t\t\tcandidateBlockParents.length,\n\t\t\t\trtl\n\t\t\t) )\n\t) {\n\t\t// If the block is expanded, insert the block as the first child.\n\t\t// Otherwise, for collapsed blocks, insert the block as the last child.\n\t\tconst newBlockIndex = candidateBlockData.isExpanded\n\t\t\t? 0\n\t\t\t: candidateBlockData.innerBlockCount || 0;\n\n\t\treturn {\n\t\t\trootClientId: candidateBlockData.clientId,\n\t\t\tclientId: candidateBlockData.clientId,\n\t\t\tblockIndex: newBlockIndex,\n\t\t\tdropPosition: 'inside',\n\t\t};\n\t}\n\n\t// If the user is dragging towards the bottom of the block check whether\n\t// they might be trying to move the block to be at a parent level.\n\tif (\n\t\tisDraggingBelow &&\n\t\tcandidateBlockData.rootClientId &&\n\t\tisUpGesture(\n\t\t\tposition,\n\t\t\tcandidateRect,\n\t\t\tcandidateBlockParents.length,\n\t\t\trtl\n\t\t)\n\t) {\n\t\tconst nextBlock = getNextNonDraggedBlock(\n\t\t\tblocksData,\n\t\t\tcandidateBlockIndex\n\t\t);\n\t\tconst currentLevel = candidateBlockData.nestingLevel;\n\t\tconst nextLevel = nextBlock ? nextBlock.nestingLevel : 1;\n\n\t\tif ( currentLevel && nextLevel ) {\n\t\t\t// Determine the desired relative level of the block to be dropped.\n\t\t\tconst desiredRelativeLevel = getDesiredRelativeParentLevel(\n\t\t\t\tposition,\n\t\t\t\tcandidateRect,\n\t\t\t\tcandidateBlockParents.length,\n\t\t\t\trtl\n\t\t\t);\n\n\t\t\tconst targetParentIndex = Math.max(\n\t\t\t\tMath.min( desiredRelativeLevel, currentLevel - nextLevel ),\n\t\t\t\t0\n\t\t\t);\n\n\t\t\tif ( candidateBlockParents[ targetParentIndex ] ) {\n\t\t\t\t// Default to the block index of the candidate block.\n\t\t\t\tlet newBlockIndex = candidateBlockData.blockIndex;\n\n\t\t\t\t// If the next block is at the same level, use that as the default\n\t\t\t\t// block index. This ensures that the block is dropped in the correct\n\t\t\t\t// position when dragging to the bottom of a block.\n\t\t\t\tif (\n\t\t\t\t\tcandidateBlockParents[ targetParentIndex ].nestingLevel ===\n\t\t\t\t\tnextBlock?.nestingLevel\n\t\t\t\t) {\n\t\t\t\t\tnewBlockIndex = nextBlock?.blockIndex;\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, search from the current block index back\n\t\t\t\t\t// to find the last block index within the same target parent.\n\t\t\t\t\tfor ( let i = candidateBlockIndex; i >= 0; i-- ) {\n\t\t\t\t\t\tconst blockData = blocksData[ i ];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tblockData.rootClientId ===\n\t\t\t\t\t\t\tcandidateBlockParents[ targetParentIndex ]\n\t\t\t\t\t\t\t\t.rootClientId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewBlockIndex = blockData.blockIndex + 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\trootClientId:\n\t\t\t\t\t\tcandidateBlockParents[ targetParentIndex ].rootClientId,\n\t\t\t\t\tclientId: candidateBlockData.clientId,\n\t\t\t\t\tblockIndex: newBlockIndex,\n\t\t\t\t\tdropPosition: candidateEdge,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\t// If dropping as a sibling, but block cannot be inserted in\n\t// this context, return early.\n\tif ( ! candidateBlockData.canInsertDraggedBlocksAsSibling ) {\n\t\treturn;\n\t}\n\n\tconst offset = isDraggingBelow ? 1 : 0;\n\treturn {\n\t\trootClientId: candidateBlockData.rootClientId,\n\t\tclientId: candidateBlockData.clientId,\n\t\tblockIndex: candidateBlockData.blockIndex + offset,\n\t\tdropPosition: candidateEdge,\n\t};\n}\n\n// Throttle options need to be defined outside of the hook to avoid\n// re-creating the object on every render. This is due to a limitation\n// of the `useThrottle` hook, where the options object is included\n// in the dependency array for memoization.\nconst EXPAND_THROTTLE_OPTIONS = {\n\tleading: false, // Don't call the function immediately on the first call.\n\ttrailing: true, // Do call the function on the last call.\n};\n\n/**\n * A react hook for implementing a drop zone in list view.\n *\n * @param {Object} props Named parameters.\n * @param {?HTMLElement} [props.dropZoneElement] Optional element to be used as the drop zone.\n * @param {Object} [props.expandedState] The expanded state of the blocks in the list view.\n * @param {Function} [props.setExpandedState] Function to set the expanded state of a list of block clientIds.\n *\n * @return {WPListViewDropZoneTarget} The drop target.\n */\nexport default function useListViewDropZone( {\n\tdropZoneElement,\n\texpandedState,\n\tsetExpandedState,\n} ) {\n\tconst {\n\t\tgetBlockRootClientId,\n\t\tgetBlockIndex,\n\t\tgetBlockCount,\n\t\tgetDraggedBlockClientIds,\n\t\tcanInsertBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst [ target, setTarget ] = useState();\n\tconst { rootClientId: targetRootClientId, blockIndex: targetBlockIndex } =\n\t\ttarget || {};\n\n\tconst onBlockDrop = useOnBlockDrop( targetRootClientId, targetBlockIndex );\n\n\tconst rtl = isRTL();\n\n\tconst previousRootClientId = usePrevious( targetRootClientId );\n\n\tconst maybeExpandBlock = useCallback(\n\t\t( _expandedState, _target ) => {\n\t\t\t// If the user is attempting to drop a block inside a collapsed block,\n\t\t\t// that is, using a nesting gesture flagged by 'inside' dropPosition,\n\t\t\t// expand the block within the list view, if it isn't already.\n\t\t\tconst { rootClientId } = _target || {};\n\t\t\tif ( ! rootClientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t_target?.dropPosition === 'inside' &&\n\t\t\t\t! _expandedState[ rootClientId ]\n\t\t\t) {\n\t\t\t\tsetExpandedState( {\n\t\t\t\t\ttype: 'expand',\n\t\t\t\t\tclientIds: [ rootClientId ],\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\n\t// Throttle the maybeExpandBlock function to avoid expanding the block\n\t// too quickly when the user is dragging over the block. This is to\n\t// avoid expanding the block when the user is just passing over it.\n\tconst throttledMaybeExpandBlock = useThrottle(\n\t\tmaybeExpandBlock,\n\t\t500,\n\t\tEXPAND_THROTTLE_OPTIONS\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttarget?.dropPosition !== 'inside' ||\n\t\t\tpreviousRootClientId !== target?.rootClientId\n\t\t) {\n\t\t\tthrottledMaybeExpandBlock.cancel();\n\t\t\treturn;\n\t\t}\n\t\tthrottledMaybeExpandBlock( expandedState, target );\n\t}, [\n\t\texpandedState,\n\t\tpreviousRootClientId,\n\t\ttarget,\n\t\tthrottledMaybeExpandBlock,\n\t] );\n\n\tconst draggedBlockClientIds = getDraggedBlockClientIds();\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, currentTarget ) => {\n\t\t\t\tconst position = { x: event.clientX, y: event.clientY };\n\t\t\t\tconst isBlockDrag = !! draggedBlockClientIds?.length;\n\n\t\t\t\tconst blockElements = Array.from(\n\t\t\t\t\tcurrentTarget.querySelectorAll( '[data-block]' )\n\t\t\t\t);\n\n\t\t\t\tconst blocksData = blockElements.map( ( blockElement ) => {\n\t\t\t\t\tconst clientId = blockElement.dataset.block;\n\t\t\t\t\tconst isExpanded = blockElement.dataset.expanded === 'true';\n\t\t\t\t\tconst isDraggedBlock =\n\t\t\t\t\t\tblockElement.classList.contains( 'is-dragging' );\n\n\t\t\t\t\t// Get nesting level from `aria-level` attribute because Firefox does not support `element.ariaLevel`.\n\t\t\t\t\tconst nestingLevel = parseInt(\n\t\t\t\t\t\tblockElement.getAttribute( 'aria-level' ),\n\t\t\t\t\t\t10\n\t\t\t\t\t);\n\t\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tisExpanded,\n\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t\telement: blockElement,\n\t\t\t\t\t\tnestingLevel: nestingLevel || undefined,\n\t\t\t\t\t\tisDraggedBlock: isBlockDrag ? isDraggedBlock : false,\n\t\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t\tcanInsertDraggedBlocksAsSibling: isBlockDrag\n\t\t\t\t\t\t\t? canInsertBlocks(\n\t\t\t\t\t\t\t\t\tdraggedBlockClientIds,\n\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t\tcanInsertDraggedBlocksAsChild: isBlockDrag\n\t\t\t\t\t\t\t? canInsertBlocks( draggedBlockClientIds, clientId )\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst newTarget = getListViewDropTarget(\n\t\t\t\t\tblocksData,\n\t\t\t\t\tposition,\n\t\t\t\t\trtl\n\t\t\t\t);\n\n\t\t\t\tif ( newTarget ) {\n\t\t\t\t\tsetTarget( newTarget );\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tcanInsertBlocks,\n\t\t\t\tdraggedBlockClientIds,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\trtl,\n\t\t\t]\n\t\t),\n\t\t50\n\t);\n\n\tconst ref = useDropZone( {\n\t\tdropZoneElement,\n\t\tonDrop( event ) {\n\t\t\tthrottled.cancel();\n\t\t\tif ( target ) {\n\t\t\t\tonBlockDrop( event );\n\t\t\t}\n\t\t\t// Use `undefined` value to indicate that the drag has concluded.\n\t\t\t// This allows styling rules that are active only when a user is\n\t\t\t// dragging to be removed.\n\t\t\tsetTarget( undefined );\n\t\t},\n\t\tonDragLeave() {\n\t\t\tthrottled.cancel();\n\t\t\t// Use `null` value to indicate that the drop target is not valid,\n\t\t\t// but that the drag is still active. This allows for styling rules\n\t\t\t// that are active only when a user drags outside of the list view.\n\t\t\tsetTarget( null );\n\t\t},\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget );\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\t// Use `undefined` value to indicate that the drag has concluded.\n\t\t\t// This allows styling rules that are active only when a user is\n\t\t\t// dragging to be removed.\n\t\t\tsetTarget( undefined );\n\t\t},\n\t} );\n\n\treturn { ref, target };\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseInstanceId,\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport {\n\t__experimentalTreeGrid as TreeGrid,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicatorPreview from './drop-indicator';\nimport useBlockSelection from './use-block-selection';\nimport useListViewBlockIndexes from './use-list-view-block-indexes';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewCollapseItems from './use-list-view-collapse-items';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport useListViewExpandSelectedItem from './use-list-view-expand-selected-item';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockSettingsDropdown } from '../block-settings-menu/block-settings-dropdown';\nimport { focusListItem } from './utils';\nimport useClipboardHandler from './use-clipboard-handler';\n\nconst expanded = ( state, action ) => {\n\tif ( action.type === 'clear' ) {\n\t\treturn {};\n\t}\n\tif ( Array.isArray( action.clientIds ) ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.clientIds.reduce(\n\t\t\t\t( newState, id ) => ( {\n\t\t\t\t\t...newState,\n\t\t\t\t\t[ id ]: action.type === 'expand',\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t),\n\t\t};\n\t}\n\treturn state;\n};\n\nexport const BLOCK_LIST_ITEM_HEIGHT = 32;\n\n/** @typedef {import('react').ComponentType} ComponentType */\n/** @typedef {import('react').Ref} Ref */\n\n/**\n * Show a hierarchical list of blocks.\n *\n * @param {Object} props Components props.\n * @param {string} props.id An HTML element id for the root element of ListView.\n * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {?HTMLElement} props.dropZoneElement Optional element to be used as the drop zone.\n * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.\n * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.\n * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.\n * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.\n * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.\n * @param {string} props.description Optional accessible description for the tree grid component.\n * @param {?Function} props.onSelect Optional callback to be invoked when a block is selected. Receives the block object that was selected.\n * @param {?ComponentType} props.additionalBlockContent Component that renders additional block content UI.\n * @param {Ref} ref Forwarded ref\n */\nfunction ListViewComponent(\n\t{\n\t\tid,\n\t\tblocks,\n\t\tdropZoneElement,\n\t\tshowBlockMovers = false,\n\t\tisExpanded = false,\n\t\tshowAppender = false,\n\t\tblockSettingsMenu: BlockSettingsMenu = BlockSettingsDropdown,\n\t\trootClientId,\n\t\tdescription,\n\t\tonSelect,\n\t\tadditionalBlockContent: AdditionalBlockContent,\n\t},\n\tref\n) {\n\t// This can be removed once we no longer need to support the blocks prop.\n\tif ( blocks ) {\n\t\tdeprecated(\n\t\t\t'`blocks` property in `wp.blockEditor.__experimentalListView`',\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\talternative: '`rootClientId` property',\n\t\t\t}\n\t\t);\n\t}\n\n\tconst instanceId = useInstanceId( ListViewComponent );\n\tconst { clientIdsTree, draggedClientIds, selectedClientIds } =\n\t\tuseListViewClientIds( { blocks, rootClientId } );\n\tconst blockIndexes = useListViewBlockIndexes( clientIdsTree );\n\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst { visibleBlockCount } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getGlobalBlockCount, getClientIdsOfDescendants } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\n\tconst { updateBlockSelection } = useBlockSelection();\n\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst [ insertedBlock, setInsertedBlock ] = useState( null );\n\n\tconst { setSelectedTreeId } = useListViewExpandSelectedItem( {\n\t\tfirstSelectedBlockClientId: selectedClientIds[ 0 ],\n\t\tsetExpandedState,\n\t} );\n\tconst selectEditorBlock = useCallback(\n\t\t/**\n\t\t * @param {MouseEvent | KeyboardEvent | undefined} event\n\t\t * @param {string} blockClientId\n\t\t * @param {null | undefined | -1 | 1} focusPosition\n\t\t */\n\t\t( event, blockClientId, focusPosition ) => {\n\t\t\tupdateBlockSelection( event, blockClientId, null, focusPosition );\n\t\t\tsetSelectedTreeId( blockClientId );\n\t\t\tif ( onSelect ) {\n\t\t\t\tonSelect( getBlock( blockClientId ) );\n\t\t\t}\n\t\t},\n\t\t[ setSelectedTreeId, updateBlockSelection, onSelect, getBlock ]\n\t);\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone( {\n\t\tdropZoneElement,\n\t\texpandedState,\n\t\tsetExpandedState,\n\t} );\n\tconst elementRef = useRef();\n\n\t// Allow handling of copy, cut, and paste events.\n\tconst clipBoardRef = useClipboardHandler( {\n\t\tselectBlock: selectEditorBlock,\n\t} );\n\n\tconst treeGridRef = useMergeRefs( [\n\t\tclipBoardRef,\n\t\telementRef,\n\t\tdropZoneRef,\n\t\tref,\n\t] );\n\n\tuseEffect( () => {\n\t\t// If a blocks are already selected when the list view is initially\n\t\t// mounted, shift focus to the first selected block.\n\t\tif ( selectedClientIds?.length ) {\n\t\t\tfocusListItem( selectedClientIds[ 0 ], elementRef?.current );\n\t\t}\n\t\t// Disable reason: Only focus on the selected item when the list view is mounted.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [] );\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst clientIds = Array.isArray( clientId )\n\t\t\t\t? clientId\n\t\t\t\t: [ clientId ];\n\t\t\tsetExpandedState( { type: 'expand', clientIds } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapseAll = useCallback( () => {\n\t\tsetExpandedState( { type: 'clear' } );\n\t}, [ setExpandedState ] );\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\tconst focusRow = useCallback(\n\t\t( event, startRow, endRow ) => {\n\t\t\tif ( event.shiftKey ) {\n\t\t\t\tupdateBlockSelection(\n\t\t\t\t\tevent,\n\t\t\t\t\tstartRow?.dataset?.block,\n\t\t\t\t\tendRow?.dataset?.block\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ updateBlockSelection ]\n\t);\n\n\tuseListViewCollapseItems( {\n\t\tcollapseAll,\n\t\texpand,\n\t} );\n\n\tconst firstDraggedBlockClientId = draggedClientIds?.[ 0 ];\n\n\t// Convert a blockDropTarget into indexes relative to the blocks in the list view.\n\t// These values are used to determine which blocks should be displaced to make room\n\t// for the drop indicator. See `ListViewBranch` and `getDragDisplacementValues`.\n\tconst { blockDropTargetIndex, blockDropPosition, firstDraggedBlockIndex } =\n\t\tuseMemo( () => {\n\t\t\tlet _blockDropTargetIndex, _firstDraggedBlockIndex;\n\n\t\t\tif ( blockDropTarget?.clientId ) {\n\t\t\t\tconst foundBlockIndex =\n\t\t\t\t\tblockIndexes[ blockDropTarget.clientId ];\n\t\t\t\t// If dragging below or inside the block, treat the drop target as the next block.\n\t\t\t\t_blockDropTargetIndex =\n\t\t\t\t\tfoundBlockIndex === undefined ||\n\t\t\t\t\tblockDropTarget?.dropPosition === 'top'\n\t\t\t\t\t\t? foundBlockIndex\n\t\t\t\t\t\t: foundBlockIndex + 1;\n\t\t\t} else if ( blockDropTarget === null ) {\n\t\t\t\t// A `null` value is used to indicate that the user is dragging outside of the list view.\n\t\t\t\t_blockDropTargetIndex = null;\n\t\t\t}\n\n\t\t\tif ( firstDraggedBlockClientId ) {\n\t\t\t\tconst foundBlockIndex =\n\t\t\t\t\tblockIndexes[ firstDraggedBlockClientId ];\n\t\t\t\t_firstDraggedBlockIndex =\n\t\t\t\t\tfoundBlockIndex === undefined ||\n\t\t\t\t\tblockDropTarget?.dropPosition === 'top'\n\t\t\t\t\t\t? foundBlockIndex\n\t\t\t\t\t\t: foundBlockIndex + 1;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tblockDropTargetIndex: _blockDropTargetIndex,\n\t\t\t\tblockDropPosition: blockDropTarget?.dropPosition,\n\t\t\t\tfirstDraggedBlockIndex: _firstDraggedBlockIndex,\n\t\t\t};\n\t\t}, [ blockDropTarget, blockIndexes, firstDraggedBlockClientId ] );\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tblockDropPosition,\n\t\t\tblockDropTargetIndex,\n\t\t\tblockIndexes,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tfirstDraggedBlockIndex,\n\t\t\tcollapse,\n\t\t\tcollapseAll,\n\t\t\tBlockSettingsMenu,\n\t\t\tlistViewInstanceId: instanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t\ttreeGridElementRef: elementRef,\n\t\t\trootClientId,\n\t\t} ),\n\t\t[\n\t\t\tblockDropPosition,\n\t\t\tblockDropTargetIndex,\n\t\t\tblockIndexes,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tfirstDraggedBlockIndex,\n\t\t\tcollapse,\n\t\t\tcollapseAll,\n\t\t\tBlockSettingsMenu,\n\t\t\tinstanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t\trootClientId,\n\t\t]\n\t);\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\tBLOCK_LIST_ITEM_HEIGHT,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\t// Ensure that the windowing logic is recalculated when the expanded state changes.\n\t\t\t// This is necessary because expanding a collapsed block in a short list view can\n\t\t\t// switch the list view to a tall list view with a scrollbar, and vice versa.\n\t\t\t// When this happens, the windowing logic needs to be recalculated to ensure that\n\t\t\t// the correct number of blocks are rendered, by rechecking for a scroll container.\n\t\t\texpandedState,\n\t\t\tuseWindowing: true,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\t// If there are no blocks to show and we're not showing the appender, do not render the list view.\n\tif ( ! clientIdsTree.length && ! showAppender ) {\n\t\treturn null;\n\t}\n\n\tconst describedById =\n\t\tdescription && `block-editor-list-view-description-${ instanceId }`;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ description && (\n\t\t\t\t\n\t\t\t\t\t{ description }\n\t\t\t\t\n\t\t\t) }\n\t\t\t 0 &&\n\t\t\t\t\t\tblockDropTargetIndex !== undefined,\n\t\t\t\t} ) }\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t\tonFocusRow={ focusRow }\n\t\t\t\tapplicationAriaLabel={ __( 'Block navigation structure' ) }\n\t\t\t\taria-describedby={ describedById }\n\t\t\t\tstyle={ {\n\t\t\t\t\t'--wp-admin--list-view-dragged-items-height':\n\t\t\t\t\t\tdraggedClientIds?.length\n\t\t\t\t\t\t\t? `${\n\t\t\t\t\t\t\t\t\tBLOCK_LIST_ITEM_HEIGHT *\n\t\t\t\t\t\t\t\t\t( draggedClientIds.length - 1 )\n\t\t\t\t\t\t\t }px`\n\t\t\t\t\t\t\t: null,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\n// This is the private API for the ListView component.\n// It allows access to all props, not just the public ones.\nexport const PrivateListView = forwardRef( ListViewComponent );\n\n// This is the public API for the ListView component.\n// We wrap the PrivateListView component to hide some props from the public API.\nexport default forwardRef( ( props, ref ) => {\n\treturn (\n\t\t\n\t);\n} );\n","/**\n * WordPress dependencies\n */\n\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useListViewClientIds( { blocks, rootClientId } ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetEnabledClientIdsTree,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\n\t\t\treturn {\n\t\t\t\tselectedClientIds: getSelectedBlockClientIds(),\n\t\t\t\tdraggedClientIds: getDraggedBlockClientIds(),\n\t\t\t\tclientIdsTree:\n\t\t\t\t\tblocks ?? getEnabledClientIdsTree( rootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ blocks, rootClientId ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\nexport default function useListViewBlockIndexes( blocks ) {\n\tconst blockIndexes = useMemo( () => {\n\t\tconst indexes = {};\n\n\t\tlet currentGlobalIndex = 0;\n\n\t\tconst traverseBlocks = ( blockList ) => {\n\t\t\tblockList.forEach( ( block ) => {\n\t\t\t\tindexes[ block.clientId ] = currentGlobalIndex;\n\t\t\t\tcurrentGlobalIndex++;\n\n\t\t\t\tif ( block.innerBlocks.length > 0 ) {\n\t\t\t\t\ttraverseBlocks( block.innerBlocks );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\ttraverseBlocks( blocks );\n\n\t\treturn indexes;\n\t}, [ blocks ] );\n\n\treturn blockIndexes;\n}\n","/**\n * WordPress dependencies\n */\nimport { speak } from '@wordpress/a11y';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\nimport { UP, DOWN, HOME, END, ESCAPE } from '@wordpress/keycodes';\nimport { store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getCommonDepthClientIds } from './utils';\n\nexport default function useBlockSelection() {\n\tconst { clearSelectedBlock, multiSelect, selectBlock } =\n\t\tuseDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockName,\n\t\tgetBlockParents,\n\t\tgetBlockSelectionStart,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\thasSelectedBlock,\n\t} = useSelect( blockEditorStore );\n\n\tconst { getBlockType } = useSelect( blocksStore );\n\n\tconst updateBlockSelection = useCallback(\n\t\tasync ( event, clientId, destinationClientId, focusPosition ) => {\n\t\t\tif ( ! event?.shiftKey && event?.keyCode !== ESCAPE ) {\n\t\t\t\tselectBlock( clientId, focusPosition );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// To handle multiple block selection via the `SHIFT` key, prevent\n\t\t\t// the browser default behavior of opening the link in a new window.\n\t\t\tevent.preventDefault();\n\n\t\t\tconst isOnlyDeselection =\n\t\t\t\tevent.type === 'keydown' && event.keyCode === ESCAPE;\n\t\t\tconst isKeyPress =\n\t\t\t\tevent.type === 'keydown' &&\n\t\t\t\t( event.keyCode === UP ||\n\t\t\t\t\tevent.keyCode === DOWN ||\n\t\t\t\t\tevent.keyCode === HOME ||\n\t\t\t\t\tevent.keyCode === END );\n\n\t\t\t// Handle clicking on a block when no blocks are selected, and return early.\n\t\t\tif (\n\t\t\t\t! isKeyPress &&\n\t\t\t\t! hasSelectedBlock() &&\n\t\t\t\t! hasMultiSelection()\n\t\t\t) {\n\t\t\t\tselectBlock( clientId, null );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedBlocks = getSelectedBlockClientIds();\n\t\t\tconst clientIdWithParents = [\n\t\t\t\t...getBlockParents( clientId ),\n\t\t\t\tclientId,\n\t\t\t];\n\n\t\t\tif (\n\t\t\t\tisOnlyDeselection ||\n\t\t\t\t( isKeyPress &&\n\t\t\t\t\t! selectedBlocks.some( ( blockId ) =>\n\t\t\t\t\t\tclientIdWithParents.includes( blockId )\n\t\t\t\t\t) )\n\t\t\t) {\n\t\t\t\t// Ensure that shift-selecting blocks via the keyboard only\n\t\t\t\t// expands the current selection if focusing over already\n\t\t\t\t// selected blocks. Otherwise, clear the selection so that\n\t\t\t\t// a user can create a new selection entirely by keyboard.\n\t\t\t\tawait clearSelectedBlock();\n\t\t\t}\n\n\t\t\t// Update selection, if not only clearing the selection.\n\t\t\tif ( ! isOnlyDeselection ) {\n\t\t\t\tlet startTarget = getBlockSelectionStart();\n\t\t\t\tlet endTarget = clientId;\n\n\t\t\t\t// Handle keyboard behavior for selecting multiple blocks.\n\t\t\t\tif ( isKeyPress ) {\n\t\t\t\t\tif ( ! hasSelectedBlock() && ! hasMultiSelection() ) {\n\t\t\t\t\t\t// Set the starting point of the selection to the currently\n\t\t\t\t\t\t// focused block, if there are no blocks currently selected.\n\t\t\t\t\t\t// This ensures that as the selection is expanded or contracted,\n\t\t\t\t\t\t// the starting point of the selection is anchored to that block.\n\t\t\t\t\t\tstartTarget = clientId;\n\t\t\t\t\t}\n\t\t\t\t\tif ( destinationClientId ) {\n\t\t\t\t\t\t// If the user presses UP or DOWN, we want to ensure that the block they're\n\t\t\t\t\t\t// moving to is the target for selection, and not the currently focused one.\n\t\t\t\t\t\tendTarget = destinationClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst startParents = getBlockParents( startTarget );\n\t\t\t\tconst endParents = getBlockParents( endTarget );\n\n\t\t\t\tconst { start, end } = getCommonDepthClientIds(\n\t\t\t\t\tstartTarget,\n\t\t\t\t\tendTarget,\n\t\t\t\t\tstartParents,\n\t\t\t\t\tendParents\n\t\t\t\t);\n\t\t\t\tawait multiSelect( start, end, null );\n\t\t\t}\n\n\t\t\t// Announce deselected block, or number of deselected blocks if\n\t\t\t// the total number of blocks deselected is greater than one.\n\t\t\tconst updatedSelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// If the selection is greater than 1 and the Home or End keys\n\t\t\t// were used to generate the selection, then skip announcing the\n\t\t\t// deselected blocks.\n\t\t\tif (\n\t\t\t\t( event.keyCode === HOME || event.keyCode === END ) &&\n\t\t\t\tupdatedSelectedBlocks.length > 1\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectionDiff = selectedBlocks.filter(\n\t\t\t\t( blockId ) => ! updatedSelectedBlocks.includes( blockId )\n\t\t\t);\n\n\t\t\tlet label;\n\t\t\tif ( selectionDiff.length === 1 ) {\n\t\t\t\tconst title = getBlockType(\n\t\t\t\t\tgetBlockName( selectionDiff[ 0 ] )\n\t\t\t\t)?.title;\n\t\t\t\tif ( title ) {\n\t\t\t\t\tlabel = sprintf(\n\t\t\t\t\t\t/* translators: %s: block name */\n\t\t\t\t\t\t__( '%s deselected.' ),\n\t\t\t\t\t\ttitle\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if ( selectionDiff.length > 1 ) {\n\t\t\t\tlabel = sprintf(\n\t\t\t\t\t/* translators: %s: number of deselected blocks */\n\t\t\t\t\t__( '%s blocks deselected.' ),\n\t\t\t\t\tselectionDiff.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif ( label ) {\n\t\t\t\tspeak( label, 'assertive' );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tclearSelectedBlock,\n\t\t\tgetBlockName,\n\t\t\tgetBlockType,\n\t\t\tgetBlockParents,\n\t\t\tgetBlockSelectionStart,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\thasMultiSelection,\n\t\t\thasSelectedBlock,\n\t\t\tmultiSelect,\n\t\t\tselectBlock,\n\t\t]\n\t);\n\n\treturn {\n\t\tupdateBlockSelection,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useListViewExpandSelectedItem( {\n\tfirstSelectedBlockClientId,\n\tsetExpandedState,\n} ) {\n\tconst [ selectedTreeId, setSelectedTreeId ] = useState( null );\n\tconst { selectedBlockParentClientIds } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockParents } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tselectedBlockParentClientIds: getBlockParents(\n\t\t\t\t\tfirstSelectedBlockClientId,\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ firstSelectedBlockClientId ]\n\t);\n\n\t// Expand tree when a block is selected.\n\tuseEffect( () => {\n\t\t// If the selectedTreeId is the same as the selected block,\n\t\t// it means that the block was selected using the block list tree.\n\t\tif ( selectedTreeId === firstSelectedBlockClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the selected block has parents, get the top-level parent.\n\t\tif ( selectedBlockParentClientIds?.length ) {\n\t\t\t// If the selected block has parents,\n\t\t\t// expand the tree branch.\n\t\t\tsetExpandedState( {\n\t\t\t\ttype: 'expand',\n\t\t\t\tclientIds: selectedBlockParentClientIds,\n\t\t\t} );\n\t\t}\n\t}, [\n\t\tfirstSelectedBlockClientId,\n\t\tselectedBlockParentClientIds,\n\t\tselectedTreeId,\n\t\tsetExpandedState,\n\t] );\n\n\treturn {\n\t\tsetSelectedTreeId,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport { focusListItem } from './utils';\nimport { getPasteBlocks, setClipboardBlocks } from '../writing-flow/utils';\n\n// This hook borrows from useClipboardHandler in ../writing-flow/use-clipboard-handler.js\n// and adds behaviour for the list view, while skipping partial selection.\nexport default function useClipboardHandler( { selectBlock } ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t\tgetBlocksByClientId,\n\t\tgetPreviousBlockClientId,\n\t\tgetSelectedBlockClientIds,\n\t\tgetSettings,\n\t\tcanInsertBlockType,\n\t\tcanRemoveBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst { flashBlock, removeBlocks, replaceBlocks, insertBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction updateFocusAndSelection( focusClientId, shouldSelectBlock ) {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, node );\n\t\t}\n\n\t\t// Determine which blocks to update:\n\t\t// If the current (focused) block is part of the block selection, use the whole selection.\n\t\t// If the focused block is not part of the block selection, only update the focused block.\n\t\tfunction getBlocksToUpdate( clientId ) {\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\t\tconst isUpdatingSelectedBlocks =\n\t\t\t\tselectedBlockClientIds.includes( clientId );\n\t\t\tconst firstBlockClientId = isUpdatingSelectedBlocks\n\t\t\t\t? selectedBlockClientIds[ 0 ]\n\t\t\t\t: clientId;\n\t\t\tconst firstBlockRootClientId =\n\t\t\t\tgetBlockRootClientId( firstBlockClientId );\n\n\t\t\tconst blocksToUpdate = isUpdatingSelectedBlocks\n\t\t\t\t? selectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\n\t\t\treturn {\n\t\t\t\tblocksToUpdate,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\toriginallySelectedBlockClientIds: selectedBlockClientIds,\n\t\t\t};\n\t\t}\n\n\t\tfunction handler( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t// This was possibly already handled in rich-text/use-paste-handler.js.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only handle events that occur within the list view.\n\t\t\tif ( ! node.contains( event.target.ownerDocument.activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Retrieve the block clientId associated with the focused list view row.\n\t\t\t// This enables applying copy / cut / paste behavior to the focused block,\n\t\t\t// rather than just the blocks that are currently selected.\n\t\t\tconst listViewRow =\n\t\t\t\tevent.target.ownerDocument.activeElement?.closest(\n\t\t\t\t\t'[role=row]'\n\t\t\t\t);\n\t\t\tconst clientId = listViewRow?.dataset?.block;\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tblocksToUpdate: selectedBlockClientIds,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\toriginallySelectedBlockClientIds,\n\t\t\t} = getBlocksToUpdate( clientId );\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\tconst blocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\tsetClipboardBlocks( event, blocks, registry );\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// Don't update the selection if the blocks cannot be deleted.\n\t\t\t\tif ( ! canRemoveBlocks( selectedBlockClientIds ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet blockToFocus =\n\t\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ) ??\n\t\t\t\t\t// If the previous block is not found (when the first block is deleted),\n\t\t\t\t\t// fallback to focus the parent block.\n\t\t\t\t\tfirstBlockRootClientId;\n\n\t\t\t\t// Remove blocks, but don't update selection, and it will be handled below.\n\t\t\t\tremoveBlocks( selectedBlockClientIds, false );\n\n\t\t\t\t// Update the selection if the original selection has been removed.\n\t\t\t\tconst shouldUpdateSelection =\n\t\t\t\t\toriginallySelectedBlockClientIds.length > 0 &&\n\t\t\t\t\tgetSelectedBlockClientIds().length === 0;\n\n\t\t\t\t// If there's no previous block nor parent block, focus the first block.\n\t\t\t\tif ( ! blockToFocus ) {\n\t\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t\t}\n\n\t\t\t\tupdateFocusAndSelection( blockToFocus, shouldUpdateSelection );\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML:\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst blocks = getPasteBlocks(\n\t\t\t\t\tevent,\n\t\t\t\t\tcanUserUseUnfilteredHTML\n\t\t\t\t);\n\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tconst [ selectedBlockClientId ] = selectedBlockClientIds;\n\n\t\t\t\t\t// If a single block is focused, and the blocks to be posted can\n\t\t\t\t\t// be inserted within the block, then append the pasted blocks\n\t\t\t\t\t// within the focused block. For example, if you have copied a paragraph\n\t\t\t\t\t// block and paste it within a single Group block, this will append\n\t\t\t\t\t// the paragraph block within the Group block.\n\t\t\t\t\tif (\n\t\t\t\t\t\tblocks.every( ( block ) =>\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\tblocks,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t\t);\n\t\t\t\t\t\tupdateFocusAndSelection( blocks[ 0 ]?.clientId, false );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\tblocks,\n\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t-1\n\t\t\t\t);\n\t\t\t\tupdateFocusAndSelection( blocks[ 0 ]?.clientId, false );\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useListViewCollapseItems( { collapseAll, expand } ) {\n\tconst { expandedBlock, getBlockParents } = useSelect( ( select ) => {\n\t\tconst { getBlockParents: _getBlockParents, getExpandedBlock } = unlock(\n\t\t\tselect( blockEditorStore )\n\t\t);\n\t\treturn {\n\t\t\texpandedBlock: getExpandedBlock(),\n\t\t\tgetBlockParents: _getBlockParents,\n\t\t};\n\t}, [] );\n\n\t// Collapse all but the specified block when the expanded block client Id changes.\n\tuseEffect( () => {\n\t\tif ( expandedBlock ) {\n\t\t\tconst blockParents = getBlockParents( expandedBlock, false );\n\t\t\t// Collapse all blocks and expand the block's parents.\n\t\t\tcollapseAll();\n\t\t\texpand( blockParents );\n\t\t}\n\t}, [ collapseAll, expand, expandedBlock, getBlockParents ] );\n}\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Dropdown } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\nimport { listView } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ListView from '../list-view';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockNavigationDropdownToggle( {\n\tisEnabled,\n\tonToggle,\n\tisOpen,\n\tinnerRef,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction BlockNavigationDropdown( { isDisabled, ...props }, ref ) {\n\tdeprecated( 'wp.blockEditor.BlockNavigationDropdown', {\n\t\tsince: '6.1',\n\t\talternative: 'wp.components.Dropdown and wp.blockEditor.ListView',\n\t} );\n\n\tconst hasBlocks = useSelect(\n\t\t( select ) => !! select( blockEditorStore ).getBlockCount(),\n\t\t[]\n\t);\n\tconst isEnabled = hasBlocks && ! isDisabled;\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t
    \n\t\t\t\t\t

    \n\t\t\t\t\t\t{ __( 'List view' ) }\n\t\t\t\t\t

    \n\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( BlockNavigationDropdown );\n","/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport InserterPreviewPanel from '../inserter/preview-panel';\nimport { replaceActiveStyle } from './utils';\n\nexport default function BlockStylesPreviewPanel( {\n\tgenericPreviewBlock,\n\tstyle,\n\tclassName,\n\tactiveStyle,\n} ) {\n\tconst example = getBlockType( genericPreviewBlock.name )?.example;\n\tconst styleClassName = replaceActiveStyle( className, activeStyle, style );\n\tconst previewBlocks = useMemo( () => {\n\t\treturn {\n\t\t\t...genericPreviewBlock,\n\t\t\ttitle: style.label || style.name,\n\t\t\tdescription: style.description,\n\t\t\tinitialAttributes: {\n\t\t\t\t...genericPreviewBlock.attributes,\n\t\t\t\tclassName:\n\t\t\t\t\tstyleClassName +\n\t\t\t\t\t' block-editor-block-styles__block-preview-container',\n\t\t\t},\n\t\t\texample,\n\t\t};\n\t}, [ genericPreviewBlock, styleClassName ] );\n\n\treturn ;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { debounce, useViewportMatch } from '@wordpress/compose';\nimport {\n\tButton,\n\t__experimentalTruncate as Truncate,\n\tPopover,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockStylesPreviewPanel from './preview-panel';\nimport useStylesForBlocks from './use-styles-for-block';\n\nconst noop = () => {};\n\n// Block Styles component for the Settings Sidebar.\nfunction BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {\n\tconst {\n\t\tonSelect,\n\t\tstylesToRender,\n\t\tactiveStyle,\n\t\tgenericPreviewBlock,\n\t\tclassName: previewClassName,\n\t} = useStylesForBlocks( {\n\t\tclientId,\n\t\tonSwitch,\n\t} );\n\tconst [ hoveredStyle, setHoveredStyle ] = useState( null );\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\n\tif ( ! stylesToRender || stylesToRender.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst debouncedSetHoveredStyle = debounce( setHoveredStyle, 250 );\n\n\tconst onSelectStylePreview = ( style ) => {\n\t\tonSelect( style );\n\t\tonHoverClassName( null );\n\t\tsetHoveredStyle( null );\n\t\tdebouncedSetHoveredStyle.cancel();\n\t};\n\n\tconst styleItemHandler = ( item ) => {\n\t\tif ( hoveredStyle === item ) {\n\t\t\tdebouncedSetHoveredStyle.cancel();\n\t\t\treturn;\n\t\t}\n\t\tdebouncedSetHoveredStyle( item );\n\t\tonHoverClassName( item?.name ?? null );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t{ stylesToRender.map( ( style ) => {\n\t\t\t\t\tconst buttonText = style.label || style.name;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t styleItemHandler( style ) }\n\t\t\t\t\t\t\tonFocus={ () => styleItemHandler( style ) }\n\t\t\t\t\t\t\tonMouseLeave={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\tonBlur={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\tonClick={ () => onSelectStylePreview( style ) }\n\t\t\t\t\t\t\taria-current={ activeStyle.name === style.name }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ buttonText }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t
    \n\t\t\t{ hoveredStyle && ! isMobileViewport && (\n\t\t\t\t\n\t\t\t\t\t styleItemHandler( null ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockStyles;\n","/**\n * WordPress dependencies\n */\nimport {\n\theadingLevel1,\n\theadingLevel2,\n\theadingLevel3,\n\theadingLevel4,\n\theadingLevel5,\n\theadingLevel6,\n\tparagraph,\n} from '@wordpress/icons';\nimport { Icon } from '@wordpress/components';\n\n/** @typedef {import('react').ComponentType} ComponentType */\n\n/**\n * HeadingLevelIcon props.\n *\n * @typedef WPHeadingLevelIconProps\n *\n * @property {number} level The heading level to show an icon for.\n */\n\nconst LEVEL_TO_PATH = {\n\t0: paragraph,\n\t1: headingLevel1,\n\t2: headingLevel2,\n\t3: headingLevel3,\n\t4: headingLevel4,\n\t5: headingLevel5,\n\t6: headingLevel6,\n};\n\n/**\n * Heading level icon.\n *\n * @param {WPHeadingLevelIconProps} props Component props.\n *\n * @return {?ComponentType} The icon.\n */\nexport default function HeadingLevelIcon( { level } ) {\n\tif ( LEVEL_TO_PATH[ level ] ) {\n\t\treturn ;\n\t}\n\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst paragraph = (\n\t\n\t\t\n\t\n);\n\nexport default paragraph;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel1 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel1;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel2 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel2;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel3 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel3;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel4 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel4;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel5 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel5;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel6 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel6;\n","/**\n * WordPress dependencies\n */\nimport { ToolbarDropdownMenu } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport HeadingLevelIcon from './heading-level-icon';\n\nconst HEADING_LEVELS = [ 1, 2, 3, 4, 5, 6 ];\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-library-heading-level-dropdown',\n};\n\n/** @typedef {import('react').ComponentType} ComponentType */\n\n/**\n * HeadingLevelDropdown props.\n *\n * @typedef WPHeadingLevelDropdownProps\n *\n * @property {number} value The chosen heading level.\n * @property {number[]} options An array of supported heading levels.\n * @property {()=>number} onChange Function called with\n * the selected value changes.\n */\n\n/**\n * Dropdown for selecting a heading level (1 through 6) or paragraph (0).\n *\n * @param {WPHeadingLevelDropdownProps} props Component props.\n *\n * @return {ComponentType} The toolbar.\n */\nexport default function HeadingLevelDropdown( {\n\toptions = HEADING_LEVELS,\n\tvalue,\n\tonChange,\n} ) {\n\treturn (\n\t\t }\n\t\t\tlabel={ __( 'Change level' ) }\n\t\t\tcontrols={ options.map( ( targetLevel ) => {\n\t\t\t\tconst isActive = targetLevel === value;\n\t\t\t\treturn {\n\t\t\t\t\ticon: ,\n\t\t\t\t\ttitle:\n\t\t\t\t\t\ttargetLevel === 0\n\t\t\t\t\t\t\t? __( 'Paragraph' )\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t// translators: %d: heading level e.g: \"1\", \"2\", \"3\"\n\t\t\t\t\t\t\t\t\t__( 'Heading %d' ),\n\t\t\t\t\t\t\t\t\ttargetLevel\n\t\t\t\t\t\t\t ),\n\t\t\t\t\tisActive,\n\t\t\t\t\tonClick() {\n\t\t\t\t\t\tonChange( targetLevel );\n\t\t\t\t\t},\n\t\t\t\t\trole: 'menuitemradio',\n\t\t\t\t};\n\t\t\t} ) }\n\t\t/>\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst layout = (\n\t\n\t\t\n\t\n);\n\nexport default layout;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Button, Placeholder } from '@wordpress/components';\nimport { layout } from '@wordpress/icons';\n\nfunction BlockVariationPicker( {\n\ticon = layout,\n\tlabel = __( 'Choose variation' ),\n\tinstructions = __( 'Select a variation to start with:' ),\n\tvariations,\n\tonSelect,\n\tallowSkip,\n} ) {\n\tconst classes = clsx( 'block-editor-block-variation-picker', {\n\t\t'has-many-variations': variations.length > 4,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t{ /*\n\t\t\t * Disable reason: The `list` ARIA role is redundant but\n\t\t\t * Safari+VoiceOver won't announce the list otherwise.\n\t\t\t */\n\t\t\t/* eslint-disable jsx-a11y/no-redundant-roles */ }\n\t\t\t\n\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t onSelect( variation ) }\n\t\t\t\t\t\t\tclassName=\"block-editor-block-variation-picker__variation\"\n\t\t\t\t\t\t\tlabel={ variation.description || variation.title }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ variation.title }\n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t) ) }\n\t\t\t\n\t\t\t{ /* eslint-enable jsx-a11y/no-redundant-roles */ }\n\t\t\t{ allowSkip && (\n\t\t\t\t
    \n\t\t\t\t\t onSelect() }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Skip' ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockVariationPicker;\n","export const VIEWMODES = {\n\tcarousel: 'carousel',\n\tgrid: 'grid',\n};\n","/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport {\n\tchevronRight,\n\tchevronLeft,\n\tgrid,\n\tstretchFullWidth,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { VIEWMODES } from './constants';\n\nconst Actions = ( { onBlockPatternSelect } ) => (\n\t
    \n\t\t\n\t\t\t{ __( 'Choose' ) }\n\t\t\n\t
    \n);\n\nconst CarouselNavigation = ( {\n\thandlePrevious,\n\thandleNext,\n\tactiveSlide,\n\ttotalSlides,\n} ) => (\n\t
    \n\t\t\n\t\t\n\t
    \n);\n\nconst SetupToolbar = ( {\n\tviewMode,\n\tsetViewMode,\n\thandlePrevious,\n\thandleNext,\n\tactiveSlide,\n\ttotalSlides,\n\tonBlockPatternSelect,\n} ) => {\n\tconst isCarouselView = viewMode === VIEWMODES.carousel;\n\tconst displayControls = (\n\t\t
    \n\t\t\t setViewMode( VIEWMODES.carousel ) }\n\t\t\t\tisPressed={ isCarouselView }\n\t\t\t/>\n\t\t\t setViewMode( VIEWMODES.grid ) }\n\t\t\t\tisPressed={ viewMode === VIEWMODES.grid }\n\t\t\t/>\n\t\t
    \n\t);\n\treturn (\n\t\t
    \n\t\t\t{ isCarouselView && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ displayControls }\n\t\t\t{ isCarouselView && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n};\n\nexport default SetupToolbar;\n","/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { Composite, VisuallyHidden } from '@wordpress/components';\n\nimport { useState } from '@wordpress/element';\nimport { useInstanceId } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockPreview from '../block-preview';\nimport SetupToolbar from './setup-toolbar';\nimport usePatternsSetup from './use-patterns-setup';\nimport { VIEWMODES } from './constants';\n\nconst SetupContent = ( {\n\tviewMode,\n\tactiveSlide,\n\tpatterns,\n\tonBlockPatternSelect,\n\tshowTitles,\n} ) => {\n\tconst containerClass = 'block-editor-block-pattern-setup__container';\n\n\tif ( viewMode === VIEWMODES.carousel ) {\n\t\tconst slideClass = new Map( [\n\t\t\t[ activeSlide, 'active-slide' ],\n\t\t\t[ activeSlide - 1, 'previous-slide' ],\n\t\t\t[ activeSlide + 1, 'next-slide' ],\n\t\t] );\n\t\treturn (\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{ patterns.map( ( pattern, index ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t);\n\t}\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ patterns.map( ( pattern ) => (\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t
    \n\t);\n};\n\nfunction BlockPattern( { pattern, onSelect, showTitles } ) {\n\tconst baseClassName = 'block-editor-block-pattern-setup-list';\n\tconst { blocks, description, viewportWidth = 700 } = pattern;\n\tconst descriptionId = useInstanceId(\n\t\tBlockPattern,\n\t\t`${ baseClassName }__item-description`\n\t);\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t}\n\t\t\t\tid={ `${ baseClassName }__pattern__${ pattern.name }` }\n\t\t\t\trole=\"option\"\n\t\t\t\tonClick={ () => onSelect( blocks ) }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t{ showTitles && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ pattern.title }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\t{ !! description && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ description }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction BlockPatternSlide( { active, className, pattern, minHeight } ) {\n\tconst { blocks, title, description } = pattern;\n\tconst descriptionId = useInstanceId(\n\t\tBlockPatternSlide,\n\t\t'block-editor-block-pattern-setup-list__item-description'\n\t);\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ !! description && (\n\t\t\t\t\n\t\t\t\t\t{ description }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nconst BlockPatternSetup = ( {\n\tclientId,\n\tblockName,\n\tfilterPatternsFn,\n\tonBlockPatternSelect,\n\tinitialViewMode = VIEWMODES.carousel,\n\tshowTitles = false,\n} ) => {\n\tconst [ viewMode, setViewMode ] = useState( initialViewMode );\n\tconst [ activeSlide, setActiveSlide ] = useState( 0 );\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\tconst patterns = usePatternsSetup( clientId, blockName, filterPatternsFn );\n\n\tif ( ! patterns?.length ) {\n\t\treturn null;\n\t}\n\n\tconst onBlockPatternSelectDefault = ( blocks ) => {\n\t\tconst clonedBlocks = blocks.map( ( block ) => cloneBlock( block ) );\n\t\treplaceBlock( clientId, clonedBlocks );\n\t};\n\tconst onPatternSelectCallback =\n\t\tonBlockPatternSelect || onBlockPatternSelectDefault;\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tsetActiveSlide( ( active ) =>\n\t\t\t\t\t\t\tMath.min( active + 1, patterns.length - 1 )\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\thandlePrevious={ () => {\n\t\t\t\t\t\tsetActiveSlide( ( active ) =>\n\t\t\t\t\t\t\tMath.max( active - 1, 0 )\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\tonBlockPatternSelect={ () => {\n\t\t\t\t\t\tonPatternSelectCallback(\n\t\t\t\t\t\t\tpatterns[ activeSlide ].blocks\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\n\t\t\n\t);\n};\n\nexport default BlockPatternSetup;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction usePatternsSetup( clientId, blockName, filterPatternsFn ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetPatternsByBlockTypes,\n\t\t\t\t__experimentalGetAllowedPatterns,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tif ( filterPatternsFn ) {\n\t\t\t\treturn __experimentalGetAllowedPatterns( rootClientId ).filter(\n\t\t\t\t\tfilterPatternsFn\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn getPatternsByBlockTypes( blockName, rootClientId );\n\t\t},\n\t\t[ clientId, blockName, filterPatternsFn ]\n\t);\n}\n\nexport default usePatternsSetup;\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItemsChoice,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { chevronDown } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nfunction VariationsButtons( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Transform to variation' ) }\n\t\t\t\n\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t }\n\t\t\t\t\tisPressed={ selectedValue === variation.name }\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: Name of the block variation */\n\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t\tonClick={ () => onSelectVariation( variation.name ) }\n\t\t\t\t\taria-label={ variation.title }\n\t\t\t\t\tshowTooltip\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t
    \n\t);\n}\n\nfunction VariationsDropdown( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\tconst selectOptions = variations.map(\n\t\t( { name, title, description } ) => ( {\n\t\t\tvalue: name,\n\t\t\tlabel: title,\n\t\t\tinfo: description,\n\t\t} )\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ () => (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction VariationsToggleGroupControl( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ variation.name }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t\t/* translators: %s: Name of the block variation */\n\t\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction __experimentalBlockVariationTransforms( { blockClientId } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { activeBlockVariation, variations, isContentOnly } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t\tgetBlockVariations,\n\t\t\t\t__experimentalHasContentRoleAttribute,\n\t\t\t} = select( blocksStore );\n\t\t\tconst { getBlockName, getBlockAttributes, getBlockEditingMode } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst name = blockClientId && getBlockName( blockClientId );\n\n\t\t\tconst isContentBlock =\n\t\t\t\t__experimentalHasContentRoleAttribute( name );\n\n\t\t\treturn {\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tname,\n\t\t\t\t\tgetBlockAttributes( blockClientId )\n\t\t\t\t),\n\t\t\t\tvariations: name && getBlockVariations( name, 'transform' ),\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( blockClientId ) === 'contentOnly' &&\n\t\t\t\t\t! isContentBlock,\n\t\t\t};\n\t\t},\n\t\t[ blockClientId ]\n\t);\n\n\tconst selectedValue = activeBlockVariation?.name;\n\n\t// Check if each variation has a unique icon.\n\tconst hasUniqueIcons = useMemo( () => {\n\t\tconst variationIcons = new Set();\n\t\tif ( ! variations ) {\n\t\t\treturn false;\n\t\t}\n\t\tvariations.forEach( ( variation ) => {\n\t\t\tif ( variation.icon ) {\n\t\t\t\tvariationIcons.add( variation.icon?.src || variation.icon );\n\t\t\t}\n\t\t} );\n\t\treturn variationIcons.size === variations.length;\n\t}, [ variations ] );\n\n\tconst onSelectVariation = ( variationName ) => {\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\t...variations.find( ( { name } ) => name === variationName )\n\t\t\t\t.attributes,\n\t\t} );\n\t};\n\n\tif ( ! variations?.length || isContentOnly ) {\n\t\treturn null;\n\t}\n\n\tconst baseClass = 'block-editor-block-variation-transforms';\n\n\t// Show buttons if there are more than 5 variations because the ToggleGroupControl does not wrap\n\tconst showButtons = variations.length > 5;\n\n\tconst ButtonComponent = showButtons\n\t\t? VariationsButtons\n\t\t: VariationsToggleGroupControl;\n\n\tconst Component = hasUniqueIcons ? ButtonComponent : VariationsDropdown;\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default __experimentalBlockVariationTransforms;\n","/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nexport default createHigherOrderComponent( ( WrappedComponent ) => {\n\treturn ( props ) => {\n\t\tconst [ colorsFeature, enableCustomColors ] = useSettings(\n\t\t\t'color.palette',\n\t\t\t'color.custom'\n\t\t);\n\t\tconst {\n\t\t\tcolors = colorsFeature,\n\t\t\tdisableCustomColors = ! enableCustomColors,\n\t\t} = props;\n\t\tconst hasColorsToChoose =\n\t\t\t( colors && colors.length > 0 ) || ! disableCustomColors;\n\t\treturn (\n\t\t\t\n\t\t);\n\t};\n}, 'withColorContext' );\n","/**\n * WordPress dependencies\n */\nimport { ColorPalette } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport withColorContext from './with-color-context';\n\nexport default withColorContext( ColorPalette );\n","/**\n * Internal dependencies\n */\nimport ColorGradientControl from '../colors-gradients/control';\n\nexport default function ColorPaletteControl( {\n\tonChange,\n\tvalue,\n\t...otherProps\n} ) {\n\treturn (\n\t\t\n\t);\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"date\"];","/**\n * WordPress dependencies\n */\nimport { _x, __ } from '@wordpress/i18n';\nimport { dateI18n, humanTimeDiff } from '@wordpress/date';\nimport { useState, createInterpolateElement } from '@wordpress/element';\nimport {\n\tTextControl,\n\tExternalLink,\n\tVisuallyHidden,\n\tToggleControl,\n\t__experimentalVStack as VStack,\n\tCustomSelectControl,\n} from '@wordpress/components';\n\n// So that we illustrate the different formats in the dropdown properly, show a date that is\n// somwhat recent, has a day greater than 12, and a month with more than three letters.\nconst exampleDate = new Date();\nexampleDate.setDate( 20 );\nexampleDate.setMonth( exampleDate.getMonth() - 3 );\nif ( exampleDate.getMonth() === 4 ) {\n\t// May has three letters, so use March.\n\texampleDate.setMonth( 3 );\n}\n\n/**\n * The `DateFormatPicker` component renders controls that let the user choose a\n * _date format_. That is, how they want their dates to be formatted.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/date-format-picker/README.md\n *\n * @param {Object} props\n * @param {string|null} props.format The selected date\n * format. If\n * `null`,\n * _Default_ is\n * selected.\n * @param {string} props.defaultFormat The date format that\n * will be used if the\n * user selects\n * 'Default'.\n * @param {( format: string|null ) => void} props.onChange Called when a\n * selection is\n * made. If `null`,\n * _Default_ is\n * selected.\n */\nexport default function DateFormatPicker( {\n\tformat,\n\tdefaultFormat,\n\tonChange,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t{ __( 'Date format' ) }\n\t\t\t\n\t\t\t\t\tonChange( checked ? null : defaultFormat )\n\t\t\t\t}\n\t\t\t/>\n\t\t\t{ format && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nfunction NonDefaultControls( { format, onChange } ) {\n\t// Suggest a short format, medium format, long format, and a standardised\n\t// (YYYY-MM-DD) format. The short, medium, and long formats are localised as\n\t// different languages have different ways of writing these. For example, 'F\n\t// j, Y' (April 20, 2022) in American English (en_US) is 'j. F Y' (20. April\n\t// 2022) in German (de). The resultant array is de-duplicated as some\n\t// languages will use the same format string for short, medium, and long\n\t// formats.\n\tconst suggestedFormats = [\n\t\t...new Set( [\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t'Y-m-d',\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'n/j/Y', 'short date format' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'n/j/Y g:i A', 'short date format with time' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'M j, Y', 'medium date format' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'M j, Y g:i A', 'medium date format with time' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'F j, Y', 'long date format' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'M j', 'short date format without the year' ),\n\t\t] ),\n\t];\n\n\tconst suggestedOptions = [\n\t\t...suggestedFormats.map( ( suggestedFormat, index ) => ( {\n\t\t\tkey: `suggested-${ index }`,\n\t\t\tname: dateI18n( suggestedFormat, exampleDate ),\n\t\t\tformat: suggestedFormat,\n\t\t} ) ),\n\t\t{\n\t\t\tkey: 'human-diff',\n\t\t\tname: humanTimeDiff( exampleDate ),\n\t\t\tformat: 'human-diff',\n\t\t},\n\t];\n\n\tconst customOption = {\n\t\tkey: 'custom',\n\t\tname: __( 'Custom' ),\n\t\tclassName:\n\t\t\t'block-editor-date-format-picker__custom-format-select-control__custom-option',\n\t\thint: __( 'Enter your own date format' ),\n\t};\n\n\tconst [ isCustom, setIsCustom ] = useState(\n\t\t() =>\n\t\t\t!! format &&\n\t\t\t! suggestedOptions.some( ( option ) => option.format === format )\n\t);\n\n\treturn (\n\t\t\n\t\t\t option.format === format\n\t\t\t\t\t\t ) ?? customOption\n\t\t\t\t}\n\t\t\t\tonChange={ ( { selectedItem } ) => {\n\t\t\t\t\tif ( selectedItem === customOption ) {\n\t\t\t\t\t\tsetIsCustom( true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetIsCustom( false );\n\t\t\t\t\t\tonChange( selectedItem.format );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ isCustom && (\n\t\t\t\tformat string.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLink: (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t\tvalue={ format }\n\t\t\t\t\tonChange={ ( value ) => onChange( value ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tColorIndicator,\n\tDropdown,\n\tFlexItem,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\t__experimentalHStack as HStack,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport ColorGradientControl from './control';\n\n// When the `ColorGradientSettingsDropdown` controls are being rendered to a\n// `ToolsPanel` they must be wrapped in a `ToolsPanelItem`.\nconst WithToolsPanelItem = ( { setting, children, panelId, ...props } ) => {\n\tconst clearValue = () => {\n\t\tif ( setting.colorValue ) {\n\t\t\tsetting.onColorChange();\n\t\t} else if ( setting.gradientValue ) {\n\t\t\tsetting.onGradientChange();\n\t\t}\n\t};\n\treturn (\n\t\t {\n\t\t\t\treturn !! setting.colorValue || !! setting.gradientValue;\n\t\t\t} }\n\t\t\tlabel={ setting.label }\n\t\t\tonDeselect={ clearValue }\n\t\t\tisShownByDefault={\n\t\t\t\tsetting.isShownByDefault !== undefined\n\t\t\t\t\t? setting.isShownByDefault\n\t\t\t\t\t: true\n\t\t\t}\n\t\t\t{ ...props }\n\t\t\tclassName=\"block-editor-tools-panel-color-gradient-settings__item\"\n\t\t\tpanelId={ panelId }\n\t\t\t// Pass resetAllFilter if supplied due to rendering via SlotFill\n\t\t\t// into parent ToolsPanel.\n\t\t\tresetAllFilter={ setting.resetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t\n\t);\n};\n\nconst LabeledColorIndicator = ( { colorValue, label } ) => (\n\t\n\t\t\n\t\t\n\t\t\t{ label }\n\t\t\n\t\n);\n\n// Renders a color dropdown's toggle as an `Item` if it is within an `ItemGroup`\n// or as a `Button` if it isn't e.g. the controls are being rendered in\n// a `ToolsPanel`.\nconst renderToggle =\n\t( settings ) =>\n\t( { onToggle, isOpen } ) => {\n\t\tconst { colorValue, label } = settings;\n\n\t\tconst toggleProps = {\n\t\t\tonClick: onToggle,\n\t\t\tclassName: clsx(\n\t\t\t\t'block-editor-panel-color-gradient-settings__dropdown',\n\t\t\t\t{ 'is-open': isOpen }\n\t\t\t),\n\t\t\t'aria-expanded': isOpen,\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n// Renders a collection of color controls as dropdowns. Depending upon the\n// context in which these dropdowns are being rendered, they may be wrapped\n// in an `ItemGroup` with each dropdown's toggle as an `Item`, or alternatively,\n// the may be individually wrapped in a `ToolsPanelItem` with the toggle as\n// a regular `Button`.\n//\n// For more context see: https://github.com/WordPress/gutenberg/pull/40084\nexport default function ColorGradientSettingsDropdown( {\n\tcolors,\n\tdisableCustomColors,\n\tdisableCustomGradients,\n\tenableAlpha,\n\tgradients,\n\tsettings,\n\t__experimentalIsRenderedInSidebar,\n\t...props\n} ) {\n\tlet popoverProps;\n\tif ( __experimentalIsRenderedInSidebar ) {\n\t\tpopoverProps = {\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t};\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ settings.map( ( setting, index ) => {\n\t\t\t\tconst controlProps = {\n\t\t\t\t\tclearable: false,\n\t\t\t\t\tcolorValue: setting.colorValue,\n\t\t\t\t\tcolors,\n\t\t\t\t\tdisableCustomColors,\n\t\t\t\t\tdisableCustomGradients,\n\t\t\t\t\tenableAlpha,\n\t\t\t\t\tgradientValue: setting.gradientValue,\n\t\t\t\t\tgradients,\n\t\t\t\t\tlabel: setting.label,\n\t\t\t\t\tonColorChange: setting.onColorChange,\n\t\t\t\t\tonGradientChange: setting.onGradientChange,\n\t\t\t\t\tshowTitle: false,\n\t\t\t\t\t__experimentalIsRenderedInSidebar,\n\t\t\t\t\t...setting,\n\t\t\t\t};\n\t\t\t\tconst toggleSettings = {\n\t\t\t\t\tcolorValue: setting.gradientValue ?? setting.colorValue,\n\t\t\t\t\tlabel: setting.label,\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\tsetting && (\n\t\t\t\t\t\t// If not in an `ItemGroup` wrap the dropdown in a\n\t\t\t\t\t\t// `ToolsPanelItem`\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalSpacer as Spacer,\n\t__experimentalToolsPanel as ToolsPanel,\n} from '@wordpress/components';\nimport { useRegistry } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ColorGradientSettingsDropdown from './dropdown';\nimport useColorsAndGradientsPalettes from './use-multiple-origin-colors-and-gradients';\n\nconst colorsAndGradientKeys = [\n\t'colors',\n\t'disableCustomColors',\n\t'gradients',\n\t'disableCustomGradients',\n];\n\nexport const PanelColorGradientSettingsInner = ( {\n\tclassName,\n\tcolors,\n\tgradients,\n\tdisableCustomColors,\n\tdisableCustomGradients,\n\tchildren,\n\tsettings,\n\ttitle,\n\tshowTitle = true,\n\t__experimentalIsRenderedInSidebar,\n\tenableAlpha,\n} ) => {\n\tconst panelId = useInstanceId( PanelColorGradientSettingsInner );\n\tconst { batch } = useRegistry();\n\tif (\n\t\t( ! colors || colors.length === 0 ) &&\n\t\t( ! gradients || gradients.length === 0 ) &&\n\t\tdisableCustomColors &&\n\t\tdisableCustomGradients &&\n\t\tsettings?.every(\n\t\t\t( setting ) =>\n\t\t\t\t( ! setting.colors || setting.colors.length === 0 ) &&\n\t\t\t\t( ! setting.gradients || setting.gradients.length === 0 ) &&\n\t\t\t\t( setting.disableCustomColors === undefined ||\n\t\t\t\t\tsetting.disableCustomColors ) &&\n\t\t\t\t( setting.disableCustomGradients === undefined ||\n\t\t\t\t\tsetting.disableCustomGradients )\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tbatch( () => {\n\t\t\t\t\tsettings.forEach(\n\t\t\t\t\t\t( {\n\t\t\t\t\t\t\tcolorValue,\n\t\t\t\t\t\t\tgradientValue,\n\t\t\t\t\t\t\tonColorChange,\n\t\t\t\t\t\t\tonGradientChange,\n\t\t\t\t\t\t} ) => {\n\t\t\t\t\t\t\tif ( colorValue ) {\n\t\t\t\t\t\t\t\tonColorChange();\n\t\t\t\t\t\t\t} else if ( gradientValue ) {\n\t\t\t\t\t\t\t\tonGradientChange();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tpanelId={ panelId }\n\t\t\t__experimentalFirstVisibleItemClass=\"first\"\n\t\t\t__experimentalLastVisibleItemClass=\"last\"\n\t\t>\n\t\t\t\n\t\t\t{ !! children && (\n\t\t\t\t<>\n\t\t\t\t\t { children }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n};\n\nconst PanelColorGradientSettingsSelect = ( props ) => {\n\tconst colorGradientSettings = useColorsAndGradientsPalettes();\n\treturn (\n\t\t\n\t);\n};\n\nconst PanelColorGradientSettings = ( props ) => {\n\tif (\n\t\tcolorsAndGradientKeys.every( ( key ) => props.hasOwnProperty( key ) )\n\t) {\n\t\treturn ;\n\t}\n\treturn ;\n};\n\nexport default PanelColorGradientSettings;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst aspectRatio = (\n\t\n\t\t\n\t\n);\n\nexport default aspectRatio;\n","export const MIN_ZOOM = 100;\nexport const MAX_ZOOM = 300;\nexport const POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useSaveImage from './use-save-image';\nimport useTransformImage from './use-transform-image';\n\nconst ImageEditingContext = createContext( {} );\n\nexport const useImageEditingContext = () => useContext( ImageEditingContext );\n\nexport default function ImageEditingProvider( {\n\tid,\n\turl,\n\tnaturalWidth,\n\tnaturalHeight,\n\tonFinishEditing,\n\tonSaveImage,\n\tchildren,\n} ) {\n\tconst transformImage = useTransformImage( {\n\t\turl,\n\t\tnaturalWidth,\n\t\tnaturalHeight,\n\t} );\n\n\tconst saveImage = useSaveImage( {\n\t\tid,\n\t\turl,\n\t\tonSaveImage,\n\t\tonFinishEditing,\n\t\t...transformImage,\n\t} );\n\n\tconst providerValue = useMemo(\n\t\t() => ( {\n\t\t\t...transformImage,\n\t\t\t...saveImage,\n\t\t} ),\n\t\t[ transformImage, saveImage ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { applyFilters } from '@wordpress/hooks';\n\nexport default function useTransformImage( {\n\turl,\n\tnaturalWidth,\n\tnaturalHeight,\n} ) {\n\tconst [ editedUrl, setEditedUrl ] = useState();\n\tconst [ crop, setCrop ] = useState();\n\tconst [ position, setPosition ] = useState( { x: 0, y: 0 } );\n\tconst [ zoom, setZoom ] = useState( 100 );\n\tconst [ rotation, setRotation ] = useState( 0 );\n\tconst defaultAspect = naturalWidth / naturalHeight;\n\tconst [ aspect, setAspect ] = useState( defaultAspect );\n\n\tconst rotateClockwise = useCallback( () => {\n\t\tconst angle = ( rotation + 90 ) % 360;\n\n\t\tlet naturalAspectRatio = defaultAspect;\n\n\t\tif ( rotation % 180 === 90 ) {\n\t\t\tnaturalAspectRatio = 1 / defaultAspect;\n\t\t}\n\n\t\tif ( angle === 0 ) {\n\t\t\tsetEditedUrl();\n\t\t\tsetRotation( angle );\n\t\t\tsetAspect( defaultAspect );\n\t\t\tsetPosition( ( prevPosition ) => ( {\n\t\t\t\tx: -( prevPosition.y * naturalAspectRatio ),\n\t\t\t\ty: prevPosition.x * naturalAspectRatio,\n\t\t\t} ) );\n\t\t\treturn;\n\t\t}\n\n\t\tfunction editImage( event ) {\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\n\t\t\tlet translateX = 0;\n\t\t\tlet translateY = 0;\n\n\t\t\tif ( angle % 180 ) {\n\t\t\t\tcanvas.width = event.target.height;\n\t\t\t\tcanvas.height = event.target.width;\n\t\t\t} else {\n\t\t\t\tcanvas.width = event.target.width;\n\t\t\t\tcanvas.height = event.target.height;\n\t\t\t}\n\n\t\t\tif ( angle === 90 || angle === 180 ) {\n\t\t\t\ttranslateX = canvas.width;\n\t\t\t}\n\n\t\t\tif ( angle === 270 || angle === 180 ) {\n\t\t\t\ttranslateY = canvas.height;\n\t\t\t}\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\n\t\t\tcontext.translate( translateX, translateY );\n\t\t\tcontext.rotate( ( angle * Math.PI ) / 180 );\n\t\t\tcontext.drawImage( event.target, 0, 0 );\n\n\t\t\tcanvas.toBlob( ( blob ) => {\n\t\t\t\tsetEditedUrl( URL.createObjectURL( blob ) );\n\t\t\t\tsetRotation( angle );\n\t\t\t\tsetAspect( canvas.width / canvas.height );\n\t\t\t\tsetPosition( ( prevPosition ) => ( {\n\t\t\t\t\tx: -( prevPosition.y * naturalAspectRatio ),\n\t\t\t\t\ty: prevPosition.x * naturalAspectRatio,\n\t\t\t\t} ) );\n\t\t\t} );\n\t\t}\n\n\t\tconst el = new window.Image();\n\t\tel.src = url;\n\t\tel.onload = editImage;\n\n\t\tconst imgCrossOrigin = applyFilters(\n\t\t\t'media.crossOrigin',\n\t\t\tundefined,\n\t\t\turl\n\t\t);\n\t\tif ( typeof imgCrossOrigin === 'string' ) {\n\t\t\tel.crossOrigin = imgCrossOrigin;\n\t\t}\n\t}, [ rotation, defaultAspect, url ] );\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\teditedUrl,\n\t\t\tsetEditedUrl,\n\t\t\tcrop,\n\t\t\tsetCrop,\n\t\t\tposition,\n\t\t\tsetPosition,\n\t\t\tzoom,\n\t\t\tsetZoom,\n\t\t\trotation,\n\t\t\tsetRotation,\n\t\t\trotateClockwise,\n\t\t\taspect,\n\t\t\tsetAspect,\n\t\t\tdefaultAspect,\n\t\t} ),\n\t\t[\n\t\t\teditedUrl,\n\t\t\tcrop,\n\t\t\tposition,\n\t\t\tzoom,\n\t\t\trotation,\n\t\t\trotateClockwise,\n\t\t\taspect,\n\t\t\tdefaultAspect,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\n// Disable Reason: Needs to be refactored.\n// eslint-disable-next-line no-restricted-imports\nimport apiFetch from '@wordpress/api-fetch';\nimport { useDispatch } from '@wordpress/data';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\nexport default function useSaveImage( {\n\tcrop,\n\trotation,\n\turl,\n\tid,\n\tonSaveImage,\n\tonFinishEditing,\n} ) {\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst [ isInProgress, setIsInProgress ] = useState( false );\n\n\tconst cancel = useCallback( () => {\n\t\tsetIsInProgress( false );\n\t\tonFinishEditing();\n\t}, [ onFinishEditing ] );\n\n\tconst apply = useCallback( () => {\n\t\tsetIsInProgress( true );\n\n\t\tconst modifiers = [];\n\n\t\tif ( rotation > 0 ) {\n\t\t\tmodifiers.push( {\n\t\t\t\ttype: 'rotate',\n\t\t\t\targs: {\n\t\t\t\t\tangle: rotation,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The crop script may return some very small, sub-pixel values when the image was not cropped.\n\t\t// Crop only when the new size has changed by more than 0.1%.\n\t\tif ( crop.width < 99.9 || crop.height < 99.9 ) {\n\t\t\tmodifiers.push( {\n\t\t\t\ttype: 'crop',\n\t\t\t\targs: {\n\t\t\t\t\tleft: crop.x,\n\t\t\t\t\ttop: crop.y,\n\t\t\t\t\twidth: crop.width,\n\t\t\t\t\theight: crop.height,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\tif ( modifiers.length === 0 ) {\n\t\t\t// No changes to apply.\n\t\t\tsetIsInProgress( false );\n\t\t\tonFinishEditing();\n\t\t\treturn;\n\t\t}\n\n\t\tapiFetch( {\n\t\t\tpath: `/wp/v2/media/${ id }/edit`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { src: url, modifiers },\n\t\t} )\n\t\t\t.then( ( response ) => {\n\t\t\t\tonSaveImage( {\n\t\t\t\t\tid: response.id,\n\t\t\t\t\turl: response.source_url,\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tcreateErrorNotice(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: 1. Error message */\n\t\t\t\t\t\t__( 'Could not edit image. %s' ),\n\t\t\t\t\t\tstripHTML( error.message )\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'image-editing-error',\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} )\n\t\t\t.finally( () => {\n\t\t\t\tsetIsInProgress( false );\n\t\t\t\tonFinishEditing();\n\t\t\t} );\n\t}, [\n\t\tcrop,\n\t\trotation,\n\t\tid,\n\t\turl,\n\t\tonSaveImage,\n\t\tcreateErrorNotice,\n\t\tonFinishEditing,\n\t] );\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\tisInProgress,\n\t\t\tapply,\n\t\t\tcancel,\n\t\t} ),\n\t\t[ isInProgress, apply, cancel ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { check, aspectRatio as aspectRatioIcon } from '@wordpress/icons';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\nimport { POPOVER_PROPS } from './constants';\nimport { useImageEditingContext } from './context';\n\nfunction AspectRatioGroup( {\n\taspectRatios,\n\tisDisabled,\n\tlabel,\n\tonClick,\n\tvalue,\n} ) {\n\treturn (\n\t\t\n\t\t\t{ aspectRatios.map( ( { name, slug, ratio } ) => (\n\t\t\t\t {\n\t\t\t\t\t\tonClick( ratio );\n\t\t\t\t\t} }\n\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\tisSelected={ ratio === value }\n\t\t\t\t\ticon={ ratio === value ? check : undefined }\n\t\t\t\t>\n\t\t\t\t\t{ name }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport function ratioToNumber( str ) {\n\t// TODO: support two-value aspect ratio?\n\t// https://css-tricks.com/almanac/properties/a/aspect-ratio/#aa-it-can-take-two-values\n\tconst [ a, b, ...rest ] = str.split( '/' ).map( Number );\n\tif (\n\t\ta <= 0 ||\n\t\tb <= 0 ||\n\t\tNumber.isNaN( a ) ||\n\t\tNumber.isNaN( b ) ||\n\t\trest.length\n\t) {\n\t\treturn NaN;\n\t}\n\treturn b ? a / b : a;\n}\n\nfunction presetRatioAsNumber( { ratio, ...rest } ) {\n\treturn {\n\t\tratio: ratioToNumber( ratio ),\n\t\t...rest,\n\t};\n}\n\nexport default function AspectRatioDropdown( { toggleProps } ) {\n\tconst { isInProgress, aspect, setAspect, defaultAspect } =\n\t\tuseImageEditingContext();\n\n\tconst [ defaultRatios, themeRatios, showDefaultRatios ] = useSettings(\n\t\t'dimensions.aspectRatios.default',\n\t\t'dimensions.aspectRatios.theme',\n\t\t'dimensions.defaultAspectRatios'\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\taspectRatios={ [\n\t\t\t\t\t\t\t// All ratios should be mirrored in AspectRatioTool in @wordpress/block-editor.\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tslug: 'original',\n\t\t\t\t\t\t\t\tname: __( 'Original' ),\n\t\t\t\t\t\t\t\taspect: defaultAspect,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...( showDefaultRatios\n\t\t\t\t\t\t\t\t? defaultRatios\n\t\t\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio === 1 )\n\t\t\t\t\t\t\t\t: [] ),\n\t\t\t\t\t\t] }\n\t\t\t\t\t/>\n\t\t\t\t\t{ themeRatios?.length > 0 && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ themeRatios }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ showDefaultRatios && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ defaultRatios\n\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio > 1 ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ showDefaultRatios && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ defaultRatios\n\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio < 1 ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Area, MediaSize, Point, Size } from './types'\n\n/**\n * Compute the dimension of the crop area based on media size,\n * aspect ratio and optionally rotation\n */\nexport function getCropSize(\n mediaWidth: number,\n mediaHeight: number,\n containerWidth: number,\n containerHeight: number,\n aspect: number,\n rotation = 0\n): Size {\n const { width, height } = rotateSize(mediaWidth, mediaHeight, rotation)\n const fittingWidth = Math.min(width, containerWidth)\n const fittingHeight = Math.min(height, containerHeight)\n\n if (fittingWidth > fittingHeight * aspect) {\n return {\n width: fittingHeight * aspect,\n height: fittingHeight,\n }\n }\n\n return {\n width: fittingWidth,\n height: fittingWidth / aspect,\n }\n}\n\n/**\n * Compute media zoom.\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\n */\nexport function getMediaZoom(mediaSize: MediaSize) {\n // Take the axis with more pixels to improve accuracy\n return mediaSize.width > mediaSize.height\n ? mediaSize.width / mediaSize.naturalWidth\n : mediaSize.height / mediaSize.naturalHeight\n}\n\n/**\n * Ensure a new media position stays in the crop area.\n */\nexport function restrictPosition(\n position: Point,\n mediaSize: Size,\n cropSize: Size,\n zoom: number,\n rotation = 0\n): Point {\n const { width, height } = rotateSize(mediaSize.width, mediaSize.height, rotation)\n\n return {\n x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n y: restrictPositionCoord(position.y, height, cropSize.height, zoom),\n }\n}\n\nfunction restrictPositionCoord(\n position: number,\n mediaSize: number,\n cropSize: number,\n zoom: number\n): number {\n const maxPosition = (mediaSize * zoom) / 2 - cropSize / 2\n\n return clamp(position, -maxPosition, maxPosition)\n}\n\nexport function getDistanceBetweenPoints(pointA: Point, pointB: Point) {\n return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2))\n}\n\nexport function getRotationBetweenPoints(pointA: Point, pointB: Point) {\n return (Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180) / Math.PI\n}\n\n/**\n * Compute the output cropped area of the media in percentages and pixels.\n * x/y are the top-left coordinates on the src media\n */\nexport function computeCroppedArea(\n crop: Point,\n mediaSize: MediaSize,\n cropSize: Size,\n aspect: number,\n zoom: number,\n rotation = 0,\n restrictPosition = true\n): { croppedAreaPercentages: Area; croppedAreaPixels: Area } {\n // if the media is rotated by the user, we cannot limit the position anymore\n // as it might need to be negative.\n const limitAreaFn = restrictPosition ? limitArea : noOp\n\n const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation)\n const mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation)\n\n // calculate the crop area in percentages\n // in the rotated space\n const croppedAreaPercentages = {\n x: limitAreaFn(\n 100,\n (((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width) *\n 100\n ),\n y: limitAreaFn(\n 100,\n (((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) /\n mediaBBoxSize.height) *\n 100\n ),\n width: limitAreaFn(100, ((cropSize.width / mediaBBoxSize.width) * 100) / zoom),\n height: limitAreaFn(100, ((cropSize.height / mediaBBoxSize.height) * 100) / zoom),\n }\n\n // we compute the pixels size naively\n const widthInPixels = Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.width,\n (croppedAreaPercentages.width * mediaNaturalBBoxSize.width) / 100\n )\n )\n const heightInPixels = Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.height,\n (croppedAreaPercentages.height * mediaNaturalBBoxSize.height) / 100\n )\n )\n const isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect\n\n // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n // thus we want to compute the width from the height and aspect for accuracy.\n // Otherwise, we compute the height from width and aspect.\n const sizePixels = isImgWiderThanHigh\n ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels,\n }\n : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect),\n }\n\n const croppedAreaPixels = {\n ...sizePixels,\n x: Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.width - sizePixels.width,\n (croppedAreaPercentages.x * mediaNaturalBBoxSize.width) / 100\n )\n ),\n y: Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.height - sizePixels.height,\n (croppedAreaPercentages.y * mediaNaturalBBoxSize.height) / 100\n )\n ),\n }\n\n return { croppedAreaPercentages, croppedAreaPixels }\n}\n\n/**\n * Ensure the returned value is between 0 and max\n */\nfunction limitArea(max: number, value: number): number {\n return Math.min(max, Math.max(0, value))\n}\n\nfunction noOp(_max: number, value: number) {\n return value\n}\n\n/**\n * Compute crop and zoom from the croppedAreaPercentages.\n */\nexport function getInitialCropFromCroppedAreaPercentages(\n croppedAreaPercentages: Area,\n mediaSize: MediaSize,\n rotation: number,\n cropSize: Size,\n minZoom: number,\n maxZoom: number\n) {\n const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation)\n\n // This is the inverse process of computeCroppedArea\n const zoom = clamp(\n (cropSize.width / mediaBBoxSize.width) * (100 / croppedAreaPercentages.width),\n minZoom,\n maxZoom\n )\n\n const crop = {\n x:\n (zoom * mediaBBoxSize.width) / 2 -\n cropSize.width / 2 -\n mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n y:\n (zoom * mediaBBoxSize.height) / 2 -\n cropSize.height / 2 -\n mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100),\n }\n\n return { crop, zoom }\n}\n\n/**\n * Compute zoom from the croppedAreaPixels\n */\nfunction getZoomFromCroppedAreaPixels(\n croppedAreaPixels: Area,\n mediaSize: MediaSize,\n cropSize: Size\n): number {\n const mediaZoom = getMediaZoom(mediaSize)\n\n return cropSize.height > cropSize.width\n ? cropSize.height / (croppedAreaPixels.height * mediaZoom)\n : cropSize.width / (croppedAreaPixels.width * mediaZoom)\n}\n\n/**\n * Compute crop and zoom from the croppedAreaPixels\n */\nexport function getInitialCropFromCroppedAreaPixels(\n croppedAreaPixels: Area,\n mediaSize: MediaSize,\n rotation = 0,\n cropSize: Size,\n minZoom: number,\n maxZoom: number\n): { crop: Point; zoom: number } {\n const mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation)\n\n const zoom = clamp(\n getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize),\n minZoom,\n maxZoom\n )\n\n const cropZoom =\n cropSize.height > cropSize.width\n ? cropSize.height / croppedAreaPixels.height\n : cropSize.width / croppedAreaPixels.width\n\n const crop = {\n x:\n ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n y:\n ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) *\n cropZoom,\n }\n return { crop, zoom }\n}\n\n/**\n * Return the point that is the center of point a and b\n */\nexport function getCenter(a: Point, b: Point): Point {\n return {\n x: (b.x + a.x) / 2,\n y: (b.y + a.y) / 2,\n }\n}\n\nexport function getRadianAngle(degreeValue: number) {\n return (degreeValue * Math.PI) / 180\n}\n\n/**\n * Returns the new bounding area of a rotated rectangle.\n */\nexport function rotateSize(width: number, height: number, rotation: number): Size {\n const rotRad = getRadianAngle(rotation)\n\n return {\n width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height),\n }\n}\n\n/**\n * Clamp value between min and max\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\n/**\n * Combine multiple class names into a single string.\n */\nexport function classNames(...args: (boolean | string | number | undefined | void | null)[]) {\n return args\n .filter((value) => {\n if (typeof value === 'string' && value.length > 0) {\n return true\n }\n\n return false\n })\n .join(' ')\n .trim()\n}\n","import * as React from 'react'\nimport normalizeWheel from 'normalize-wheel'\nimport { Area, MediaSize, Point, Size, VideoSrc } from './types'\nimport {\n getCropSize,\n restrictPosition,\n getDistanceBetweenPoints,\n getRotationBetweenPoints,\n computeCroppedArea,\n getCenter,\n getInitialCropFromCroppedAreaPixels,\n getInitialCropFromCroppedAreaPercentages,\n classNames,\n clamp,\n} from './helpers'\nimport cssStyles from './styles.css'\n\nexport type CropperProps = {\n image?: string\n video?: string | VideoSrc[]\n transform?: string\n crop: Point\n zoom: number\n rotation: number\n aspect: number\n minZoom: number\n maxZoom: number\n cropShape: 'rect' | 'round'\n cropSize?: Size\n objectFit?: 'contain' | 'cover' | 'horizontal-cover' | 'vertical-cover'\n showGrid?: boolean\n zoomSpeed: number\n zoomWithScroll?: boolean\n onCropChange: (location: Point) => void\n onZoomChange?: (zoom: number) => void\n onRotationChange?: (rotation: number) => void\n onCropComplete?: (croppedArea: Area, croppedAreaPixels: Area) => void\n onCropAreaChange?: (croppedArea: Area, croppedAreaPixels: Area) => void\n onCropSizeChange?: (cropSize: Size) => void\n onInteractionStart?: () => void\n onInteractionEnd?: () => void\n onMediaLoaded?: (mediaSize: MediaSize) => void\n style: {\n containerStyle?: React.CSSProperties\n mediaStyle?: React.CSSProperties\n cropAreaStyle?: React.CSSProperties\n }\n classes: {\n containerClassName?: string\n mediaClassName?: string\n cropAreaClassName?: string\n }\n restrictPosition: boolean\n mediaProps: React.ImgHTMLAttributes | React.VideoHTMLAttributes\n disableAutomaticStylesInjection?: boolean\n initialCroppedAreaPixels?: Area\n initialCroppedAreaPercentages?: Area\n onTouchRequest?: (e: React.TouchEvent) => boolean\n onWheelRequest?: (e: WheelEvent) => boolean\n setImageRef?: (ref: React.RefObject) => void\n setVideoRef?: (ref: React.RefObject) => void\n setMediaSize?: (size: MediaSize) => void\n setCropSize?: (size: Size) => void\n nonce?: string\n}\n\ntype State = {\n cropSize: Size | null\n hasWheelJustStarted: boolean\n mediaObjectFit: String | undefined\n}\n\nconst MIN_ZOOM = 1\nconst MAX_ZOOM = 3\n\ntype GestureEvent = UIEvent & {\n rotation: number\n scale: number\n clientX: number\n clientY: number\n}\n\nclass Cropper extends React.Component {\n static defaultProps = {\n zoom: 1,\n rotation: 0,\n aspect: 4 / 3,\n maxZoom: MAX_ZOOM,\n minZoom: MIN_ZOOM,\n cropShape: 'rect' as const,\n objectFit: 'contain' as const,\n showGrid: true,\n style: {},\n classes: {},\n mediaProps: {},\n zoomSpeed: 1,\n restrictPosition: true,\n zoomWithScroll: true,\n }\n\n imageRef: React.RefObject = React.createRef()\n videoRef: React.RefObject = React.createRef()\n containerPosition: Point = { x: 0, y: 0 }\n containerRef: HTMLDivElement | null = null\n styleRef: HTMLStyleElement | null = null\n containerRect: DOMRect | null = null\n mediaSize: MediaSize = { width: 0, height: 0, naturalWidth: 0, naturalHeight: 0 }\n dragStartPosition: Point = { x: 0, y: 0 }\n dragStartCrop: Point = { x: 0, y: 0 }\n gestureZoomStart = 0\n gestureRotationStart = 0\n isTouching = false\n lastPinchDistance = 0\n lastPinchRotation = 0\n rafDragTimeout: number | null = null\n rafPinchTimeout: number | null = null\n wheelTimer: number | null = null\n currentDoc: Document | null = typeof document !== 'undefined' ? document : null\n currentWindow: Window | null = typeof window !== 'undefined' ? window : null\n resizeObserver: ResizeObserver | null = null\n\n state: State = {\n cropSize: null,\n hasWheelJustStarted: false,\n mediaObjectFit: undefined,\n }\n\n componentDidMount() {\n if (!this.currentDoc || !this.currentWindow) return\n if (this.containerRef) {\n if (this.containerRef.ownerDocument) {\n this.currentDoc = this.containerRef.ownerDocument\n }\n if (this.currentDoc.defaultView) {\n this.currentWindow = this.currentDoc.defaultView\n }\n\n this.initResizeObserver()\n // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.addEventListener('resize', this.computeSizes)\n }\n this.props.zoomWithScroll &&\n this.containerRef.addEventListener('wheel', this.onWheel, { passive: false })\n this.containerRef.addEventListener('gesturestart', this.onGestureStart as EventListener)\n }\n\n this.currentDoc.addEventListener('scroll', this.onScroll)\n\n if (!this.props.disableAutomaticStylesInjection) {\n this.styleRef = this.currentDoc.createElement('style')\n this.styleRef.setAttribute('type', 'text/css')\n if (this.props.nonce) {\n this.styleRef.setAttribute('nonce', this.props.nonce)\n }\n this.styleRef.innerHTML = cssStyles\n this.currentDoc.head.appendChild(this.styleRef)\n }\n\n // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n if (this.imageRef.current && this.imageRef.current.complete) {\n this.onMediaLoad()\n }\n\n // set image and video refs in the parent if the callbacks exist\n if (this.props.setImageRef) {\n this.props.setImageRef(this.imageRef)\n }\n\n if (this.props.setVideoRef) {\n this.props.setVideoRef(this.videoRef)\n }\n }\n\n componentWillUnmount() {\n if (!this.currentDoc || !this.currentWindow) return\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.removeEventListener('resize', this.computeSizes)\n }\n this.resizeObserver?.disconnect()\n if (this.containerRef) {\n this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari)\n }\n\n if (this.styleRef) {\n this.styleRef.parentNode?.removeChild(this.styleRef)\n }\n\n this.cleanEvents()\n this.props.zoomWithScroll && this.clearScrollEvent()\n }\n\n componentDidUpdate(prevProps: CropperProps) {\n if (prevProps.rotation !== this.props.rotation) {\n this.computeSizes()\n this.recomputeCropPosition()\n } else if (prevProps.aspect !== this.props.aspect) {\n this.computeSizes()\n } else if (prevProps.objectFit !== this.props.objectFit) {\n this.computeSizes()\n } else if (prevProps.zoom !== this.props.zoom) {\n this.recomputeCropPosition()\n } else if (\n prevProps.cropSize?.height !== this.props.cropSize?.height ||\n prevProps.cropSize?.width !== this.props.cropSize?.width\n ) {\n this.computeSizes()\n } else if (\n prevProps.crop?.x !== this.props.crop?.x ||\n prevProps.crop?.y !== this.props.crop?.y\n ) {\n this.emitCropAreaChange()\n }\n if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n this.props.zoomWithScroll\n ? this.containerRef.addEventListener('wheel', this.onWheel, { passive: false })\n : this.clearScrollEvent()\n }\n if (prevProps.video !== this.props.video) {\n this.videoRef.current?.load()\n }\n\n const objectFit = this.getObjectFit()\n if (objectFit !== this.state.mediaObjectFit) {\n this.setState({ mediaObjectFit: objectFit }, this.computeSizes)\n }\n }\n\n initResizeObserver = () => {\n if (typeof window.ResizeObserver === 'undefined' || !this.containerRef) {\n return\n }\n let isFirstResize = true\n this.resizeObserver = new window.ResizeObserver((entries) => {\n if (isFirstResize) {\n isFirstResize = false // observe() is called on mount, we don't want to trigger a recompute on mount\n return\n }\n this.computeSizes()\n })\n this.resizeObserver.observe(this.containerRef)\n }\n\n // this is to prevent Safari on iOS >= 10 to zoom the page\n preventZoomSafari = (e: Event) => e.preventDefault()\n\n cleanEvents = () => {\n if (!this.currentDoc) return\n this.currentDoc.removeEventListener('mousemove', this.onMouseMove)\n this.currentDoc.removeEventListener('mouseup', this.onDragStopped)\n this.currentDoc.removeEventListener('touchmove', this.onTouchMove)\n this.currentDoc.removeEventListener('touchend', this.onDragStopped)\n this.currentDoc.removeEventListener('gesturemove', this.onGestureMove as EventListener)\n this.currentDoc.removeEventListener('gestureend', this.onGestureEnd as EventListener)\n this.currentDoc.removeEventListener('scroll', this.onScroll)\n }\n\n clearScrollEvent = () => {\n if (this.containerRef) this.containerRef.removeEventListener('wheel', this.onWheel)\n if (this.wheelTimer) {\n clearTimeout(this.wheelTimer)\n }\n }\n\n onMediaLoad = () => {\n const cropSize = this.computeSizes()\n\n if (cropSize) {\n this.emitCropData()\n this.setInitialCrop(cropSize)\n }\n\n if (this.props.onMediaLoaded) {\n this.props.onMediaLoaded(this.mediaSize)\n }\n }\n\n setInitialCrop = (cropSize: Size) => {\n if (this.props.initialCroppedAreaPercentages) {\n const { crop, zoom } = getInitialCropFromCroppedAreaPercentages(\n this.props.initialCroppedAreaPercentages,\n this.mediaSize,\n this.props.rotation,\n cropSize,\n this.props.minZoom,\n this.props.maxZoom\n )\n\n this.props.onCropChange(crop)\n this.props.onZoomChange && this.props.onZoomChange(zoom)\n } else if (this.props.initialCroppedAreaPixels) {\n const { crop, zoom } = getInitialCropFromCroppedAreaPixels(\n this.props.initialCroppedAreaPixels,\n this.mediaSize,\n this.props.rotation,\n cropSize,\n this.props.minZoom,\n this.props.maxZoom\n )\n\n this.props.onCropChange(crop)\n this.props.onZoomChange && this.props.onZoomChange(zoom)\n }\n }\n\n getAspect() {\n const { cropSize, aspect } = this.props\n if (cropSize) {\n return cropSize.width / cropSize.height\n }\n return aspect\n }\n\n getObjectFit() {\n if (this.props.objectFit === 'cover') {\n const mediaRef = this.imageRef.current || this.videoRef.current\n\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect()\n const containerAspect = this.containerRect.width / this.containerRect.height\n const naturalWidth =\n this.imageRef.current?.naturalWidth || this.videoRef.current?.videoWidth || 0\n const naturalHeight =\n this.imageRef.current?.naturalHeight || this.videoRef.current?.videoHeight || 0\n const mediaAspect = naturalWidth / naturalHeight\n\n return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover'\n }\n return 'horizontal-cover'\n }\n\n return this.props.objectFit\n }\n\n computeSizes = () => {\n const mediaRef = this.imageRef.current || this.videoRef.current\n\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect()\n this.saveContainerPosition()\n const containerAspect = this.containerRect.width / this.containerRect.height\n const naturalWidth =\n this.imageRef.current?.naturalWidth || this.videoRef.current?.videoWidth || 0\n const naturalHeight =\n this.imageRef.current?.naturalHeight || this.videoRef.current?.videoHeight || 0\n const isMediaScaledDown =\n mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight\n const mediaAspect = naturalWidth / naturalHeight\n\n // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n // as the values they report are rounded. That will result in precision losses\n // when calculating zoom. We use the fact that the media is positionned relative\n // to the container. That allows us to use the container's dimensions\n // and natural aspect ratio of the media to calculate accurate media size.\n // However, for this to work, the container should not be rotated\n let renderedMediaSize: Size\n\n if (isMediaScaledDown) {\n switch (this.state.mediaObjectFit) {\n default:\n case 'contain':\n renderedMediaSize =\n containerAspect > mediaAspect\n ? {\n width: this.containerRect.height * mediaAspect,\n height: this.containerRect.height,\n }\n : {\n width: this.containerRect.width,\n height: this.containerRect.width / mediaAspect,\n }\n break\n case 'horizontal-cover':\n renderedMediaSize = {\n width: this.containerRect.width,\n height: this.containerRect.width / mediaAspect,\n }\n break\n case 'vertical-cover':\n renderedMediaSize = {\n width: this.containerRect.height * mediaAspect,\n height: this.containerRect.height,\n }\n break\n }\n } else {\n renderedMediaSize = {\n width: mediaRef.offsetWidth,\n height: mediaRef.offsetHeight,\n }\n }\n\n this.mediaSize = {\n ...renderedMediaSize,\n naturalWidth,\n naturalHeight,\n }\n\n // set media size in the parent\n if (this.props.setMediaSize) {\n this.props.setMediaSize(this.mediaSize)\n }\n\n const cropSize = this.props.cropSize\n ? this.props.cropSize\n : getCropSize(\n this.mediaSize.width,\n this.mediaSize.height,\n this.containerRect.width,\n this.containerRect.height,\n this.props.aspect,\n this.props.rotation\n )\n\n if (\n this.state.cropSize?.height !== cropSize.height ||\n this.state.cropSize?.width !== cropSize.width\n ) {\n this.props.onCropSizeChange && this.props.onCropSizeChange(cropSize)\n }\n this.setState({ cropSize }, this.recomputeCropPosition)\n // pass crop size to parent\n if (this.props.setCropSize) {\n this.props.setCropSize(cropSize)\n }\n\n return cropSize\n }\n }\n\n saveContainerPosition = () => {\n if (this.containerRef) {\n const bounds = this.containerRef.getBoundingClientRect()\n this.containerPosition = { x: bounds.left, y: bounds.top }\n }\n }\n\n static getMousePoint = (e: MouseEvent | React.MouseEvent | GestureEvent) => ({\n x: Number(e.clientX),\n y: Number(e.clientY),\n })\n\n static getTouchPoint = (touch: Touch | React.Touch) => ({\n x: Number(touch.clientX),\n y: Number(touch.clientY),\n })\n\n onMouseDown = (e: React.MouseEvent) => {\n if (!this.currentDoc) return\n e.preventDefault()\n this.currentDoc.addEventListener('mousemove', this.onMouseMove)\n this.currentDoc.addEventListener('mouseup', this.onDragStopped)\n this.saveContainerPosition()\n this.onDragStart(Cropper.getMousePoint(e))\n }\n\n onMouseMove = (e: MouseEvent) => this.onDrag(Cropper.getMousePoint(e))\n\n onScroll = (e: Event) => {\n if (!this.currentDoc) return\n e.preventDefault()\n this.saveContainerPosition()\n }\n\n onTouchStart = (e: React.TouchEvent) => {\n if (!this.currentDoc) return\n this.isTouching = true\n if (this.props.onTouchRequest && !this.props.onTouchRequest(e)) {\n return\n }\n\n this.currentDoc.addEventListener('touchmove', this.onTouchMove, { passive: false }) // iOS 11 now defaults to passive: true\n this.currentDoc.addEventListener('touchend', this.onDragStopped)\n\n this.saveContainerPosition()\n\n if (e.touches.length === 2) {\n this.onPinchStart(e)\n } else if (e.touches.length === 1) {\n this.onDragStart(Cropper.getTouchPoint(e.touches[0]))\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n // Prevent whole page from scrolling on iOS.\n e.preventDefault()\n if (e.touches.length === 2) {\n this.onPinchMove(e)\n } else if (e.touches.length === 1) {\n this.onDrag(Cropper.getTouchPoint(e.touches[0]))\n }\n }\n\n onGestureStart = (e: GestureEvent) => {\n if (!this.currentDoc) return\n e.preventDefault()\n this.currentDoc.addEventListener('gesturechange', this.onGestureMove as EventListener)\n this.currentDoc.addEventListener('gestureend', this.onGestureEnd as EventListener)\n this.gestureZoomStart = this.props.zoom\n this.gestureRotationStart = this.props.rotation\n }\n\n onGestureMove = (e: GestureEvent) => {\n e.preventDefault()\n if (this.isTouching) {\n // this is to avoid conflict between gesture and touch events\n return\n }\n\n const point = Cropper.getMousePoint(e)\n const newZoom = this.gestureZoomStart - 1 + e.scale\n this.setNewZoom(newZoom, point, { shouldUpdatePosition: true })\n if (this.props.onRotationChange) {\n const newRotation = this.gestureRotationStart + e.rotation\n this.props.onRotationChange(newRotation)\n }\n }\n\n onGestureEnd = (e: GestureEvent) => {\n this.cleanEvents()\n }\n\n onDragStart = ({ x, y }: Point) => {\n this.dragStartPosition = { x, y }\n this.dragStartCrop = { ...this.props.crop }\n this.props.onInteractionStart?.()\n }\n\n onDrag = ({ x, y }: Point) => {\n if (!this.currentWindow) return\n if (this.rafDragTimeout) this.currentWindow.cancelAnimationFrame(this.rafDragTimeout)\n\n this.rafDragTimeout = this.currentWindow.requestAnimationFrame(() => {\n if (!this.state.cropSize) return\n if (x === undefined || y === undefined) return\n const offsetX = x - this.dragStartPosition.x\n const offsetY = y - this.dragStartPosition.y\n const requestedPosition = {\n x: this.dragStartCrop.x + offsetX,\n y: this.dragStartCrop.y + offsetY,\n }\n\n const newPosition = this.props.restrictPosition\n ? restrictPosition(\n requestedPosition,\n this.mediaSize,\n this.state.cropSize,\n this.props.zoom,\n this.props.rotation\n )\n : requestedPosition\n this.props.onCropChange(newPosition)\n })\n }\n\n onDragStopped = () => {\n this.isTouching = false\n this.cleanEvents()\n this.emitCropData()\n this.props.onInteractionEnd?.()\n }\n\n onPinchStart(e: React.TouchEvent) {\n const pointA = Cropper.getTouchPoint(e.touches[0])\n const pointB = Cropper.getTouchPoint(e.touches[1])\n this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB)\n this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB)\n this.onDragStart(getCenter(pointA, pointB))\n }\n\n onPinchMove(e: TouchEvent) {\n if (!this.currentDoc || !this.currentWindow) return\n const pointA = Cropper.getTouchPoint(e.touches[0])\n const pointB = Cropper.getTouchPoint(e.touches[1])\n const center = getCenter(pointA, pointB)\n this.onDrag(center)\n\n if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout)\n this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(() => {\n const distance = getDistanceBetweenPoints(pointA, pointB)\n const newZoom = this.props.zoom * (distance / this.lastPinchDistance)\n this.setNewZoom(newZoom, center, { shouldUpdatePosition: false })\n this.lastPinchDistance = distance\n\n const rotation = getRotationBetweenPoints(pointA, pointB)\n const newRotation = this.props.rotation + (rotation - this.lastPinchRotation)\n this.props.onRotationChange && this.props.onRotationChange(newRotation)\n this.lastPinchRotation = rotation\n })\n }\n\n onWheel = (e: WheelEvent) => {\n if (!this.currentWindow) return\n if (this.props.onWheelRequest && !this.props.onWheelRequest(e)) {\n return\n }\n\n e.preventDefault()\n const point = Cropper.getMousePoint(e)\n const { pixelY } = normalizeWheel(e)\n const newZoom = this.props.zoom - (pixelY * this.props.zoomSpeed) / 200\n this.setNewZoom(newZoom, point, { shouldUpdatePosition: true })\n\n if (!this.state.hasWheelJustStarted) {\n this.setState({ hasWheelJustStarted: true }, () => this.props.onInteractionStart?.())\n }\n\n if (this.wheelTimer) {\n clearTimeout(this.wheelTimer)\n }\n this.wheelTimer = this.currentWindow.setTimeout(\n () => this.setState({ hasWheelJustStarted: false }, () => this.props.onInteractionEnd?.()),\n 250\n )\n }\n\n getPointOnContainer = ({ x, y }: Point, containerTopLeft: Point): Point => {\n if (!this.containerRect) {\n throw new Error('The Cropper is not mounted')\n }\n return {\n x: this.containerRect.width / 2 - (x - containerTopLeft.x),\n y: this.containerRect.height / 2 - (y - containerTopLeft.y),\n }\n }\n\n getPointOnMedia = ({ x, y }: Point) => {\n const { crop, zoom } = this.props\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom,\n }\n }\n\n setNewZoom = (zoom: number, point: Point, { shouldUpdatePosition = true } = {}) => {\n if (!this.state.cropSize || !this.props.onZoomChange) return\n\n const newZoom = clamp(zoom, this.props.minZoom, this.props.maxZoom)\n\n if (shouldUpdatePosition) {\n const zoomPoint = this.getPointOnContainer(point, this.containerPosition)\n const zoomTarget = this.getPointOnMedia(zoomPoint)\n const requestedPosition = {\n x: zoomTarget.x * newZoom - zoomPoint.x,\n y: zoomTarget.y * newZoom - zoomPoint.y,\n }\n\n const newPosition = this.props.restrictPosition\n ? restrictPosition(\n requestedPosition,\n this.mediaSize,\n this.state.cropSize,\n newZoom,\n this.props.rotation\n )\n : requestedPosition\n\n this.props.onCropChange(newPosition)\n }\n this.props.onZoomChange(newZoom)\n }\n\n getCropData = () => {\n if (!this.state.cropSize) {\n return null\n }\n\n // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n const restrictedPosition = this.props.restrictPosition\n ? restrictPosition(\n this.props.crop,\n this.mediaSize,\n this.state.cropSize,\n this.props.zoom,\n this.props.rotation\n )\n : this.props.crop\n return computeCroppedArea(\n restrictedPosition,\n this.mediaSize,\n this.state.cropSize,\n this.getAspect(),\n this.props.zoom,\n this.props.rotation,\n this.props.restrictPosition\n )\n }\n\n emitCropData = () => {\n const cropData = this.getCropData()\n if (!cropData) return\n\n const { croppedAreaPercentages, croppedAreaPixels } = cropData\n if (this.props.onCropComplete) {\n this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels)\n }\n\n if (this.props.onCropAreaChange) {\n this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels)\n }\n }\n\n emitCropAreaChange = () => {\n const cropData = this.getCropData()\n if (!cropData) return\n\n const { croppedAreaPercentages, croppedAreaPixels } = cropData\n if (this.props.onCropAreaChange) {\n this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels)\n }\n }\n\n recomputeCropPosition = () => {\n if (!this.state.cropSize) return\n\n const newPosition = this.props.restrictPosition\n ? restrictPosition(\n this.props.crop,\n this.mediaSize,\n this.state.cropSize,\n this.props.zoom,\n this.props.rotation\n )\n : this.props.crop\n\n this.props.onCropChange(newPosition)\n this.emitCropData()\n }\n\n render() {\n const {\n image,\n video,\n mediaProps,\n transform,\n crop: { x, y },\n rotation,\n zoom,\n cropShape,\n showGrid,\n style: { containerStyle, cropAreaStyle, mediaStyle },\n classes: { containerClassName, cropAreaClassName, mediaClassName },\n } = this.props\n\n const objectFit = this.state.mediaObjectFit\n\n return (\n (this.containerRef = el)}\n data-testid=\"container\"\n style={containerStyle}\n className={classNames('reactEasyCrop_Container', containerClassName)}\n >\n {image ? (\n )}\n src={image}\n ref={this.imageRef}\n style={{\n ...mediaStyle,\n transform:\n transform || `translate(${x}px, ${y}px) rotate(${rotation}deg) scale(${zoom})`,\n }}\n onLoad={this.onMediaLoad}\n />\n ) : (\n video && (\n \n {(Array.isArray(video) ? video : [{ src: video }]).map((item) => (\n \n ))}\n \n )\n )}\n {this.state.cropSize && (\n \n )}\n \n )\n }\n}\n\nexport default Cropper\n","/**\n * External dependencies\n */\nimport Cropper from 'react-easy-crop';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Spinner } from '@wordpress/components';\nimport { useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { MIN_ZOOM, MAX_ZOOM } from './constants';\n\nimport { useImageEditingContext } from './context';\n\nexport default function ImageCropper( {\n\turl,\n\twidth,\n\theight,\n\tnaturalHeight,\n\tnaturalWidth,\n\tborderProps,\n} ) {\n\tconst {\n\t\tisInProgress,\n\t\teditedUrl,\n\t\tposition,\n\t\tzoom,\n\t\taspect,\n\t\tsetPosition,\n\t\tsetCrop,\n\t\tsetZoom,\n\t\trotation,\n\t} = useImageEditingContext();\n\tconst [ contentResizeListener, { width: clientWidth } ] =\n\t\tuseResizeObserver();\n\n\tlet editedHeight = height || ( clientWidth * naturalHeight ) / naturalWidth;\n\n\tif ( rotation % 180 === 90 ) {\n\t\teditedHeight = ( clientWidth * naturalWidth ) / naturalHeight;\n\t}\n\n\tconst area = (\n\t\t\n\t\t\t {\n\t\t\t\t\tsetPosition( pos );\n\t\t\t\t} }\n\t\t\t\tonCropComplete={ ( newCropPercent ) => {\n\t\t\t\t\tsetCrop( newCropPercent );\n\t\t\t\t} }\n\t\t\t\tonZoomChange={ ( newZoom ) => {\n\t\t\t\t\tsetZoom( newZoom * 100 );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ isInProgress && }\n\t\t\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ contentResizeListener }\n\t\t\t{ area }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst search = (\n\t\n\t\t\n\t\n);\n\nexport default search;\n","/**\n * WordPress dependencies\n */\nimport {\n\tToolbarButton,\n\tRangeControl,\n\tDropdown,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { search } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { MIN_ZOOM, MAX_ZOOM, POPOVER_PROPS } from './constants';\nimport { useImageEditingContext } from './context';\n\nexport default function ZoomDropdown() {\n\tconst { isInProgress, zoom, setZoom } = useImageEditingContext();\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst rotateRight = (\n\t\n\t\t\n\t\n);\n\nexport default rotateRight;\n","/**\n * WordPress dependencies\n */\n\nimport { ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { rotateRight as rotateRightIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { useImageEditingContext } from './context';\n\nexport default function RotationButton() {\n\tconst { isInProgress, rotateClockwise } = useImageEditingContext();\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useImageEditingContext } from './context';\n\nexport default function FormControls() {\n\tconst { isInProgress, apply, cancel } = useImageEditingContext();\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\n\t\t\t{ __( 'Cancel' ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { ToolbarGroup, ToolbarItem } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport AspectRatioDropdown from './aspect-ratio-dropdown';\nimport BlockControls from '../block-controls';\nimport ImageEditingProvider from './context';\nimport Cropper from './cropper';\nimport ZoomDropdown from './zoom-dropdown';\nimport RotationButton from './rotation-button';\nimport FormControls from './form-controls';\n\nexport default function ImageEditor( {\n\tid,\n\turl,\n\twidth,\n\theight,\n\tnaturalHeight,\n\tnaturalWidth,\n\tonSaveImage,\n\tonFinishEditing,\n\tborderProps,\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tButtonGroup,\n\tSelectControl,\n\t__experimentalNumberControl as NumberControl,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport useDimensionHandler from './use-dimension-handler';\n\nconst IMAGE_SIZE_PRESETS = [ 25, 50, 75, 100 ];\nconst noop = () => {};\n\nexport default function ImageSizeControl( {\n\timageSizeHelp,\n\timageWidth,\n\timageHeight,\n\timageSizeOptions = [],\n\tisResizable = true,\n\tslug,\n\twidth,\n\theight,\n\tonChange,\n\tonChangeImage = noop,\n} ) {\n\tconst { currentHeight, currentWidth, updateDimension, updateDimensions } =\n\t\tuseDimensionHandler( height, width, imageHeight, imageWidth, onChange );\n\n\treturn (\n\t\t<>\n\t\t\t{ imageSizeOptions && imageSizeOptions.length > 0 && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isResizable && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tupdateDimension( 'width', value )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tupdateDimension( 'height', value )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ IMAGE_SIZE_PRESETS.map( ( scale ) => {\n\t\t\t\t\t\t\t\tconst scaledWidth = Math.round(\n\t\t\t\t\t\t\t\t\timageWidth * ( scale / 100 )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst scaledHeight = Math.round(\n\t\t\t\t\t\t\t\t\timageHeight * ( scale / 100 )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst isCurrent =\n\t\t\t\t\t\t\t\t\tcurrentWidth === scaledWidth &&\n\t\t\t\t\t\t\t\t\tcurrentHeight === scaledHeight;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tupdateDimensions(\n\t\t\t\t\t\t\t\t\t\t\t\tscaledHeight,\n\t\t\t\t\t\t\t\t\t\t\t\tscaledWidth\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ scale }%\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t updateDimensions() }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\n\nexport default function useDimensionHandler(\n\tcustomHeight,\n\tcustomWidth,\n\tdefaultHeight,\n\tdefaultWidth,\n\tonChange\n) {\n\tconst [ currentWidth, setCurrentWidth ] = useState(\n\t\tcustomWidth ?? defaultWidth ?? ''\n\t);\n\tconst [ currentHeight, setCurrentHeight ] = useState(\n\t\tcustomHeight ?? defaultHeight ?? ''\n\t);\n\n\t// When an image is first inserted, the default dimensions are initially\n\t// undefined. This effect updates the dimensions when the default values\n\t// come through.\n\tuseEffect( () => {\n\t\tif ( customWidth === undefined && defaultWidth !== undefined ) {\n\t\t\tsetCurrentWidth( defaultWidth );\n\t\t}\n\t\tif ( customHeight === undefined && defaultHeight !== undefined ) {\n\t\t\tsetCurrentHeight( defaultHeight );\n\t\t}\n\t}, [ defaultWidth, defaultHeight ] );\n\n\t// If custom values change, it means an outsider has resized the image using some other method (eg resize box)\n\t// this keeps track of these values too. We need to parse before comparing; custom values can be strings.\n\tuseEffect( () => {\n\t\tif (\n\t\t\tcustomWidth !== undefined &&\n\t\t\tNumber.parseInt( customWidth ) !== Number.parseInt( currentWidth )\n\t\t) {\n\t\t\tsetCurrentWidth( customWidth );\n\t\t}\n\t\tif (\n\t\t\tcustomHeight !== undefined &&\n\t\t\tNumber.parseInt( customHeight ) !== Number.parseInt( currentHeight )\n\t\t) {\n\t\t\tsetCurrentHeight( customHeight );\n\t\t}\n\t}, [ customWidth, customHeight ] );\n\n\tconst updateDimension = ( dimension, value ) => {\n\t\tconst parsedValue = value === '' ? undefined : parseInt( value, 10 );\n\t\tif ( dimension === 'width' ) {\n\t\t\tsetCurrentWidth( parsedValue );\n\t\t} else {\n\t\t\tsetCurrentHeight( parsedValue );\n\t\t}\n\t\tonChange( {\n\t\t\t[ dimension ]: parsedValue,\n\t\t} );\n\t};\n\n\tconst updateDimensions = ( nextHeight, nextWidth ) => {\n\t\tsetCurrentHeight( nextHeight ?? defaultHeight );\n\t\tsetCurrentWidth( nextWidth ?? defaultWidth );\n\t\tonChange( { height: nextHeight, width: nextWidth } );\n\t};\n\n\treturn {\n\t\tcurrentHeight,\n\t\tcurrentWidth,\n\t\tupdateDimension,\n\t\tupdateDimensions,\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { ExternalLink } from '@wordpress/components';\nimport { safeDecodeURI, filterURLForDisplay } from '@wordpress/url';\n\nexport default function LinkViewerURL( { url, urlLabel, className } ) {\n\tconst linkClassName = clsx(\n\t\tclassName,\n\t\t'block-editor-url-popover__link-viewer-url'\n\t);\n\n\tif ( ! url ) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ urlLabel || filterURLForDisplay( safeDecodeURI( url ) ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { forwardRef, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tPopover,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { chevronDown } from '@wordpress/icons';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport LinkViewer from './link-viewer';\nimport LinkEditor from './link-editor';\nimport { unlock } from '../../lock-unlock';\n\nconst { __experimentalPopoverLegacyPositionToPlacement } = unlock(\n\tcomponentsPrivateApis\n);\n\nconst DEFAULT_PLACEMENT = 'bottom';\n\nconst URLPopover = forwardRef(\n\t(\n\t\t{\n\t\t\tadditionalControls,\n\t\t\tchildren,\n\t\t\trenderSettings,\n\t\t\t// The DEFAULT_PLACEMENT value is assigned inside the function's body\n\t\t\tplacement,\n\t\t\tfocusOnMount = 'firstElement',\n\t\t\t// Deprecated\n\t\t\tposition,\n\t\t\t// Rest\n\t\t\t...popoverProps\n\t\t},\n\t\tref\n\t) => {\n\t\tif ( position !== undefined ) {\n\t\t\tdeprecated( '`position` prop in wp.blockEditor.URLPopover', {\n\t\t\t\tsince: '6.2',\n\t\t\t\talternative: '`placement` prop',\n\t\t\t} );\n\t\t}\n\n\t\t// Compute popover's placement:\n\t\t// - give priority to `placement` prop, if defined\n\t\t// - otherwise, compute it from the legacy `position` prop (if defined)\n\t\t// - finally, fallback to the DEFAULT_PLACEMENT.\n\t\tlet computedPlacement;\n\t\tif ( placement !== undefined ) {\n\t\t\tcomputedPlacement = placement;\n\t\t} else if ( position !== undefined ) {\n\t\t\tcomputedPlacement =\n\t\t\t\t__experimentalPopoverLegacyPositionToPlacement( position );\n\t\t}\n\t\tcomputedPlacement = computedPlacement || DEFAULT_PLACEMENT;\n\n\t\tconst [ isSettingsExpanded, setIsSettingsExpanded ] = useState( false );\n\n\t\tconst showSettings = !! renderSettings && isSettingsExpanded;\n\n\t\tconst toggleSettingsVisibility = () => {\n\t\t\tsetIsSettingsExpanded( ! isSettingsExpanded );\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t{ !! renderSettings && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t{ showSettings && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ renderSettings() }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\t{ additionalControls && ! showSettings && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ additionalControls }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}\n);\n\nURLPopover.LinkEditor = LinkEditor;\n\nURLPopover.LinkViewer = LinkViewer;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-popover/README.md\n */\nexport default URLPopover;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport URLInput from '../url-input';\n\nexport default function LinkEditor( {\n\tautocompleteRef,\n\tclassName,\n\tonChangeInputValue,\n\tvalue,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { edit } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport LinkViewerURL from './link-viewer-url';\n\nexport default function LinkViewer( {\n\tclassName,\n\tlinkClassName,\n\tonEditLinkClick,\n\turl,\n\turlLabel,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ onEditLinkClick && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tFormFileUpload,\n\tPlaceholder,\n\tDropZone,\n\twithFilters,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useState, useEffect } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { keyboardReturn } from '@wordpress/icons';\nimport { pasteHandler } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport MediaUpload from '../media-upload';\nimport MediaUploadCheck from '../media-upload/check';\nimport URLPopover from '../url-popover';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\nconst InsertFromURLPopover = ( {\n\tsrc,\n\tonChange,\n\tonSubmit,\n\tonClose,\n\tpopoverAnchor,\n} ) => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n);\n\nconst URLSelectionUI = ( { src, onChangeSrc, onSelectURL } ) => {\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst [ isURLInputVisible, setIsURLInputVisible ] = useState( false );\n\n\tconst openURLInput = () => {\n\t\tsetIsURLInputVisible( true );\n\t};\n\tconst closeURLInput = () => {\n\t\tsetIsURLInputVisible( false );\n\t\tpopoverAnchor?.focus();\n\t};\n\n\tconst onSubmitSrc = ( event ) => {\n\t\tevent.preventDefault();\n\t\tif ( src && onSelectURL ) {\n\t\t\tonSelectURL( src );\n\t\t\tcloseURLInput();\n\t\t}\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Insert from URL' ) }\n\t\t\t\n\t\t\t{ isURLInputVisible && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n};\n\nexport function MediaPlaceholder( {\n\tvalue = {},\n\tallowedTypes,\n\tclassName,\n\ticon,\n\tlabels = {},\n\tmediaPreview,\n\tnotices,\n\tisAppender,\n\taccept,\n\taddToGallery,\n\tmultiple = false,\n\thandleUpload = true,\n\tdisableDropZone,\n\tdisableMediaButtons,\n\tonError,\n\tonSelect,\n\tonCancel,\n\tonSelectURL,\n\tonToggleFeaturedImage,\n\tonDoubleClick,\n\tonFilesPreUpload = noop,\n\tonHTMLDrop: deprecatedOnHTMLDrop,\n\tchildren,\n\tmediaLibraryButton,\n\tplaceholder,\n\tstyle,\n} ) {\n\tif ( deprecatedOnHTMLDrop ) {\n\t\tdeprecated( 'wp.blockEditor.MediaPlaceholder onHTMLDrop prop', {\n\t\t\tsince: '6.2',\n\t\t\tversion: '6.4',\n\t\t} );\n\t}\n\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().mediaUpload;\n\t}, [] );\n\tconst [ src, setSrc ] = useState( '' );\n\n\tuseEffect( () => {\n\t\tsetSrc( value?.src ?? '' );\n\t}, [ value?.src ] );\n\n\tconst onlyAllowsImages = () => {\n\t\tif ( ! allowedTypes || allowedTypes.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn allowedTypes.every(\n\t\t\t( allowedType ) =>\n\t\t\t\tallowedType === 'image' || allowedType.startsWith( 'image/' )\n\t\t);\n\t};\n\n\tconst onChangeSrc = ( event ) => {\n\t\tsetSrc( event.target.value );\n\t};\n\n\tconst onFilesUpload = ( files ) => {\n\t\tif (\n\t\t\t! handleUpload ||\n\t\t\t( typeof handleUpload === 'function' && ! handleUpload( files ) )\n\t\t) {\n\t\t\treturn onSelect( files );\n\t\t}\n\t\tonFilesPreUpload( files );\n\t\tlet setMedia;\n\t\tif ( multiple ) {\n\t\t\tif ( addToGallery ) {\n\t\t\t\t// Since the setMedia function runs multiple times per upload group\n\t\t\t\t// and is passed newMedia containing every item in its group each time, we must\n\t\t\t\t// filter out whatever this upload group had previously returned to the\n\t\t\t\t// gallery before adding and returning the image array with replacement newMedia\n\t\t\t\t// values.\n\n\t\t\t\t// Define an array to store urls from newMedia between subsequent function calls.\n\t\t\t\tlet lastMediaPassed = [];\n\t\t\t\tsetMedia = ( newMedia ) => {\n\t\t\t\t\t// Remove any images this upload group is responsible for (lastMediaPassed).\n\t\t\t\t\t// Their replacements are contained in newMedia.\n\t\t\t\t\tconst filteredMedia = ( value ?? [] ).filter( ( item ) => {\n\t\t\t\t\t\t// If Item has id, only remove it if lastMediaPassed has an item with that id.\n\t\t\t\t\t\tif ( item.id ) {\n\t\t\t\t\t\t\treturn ! lastMediaPassed.some(\n\t\t\t\t\t\t\t\t// Be sure to convert to number for comparison.\n\t\t\t\t\t\t\t\t( { id } ) => Number( id ) === Number( item.id )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compare transient images via .includes since gallery may append extra info onto the url.\n\t\t\t\t\t\treturn ! lastMediaPassed.some( ( { urlSlug } ) =>\n\t\t\t\t\t\t\titem.url.includes( urlSlug )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\t// Return the filtered media array along with newMedia.\n\t\t\t\t\tonSelect( filteredMedia.concat( newMedia ) );\n\t\t\t\t\t// Reset lastMediaPassed and set it with ids and urls from newMedia.\n\t\t\t\t\tlastMediaPassed = newMedia.map( ( media ) => {\n\t\t\t\t\t\t// Add everything up to '.fileType' to compare via .includes.\n\t\t\t\t\t\tconst cutOffIndex = media.url.lastIndexOf( '.' );\n\t\t\t\t\t\tconst urlSlug = media.url.slice( 0, cutOffIndex );\n\t\t\t\t\t\treturn { id: media.id, urlSlug };\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tsetMedia = onSelect;\n\t\t\t}\n\t\t} else {\n\t\t\tsetMedia = ( [ media ] ) => onSelect( media );\n\t\t}\n\t\tmediaUpload( {\n\t\t\tallowedTypes,\n\t\t\tfilesList: files,\n\t\t\tonFileChange: setMedia,\n\t\t\tonError,\n\t\t} );\n\t};\n\n\tasync function handleBlocksDrop( blocks ) {\n\t\tif ( ! blocks || ! Array.isArray( blocks ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction recursivelyFindMediaFromBlocks( _blocks ) {\n\t\t\treturn _blocks.flatMap( ( block ) =>\n\t\t\t\t( block.name === 'core/image' ||\n\t\t\t\t\tblock.name === 'core/audio' ||\n\t\t\t\t\tblock.name === 'core/video' ) &&\n\t\t\t\tblock.attributes.url\n\t\t\t\t\t? [ block ]\n\t\t\t\t\t: recursivelyFindMediaFromBlocks( block.innerBlocks )\n\t\t\t);\n\t\t}\n\n\t\tconst mediaBlocks = recursivelyFindMediaFromBlocks( blocks );\n\n\t\tif ( ! mediaBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst uploadedMediaList = await Promise.all(\n\t\t\tmediaBlocks.map( ( block ) =>\n\t\t\t\tblock.attributes.id\n\t\t\t\t\t? block.attributes\n\t\t\t\t\t: new Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\twindow\n\t\t\t\t\t\t\t\t.fetch( block.attributes.url )\n\t\t\t\t\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t\t\t\t\t.then( ( blob ) =>\n\t\t\t\t\t\t\t\t\tmediaUpload( {\n\t\t\t\t\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\t\t\t\t\tadditionalData: {\n\t\t\t\t\t\t\t\t\t\t\ttitle: block.attributes.title,\n\t\t\t\t\t\t\t\t\t\t\talt_text: block.attributes.alt,\n\t\t\t\t\t\t\t\t\t\t\tcaption: block.attributes.caption,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\t\t\t\t\t\t\t\tif ( media.id ) {\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( media );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t\t\t\t\tonError: reject,\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.catch( () => resolve( block.attributes.url ) );\n\t\t\t\t\t } )\n\t\t\t)\n\t\t).catch( ( err ) => onError( err ) );\n\n\t\tif ( multiple ) {\n\t\t\tonSelect( uploadedMediaList );\n\t\t} else {\n\t\t\tonSelect( uploadedMediaList[ 0 ] );\n\t\t}\n\t}\n\n\tasync function onHTMLDrop( HTML ) {\n\t\tconst blocks = pasteHandler( { HTML } );\n\t\treturn await handleBlocksDrop( blocks );\n\t}\n\n\tconst onUpload = ( event ) => {\n\t\tonFilesUpload( event.target.files );\n\t};\n\n\tconst defaultRenderPlaceholder = ( content ) => {\n\t\tlet { instructions, title } = labels;\n\n\t\tif ( ! mediaUpload && ! onSelectURL ) {\n\t\t\tinstructions = __(\n\t\t\t\t'To edit this block, you need permission to upload media.'\n\t\t\t);\n\t\t}\n\n\t\tif ( instructions === undefined || title === undefined ) {\n\t\t\tconst typesAllowed = allowedTypes ?? [];\n\n\t\t\tconst [ firstAllowedType ] = typesAllowed;\n\t\t\tconst isOneType = 1 === typesAllowed.length;\n\t\t\tconst isAudio = isOneType && 'audio' === firstAllowedType;\n\t\t\tconst isImage = isOneType && 'image' === firstAllowedType;\n\t\t\tconst isVideo = isOneType && 'video' === firstAllowedType;\n\n\t\t\tif ( instructions === undefined && mediaUpload ) {\n\t\t\t\tinstructions = __(\n\t\t\t\t\t'Upload a media file or pick one from your media library.'\n\t\t\t\t);\n\n\t\t\t\tif ( isAudio ) {\n\t\t\t\t\tinstructions = __(\n\t\t\t\t\t\t'Upload or drag an audio file here, or pick one from your library.'\n\t\t\t\t\t);\n\t\t\t\t} else if ( isImage ) {\n\t\t\t\t\tinstructions = __(\n\t\t\t\t\t\t'Upload or drag an image file here, or pick one from your library.'\n\t\t\t\t\t);\n\t\t\t\t} else if ( isVideo ) {\n\t\t\t\t\tinstructions = __(\n\t\t\t\t\t\t'Upload or drag a video file here, or pick one from your library.'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( title === undefined ) {\n\t\t\t\ttitle = __( 'Media' );\n\n\t\t\t\tif ( isAudio ) {\n\t\t\t\t\ttitle = __( 'Audio' );\n\t\t\t\t} else if ( isImage ) {\n\t\t\t\t\ttitle = __( 'Image' );\n\t\t\t\t} else if ( isVideo ) {\n\t\t\t\t\ttitle = __( 'Video' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst placeholderClassName = clsx(\n\t\t\t'block-editor-media-placeholder',\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t'is-appender': isAppender,\n\t\t\t}\n\t\t);\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ content }\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t};\n\tconst renderPlaceholder = placeholder ?? defaultRenderPlaceholder;\n\n\tconst renderDropZone = () => {\n\t\tif ( disableDropZone ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t};\n\n\tconst renderCancelLink = () => {\n\t\treturn (\n\t\t\tonCancel && (\n\t\t\t\t\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\n\t\t\t)\n\t\t);\n\t};\n\n\tconst renderUrlSelectionUI = () => {\n\t\treturn (\n\t\t\tonSelectURL && (\n\t\t\t\t\n\t\t\t)\n\t\t);\n\t};\n\n\tconst renderFeaturedImageToggle = () => {\n\t\treturn (\n\t\t\tonToggleFeaturedImage && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Use featured image' ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t)\n\t\t);\n\t};\n\n\tconst renderMediaUploadChecked = () => {\n\t\tconst defaultButton = ( { open } ) => {\n\t\t\treturn (\n\t\t\t\t {\n\t\t\t\t\t\topen();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Media Library' ) }\n\t\t\t\t\n\t\t\t);\n\t\t};\n\t\tconst libraryButton = mediaLibraryButton ?? defaultButton;\n\t\tconst uploadMediaLibraryButton = (\n\t\t\t id )\n\t\t\t\t\t\t: value.id\n\t\t\t\t}\n\t\t\t\trender={ libraryButton }\n\t\t\t/>\n\t\t);\n\n\t\tif ( mediaUpload && isAppender ) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t{ renderDropZone() }\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ uploadMediaLibraryButton }\n\t\t\t\t\t\t\t\t\t{ renderUrlSelectionUI() }\n\t\t\t\t\t\t\t\t\t{ renderFeaturedImageToggle() }\n\t\t\t\t\t\t\t\t\t{ renderCancelLink() }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn renderPlaceholder( content );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\tif ( mediaUpload ) {\n\t\t\tconst content = (\n\t\t\t\t<>\n\t\t\t\t\t{ renderDropZone() }\n\t\t\t\t\t (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tonChange={ onUpload }\n\t\t\t\t\t\taccept={ accept }\n\t\t\t\t\t\tmultiple={ !! multiple }\n\t\t\t\t\t/>\n\t\t\t\t\t{ uploadMediaLibraryButton }\n\t\t\t\t\t{ renderUrlSelectionUI() }\n\t\t\t\t\t{ renderFeaturedImageToggle() }\n\t\t\t\t\t{ renderCancelLink() }\n\t\t\t\t\n\t\t\t);\n\t\t\treturn renderPlaceholder( content );\n\t\t}\n\n\t\treturn renderPlaceholder( uploadMediaLibraryButton );\n\t};\n\n\tif ( disableMediaButtons ) {\n\t\treturn { renderDropZone() };\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ renderMediaUploadChecked() }\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-placeholder/README.md\n */\nexport default withFilters( 'editor.MediaPlaceholder' )( MediaPlaceholder );\n","/**\n * Internal dependencies\n */\nimport PanelColorGradientSettings from '../colors-gradients/panel-color-gradient-settings';\n\nconst PanelColorSettings = ( { colorSettings, ...props } ) => {\n\tconst settings = colorSettings.map( ( setting ) => {\n\t\tif ( ! setting ) {\n\t\t\treturn setting;\n\t\t}\n\t\tconst { value, onChange, ...otherSettings } = setting;\n\t\treturn {\n\t\t\t...otherSettings,\n\t\t\tcolorValue: value,\n\t\t\tonColorChange: onChange,\n\t\t};\n\t} );\n\treturn (\n\t\t\n\t);\n};\nexport default PanelColorSettings;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarItem, DropdownMenu, Slot } from '@wordpress/components';\nimport { chevronDown } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { orderBy } from '../../../utils/sorting';\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nconst FormatToolbar = () => {\n\treturn (\n\t\t<>\n\t\t\t{ [ 'bold', 'italic', 'link', 'unknown' ].map( ( format ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\t\n\t\t\t\t{ ( fills ) => {\n\t\t\t\t\tif ( ! fills.length ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst allProps = fills.map( ( [ { props } ] ) => props );\n\t\t\t\t\tconst hasActive = allProps.some(\n\t\t\t\t\t\t( { isActive } ) => isActive\n\t\t\t\t\t);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\t\t\t props ),\n\t\t\t\t\t\t\t\t\t\t'title'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FormatToolbar;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Popover, ToolbarGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockControls from '../block-controls';\nimport FormatToolbar from './format-toolbar';\nimport NavigableToolbar from '../navigable-toolbar';\n\nfunction InlineToolbar( { popoverAnchor } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nconst FormatToolbarContainer = ( { inline, editableContentElement } ) => {\n\tif ( inline ) {\n\t\treturn ;\n\t}\n\n\t// Render regular toolbar.\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FormatToolbarContainer;\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as richTextStore } from '@wordpress/rich-text';\n\nfunction formatTypesSelector( select ) {\n\treturn select( richTextStore ).getFormatTypes();\n}\n\n/**\n * Set of all interactive content tags.\n *\n * @see https://html.spec.whatwg.org/multipage/dom.html#interactive-content\n */\nconst interactiveContentTags = new Set( [\n\t'a',\n\t'audio',\n\t'button',\n\t'details',\n\t'embed',\n\t'iframe',\n\t'input',\n\t'label',\n\t'select',\n\t'textarea',\n\t'video',\n] );\n\nfunction prefixSelectKeys( selected, prefix ) {\n\tif ( typeof selected !== 'object' ) {\n\t\treturn { [ prefix ]: selected };\n\t}\n\treturn Object.fromEntries(\n\t\tObject.entries( selected ).map( ( [ key, value ] ) => [\n\t\t\t`${ prefix }.${ key }`,\n\t\t\tvalue,\n\t\t] )\n\t);\n}\n\nfunction getPrefixedSelectKeys( selected, prefix ) {\n\tif ( selected[ prefix ] ) {\n\t\treturn selected[ prefix ];\n\t}\n\treturn Object.keys( selected )\n\t\t.filter( ( key ) => key.startsWith( prefix + '.' ) )\n\t\t.reduce( ( accumulator, key ) => {\n\t\t\taccumulator[ key.slice( prefix.length + 1 ) ] = selected[ key ];\n\t\t\treturn accumulator;\n\t\t}, {} );\n}\n\n/**\n * This hook provides RichText with the `formatTypes` and its derived props from\n * experimental format type settings.\n *\n * @param {Object} $0 Options\n * @param {string} $0.clientId Block client ID.\n * @param {string} $0.identifier Block attribute.\n * @param {boolean} $0.withoutInteractiveFormatting Whether to clean the interactive formattings or not.\n * @param {Array} $0.allowedFormats Allowed formats\n */\nexport function useFormatTypes( {\n\tclientId,\n\tidentifier,\n\twithoutInteractiveFormatting,\n\tallowedFormats,\n} ) {\n\tconst allFormatTypes = useSelect( formatTypesSelector, [] );\n\tconst formatTypes = useMemo( () => {\n\t\treturn allFormatTypes.filter( ( { name, interactive, tagName } ) => {\n\t\t\tif ( allowedFormats && ! allowedFormats.includes( name ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\twithoutInteractiveFormatting &&\n\t\t\t\t( interactive || interactiveContentTags.has( tagName ) )\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} );\n\t}, [ allFormatTypes, allowedFormats, withoutInteractiveFormatting ] );\n\tconst keyedSelected = useSelect(\n\t\t( select ) =>\n\t\t\tformatTypes.reduce( ( accumulator, type ) => {\n\t\t\t\tif ( ! type.__experimentalGetPropsForEditableTreePreparation ) {\n\t\t\t\t\treturn accumulator;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t...prefixSelectKeys(\n\t\t\t\t\t\ttype.__experimentalGetPropsForEditableTreePreparation(\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttype.name\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}, {} ),\n\t\t[ formatTypes, clientId, identifier ]\n\t);\n\tconst dispatch = useDispatch();\n\tconst prepareHandlers = [];\n\tconst valueHandlers = [];\n\tconst changeHandlers = [];\n\tconst dependencies = [];\n\n\tfor ( const key in keyedSelected ) {\n\t\tdependencies.push( keyedSelected[ key ] );\n\t}\n\n\tformatTypes.forEach( ( type ) => {\n\t\tif ( type.__experimentalCreatePrepareEditableTree ) {\n\t\t\tconst handler = type.__experimentalCreatePrepareEditableTree(\n\t\t\t\tgetPrefixedSelectKeys( keyedSelected, type.name ),\n\t\t\t\t{\n\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( type.__experimentalCreateOnChangeEditableValue ) {\n\t\t\t\tvalueHandlers.push( handler );\n\t\t\t} else {\n\t\t\t\tprepareHandlers.push( handler );\n\t\t\t}\n\t\t}\n\n\t\tif ( type.__experimentalCreateOnChangeEditableValue ) {\n\t\t\tlet dispatchers = {};\n\n\t\t\tif ( type.__experimentalGetPropsForEditableTreeChangeHandler ) {\n\t\t\t\tdispatchers =\n\t\t\t\t\ttype.__experimentalGetPropsForEditableTreeChangeHandler(\n\t\t\t\t\t\tdispatch,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst selected = getPrefixedSelectKeys( keyedSelected, type.name );\n\t\t\tchangeHandlers.push(\n\t\t\t\ttype.__experimentalCreateOnChangeEditableValue(\n\t\t\t\t\t{\n\t\t\t\t\t\t...( typeof selected === 'object' ? selected : {} ),\n\t\t\t\t\t\t...dispatchers,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn {\n\t\tformatTypes,\n\t\tprepareHandlers,\n\t\tvalueHandlers,\n\t\tchangeHandlers,\n\t\tdependencies,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { insert, isCollapsed } from '@wordpress/rich-text';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * When typing over a selection, the selection will we wrapped by a matching\n * character pair. The second character is optional, it defaults to the first\n * character.\n *\n * @type {string[]} Array of character pairs.\n */\nconst wrapSelectionSettings = [ '`', '\"', \"'\", '“”', '‘’' ];\n\nexport default ( props ) => ( element ) => {\n\tfunction onInput( event ) {\n\t\tconst { inputType, data } = event;\n\t\tconst { value, onChange, registry } = props.current;\n\n\t\t// Only run the rules when inserting text.\n\t\tif ( inputType !== 'insertText' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isCollapsed( value ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pair = applyFilters(\n\t\t\t'blockEditor.wrapSelectionSettings',\n\t\t\twrapSelectionSettings\n\t\t).find(\n\t\t\t( [ startChar, endChar ] ) => startChar === data || endChar === data\n\t\t);\n\n\t\tif ( ! pair ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [ startChar, endChar = startChar ] = pair;\n\t\tconst start = value.start;\n\t\tconst end = value.end + startChar.length;\n\n\t\tlet newValue = insert( value, startChar, start, start );\n\t\tnewValue = insert( newValue, endChar, end, end );\n\n\t\tconst {\n\t\t\t__unstableMarkLastChangeAsPersistent,\n\t\t\t__unstableMarkAutomaticChange,\n\t\t} = registry.dispatch( blockEditorStore );\n\n\t\t__unstableMarkLastChangeAsPersistent();\n\t\tonChange( newValue );\n\t\t__unstableMarkAutomaticChange();\n\n\t\tconst init = {};\n\n\t\tfor ( const key in event ) {\n\t\t\tinit[ key ] = event[ key ];\n\t\t}\n\n\t\tinit.data = endChar;\n\n\t\tconst { ownerDocument } = element;\n\t\tconst { defaultView } = ownerDocument;\n\t\tconst newEvent = new defaultView.InputEvent( 'input', init );\n\n\t\t// Dispatch an `input` event with the new data. This will trigger the\n\t\t// input rules.\n\t\t// Postpone the `input` to the next event loop tick so that the dispatch\n\t\t// doesn't happen synchronously in the middle of `beforeinput` dispatch.\n\t\t// This is closer to how native `input` event would be timed, and also\n\t\t// makes sure that the `input` event is dispatched only after the `onChange`\n\t\t// call few lines above has fully updated the data store state and rerendered\n\t\t// all affected components.\n\t\twindow.queueMicrotask( () => {\n\t\t\tevent.target.dispatchEvent( newEvent );\n\t\t} );\n\t\tevent.preventDefault();\n\t}\n\n\telement.addEventListener( 'beforeinput', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'beforeinput', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { insert, toHTMLString } from '@wordpress/rich-text';\nimport { getBlockTransforms, findTransform } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { preventEventDiscovery } from '../prevent-event-discovery';\nimport {\n\tretrieveSelectedAttribute,\n\tSTART_OF_SELECTED_AREA,\n} from '../../../utils/selection';\n\nexport function findSelection( blocks ) {\n\tlet i = blocks.length;\n\n\twhile ( i-- ) {\n\t\tconst attributeKey = retrieveSelectedAttribute(\n\t\t\tblocks[ i ].attributes\n\t\t);\n\n\t\tif ( attributeKey ) {\n\t\t\tblocks[ i ].attributes[ attributeKey ] = blocks[ i ].attributes[\n\t\t\t\tattributeKey\n\t\t\t]\n\t\t\t\t// To do: refactor this to use rich text's selection instead, so\n\t\t\t\t// we no longer have to use on this hack inserting a special\n\t\t\t\t// character.\n\t\t\t\t.toString()\n\t\t\t\t.replace( START_OF_SELECTED_AREA, '' );\n\t\t\treturn [ blocks[ i ].clientId, attributeKey, 0, 0 ];\n\t\t}\n\n\t\tconst nestedSelection = findSelection( blocks[ i ].innerBlocks );\n\n\t\tif ( nestedSelection ) {\n\t\t\treturn nestedSelection;\n\t\t}\n\t}\n\n\treturn [];\n}\n\nexport default ( props ) => ( element ) => {\n\tfunction inputRule() {\n\t\tconst { getValue, onReplace, selectionChange, registry } =\n\t\t\tprops.current;\n\n\t\tif ( ! onReplace ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We must use getValue() here because value may be update\n\t\t// asynchronously.\n\t\tconst value = getValue();\n\t\tconst { start, text } = value;\n\t\tconst characterBefore = text.slice( start - 1, start );\n\n\t\t// The character right before the caret must be a plain space.\n\t\tif ( characterBefore !== ' ' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst trimmedTextBefore = text.slice( 0, start ).trim();\n\t\tconst prefixTransforms = getBlockTransforms( 'from' ).filter(\n\t\t\t( { type } ) => type === 'prefix'\n\t\t);\n\t\tconst transformation = findTransform(\n\t\t\tprefixTransforms,\n\t\t\t( { prefix } ) => {\n\t\t\t\treturn trimmedTextBefore === prefix;\n\t\t\t}\n\t\t);\n\n\t\tif ( ! transformation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst content = toHTMLString( {\n\t\t\tvalue: insert( value, START_OF_SELECTED_AREA, 0, start ),\n\t\t} );\n\t\tconst block = transformation.transform( content );\n\n\t\tselectionChange( ...findSelection( [ block ] ) );\n\t\tonReplace( [ block ] );\n\t\tregistry.dispatch( blockEditorStore ).__unstableMarkAutomaticChange();\n\n\t\treturn true;\n\t}\n\n\tfunction onInput( event ) {\n\t\tconst { inputType, type } = event;\n\t\tconst {\n\t\t\tgetValue,\n\t\t\tonChange,\n\t\t\t__unstableAllowPrefixTransformations,\n\t\t\tformatTypes,\n\t\t\tregistry,\n\t\t} = props.current;\n\n\t\t// Only run input rules when inserting text.\n\t\tif ( inputType !== 'insertText' && type !== 'compositionend' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( __unstableAllowPrefixTransformations && inputRule() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = getValue();\n\t\tconst transformed = formatTypes.reduce(\n\t\t\t( accumlator, { __unstableInputRule } ) => {\n\t\t\t\tif ( __unstableInputRule ) {\n\t\t\t\t\taccumlator = __unstableInputRule( accumlator );\n\t\t\t\t}\n\n\t\t\t\treturn accumlator;\n\t\t\t},\n\t\t\tpreventEventDiscovery( value )\n\t\t);\n\n\t\tconst {\n\t\t\t__unstableMarkLastChangeAsPersistent,\n\t\t\t__unstableMarkAutomaticChange,\n\t\t} = registry.dispatch( blockEditorStore );\n\n\t\tif ( transformed !== value ) {\n\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\tonChange( {\n\t\t\t\t...transformed,\n\t\t\t\tactiveFormats: value.activeFormats,\n\t\t\t} );\n\t\t\t__unstableMarkAutomaticChange();\n\t\t}\n\t}\n\n\telement.addEventListener( 'input', onInput );\n\telement.addEventListener( 'compositionend', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'input', onInput );\n\t\telement.removeEventListener( 'compositionend', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { renderToString } from '@wordpress/element';\nimport { createBlock } from '@wordpress/blocks';\n\nexport function addActiveFormats( value, activeFormats ) {\n\tif ( activeFormats?.length ) {\n\t\tlet index = value.formats.length;\n\n\t\twhile ( index-- ) {\n\t\t\tvalue.formats[ index ] = [\n\t\t\t\t...activeFormats,\n\t\t\t\t...( value.formats[ index ] || [] ),\n\t\t\t];\n\t\t}\n\t}\n}\n\n/**\n * Get the multiline tag based on the multiline prop.\n *\n * @param {?(string|boolean)} multiline The multiline prop.\n *\n * @return {string | undefined} The multiline tag.\n */\nexport function getMultilineTag( multiline ) {\n\tif ( multiline !== true && multiline !== 'p' && multiline !== 'li' ) {\n\t\treturn;\n\t}\n\n\treturn multiline === true ? 'p' : multiline;\n}\n\nexport function getAllowedFormats( { allowedFormats, disableFormats } ) {\n\tif ( disableFormats ) {\n\t\treturn getAllowedFormats.EMPTY_ARRAY;\n\t}\n\n\treturn allowedFormats;\n}\n\ngetAllowedFormats.EMPTY_ARRAY = [];\n\n/**\n * Creates a link from pasted URL.\n * Creates a paragraph block containing a link to the URL, and calls `onReplace`.\n *\n * @param {string} url The URL that could not be embedded.\n * @param {Function} onReplace Function to call with the created fallback block.\n */\nexport function createLinkInParagraph( url, onReplace ) {\n\tconst link = { url };\n\tonReplace(\n\t\tcreateBlock( 'core/paragraph', { content: renderToString( link ) } )\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { pasteHandler } from '@wordpress/blocks';\nimport { isEmpty, insert, create } from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { addActiveFormats } from '../utils';\nimport { getPasteEventData } from '../../../utils/pasting';\n\n/** @typedef {import('@wordpress/rich-text').RichTextValue} RichTextValue */\n\nexport default ( props ) => ( element ) => {\n\tfunction _onPaste( event ) {\n\t\tconst {\n\t\t\tdisableFormats,\n\t\t\tonChange,\n\t\t\tvalue,\n\t\t\tformatTypes,\n\t\t\ttagName,\n\t\t\tonReplace,\n\t\t\t__unstableEmbedURLOnPaste,\n\t\t\tpreserveWhiteSpace,\n\t\t\tpastePlainText,\n\t\t} = props.current;\n\n\t\t// The event listener is attached to the window, so we need to check if\n\t\t// the target is the element.\n\t\tif ( event.target !== element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { plainText, html } = getPasteEventData( event );\n\n\t\tevent.preventDefault();\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\tif ( disableFormats ) {\n\t\t\tonChange( insert( value, plainText ) );\n\t\t\treturn;\n\t\t}\n\n\t\tconst isInternal =\n\t\t\tevent.clipboardData.getData( 'rich-text' ) === 'true';\n\n\t\tfunction pasteInline( content ) {\n\t\t\tconst transformed = formatTypes.reduce(\n\t\t\t\t( accumulator, { __unstablePasteRule } ) => {\n\t\t\t\t\t// Only allow one transform.\n\t\t\t\t\tif ( __unstablePasteRule && accumulator === value ) {\n\t\t\t\t\t\taccumulator = __unstablePasteRule( value, {\n\t\t\t\t\t\t\thtml,\n\t\t\t\t\t\t\tplainText,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\tvalue\n\t\t\t);\n\t\t\tif ( transformed !== value ) {\n\t\t\t\tonChange( transformed );\n\t\t\t} else {\n\t\t\t\tconst valueToInsert = create( { html: content } );\n\t\t\t\taddActiveFormats( valueToInsert, value.activeFormats );\n\t\t\t\tonChange( insert( value, valueToInsert ) );\n\t\t\t}\n\t\t}\n\n\t\t// If the data comes from a rich text instance, we can directly use it\n\t\t// without filtering the data. The filters are only meant for externally\n\t\t// pasted content and remove inline styles.\n\t\tif ( isInternal ) {\n\t\t\tpasteInline( html );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( pastePlainText ) {\n\t\t\tonChange( insert( value, create( { text: plainText } ) ) );\n\t\t\treturn;\n\t\t}\n\n\t\tlet mode = 'INLINE';\n\n\t\tconst trimmedPlainText = plainText.trim();\n\n\t\tif (\n\t\t\t__unstableEmbedURLOnPaste &&\n\t\t\tisEmpty( value ) &&\n\t\t\tisURL( trimmedPlainText ) &&\n\t\t\t// For the link pasting feature, allow only http(s) protocols.\n\t\t\t/^https?:/.test( trimmedPlainText )\n\t\t) {\n\t\t\tmode = 'BLOCKS';\n\t\t}\n\n\t\tconst content = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode,\n\t\t\ttagName,\n\t\t\tpreserveWhiteSpace,\n\t\t} );\n\n\t\tif ( typeof content === 'string' ) {\n\t\t\tpasteInline( content );\n\t\t} else if ( content.length > 0 ) {\n\t\t\tif ( onReplace && isEmpty( value ) ) {\n\t\t\t\tonReplace( content, content.length - 1, -1 );\n\t\t\t}\n\t\t}\n\t}\n\n\tconst { defaultView } = element.ownerDocument;\n\n\t// Attach the listener to the window so parent elements have the chance to\n\t// prevent the default behavior.\n\tdefaultView.addEventListener( 'paste', _onPaste );\n\treturn () => {\n\t\tdefaultView.removeEventListener( 'paste', _onPaste );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useRef } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport beforeInputRules from './before-input-rules';\nimport inputRules from './input-rules';\nimport insertReplacementText from './insert-replacement-text';\nimport removeBrowserShortcuts from './remove-browser-shortcuts';\nimport shortcuts from './shortcuts';\nimport inputEvents from './input-events';\nimport undoAutomaticChange from './undo-automatic-change';\nimport pasteHandler from './paste-handler';\nimport _delete from './delete';\nimport enter from './enter';\nimport firefoxCompat from './firefox-compat';\n\nconst allEventListeners = [\n\tbeforeInputRules,\n\tinputRules,\n\tinsertReplacementText,\n\tremoveBrowserShortcuts,\n\tshortcuts,\n\tinputEvents,\n\tundoAutomaticChange,\n\tpasteHandler,\n\t_delete,\n\tenter,\n\tfirefoxCompat,\n];\n\nexport function useEventListeners( props ) {\n\tconst propsRef = useRef( props );\n\tpropsRef.current = props;\n\tconst refEffects = useMemo(\n\t\t() => allEventListeners.map( ( refEffect ) => refEffect( propsRef ) ),\n\t\t[ propsRef ]\n\t);\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( ! props.isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cleanups = refEffects.map( ( effect ) => effect( element ) );\n\t\t\treturn () => {\n\t\t\t\tcleanups.forEach( ( cleanup ) => cleanup() );\n\t\t\t};\n\t\t},\n\t\t[ refEffects, props.isSelected ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { insert } from '@wordpress/rich-text';\n\nexport function preventEventDiscovery( value ) {\n\tconst searchText = 'tales of gutenberg';\n\tconst addText =\n\t\t' 🐡🐢🦀🐤🦋🐘🐧🐹🦁🦄🦍🐼🐿🎃🐴🐝🐆🦕🦔🌱🍇π🍌🐉💧🥨🌌🍂🍠🥦🥚🥝🎟🥥🥒🛵🥖🍒🍯🎾🎲🐺🐚🐮⌛️';\n\tconst { start, text } = value;\n\n\tif ( start < searchText.length ) {\n\t\treturn value;\n\t}\n\n\tconst charactersBefore = text.slice( start - searchText.length, start );\n\n\tif ( charactersBefore.toLowerCase() !== searchText ) {\n\t\treturn value;\n\t}\n\n\treturn insert( value, addText );\n}\n","/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * When the browser is about to auto correct, add an undo level so the user can\n * revert the change.\n *\n * @param {Object} props\n */\nexport default ( props ) => ( element ) => {\n\tfunction onInput( event ) {\n\t\tif ( event.inputType !== 'insertReplacementText' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { registry } = props.current;\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.__unstableMarkLastChangeAsPersistent();\n\t}\n\n\telement.addEventListener( 'beforeinput', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'beforeinput', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { isKeyboardEvent } from '@wordpress/keycodes';\n\n/**\n * Hook to prevent default behaviors for key combinations otherwise handled\n * internally by RichText.\n */\nexport default () => ( node ) => {\n\tfunction onKeydown( event ) {\n\t\tif (\n\t\t\tisKeyboardEvent.primary( event, 'z' ) ||\n\t\t\tisKeyboardEvent.primary( event, 'y' ) ||\n\t\t\tisKeyboardEvent.primaryShift( event, 'z' )\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\tnode.addEventListener( 'keydown', onKeydown );\n\treturn () => {\n\t\tnode.removeEventListener( 'keydown', onKeydown );\n\t};\n};\n","export default ( props ) => ( element ) => {\n\tconst { keyboardShortcuts } = props.current;\n\tfunction onKeyDown( event ) {\n\t\tfor ( const keyboardShortcut of keyboardShortcuts.current ) {\n\t\t\tkeyboardShortcut( event );\n\t\t}\n\t}\n\n\telement.addEventListener( 'keydown', onKeyDown );\n\treturn () => {\n\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t};\n};\n","export default ( props ) => ( element ) => {\n\tconst { inputEvents } = props.current;\n\tfunction onInput( event ) {\n\t\tfor ( const keyboardShortcut of inputEvents.current ) {\n\t\t\tkeyboardShortcut( event );\n\t\t}\n\t}\n\n\telement.addEventListener( 'input', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'input', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { BACKSPACE, ESCAPE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\nexport default ( props ) => ( element ) => {\n\tfunction onKeyDown( event ) {\n\t\tconst { keyCode } = event;\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( keyCode !== BACKSPACE && keyCode !== ESCAPE ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { registry } = props.current;\n\t\tconst { didAutomaticChange, getSettings } =\n\t\t\tregistry.select( blockEditorStore );\n\n\t\tconst { __experimentalUndo } = getSettings();\n\n\t\tif ( ! __experimentalUndo ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! didAutomaticChange() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\t__experimentalUndo();\n\t}\n\n\telement.addEventListener( 'keydown', onKeyDown );\n\treturn () => {\n\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { DELETE, BACKSPACE } from '@wordpress/keycodes';\nimport { isCollapsed, isEmpty } from '@wordpress/rich-text';\n\nexport default ( props ) => ( element ) => {\n\tfunction onKeyDown( event ) {\n\t\tconst { keyCode } = event;\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { value, onMerge, onRemove } = props.current;\n\n\t\tif ( keyCode === DELETE || keyCode === BACKSPACE ) {\n\t\t\tconst { start, end, text } = value;\n\t\t\tconst isReverse = keyCode === BACKSPACE;\n\t\t\tconst hasActiveFormats =\n\t\t\t\tvalue.activeFormats && !! value.activeFormats.length;\n\n\t\t\t// Only process delete if the key press occurs at an uncollapsed edge.\n\t\t\tif (\n\t\t\t\t! isCollapsed( value ) ||\n\t\t\t\thasActiveFormats ||\n\t\t\t\t( isReverse && start !== 0 ) ||\n\t\t\t\t( ! isReverse && end !== text.length )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( onMerge ) {\n\t\t\t\tonMerge( ! isReverse );\n\t\t\t}\n\n\t\t\t// Only handle remove on Backspace. This serves dual-purpose of being\n\t\t\t// an intentional user interaction distinguishing between Backspace and\n\t\t\t// Delete to remove the empty field, but also to avoid merge & remove\n\t\t\t// causing destruction of two fields (merge, then removed merged).\n\t\t\telse if ( onRemove && isEmpty( value ) && isReverse ) {\n\t\t\t\tonRemove( ! isReverse );\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\telement.addEventListener( 'keydown', onKeyDown );\n\treturn () => {\n\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { ENTER } from '@wordpress/keycodes';\nimport { insert, remove } from '@wordpress/rich-text';\n\nexport default ( props ) => ( element ) => {\n\tfunction onKeyDownDeprecated( event ) {\n\t\tif ( event.keyCode !== ENTER ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { onReplace, onSplit } = props.current;\n\n\t\tif ( onReplace && onSplit ) {\n\t\t\tevent.__deprecatedOnSplit = true;\n\t\t}\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The event listener is attached to the window, so we need to check if\n\t\t// the target is the element.\n\t\tif ( event.target !== element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.keyCode !== ENTER ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tdisableLineBreaks,\n\t\t\tonSplitAtEnd,\n\t\t\tonSplitAtDoubleLineEnd,\n\t\t\tregistry,\n\t\t} = props.current;\n\n\t\tevent.preventDefault();\n\n\t\tconst { text, start, end } = value;\n\n\t\tif ( event.shiftKey ) {\n\t\t\tif ( ! disableLineBreaks ) {\n\t\t\t\tonChange( insert( value, '\\n' ) );\n\t\t\t}\n\t\t} else if ( onSplitAtEnd && start === end && end === text.length ) {\n\t\t\tonSplitAtEnd();\n\t\t} else if (\n\t\t\t// For some blocks it's desirable to split at the end of the\n\t\t\t// block when there are two line breaks at the end of the\n\t\t\t// block, so triple Enter exits the block.\n\t\t\tonSplitAtDoubleLineEnd &&\n\t\t\tstart === end &&\n\t\t\tend === text.length &&\n\t\t\ttext.slice( -2 ) === '\\n\\n'\n\t\t) {\n\t\t\tregistry.batch( () => {\n\t\t\t\tconst _value = { ...value };\n\t\t\t\t_value.start = _value.end - 2;\n\t\t\t\tonChange( remove( _value ) );\n\t\t\t\tonSplitAtDoubleLineEnd();\n\t\t\t} );\n\t\t} else if ( ! disableLineBreaks ) {\n\t\t\tonChange( insert( value, '\\n' ) );\n\t\t}\n\t}\n\n\tconst { defaultView } = element.ownerDocument;\n\n\t// Attach the listener to the window so parent elements have the chance to\n\t// prevent the default behavior.\n\tdefaultView.addEventListener( 'keydown', onKeyDown );\n\telement.addEventListener( 'keydown', onKeyDownDeprecated );\n\treturn () => {\n\t\tdefaultView.removeEventListener( 'keydown', onKeyDown );\n\t\telement.removeEventListener( 'keydown', onKeyDownDeprecated );\n\t};\n};\n","/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\nexport default ( props ) => ( element ) => {\n\tfunction onFocus() {\n\t\tconst { registry } = props.current;\n\t\tif ( ! registry.select( blockEditorStore ).isMultiSelecting() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This is a little hack to work around focus issues with nested\n\t\t// editable elements in Firefox. For some reason the editable child\n\t\t// element sometimes regains focus, while it should not be focusable\n\t\t// and focus should remain on the editable parent element.\n\t\t// To do: try to find the cause of the shifting focus.\n\t\tconst parentEditable = element.parentElement.closest(\n\t\t\t'[contenteditable=\"true\"]'\n\t\t);\n\n\t\tif ( parentEditable ) {\n\t\t\tparentEditable.focus();\n\t\t}\n\t}\n\n\telement.addEventListener( 'focus', onFocus );\n\treturn () => {\n\t\telement.removeEventListener( 'focus', onFocus );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { getActiveFormat, getActiveObject } from '@wordpress/rich-text';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\n\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nexport const usesContextKey = Symbol( 'usesContext' );\n\nfunction Edit( { onChange, onFocus, value, forwardedRef, settings } ) {\n\tconst {\n\t\tname,\n\t\tedit: EditFunction,\n\t\t[ usesContextKey ]: usesContext,\n\t} = settings;\n\n\tconst blockContext = useContext( BlockContext );\n\n\t// Assign context values using the block type's declared context needs.\n\tconst context = useMemo( () => {\n\t\treturn usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tusesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t}, [ usesContext, blockContext ] );\n\n\tif ( ! EditFunction ) {\n\t\treturn null;\n\t}\n\n\tconst activeFormat = getActiveFormat( value, name );\n\tconst isActive = activeFormat !== undefined;\n\tconst activeObject = getActiveObject( value );\n\tconst isObjectActive =\n\t\tactiveObject !== undefined && activeObject.type === name;\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default function FormatEdit( { formatTypes, ...props } ) {\n\treturn formatTypes.map( ( settings ) => (\n\t\t\n\t) );\n}\n","/**\n * WordPress dependencies\n */\nimport { RawHTML } from '@wordpress/element';\nimport { children as childrenSource } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport RichText from './';\n\n/**\n * Internal dependencies\n */\nimport { getMultilineTag } from './utils';\n\nexport function valueToHTMLString( value, multiline ) {\n\tif ( RichText.isEmpty( value ) ) {\n\t\tconst multilineTag = getMultilineTag( multiline );\n\t\treturn multilineTag ? `<${ multilineTag }>` : '';\n\t}\n\n\tif ( Array.isArray( value ) ) {\n\t\tdeprecated( 'wp.blockEditor.RichText value prop as children type', {\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.3',\n\t\t\talternative: 'value prop as string',\n\t\t\tlink: 'https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/',\n\t\t} );\n\t\treturn childrenSource.toHTML( value );\n\t}\n\n\t// To do: deprecate string type.\n\tif ( typeof value === 'string' ) {\n\t\treturn value;\n\t}\n\n\t// To do: create a toReactComponent method on RichTextData, which we\n\t// might in the future also use for the editable tree. See\n\t// https://github.com/WordPress/gutenberg/pull/41655.\n\treturn value.toHTMLString();\n}\n\nexport function Content( {\n\tvalue,\n\ttagName: Tag,\n\tmultiline,\n\tformat,\n\t...props\n} ) {\n\tvalue = { valueToHTMLString( value, multiline ) };\n\treturn Tag ? { value } : value;\n}\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { ENTER } from '@wordpress/keycodes';\nimport { create, split, toHTMLString } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { RichTextWrapper } from './';\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockEditContext } from '../block-edit';\nimport { getMultilineTag } from './utils';\n\nfunction RichTextMultiline(\n\t{\n\t\tchildren,\n\t\tidentifier,\n\t\ttagName: TagName = 'div',\n\t\tvalue = '',\n\t\tonChange,\n\t\tmultiline,\n\t\t...props\n\t},\n\tforwardedRef\n) {\n\tdeprecated( 'wp.blockEditor.RichText multiline prop', {\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t\talternative: 'nested blocks (InnerBlocks)',\n\t\tlink: 'https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/nested-blocks-inner-blocks/',\n\t} );\n\n\tconst { clientId } = useBlockEditContext();\n\tconst { getSelectionStart, getSelectionEnd } =\n\t\tuseSelect( blockEditorStore );\n\tconst { selectionChange } = useDispatch( blockEditorStore );\n\n\tconst multilineTagName = getMultilineTag( multiline );\n\tvalue = value || `<${ multilineTagName }>`;\n\tconst padded = `${ value }<${ multilineTagName }>`;\n\tconst values = padded.split(\n\t\t`<${ multilineTagName }>`\n\t);\n\n\tvalues.shift();\n\tvalues.pop();\n\n\tfunction _onChange( newValues ) {\n\t\tonChange(\n\t\t\t`<${ multilineTagName }>${ newValues.join(\n\t\t\t\t`<${ multilineTagName }>`\n\t\t\t) }`\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ values.map( ( _value, index ) => {\n\t\t\t\treturn (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst newValues = values.slice();\n\t\t\t\t\t\t\tnewValues[ index ] = newValue;\n\t\t\t\t\t\t\t_onChange( newValues );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tisSelected={ undefined }\n\t\t\t\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\t\t\t\tif ( event.keyCode !== ENTER ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\tconst { offset: start } = getSelectionStart();\n\t\t\t\t\t\t\tconst { offset: end } = getSelectionEnd();\n\n\t\t\t\t\t\t\t// Cannot split if there is no selection.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttypeof start !== 'number' ||\n\t\t\t\t\t\t\t\ttypeof end !== 'number'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst richTextValue = create( { html: _value } );\n\t\t\t\t\t\t\trichTextValue.start = start;\n\t\t\t\t\t\t\trichTextValue.end = end;\n\n\t\t\t\t\t\t\tconst array = split( richTextValue ).map( ( v ) =>\n\t\t\t\t\t\t\t\ttoHTMLString( { value: v } )\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst newValues = values.slice();\n\t\t\t\t\t\t\tnewValues.splice( index, 1, ...array );\n\t\t\t\t\t\t\t_onChange( newValues );\n\t\t\t\t\t\t\tselectionChange(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t`${ identifier }-${ index + 1 }`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonMerge={ ( forward ) => {\n\t\t\t\t\t\t\tconst newValues = values.slice();\n\t\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\t\tif ( forward ) {\n\t\t\t\t\t\t\t\tif ( ! newValues[ index + 1 ] ) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewValues.splice(\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\tnewValues[ index ] + newValues[ index + 1 ]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\toffset = newValues[ index ].length - 1;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif ( ! newValues[ index - 1 ] ) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewValues.splice(\n\t\t\t\t\t\t\t\t\tindex - 1,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\tnewValues[ index - 1 ] + newValues[ index ]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\toffset = newValues[ index - 1 ].length - 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_onChange( newValues );\n\t\t\t\t\t\t\tselectionChange(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t`${ identifier }-${\n\t\t\t\t\t\t\t\t\tindex - ( forward ? 0 : 1 )\n\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\t\toffset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\nexport default forwardRef( RichTextMultiline );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseRef,\n\tuseCallback,\n\tforwardRef,\n\tcreateContext,\n\tuseContext,\n} from '@wordpress/element';\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useMergeRefs, useInstanceId } from '@wordpress/compose';\nimport {\n\t__unstableUseRichText as useRichText,\n\tremoveFormat,\n} from '@wordpress/rich-text';\nimport { Popover } from '@wordpress/components';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditorAutocompleteProps } from '../autocomplete';\nimport { useBlockEditContext } from '../block-edit';\nimport { blockBindingsKey, isPreviewModeKey } from '../block-edit/context';\nimport FormatToolbarContainer from './format-toolbar-container';\nimport { store as blockEditorStore } from '../../store';\nimport { useMarkPersistent } from './use-mark-persistent';\nimport { useFormatTypes } from './use-format-types';\nimport { useEventListeners } from './event-listeners';\nimport FormatEdit from './format-edit';\nimport { getAllowedFormats } from './utils';\nimport { Content, valueToHTMLString } from './content';\nimport { withDeprecations } from './with-deprecations';\nimport { unlock } from '../../lock-unlock';\nimport { canBindBlock } from '../../hooks/use-bindings-attributes';\nimport BlockContext from '../block-context';\n\nexport const keyboardShortcutContext = createContext();\nexport const inputEventContext = createContext();\n\nconst instanceIdKey = Symbol( 'instanceId' );\n\n/**\n * Removes props used for the native version of RichText so that they are not\n * passed to the DOM element and log warnings.\n *\n * @param {Object} props Props to filter.\n *\n * @return {Object} Filtered props.\n */\nfunction removeNativeProps( props ) {\n\tconst {\n\t\t__unstableMobileNoFocusOnMount,\n\t\tdeleteEnter,\n\t\tplaceholderTextColor,\n\t\ttextAlign,\n\t\tselectionColor,\n\t\ttagsToEliminate,\n\t\tdisableEditingMenu,\n\t\tfontSize,\n\t\tfontFamily,\n\t\tfontWeight,\n\t\tfontStyle,\n\t\tminWidth,\n\t\tmaxWidth,\n\t\tdisableSuggestions,\n\t\tdisableAutocorrection,\n\t\t...restProps\n\t} = props;\n\treturn restProps;\n}\n\nexport function RichTextWrapper(\n\t{\n\t\tchildren,\n\t\ttagName = 'div',\n\t\tvalue: adjustedValue = '',\n\t\tonChange: adjustedOnChange,\n\t\tisSelected: originalIsSelected,\n\t\tmultiline,\n\t\tinlineToolbar,\n\t\twrapperClassName,\n\t\tautocompleters,\n\t\tonReplace,\n\t\tplaceholder,\n\t\tallowedFormats,\n\t\twithoutInteractiveFormatting,\n\t\tonRemove,\n\t\tonMerge,\n\t\tonSplit,\n\t\t__unstableOnSplitAtEnd: onSplitAtEnd,\n\t\t__unstableOnSplitAtDoubleLineEnd: onSplitAtDoubleLineEnd,\n\t\tidentifier,\n\t\tpreserveWhiteSpace,\n\t\t__unstablePastePlainText: pastePlainText,\n\t\t__unstableEmbedURLOnPaste,\n\t\t__unstableDisableFormats: disableFormats,\n\t\tdisableLineBreaks,\n\t\t__unstableAllowPrefixTransformations,\n\t\treadOnly,\n\t\t...props\n\t},\n\tforwardedRef\n) {\n\tprops = removeNativeProps( props );\n\n\tif ( onSplit ) {\n\t\tdeprecated( 'wp.blockEditor.RichText onSplit prop', {\n\t\t\tsince: '6.4',\n\t\t\talternative: 'block.json support key: \"splitting\"',\n\t\t} );\n\t}\n\n\tconst instanceId = useInstanceId( RichTextWrapper );\n\tconst anchorRef = useRef();\n\tconst context = useBlockEditContext();\n\tconst { clientId, isSelected: isBlockSelected, name: blockName } = context;\n\tconst blockBindings = context[ blockBindingsKey ];\n\tconst blockContext = useContext( BlockContext );\n\tconst registry = useRegistry();\n\tconst selector = ( select ) => {\n\t\t// Avoid subscribing to the block editor store if the block is not\n\t\t// selected.\n\t\tif ( ! isBlockSelected ) {\n\t\t\treturn { isSelected: false };\n\t\t}\n\n\t\tconst { getSelectionStart, getSelectionEnd } =\n\t\t\tselect( blockEditorStore );\n\t\tconst selectionStart = getSelectionStart();\n\t\tconst selectionEnd = getSelectionEnd();\n\n\t\tlet isSelected;\n\n\t\tif ( originalIsSelected === undefined ) {\n\t\t\tisSelected =\n\t\t\t\tselectionStart.clientId === clientId &&\n\t\t\t\tselectionEnd.clientId === clientId &&\n\t\t\t\t( identifier\n\t\t\t\t\t? selectionStart.attributeKey === identifier\n\t\t\t\t\t: selectionStart[ instanceIdKey ] === instanceId );\n\t\t} else if ( originalIsSelected ) {\n\t\t\tisSelected = selectionStart.clientId === clientId;\n\t\t}\n\n\t\treturn {\n\t\t\tselectionStart: isSelected ? selectionStart.offset : undefined,\n\t\t\tselectionEnd: isSelected ? selectionEnd.offset : undefined,\n\t\t\tisSelected,\n\t\t};\n\t};\n\tconst { selectionStart, selectionEnd, isSelected } = useSelect( selector, [\n\t\tclientId,\n\t\tidentifier,\n\t\tinstanceId,\n\t\toriginalIsSelected,\n\t\tisBlockSelected,\n\t] );\n\n\tconst { disableBoundBlock, bindingsPlaceholder, bindingsLabel } = useSelect(\n\t\t( select ) => {\n\t\t\tif (\n\t\t\t\t! blockBindings?.[ identifier ] ||\n\t\t\t\t! canBindBlock( blockName )\n\t\t\t) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst relatedBinding = blockBindings[ identifier ];\n\t\t\tconst { getBlockBindingsSource } = unlock( select( blocksStore ) );\n\t\t\tconst blockBindingsSource = getBlockBindingsSource(\n\t\t\t\trelatedBinding.source\n\t\t\t);\n\t\t\tconst blockBindingsContext = {};\n\t\t\tif ( blockBindingsSource?.usesContext?.length ) {\n\t\t\t\tfor ( const key of blockBindingsSource.usesContext ) {\n\t\t\t\t\tblockBindingsContext[ key ] = blockContext[ key ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst _disableBoundBlock =\n\t\t\t\t! blockBindingsSource?.canUserEditValue?.( {\n\t\t\t\t\tregistry,\n\t\t\t\t\tcontext: blockBindingsContext,\n\t\t\t\t\targs: relatedBinding.args,\n\t\t\t\t} );\n\n\t\t\t// Don't modify placeholders if value is not empty.\n\t\t\tif ( adjustedValue.length > 0 ) {\n\t\t\t\treturn {\n\t\t\t\t\tdisableBoundBlock: _disableBoundBlock,\n\t\t\t\t\t// Null values will make them fall back to the default behavior.\n\t\t\t\t\tbindingsPlaceholder: null,\n\t\t\t\t\tbindingsLabel: null,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\t\t\tconst blockAttributes = getBlockAttributes( clientId );\n\t\t\tconst fieldsList = blockBindingsSource?.getFieldsList?.( {\n\t\t\t\tregistry,\n\t\t\t\tcontext: blockBindingsContext,\n\t\t\t} );\n\t\t\tconst bindingKey =\n\t\t\t\tfieldsList?.[ relatedBinding?.args?.key ]?.label ??\n\t\t\t\tblockBindingsSource?.label;\n\n\t\t\tconst _bindingsPlaceholder = _disableBoundBlock\n\t\t\t\t? bindingKey\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: connected field label or source label */\n\t\t\t\t\t\t__( 'Add %s' ),\n\t\t\t\t\t\tbindingKey\n\t\t\t\t );\n\t\t\tconst _bindingsLabel = _disableBoundBlock\n\t\t\t\t? relatedBinding?.args?.key || blockBindingsSource?.label\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: source label or key */\n\t\t\t\t\t\t__( 'Empty %s; start writing to edit its value' ),\n\t\t\t\t\t\trelatedBinding?.args?.key || blockBindingsSource?.label\n\t\t\t\t );\n\n\t\t\treturn {\n\t\t\t\tdisableBoundBlock: _disableBoundBlock,\n\t\t\t\tbindingsPlaceholder:\n\t\t\t\t\tblockAttributes?.placeholder || _bindingsPlaceholder,\n\t\t\t\tbindingsLabel: _bindingsLabel,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tblockBindings,\n\t\t\tidentifier,\n\t\t\tblockName,\n\t\t\tblockContext,\n\t\t\tregistry,\n\t\t\tadjustedValue,\n\t\t]\n\t);\n\n\tconst shouldDisableEditing = readOnly || disableBoundBlock;\n\n\tconst { getSelectionStart, getSelectionEnd, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { selectionChange } = useDispatch( blockEditorStore );\n\tconst adjustedAllowedFormats = getAllowedFormats( {\n\t\tallowedFormats,\n\t\tdisableFormats,\n\t} );\n\tconst hasFormats =\n\t\t! adjustedAllowedFormats || adjustedAllowedFormats.length > 0;\n\n\tconst onSelectionChange = useCallback(\n\t\t( start, end ) => {\n\t\t\tconst selection = {};\n\t\t\tconst unset = start === undefined && end === undefined;\n\n\t\t\tconst baseSelection = {\n\t\t\t\tclientId,\n\t\t\t\t[ identifier ? 'attributeKey' : instanceIdKey ]: identifier\n\t\t\t\t\t? identifier\n\t\t\t\t\t: instanceId,\n\t\t\t};\n\n\t\t\tif ( typeof start === 'number' || unset ) {\n\t\t\t\t// If we are only setting the start (or the end below), which\n\t\t\t\t// means a partial selection, and we're not updating a selection\n\t\t\t\t// with the same client ID, abort. This means the selected block\n\t\t\t\t// is a parent block.\n\t\t\t\tif (\n\t\t\t\t\tend === undefined &&\n\t\t\t\t\tgetBlockRootClientId( clientId ) !==\n\t\t\t\t\t\tgetBlockRootClientId( getSelectionEnd().clientId )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselection.start = {\n\t\t\t\t\t...baseSelection,\n\t\t\t\t\toffset: start,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( typeof end === 'number' || unset ) {\n\t\t\t\tif (\n\t\t\t\t\tstart === undefined &&\n\t\t\t\t\tgetBlockRootClientId( clientId ) !==\n\t\t\t\t\t\tgetBlockRootClientId( getSelectionStart().clientId )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselection.end = {\n\t\t\t\t\t...baseSelection,\n\t\t\t\t\toffset: end,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tselectionChange( selection );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetSelectionEnd,\n\t\t\tgetSelectionStart,\n\t\t\tidentifier,\n\t\t\tinstanceId,\n\t\t\tselectionChange,\n\t\t]\n\t);\n\n\tconst {\n\t\tformatTypes,\n\t\tprepareHandlers,\n\t\tvalueHandlers,\n\t\tchangeHandlers,\n\t\tdependencies,\n\t} = useFormatTypes( {\n\t\tclientId,\n\t\tidentifier,\n\t\twithoutInteractiveFormatting,\n\t\tallowedFormats: adjustedAllowedFormats,\n\t} );\n\n\tfunction addEditorOnlyFormats( value ) {\n\t\treturn valueHandlers.reduce(\n\t\t\t( accumulator, fn ) => fn( accumulator, value.text ),\n\t\t\tvalue.formats\n\t\t);\n\t}\n\n\tfunction removeEditorOnlyFormats( value ) {\n\t\tformatTypes.forEach( ( formatType ) => {\n\t\t\t// Remove formats created by prepareEditableTree, because they are editor only.\n\t\t\tif ( formatType.__experimentalCreatePrepareEditableTree ) {\n\t\t\t\tvalue = removeFormat(\n\t\t\t\t\tvalue,\n\t\t\t\t\tformatType.name,\n\t\t\t\t\t0,\n\t\t\t\t\tvalue.text.length\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn value.formats;\n\t}\n\n\tfunction addInvisibleFormats( value ) {\n\t\treturn prepareHandlers.reduce(\n\t\t\t( accumulator, fn ) => fn( accumulator, value.text ),\n\t\t\tvalue.formats\n\t\t);\n\t}\n\n\tconst {\n\t\tvalue,\n\t\tgetValue,\n\t\tonChange,\n\t\tref: richTextRef,\n\t} = useRichText( {\n\t\tvalue: adjustedValue,\n\t\tonChange( html, { __unstableFormats, __unstableText } ) {\n\t\t\tadjustedOnChange( html );\n\t\t\tObject.values( changeHandlers ).forEach( ( changeHandler ) => {\n\t\t\t\tchangeHandler( __unstableFormats, __unstableText );\n\t\t\t} );\n\t\t},\n\t\tselectionStart,\n\t\tselectionEnd,\n\t\tonSelectionChange,\n\t\tplaceholder: bindingsPlaceholder || placeholder,\n\t\t__unstableIsSelected: isSelected,\n\t\t__unstableDisableFormats: disableFormats,\n\t\tpreserveWhiteSpace,\n\t\t__unstableDependencies: [ ...dependencies, tagName ],\n\t\t__unstableAfterParse: addEditorOnlyFormats,\n\t\t__unstableBeforeSerialize: removeEditorOnlyFormats,\n\t\t__unstableAddInvisibleFormats: addInvisibleFormats,\n\t} );\n\tconst autocompleteProps = useBlockEditorAutocompleteProps( {\n\t\tonReplace,\n\t\tcompleters: autocompleters,\n\t\trecord: value,\n\t\tonChange,\n\t} );\n\n\tuseMarkPersistent( { html: adjustedValue, value } );\n\n\tconst keyboardShortcuts = useRef( new Set() );\n\tconst inputEvents = useRef( new Set() );\n\n\tfunction onFocus() {\n\t\tanchorRef.current?.focus();\n\t}\n\n\tconst TagName = tagName;\n\treturn (\n\t\t<>\n\t\t\t{ isSelected && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ children &&\n\t\t\t\t\t\t\t\tchildren( { value, onChange, onFocus } ) }\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isSelected && hasFormats && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\n// This is the private API for the RichText component.\n// It allows access to all props, not just the public ones.\nexport const PrivateRichText = withDeprecations(\n\tforwardRef( RichTextWrapper )\n);\n\nPrivateRichText.Content = Content;\nPrivateRichText.isEmpty = ( value ) => {\n\treturn ! value || value.length === 0;\n};\n\n// This is the public API for the RichText component.\n// We wrap the PrivateRichText component to hide some props from the public API.\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/rich-text/README.md\n */\nconst PublicForwardedRichTextContainer = forwardRef( ( props, ref ) => {\n\tconst context = useBlockEditContext();\n\tconst isPreviewMode = context[ isPreviewModeKey ];\n\n\tif ( isPreviewMode ) {\n\t\t// Remove all non-content props.\n\t\tconst {\n\t\t\tchildren,\n\t\t\ttagName: Tag = 'div',\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tisSelected,\n\t\t\tmultiline,\n\t\t\tinlineToolbar,\n\t\t\twrapperClassName,\n\t\t\tautocompleters,\n\t\t\tonReplace,\n\t\t\tplaceholder,\n\t\t\tallowedFormats,\n\t\t\twithoutInteractiveFormatting,\n\t\t\tonRemove,\n\t\t\tonMerge,\n\t\t\tonSplit,\n\t\t\t__unstableOnSplitAtEnd,\n\t\t\t__unstableOnSplitAtDoubleLineEnd,\n\t\t\tidentifier,\n\t\t\tpreserveWhiteSpace,\n\t\t\t__unstablePastePlainText,\n\t\t\t__unstableEmbedURLOnPaste,\n\t\t\t__unstableDisableFormats,\n\t\t\tdisableLineBreaks,\n\t\t\t__unstableAllowPrefixTransformations,\n\t\t\treadOnly,\n\t\t\t...contentProps\n\t\t} = removeNativeProps( props );\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn ;\n} );\n\nPublicForwardedRichTextContainer.Content = Content;\nPublicForwardedRichTextContainer.isEmpty = ( value ) => {\n\treturn ! value || value.length === 0;\n};\n\nexport default PublicForwardedRichTextContainer;\nexport { RichTextShortcut } from './shortcut';\nexport { RichTextToolbarButton } from './toolbar-button';\nexport { __unstableRichTextInputEvent } from './input-event';\n","/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useRef } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function useMarkPersistent( { html, value } ) {\n\tconst previousTextRef = useRef();\n\tconst hasActiveFormats = !! value.activeFormats?.length;\n\tconst { __unstableMarkLastChangeAsPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Must be set synchronously to make sure it applies to the last change.\n\tuseLayoutEffect( () => {\n\t\t// Ignore mount.\n\t\tif ( ! previousTextRef.current ) {\n\t\t\tpreviousTextRef.current = value.text;\n\t\t\treturn;\n\t\t}\n\n\t\t// Text input, so don't create an undo level for every character.\n\t\t// Create an undo level after 1 second of no input.\n\t\tif ( previousTextRef.current !== value.text ) {\n\t\t\tconst timeout = window.setTimeout( () => {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}, 1000 );\n\t\t\tpreviousTextRef.current = value.text;\n\t\t\treturn () => {\n\t\t\t\twindow.clearTimeout( timeout );\n\t\t\t};\n\t\t}\n\n\t\t__unstableMarkLastChangeAsPersistent();\n\t}, [ html, hasActiveFormats ] );\n}\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport { children as childrenSource } from '@wordpress/blocks';\nimport { __unstableCreateElement } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport RichTextMultiline from './multiline';\n\nexport function withDeprecations( Component ) {\n\treturn forwardRef( ( props, ref ) => {\n\t\tlet value = props.value;\n\t\tlet onChange = props.onChange;\n\n\t\t// Handle deprecated format.\n\t\tif ( Array.isArray( value ) ) {\n\t\t\tdeprecated( 'wp.blockEditor.RichText value prop as children type', {\n\t\t\t\tsince: '6.1',\n\t\t\t\tversion: '6.3',\n\t\t\t\talternative: 'value prop as string',\n\t\t\t\tlink: 'https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/',\n\t\t\t} );\n\n\t\t\tvalue = childrenSource.toHTML( props.value );\n\t\t\tonChange = ( newValue ) =>\n\t\t\t\tprops.onChange(\n\t\t\t\t\tchildrenSource.fromDOM(\n\t\t\t\t\t\t__unstableCreateElement( document, newValue ).childNodes\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\n\t\tconst NewComponent = props.multiline ? RichTextMultiline : Component;\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport RichText from '../rich-text';\n\nconst EditableText = forwardRef( ( props, ref ) => {\n\treturn ;\n} );\n\nEditableText.Content = ( { value = '', tagName: Tag = 'div', ...props } ) => {\n\treturn { value };\n};\n\n/**\n * Renders an editable text input in which text formatting is not allowed.\n */\nexport default EditableText;\n","/**\n * External dependencies\n */\nimport TextareaAutosize from 'react-autosize-textarea';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport EditableText from '../editable-text';\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/plain-text/README.md\n */\nconst PlainText = forwardRef( ( { __experimentalVersion, ...props }, ref ) => {\n\tif ( __experimentalVersion === 2 ) {\n\t\treturn ;\n\t}\n\n\tconst { className, onChange, ...remainingProps } = props;\n\n\treturn (\n\t\t onChange( event.target.value ) }\n\t\t\t{ ...remainingProps }\n\t\t/>\n\t);\n} );\n\nexport default PlainText;\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\nimport { _x, sprintf } from '@wordpress/i18n';\n\nexport default function ResponsiveBlockControlLabel( {\n\tproperty,\n\tviewport,\n\tdesc,\n} ) {\n\tconst instanceId = useInstanceId( ResponsiveBlockControlLabel );\n\tconst accessibleLabel =\n\t\tdesc ||\n\t\tsprintf(\n\t\t\t/* translators: 1: property name. 2: viewport name. */\n\t\t\t_x(\n\t\t\t\t'Controls the %1$s property for %2$s viewports.',\n\t\t\t\t'Text labelling a interface as controlling a given layout property (eg: margin) for a given screen size.'\n\t\t\t),\n\t\t\tproperty,\n\t\t\tviewport.label\n\t\t);\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ viewport.label }\n\t\t\t\n\t\t\t\n\t\t\t\t{ accessibleLabel }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Fragment } from '@wordpress/element';\nimport { ToggleControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport ResponsiveBlockControlLabel from './label';\n\nfunction ResponsiveBlockControl( props ) {\n\tconst {\n\t\ttitle,\n\t\tproperty,\n\t\ttoggleLabel,\n\t\tonIsResponsiveChange,\n\t\trenderDefaultControl,\n\t\trenderResponsiveControls,\n\t\tisResponsive = false,\n\t\tdefaultLabel = {\n\t\t\tid: 'all',\n\t\t\tlabel: _x( 'All', 'screen sizes' ),\n\t\t},\n\t\tviewports = [\n\t\t\t{\n\t\t\t\tid: 'small',\n\t\t\t\tlabel: __( 'Small screens' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'medium',\n\t\t\t\tlabel: __( 'Medium screens' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'large',\n\t\t\t\tlabel: __( 'Large screens' ),\n\t\t\t},\n\t\t],\n\t} = props;\n\n\tif ( ! title || ! property || ! renderDefaultControl ) {\n\t\treturn null;\n\t}\n\n\tconst toggleControlLabel =\n\t\ttoggleLabel ||\n\t\tsprintf(\n\t\t\t/* translators: %s: Property value for the control (eg: margin, padding, etc.). */\n\t\t\t__( 'Use the same %s on all screen sizes.' ),\n\t\t\tproperty\n\t\t);\n\n\tconst toggleHelpText = __(\n\t\t'Toggle between using the same value for all screen sizes or using a unique value per screen size.'\n\t);\n\n\tconst defaultControl = renderDefaultControl(\n\t\t,\n\t\tdefaultLabel\n\t);\n\n\tconst defaultResponsiveControls = () => {\n\t\treturn viewports.map( ( viewport ) => (\n\t\t\t\n\t\t\t\t{ renderDefaultControl(\n\t\t\t\t\t,\n\t\t\t\t\tviewport\n\t\t\t\t) }\n\t\t\t\n\t\t) );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ title }\n\t\t\t\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ ! isResponsive && defaultControl }\n\t\t\t\t\t{ isResponsive &&\n\t\t\t\t\t\t( renderResponsiveControls\n\t\t\t\t\t\t\t? renderResponsiveControls( viewports )\n\t\t\t\t\t\t\t: defaultResponsiveControls() ) }\n\t\t\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default ResponsiveBlockControl;\n","/**\n * WordPress dependencies\n */\nimport { isKeyboardEvent } from '@wordpress/keycodes';\nimport { useEffect, useContext, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { keyboardShortcutContext } from './';\n\nexport function RichTextShortcut( { character, type, onUse } ) {\n\tconst keyboardShortcuts = useContext( keyboardShortcutContext );\n\tconst onUseRef = useRef();\n\tonUseRef.current = onUse;\n\n\tuseEffect( () => {\n\t\tfunction callback( event ) {\n\t\t\tif ( isKeyboardEvent[ type ]( event, character ) ) {\n\t\t\t\tonUseRef.current();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tkeyboardShortcuts.current.add( callback );\n\t\treturn () => {\n\t\t\tkeyboardShortcuts.current.delete( callback );\n\t\t};\n\t}, [ character, type ] );\n\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { Fill, ToolbarButton } from '@wordpress/components';\nimport { displayShortcut } from '@wordpress/keycodes';\n\nexport function RichTextToolbarButton( {\n\tname,\n\tshortcutType,\n\tshortcutCharacter,\n\t...props\n} ) {\n\tlet shortcut;\n\tlet fillName = 'RichText.ToolbarControls';\n\n\tif ( name ) {\n\t\tfillName += `.${ name }`;\n\t}\n\n\tif ( shortcutType && shortcutCharacter ) {\n\t\tshortcut = displayShortcut[ shortcutType ]( shortcutCharacter );\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useContext, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { inputEventContext } from './';\n\nexport function __unstableRichTextInputEvent( { inputType, onInput } ) {\n\tconst callbacks = useContext( inputEventContext );\n\tconst onInputRef = useRef();\n\tonInputRef.current = onInput;\n\n\tuseEffect( () => {\n\t\tfunction callback( event ) {\n\t\t\tif ( event.inputType === inputType ) {\n\t\t\t\tonInputRef.current();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tcallbacks.current.add( callback );\n\t\treturn () => {\n\t\t\tcallbacks.current.delete( callback );\n\t\t};\n\t}, [ inputType ] );\n\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tDropdown,\n\tButton,\n\tMenuItemsChoice,\n\tSVG,\n\tPath,\n\tNavigableMenu,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\nimport { Icon, edit as editIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst selectIcon = (\n\t\n\t\t\n\t\n);\n\nfunction ToolSelector( props, ref ) {\n\tconst mode = useSelect(\n\t\t( select ) => select( blockEditorStore ).__unstableGetEditorMode(),\n\t\t[]\n\t);\n\tconst { __unstableSetEditorMode } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t) }\n\t\t\tpopoverProps={ { placement: 'bottom-start' } }\n\t\t\trenderContent={ () => (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvalue: 'navigation',\n\t\t\t\t\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t{ selectIcon }\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Select' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Tools provide different interactions for selecting, navigating, and editing blocks. Toggle between select and edit by pressing Escape and Enter.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( ToolSelector );\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as BaseUnitControl,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nexport default function UnitControl( { units: unitsProp, ...props } ) {\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ '%', 'px', 'em', 'rem', 'vw' ],\n\t\tunits: unitsProp,\n\t} );\n\n\treturn ;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst arrowLeft = (\n\t\n\t\t\n\t\n);\n\nexport default arrowLeft;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { Button } from '@wordpress/components';\nimport { link, keyboardReturn, arrowLeft } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport URLInput from './';\n\nclass URLInputButton extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\t\tthis.toggle = this.toggle.bind( this );\n\t\tthis.submitLink = this.submitLink.bind( this );\n\t\tthis.state = {\n\t\t\texpanded: false,\n\t\t};\n\t}\n\n\ttoggle() {\n\t\tthis.setState( { expanded: ! this.state.expanded } );\n\t}\n\n\tsubmitLink( event ) {\n\t\tevent.preventDefault();\n\t\tthis.toggle();\n\t}\n\n\trender() {\n\t\tconst { url, onChange } = this.props;\n\t\tconst { expanded } = this.state;\n\t\tconst buttonLabel = url ? __( 'Edit link' ) : __( 'Insert link' );\n\n\t\treturn (\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t{ expanded && (\n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t);\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default URLInputButton;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst image = (\n\t\n\t\t\n\t\n);\n\nexport default image;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useEffect, useState } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport {\n\tToolbarButton,\n\tNavigableMenu,\n\tButton,\n\tMenuItem,\n\tToggleControl,\n\tTextControl,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport {\n\tIcon,\n\tlink as linkIcon,\n\timage,\n\tpage,\n\tfullscreen,\n\tlinkOff,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport URLPopover from './index';\n\nconst LINK_DESTINATION_NONE = 'none';\nconst LINK_DESTINATION_CUSTOM = 'custom';\nconst LINK_DESTINATION_MEDIA = 'media';\nconst LINK_DESTINATION_ATTACHMENT = 'attachment';\nconst NEW_TAB_REL = [ 'noreferrer', 'noopener' ];\n\nconst ImageURLInputUI = ( {\n\tlinkDestination,\n\tonChangeUrl,\n\turl,\n\tmediaType = 'image',\n\tmediaUrl,\n\tmediaLink,\n\tlinkTarget,\n\tlinkClass,\n\trel,\n\tshowLightboxSetting,\n\tlightboxEnabled,\n\tonSetLightbox,\n\tresetLightbox,\n} ) => {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst openLinkUI = () => {\n\t\tsetIsOpen( true );\n\t};\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState( false );\n\tconst [ urlInput, setUrlInput ] = useState( null );\n\n\tconst autocompleteRef = useRef( null );\n\tconst wrapperRef = useRef();\n\n\tuseEffect( () => {\n\t\tif ( ! wrapperRef.current ) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperRef.current )[ 0 ] ||\n\t\t\twrapperRef.current;\n\t\tnextFocusTarget.focus();\n\t}, [ isEditingLink, url, lightboxEnabled ] );\n\n\tconst startEditLink = () => {\n\t\tif (\n\t\t\tlinkDestination === LINK_DESTINATION_MEDIA ||\n\t\t\tlinkDestination === LINK_DESTINATION_ATTACHMENT\n\t\t) {\n\t\t\tsetUrlInput( '' );\n\t\t}\n\t\tsetIsEditingLink( true );\n\t};\n\n\tconst stopEditLink = () => {\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst closeLinkUI = () => {\n\t\tsetUrlInput( null );\n\t\tstopEditLink();\n\t\tsetIsOpen( false );\n\t};\n\n\tconst getUpdatedLinkTargetSettings = ( value ) => {\n\t\tconst newLinkTarget = value ? '_blank' : undefined;\n\n\t\tlet updatedRel;\n\t\tif ( newLinkTarget ) {\n\t\t\tconst rels = ( rel ?? '' ).split( ' ' );\n\t\t\tNEW_TAB_REL.forEach( ( relVal ) => {\n\t\t\t\tif ( ! rels.includes( relVal ) ) {\n\t\t\t\t\trels.push( relVal );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tupdatedRel = rels.join( ' ' );\n\t\t} else {\n\t\t\tconst rels = ( rel ?? '' )\n\t\t\t\t.split( ' ' )\n\t\t\t\t.filter(\n\t\t\t\t\t( relVal ) => NEW_TAB_REL.includes( relVal ) === false\n\t\t\t\t);\n\t\t\tupdatedRel = rels.length ? rels.join( ' ' ) : undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tlinkTarget: newLinkTarget,\n\t\t\trel: updatedRel,\n\t\t};\n\t};\n\n\tconst onFocusOutside = () => {\n\t\treturn ( event ) => {\n\t\t\t// The autocomplete suggestions list renders in a separate popover (in a portal),\n\t\t\t// so onFocusOutside fails to detect that a click on a suggestion occurred in the\n\t\t\t// LinkContainer. Detect clicks on autocomplete suggestions using a ref here, and\n\t\t\t// return to avoid the popover being closed.\n\t\t\tconst autocompleteElement = autocompleteRef.current;\n\t\t\tif (\n\t\t\t\tautocompleteElement &&\n\t\t\t\tautocompleteElement.contains( event.target )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetIsOpen( false );\n\t\t\tsetUrlInput( null );\n\t\t\tstopEditLink();\n\t\t};\n\t};\n\n\tconst onSubmitLinkChange = () => {\n\t\treturn ( event ) => {\n\t\t\tif ( urlInput ) {\n\t\t\t\t// It is possible the entered URL actually matches a named link destination.\n\t\t\t\t// This check will ensure our link destination is correct.\n\t\t\t\tconst selectedDestination =\n\t\t\t\t\tgetLinkDestinations().find(\n\t\t\t\t\t\t( destination ) => destination.url === urlInput\n\t\t\t\t\t)?.linkDestination || LINK_DESTINATION_CUSTOM;\n\n\t\t\t\tonChangeUrl( {\n\t\t\t\t\thref: urlInput,\n\t\t\t\t\tlinkDestination: selectedDestination,\n\t\t\t\t\tlightbox: { enabled: false },\n\t\t\t\t} );\n\t\t\t}\n\t\t\tstopEditLink();\n\t\t\tsetUrlInput( null );\n\t\t\tevent.preventDefault();\n\t\t};\n\t};\n\n\tconst onLinkRemove = () => {\n\t\tonChangeUrl( {\n\t\t\tlinkDestination: LINK_DESTINATION_NONE,\n\t\t\thref: '',\n\t\t} );\n\t};\n\n\tconst getLinkDestinations = () => {\n\t\tconst linkDestinations = [\n\t\t\t{\n\t\t\t\tlinkDestination: LINK_DESTINATION_MEDIA,\n\t\t\t\ttitle: __( 'Link to image file' ),\n\t\t\t\turl: mediaType === 'image' ? mediaUrl : undefined,\n\t\t\t\ticon: image,\n\t\t\t},\n\t\t];\n\t\tif ( mediaType === 'image' && mediaLink ) {\n\t\t\tlinkDestinations.push( {\n\t\t\t\tlinkDestination: LINK_DESTINATION_ATTACHMENT,\n\t\t\t\ttitle: __( 'Link to attachment page' ),\n\t\t\t\turl: mediaType === 'image' ? mediaLink : undefined,\n\t\t\t\ticon: page,\n\t\t\t} );\n\t\t}\n\t\treturn linkDestinations;\n\t};\n\n\tconst onSetHref = ( value ) => {\n\t\tconst linkDestinations = getLinkDestinations();\n\t\tlet linkDestinationInput;\n\t\tif ( ! value ) {\n\t\t\tlinkDestinationInput = LINK_DESTINATION_NONE;\n\t\t} else {\n\t\t\tlinkDestinationInput = (\n\t\t\t\tlinkDestinations.find( ( destination ) => {\n\t\t\t\t\treturn destination.url === value;\n\t\t\t\t} ) || { linkDestination: LINK_DESTINATION_CUSTOM }\n\t\t\t).linkDestination;\n\t\t}\n\t\tonChangeUrl( {\n\t\t\tlinkDestination: linkDestinationInput,\n\t\t\thref: value,\n\t\t} );\n\t};\n\n\tconst onSetNewTab = ( value ) => {\n\t\tconst updatedLinkTarget = getUpdatedLinkTargetSettings( value );\n\t\tonChangeUrl( updatedLinkTarget );\n\t};\n\n\tconst onSetLinkRel = ( value ) => {\n\t\tonChangeUrl( { rel: value } );\n\t};\n\n\tconst onSetLinkClass = ( value ) => {\n\t\tonChangeUrl( { linkClass: value } );\n\t};\n\n\tconst advancedOptions = (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n\n\tconst linkEditorValue = urlInput !== null ? urlInput : url;\n\tconst hideLightboxPanel =\n\t\t! lightboxEnabled || ( lightboxEnabled && ! showLightboxSetting );\n\tconst showLinkEditor = ! linkEditorValue && hideLightboxPanel;\n\n\tconst urlLabel = (\n\t\tgetLinkDestinations().find(\n\t\t\t( destination ) => destination.linkDestination === linkDestination\n\t\t) || {}\n\t).title;\n\n\tconst PopoverChildren = () => {\n\t\tif (\n\t\t\tlightboxEnabled &&\n\t\t\tshowLightboxSetting &&\n\t\t\t! url &&\n\t\t\t! isEditingLink\n\t\t) {\n\t\t\treturn (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t

    { __( 'Expand on click' ) }

    \n\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t{ __( 'Scales the image with a lightbox effect' ) }\n\t\t\t\t\t\t

    \n\t\t\t\t\t
    \n\t\t\t\t\t {\n\t\t\t\t\t\t\tonSetLightbox?.( false );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t/>\n\t\t\t\t
    \n\t\t\t);\n\t\t} else if ( ! url || isEditingLink ) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t);\n\t\t} else if ( url && ! isEditingLink ) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonLinkRemove();\n\t\t\t\t\t\t\tresetLightbox?.();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ isOpen && (\n\t\t\t\t advancedOptions : null\n\t\t\t\t\t}\n\t\t\t\t\tadditionalControls={\n\t\t\t\t\t\tshowLinkEditor && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ getLinkDestinations().map( ( link ) => (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tsetUrlInput( null );\n\t\t\t\t\t\t\t\t\t\t\tonSetHref( link.url );\n\t\t\t\t\t\t\t\t\t\t\tstopEditLink();\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ link.title }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t{ showLightboxSetting && (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tsetUrlInput( null );\n\t\t\t\t\t\t\t\t\t\t\tonChangeUrl( {\n\t\t\t\t\t\t\t\t\t\t\t\tlinkDestination:\n\t\t\t\t\t\t\t\t\t\t\t\t\tLINK_DESTINATION_NONE,\n\t\t\t\t\t\t\t\t\t\t\t\thref: '',\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\tonSetLightbox?.( true );\n\t\t\t\t\t\t\t\t\t\t\tstopEditLink();\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Expand on click' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\toffset={ 13 }\n\t\t\t\t>\n\t\t\t\t\t{ PopoverChildren() }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n};\n\nexport { ImageURLInputUI as __experimentalImageURLInputUI };\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\nexport default function PreviewOptions() {\n\tdeprecated( 'wp.blockEditor.PreviewOptions', {\n\t\tversion: '6.5',\n\t} );\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\n\n/**\n * Function to resize the editor window.\n *\n * @param {string} deviceType Used for determining the size of the container (e.g. Desktop, Tablet, Mobile)\n *\n * @return {Object} Inline styles to be added to resizable container.\n */\nexport default function useResizeCanvas( deviceType ) {\n\tconst [ actualWidth, updateActualWidth ] = useState( window.innerWidth );\n\n\tuseEffect( () => {\n\t\tif ( deviceType === 'Desktop' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeListener = () => updateActualWidth( window.innerWidth );\n\t\twindow.addEventListener( 'resize', resizeListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'resize', resizeListener );\n\t\t};\n\t}, [ deviceType ] );\n\n\tconst getCanvasWidth = ( device ) => {\n\t\tlet deviceWidth;\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\t\tdeviceWidth = 780;\n\t\t\t\tbreak;\n\t\t\tcase 'Mobile':\n\t\t\t\tdeviceWidth = 360;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\n\t\treturn deviceWidth < actualWidth ? deviceWidth : actualWidth;\n\t};\n\n\tconst marginValue = () => ( window.innerHeight < 800 ? 36 : 64 );\n\n\tconst contentInlineStyles = ( device ) => {\n\t\tconst height = device === 'Mobile' ? '768px' : '1024px';\n\t\tconst marginVertical = marginValue() + 'px';\n\t\tconst marginHorizontal = 'auto';\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\tcase 'Mobile':\n\t\t\t\treturn {\n\t\t\t\t\twidth: getCanvasWidth( device ),\n\t\t\t\t\t// Keeping margin styles separate to avoid warnings\n\t\t\t\t\t// when those props get overridden in the iframe component\n\t\t\t\t\tmarginTop: marginVertical,\n\t\t\t\t\tmarginBottom: marginVertical,\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t\theight,\n\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t};\n\t\t}\n\t};\n\n\treturn contentInlineStyles( deviceType );\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElementRef } from '../block-list/use-block-props/use-block-refs';\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/skip-to-selected-block/README.md\n */\nexport default function SkipToSelectedBlock() {\n\tconst selectedBlockClientId = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlockSelectionStart(),\n\t\t[]\n\t);\n\tconst ref = useRef();\n\tuseBlockElementRef( selectedBlockClientId, ref );\n\tconst onClick = () => {\n\t\tref.current?.focus();\n\t};\n\n\treturn selectedBlockClientId ? (\n\t\t\n\t\t\t{ __( 'Skip to the selected block' ) }\n\t\t\n\t) : null;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"wordcount\"];","/**\n * WordPress dependencies\n */\nimport { sprintf, _n } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { serialize } from '@wordpress/blocks';\nimport { count as wordCount } from '@wordpress/wordcount';\nimport { copy } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function MultiSelectionInspector() {\n\tconst { blocks } = useSelect( ( select ) => {\n\t\tconst { getMultiSelectedBlocks } = select( blockEditorStore );\n\t\treturn {\n\t\t\tblocks: getMultiSelectedBlocks(),\n\t\t};\n\t}, [] );\n\tconst words = wordCount( serialize( blocks ), 'words' );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %d: number of blocks */\n\t\t\t\t\t\t_n( '%d Block', '%d Blocks', blocks.length ),\n\t\t\t\t\t\tblocks.length\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %d: number of words */\n\t\t\t\t\t\t_n( '%d word selected.', '%d words selected.', words ),\n\t\t\t\t\t\twords\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst cog = (\n\t\n\t\t\n\t\n);\n\nexport default cog;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nexport const styles = (\n\t\n\t\t\n\t\n);\n\nexport default styles;\n","/**\n * WordPress dependencies\n */\nimport { cog, styles, listView } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport const TAB_SETTINGS = {\n\tname: 'settings',\n\ttitle: __( 'Settings' ),\n\tvalue: 'settings',\n\ticon: cog,\n\tclassName: 'block-editor-block-inspector__tab-item',\n};\n\nexport const TAB_STYLES = {\n\tname: 'styles',\n\ttitle: __( 'Styles' ),\n\tvalue: 'styles',\n\ticon: styles,\n\tclassName: 'block-editor-block-inspector__tab-item',\n};\n\nexport const TAB_LIST_VIEW = {\n\tname: 'list',\n\ttitle: __( 'List View' ),\n\tvalue: 'list-view',\n\ticon: listView,\n\tclassName: 'block-editor-block-inspector__tab-item',\n};\n","/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\t__experimentalUseSlotFills as useSlotFills,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tdefault as InspectorControls,\n\tInspectorAdvancedControls,\n} from '../inspector-controls';\n\nconst AdvancedControls = () => {\n\tconst fills = useSlotFills( InspectorAdvancedControls.slotName );\n\tconst hasFills = Boolean( fills && fills.length );\n\n\tif ( ! hasFills ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default AdvancedControls;\n","/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\t__experimentalUseSlotFills as useSlotFills,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useLayoutEffect, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport InspectorControlsGroups from '../inspector-controls/groups';\nimport { default as InspectorControls } from '../inspector-controls';\nimport { store as blockEditorStore } from '../../store';\n\nconst PositionControlsPanel = () => {\n\tconst [ initialOpen, setInitialOpen ] = useState();\n\n\t// Determine whether the panel should be expanded.\n\tconst { multiSelectedBlocks } = useSelect( ( select ) => {\n\t\tconst { getBlocksByClientId, getSelectedBlockClientIds } =\n\t\t\tselect( blockEditorStore );\n\t\tconst clientIds = getSelectedBlockClientIds();\n\t\treturn {\n\t\t\tmultiSelectedBlocks: getBlocksByClientId( clientIds ),\n\t\t};\n\t}, [] );\n\n\tuseLayoutEffect( () => {\n\t\t// If any selected block has a position set, open the panel by default.\n\t\t// The first block's value will still be used within the control though.\n\t\tif ( initialOpen === undefined ) {\n\t\t\tsetInitialOpen(\n\t\t\t\tmultiSelectedBlocks.some(\n\t\t\t\t\t( { attributes } ) => !! attributes?.style?.position?.type\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}, [ initialOpen, multiSelectedBlocks, setInitialOpen ] );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nconst PositionControls = () => {\n\tconst fills = useSlotFills(\n\t\tInspectorControlsGroups.position.Slot.__unstableName\n\t);\n\tconst hasFills = Boolean( fills && fills.length );\n\n\tif ( ! hasFills ) {\n\t\treturn null;\n\t}\n\n\treturn ;\n};\n\nexport default PositionControls;\n","/**\n * Internal dependencies\n */\nimport AdvancedControls from './advanced-controls-panel';\nimport PositionControls from './position-controls-panel';\nimport { default as InspectorControls } from '../inspector-controls';\n\nconst SettingsTab = ( { showAdvancedControls = false } ) => (\n\t<>\n\t\t\n\t\t\n\t\t\n\t\t{ showAdvancedControls && (\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t) }\n\t\n);\n\nexport default SettingsTab;\n","/**\n * WordPress dependencies\n */\nimport { PanelBody } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockStyles from '../block-styles';\nimport InspectorControls from '../inspector-controls';\nimport { useBorderPanelLabel } from '../../hooks/border';\n\nconst StylesTab = ( { blockName, clientId, hasBlockStyles } ) => {\n\tconst borderPanelLabel = useBorderPanelLabel( { blockName } );\n\n\treturn (\n\t\t<>\n\t\t\t{ hasBlockStyles && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default StylesTab;\n","// List view tab restricts the blocks that may render to it via the\n// allowlist below.\nconst allowlist = [ 'core/navigation' ];\n\nexport const useIsListViewTabDisabled = ( blockName ) => {\n\treturn ! allowlist.includes( blockName );\n};\n\nexport default useIsListViewTabDisabled;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { store as preferencesStore } from '@wordpress/preferences';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { TAB_SETTINGS, TAB_STYLES, TAB_LIST_VIEW } from './utils';\nimport SettingsTab from './settings-tab';\nimport StylesTab from './styles-tab';\nimport InspectorControls from '../inspector-controls';\nimport useIsListViewTabDisabled from './use-is-list-view-tab-disabled';\nimport { unlock } from '../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nexport default function InspectorControlsTabs( {\n\tblockName,\n\tclientId,\n\thasBlockStyles,\n\ttabs,\n} ) {\n\tconst showIconLabels = useSelect( ( select ) => {\n\t\treturn select( preferencesStore ).get( 'core', 'showIconLabels' );\n\t}, [] );\n\n\t// The tabs panel will mount before fills are rendered to the list view\n\t// slot. This means the list view tab isn't initially included in the\n\t// available tabs so the panel defaults selection to the settings tab\n\t// which at the time is the first tab. This check allows blocks known to\n\t// include the list view tab to set it as the tab selected by default.\n\tconst initialTabName = ! useIsListViewTabDisabled( blockName )\n\t\t? TAB_LIST_VIEW.name\n\t\t: undefined;\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ showIconLabels && tab.title }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalUseSlotFills as useSlotFills } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControlsGroups from '../inspector-controls/groups';\nimport useIsListViewTabDisabled from './use-is-list-view-tab-disabled';\nimport { InspectorAdvancedControls } from '../inspector-controls';\nimport { TAB_LIST_VIEW, TAB_SETTINGS, TAB_STYLES } from './utils';\nimport { store as blockEditorStore } from '../../store';\n\nconst EMPTY_ARRAY = [];\n\nfunction getShowTabs( blockName, tabSettings = {} ) {\n\t// Block specific setting takes precedence over generic default.\n\tif ( tabSettings[ blockName ] !== undefined ) {\n\t\treturn tabSettings[ blockName ];\n\t}\n\n\t// Use generic default if set over the Gutenberg experiment option.\n\tif ( tabSettings.default !== undefined ) {\n\t\treturn tabSettings.default;\n\t}\n\n\treturn true;\n}\n\nexport default function useInspectorControlsTabs( blockName ) {\n\tconst tabs = [];\n\tconst {\n\t\tbindings: bindingsGroup,\n\t\tborder: borderGroup,\n\t\tcolor: colorGroup,\n\t\tdefault: defaultGroup,\n\t\tdimensions: dimensionsGroup,\n\t\tlist: listGroup,\n\t\tposition: positionGroup,\n\t\tstyles: stylesGroup,\n\t\ttypography: typographyGroup,\n\t\teffects: effectsGroup,\n\t} = InspectorControlsGroups;\n\n\t// List View Tab: If there are any fills for the list group add that tab.\n\tconst listViewDisabled = useIsListViewTabDisabled( blockName );\n\tconst listFills = useSlotFills( listGroup.Slot.__unstableName );\n\tconst hasListFills = ! listViewDisabled && !! listFills && listFills.length;\n\n\t// Styles Tab: Add this tab if there are any fills for block supports\n\t// e.g. border, color, spacing, typography, etc.\n\tconst styleFills = [\n\t\t...( useSlotFills( borderGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( colorGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( dimensionsGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( stylesGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( typographyGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( effectsGroup.Slot.__unstableName ) || [] ),\n\t];\n\tconst hasStyleFills = styleFills.length;\n\n\t// Settings Tab: If we don't have multiple tabs to display\n\t// (i.e. both list view and styles), check only the default and position\n\t// InspectorControls slots. If we have multiple tabs, we'll need to check\n\t// the advanced controls slot as well to ensure they are rendered.\n\tconst advancedFills = [\n\t\t...( useSlotFills( InspectorAdvancedControls.slotName ) || [] ),\n\t\t...( useSlotFills( bindingsGroup.Slot.__unstableName ) || [] ),\n\t];\n\n\tconst settingsFills = [\n\t\t...( useSlotFills( defaultGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( positionGroup.Slot.__unstableName ) || [] ),\n\t\t...( hasListFills && hasStyleFills > 1 ? advancedFills : [] ),\n\t];\n\n\t// Add the tabs in the order that they will default to if available.\n\t// List View > Settings > Styles.\n\tif ( hasListFills ) {\n\t\ttabs.push( TAB_LIST_VIEW );\n\t}\n\n\tif ( settingsFills.length ) {\n\t\ttabs.push( TAB_SETTINGS );\n\t}\n\n\tif ( hasStyleFills ) {\n\t\ttabs.push( TAB_STYLES );\n\t}\n\n\tconst tabSettings = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().blockInspectorTabs;\n\t}, [] );\n\n\tconst showTabs = getShowTabs( blockName, tabSettings );\n\treturn showTabs ? tabs : EMPTY_ARRAY;\n}\n","/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport {\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n} from '../block-edit/context';\n\nconst { createPrivateSlotFill } = unlock( componentsPrivateApis );\nconst { Fill, Slot } = createPrivateSlotFill( 'BlockInformation' );\n\nconst BlockInfo = ( props ) => {\n\tconst context = useBlockEditContext();\n\tif ( ! context[ mayDisplayControlsKey ] ) {\n\t\treturn null;\n\t}\n\treturn ;\n};\nBlockInfo.Slot = ( props ) => ;\n\nexport default BlockInfo;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tButton,\n\t__experimentalVStack as VStack,\n\t__experimentalTruncate as Truncate,\n\tFlex,\n\tFlexBlock,\n\tFlexItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\n\nexport default function BlockQuickNavigation( { clientIds, onSelect } ) {\n\tif ( ! clientIds.length ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t\n\t\t\t{ clientIds.map( ( clientId ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction BlockQuickNavigationItem( { clientId, onSelect } ) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId,\n\t\tcontext: 'list-view',\n\t} );\n\tconst { isSelected } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { isBlockSelected, hasSelectedInnerBlock } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tisSelected:\n\t\t\t\t\tisBlockSelected( clientId ) ||\n\t\t\t\t\thasSelectedInnerBlock( clientId, /* deep: */ true ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\treturn (\n\t\t {\n\t\t\t\tawait selectBlock( clientId );\n\t\t\t\tif ( onSelect ) {\n\t\t\t\t\tonSelect( clientId );\n\t\t\t\t}\n\t\t\t} }\n\t\t>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ blockTitle }\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tgetBlockType,\n\tgetUnregisteredTypeHandlerName,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { PanelBody, __unstableMotion as motion } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport SkipToSelectedBlock from '../skip-to-selected-block';\nimport BlockCard from '../block-card';\nimport MultiSelectionInspector from '../multi-selection-inspector';\nimport BlockVariationTransforms from '../block-variation-transforms';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\nimport BlockStyles from '../block-styles';\nimport { default as InspectorControls } from '../inspector-controls';\nimport { default as InspectorControlsTabs } from '../inspector-controls-tabs';\nimport useInspectorControlsTabs from '../inspector-controls-tabs/use-inspector-controls-tabs';\nimport AdvancedControls from '../inspector-controls-tabs/advanced-controls-panel';\nimport PositionControls from '../inspector-controls-tabs/position-controls-panel';\nimport useBlockInspectorAnimationSettings from './useBlockInspectorAnimationSettings';\nimport BlockInfo from '../block-info-slot-fill';\nimport BlockQuickNavigation from '../block-quick-navigation';\nimport { useBorderPanelLabel } from '../../hooks/border';\n\nimport { unlock } from '../../lock-unlock';\n\nfunction BlockStylesPanel( { clientId } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BlockInspectorLockedBlocks( { topLevelLockedBlock } ) {\n\tconst contentClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetClientIdsOfDescendants,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\treturn getClientIdsOfDescendants( topLevelLockedBlock ).filter(\n\t\t\t\t( clientId ) =>\n\t\t\t\t\tgetBlockName( clientId ) !== 'core/list-item' &&\n\t\t\t\t\tgetBlockEditingMode( clientId ) === 'contentOnly'\n\t\t\t);\n\t\t},\n\t\t[ topLevelLockedBlock ]\n\t);\n\tconst hasBlockStyles = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName } = select( blockEditorStore );\n\t\t\tconst { getBlockStyles } = select( blocksStore );\n\t\t\treturn !! getBlockStyles( getBlockName( topLevelLockedBlock ) )\n\t\t\t\t?.length;\n\t\t},\n\t\t[ topLevelLockedBlock ]\n\t);\n\tconst blockInformation = useBlockDisplayInformation( topLevelLockedBlock );\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t{ hasBlockStyles && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ contentClientIds.length > 0 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nconst BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {\n\tconst {\n\t\tcount,\n\t\tselectedBlockName,\n\t\tselectedBlockClientId,\n\t\tblockType,\n\t\ttopLevelLockedBlock,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetSelectedBlockCount,\n\t\t\tgetBlockName,\n\t\t\tgetContentLockingParent,\n\t\t\tgetTemplateLock,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst _selectedBlockName =\n\t\t\t_selectedBlockClientId && getBlockName( _selectedBlockClientId );\n\t\tconst _blockType =\n\t\t\t_selectedBlockName && getBlockType( _selectedBlockName );\n\n\t\treturn {\n\t\t\tcount: getSelectedBlockCount(),\n\t\t\tselectedBlockClientId: _selectedBlockClientId,\n\t\t\tselectedBlockName: _selectedBlockName,\n\t\t\tblockType: _blockType,\n\t\t\ttopLevelLockedBlock:\n\t\t\t\tgetContentLockingParent( _selectedBlockClientId ) ||\n\t\t\t\t( getTemplateLock( _selectedBlockClientId ) === 'contentOnly' ||\n\t\t\t\t_selectedBlockName === 'core/block'\n\t\t\t\t\t? _selectedBlockClientId\n\t\t\t\t\t: undefined ),\n\t\t};\n\t}, [] );\n\n\tconst availableTabs = useInspectorControlsTabs( blockType?.name );\n\tconst showTabs = availableTabs?.length > 1;\n\n\t// The block inspector animation settings will be completely\n\t// removed in the future to create an API which allows the block\n\t// inspector to transition between what it\n\t// displays based on the relationship between the selected block\n\t// and its parent, and only enable it if the parent is controlling\n\t// its children blocks.\n\tconst blockInspectorAnimationSettings =\n\t\tuseBlockInspectorAnimationSettings( blockType );\n\n\tconst borderPanelLabel = useBorderPanelLabel( {\n\t\tblockName: selectedBlockName,\n\t} );\n\n\tif ( count > 1 ) {\n\t\treturn (\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t{ showTabs ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t);\n\t}\n\n\tconst isSelectedBlockUnregistered =\n\t\tselectedBlockName === getUnregisteredTypeHandlerName();\n\n\t/*\n\t * If the selected block is of an unregistered type, avoid showing it as an actual selection\n\t * because we want the user to focus on the unregistered block warning, not block settings.\n\t */\n\tif (\n\t\t! blockType ||\n\t\t! selectedBlockClientId ||\n\t\tisSelectedBlockUnregistered\n\t) {\n\t\tif ( showNoBlockSelectedMessage ) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{ __( 'No block selected.' ) }\n\t\t\t\t\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\tif ( topLevelLockedBlock ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t) }\n\t\t>\n\t\t\t\n\t\t\n\t);\n};\n\nconst BlockInspectorSingleBlockWrapper = ( { animate, wrapper, children } ) => {\n\treturn animate ? wrapper( children ) : children;\n};\n\nconst AnimatedContainer = ( {\n\tblockInspectorAnimationSettings,\n\tselectedBlockClientId,\n\tchildren,\n} ) => {\n\tconst animationOrigin =\n\t\tblockInspectorAnimationSettings &&\n\t\tblockInspectorAnimationSettings.enterDirection === 'leftToRight'\n\t\t\t? -50\n\t\t\t: 50;\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n};\n\nconst BlockInspectorSingleBlock = ( { clientId, blockName } ) => {\n\tconst availableTabs = useInspectorControlsTabs( blockName );\n\tconst showTabs = availableTabs?.length > 1;\n\n\tconst hasBlockStyles = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockStyles } = select( blocksStore );\n\t\t\tconst blockStyles = getBlockStyles( blockName );\n\t\t\treturn blockStyles && blockStyles.length > 0;\n\t\t},\n\t\t[ blockName ]\n\t);\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst borderPanelLabel = useBorderPanelLabel( { blockName } );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t{ showTabs && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ ! showTabs && (\n\t\t\t\t<>\n\t\t\t\t\t{ hasBlockStyles && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-inspector/README.md\n */\nexport default BlockInspector;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useBlockInspectorAnimationSettings( blockType ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( blockType ) {\n\t\t\t\tconst globalBlockInspectorAnimationSettings =\n\t\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t\t.blockInspectorAnimation;\n\n\t\t\t\t// Get the name of the block that will allow it's children to be animated.\n\t\t\t\tconst animationParent =\n\t\t\t\t\tglobalBlockInspectorAnimationSettings?.animationParent;\n\n\t\t\t\t// Determine whether the animationParent block is a parent of the selected block.\n\t\t\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\t\t\t\tconst animationParentBlockClientId = getBlockParentsByBlockName(\n\t\t\t\t\t_selectedBlockClientId,\n\t\t\t\t\tanimationParent,\n\t\t\t\t\ttrue\n\t\t\t\t)[ 0 ];\n\n\t\t\t\t// If the selected block is not a child of the animationParent block,\n\t\t\t\t// and not an animationParent block itself, don't animate.\n\t\t\t\tif (\n\t\t\t\t\t! animationParentBlockClientId &&\n\t\t\t\t\tblockType.name !== animationParent\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn globalBlockInspectorAnimationSettings?.[\n\t\t\t\t\tblockType.name\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t[ blockType ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport useClipboardHandler from '../writing-flow/use-clipboard-handler';\n\n/**\n * @deprecated\n */\nexport const __unstableUseClipboardHandler = () => {\n\tdeprecated( '__unstableUseClipboardHandler', {\n\t\talternative: 'BlockCanvas or WritingFlow',\n\t\tsince: '6.4',\n\t\tversion: '6.7',\n\t} );\n\treturn useClipboardHandler();\n};\n\n/**\n * @deprecated\n * @param {Object} props\n */\nexport default function CopyHandler( props ) {\n\tdeprecated( 'CopyHandler', {\n\t\talternative: 'BlockCanvas or WritingFlow',\n\t\tsince: '6.4',\n\t\tversion: '6.7',\n\t} );\n\treturn
    ;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { PrivateInserterMenu } from './menu';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\nfunction InserterLibrary(\n\t{\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tshowInserterHelpPanel,\n\t\tshowMostUsedBlocks = false,\n\t\t__experimentalInsertionIndex,\n\t\t__experimentalInitialTab,\n\t\t__experimentalInitialCategory,\n\t\t__experimentalFilterValue,\n\t\tonPatternCategorySelection,\n\t\tonSelect = noop,\n\t\tshouldFocusBlock = false,\n\t\tonClose,\n\t},\n\tref\n) {\n\tconst { destinationRootClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId } = select( blockEditorStore );\n\t\t\tconst _rootClientId =\n\t\t\t\trootClientId || getBlockRootClientId( clientId ) || undefined;\n\t\t\treturn {\n\t\t\t\tdestinationRootClientId: _rootClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n\nexport const PrivateInserterLibrary = forwardRef( InserterLibrary );\n\nfunction PublicInserterLibrary( props, ref ) {\n\treturn (\n\t\t\n\t);\n}\n\nexport default forwardRef( PublicInserterLibrary );\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Scrolls the multi block selection end into view if not in view already. This\n * is important to do after selection by keyboard.\n *\n * @deprecated\n */\nexport function MultiSelectScrollIntoView() {\n\tdeprecated( 'wp.blockEditor.MultiSelectScrollIntoView', {\n\t\thint: 'This behaviour is now built-in.',\n\t\tsince: '5.8',\n\t} );\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { computeCaretRect, getScrollContainer } from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\nimport { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst isIE = window.navigator.userAgent.indexOf( 'Trident' ) !== -1;\nconst arrowKeyCodes = new Set( [ UP, DOWN, LEFT, RIGHT ] );\nconst initialTriggerPercentage = 0.75;\n\nexport function useTypewriter() {\n\tconst hasSelectedBlock = useSelect(\n\t\t( select ) => select( blockEditorStore ).hasSelectedBlock(),\n\t\t[]\n\t);\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! hasSelectedBlock ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tlet scrollResizeRafId;\n\t\t\tlet onKeyDownRafId;\n\n\t\t\tlet caretRect;\n\n\t\t\tfunction onScrollResize() {\n\t\t\t\tif ( scrollResizeRafId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tscrollResizeRafId = defaultView.requestAnimationFrame( () => {\n\t\t\t\t\tcomputeCaretRectangle();\n\t\t\t\t\tscrollResizeRafId = null;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\t// Ensure the any remaining request is cancelled.\n\t\t\t\tif ( onKeyDownRafId ) {\n\t\t\t\t\tdefaultView.cancelAnimationFrame( onKeyDownRafId );\n\t\t\t\t}\n\n\t\t\t\t// Use an animation frame for a smooth result.\n\t\t\t\tonKeyDownRafId = defaultView.requestAnimationFrame( () => {\n\t\t\t\t\tmaintainCaretPosition( event );\n\t\t\t\t\tonKeyDownRafId = null;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Maintains the scroll position after a selection change caused by a\n\t\t\t * keyboard event.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keyboard event.\n\t\t\t */\n\t\t\tfunction maintainCaretPosition( { keyCode } ) {\n\t\t\t\tif ( ! isSelectionEligibleForScroll() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst currentCaretRect = computeCaretRect( defaultView );\n\n\t\t\t\tif ( ! currentCaretRect ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If for some reason there is no position set to be scrolled to, let\n\t\t\t\t// this be the position to be scrolled to in the future.\n\t\t\t\tif ( ! caretRect ) {\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Even though enabling the typewriter effect for arrow keys results in\n\t\t\t\t// a pleasant experience, it may not be the case for everyone, so, for\n\t\t\t\t// now, let's disable it.\n\t\t\t\tif ( arrowKeyCodes.has( keyCode ) ) {\n\t\t\t\t\t// Reset the caret position to maintain.\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst diff = currentCaretRect.top - caretRect.top;\n\n\t\t\t\tif ( diff === 0 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst scrollContainer = getScrollContainer( node );\n\n\t\t\t\t// The page must be scrollable.\n\t\t\t\tif ( ! scrollContainer ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst windowScroll =\n\t\t\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\t\t\tscrollContainer === ownerDocument.documentElement;\n\t\t\t\tconst scrollY = windowScroll\n\t\t\t\t\t? defaultView.scrollY\n\t\t\t\t\t: scrollContainer.scrollTop;\n\t\t\t\tconst scrollContainerY = windowScroll\n\t\t\t\t\t? 0\n\t\t\t\t\t: scrollContainer.getBoundingClientRect().top;\n\t\t\t\tconst relativeScrollPosition = windowScroll\n\t\t\t\t\t? caretRect.top / defaultView.innerHeight\n\t\t\t\t\t: ( caretRect.top - scrollContainerY ) /\n\t\t\t\t\t ( defaultView.innerHeight - scrollContainerY );\n\n\t\t\t\t// If the scroll position is at the start, the active editable element\n\t\t\t\t// is the last one, and the caret is positioned within the initial\n\t\t\t\t// trigger percentage of the page, do not scroll the page.\n\t\t\t\t// The typewriter effect should not kick in until an empty page has been\n\t\t\t\t// filled with the initial trigger percentage or the user scrolls\n\t\t\t\t// intentionally down.\n\t\t\t\tif (\n\t\t\t\t\tscrollY === 0 &&\n\t\t\t\t\trelativeScrollPosition < initialTriggerPercentage &&\n\t\t\t\t\tisLastEditableNode()\n\t\t\t\t) {\n\t\t\t\t\t// Reset the caret position to maintain.\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst scrollContainerHeight = windowScroll\n\t\t\t\t\t? defaultView.innerHeight\n\t\t\t\t\t: scrollContainer.clientHeight;\n\n\t\t\t\t// Abort if the target scroll position would scroll the caret out of\n\t\t\t\t// view.\n\t\t\t\tif (\n\t\t\t\t\t// The caret is under the lower fold.\n\t\t\t\t\tcaretRect.top + caretRect.height >\n\t\t\t\t\t\tscrollContainerY + scrollContainerHeight ||\n\t\t\t\t\t// The caret is above the upper fold.\n\t\t\t\t\tcaretRect.top < scrollContainerY\n\t\t\t\t) {\n\t\t\t\t\t// Reset the caret position to maintain.\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( windowScroll ) {\n\t\t\t\t\tdefaultView.scrollBy( 0, diff );\n\t\t\t\t} else {\n\t\t\t\t\tscrollContainer.scrollTop += diff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Adds a `selectionchange` listener to reset the scroll position to be\n\t\t\t * maintained.\n\t\t\t */\n\t\t\tfunction addSelectionChangeListener() {\n\t\t\t\townerDocument.addEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tcomputeCaretRectOnSelectionChange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Resets the scroll position to be maintained during a `selectionchange`\n\t\t\t * event. Also removes the listener, so it acts as a one-time listener.\n\t\t\t */\n\t\t\tfunction computeCaretRectOnSelectionChange() {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tcomputeCaretRectOnSelectionChange\n\t\t\t\t);\n\t\t\t\tcomputeCaretRectangle();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Resets the scroll position to be maintained.\n\t\t\t */\n\t\t\tfunction computeCaretRectangle() {\n\t\t\t\tif ( isSelectionEligibleForScroll() ) {\n\t\t\t\t\tcaretRect = computeCaretRect( defaultView );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Checks if the current situation is elegible for scroll:\n\t\t\t * - There should be one and only one block selected.\n\t\t\t * - The component must contain the selection.\n\t\t\t * - The active element must be contenteditable.\n\t\t\t */\n\t\t\tfunction isSelectionEligibleForScroll() {\n\t\t\t\treturn (\n\t\t\t\t\tnode.contains( ownerDocument.activeElement ) &&\n\t\t\t\t\townerDocument.activeElement.isContentEditable\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction isLastEditableNode() {\n\t\t\t\tconst editableNodes = node.querySelectorAll(\n\t\t\t\t\t'[contenteditable=\"true\"]'\n\t\t\t\t);\n\t\t\t\tconst lastEditableNode =\n\t\t\t\t\teditableNodes[ editableNodes.length - 1 ];\n\t\t\t\treturn lastEditableNode === ownerDocument.activeElement;\n\t\t\t}\n\n\t\t\t// When the user scrolls or resizes, the scroll position should be\n\t\t\t// reset.\n\t\t\tdefaultView.addEventListener( 'scroll', onScrollResize, true );\n\t\t\tdefaultView.addEventListener( 'resize', onScrollResize, true );\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'keyup', maintainCaretPosition );\n\t\t\tnode.addEventListener( 'mousedown', addSelectionChangeListener );\n\t\t\tnode.addEventListener( 'touchstart', addSelectionChangeListener );\n\n\t\t\treturn () => {\n\t\t\t\tdefaultView.removeEventListener(\n\t\t\t\t\t'scroll',\n\t\t\t\t\tonScrollResize,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener(\n\t\t\t\t\t'resize',\n\t\t\t\t\tonScrollResize,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'keyup', maintainCaretPosition );\n\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t'mousedown',\n\t\t\t\t\taddSelectionChangeListener\n\t\t\t\t);\n\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t'touchstart',\n\t\t\t\t\taddSelectionChangeListener\n\t\t\t\t);\n\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tcomputeCaretRectOnSelectionChange\n\t\t\t\t);\n\n\t\t\t\tdefaultView.cancelAnimationFrame( scrollResizeRafId );\n\t\t\t\tdefaultView.cancelAnimationFrame( onKeyDownRafId );\n\t\t\t};\n\t\t},\n\t\t[ hasSelectedBlock ]\n\t);\n}\n\nfunction Typewriter( { children } ) {\n\treturn (\n\t\t
    \n\t\t\t{ children }\n\t\t
    \n\t);\n}\n\n/**\n * The exported component. The implementation of Typewriter faced technical\n * challenges in Internet Explorer, and is simply skipped, rendering the given\n * props children instead.\n *\n * @type {Component}\n */\nconst TypewriterOrIEBypass = isIE ? ( props ) => props.children : Typewriter;\n\n/**\n * Ensures that the text selection keeps the same vertical distance from the\n * viewport during keyboard events within this component. The vertical distance\n * can vary. It is the last clicked or scrolled to position.\n */\nexport default TypewriterOrIEBypass;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext, useMemo } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\n\nconst RenderedRefsContext = createContext( {} );\n\n/**\n * Immutably adds an unique identifier to a set scoped for a given block type.\n *\n * @param {Object} renderedBlocks Rendered blocks grouped by block name\n * @param {string} blockName Name of the block.\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n *\n * @return {Object} The list of rendered blocks grouped by block name.\n */\nfunction addToBlockType( renderedBlocks, blockName, uniqueId ) {\n\tconst result = {\n\t\t...renderedBlocks,\n\t\t[ blockName ]: renderedBlocks[ blockName ]\n\t\t\t? new Set( renderedBlocks[ blockName ] )\n\t\t\t: new Set(),\n\t};\n\tresult[ blockName ].add( uniqueId );\n\n\treturn result;\n}\n\n/**\n * A React context provider for use with the `useHasRecursion` hook to prevent recursive\n * renders.\n *\n * Wrap block content with this provider and provide the same `uniqueId` prop as used\n * with `useHasRecursion`.\n *\n * @param {Object} props\n * @param {*} props.uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} props.blockName Optional block name.\n * @param {JSX.Element} props.children React children.\n *\n * @return {JSX.Element} A React element.\n */\nexport function RecursionProvider( { children, uniqueId, blockName = '' } ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\n\tblockName = blockName || name;\n\n\tconst newRenderedBlocks = useMemo(\n\t\t() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),\n\t\t[ previouslyRenderedBlocks, blockName, uniqueId ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\n/**\n * A React hook for keeping track of blocks previously rendered up in the block\n * tree. Blocks susceptible to recursion can use this hook in their `Edit`\n * function to prevent said recursion.\n *\n * Use this with the `RecursionProvider` component, using the same `uniqueId` value\n * for both the hook and the provider.\n *\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} blockName Optional block name.\n *\n * @return {boolean} A boolean describing whether the provided id has already been rendered.\n */\nexport function useHasRecursion( uniqueId, blockName = '' ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\tblockName = blockName || name;\n\treturn Boolean( previouslyRenderedBlocks[ blockName ]?.has( uniqueId ) );\n}\n\nexport const DeprecatedExperimentalRecursionProvider = ( props ) => {\n\tdeprecated( 'wp.blockEditor.__experimentalRecursionProvider', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.RecursionProvider',\n\t} );\n\treturn ;\n};\n\nexport const DeprecatedExperimentalUseHasRecursion = ( ...args ) => {\n\tdeprecated( 'wp.blockEditor.__experimentalUseHasRecursion', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.useHasRecursion',\n\t} );\n\treturn useHasRecursion( ...args );\n};\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n\t__experimentalHeading as Heading,\n\t__experimentalSpacer as Spacer,\n\tButton,\n\t__experimentalText as Text,\n} from '@wordpress/components';\nimport { closeSmall } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport default function InspectorPopoverHeader( {\n\ttitle,\n\thelp,\n\tactions = [],\n\tonClose,\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ title }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ actions.map( ( { label, icon, onClick } ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{ ! icon && label }\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\t{ onClose && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t{ help && { help } }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { DateTimePicker, TimePicker } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { forwardRef } from '@wordpress/element';\nimport { getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport InspectorPopoverHeader from '../inspector-popover-header';\n\nexport function PublishDateTimePicker(\n\t{\n\t\tonClose,\n\t\tonChange,\n\t\tshowPopoverHeaderActions,\n\t\tisCompact,\n\t\tcurrentDate,\n\t\t...additionalProps\n\t},\n\tref\n) {\n\tconst datePickerProps = {\n\t\tstartOfWeek: getSettings().l10n.startOfWeek,\n\t\tonChange,\n\t\tcurrentDate: isCompact ? undefined : currentDate,\n\t\tcurrentTime: isCompact ? currentDate : undefined,\n\t\t...additionalProps,\n\t};\n\tconst DatePickerComponent = isCompact ? TimePicker : DateTimePicker;\n\treturn (\n\t\t
    \n\t\t\t onChange?.( null ),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t ]\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tonClose={ onClose }\n\t\t\t/>\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport const PrivatePublishDateTimePicker = forwardRef( PublishDateTimePicker );\n\nfunction PublicPublishDateTimePicker( props, ref ) {\n\treturn (\n\t\t\n\t);\n}\n\nexport default forwardRef( PublicPublishDateTimePicker );\n","const ELEMENT_CLASS_NAMES = {\n\tbutton: 'wp-element-button',\n\tcaption: 'wp-element-caption',\n};\n\nexport const __experimentalGetElementClassName = ( element ) => {\n\treturn ELEMENT_CLASS_NAMES[ element ] ? ELEMENT_CLASS_NAMES[ element ] : '';\n};\n","/**\n * This function was accidentally exposed for mobile/native usage.\n *\n * @deprecated\n *\n * @return {string} Empty string.\n */\nexport default () => '';\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\tToggleControl,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useToolsPanelDropdownMenuProps } from './utils';\n\nexport function useHasImageSettingsPanel( name, value, inheritedValue ) {\n\t// Note: If lightbox `value` exists, that means it was\n\t// defined via the the Global Styles UI and will NOT\n\t// be a boolean value or contain the `allowEditing` property,\n\t// so we should show the settings panel in those cases.\n\treturn (\n\t\t( name === 'core/image' && inheritedValue?.lightbox?.allowEditing ) ||\n\t\t!! value?.lightbox\n\t);\n}\n\nexport default function ImageSettingsPanel( {\n\tonChange,\n\tvalue,\n\tinheritedValue,\n\tpanelId,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetLightbox = () => {\n\t\tonChange( undefined );\n\t};\n\n\tconst onChangeLightbox = ( newSetting ) => {\n\t\tonChange( {\n\t\t\tenabled: newSetting,\n\t\t} );\n\t};\n\n\tlet lightboxChecked = false;\n\n\tif ( inheritedValue?.lightbox?.enabled ) {\n\t\tlightboxChecked = inheritedValue.lightbox.enabled;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t !! value?.lightbox }\n\t\t\t\t\tlabel={ __( 'Expand on click' ) }\n\t\t\t\t\tonDeselect={ resetLightbox }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tTextareaControl,\n\tNotice,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { default as transformStyles } from '../../utils/transform-styles';\n\nexport default function AdvancedPanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n} ) {\n\t// Custom CSS\n\tconst [ cssError, setCSSError ] = useState( null );\n\tconst customCSS = inheritedValue?.css;\n\tfunction handleOnChange( newValue ) {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\tcss: newValue,\n\t\t} );\n\t\tif ( cssError ) {\n\t\t\t// Check if the new value is valid CSS, and pass a wrapping selector\n\t\t\t// to ensure that `transformStyles` validates the CSS. Note that the\n\t\t\t// wrapping selector here is not used in the actual output of any styles.\n\t\t\tconst [ transformed ] = transformStyles(\n\t\t\t\t[ { css: newValue } ],\n\t\t\t\t'.for-validation-only'\n\t\t\t);\n\t\t\tif ( transformed ) {\n\t\t\t\tsetCSSError( null );\n\t\t\t}\n\t\t}\n\t}\n\tfunction handleOnBlur( event ) {\n\t\tif ( ! event?.target?.value ) {\n\t\t\tsetCSSError( null );\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if the new value is valid CSS, and pass a wrapping selector\n\t\t// to ensure that `transformStyles` validates the CSS. Note that the\n\t\t// wrapping selector here is not used in the actual output of any styles.\n\t\tconst [ transformed ] = transformStyles(\n\t\t\t[ { css: event.target.value } ],\n\t\t\t'.for-validation-only'\n\t\t);\n\n\t\tsetCSSError(\n\t\t\ttransformed === null\n\t\t\t\t? __( 'There is an error with your CSS structure.' )\n\t\t\t\t: null\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ cssError && (\n\t\t\t\t setCSSError( null ) }>\n\t\t\t\t\t{ cssError }\n\t\t\t\t\n\t\t\t) }\n\t\t\t handleOnChange( newValue ) }\n\t\t\t\tonBlur={ handleOnBlur }\n\t\t\t\tclassName=\"block-editor-global-styles-advanced-panel__custom-css-input\"\n\t\t\t\tspellCheck={ false }\n\t\t\t/>\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport memoize from 'memize';\n\n/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { getBlockTypes } from '@wordpress/blocks';\n\nconst globalStylesChangesCache = new Map();\nconst EMPTY_ARRAY = [];\nconst translationMap = {\n\tcaption: __( 'Caption' ),\n\tlink: __( 'Link' ),\n\tbutton: __( 'Button' ),\n\theading: __( 'Heading' ),\n\th1: __( 'H1' ),\n\th2: __( 'H2' ),\n\th3: __( 'H3' ),\n\th4: __( 'H4' ),\n\th5: __( 'H5' ),\n\th6: __( 'H6' ),\n\t'settings.color': __( 'Color' ),\n\t'settings.typography': __( 'Typography' ),\n\t'styles.color': __( 'Colors' ),\n\t'styles.spacing': __( 'Spacing' ),\n\t'styles.background': __( 'Background' ),\n\t'styles.typography': __( 'Typography' ),\n};\nconst getBlockNames = memoize( () =>\n\tgetBlockTypes().reduce( ( accumulator, { name, title } ) => {\n\t\taccumulator[ name ] = title;\n\t\treturn accumulator;\n\t}, {} )\n);\nconst isObject = ( obj ) => obj !== null && typeof obj === 'object';\n\n/**\n * Get the translation for a given global styles key.\n * @param {string} key A key representing a path to a global style property or setting.\n * @return {string|undefined} A translated key or undefined if no translation exists.\n */\nfunction getTranslation( key ) {\n\tif ( translationMap[ key ] ) {\n\t\treturn translationMap[ key ];\n\t}\n\n\tconst keyArray = key.split( '.' );\n\n\tif ( keyArray?.[ 0 ] === 'blocks' ) {\n\t\tconst blockName = getBlockNames()?.[ keyArray[ 1 ] ];\n\t\treturn blockName || keyArray[ 1 ];\n\t}\n\n\tif ( keyArray?.[ 0 ] === 'elements' ) {\n\t\treturn translationMap[ keyArray[ 1 ] ] || keyArray[ 1 ];\n\t}\n\n\treturn undefined;\n}\n\n/**\n * A deep comparison of two objects, optimized for comparing global styles.\n * @param {Object} changedObject The changed object to compare.\n * @param {Object} originalObject The original object to compare against.\n * @param {string} parentPath A key/value pair object of block names and their rendered titles.\n * @return {string[]} An array of paths whose values have changed.\n */\nfunction deepCompare( changedObject, originalObject, parentPath = '' ) {\n\t// We have two non-object values to compare.\n\tif ( ! isObject( changedObject ) && ! isObject( originalObject ) ) {\n\t\t/*\n\t\t * Only return a path if the value has changed.\n\t\t * And then only the path name up to 2 levels deep.\n\t\t */\n\t\treturn changedObject !== originalObject\n\t\t\t? parentPath.split( '.' ).slice( 0, 2 ).join( '.' )\n\t\t\t: undefined;\n\t}\n\n\t// Enable comparison when an object doesn't have a corresponding property to compare.\n\tchangedObject = isObject( changedObject ) ? changedObject : {};\n\toriginalObject = isObject( originalObject ) ? originalObject : {};\n\n\tconst allKeys = new Set( [\n\t\t...Object.keys( changedObject ),\n\t\t...Object.keys( originalObject ),\n\t] );\n\n\tlet diffs = [];\n\tfor ( const key of allKeys ) {\n\t\tconst path = parentPath ? parentPath + '.' + key : key;\n\t\tconst changedPath = deepCompare(\n\t\t\tchangedObject[ key ],\n\t\t\toriginalObject[ key ],\n\t\t\tpath\n\t\t);\n\t\tif ( changedPath ) {\n\t\t\tdiffs = diffs.concat( changedPath );\n\t\t}\n\t}\n\treturn diffs;\n}\n\n/**\n * Returns an array of translated summarized global styles changes.\n * Results are cached using a Map() key of `JSON.stringify( { next, previous } )`.\n *\n * @param {Object} next The changed object to compare.\n * @param {Object} previous The original object to compare against.\n * @return {Array[]} A 2-dimensional array of tuples: [ \"group\", \"translated change\" ].\n */\nexport function getGlobalStylesChangelist( next, previous ) {\n\tconst cacheKey = JSON.stringify( { next, previous } );\n\n\tif ( globalStylesChangesCache.has( cacheKey ) ) {\n\t\treturn globalStylesChangesCache.get( cacheKey );\n\t}\n\n\t/*\n\t * Compare the two changesets with normalized keys.\n\t * The order of these keys determines the order in which\n\t * they'll appear in the results.\n\t */\n\tconst changedValueTree = deepCompare(\n\t\t{\n\t\t\tstyles: {\n\t\t\t\tbackground: next?.styles?.background,\n\t\t\t\tcolor: next?.styles?.color,\n\t\t\t\ttypography: next?.styles?.typography,\n\t\t\t\tspacing: next?.styles?.spacing,\n\t\t\t},\n\t\t\tblocks: next?.styles?.blocks,\n\t\t\telements: next?.styles?.elements,\n\t\t\tsettings: next?.settings,\n\t\t},\n\t\t{\n\t\t\tstyles: {\n\t\t\t\tbackground: previous?.styles?.background,\n\t\t\t\tcolor: previous?.styles?.color,\n\t\t\t\ttypography: previous?.styles?.typography,\n\t\t\t\tspacing: previous?.styles?.spacing,\n\t\t\t},\n\t\t\tblocks: previous?.styles?.blocks,\n\t\t\telements: previous?.styles?.elements,\n\t\t\tsettings: previous?.settings,\n\t\t}\n\t);\n\n\tif ( ! changedValueTree.length ) {\n\t\tglobalStylesChangesCache.set( cacheKey, EMPTY_ARRAY );\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\t// Remove duplicate results.\n\tconst result = [ ...new Set( changedValueTree ) ]\n\t\t/*\n\t\t * Translate the keys.\n\t\t * Remove empty translations.\n\t\t */\n\t\t.reduce( ( acc, curr ) => {\n\t\t\tconst translation = getTranslation( curr );\n\t\t\tif ( translation ) {\n\t\t\t\tacc.push( [ curr.split( '.' )[ 0 ], translation ] );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\tglobalStylesChangesCache.set( cacheKey, result );\n\n\treturn result;\n}\n\n/**\n * From a getGlobalStylesChangelist() result, returns an array of translated global styles changes, grouped by type.\n * The types are 'blocks', 'elements', 'settings', and 'styles'.\n *\n * @param {Object} next The changed object to compare.\n * @param {Object} previous The original object to compare against.\n * @param {{maxResults:number}} options Options. maxResults: results to return before truncating.\n * @return {string[]} An array of translated changes.\n */\nexport default function getGlobalStylesChanges( next, previous, options = {} ) {\n\tlet changeList = getGlobalStylesChangelist( next, previous );\n\tconst changesLength = changeList.length;\n\tconst { maxResults } = options;\n\n\tif ( changesLength ) {\n\t\t// Truncate to `n` results if necessary.\n\t\tif ( !! maxResults && changesLength > maxResults ) {\n\t\t\tchangeList = changeList.slice( 0, maxResults );\n\t\t}\n\t\treturn Object.entries(\n\t\t\tchangeList.reduce( ( acc, curr ) => {\n\t\t\t\tconst group = acc[ curr[ 0 ] ] || [];\n\t\t\t\tif ( ! group.includes( curr[ 1 ] ) ) {\n\t\t\t\t\tacc[ curr[ 0 ] ] = [ ...group, curr[ 1 ] ];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {} )\n\t\t).map( ( [ key, changeValues ] ) => {\n\t\t\tconst changeValuesLength = changeValues.length;\n\t\t\tconst joinedChangesValue = changeValues.join(\n\t\t\t\t/* translators: Used between list items, there is a space after the comma. */\n\t\t\t\t__( ', ' ) // eslint-disable-line @wordpress/i18n-no-flanking-whitespace\n\t\t\t);\n\t\t\tswitch ( key ) {\n\t\t\t\tcase 'blocks': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of block names separated by a comma.\n\t\t\t\t\t\t_n( '%s block.', '%s blocks.', changeValuesLength ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase 'elements': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of element names separated by a comma.\n\t\t\t\t\t\t_n( '%s element.', '%s elements.', changeValuesLength ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase 'settings': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of theme.json setting labels separated by a comma.\n\t\t\t\t\t\t__( '%s settings.' ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase 'styles': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of theme.json top-level styles labels separated by a comma.\n\t\t\t\t\t\t__( '%s styles.' ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of global styles changes separated by a comma.\n\t\t\t\t\t\t__( '%s.' ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn EMPTY_ARRAY;\n}\n","/**\n * Memize options object.\n *\n * @typedef MemizeOptions\n *\n * @property {number} [maxSize] Maximum size of the cache.\n */\n\n/**\n * Internal cache entry.\n *\n * @typedef MemizeCacheNode\n *\n * @property {?MemizeCacheNode|undefined} [prev] Previous node.\n * @property {?MemizeCacheNode|undefined} [next] Next node.\n * @property {Array<*>} args Function arguments for cache\n * entry.\n * @property {*} val Function result.\n */\n\n/**\n * Properties of the enhanced function for controlling cache.\n *\n * @typedef MemizeMemoizedFunction\n *\n * @property {()=>void} clear Clear the cache.\n */\n\n/**\n * Accepts a function to be memoized, and returns a new memoized function, with\n * optional options.\n *\n * @template {(...args: any[]) => any} F\n *\n * @param {F} fn Function to memoize.\n * @param {MemizeOptions} [options] Options object.\n *\n * @return {((...args: Parameters) => ReturnType) & MemizeMemoizedFunction} Memoized function.\n */\nfunction memize(fn, options) {\n\tvar size = 0;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar head;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar tail;\n\n\toptions = options || {};\n\n\tfunction memoized(/* ...args */) {\n\t\tvar node = head,\n\t\t\tlen = arguments.length,\n\t\t\targs,\n\t\t\ti;\n\n\t\tsearchCache: while (node) {\n\t\t\t// Perform a shallow equality test to confirm that whether the node\n\t\t\t// under test is a candidate for the arguments passed. Two arrays\n\t\t\t// are shallowly equal if their length matches and each entry is\n\t\t\t// strictly equal between the two sets. Avoid abstracting to a\n\t\t\t// function which could incur an arguments leaking deoptimization.\n\n\t\t\t// Check whether node arguments match arguments length\n\t\t\tif (node.args.length !== arguments.length) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check whether node arguments match arguments values\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tif (node.args[i] !== arguments[i]) {\n\t\t\t\t\tnode = node.next;\n\t\t\t\t\tcontinue searchCache;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif (node !== head) {\n\t\t\t\t// As tail, shift to previous. Must only shift if not also\n\t\t\t\t// head, since if both head and tail, there is no previous.\n\t\t\t\tif (node === tail) {\n\t\t\t\t\ttail = node.prev;\n\t\t\t\t}\n\n\t\t\t\t// Adjust siblings to point to each other. If node was tail,\n\t\t\t\t// this also handles new tail's empty `next` assignment.\n\t\t\t\t/** @type {MemizeCacheNode} */ (node.prev).next = node.next;\n\t\t\t\tif (node.next) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = head;\n\t\t\t\tnode.prev = null;\n\t\t\t\t/** @type {MemizeCacheNode} */ (head).prev = node;\n\t\t\t\thead = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\t// Create a copy of arguments (avoid leaking deoptimization)\n\t\targs = new Array(len);\n\t\tfor (i = 0; i < len; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\tnode = {\n\t\t\targs: args,\n\n\t\t\t// Generate the result from original function\n\t\t\tval: fn.apply(null, args),\n\t\t};\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif (head) {\n\t\t\thead.prev = node;\n\t\t\tnode.next = head;\n\t\t} else {\n\t\t\t// If no head, follows that there's no tail (at initial or reset)\n\t\t\ttail = node;\n\t\t}\n\n\t\t// Trim tail if we're reached max size and are pending cache insertion\n\t\tif (size === /** @type {MemizeOptions} */ (options).maxSize) {\n\t\t\ttail = /** @type {MemizeCacheNode} */ (tail).prev;\n\t\t\t/** @type {MemizeCacheNode} */ (tail).next = null;\n\t\t} else {\n\t\t\tsize++;\n\t\t}\n\n\t\thead = node;\n\n\t\treturn node.val;\n\t}\n\n\tmemoized.clear = function () {\n\t\thead = null;\n\t\ttail = null;\n\t\tsize = 0;\n\t};\n\n\t// Ignore reason: There's not a clear solution to create an intersection of\n\t// the function with additional properties, where the goal is to retain the\n\t// function signature of the incoming argument and add control properties\n\t// on the return value.\n\n\t// @ts-ignore\n\treturn memoized;\n}\n\nexport { memize as default };\n","/**\n * WordPress dependencies\n */\nimport { RawHTML, StrictMode, Fragment } from '@wordpress/element';\nimport {\n\tgetSaveElement,\n\t__unstableGetBlockProps as getBlockProps,\n} from '@wordpress/blocks';\nimport { RichTextData } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport InnerBlocks from '../inner-blocks';\nimport { Content } from './content';\n\n/*\n * This function is similar to `@wordpress/element`'s `renderToString` function,\n * except that it does not render the elements to a string, but instead collects\n * the values of all rich text `Content` elements.\n */\nfunction addValuesForElement( element, values, innerBlocks ) {\n\tif ( null === element || undefined === element || false === element ) {\n\t\treturn;\n\t}\n\n\tif ( Array.isArray( element ) ) {\n\t\treturn addValuesForElements( element, values, innerBlocks );\n\t}\n\n\tswitch ( typeof element ) {\n\t\tcase 'string':\n\t\tcase 'number':\n\t\t\treturn;\n\t}\n\n\tconst { type, props } = element;\n\n\tswitch ( type ) {\n\t\tcase StrictMode:\n\t\tcase Fragment:\n\t\t\treturn addValuesForElements( props.children, values, innerBlocks );\n\t\tcase RawHTML:\n\t\t\treturn;\n\t\tcase InnerBlocks.Content:\n\t\t\treturn addValuesForBlocks( values, innerBlocks );\n\t\tcase Content:\n\t\t\tvalues.push( props.value );\n\t\t\treturn;\n\t}\n\n\tswitch ( typeof type ) {\n\t\tcase 'string':\n\t\t\tif ( typeof props.children !== 'undefined' ) {\n\t\t\t\treturn addValuesForElements(\n\t\t\t\t\tprops.children,\n\t\t\t\t\tvalues,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase 'function':\n\t\t\tconst el =\n\t\t\t\ttype.prototype && typeof type.prototype.render === 'function'\n\t\t\t\t\t? new type( props ).render()\n\t\t\t\t\t: type( props );\n\t\t\treturn addValuesForElement( el, values, innerBlocks );\n\t}\n}\n\nfunction addValuesForElements( children, ...args ) {\n\tchildren = Array.isArray( children ) ? children : [ children ];\n\n\tfor ( let i = 0; i < children.length; i++ ) {\n\t\taddValuesForElement( children[ i ], ...args );\n\t}\n}\n\nfunction addValuesForBlocks( values, blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tconst { name, attributes, innerBlocks } = blocks[ i ];\n\t\tconst saveElement = getSaveElement(\n\t\t\tname,\n\t\t\tattributes,\n\t\t\t// Instead of letting save elements use `useInnerBlocksProps.save`,\n\t\t\t// force them to use InnerBlocks.Content instead so we can intercept\n\t\t\t// a single component.\n\t\t\t\n\t\t);\n\t\taddValuesForElement( saveElement, values, innerBlocks );\n\t}\n}\n\nexport function getRichTextValues( blocks = [] ) {\n\tgetBlockProps.skipFilters = true;\n\tconst values = [];\n\taddValuesForBlocks( values, blocks );\n\tgetBlockProps.skipFilters = false;\n\treturn values.map( ( value ) =>\n\t\tvalue instanceof RichTextData\n\t\t\t? value\n\t\t\t: RichTextData.fromHTMLString( value )\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n} from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps\n */\n\n/**\n * The descriptions are purposely made generic as object-fit could be used for\n * any replaced element. Provide your own set of options if you need different\n * help text or labels.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Replaced_element\n *\n * @type {SelectControlProps[]}\n */\nconst DEFAULT_SCALE_OPTIONS = [\n\t{\n\t\tvalue: 'fill',\n\t\tlabel: _x( 'Fill', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Fill the space by stretching the content.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Fit the content to the space without clipping.' ),\n\t},\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( \"Fill the space by clipping what doesn't fit.\" ),\n\t},\n\t{\n\t\tvalue: 'none',\n\t\tlabel: _x( 'None', 'Scale option for dimensions control' ),\n\t\thelp: __(\n\t\t\t'Do not adjust the sizing of the content. Content that is too large will be clipped, and content that is too small will have additional padding.'\n\t\t),\n\t},\n\t{\n\t\tvalue: 'scale-down',\n\t\tlabel: _x( 'Scale down', 'Scale option for dimensions control' ),\n\t\thelp: __(\n\t\t\t'Scale down the content to fit the space if it is too big. Content that is too small will have additional padding.'\n\t\t),\n\t},\n];\n\n/**\n * @callback ScaleToolPropsOnChange\n * @param {string} nextValue New scale value.\n * @return {void}\n */\n\n/**\n * @typedef {Object} ScaleToolProps\n * @property {string} [panelId] ID of the panel that contains the controls.\n * @property {string} [value] Current scale value.\n * @property {ScaleToolPropsOnChange} [onChange] Callback to update the scale value.\n * @property {SelectControlProps[]} [options] Scale options.\n * @property {string} [defaultValue] Default scale value.\n * @property {boolean} [showControl=true] Whether to show the control.\n * @property {boolean} [isShownByDefault=true] Whether the tool panel is shown by default.\n */\n\n/**\n * A tool to select the CSS object-fit property for the image.\n *\n * @param {ScaleToolProps} props\n *\n * @return {import('react').ReactElement} The scale tool.\n */\nexport default function ScaleTool( {\n\tpanelId,\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_SCALE_OPTIONS,\n\tdefaultValue = DEFAULT_SCALE_OPTIONS[ 0 ].value,\n\tisShownByDefault = true,\n} ) {\n\t// Match the CSS default so if the value is used directly in CSS it will look correct in the control.\n\tconst displayValue = value ?? 'fill';\n\n\tconst scaleHelp = useMemo( () => {\n\t\treturn options.reduce( ( acc, option ) => {\n\t\t\tacc[ option.value ] = option.help;\n\t\t\treturn acc;\n\t\t}, {} );\n\t}, [ options ] );\n\n\treturn (\n\t\t displayValue !== defaultValue }\n\t\t\tonDeselect={ () => onChange( defaultValue ) }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t\n\t\t\t\t{ options.map( ( option ) => (\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t\n\t);\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n\n if (match) {\n // The match may be something like 'Object.createEmotionProps'\n var parts = match[1].split('.');\n return parts[parts.length - 1];\n } // Safari / Firefox\n\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return match[1];\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = insertStyles(cache, serialized, typeof finalTag === 'string');\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/createElement(finalTag, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","/**\n * External dependencies\n */\nimport styled from '@emotion/styled';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nconst SingleColumnToolsPanelItem = styled( ToolsPanelItem )`\n\tgrid-column: span 1;\n`;\n\n/**\n * @typedef {import('@wordpress/components/build-types/unit-control/types').WPUnitControlUnit} WPUnitControlUnit\n */\n\n/**\n * @typedef {Object} WidthHeightToolValue\n * @property {string} [width] Width CSS value.\n * @property {string} [height] Height CSS value.\n */\n\n/**\n * @callback WidthHeightToolOnChange\n * @param {WidthHeightToolValue} nextValue Next dimensions value.\n * @return {void}\n */\n\n/**\n * @typedef {Object} WidthHeightToolProps\n * @property {string} [panelId] ID of the panel that contains the controls.\n * @property {WidthHeightToolValue} [value] Current dimensions values.\n * @property {WidthHeightToolOnChange} [onChange] Callback to update the dimensions values.\n * @property {WPUnitControlUnit[]} [units] Units options.\n * @property {boolean} [isShownByDefault] Whether the panel is shown by default.\n */\n\n/**\n * Component that renders controls to edit the dimensions of an image or container.\n *\n * @param {WidthHeightToolProps} props The component props.\n *\n * @return {import('react').ReactElement} The width and height tool.\n */\nexport default function WidthHeightTool( {\n\tpanelId,\n\tvalue = {},\n\tonChange = () => {},\n\tunits,\n\tisShownByDefault = true,\n} ) {\n\t// null, undefined, and 'auto' all represent the default value.\n\tconst width = value.width === 'auto' ? '' : value.width ?? '';\n\tconst height = value.height === 'auto' ? '' : value.height ?? '';\n\n\tconst onDimensionChange = ( dimension ) => ( nextDimension ) => {\n\t\tconst nextValue = { ...value };\n\t\t// Empty strings or undefined may be passed and both represent removing the value.\n\t\tif ( ! nextDimension ) {\n\t\t\tdelete nextValue[ dimension ];\n\t\t} else {\n\t\t\tnextValue[ dimension ] = nextDimension;\n\t\t}\n\t\tonChange( nextValue );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t width !== '' }\n\t\t\t\tonDeselect={ onDimensionChange( 'width' ) }\n\t\t\t\tpanelId={ panelId }\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t\t height !== '' }\n\t\t\t\tonDeselect={ onDimensionChange( 'height' ) }\n\t\t\t\tpanelId={ panelId }\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport AspectRatioTool from './aspect-ratio-tool';\nimport ScaleTool from './scale-tool';\nimport WidthHeightTool from './width-height-tool';\n\n/**\n * @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps\n */\n\n/**\n * @typedef {import('@wordpress/components/build-types/unit-control/types').WPUnitControlUnit} WPUnitControlUnit\n */\n\n/**\n * @typedef {Object} Dimensions\n * @property {string} [width] CSS width property.\n * @property {string} [height] CSS height property.\n * @property {string} [scale] CSS object-fit property.\n * @property {string} [aspectRatio] CSS aspect-ratio property.\n */\n\n/**\n * @callback DimensionsControlsOnChange\n * @param {Dimensions} nextValue\n * @return {void}\n */\n\n/**\n * @typedef {Object} DimensionsControlsProps\n * @property {string} [panelId] ID of the panel that contains the controls.\n * @property {Dimensions} [value] Current dimensions values.\n * @property {DimensionsControlsOnChange} [onChange] Callback to update the dimensions values.\n * @property {SelectControlProps[]} [aspectRatioOptions] Aspect ratio options.\n * @property {SelectControlProps[]} [scaleOptions] Scale options.\n * @property {WPUnitControlUnit[]} [unitsOptions] Units options.\n */\n\n/**\n * Component that renders controls to edit the dimensions of an image or container.\n *\n * @param {DimensionsControlsProps} props The component props.\n *\n * @return {Element} The dimensions controls.\n */\nfunction DimensionsTool( {\n\tpanelId,\n\tvalue = {},\n\tonChange = () => {},\n\taspectRatioOptions, // Default options handled by AspectRatioTool.\n\tdefaultAspectRatio = 'auto', // Match CSS default value for aspect-ratio.\n\tscaleOptions, // Default options handled by ScaleTool.\n\tdefaultScale = 'fill', // Match CSS default value for object-fit.\n\tunitsOptions, // Default options handled by UnitControl.\n\ttools = [ 'aspectRatio', 'widthHeight', 'scale' ],\n} ) {\n\t// Coerce undefined and CSS default values to be null.\n\tconst width =\n\t\tvalue.width === undefined || value.width === 'auto'\n\t\t\t? null\n\t\t\t: value.width;\n\tconst height =\n\t\tvalue.height === undefined || value.height === 'auto'\n\t\t\t? null\n\t\t\t: value.height;\n\tconst aspectRatio =\n\t\tvalue.aspectRatio === undefined || value.aspectRatio === 'auto'\n\t\t\t? null\n\t\t\t: value.aspectRatio;\n\tconst scale =\n\t\tvalue.scale === undefined || value.scale === 'fill'\n\t\t\t? null\n\t\t\t: value.scale;\n\n\t// Keep track of state internally, so when the value is cleared by means\n\t// other than directly editing that field, it's easier to restore the\n\t// previous value.\n\tconst [ lastScale, setLastScale ] = useState( scale );\n\tconst [ lastAspectRatio, setLastAspectRatio ] = useState( aspectRatio );\n\n\t// 'custom' is not a valid value for CSS aspect-ratio, but it is used in the\n\t// dropdown to indicate that setting both the width and height is the same\n\t// as a custom aspect ratio.\n\tconst aspectRatioValue = width && height ? 'custom' : lastAspectRatio;\n\n\tconst showScaleControl = aspectRatio || ( width && height );\n\n\treturn (\n\t\t<>\n\t\t\t{ tools.includes( 'aspectRatio' ) && (\n\t\t\t\t {\n\t\t\t\t\t\tconst nextValue = { ...value };\n\n\t\t\t\t\t\t// 'auto' is CSS default, so it gets treated as null.\n\t\t\t\t\t\tnextAspectRatio =\n\t\t\t\t\t\t\tnextAspectRatio === 'auto' ? null : nextAspectRatio;\n\n\t\t\t\t\t\tsetLastAspectRatio( nextAspectRatio );\n\n\t\t\t\t\t\t// Update aspectRatio.\n\t\t\t\t\t\tif ( ! nextAspectRatio ) {\n\t\t\t\t\t\t\tdelete nextValue.aspectRatio;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.aspectRatio = nextAspectRatio;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update scale.\n\t\t\t\t\t\tif ( ! nextAspectRatio ) {\n\t\t\t\t\t\t\tdelete nextValue.scale;\n\t\t\t\t\t\t} else if ( lastScale ) {\n\t\t\t\t\t\t\tnextValue.scale = lastScale;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.scale = defaultScale;\n\t\t\t\t\t\t\tsetLastScale( defaultScale );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update width and height.\n\t\t\t\t\t\tif ( 'custom' !== nextAspectRatio && width && height ) {\n\t\t\t\t\t\t\tdelete nextValue.height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( nextValue );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ tools.includes( 'widthHeight' ) && (\n\t\t\t\t {\n\t\t\t\t\t\tconst nextValue = { ...value };\n\n\t\t\t\t\t\t// 'auto' is CSS default, so it gets treated as null.\n\t\t\t\t\t\tnextWidth = nextWidth === 'auto' ? null : nextWidth;\n\t\t\t\t\t\tnextHeight = nextHeight === 'auto' ? null : nextHeight;\n\n\t\t\t\t\t\t// Update width.\n\t\t\t\t\t\tif ( ! nextWidth ) {\n\t\t\t\t\t\t\tdelete nextValue.width;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.width = nextWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update height.\n\t\t\t\t\t\tif ( ! nextHeight ) {\n\t\t\t\t\t\t\tdelete nextValue.height;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.height = nextHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update aspectRatio.\n\t\t\t\t\t\tif ( nextWidth && nextHeight ) {\n\t\t\t\t\t\t\tdelete nextValue.aspectRatio;\n\t\t\t\t\t\t} else if ( lastAspectRatio ) {\n\t\t\t\t\t\t\tnextValue.aspectRatio = lastAspectRatio;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No setting defaultAspectRatio here, because\n\t\t\t\t\t\t\t// aspectRatio is optional in this scenario,\n\t\t\t\t\t\t\t// unlike scale.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update scale.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! lastAspectRatio &&\n\t\t\t\t\t\t\t!! nextWidth !== !! nextHeight\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdelete nextValue.scale;\n\t\t\t\t\t\t} else if ( lastScale ) {\n\t\t\t\t\t\t\tnextValue.scale = lastScale;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.scale = defaultScale;\n\t\t\t\t\t\t\tsetLastScale( defaultScale );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( nextValue );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ tools.includes( 'scale' ) && showScaleControl && (\n\t\t\t\t {\n\t\t\t\t\t\tconst nextValue = { ...value };\n\n\t\t\t\t\t\t// 'fill' is CSS default, so it gets treated as null.\n\t\t\t\t\t\tnextScale = nextScale === 'fill' ? null : nextScale;\n\n\t\t\t\t\t\tsetLastScale( nextScale );\n\n\t\t\t\t\t\t// Update scale.\n\t\t\t\t\t\tif ( ! nextScale ) {\n\t\t\t\t\t\t\tdelete nextValue.scale;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.scale = nextScale;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( nextValue );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default DimensionsTool;\n","/**\n * WordPress dependencies\n */\nimport {\n\tSelectControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n\nconst DEFAULT_SIZE_OPTIONS = [\n\t{\n\t\tlabel: _x( 'Thumbnail', 'Image size option for resolution control' ),\n\t\tvalue: 'thumbnail',\n\t},\n\t{\n\t\tlabel: _x( 'Medium', 'Image size option for resolution control' ),\n\t\tvalue: 'medium',\n\t},\n\t{\n\t\tlabel: _x( 'Large', 'Image size option for resolution control' ),\n\t\tvalue: 'large',\n\t},\n\t{\n\t\tlabel: _x( 'Full Size', 'Image size option for resolution control' ),\n\t\tvalue: 'full',\n\t},\n];\n\nexport default function ResolutionTool( {\n\tpanelId,\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_SIZE_OPTIONS,\n\tdefaultValue = DEFAULT_SIZE_OPTIONS[ 0 ].value,\n\tisShownByDefault = true,\n} ) {\n\tconst displayValue = value ?? defaultValue;\n\treturn (\n\t\t displayValue !== defaultValue }\n\t\t\tlabel={ __( 'Resolution' ) }\n\t\t\tonDeselect={ () => onChange( defaultValue ) }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport * as globalStyles from './components/global-styles';\nimport { ExperimentalBlockEditorProvider } from './components/provider';\nimport { lock } from './lock-unlock';\nimport { getRichTextValues } from './components/rich-text/get-rich-text-values';\nimport ResizableBoxPopover from './components/resizable-box-popover';\nimport { default as PrivateQuickInserter } from './components/inserter/quick-inserter';\nimport {\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n} from './components/inserter/search-items';\nimport { PrivateListView } from './components/list-view';\nimport BlockInfo from './components/block-info-slot-fill';\nimport { useHasBlockToolbar } from './components/block-toolbar/use-has-block-toolbar';\nimport { cleanEmptyObject } from './hooks/utils';\nimport BlockQuickNavigation from './components/block-quick-navigation';\nimport { LayoutStyle } from './components/block-list/layout';\nimport { BlockRemovalWarningModal } from './components/block-removal-warning-modal';\nimport {\n\tsetBackgroundStyleDefaults,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n} from './hooks';\nimport DimensionsTool from './components/dimensions-tool';\nimport ResolutionTool from './components/resolution-tool';\nimport TextAlignmentControl from './components/text-alignment-control';\nimport { usesContextKey } from './components/rich-text/format-edit';\nimport { ExperimentalBlockCanvas } from './components/block-canvas';\nimport { getDuotoneFilter } from './components/duotone/utils';\nimport { useFlashEditableBlocks } from './components/use-flash-editable-blocks';\nimport {\n\tselectBlockPatternsKey,\n\treusableBlocksSelectKey,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tsectionRootClientIdKey,\n} from './store/private-keys';\nimport { requiresWrapperOnCopy } from './components/writing-flow/utils';\nimport { PrivateRichText } from './components/rich-text/';\nimport { PrivateBlockPopover } from './components/block-popover';\nimport { PrivateInserterLibrary } from './components/inserter/library';\nimport { PrivatePublishDateTimePicker } from './components/publish-date-time-picker';\nimport useSpacingSizes from './components/spacing-sizes-control/hooks/use-spacing-sizes';\nimport useBlockDisplayTitle from './components/block-title/use-block-display-title';\nimport TabbedSidebar from './components/tabbed-sidebar';\nimport { useBlockBindingsUtils } from './utils/block-bindings';\n\n/**\n * Private @wordpress/block-editor APIs.\n */\nexport const privateApis = {};\nlock( privateApis, {\n\t...globalStyles,\n\tExperimentalBlockCanvas,\n\tExperimentalBlockEditorProvider,\n\tgetDuotoneFilter,\n\tgetRichTextValues,\n\tPrivateQuickInserter,\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n\tPrivateListView,\n\tResizableBoxPopover,\n\tBlockInfo,\n\tuseHasBlockToolbar,\n\tcleanEmptyObject,\n\tBlockQuickNavigation,\n\tLayoutStyle,\n\tBlockRemovalWarningModal,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tDimensionsTool,\n\tResolutionTool,\n\tTabbedSidebar,\n\tTextAlignmentControl,\n\tusesContextKey,\n\tuseFlashEditableBlocks,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tselectBlockPatternsKey,\n\trequiresWrapperOnCopy,\n\tPrivateRichText,\n\tPrivateInserterLibrary,\n\treusableBlocksSelectKey,\n\tPrivateBlockPopover,\n\tPrivatePublishDateTimePicker,\n\tuseSpacingSizes,\n\tuseBlockDisplayTitle,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n\tsetBackgroundStyleDefaults,\n\tuseBlockBindingsUtils,\n\tsectionRootClientIdKey,\n} );\n","/**\n * WordPress dependencies\n */\nimport { ResizableBox } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../block-popover/cover';\n\nexport default function ResizableBoxPopover( {\n\tclientId,\n\tresizableBoxProps,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tModal,\n\tButton,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function BlockRemovalWarningModal( { rules } ) {\n\tconst { clientIds, selectPrevious, message } = useSelect( ( select ) =>\n\t\tunlock( select( blockEditorStore ) ).getRemovalPromptData()\n\t);\n\n\tconst {\n\t\tclearBlockRemovalPrompt,\n\t\tsetBlockRemovalRules,\n\t\tprivateRemoveBlocks,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\t// Load block removal rules, simultaneously signalling that the block\n\t// removal prompt is in place.\n\tuseEffect( () => {\n\t\tsetBlockRemovalRules( rules );\n\t\treturn () => {\n\t\t\tsetBlockRemovalRules();\n\t\t};\n\t}, [ rules, setBlockRemovalRules ] );\n\n\tif ( ! message ) {\n\t\treturn;\n\t}\n\n\tconst onConfirmRemoval = () => {\n\t\tprivateRemoveBlocks( clientIds, selectPrevious, /* force */ true );\n\t\tclearBlockRemovalPrompt();\n\t};\n\n\treturn (\n\t\t\n\t\t\t

    { message }

    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n"],"names":["module","exports","keys","values","map","Map","has","key","indexOf","get","set","value","push","delete","index","splice","createEvent","name","Event","bubbles","e","evt","document","initEvent","assign","ta","nodeName","heightOffset","clientWidth","cachedHeight","pageResize","update","destroy","style","window","removeEventListener","Object","forEach","bind","height","resize","overflowY","overflowX","wordWrap","addEventListener","getComputedStyle","boxSizing","parseFloat","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","isNaN","changeOverflow","width","offsetWidth","scrollHeight","overflows","el","arr","parentNode","Element","scrollTop","node","getParentOverflows","docTop","documentElement","styleHeight","Math","round","computed","actualHeight","offsetHeight","dispatchEvent","err","methods","autosize","options","Array","prototype","call","length","x","default","prop","currentStyle","replace","word","letter","toUpperCase","Diff","buildValues","diff","components","newString","oldString","useLongestToken","componentPos","componentLen","newPos","oldPos","component","removed","join","slice","count","added","tmp","i","oldValue","lastComponent","equals","pop","callback","this","self","done","setTimeout","undefined","castInput","removeEmpty","tokenize","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","canAdd","canRemove","path","pushComponent","exec","ret","last","commonCount","left","right","comparator","ignoreCase","toLowerCase","array","split","chars","oldStr","newStr","characterDiff","equal","a","b","constructor","isArray","size","entries","Set","ArrayBuffer","isView","RegExp","source","flags","valueOf","toString","hasOwnProperty","computedStyle","lnHeightStr","lnHeight","_lnHeightStyle","lineHeight","_node","createElement","innerHTML","setAttribute","fontSizeStr","fontSize","padding","border","body","appendChild","removeChild","canUseDOM","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","attachEvent","canUseViewport","screen","isInWorker","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_populated","_populate","uas","navigator","userAgent","agent","os","NaN","documentMode","trident","ver","UserAgent_DEPRECATED","ie","ieCompatibilityMode","ie64","firefox","opera","webkit","safari","chrome","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","useHasFeature","implementation","hasFeature","eventNameSuffix","capture","eventName","isSupported","element","isEventSupported","normalizeWheel","event","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","getEventType","String","create","isColorSupported","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","createColors","isFileInArray","file","some","ruleOrString","test","includes","prefix","prefixWithSpace","ignoreFiles","concat","includeFiles","root","input","walkRules","rule","parent","selectors","selector","exclude","excludeArr","excludeRule","excludeSelector","transform","Container","AtRule","defaults","super","type","append","children","proxyOf","nodes","prepend","registerAtRule","Node","Comment","parse","Rule","Root","isClean","my","Declaration","cleanSource","markDirtyUp","child","normalize","markDirty","cleanRaws","keepBetween","each","result","iterator","getIterator","indexes","every","condition","lastEach","getProxyProcessor","startsWith","args","toProxy","cb","other","insertAfter","exist","add","existIndex","reverse","id","insertBefore","sample","Error","text","rebuild","raws","before","first","unshift","removeAll","replaceValues","pattern","opts","walkDecls","decl","props","fast","walk","addToError","walkAtRules","walkComments","registerParse","dependant","registerRule","registerRoot","setPrototypeOf","pico","terminalHighlight","CssSyntaxError","message","line","column","plugin","reason","endLine","endColumn","setMessage","captureStackTrace","showSourceCode","color","css","mark","aside","lines","start","max","end","min","maxWidth","str","number","gutter","spacing","code","variable","LazyResult","Processor","Document","toResult","stringify","registerLazyResult","registerProcessor","PreviousMap","Input","fromJSON","json","inputs","n","ownInputs","inputHydrated","__proto__","inputId","SourceMapConsumer","SourceMapGenerator","fileURLToPath","pathToFileURL","isAbsolute","resolve","nanoid","fromOffsetCache","Symbol","sourceMapAvailable","Boolean","pathAvailable","hasBOM","from","consumer","mapResolve","error","offset","pos","fromOffset","col","origin","url","lastLine","lineToIndex","prevIndex","l","mid","sourceRoot","to","fromUrl","originalPositionFor","URL","mapFile","protocol","sourceContentFor","toJSON","consumerCache","registerInput","MapGenerator","Result","TYPE_TO_CLASS_NAME","atrule","comment","PLUGIN_PROPS","AtRuleExit","CommentExit","DeclarationExit","DocumentExit","Once","OnceExit","postcssPlugin","prepare","RootExit","RuleExit","NOT_VISITORS","CHILDREN","isPromise","obj","then","getEvents","toStack","events","eventIndex","visitorIndex","visitors","cleanMarks","postcss","processor","stringified","processed","inline","prev","parser","syntax","helpers","plugins","async","Promise","reject","processing","runAsync","onRejected","catch","onFinally","getAsyncError","handleError","lastPlugin","postcssVersion","console","prepareVisitors","listeners","version","filter","hasListener","promise","runOnRoot","stack","visitTick","visitor","roots","subRoot","all","sync","stringifier","data","generate","walkSync","visitSync","onFulfilled","visit","warnings","content","messages","toStringTag","registerPostcss","list","comma","string","space","separators","current","func","inQuote","prevQuote","escape","trim","dirname","relative","sep","cssString","mapOpts","originalCSS","usesFileUrls","absolute","memoizedFileURLs","memoizedPaths","memoizedURLs","addAnnotation","isInline","toBase64","annotation","outputFile","eol","applyPrevMaps","previous","toUrl","sourcesContent","applySourceMap","clearAnnotation","isMap","generateMap","generateString","fromSourceMap","ignoreInvalidMapping","addMapping","generated","original","isSourcesContent","setSourcesContent","isAnnotation","noSource","mapping","sourcePath","match","lastIndexOf","p","semicolon","withContent","charCodeAt","cached","previousMaps","already","toFileUrl","setSourceContent","Buffer","btoa","unescape","encodeURIComponent","fileURL","encodeURI","NoWorkResult","_processor","_css","_opts","_map","defineProperty","generatedCSS","generatedMap","_root","Stringifier","cloneNode","cloned","j","clone","postcssNode","s","after","overrides","between","cloneAfter","cloneBefore","rangeBy","next","positionBy","stringRepresentation","positionInside","endIndex","raw","defaultType","remove","replaceWith","bookmark","foundSelf","_","fixed","emitInputs","inputsNextIndex","proxyCache","Proxy","warn","Parser","tokenizer","SAFE_COMMENT_NEIGHBOR","empty","spaces","createTokenizer","token","shift","unnamedAtrule","init","open","params","brackets","endOfFile","nextToken","getPosition","spacesAndCommentsFromEnd","afterName","spacesAndCommentsFromStart","checkMissedSemicolon","tokens","colon","founded","doubleColon","customProperty","findLastWithPosition","unknownWord","firstSpaces","precheckMissedSemicolon","important","stringFrom","spacesFromEnd","cache","emptyRule","unexpectedClose","endFile","unclosedBlock","position","freeSemicolon","ownSemicolon","bracket","back","unclosedBracket","clean","reduce","lastTokenType","Warning","initializer","warningPrinted","creator","process","env","LANG","transformer","processOpts","pluginOpts","atRule","existsSync","readFileSync","loadAnnotation","startWith","loadMap","decodeInline","decodeURIComponent","substr","lastMatch","atob","encoding","getAnnotationURL","sourceMapString","mappings","_mappings","sections","comments","substring","loadFile","JSON","prevPath","normalized","use","warning","ignore","DEFAULT_RAW","beforeClose","beforeComment","beforeDecl","beforeOpen","beforeRule","commentLeft","commentRight","emptyBody","indent","builder","rawValue","block","beforeAfter","detect","buf","depth","step","own","rawCache","method","rawBeforeClose","rawBeforeComment","rawBeforeDecl","rawBeforeOpen","rawBeforeRule","rawColon","rawEmptyBody","rawIndent","parts","rawSemicolon","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","quote","escaped","escapePos","currentToken","ignoreErrors","buffer","returned","unclosed","what","ignoreUnclosed","controlChar","fromCharCode","lastIndex","charAt","printed","range","opt","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","object","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","extendStatics","__extends","d","__","__assign","t","arguments","__rest","getOwnPropertySymbols","__esModule","React","getLineHeight","RESIZED","TextareaAutosizeClass","_super","_this","apply","state","textarea","onResize","updateLineHeight","setState","onChange","currentValue","currentTarget","componentDidMount","_a","maxRows","componentWillUnmount","render","_b","innerRef","maxHeight","ref","componentDidUpdate","defaultProps","rows","propTypes","Component","TextareaAutosize","forwardRef","TextareaAutosize_1","characterMap","allAccents","firstAccent","matcher","removeAccents","CSSValueParser","config","skipHostRelativeUrls","parsedValue","valueChanged","urlVal","basedUrl","rootUrl","pathname","ValueParser","bubble","unit","openParentheses","closeParentheses","singleQuote","doubleQuote","backslash","slash","star","uLower","uUpper","plus","isUnicodeRange","whitespacePos","parenthesesOpenPos","balanced","sourceEndIndex","sourceIndex","stringifyNode","custom","customResult","minus","dot","exp","EXP","nextCode","nextNextCode","likeNumber","random","customAlphabet","alphabet","defaultSize","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","o","enumerable","r","mayDisplayControlsKey","mayDisplayParentControlsKey","blockEditingModeKey","blockBindingsKey","isPreviewModeKey","DEFAULT_BLOCK_EDIT_CONTEXT","isSelected","Context","createContext","Provider","useBlockEditContext","useContext","PREFERENCES_DEFAULTS","insertUsage","SETTINGS_DEFAULTS","alignWide","supportsLayout","colors","slug","fontSizes","_x","imageDefaultSize","imageSizes","imageEditing","allowedBlockTypes","maxUploadFileSize","allowedMimeTypes","canLockBlocks","enableOpenverseMediaCategory","clearBlockSelection","__experimentalCanUserUseUnfilteredHTML","__experimentalBlockDirectory","__mobileEnablePageTemplates","__experimentalBlockPatterns","__experimentalBlockPatternCategories","__unstableIsPreviewMode","blockInspectorAnimation","animationParent","enterDirection","generateAnchors","gradients","gradient","__unstableResolvedAssets","styles","scripts","insertAt","elements","moveTo","withoutMovedElements","identity","mapBlockOrder","blocks","rootClientId","clientId","innerBlocks","order","subClientId","mapBlockParents","currentBlocks","flattenBlocks","getFlattenedBlocksWithoutAttributes","attributes","restBlock","getFlattenedBlockAttributes","isUpdatingSameBlockAttribute","action","lastAction","fastDeepEqual","clientIds","hasSameKeys","updateBlockTreeForBlocks","treeToUpdate","tree","flattenedBlocks","byClientId","subBlock","updateParentInnerBlocksInTree","updatedClientIds","updateChildrenOfUpdatedClientIds","uncontrolledParents","controlledParents","parents","controlledInnerBlocks","pipe","combineReducers","reducer","updatedId","newState","inserterClientIds","getFlattenedClientIds","replacedClientIds","parentsOfRemovedBlocks","parentId","removedClientIds","updatedBlockUids","fromRootClientId","toRootClientId","getAllChildren","keepControlledInnerBlocks","nestedControllers","stateAfterBlocksRemoval","stateAfterInsert","stateAfterInsertOrder","_key","explicitPersistent","markNextChangeAsNotPersistent","nextIsPersistentChange","nextState","_state$isPersistentCh","isPersistentChange","isExplicitPersistentChange","_state$isPersistentCh2","IGNORED_ACTION_TYPES","isIgnoredChange","tempState","changes","updates","hasChange","_action$attributes","updatedAttributeEntries","uniqueByBlock","hasUpdatedAttributes","existingAttributes","newAttributes","_state$get","blockOrder","subState","mappedBlocks","_state$get$filter","fromIndex","firstClientId","firstIndex","lastClientId","newSubOrder","_order$filter","hasControlledInnerBlocks","selectionHelper","updateSelection","blockToSelect","indexToSelect","combinedReducers","isDragging","isTyping","isBlockInterfaceHidden","draggedBlocks","selection","selectionStart","attributeKey","startOffset","selectionEnd","endOffset","startClientId","endClientId","isMultiSelecting","isSelectionEnabled","initialPosition","blocksMode","blockListSettings","fromEntries","settings","merged","insertionPoint","__unstableWithInserter","operation","nearestSide","template","isValid","preferences","nextInsertUsage","prevUsage","blockName","select","blocksStore","getActiveBlockVariation","time","lastBlockAttributesChange","accumulator","lastFocus","editorMode","mode","hasBlockMovingClientId","expandedBlock","highlightedBlock","isHighlighted","lastBlockInserted","meta","temporarilyEditingAsBlocks","temporarilyEditingFocusModeRevert","focusModeToRevert","blockVisibility","blockEditingModes","styleOverrides","removalPromptData","selectPrevious","blockRemovalRules","rules","openedBlockSettingsMenu","_action$clientId","registeredInserterMediaCategories","category","hoveredBlockClientId","zoomLevel","zoom","automaticChangeStatus","_jsx","SVG","xmlns","viewBox","Path","globalStylesDataKey","globalStylesLinksDataKey","selectBlockPatternsKey","reusableBlocksSelectKey","sectionRootClientIdKey","lock","unlock","__dangerousOptInToUnstableAPIsOnlyForCoreModules","STORE_NAME","withRootClientIdOptionKey","parsedPatternCache","WeakMap","grammarMapCache","getParsedPattern","parsedPattern","__unstableSkipMigrationLogs","metadata","categories","patternName","title","parsePattern","getGrammar","grammarMap","grammarParse","checkAllowList","item","defaultResult","checkAllowListRecursive","blocksQueue","innerBlock","getAllPatternsDependants","__experimentalUserPatternCategories","__experimentalReusableBlocks","blockPatterns","getReusableBlocks","getInsertBlockTypeDependants","templateLock","field","items","cmpA","cmpB","orderA","findIndex","orderB","orderBy","sort","INSERTER_PATTERN_TYPES","user","theme","directory","INSERTER_SYNC_TYPES","full","unsynced","allPatternsCategory","label","myPatternsCategory","isPatternFiltered","sourceFilter","syncFilter","isUserPattern","isDirectoryPattern","syncStatus","setImmutably","leaf","lvl","getValueFromObjectPath","defaultValue","_value","arrayPath","fieldName","blockedPaths","deprecatedFlags","disableCustomColors","disableCustomGradients","disableCustomFontSizes","enableCustomLineHeight","enableCustomUnits","enableCustomSpacing","prefixedFlags","removeCustomPrefixes","getBlockSettings","paths","getBlockName","candidates","hasBlockSupport","applyFilters","normalizedPath","candidateClientId","_getValueFromObjectPa","candidateAtts","getBlockAttributes","getSettings","_ref","_result$custom","__experimentalFeatures","PATHS_WITH_OVERRIDE","deprecatedSettingsValue","getLastInsertedBlocksClientIds","getBlockWithoutAttributes","isBlockSubtreeDisabled","isChildSubtreeDisabled","childClientId","getBlockEditingMode","getBlockOrder","getEnabledClientIdsTree","createSelector","getEnabledClientIdsTreeUnmemoized","getEnabledBlockParents","ascending","getBlockParents","getRemovalPromptData","getBlockRemovalRules","getOpenedBlockSettingsMenu","getStyleOverrides","clientIdMap","getClientIdsWithDescendants","acc","overrideA","overrideB","_clientIdMap$clientId","_clientIdMap$clientId2","clientIdA","clientIdB","getRegisteredInserterMediaCategories","getInserterMediaCategories","inserterMediaCategories","coreInserterMediaCategoriesNames","mimeType","mediaType","hasAllowedPatterns","createRegistrySelector","getAllPatterns","patterns","inserter","grammar","canInsertBlockType","mapUserPattern","userPattern","wp_pattern_category","catId","find","wp_pattern_sync_status","getPatternBySlug","_state$settings$__exp","_state$settings$selec","_id","parseInt","_state$settings$__exp2","_state$settings$selec2","y","isResolvingPatterns","blockPatternsSelect","reusableBlocksSelect","EMPTY_ARRAY","getLastFocus","getExpandedBlock","getContentLockingParent","getTemplateLock","getTemporarilyEditingAsBlocks","getTemporarilyEditingFocusModeToRevert","getBlockStyles","isZoomOutMode","getSectionRootClientId","getZoomLevel","isZoomOut","EMPTY_SET","EMPTY_OBJECT","socialLinkName","Platform","OS","service","isBlockValid","getBlock","__unstableGetBlockWithoutInnerBlocks","getBlocks","treeKey","areInnerBlocksControlled","__unstableGetClientIdWithClientIdsTree","deprecated","since","__unstableGetClientIdsTree","getClientIdsOfDescendants","rootIds","ids","rootId","getGlobalBlockCount","getBlocksByName","blockNames","foundBlocks","__experimentalGetGlobalBlocksByName","alternative","getBlocksByClientId","getBlockNamesByClientId","getBlockCount","getSelectionStart","getSelectionEnd","getBlockSelectionStart","getBlockSelectionEnd","getSelectedBlockCount","getMultiSelectedBlockClientIds","hasSelectedBlock","getSelectedBlockClientId","getSelectedBlock","getBlockRootClientId","_state$blocks$parents","getBlockParentsByBlockName","hasName","getBlockHierarchyRootClientId","getLowestCommonAncestorWithSelectedBlock","selectedId","clientParents","selectedParents","lowestCommonAncestor","maxDepth","getAdjacentBlockClientId","modifier","getFirstMultiSelectedBlockClientId","getLastMultiSelectedBlockClientId","orderSet","nextIndex","getPreviousBlockClientId","getNextBlockClientId","getSelectedBlocksInitialCaretPosition","getSelectedBlockClientIds","startIndex","getMultiSelectedBlocks","multiSelectedBlockClientIds","getDependants","selectedClientIds","isFirstMultiSelectedBlock","isBlockMultiSelected","isAncestorMultiSelected","ancestorClientId","isMultiSelected","getMultiSelectedBlocksStartClientId","getMultiSelectedBlocksEndClientId","__unstableIsFullySelected","selectionAnchor","selectionFocus","__unstableIsSelectionCollapsed","__unstableSelectionHasUnmergeableBlock","getBlockType","merge","__unstableIsSelectionMergeable","isForward","anchorRootClientId","targetBlockClientId","blockToMergeClientId","targetBlockName","blockToMerge","blocksToMerge","switchToBlockType","__unstableGetSelectedBlocksWithPartialSelection","anchorIndex","focusIndex","blockA","blockB","htmlA","htmlB","valueA","html","valueB","toHTMLString","getBlockIndex","isBlockSelected","hasSelectedInnerBlock","deep","selectedBlockClientIds","hasDraggedInnerBlock","innerClientId","isBlockBeingDragged","isBlockWithinSelection","hasMultiSelection","getBlockMode","isDraggingBlocks","getDraggedBlockClientIds","isAncestorBeingDragged","parentClientId","isCaretWithinFormattedText","getBlockInsertionPoint","isBlockInsertionPointVisible","isValidTemplate","getTemplate","_getBlockListSettings","_state$settings$templ","getBlockListSettings","canInsertBlockTypeUnmemoized","blockType","parentBlockListSettings","parentName","parentBlockType","parentAllowedChildBlocks","allowedBlocks","hasParentAllowedBlock","parentAllowedBlocks","hasParentListAllowedBlock","blockAllowedParentBlocks","hasBlockAllowedParent","hasBlockAllowedAncestor","blockAllowedAncestorBlocks","ancestor","canInsert","canInsertBlocks","canRemoveBlock","canRemoveBlocks","canMoveBlock","move","canMoveBlocks","canEditBlock","edit","canLockBlockType","nameOrType","getInsertUsage","_state$preferences$in","canIncludeBlockTypeInInserter","calculateFrecency","duration","Date","now","buildBlockTypeItem","buildScope","isDisabled","blockItemBase","icon","frecency","inserterVariations","getBlockVariations","initialAttributes","description","keywords","variations","example","utility","getInserterItems","syncedPatternInserterItems","reusableBlock","src","foreground","buildBlockTypeInserterItem","blockTypeInserterItems","getBlockTypes","sectionRootClientId","isDefault","variationMapper","getItemFromVariation","variation","variationId","core","coreItems","noncore","nonCoreItems","groupByType","getBlockTransformItems","normalizedBlocks","buildBlockTypeTransformItem","blockTypeTransformItems","itemsByName","possibleTransforms","getPossibleBlockTransformations","hasInserterItems","getAllowedBlocks","blockTypes","__experimentalGetAllowedBlocks","getDirectInsertBlock","_state$blockListSetti","defaultBlock","directInsert","__experimentalGetDirectInsertBlock","__experimentalGetParsedPattern","getAllowedPatternsDependants","__experimentalGetAllowedPatterns","parsedPatterns","getPatternsByBlockTypes","normalizedBlockNames","filteredPatterns","__experimentalGetPatternsByBlockTypes","__experimentalGetPatternTransformItems","selectedBlockNames","isLastBlockChangePersistent","__experimentalGetBlockListSettingsForBlocks","blockListSettingsForBlocks","__experimentalGetReusableBlockTitle","__unstableIsLastBlockChangeIgnored","__experimentalGetLastBlockAttributeChanges","isNavigationMode","__unstableGetEditorMode","didAutomaticChange","isBlockHighlighted","__experimentalGetActiveBlockIdByBlockNames","validBlockNames","selectedBlockClientId","entityAreaParents","wasBlockJustInserted","isBlockVisible","_state$blockVisibilit","getHoveredBlockClientId","__unstableGetVisibleBlocks","visibleBlocks","__unstableHasActiveBlockOverlayActive","sectionClientIds","blockSupportDisable","__unstableIsWithinBlockOverlay","sectionsClientIds","blockEditingMode","__experimentalHasContentRoleAttribute","parentMode","isUngroupable","_clientId","getGroupingBlockName","groupingBlockName","transforms","ungroup","isGroupable","_clientIds","__unstableGetContentLockingParent","__unstableGetTemporarilyEditingAsBlocks","__unstableGetTemporarilyEditingFocusModeToRevert","privateSettings","__experimentalUpdateSettings","stripExperimentalSettings","cleanSettings","hideBlockInterface","showBlockInterface","privateRemoveBlocks","forceRemove","dispatch","registry","maybeArray","displayBlockRemovalPrompt","selectPreviousBlock","batch","ensureDefaultBlock","__unstableHasCustomAppender","insertDefaultBlock","clearBlockRemovalPrompt","setBlockRemovalRules","setOpenedBlockSettingsMenu","setStyleOverride","deleteStyleOverride","setLastFocus","stopEditingAsBlocks","blockEditorStore","__unstableMarkNextChangeAsNotPersistent","updateBlockAttributes","updateBlockListSettings","updateSettings","focusMode","__unstableSetTemporarilyEditingAsBlocks","startDragging","stopDragging","expandBlock","modifyContentLockBlock","selectBlock","setZoomLevel","resetZoomLevel","START_OF_SELECTED_AREA","retrieveSelectedAttribute","blockAttributes","RichTextData","findRichTextAttributeKey","castArray","resetBlocks","validateBlocksToTemplate","isBlocksValidToTemplate","doBlocksMatchTemplate","setTemplateValidity","resetSelection","receiveBlocks","updateBlock","hoverBlock","fallbackToParent","previousBlockClientId","firstParentClientId","selectNextBlock","nextBlockClientId","startMultiSelect","stopMultiSelect","multiSelect","__experimentalInitialPosition","blockCount","speak","sprintf","_n","clearSelectedBlock","toggleSelection","replaceBlocks","replaceBlock","createOnMove","moveBlocksDown","moveBlocksUp","moveBlocksToPosition","moveBlockToPosition","insertBlock","insertBlocks","hint","showInsertionPoint","__unstableOptions","hideInsertionPoint","synchronizeTemplate","updatedBlockList","synchronizeBlocksWithTemplate","__unstableDeleteSelection","targetSelection","targetBlock","targetBlockType","selectionA","selectionB","insert","cloneA","cloneBlock","cloneB","followingBlock","blocksWithTheSameType","updatedAttributes","newAttributeKey","convertedHtml","convertedValue","newOffset","newValue","newHtml","replacement","selectionChange","__unstableSplitSelection","focusRootClientId","blockAType","blockBType","attributeKeyA","attributeKeyB","bindings","createWarningNotice","noticesStore","insertAfterBlock","isUnmodifiedDefaultBlock","createEmpty","defaultBlockName","getDefaultBlockName","createBlock","head","tail","switched","output","clonedBlocks","firstBlock","headType","firstBlocks","isUnmodifiedBlock","lastBlock","tailType","lastBlocks","__unstableExpandSelection","mergeBlocks","firstBlockClientId","secondBlockClientId","getBlockSupport","blockWithSameType","removeBlock","rootAttributes","previousRootAttributes","attributeDefinition","canRestoreTextSelection","selectedBlock","removeBlocks","replaceInnerBlocks","toggleBlockMode","startTyping","stopTyping","startDraggingBlocks","stopDraggingBlocks","enterFormattedText","exitFormattedText","__unstableSaveReusableBlock","__unstableMarkLastChangeAsPersistent","__unstableMarkAutomaticChange","requestIdleCallback","setNavigationMode","__unstableSetEditorMode","firstSelectedClientId","sectionClientId","setBlockMovingClientId","duplicateBlocks","clientIdsArray","lastSelectedIndex","__experimentalCloneSanitizedBlock","insertBeforeBlock","blockIndex","directInsertBlock","copiedAttributes","attributesToCopy","toggleBlockHighlight","flashBlock","setHasControlledInnerBlocks","setBlockVisibility","registerInserterMediaCategory","labels","fetch","isExternalResource","setBlockEditingMode","unsetBlockEditingMode","storeConfig","actions","store","createReduxStore","persist","registeredStore","registerStore","useSettings","useSelect","useSetting","note","registerPrivateActions","privateActions","registerPrivateSelectors","privateSelectors","DEFAULT_MAXIMUM_VIEWPORT_WIDTH","DEFAULT_MINIMUM_VIEWPORT_WIDTH","DEFAULT_SCALE_FACTOR","DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN","DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX","DEFAULT_MINIMUM_FONT_SIZE_LIMIT","getComputedFluidTypographyValue","minimumFontSize","maximumFontSize","minimumViewportWidth","maximumViewportWidth","scaleFactor","minimumFontSizeLimit","getTypographyValueAndUnit","fontSizeParsed","minimumFontSizeLimitParsed","coerceTo","fontSizeValueInPx","minimumFontSizeFactor","log2","calculatedMinimumFontSize","roundToPrecision","minimumFontSizeParsed","fontSizeUnit","maximumFontSizeParsed","minimumFontSizeRem","maximumViewportWidthParsed","minimumViewportWidthParsed","linearDenominator","minViewportWidthOffsetValue","viewportWidthOffset","linearFactorScaled","isFinite","rootSizeValue","acceptableUnits","acceptableUnitsGroup","regexUnits","matches","returnValue","digits","base","pow","Number","formatFontWeight","fontWeight","FONT_STYLES","FONT_WEIGHTS","getFontStylesAndWeights","fontFamilyFaces","fontStyles","fontWeights","combinedStyleAndWeightOptions","isSystemFont","isVariableFont","face","startValue","endValue","fontWeightValue","weight","fontStyle","formatFontStyle","styleName","styleValue","weightName","weightValue","optionName","getTypographyFontSizeValue","preset","fluid","isFluidTypographyEnabled","typography","fluidTypographySettings","typographySettings","layoutSettings","layout","defaultMaxViewportWidth","wideSize","maxViewportWidth","getFluidTypographyOptionsFromSettings","minFontSize","minViewportWidth","fluidSettings","findNearestFontWeight","availableFontWeights","newFontWeightValue","nearestFontWeight","nearest","fw","abs","ROOT_BLOCK_SELECTOR","ROOT_CSS_PROPERTIES_SELECTOR","PRESET_METADATA","valueKey","cssVarInfix","classes","classSuffix","propertyName","valueFunc","STYLE_PATH_TO_CSS_VAR_INFIX","shadow","useToolsPanelDropdownMenuProps","useViewportMatch","popoverProps","placement","findInPresetsBy","features","presetPath","presetProperty","presetValueValue","orderedPresetsByOrigin","presetByOrigin","origins","presets","presetObject","getValueFromVariable","parsedVar","USER_VALUE_PREFIX","endsWith","THEME_VALUE_PREFIX","THEME_VALUE_SUFFIX","presetType","getValueFromPresetVariable","getValueFromCustomVariable","scopeSelector","scope","scopes","selectorsScoped","outer","inner","areGlobalStyleConfigsEqual","getResolvedValue","ruleValue","resolvedValue","resolvedRuleValue","getCSSValueFromRawStyle","getResolvedRefValue","themeFileURIs","uri","themeFileUri","href","getResolvedThemeFilePath","_links","GlobalStylesContext","setUserConfig","EMPTY_CONFIG","VALID_SETTINGS","useGlobalStylesReset","useCallback","useGlobalSetting","propertyPath","configs","appendedBlockPath","appendedPropertyPath","contextualPath","globalPath","sourceKey","useMemo","configToUse","setting","_getValueFromObjectPa2","currentConfig","useGlobalStyle","shouldDecodeEncode","mergedConfig","baseConfig","userConfig","appendedPath","finalPath","rawResult","variableStylePath","presetPropertyValue","getPresetVariableFromValue","useSettingsForBlockElement","parentSettings","supportedStyles","supports","getSupportedStyles","updatedSettings","customFontSize","defaultFontSizes","fontFamilies","background","button","heading","link","caption","customGradient","defaultDuotone","customDuotone","textColumns","sides","dimensions","textAlign","useColorsPerOrigin","customColors","palette","themeColors","defaultColors","shouldDisplayDefaultColors","defaultPalette","useGradientsPerOrigin","customGradients","themeGradients","defaultGradients","shouldDisplayDefaultGradients","f","cleanEmptyObject","cleanedNestedObjects","transformStyles","activeSupports","migrationPaths","results","isActive","referenceBlockAttributes","returnBlock","support","shouldSkipSerialization","blockNameOrType","featureSet","feature","skipSerialization","__experimentalSkipSerialization","pendingStyleOverrides","useStyleOverride","usePrivateStyleOverride","assets","__unstableType","useDispatch","useRegistry","fallbackId","useId","useEffect","override","queueMicrotask","isPending","currentId","useBlockSettings","parentLayout","backgroundImage","backgroundSize","customFontFamilies","defaultFontFamilies","themeFontFamilies","defaultFontSizesEnabled","customFontSizes","themeFontSizes","textDecoration","writingMode","textTransform","letterSpacing","margin","blockGap","defaultSpacingSizesEnabled","customSpacingSize","userSpacingSizes","defaultSpacingSizes","themeSpacingSizes","units","aspectRatio","minHeight","borderColor","borderRadius","borderStyle","borderWidth","customColorsEnabled","userDuotonePalette","themeDuotonePalette","defaultDuotonePalette","userGradientPalette","themeGradientPalette","defaultGradientPalette","areCustomGradientsEnabled","isBackgroundEnabled","isLinkEnabled","isTextEnabled","isHeadingEnabled","isButtonEnabled","duotone","spacingSizes","radius","BlockPropsPure","memo","useBlockProps","setAllWrapperProps","wrapperProps","setWrapperProps","nextAll","addFilter","apiVersion","createSlotFill","BlockControlsFill","group","controls","__experimentalShareWithChildBlocks","Fill","shareWithChildBlocks","context","groups","useBlockControlsFill","innerMarkup","_jsxs","_Fragment","ToolbarGroup","StyleProvider","fillProps","forwardedContext","ComponentsContext","privateApis","BlockControlsSlot","toolbarState","ToolbarContext","contextState","Slot","fills","useSlotFills","__unstableName","slot","bubblesVirtually","BlockControls","BlockFormatControls","LAYOUT_DEFINITIONS","className","baseStyles","float","spacingStyles","constrained","flex","displayMode","gap","grid","appendSelectors","subselector","getBlockGapCSS","layoutDefinitions","layoutType","blockGapValue","gapStyle","cssProperty","getAlignmentsInfo","contentSize","alignmentInfo","sizeRegex","none","wide","opacity","sidesLeft","RANGE_CONTROL_MAX_SIZE","ALL_SIDES","DEFAULT_VALUES","top","bottom","ICONS","sidesAll","axial","horizontal","sidesHorizontal","vertical","sidesVertical","sidesTop","sidesRight","sidesBottom","LABELS","mixed","VIEWS","isValueSpacingPreset","getCustomValueFromPreset","getSpacingPresetSlug","spacingSize","getPresetValueFromCustomValue","spacingMatch","getSpacingPresetCssVar","hasAxisSupport","hasHorizontalSupport","hasVerticalSupport","getGapCSSValue","blockGapBoxControlValue","isValueString","getGapBoxControlValueFromStyle","row","alignBottom","alignCenter","alignTop","alignStretch","spaceBetween","BLOCK_ALIGNMENTS_CONTROLS","center","stretch","DEFAULT_CONTROLS","isCollapsed","isToolbar","applyOrUnset","align","activeAlignment","defaultAlignmentControl","UIComponent","ToolbarDropdownMenu","extraProps","control","role","onClick","BlockVerticalAlignmentControl","BlockVerticalAlignmentUI","BlockVerticalAlignmentToolbar","icons","justifyLeft","justifyCenter","justifyRight","justifySpaceBetween","justifyStretch","allowedControls","handleClick","allControls","elem","JustifyContentControl","JustifyContentUI","JustifyToolbar","justifyContentMap","alignItemsMap","verticalAlignmentMap","flexWrapOptions","inspectorControls","layoutBlockSupport","allowOrientation","Flex","FlexItem","FlexLayoutJustifyContentControl","OrientationControl","FlexWrapControl","toolBarControls","allowSwitching","allowVerticalAlignment","FlexLayoutVerticalAlignmentControl","getLayoutStyle","hasBlockGapSupport","orientation","justifyContent","flexWrap","verticalAlignment","alignItems","getOrientation","getAlignments","defaultVerticalAlignment","onVerticalAlignmentChange","verticalAlignmentOptions","Button","__next40pxDefaultSize","isPressed","POPOVER_PROPS","onJustificationChange","justificationOptions","ToggleGroupControl","__nextHasNoMarginBottom","ToggleGroupControlOptionIcon","ToggleControl","checked","newVerticalAlignment","newJustification","arrowRight","arrowDown","blockGapStyleValue","isBlockBasedTheme","alignments","alignment","info","cloneElement","allowJustification","allowCustomContentAndWideSize","availableUnits","useCustomUnits","VStack","UnitControl","labelPosition","nextWidth","InputControlPrefixWrapper","variant","Icon","alignNone","stretchWide","DefaultLayoutJustifyContentControl","marginLeft","marginRight","getCSSRules","paddingRightValue","paddingLeftValue","RANGE_CONTROL_MAX_VALUES","px","vw","vh","em","rem","svw","lvw","dvw","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","allowSizingOnChildren","showColumnsControl","__experimentalEnableGridInteractivity","columnCount","showMinWidthControl","GridLayoutTypeControl","GridLayoutColumnsAndRowsControl","GridLayoutMinimumWidthControl","minimumColumnWidth","rowCount","maxValue","isManualPlacement","quantity","parseQuantityAndUnitFromRawValue","BaseControl","VisualLabel","as","isBlock","onUnitChange","newUnit","toFixed","hideLabelFromVision","RangeControl","withInputField","defaultColumnCount","NumberControl","newColumnCount","newRowCount","tempColumnCount","setTempColumnCount","useState","tempRowCount","setTempRowCount","tempMinimumColumnWidth","setTempMinimumColumnWidth","gridPlacement","helpText","help","ToggleGroupControlOption","layoutTypes","flow","getLayoutType","defaultLayout","Layout","LayoutProvider","useLayout","WIDE_CONTROLS","useAvailableAlignments","isNoneOnly","wideControlsEnabled","themeSupportsLayout","_settings$alignWide","__unstableIsBlockBasedTheme","positionLeft","positionCenter","positionRight","stretchFullWidth","enabledControls","onChangeAlignment","activeAlignmentControl","commonProps","controlName","toggleProps","onClose","MenuGroup","MenuItem","iconPosition","clsx","BlockAlignmentControl","BlockAlignmentUI","BlockAlignmentToolbar","useBlockEditingMode","globalBlockEditingMode","ALL_ALIGNMENTS","WIDE_ALIGNMENTS","getValidAlignments","blockAlign","hasWideBlockSupport","hasWideEnabled","validAlignments","setAttributes","nextAlign","blockDefaultAlign","addSaveProps","attributeKeys","hasSupport","_settings$attributes$","enum","InspectorControlsDefault","InspectorControlsAdvanced","InspectorControlsBindings","InspectorControlsBackground","InspectorControlsBorder","InspectorControlsColor","InspectorControlsFilter","InspectorControlsDimensions","InspectorControlsPosition","InspectorControlsTypography","InspectorControlsListView","InspectorControlsStyles","advanced","effects","InspectorControlsFill","__experimentalGroup","resetAllFilter","ToolsPanelInspectorControl","RegisterResetAll","registerResetAllFilter","deregisterResetAllFilter","ToolsPanelContext","BlockSupportToolsPanel","dropdownMenuProps","panelId","resetAll","resetFilters","newBlockAttributes","resetFilter","ToolsPanel","hasInnerWrapper","shouldRenderPlaceholderItems","__experimentalFirstVisibleItemClass","__experimentalLastVisibleItemClass","BlockSupportSlotContainer","toolsPanelContext","computedFillProps","_fillProps$forwardedC","InspectorControlsSlot","motionContextValue","MotionContext","InspectorControls","InspectorAdvancedControls","slotName","fillRule","clipRule","withFilters","MediaUpload","fallback","hasUploadPermissions","mediaUpload","LinkSettingsDrawer","settingsOpen","setSettingsOpen","prefersReducedMotion","useReducedMotion","MaybeAnimatePresence","Fragment","AnimatePresence","MaybeMotionDiv","motion","div","settingsDrawerId","useInstanceId","isRTL","chevronLeftSmall","chevronRightSmall","initial","animate","exit","variants","collapsed","transition","isFunction","maybeFunc","URLInput","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","createRef","inputRef","updateSuggestions","debounce","suggestionNodes","suggestionsRequest","suggestions","showSuggestions","suggestionsValue","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","prevProps","__experimentalShowInitialSuggestions","scrollIntoView","behavior","disableSuggestions","shouldShowInitialSuggestions","cancel","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","isURL","loading","request","debouncedSpeak","finally","keyCode","UP","target","preventDefault","setSelectionRange","DOWN","ENTER","onSubmit","suggestion","previousIndex","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","renderControl","renderSuggestions","isFullWidth","placeholder","__experimentalRenderControl","controlProps","inputProps","required","suffix","InputControl","Spinner","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","currentInputValue","Popover","focusOnMount","_createElement","compose","withSafeTimeout","withSpokenMessages","withInstanceId","withSelect","LinkControlSearchCreate","searchTerm","itemProps","buttonText","createInterpolateElement","ICONS_MAP","post","postList","page","post_tag","tag","attachment","SearchItemIcon","globe","isFrontPage","home","isBlogHome","verse","addLeadingSlash","trimmedURL","removeTrailingSlash","getVisualTypeName","LinkControlSearchItem","shouldShowType","safeDecodeURI","getPath","v","partialRight","fn","partialArgs","filterURLForDisplay","shortcut","TextHighlight","stripHTML","highlight","CREATE_TYPE","URL_TYPE","MAILTO_TYPE","INTERNAL_TYPE","LINK_ENTRY_TYPES","DEFAULT_LINK_SETTINGS","LinkControlSearchResults","withCreateSuggestion","createSuggestionButtonText","suggestionsQuery","resultsListClasses","isSingleDirectEntryResult","shouldShowCreateSuggestion","shouldShowSuggestionsTypes","searchResultsLabelId","labelText","searchResultsLabel","VisuallyHidden","isURLLike","val","getProtocol","protocolIsValid","isValidProtocol","mayBeTLD","maxLength","cleanedURL","hasPossibleTLD","isWWW","isInternal","isValidFragment","handleNoop","handleDirectEntry","prependHTTP","noopSearchHandler","noop","LinkControlSearchInput","currentLink","onCreateSuggestion","onSelect","fetchSuggestions","allowDirectEntry","showInitialSuggestions","withURLSuggestion","genericSearchHandler","fetchSearchSuggestions","pageOnFront","pageForPosts","directEntryHandler","handleEntitySearch","useSearchHandler","searchHandler","focusedSuggestion","setFocusedSuggestion","onSuggestionSelected","restLinkProps","onInputChange","hasSuggestion","ViewerSlot","ViewerFill","isFetching","richData","useReducer","fetchRichUrlData","__experimentalFetchRichUrlData","AbortController","controller","signal","urlData","aborted","abort","LinkPreview","onEditClick","hasRichPreviews","hasUnlinkControl","onRemove","showIconLabels","preferencesStore","showRichPreviews","useRichUrlData","hasRichData","displayURL","isEmptyURL","displayTitle","isUrlRedundant","alt","createNotice","useCopyToClipboard","isDismissible","ExternalLink","Truncate","numberOfLines","linkOff","copySmall","accessibleWhenDisabled","disabled","LinkControlSettings","handleSettingChange","theSettings","CheckboxControl","PREFERENCE_SCOPE","PREFERENCE_KEY","LinkControl","searchInputPlaceholder","onCancel","noDirectEntry","forceIsEditingLink","createSuggestion","inputValue","propInputValue","noURLSuggestion","hasTextControl","renderControlBottom","advancedSettingsPreference","_prefsStore$get","setPreference","isSettingsOpen","isMountingRef","useRef","wrapperNode","textInputRef","isEndingEditWithFocusRef","settingsKeys","internalControlValue","setInternalControlValue","setInternalURLInputValue","setInternalTextInputValue","createSetInternalSettingValueHandler","internalValue","setInternalValue","previousValue","setPreviousValue","nextValue","settingsUpdates","useInternalValue","valueHasChanges","isShallowEqualObjects","isEditingLink","setIsEditingLink","createPage","isCreatingPage","errorMessage","handleCreatePage","cancelableCreateSuggestion","setIsCreatingPage","setErrorMessage","suggestionTitle","hasCanceled_","isCanceled","makeCancelable","useCreatePage","focusable","hasLinkValue","stopEditing","contains","ownerDocument","activeElement","handleSubmit","currentUrlInputValue","currentInputIsEmpty","shownUnlinkControl","showActions","showTextControl","isEditing","showSettings","TextControl","updatedValue","nonSettingsChanges","InputControlSuffixWrapper","keyboardReturn","Notice","status","LinkControlSettingsDrawer","prefVal","LinkSettings","HStack","justify","stopPropagation","uniqueId","withDispatch","removeNotice","MediaReplaceFlow","mediaURL","mediaId","mediaIds","allowedTypes","accept","onError","onSelectURL","onReset","onToggleFeaturedImage","useFeaturedImage","onFilesUpload","multiple","addToGallery","handleUpload","canUpload","editMediaButtonRef","errorNoticeID","onUploadError","safeMessage","selectMedia","media","closeMenu","openOnArrowDown","click","gallery","allowedType","Dropdown","contentClassName","renderToggle","isOpen","onToggle","ToolbarButton","renderContent","NavigableMenu","MediaUploadCheck","mediaIcon","FormFileUpload","uploadFiles","files","filesList","onFileChange","openFileDialog","upload","postFeaturedImage","IMAGE_BACKGROUND_TYPE","BACKGROUND_POPOVER_PROPS","coordsToBackgroundPosition","backgroundPositionToCoords","InspectorImagePreviewItem","imgUrl","filename","onToggleCallback","ItemGroup","flexGrow","BackgroundControlsPanel","hasImageValue","imgLabel","getFilename","DropdownContentWrapper","paddingSize","LoadingSpinner","Placeholder","BackgroundImageControls","inheritedValue","onRemoveImage","onResetImage","displayInPanel","defaultValues","isUploading","setIsUploading","replaceContainerRef","createErrorNotice","onSelectMedia","isBlobURL","media_type","sizeValue","positionValue","backgroundPosition","hasBackgroundImageValue","closeAndFocus","toggleButton","tabbable","DropZone","onFilesDrop","image","BackgroundSizeControls","repeatValue","backgroundRepeat","imageValue","isUploadedImage","attachmentValue","backgroundAttachment","currentValueForToggle","repeatCheckedValue","updateBackgroundSize","nextRepeat","nextPosition","backgroundPositionValue","FocalPointPicker","toggleScrollWithPage","__unstableInputWidth","toggleIsRepeated","BackgroundImagePanel","globalStyles","_settings","resolvedInheritedValue","resolvedValues","backgroundValue","resetBackground","shouldShowBackgroundImageControls","isDropDownOpen","setIsDropDownOpen","useHasBackgroundPanel","BackgroundToolsPanel","headerLabel","Wrapper","defaultControls","showBackgroundImageControl","ToolsPanelItem","onDeselect","isShownByDefault","BackgroundImageControl","BACKGROUND_SUPPORT_KEY","BACKGROUND_BLOCK_DEFAULT_VALUES","hasBackgroundSupport","setBackgroundStyleDefaults","backgroundStyle","backgroundStylesWithDefaults","getBackgroundImageClasses","BackgroundInspectorControl","StylesBackgroundPanel","newStyle","backgroundStyles","ANCHOR_REGEX","ANCHOR_SCHEMA","attribute","anchor","isWeb","autoCapitalize","autoComplete","ARIA_LABEL_SCHEMA","ariaLabel","originClassName","getBlockDefaultClassName","grad","turn","rad","PI","u","g","h","floor","c","m","N","M","H","$","parsed","rgba","brightness","isDark","isLight","toHex","toRgb","toRgbString","toHsl","toHslString","toHsv","invert","w","saturate","desaturate","grayscale","lighten","darken","rotate","hue","alpha","isEqual","S","k","bisque","cadetblue","chartreuse","chocolate","coral","antiquewhite","aqua","azure","whitesmoke","papayawhip","plum","blanchedalmond","gold","goldenrod","gainsboro","cornsilk","cornflowerblue","burlywood","aquamarine","beige","crimson","darkblue","darkcyan","darkgoldenrod","darkkhaki","darkgray","darkgreen","darkgrey","peachpuff","darkmagenta","darkred","darkorchid","darkorange","darkslateblue","darkslategray","darkslategrey","deeppink","deepskyblue","wheat","firebrick","floralwhite","ghostwhite","darkviolet","dodgerblue","grey","honeydew","hotpink","blueviolet","forestgreen","lawngreen","indianred","indigo","fuchsia","brown","maroon","mediumblue","lightcoral","darkturquoise","lightcyan","ivory","lightyellow","lightsalmon","lightseagreen","linen","mediumaquamarine","lemonchiffon","lime","khaki","mediumseagreen","limegreen","mediumspringgreen","lightskyblue","lightblue","midnightblue","lightpink","mistyrose","moccasin","mintcream","lightslategray","lightslategrey","navajowhite","navy","mediumvioletred","powderblue","palegoldenrod","oldlace","paleturquoise","mediumturquoise","mediumorchid","rebeccapurple","lightsteelblue","mediumslateblue","thistle","tan","orchid","mediumpurple","purple","pink","skyblue","springgreen","palegreen","slateblue","lavenderblush","peru","palevioletred","violet","teal","slategray","slategrey","aliceblue","darkseagreen","darkolivegreen","greenyellow","seagreen","seashell","tomato","silver","sienna","lavender","lightgreen","orange","orangered","steelblue","royalblue","turquoise","yellowgreen","salmon","saddlebrown","sandybrown","rosybrown","darksalmon","lightgoldenrodyellow","snow","lightgrey","lightgray","dimgray","dimgrey","olivedrab","olive","toName","closest","luminance","contrast","isReadable","level","extend","namesPlugin","a11yPlugin","kebabCase","componentsPrivateApis","getColorObjectByAttributeValues","definedColor","customColor","colorObj","getColorObjectByColorValue","colorValue","getColorClassName","colorContextName","colorSlug","useMultipleOriginColorsAndGradients","enableCustomColors","enableCustomGradients","colorGradientSettings","hasColorsOrGradients","inputArray","getAllUnit","selectedUnits","flat","cornerUnits","getAllValue","parsedQuantitiesAndUnits","allValues","_value$","allUnits","hasMixedValues","allValue","hasDefinedValues","AllInputControl","setSelectedUnits","isMixed","allPlaceholder","disableUnits","isOnly","isNumeric","topLeft","topRight","bottomLeft","bottomRight","CORNERS","BoxInputControls","valuesProp","createHandleOnChange","corner","parsedQuantity","parsedUnit","computedUnit","Tooltip","side","newUnits","LinkedButton","isLinked","iconSize","MIN_BORDER_RADIUS_VALUE","MAX_BORDER_RADIUS_VALUES","BorderRadiusControl","setIsLinked","unitConfig","InputControls","toggleLinked","ShadowPopoverContainer","onShadowChange","shadows","useShadowPresets","Heading","ShadowPresets","activeShadow","Composite","ShadowIndicator","Item","unset","boxShadow","showTooltip","check","ShadowPopover","shadowIcon","_settings$shadow$pres","defaultPresetsEnabled","defaultPresets","defaultShadows","themeShadows","customShadows","unsetShadow","shadowPresets","useHasBorderPanel","useHasBorderPanelControls","hasBorderColor","useHasBorderColorControl","hasBorderRadius","useHasBorderRadiusControl","hasBorderStyle","useHasBorderStyleControl","hasBorderWidth","useHasBorderWidthControl","hasShadow","useHasShadowControl","BorderToolsPanel","BorderPanel","_ref2","_shadowPresets$custom","decodeValue","encodeColorValue","colorObject","flatMap","originColors","hasSplitBorders","borderValue","setBorder","newBorder","showBorderColor","showBorderStyle","showBorderWidth","showBorderRadius","borderRadiusValues","setBorderRadius","newBorderRadius","borderValues","hasShadowControl","mergedShadowPresets","setShadow","shadowName","showBorderByDefault","hasBorderControl","useBorderPanelLabel","isDefinedBorder","resetBorder","BorderBoxControl","enableAlpha","enableStyle","updatedBorder","popoverOffset","popoverPlacement","__experimentalIsRenderedInSidebar","resetShadow","isBordered","isSeparated","BORDER_SUPPORT_KEY","SHADOW_SUPPORT_KEY","getColorByProperty","property","matchedColor","getMultiOriginColor","namedColor","getColorSlugFromVariable","styleToAttributes","borderColorValue","borderColorSlug","updatedStyle","attributesToStyle","BordersInspectorControl","attributesResetAllFilter","existingStyle","isEnabled","StylesBorderPanel","hasBorderSupport","borderClasses","getBorderClasses","newClassName","borderColorClass","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","__experimentalGetGradientClass","gradientSlug","getGradientValueBySlug","__experimentalGetGradientObjectByGradientValue","getGradientSlugByValue","__experimentalUseGradient","gradientAttribute","customGradientAttribute","allGradients","setGradient","newGradientValue","gradientClass","gradientValue","Tabs","colorsAndGradientKeys","TAB_IDS","ColorGradientControlInner","onColorChange","onGradientChange","clearable","showTitle","headingLevel","canChooseAColor","canChooseAGradient","tabPanels","ColorPalette","newColor","GradientPicker","newGradient","renderPanelType","defaultTabId","TabList","Tab","tabId","TabPanel","ColorGradientControlSelect","useHasColorPanel","hasTextPanel","useHasTextPanel","hasBackgroundPanel","useHasBackgroundColorPanel","hasLinkPanel","useHasLinkPanel","hasHeadingPanel","useHasHeadingPanel","hasButtonPanel","useHasButtonPanel","hasCaptionPanel","useHasCaptionPanel","ColorToolsPanel","LabeledColorIndicators","indicators","ZStack","isLayered","indicator","expanded","ColorIndicator","ColorPanelTab","isGradient","userValue","setValue","colorGradientControlSettings","ColorGradientControl","ColorPanelDropdown","resetValue","tabs","_tabs$","currentTab","tab","firstTabKey","firstTab","tabKey","restTabProps","ColorPanel","areCustomSolidsEnabled","hasSolidColors","hasGradientColors","encodeGradientValue","gradientObject","originGradients","showBackgroundPanel","backgroundColor","userBackgroundColor","userGradient","showLinkPanel","linkColor","userLinkColor","hoverLinkColor","userHoverLinkColor","showTextPanel","textColor","userTextColor","setTextColor","changedObject","showPanel","hasTextColor","resetTextColor","hasBackground","hasLink","resetLink","elementBackgroundColor","elementGradient","elementTextColor","elementBackgroundUserColor","elementGradientUserColor","elementTextUserColor","supportsBackground","hasElement","resetElement","newTextColor","newBackgroundColor","restItem","fallbackBackgroundColor","fallbackTextColor","fallbackLinkColor","isLargeText","enableAlphaChecker","currentBackgroundColor","currentTextColor","currentLinkColor","textColors","colordBackgroundColor","colord","backgroundColorHasTransparency","backgroundColorBrightness","isReadableOptions","speakMessage","colordTextColor","isColordTextReadable","textHasTransparency","spokenMessage","BlockRefs","refsMap","observableMap","BlockRefsProvider","useBlockRefProvider","useRefEffect","assignRef","useBlockElementRef","useLayoutEffect","unsubscribe","subscribe","useBlockElement","blockElement","setBlockElement","defaultView","BlockColorContrastChecker","detectedBackgroundColor","setDetectedBackgroundColor","detectedColor","setDetectedColor","detectedLinkColor","setDetectedLinkColor","blockEl","firstLinkElement","querySelector","innerText","backgroundColorNode","nodeType","ELEMENT_NODE","ContrastChecker","COLOR_SUPPORT_KEY","hasColorSupport","colorSupport","hasLinkColorSupport","hasGradientSupport","hasBackgroundColorSupport","hasTextColorSupport","hasGradient","shouldSerialize","textClass","backgroundClass","serializeHasBackground","textColorValue","textColorSlug","backgroundColorValue","backgroundColorSlug","ColorInspectorControl","ColorEdit","enableContrastChecking","StylesColorPanel","enableContrastChecker","userPalette","themePalette","extraStyles","saveProps","hasBackgroundValue","MIGRATION_PATHS","FontFamilyControl","blockLevelFontFamilies","fontFamily","SelectControl","destinationBlockType","getFontAppearanceLabel","hasFontStyles","hasFontWeights","FontAppearanceControl","otherProps","hasStylesOrWeights","defaultOption","selectOptions","combineOptions","combinedOptions","styleOptions","weightOptions","currentSelection","option","CustomSelectControl","describedBy","selectedItem","LineHeightControl","isDefined","isLineHeightDefined","adjustNextValue","wasTypedOrPasted","BASE_DEFAULT_VALUE","__unstableStateReducer","stateReducer","payload","nativeEvent","inputType","handleOnChange","spinFactor","spinControls","LetterSpacingControl","TEXT_ALIGNMENT_OPTIONS","alignLeft","alignRight","alignJustify","DEFAULT_OPTIONS","TextAlignmentControl","validOptions","isDeselectable","TEXT_TRANSFORMS","formatUppercase","formatLowercase","formatCapitalize","TextTransformControl","TEXT_DECORATIONS","formatUnderline","formatStrikethrough","TextDecorationControl","WRITING_MODES","textHorizontal","textVertical","WritingModeControl","MIN_TEXT_COLUMNS","MAX_TEXT_COLUMNS","useHasTypographyPanel","hasFontFamily","useHasFontFamilyControl","hasLineHeight","useHasLineHeightControl","hasFontAppearance","useHasAppearanceControl","hasLetterSpacing","useHasLetterSpacingControl","hasTextAlign","useHasTextAlignmentControl","hasTextTransform","useHasTextTransformControl","hasTextDecoration","useHasTextDecorationControl","hasWritingMode","useHasWritingModeControl","hasTextColumns","useHasTextColumnsControl","hasFontSize","useHasFontSizeControl","TypographyToolsPanel","fontAppearance","TypographyPanel","hasFontFamilyEnabled","selectedFontFamily","_fontFamilies$find$fo","fontFamiliesFromSettings","_fontFamiliesFromSett","family","fontFace","getMergedFontFamiliesAndFontFamilyFaces","setFontFamily","hasFontSizeEnabled","mergedFontSizes","_fontSizes$custom","_fontSizes$theme","_fontSizes$default","getMergedFontSizes","setFontSize","hasAppearanceControl","appearanceControlLabel","useAppearanceControlLabel","nearestFontStyle","hasFontStyle","fs","hasFontWeight","availableFontStyles","newFontStyleValue","findNearestStyleAndWeight","setFontAppearance","newFontStyle","newFontWeight","resetFontAppearance","hasLineHeightEnabled","setLineHeight","hasLetterSpacingControl","setLetterSpacing","hasTextColumnsControl","setTextColumns","hasTextTransformControl","setTextTransform","hasTextDecorationControl","setTextDecoration","hasWritingModeControl","setWritingMode","hasTextAlignmentControl","setTextAlign","resetFontFamily","resetFontSize","FontSizePicker","withReset","withSlider","resetLineHeight","resetLetterSpacing","resetTextColumns","resetTextDecoration","resetWritingMode","resetTextTransform","showNone","resetTextAlign","FONT_FAMILY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEY","TokenList","getFontSize","fontSizeAttribute","customFontSizeAttribute","fontSizeObject","getFontSizeObjectByValue","getFontSizeClass","fontSizeSlug","FONT_SIZE_SUPPORT_KEY","DEFAULT_ALIGNMENT_CONTROLS","alignmentControls","AlignmentControl","AlignmentUI","AlignmentToolbar","TEXT_ALIGN_SUPPORT_KEY","VALID_TEXT_ALIGNMENTS","NO_TEXT_ALIGNMENTS","getValidTextAlignments","blockTextAlign","hasTextAlignControl","validTextAlignments","textAlignmentControls","newTextAlignValue","omit","TYPOGRAPHY_SUPPORT_KEYS","fontSizeValue","fontFamilyValue","fontFamilySlug","TypographyInspectorControl","StylesTypographyPanel","CUSTOM_VALUE_SETTINGS","steps","rm","SpacingInputControl","minimumCustomValue","onMouseOut","onMouseOver","showSideInLabel","_CUSTOM_VALUE_SETTING","_CUSTOM_VALUE_SETTING2","selectListSizes","showRangeControl","disableCustomSpacingSizes","editorSettings","showCustomValueControl","setShowCustomValueControl","minValue","setMinValue","usePrevious","presetValue","sliderValue","getSliderValueFromPreset","selectedUnit","customRangeValue","getNewPresetValue","newSize","controlType","marks","_newValue","sideLabel","typeLabel","onBlur","getNewCustomValue","onDragStart","onDrag","onDragEnd","onMouseDown","offsetX","renderTooltipContent","groupedSides","AxialInputControls","nextValues","filteredSides","axisValue","SeparatedInputControls","SingleInputControl","currentSide","compare","Intl","Collator","numeric","useSpacingSizes","customSpacingSizes","customSizes","themeSizes","defaultSizes","sizes","SpacingSizesControl","labelProp","inputValues","hasOneSide","hasOnlyAxialSides","view","setView","sideValues","hasMatchingAxialValues","hasNoValuesAndBalancedSides","counts","hasBalancedSidesSupport","getInitialView","inputControlProps","newValues","RANGE_CONTROL_CUSTOM_SETTINGS","HeightControl","_RANGE_CONTROL_CUSTOM","_RANGE_CONTROL_CUSTOM2","currentUnit","Spacer","marginX","marginBottom","useGetNumberOfBlocksBeforeCell","gridClientId","numColumns","getNumberOfBlocksBeforeCell","targetIndex","_getBlockAttributes$s","columnStart","rowStart","selfStretch","ChildLayoutControl","childLayout","parentType","defaultParentType","parentLayoutType","FlexControls","GridControls","flexSize","flexResetLabel","hasFlexValue","resetFlex","childLayoutOrientation","columnSpan","rowSpan","hasSpanValue","resetGridSpans","newColumnSpan","newRowSpan","hasStartValue","resetGridStarts","newColumnStart","newRowStart","AspectRatioTool","displayValue","defaultRatios","themeRatios","showDefaultRatios","themeOptions","ratio","defaultOptions","aspectRatioOptions","AXIAL_SIDES","useHasDimensionsPanel","hasContentSize","useHasContentSize","hasWideSize","useHasWideSize","hasPadding","useHasPadding","hasMargin","useHasMargin","hasGap","useHasGap","hasMinHeight","useHasMinHeight","hasAspectRatio","useHasAspectRatio","hasChildLayout","useHasChildLayout","_settings$parentLayou","defaultParentLayoutType","filterValuesBySides","filteredValues","splitStyleValue","DimensionsToolsPanel","DimensionsPanel","onVisualize","includeLayoutControls","_defaultControls$cont","_defaultControls$wide","_defaultControls$padd","_defaultControls$marg","_defaultControls$bloc","_defaultControls$chil","_defaultControls$minH","_defaultControls$aspe","showSpacingPresetsControl","useHasSpacingPresets","minimumMargin","minMarginValue","setMinMarginValue","showContentSizeControl","contentSizeValue","setContentSizeValue","showWideSizeControl","wideSizeValue","setWideSizeValue","showPaddingControl","paddingValues","paddingSides","isAxialPadding","setPaddingValues","newPaddingValues","onMouseOverPadding","showMarginControl","marginValues","marginSides","isAxialMargin","setMarginValues","newMarginValues","onMouseOverMargin","showGapControl","gapValue","gapValues","splitGapValue","gapSides","isAxialGap","setGapValue","newGapValue","setGapValues","nextBoxGapValue","showMinHeightControl","minHeightValue","setMinHeightValue","tempValue","showAspectRatioControl","aspectRatioValue","showChildLayoutControl","onMouseLeaveControls","hasUserSetContentSizeValue","resetContentSizeValue","nextContentSize","hasUserSetWideSizeValue","resetWideSizeValue","nextWideSize","hasPaddingValue","resetPaddingValue","BoxControl","allowReset","splitOnAxis","hasMarginValue","resetMarginValue","hasGapValue","resetGapValue","newChildLayout","hasMinHeightValue","resetMinHeightValue","hasAspectRatioValue","scrollableRef","onWheel","scrollBy","passive","BLOCK_SELECTOR","APPENDER_SELECTOR","BLOCK_APPENDER_CLASS","isInSameBlock","isInsideRootBlock","getBlockClientId","blockNode","rectUnion","rect1","rect2","DOMRectReadOnly","isElementVisible","viewport","classList","bounds","getBoundingClientRect","checkVisibility","opacityProperty","contentVisibilityAuto","visibilityProperty","display","visibility","getVisibleElementBounds","currentElement","innerWidth","MAX_POPOVER_RECOMPUTE_COUNTER","MAX_SAFE_INTEGER","PrivateBlockPopover","bottomClientId","__unstablePopoverSlot","__unstableContentRef","selectedElement","lastSelectedElement","mergedRefs","useMergeRefs","usePopoverScroll","popoverDimensionsRecomputeCounter","forceRecomputePopoverDimensions","observer","MutationObserver","observe","disconnect","popoverAnchor","contextElement","__unstableSlotName","flip","PublicBlockPopover","CoverContainer","additionalStyles","setWidth","setHeight","ResizeObserver","box","_bottomClientId","SpacingVisualizer","computeStyle","forceShow","updateStyle","requestAnimationFrame","previousValueRef","setIsActive","isShallowEqual","timeout","clearTimeout","BlockPopoverCover","getComputedCSS","getPropertyValue","MarginVisualizer","borderRightWidth","borderLeftWidth","PaddingVisualizer","DIMENSIONS_SUPPORT_KEY","SPACING_SUPPORT_KEY","DimensionsInspectorControl","visualizedProperty","setVisualizedProperty","setProperty","useVisualizer","StylesDimensionsPanel","hasDimensionsSupport","inlineStyleOverrides","useCustomSides","styleSupportKeys","hasStyleSupport","getInlineStyles","skipSerializationPathsEdit","skipSerializationPathsSave","skipSerializationPathsSaveChecks","renamedFeatures","omitStyle","preserveReference","firstSubpath","restPath","skipPaths","featureName","__unstableParentLayout","passedProps","blockElementsContainerIdentifier","baseElementSelector","blockElementStyles","elementCSSRules","elementTypes","pseudo","elementStyles","ELEMENTS","compileCSS","pseudoSelector","DuotoneControl","idProp","colorPalette","duotonePalette","disableCustomDuotone","toolbarIcon","DuotoneSwatch","actionLabel","descriptionId","headerTitle","DuotonePicker","getDuotoneUnsetStylesheet","getDuotoneStylesheet","getDuotoneFilter","rgbColor","getValuesFromColors","getBlockCSSSelector","hasSelectors","rootSelector","__experimentalSelector","pathArray","fallbackSelector","featureSelector","subfeatureSelector","useMultiOriginColorPresets","presetSetting","defaultSetting","disableDefault","userPresets","themePresets","useHasFiltersPanel","useHasDuotoneControl","FiltersToolsPanel","LabeledColorIndicator","FiltersPanel","hasDuotoneEnabled","setDuotone","duotonePreset","settedValue","hasDuotone","resetDuotone","isSafari","useMultiOriginPresets","enableDefault","getColorsFromDuotonePreset","duotoneStyle","enableCustomDuotone","duotonePresetOrColors","StylesFiltersPanel","newDuotone","maybePreset","getDuotonePresetFromColors","experimentalDuotone","filterClass","shouldRender","filterId","duotoneSelector","duotoneAttr","isCustom","isPreset","selectorPart","isValidFilter","useDuotoneStyles","useBlockDisplayInformation","isSynced","isReusableBlock","isTemplatePart","getBlockLabel","positionLabel","positionType","getPositionTypeLabel","blockTypeInfo","POSITION_SUPPORT_KEY","DEFAULT_OPTION","STICKY_OPTION","FIXED_OPTION","POSITION_SIDES","VALID_POSITION_TYPES","hasStickyOrFixedPositionValue","useIsPositionDisabled","allowFixed","allowSticky","PositionPanelPure","hasFixedPositionSupport","sticky","hasStickyPositionSupport","blockInformation","stickyHelpText","availableOptions","selectedOption","web","onChangeType","native","hasPositionBlockSupport","isPositionDisabled","allowPositionStyles","getPositionCSS","ELEMENT_CLASS_NAMES","BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS","__experimentalBorder","flattenTree","newKey","newLeaf","newPrefix","getFeatureDeclarations","declarations","isShorthand","subfeature","newDeclarations","getStylesDeclarations","blockStyles","useRootPaddingAlign","disableRootPadding","isRoot","STYLE_PROPERTY","properties","useEngine","rootOnly","pathToValue","entry","getLayoutStyles","hasFallbackGapSupport","fallbackGapValue","ruleset","spacingStyle","cssValue","combinedSelector","validDisplayModes","baseStyle","STYLE_KEYS","pickStyleKeys","treeToPickFrom","clonedEntries","getNodesWithSettings","blockSelectors","_tree$settings$blocks","pickPresets","blockPresets","blockCustom","toCustomProperties","mergedSettings","getPresetsDeclarations","customProps","toStyles","disableLayoutStyles","layoutStyles","marginReset","rootPadding","variationStyles","nodesWithStyles","getNodesWithStyles","_tree$styles$blocks","skipSelectorWrapper","_node$elements","variationName","_variation$elements","_variation$blocks","variationSelector","styleVariationSelectors","variationBlockName","variationBlockStyles","_variationBlockStyles","variationBlockSelector","variationDuotoneSelector","variationFeatureSelectors","featureSelectors","scopeFeatureSelectors","variationBlockStyleNodes","hasLayoutSupport","variationBlockElement","variationBlockElementStyles","elementName","sel","elementSelector","nodesWithSettings","useRootPaddingAwareAlignments","hasBodyStyles","featureDeclarations","cssSelector","duotoneStyles","duotoneDeclarations","styleDeclarations","processCSSNesting","styleVariationName","styleVariationSelector","styleVariations","baseSelector","combinedSelectors","concatFeatureVariationSelectorString","styleVariationDeclarations","pseudoSelectorStyles","pseudoKey","pseudoStyle","pseudoDeclarations","pseudoRule","blockSelector","classSelectorToUse","selectorToUse","getPresetsClasses","getBlockSelectors","variationInstanceId","duotoneSupport","__experimentalLayout","__experimentalDefault","blockStyleVariations","variationSuffix","variationClass","ancestorRegex","addVariationClass","_match","group1","group2","part","getBlockStyleVariationSelector","getSelectorsConfig","featureKey","processedCSS","splittedPart","nestedSelector","pseudoPart","withoutPseudoElement","toAppend","appendToSelector","useGlobalStylesOutputWithConfig","_updatedConfig$styles","updatedConfig","customProperties","svgs","at","getPresetsSvgFilters","toSvgFilters","isGlobalStyles","useGlobalStylesOutput","VARIATION_PREFIX","getVariationMatches","OverrideStyles","isMatch","registeredStyles","getVariationNameFromClass","globalSettings","_mergedConfig$setting","_mergedConfig$styles","_mergedConfig$setting2","replaceRefs","refValue","getVariationStylesWithRefValues","useBlockStyleVariation","variationConfig","layoutBlockSupportKey","hasLayoutBlockSupport","useLayoutClasses","defaultBlockLayout","usedLayout","inherit","layoutClassnames","baseClassName","splitBlockName","compoundClassName","blockSupportAndThemeSettings","allowEditing","allowInheriting","blockSupportAndLayout","blockLayoutType","showInheritToggle","constrainedType","displayControlsForLegacyLayouts","hasContentSizeOrLegacySettings","onChangeLayout","newLayout","PanelBody","LayoutTypeSwitcher","newType","ButtonGroup","BlockWithLayoutStyles","BlockListBlock","blockGapSupport","layoutClasses","selectorPrefix","fullLayoutType","layoutClassNames","__unstableLayoutClassNames","withLayoutStyles","createHigherOrderComponent","blockSupportsLayout","GridRect","columnEnd","rowEnd","containsRect","rect","intersectsRect","getGridTracks","tracks","previousTrack","getClosestTrack","edge","track","getGridInfo","gridElement","gridTemplateColumns","gridTemplateRows","numRows","numItems","currentColor","globalTips","kbd","randomIndex","Tip","showColors","blockDefault","renderedIcon","parentNavBlockClientId","minWidth","chevronRight","chevronLeft","BlockIcon","Text","WrappedComponent","useSubRegistry","subRegistries","subRegistry","createRegistry","blockEditorStoreName","getSubRegistry","RegistryProvider","useBlockSync","controlledBlocks","controlledSelection","onInput","isControlled","pendingChangesRef","incoming","outgoing","subscribedRef","setControlledBlocks","storeBlocks","onInputRef","onChangeRef","isMountedRef","isPersistent","previousAreBlocksDifferent","newIsPersistent","newBlocks","areBlocksDifferent","KeyboardShortcuts","Register","registerShortcut","keyboardShortcutsStore","keyCombination","character","aliases","ExperimentalBlockEditorProvider","withRegistryProvider","__internalIsInitialized","SlotFillProvider","passthrough","BlockContextProvider","DEFAULT_BLOCK_CONTEXT","EditWithFilters","save","blockContext","BlockContext","usesContext","generatedClassName","secondaryActions","Children","DropdownMenu","moreVertical","noIcons","MultipleUsageWarning","originalBlockClientId","onReplace","PrivateBlockContext","BlockEdit","mayDisplayControls","mayDisplayParentControls","isPreviewMode","layoutSupport","BlockEditContextProvider","Edit","BlockView","rawContent","renderedContent","actionText","RawHTML","safeHTML","onKeep","onConvert","convertor","convertButtonText","converted","convertedBlock","getSaveContent","difference","originalContent","newContent","diffChars","blockToBlocks","rawHandler","HTML","BlockInvalidWarning","canInsertHTMLBlock","canInsertClassicBlock","setCompare","onCompareClose","convert","toClassic","classicBlock","toHTML","htmlBlock","toBlocks","toRecoveredBlock","recoveredBlock","Modal","onRequestClose","BlockCompare","BlockCrashBoundary","hasError","componentDidCatch","setHtml","getBlockContent","validateBlock","updateQueue","makeQueue","raf","schedule","writeQueue","write","onStartQueue","onStart","onFrameQueue","onFrame","onFinishQueue","onFinish","timeouts","handler","ms","pendingCount","findTimeout","batchedUpdates","throttle","lastArgs","queuedFn","throttled","nativeRaf","impl","performance","frameLoop","advance","ts","queue","loop","prevTs","eachSafely","flush","arg","fun","num","und","ctx","clear","flushCalls","isSSR","createStringInterpolator$1","colors$1","skipAnimation","willAdvance","globals","freeze","createStringInterpolator","startQueue","currentFrame","prevFrame","priority","idle","animation","flushStartQueue","startSafely","startUnsafely","dt","nextFrame","NUMBER","PERCENTAGE","rgb","hsl","hsla","hex3","hex4","hex6","hex8","hue2rgb","q","hslToRgb","parse255","int","parse360","parse1","parsePercentage","colorToRgba","int32Color","normalizeColor","createInterpolator","extrapolate","outputRange","inputRange","extrapolateLeft","extrapolateRight","easing","findRange","inputMin","inputMax","outputMin","outputMax","Infinity","interpolate","$get","for","$observers","hasFluidValue","getFluidValue","getFluidObservers","callFluidObservers","observers","eventObserved","callFluidObserver","FluidValue","setFluidGetter","setHidden","observerAdded","removeFluidObserver","observerRemoved","writable","configurable","numberRegex","colorRegex","unitRegex","rgbaRegex","cssVariableRegex","variableToRgba","parseCSSVariable","namedColorRegex","rgbaRound","p1","p2","p3","p4","keyframes","outputRanges","interpolators","_output$find","missingUnit","once","called","TypeError","warnInterpolate","isAnimatedString","emptyDeps","$node","getAnimated","owner","setAnimated","defineHidden","getPayload","Animated","AnimatedValue","elapsedTime","lastPosition","lastVelocity","v0","durationProgress","getValue","AnimatedString","_string","_toString","goal","TreeContext","dependencies","AnimatedObject","animated","_makePayload","_addToPayload","AnimatedArray","makeAnimated","getAnimatedType","withAnimated","host","hasInstance","isReactComponent","givenProps","givenRef","instanceRef","updateRef","deps","createAnimatedStyle","getAnimatedState","forceUpdate","isMounted","useIsMounted","instance","applyAnimatedValues","PropsObserver","observerRef","effect","dep","usedProps","getComponentProps","cacheKey","getDisplayName","displayName","callProp","matchProp","resolveProp","getDefaultProp","noopTransform","getDefaultProps","DEFAULT_PROPS","RESERVED_PROPS","pause","immediate","delay","onProps","onPause","onResume","onRest","onResolve","trail","expires","enter","leave","onDestroyed","callId","inferTo","forward","getForwardProps","out","computeGoal","isAsyncTo","c1","c2","c3","c4","c5","bounceOut","n1","d1","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","sin","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","easeInElastic","easeOutElastic","easeInOutElastic","easeInBounce","easeOutBounce","easeInOutBounce","tension","friction","mass","damping","clamp","AnimationConfig","frequency","velocity","restVelocity","precision","progress","bounce","decay","sanitizeConfig","isTensionConfig","emptyArray","Animation","changed","toValues","fromValues","scheduleProps","_props$cancel","paused","resumeQueue","resume","delayed","pauseQueue","cancelId","getCombinedResult","cancelled","getCancelledResult","getNoopResult","getFinishedResult","finished","asyncTo","prevTo","prevPromise","asyncId","preventBail","bail","bailPromise","bailIfEnded","bailSignal","bailResult","arg1","arg2","BailSignal","skipAnimationSignal","SkipAniamtionSignal","stopAsync","animating","stop","isFrameValue","FrameValue","nextId$1","_priority","_onPriorityChange","_attach","_detach","_onChange","$P","hasAnimated","isAnimating","isPaused","setActiveBit","active","IS_ANIMATING","setPausedBit","SpringValue","_state","_pendingCalls","_lastCallId","_lastToId","_memoizedDuration","isDelayed","anim","elapsed","bounceFactor","canBounce","isGrowing","isMoving","isBouncing","numSteps","ceil","currVal","finalVal","_stop","_focus","_set","_update","finish","_onStart","_start","_prepareNode","isLoop","mergeActiveFn","sendEvent","isFrozen","checkFinished","_resume","_merge","nextProps","createLoopUpdate","hasToProp","hasFromProp","prevFrom","hasFromChanged","hasToChanged","hasAsyncTo","newConfig","defaultConfig","mergeConfig","isAnimatable","goalType","started","hasValueChanged","ACTIVE_EVENTS","oldNode","loopRet","createUpdate","findDefined","_target$animation$typ","_target$animation","_target$defaultProps$","_target$defaultProps","BATCHED_EVENTS","nextId","Controller","springs","_flush","_initialProps","_lastAsyncId","_active","_changed","_started","_item","_events","_onFrame","spring","prepareKeys","ctrl","flushUpdate","flushUpdateQueue","promises","prepareSprings","createSpring","_excluded$3","SpringContext","excluded","sourceKeys","_objectWithoutPropertiesLoose","inherited","getResult","committed","prevCache","useCache","areInputsEqual","useMemoOne","_context","Consumer","TransitionPhase","Interpolation","calc","_get","_dt","checkIdle","becomeIdle","highest","isIdle","isCustomPropRE","dangerousStyleValue","isUnitlessNumber","attributeCache","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columns","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","orphans","tabSize","widows","zIndex","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","prefixes","prefixKey","domTransforms","pxTransforms","degTransforms","addUnit","isValueIdentity","AnimatedStyle","z","xyz","deg","FluidTransform","unstable_batchedUpdates","transparent","burntsienna","_applyAnimatedValues","_createAnimatedStyle","_getComponentProps","hostConfig","createHost","isFilterElement","scrollLeft","names","hasAttribute","textContent","getAbsolutePosition","offsetTop","offsetLeft","triggerAnimationOnChange","prevRect","scrollContainer","getScrollContainer","adjustScrolling","preserveScrollPosition","matchMedia","finishedMoving","transformOrigin","destination","useFocusFirstElement","textInputs","isTextField","isReverse","getAttribute","focusElement","findNext","isFormElement","placeCaretAtHorizontalEdge","useIsHovered","listener","defaultPrevented","useFocusHandler","parentElement","isContentEditable","useEventHandlers","BACKSPACE","DELETE","useNavModeExit","useZoomOutModeExit","onDoubleClick","__experimentalSetIsInserterOpened","useIntersectionObserver","IntersectionObserver","unobserve","useScrollIntoView","isIntersecting","useFlashEditableBlocks","BLOCK_BINDINGS_ALLOWED_BLOCKS","DEFAULT_ATTRIBUTE","canBindBlock","canBindAttribute","attributeName","withBlockBindingSupport","sources","getAllBlockBindingsSources","blockBindings","supportedAttributes","bindingsWithDefaults","bindingSource","replacePatternOverrideDefaultBindings","updatedContext","boundAttributes","blockBindingsBySource","binding","sourceName","sourceArgs","getValues","attr","hasParentPattern","hasPatternOverridesDefaultBinding","_setAttributes","nextAttributes","keptAttributes","setValues","__unstableIsHtml","isAligned","blockApiVersion","blockTitle","isSubtreeDisabled","hasOverlay","isPartiallySelected","isReusable","hasChildSelected","isBlockMovingMode","canInsertMovingBlock","isEditingDisabled","hasEditableOutline","isTemporarilyEditingAsBlocks","defaultClassName","blockLabel","htmlSuffix","useMovingAnimation","useDisabled","blockEditContext","bindingsStyle","hasNegativeMargin","marginTop","inert","Block","isHtml","__unstableBlockSource","isLocked","onInsertBlocksAfter","onMerge","_wrapperProps","blockEdit","insertBlocksAfter","getEditWrapperProps","propsA","propsB","newProps","mergeWrapperProps","isSticky","BlockHtml","saveContent","serializeRawBlock","dataAlign","restWrapperProps","updatedWrapperProps","BlockCrashWarning","getBlockProps","applyWithDispatch","ownProps","onInsertBlocks","switchToDefaultOrRemove","moveFirstItemUp","changeSelection","targetRootClientId","nextRootClientId","previousRootClientId","replacementBlocks","selectionEnabled","selectedProps","blockWithoutAttributes","_hasBlockSupport","hasLightBlockWrapper","previewContext","_isSelected","canMove","isAncestorOfSelectedBlock","movingClientId","blocksWithSameName","isInvalid","privateContext","ZWNBSP","DefaultBlockAppender","showPrompt","isManualGrid","isEmpty","bodyPlaceholder","decodeEntities","onAppend","Inserter","isAppender","__experimentalIsQuick","DefaultAppender","ButtonBlockAppender","BlockListAppender","CustomAppender","tagName","TagName","isDragOver","contentEditable","previousClientId","nextClientId","popoverRecomputeCounter","forcePopoverRecompute","isVisible","_rootClientId","previousElement","nextElement","isVertical","previousRect","nextRect","targetRect","DOMRect","popoverScrollRef","animateVariants","hide","scaleY","show","reducedMotion","InsertionPointOpenRef","InbetweenInsertionPointPopover","openRef","isInserterShown","isDistractionFree","_isNavigationMode","_previousClientId","_nextClientId","disableMotion","lineVariants","scale","rest","hover","inserterVariants","BlockPopoverInbetween","whileHover","whileTap","onHoverEnd","onSelectOrClose","InsertionPoint","isBlockListEmpty","blockInsertionPoint","BlockDropZonePopover","useInBetweenInserter","isInBetweenInserterDisabled","onMouseMove","TEXT_NODE","captureToolbars","__experimentalCaptureToolbars","clientY","clientX","blockElRect","firstElementChild","hasFixedToolbar","elementRect","useBlockSelectionClearer","BlockSelectionClearer","pendingSettingsUpdates","useOnBlockDrop","targetBlockIndex","insertOrReplaceBlocks","clientIdsToReplace","groupInnerBlocks","areAllImages","galleryBlock","wrappedBlocks","moveBlocks","sourceClientIds","sourceRootClientId","insertIndex","sourceBlocks","_onDrop","srcRootClientId","srcClientIds","dropType","srcIndex","dataTransfer","getData","parseDropEvent","blocksToInsert","sourceBlockIndex","isAtSameLevel","draggedBlockCount","onBlockDrop","_onFilesDrop","transformation","findTransform","getBlockTransforms","_onHTMLDrop","pasteHandler","onHTMLDrop","getFilesFromDataTransfer","getDistanceToNearestEdge","point","allowedEdges","candidateDistance","candidateEdge","distance","isHorizontal","pointLateralPosition","pointForwardPosition","edgeStart","edgeEnd","edgeForwardPosition","edgeLateralPosition","getDistanceFromPointToEdge","isPointContainedByRect","THRESHOLD_DISTANCE","MINIMUM_HEIGHT_FOR_THRESHOLD","MINIMUM_WIDTH_FOR_THRESHOLD","isDropTargetValid","draggedBlockNames","areBlocksAllowed","allowedBlockNames","targetMatchesDraggedBlockParents","allowedParentName","isInsertionPoint","targetToCheck","HTMLElement","dataset","providesContext","contextName","useBlockContext","BlockListItemsMemo","BlockListItems","UncontrolledInnerBlocks","prioritizedInserterBlocks","__experimentalDefaultBlock","__experimentalDirectInsert","wrapperRef","templateInsertUpdatesSelection","__experimentalAppenderTagName","renderAppender","parentLock","_allowedBlocks","prevValue","setPrevValue","useShallowMemo","_prioritizedInserterBlocks","_templateLock","newSettings","useNestedSettingsUpdate","existingTemplateRef","isCancelled","currentInnerBlocks","shouldApplyTemplate","hasTemplateChanged","nextBlocks","useInnerBlockTemplateSync","defaultLayoutBlockSupport","memoedLayout","ControlledInnerBlocks","ForwardedInnerBlocks","innerBlocksProps","useInnerBlocksProps","__unstableDisableLayoutClassNames","__unstableDisableDropZone","dropZoneElement","selected","_isDropZoneDisabled","isDropZoneDisabled","enableClickThrough","blockDropZoneRef","parentBlockClientId","dropTarget","setDropTarget","useThrottle","blocksData","getIsUnmodifiedDefaultBlock","getElementById","blockOrientation","dropTargetPosition","nearestIndex","insertPosition","minDistance","parentBlockOrientation","rootBlockIndex","isRightToLeft","sideDistance","sideEdge","isPointInsideRect","isPointWithinTopAndBottomBoundariesOfRect","adjacentIndex","isNearestBlockUnmodifiedDefaultBlock","isAdjacentBlockUnmodifiedDefaultBlock","getDropTargetPosition","canInsertGalleryBlock","areGroupableBlocks","groupBlockVariations","canInsertRow","insertionPointClientId","useDropZone","onDrop","onDragOver","onDragLeave","relatedTarget","useBlockDropZone","InnerBlocks","getInnerBlocksProps","BaseDefaultBlockAppender","showSeparator","isFloating","onAddBlock","isToggle","BaseButtonBlockAppender","Content","KEY_DOWN_ELIGIBLE_KEY_CODES","RIGHT","LEFT","useMouseMoveTypingReset","lastClientX","lastClientY","stopTypingOnMouseMove","useTypingObserver","_isTyping","ref1","ref2","getSelection","timerId","stopTypingOnNonTextField","stopTypingOnEscapeKey","ESCAPE","stopTypingOnSelectionUncollapse","startTypingInTextField","shiftKey","isKeyDownEligibleForStartTyping","ZoomOutSeparator","isDraggedOver","setIsDraggedOver","blockInsertionPointVisible","isReducedMotion","ease","pendingBlockVisibilityUpdatesPerRegistry","isLargeViewport","isOutlineMode","isFocusMode","outlineMode","delayedBlockVisibilityUpdates","useDebounce","trailing","intersectionObserver","Observer","StopEditingAsBlocksOnOutsideSelect","isBlockOrDescendantSelected","BlockList","Items","hasAppender","hasCustomAppender","selectedBlocks","shouldRenderAppender","_order","AsyncModeProvider","isFullSelection","useMultiSelection","removeAllRanges","getClosestTabbable","containerElement","onlyVertical","focusableNodes","isTabbableIndex","nodeRect","useArrowNav","verticalRect","ctrlKey","altKey","metaKey","isUp","isDown","isLeft","isRight","isNav","hasModifier","isNavEdge","isVerticalEdge","isHorizontalEdge","isNavigationCandidate","computeCaretRect","isReverseDir","keepCaretInsideBlock","closestTabbable","isClosestTabbableABlock","placeCaretAtVerticalEdge","useSelectAll","useShortcutEventMatch","isEntirelySelected","blockClientIds","setContentEditableWrapper","useDragSelection","anchorElement","rafId","onMouseUp","rangeCount","getRangeAt","commonAncestorContainer","clonedRange","cloneRange","addRange","onMouseLeave","buttons","cancelAnimationFrame","getRichTextElement","useSelectionObserver","onSelectionChange","startNode","anchorNode","anchorOffset","childNodes","extractSelectionStartNode","endNode","focusNode","focusOffset","isSelectionForward","_focusNode$previousSi","previousSibling","extractSelectionEndNode","isClickShift","selectedClientId","clickedClientId","focusNodeIsNonSelectable","startPath","endPath","findDepth","richTextElementStart","richTextElementEnd","_richTextDataStart$st","_richTextDataEnd$star","richTextDataStart","__unstableIsEditableTree","richTextDataEnd","wpBlockAttributeKey","useClickSelection","useInput","onBeforeInput","selectedAttributeValue","regExp","__deprecatedOnSplit","onCompositionStart","useNotifyCopy","createSuccessNotice","eventType","notice","getPasteEventData","clipboardData","plainText","startIdx","endIdx","startStr","removeWindowsFragments","metaTag","removeCharsetMetaTag","IMAGE_TAG","IMG_WITH_LOCAL_SRC","shouldDismissPastedFiles","requiresWrapperOnCopy","setClipboardBlocks","_blocks","wrapperBlockClientId","wrapperBlockName","serialized","serialize","setData","useClipboardHandler","notifyCopy","documentHasUncollapsedSelection","documentHasSelection","isSelectionMergeable","shouldHandleWholeBlocks","expandSelectionIsNeeded","canUserUseUnfilteredHTML","isFullySelected","fromTransforms","rootBlockName","switchedBlocks","switchedBlock","useWritingFlow","container","focusCaptureBeforeRef","focusCaptureAfterRef","focusCaptureTabIndex","noCaptureRef","onFocusCapture","canvasElement","frameElement","isBefore","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","tabbables","isShift","direction","nextTabbable","currentBlock","isElementPartOfSelectedBlock","preventScroll","onFocusOut","preventScrollOnTab","useTabNav","removeAttribute","forwardedRef","compatibilityStyles","bubbleEvent","Constructor","frame","contentDocument","MouseEvent","newEvent","useBubbleEvents","iframeDocument","eventTypes","handlers","constructorName","getPrototypeOf","Iframe","contentRef","frameSize","readonly","resolvedAssets","setIframeDocument","prevContainerWidthRef","bodyClasses","setBodyClasses","clearerRef","writingFlowRef","contentResizeListener","contentHeight","useResizeObserver","containerResizeListener","containerWidth","setRef","iFrameDocument","preventFileDropDefault","onLoad","dir","compatStyle","styleSheets","styleSheet","cssRules","ownerNode","matchFromRules","_cssRules","selectorText","conditionText","__cssRules","mainStylesCssId","mainStylesElement","inlineStylesCssId","inlineStylesElement","_load","iframeWindowInnerHeight","setIframeWindowInnerHeight","iframeResizeRef","nodeWindow","innerHeight","windowInnerWidth","setWindowInnerWidth","windowResizeRef","isZoomedOut","disabledRef","bodyRef","cleanup","_src","createObjectURL","Blob","revokeObjectURL","removeProperty","shouldRenderFocusCaptureElements","iframe","KeyboardEvent","createPortal","TOKENS","class","combinator","universal","TRIM_TOKENS","getArgumentPatternByType","gobbleParens","nesting","char","STRING_PATTERN","ESCAPE_PATTERN","replacements","repeat","tokenizeBy","changedTokens","tokenOffset","flatten","cacheByWrapperSelector","ROOT_SELECTOR_TOKENS","wrapperSelector","transformOptions","ignoredSelectors","baseURL","_transformOptions$ign","excludedSelectors","prefixSelector","prefixedSelector","excludedSelector","tokenized","parsel","findLastIndex","tokenizedPrefix","listOrNode","prefixRootSelector","rebaseUrl","transformStyle","useDarkThemeBodyClassName","canvas","tempCanvas","transformedStyles","transformedSvgs","_styles","overrideWithId","overflow","dangerouslySetInnerHTML","__html","MemoizedBlockList","MAX_HEIGHT","EMPTY_ADDITIONAL_STYLES","ScaledBlockPreview","viewportWidth","editorStyles","Disabled","bodyElement","pointerEvents","EditorStyles","AutoBlockPreview","__experimentalMinHeight","__experimentalPadding","originalSettings","renderedBlocks","AutoHeightBlockPreview","useBlockPreview","_example$viewportWidt","getBlockFromExample","BlockPreview","BlockCard","isFirst","htmlProps","propsWithTabIndex","BlockDraggableChip","isPattern","fadeWhenDisabled","patternLabel","dragHandle","InserterDraggableBlocks","transferData","blockTypeIcon","Draggable","__experimentalTransferDataType","parsedBlocks","__experimentalDragComponent","onDraggableStart","onDraggableEnd","draggable","onHover","isDraggable","isDraggingRef","itemIconStyle","createBlocksFromInnerBlocksTemplate","InserterListboxItem","isAppleOS","onMouseEnter","shouldSpeak","setShouldSpeak","Group","chunk","chunks","BlockTypesList","listId","InserterListboxGroup","InserterListboxRow","InserterListItem","getBlockMenuDefaultClassName","rowId","useBlockTypesState","onInsert","isQuick","collections","getCategories","getCollections","shouldFocusBlock","insertedBlock","focusShift","focusWrap","BlockTypesTabPanel","onSelectItem","showMostUsedBlocks","suggestedItems","uncategorizedItems","itemsPerCollection","namespace","getBlockNamespace","currentlyRenderedCategories","useAsyncList","didRenderAllCategories","collectionEntries","currentlyRenderedCollections","InserterPanel","categoryItems","collection","collectionItems","InserterNoResults","itemsForCurrentRoot","itemsRemaining","InserterListbox","PatternCategoriesList","selectedCategory","patternCategories","onClickCategory","PatternsExplorerSearch","searchValue","setSearchValue","SearchControl","Pagination","currentPage","numPages","changePage","totalItems","WithToolTip","BlockPattern","setIsDragging","patternBlocks","clonedBlock","BlockPatternPlaceholder","shownPatterns","onClickPattern","showTitlesAsTooltip","pagingProps","activeCompositeId","setActiveCompositeId","firstCompositeItemId","activeId","setActiveId","BlockPatternsPaging","getIndex","destinationRootClientId","destinationIndex","parentIndex","insertionIndex","selectBlockOnInsert","_destinationIndex","_destinationRootClientId","shouldForceFocusBlock","blockLength","onToggleInsertionPoint","usePatternsState","userPatternCategories","allCategories","userCategory","existingCategory","lowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","re","defaultGetName","defaultGetTitle","defaultGetDescription","defaultGetKeywords","defaultGetCategory","defaultGetCollection","splitRegexp","stripRegexp","extractedWords","normalizedStrings","extractWords","delimiter","noCase","normalizeString","getNormalizedSearchTerms","searchBlockItems","searchInput","searchItems","getCategory","getCollection","rankedItems","getItemSearchRank","rank","rank1","rank2","getName","getTitle","getDescription","getKeywords","normalizedSearchInput","normalizedTitle","terms","unmatchedTerms","unprocessedTerms","term","unprocessedTerm","removeMatchingTerms","PAGE_SIZE","INITIAL_INSERTER_RESULTS","usePatternsPaging","currentCategoryPatterns","currentCategory","scrollContainerRef","currentFilter","setCurrentPage","previousCategory","previousFilter","pageIndex","categoryPatterns","categoryPatternsAsyncList","scrollTo","PatternsListHeader","filterValue","filteredBlockPatternsLength","useInsertionPoint","registeredPatternCategories","patternCategory","filteredBlockPatterns","hasKnownCategory","resultsFoundMessage","previousSearchValue","setPreviousSearchValue","hasItems","BlockPatternsList","usePatternCategories","populatedCategories","localeCompare","cat","hasRegisteredCategory","PatternsExplorer","initialCategory","setSelectedCategory","PatternExplorerSidebar","PatternList","onModalClose","restProps","isFullScreen","ScreenHeader","View","paddingX","paddingY","NavigatorBackButton","MobileTabNavigation","NavigatorProvider","initialPath","NavigatorScreen","NavigatorButton","isAction","FlexBlock","getShouldDisableSyncFilter","getShouldHideSourcesFilter","PATTERN_SOURCE_MENU_OPTIONS","PatternsFilter","setPatternSyncFilter","setPatternSourceFilter","patternSyncFilter","patternSourceFilter","currentPatternSourceFilter","shouldDisableSyncFilter","shouldHideSourcesFilter","patternSyncMenuOptions","fill","MenuItemsChoice","choices","newSourceFilter","Link","PatternCategoryPreviews","allPatterns","availableCategories","catName","onSetPatternSyncFilter","onSetPatternSourceFilter","patternFilter","onSelectCategory","defaultTransition","previousSelectedCategory","selectOnMove","selectedTabId","categoryId","transitionEnd","closed","showPatternsExplorer","setShowPatternsExplorer","isMobile","CategoryTabs","PatternsExplorerModal","mediaTypeTag","video","audio","getBlockAndPreviewFromMedia","mediaSrc","PreviewTag","preview","previewUrl","ALLOWED_MEDIA_TYPES","MEDIA_OPTIONS_POPOVER_PROPS","MediaPreviewOptions","getReportUrl","reportUrl","external","InsertExternalImageModal","MediaPreview","showExternalUploadModal","setShowExternalUploadModal","isHovered","setIsHovered","isInserting","setIsInserting","onMediaInsert","previewBlock","response","blob","additionalData","img","rendered","truncatedTitle","omission","mediaList","sourceId","MediaCategoryPanel","search","setSearch","debouncedSearch","useDebouncedInput","query","setMediaList","setIsLoading","lastRequestRef","_media","useMediaResults","per_page","baseCssClass","searchLabel","search_items","MediaList","mediaCategories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","_categories","categoriesHaveMedia","canInsertMediaType","useMediaCategories","mediaCategory","__unstableInserterMenuExtension","orderInserterBlockItems","aName","bName","aIndex","bIndex","onHoverPattern","__experimentalInsertionIndex","maxBlockPatterns","maxBlockTypes","showBlockDirectory","prioritizePatterns","prioritizedBlocks","blockTypeCategories","blockTypeCollections","onSelectBlockType","maxBlockTypesToShow","filteredBlockTypes","orderedItems","currentShownBlockTypes","currentShownPatterns","blocksUI","patternsUI","selectedTab","closeButtonLabel","closeSmall","panelRef","panel","NOOP","PrivateInserterMenu","showInserterHelpPanel","__experimentalFilterValue","onPatternCategorySelection","__experimentalInitialTab","__experimentalInitialCategory","setFilterValue","delayedFilterValue","hoveredItem","setHoveredItem","selectedPatternCategory","setSelectedPatternCategory","setPatternFilter","selectedMediaCategory","setSelectedMediaCategory","setSelectedTab","blockTypesTabRef","onInsertPattern","onClickPatternCategory","showPatternPanel","showMediaPanel","inserterSearch","InserterSearchResults","blocksTab","BlockTypesTab","Tips","patternsTab","BlockPatternsTab","mediaTab","MediaTab","tabsRef","TabbedSidebar","InserterPreviewPanel","QuickInserter","hasSearch","setInserterIsOpened","showPatterns","showSearch","onBrowseAll","defaultRenderToggle","hasSingleBlockType","tooltipPosition","InserterMenu","insertOnlyAllowedBlock","expandOnMobile","shouldDirectInsert","allowedBlockType","__experimentalPreferPatternsOnRoot","blockToInsert","adjacentAttributes","previousBlock","parentBlock","lastInnerBlock","getAdjacentBlockAttributes","getInsertionIndex","ifCondition","inserterButtonRef","mergedInserterButtonRef","isToggleButton","ButtonBlockerAppender","GridVisualizer","GridVisualizerGrid","gridInfo","setGridInfo","isDroppingAllowed","setIsDroppingAllowed","onGlobalDrag","onGlobalDragEnd","ManualGridVisualizer","GridVisualizerCell","highlightedRect","setHighlightedRect","gridItemStyles","occupiedRects","rects","_style$layout","_highlightedRect$cont","isCellOccupied","GridVisualizerDropZone","GridVisualizerAppender","useGridVisualizerDropZone","validateDrag","onDragEnter","srcClientId","useDropZoneWithValidation","prevHighlightedRect","GridItemResizer","rootBlockElement","GridItemResizerInner","resizeDirection","setResizeDirection","enableSide","setEnableSide","blockClientRect","rootBlockClientRect","justification","ResizableBox","enable","boundsByDirection","onPointerDown","pointerId","setPointerCapture","onResizeStart","onResizeStop","boxElement","columnGap","rowGap","gridColumnTracks","gridRowTracks","GridItemMovers","blockClientId","_layout$columnStart","_layout$rowStart","_layout$columnSpan","_layout$rowSpan","GridItemMover","chevronUp","chevronDown","useBlockPropsChildLayoutStyles","shouldRenderChildLayoutStyles","parentColumnValue","parentColumnUnit","numColsToBreakAt","defaultGapValue","containerQueryValue","minimumContainerQueryValue","gridColumnValue","resizerBounds","setResizerBounds","updateLayout","isLockedByParent","isEditingAsBlocks","isContentLocked","stopEditingAsBlockCallback","META_ATTRIBUTE_NAME","blockTypeSettings","ignoredHookedBlocks","hookedBlocksForCurrentBlock","blockHooks","hookedBlockClientIds","_hookedBlockClientIds","relativePosition","hookedBlock","candidate","groupedHookedBlocks","initialOpen","vendor","insertBlockIntoDesignatedLocation","innerBlocksLength","isObjectEmpty","useBlockBindingsUtils","updateBlockBindings","currentBindings","newBindings","newMetadata","removeAllBlockBindings","DropdownMenuV2","BlockBindingsPanelDropdown","fieldsList","getBlockBindingsSources","blocksPrivateApis","registeredSources","currentKey","fields","GroupLabel","RadioItem","ItemLabel","ItemHelpText","Separator","BlockBindingsAttribute","sourceProps","getBlockBindingsSource","isSourceInvalid","truncate","isDestructive","ReadOnlyBlockBindingsPanelItems","EditableBlockBindingsPanelItems","trigger","BlockBindingsPanel","bindableAttributes","getBindableAttributes","_fieldsList","canUpdateBlockBindings","getFieldsList","sourceList","filteredBindings","readOnly","placeBlock","gridColumnCount","blockColumnSpan","blockRowSpan","startColumn","startRow","candidateRect","GridLayoutSync","gridLayout","selectedBlockLayout","_getBlockAttributes$l","selectedBlockRect","previouslySelectedBlockRect","previousIsManualPlacement","previousBlockOrder","_attributes$style$lay","bottomMostRow","_attributes$style$lay2","hasEmptyLayoutAttribute","_attributes$style$lay3","useGridLayoutSync","GridTools","__experimentalLabel","addGridVisualizerToBlockEdit","getBorderClassesAndStyles","useBorderProps","borderProps","borderColorObject","getShadowClassesAndStyles","getColorClassesAndStyles","useColorProps","userGradients","colorProps","backgroundColorObject","textColorObject","getSpacingClassesAndStyles","getTypographyClassesAndStyles","typographyStyles","fontFamilyClassName","useCachedTruthy","cachedValue","setCachedValue","useZoomOut","zoomOut","originalIsZoomOutRef","withBlockEditHooks","OriginalBlockEdit","neededProps","createBlockEditFilter","customClassName","contentLockUI","blockBindingsPanel","withBlockListBlockHooks","allWrapperProps","createBlockListBlockFilter","blockStyleVariation","accu","neededAttributes","upperFirst","firstLetter","withCustomColorPalette","colorsArray","withEditorColorPalette","allColors","createColorHOC","colorTypes","withColorPalette","colorMap","colorType","setters","createSetters","colorUtils","getMostReadableColor","colordColor","getColorContrast","maxContrast","settersAccumulator","colorAttributeName","upperFirstColorAttributeName","customColorAttributeName","createSetColor","previousState","colorContext","previousColorObject","previousColor","createCustomColorsHOC","withColors","BaseFontSizePicker","DEFAULT_FONT_SIZES","fontSizeNames","fontSizeAttributeNames","fontSizeAttributeNamesAccumulator","fontSizeAttributeName","customFontSizeAttributeName","createSetFontSize","didAttributesChange","newStateAccumulator","fontSizeAttributeValue","triggerPrefix","useItems","selectedBlockName","filteredItems","blockItem","allowContext","getOptionCompletion","inserterItem","apiFetch","addQueryArgs","letters","order_by","getOptionKeywords","getOptionLabel","subtype","useCompleters","completers","filteredCompleters","linkAutocompleter","blockAutocompleter","hasFilter","completer","Autocomplete","fullscreen","AlignmentMatrixControl","hasFocusBorder","useBlockDisplayTitle","maximumLength","BlockTitle","getEditorRegion","editor","_Array$from$find","_editorCanvas$closest","editorCanvas","querySelectorAll","contentWindow","rootLabelText","hasSelection","rootLabel","blockRef","blockEditor","useBlockOverlayActive","COMMON_PROPS","RESTRICTED_HEIGHT_PROPS","getProps","contentElement","selectedBlockElement","toolbarHeight","blockRect","topOfContentElementInViewport","viewportHeight","clientHeight","restrictedTopArea","hasSpaceForToolbarAbove","isBlockTallerThanViewport","useBlockToolbarPopoverProps","setToolbarHeight","setProps","popoverRef","popoverNode","updateProps","contentView","resizeObserver","addEventHandler","blockView","removeEventHandler","useSelectedBlockToolProps","selectedBlockProps","blockParentsClientIds","capturingClientId","isInsertionPointVisible","EmptyBlockInserter","BlockDraggable","appendToOwnerDocument","cloneClassname","elementId","dragComponent","visibleInserter","_getBlockType","startScrolling","scrollOnDragOver","stopScrolling","dragStartYRef","velocityYRef","scrollParentYRef","scrollEditorIntervalRef","clearInterval","setInterval","newTop","scroll","scrollParentHeight","offsetDragStartPosition","offsetDragPosition","moveableDistance","dragDistance","distancePercentage","PIXELS_PER_SECOND_PER_PERCENTAGE","useScrollWhenDragging","editorRoot","throttledOnDragOver","targetClientId","dropTargetValid","targetRootBlockName","rootAllowedBlocks","getMovementDirection","moveDirection","getBlockMoverDescription","selectedCount","isLast","movementDirection","getMultiBlockMoverDescription","getArrowIcon","getMovementDirectionLabel","BlockMoverButton","moverOrientation","normalizedClientIds","blocksCount","blockRootClientId","firstBlockIndex","lastBlockIndex","isFirstBlock","isLastBlock","blockListOrientation","moverFunction","BlockMoverUpButton","BlockMoverDownButton","hideDragHandle","isBlockMoverUpButtonDisabled","isBlockMoverDownButtonDisabled","_getBlockAttributes","draggableProps","ToolbarItem","DEBOUNCE_TIMEOUT","useDebouncedShowGestures","isFocused","highlightParent","debounceTimeout","timeoutRef","nextIsFocused","clearTimeoutRef","debouncedShowGestures","debouncedHideGestures","shouldHideGestures","useShowHoveredOrFocusedGestures","setIsFocused","registerRef","isFocusedWithin","handleOnFocus","handleOnBlur","BlockParentSelector","_firstParentClientId","parentBlockName","_parentBlockType","nodeRef","showHoveredOrFocusedGestures","PreviewBlockPopover","BlockVariationTranformationItem","setHoveredTransformItemName","BlockVariationTransformations","transformations","hoveredTransformItemName","RestTransformationItems","restTransformations","BlockTranformationItem","BlockTransformationsMenu","possibleBlockTransformations","possibleBlockVariationTransformations","onSelectVariation","priorityTextTransformations","priorityContentTranformationBlocks","priorityTextTranformsNames","groupedPossibleTransforms","currentName","nextName","useGroupedTransforms","hasBothContentTransformations","restTransformItems","replaceActiveStyle","activeStyle","getDefaultStyle","useStylesForBlocks","onSwitch","stylesToRender","getRenderedStyles","potentialStyleName","getActiveStyle","genericPreviewBlock","useGenericPreviewBlock","styleClassName","BlockStylesMenuItems","menuItemText","limit","ellipsizeMode","BlockStylesMenu","hoveredBlock","getMatchingBlockByName","consumedBlocks","transformMatchingBlock","retainedBlockAttributes","getRetainedBlockAttributes","contentAttributes","getBlockAttributesNamesByRole","_accumulator","PreviewPatternsPopover","transformedBlocks","statePatterns","showTransforms","setShowTransforms","useTransformedPatterns","_pattern","getPatternTransformedBlocks","_patternBlocks","patternBlock","BlockSwitcherDropdownMenuContents","hasBlockStyles","isUsingBindings","blockVariationTransformations","activeBlockVariation","useBlockVariationTransforms","selectForMultipleBlocks","insertedBlocks","isSingleBlock","isTemplate","hasPossibleBlockTransformations","hasPossibleBlockVariationTransformations","hasPatternTransformation","hasBlockOrBlockVariationTransforms","connectedBlockDescription","PatternTransformationsMenu","onPatternTransform","onBlockTransform","onBlockVariationTransform","BlockIndicator","BlockSwitcher","hasContentOnlyLocking","invalidBlocks","firstBlockName","_isSingleBlockSelected","_icon","_hasTemplateLock","isSelectionOfSameType","copy","blockSwitcherLabel","blockSwitcherDescription","menuProps","__unstableBlockToolbarLastItem","STYLE_ATTRIBUTES","getStyleAttributes","sourceBlock","recursivelyUpdateBlockAttributes","targetBlocks","BlockActions","__experimentalUpdateSelection","canInsertDefaultBlock","canInsertBlock","canCopyStyles","canDuplicate","pasteStyles","clipboard","readText","__unstableSkipAutop","hasSerializedBlocks","copiedBlocks","usePasteStyles","onDuplicate","onInsertBefore","onInsertAfter","onMoveTo","onGroup","onUngroup","onCopy","onPasteStyles","__unstableBlockSettingsMenuFirstItem","useConvertToGroupButtonProps","blocksSelection","firstSelectedBlock","_isUngroupable","ConvertToGroupButton","displayShortcut","primary","onConvertToGroup","onConvertFromGroup","useBlockLock","canEdit","canLock","ALLOWS_EDIT_LOCKING","getTemplateLockValue","BlockLockModal","setLock","allowsEditLocking","hasTemplateLock","applyTemplateLock","setApplyTemplateLock","isAllChecked","overlayClassName","indeterminate","prevLock","lockIcon","unlockIcon","BlockLockMenuItem","isModalOpen","toggleModal","lockOutline","BlockModeToggle","isCodeEditingEnabled","codeEditingEnabled","ModifyContentLockMenuItem","blockEditorActions","isEmptyString","testString","BlockRenameModal","originalBlockName","onSave","hasOverridesWarning","editedBlockName","setEditedBlockName","nameHasChanged","nameIsOriginal","nameIsEmpty","isNameValid","BlockRenameControl","renamingBlock","setRenamingBlock","_metadata","customName","hasPatternOverrides","newName","BlockSettingsMenuControls","BlockSettingsMenuControlsSlot","isContentOnly","canRename","showLockButton","showRenameButton","convertToGroupButtonProps","showConvertToGroupButton","onlyBlock","BlockParentSelectorMenuItem","isSmallViewport","menuItemRef","gesturesProps","CopyMenuItem","copyMenuItemLabel","BlockSettingsDropdown","__experimentalSelectBlock","currentClientId","shortcuts","getShortcutRepresentation","duplicate","hasSelectedBlocks","updateSelectionAfterDuplicate","clientIdsPromise","updateSelectionAfterRemove","blockToFocus","shouldUpdateSelection","parentBlockIsSelected","localOpen","BlockHTMLConvertButton","BlockLockToolbar","hasLockButtonShownRef","layouts","canInsertStack","canInsertGrid","onConvertToRow","onConvertToStack","onConvertToGrid","BlockEditVisuallyButton","canEditVisually","getAllFocusableToolbarItemsIn","hasFocusWithin","NavigableToolbar","focusEditorOnEscape","shouldUseKeyboardFocusShortcut","__experimentalInitialIndex","initialIndex","__experimentalOnIndexChange","onIndexChange","toolbarRef","isAccessibleToolbar","setIsAccessibleToolbar","determineIsAccessibleToolbar","onlyToolbarItem","childList","subtree","useIsAccessibleToolbar","defaultIndex","initialFocusOnMount","focusToolbar","firstTabbable","focusFirstTabbableIn","useShortcut","focusToolbarViaShortcut","navigableToolbarRef","handleKeyDown","useToolbarFocus","Toolbar","useHasBlockControls","useHasBlockToolbar","isToolbarEnabled","isDefaultEditingMode","hasAnyBlockControls","useHasAnyBlockControls","PrivateBlockToolbar","isContentOnlyEditingMode","toolbarKey","shouldShowVisualToolbar","showParentSelector","editingMode","_isDefaultEditingMode","_blockName","isVisual","_isUsingBindings","_hasParentPattern","toolbarWrapperRef","isMultiToolbar","innerClasses","BlockMover","BlockGroupToolbar","__unstableBlockNameContext","BlockSettingsMenu","BlockToolbar","BlockToolbarPopover","initialToolbarItemIndexRef","isToolbarForcedRef","clientIdToPositionOver","BlockPopover","blockMovingMode","getAccessibleBlockLabel","classNames","dragHandleLabel","showBlockDraggable","isTab","isEscape","isEnter","isSpace","selectionEndClientId","selectionBeforeEndClientId","selectionAfterEndClientId","navigateUp","navigateDown","navigateOut","navigateIn","focusedBlockUid","_getBlockRootClientId","_getClientIdsOfDescen","startingBlockClientId","destRoot","destinationBlockIndex","findPrevious","BlockSelectionButton","Shuffle","_patternName","rootBlock","sameCategoryPatternsWithSingleWrapper","isCorePattern","ComponentToUse","shuffle","nextPattern","numberOfPatterns","patternIndex","getNextPattern","ZoomOutToolbar","setIsInserterOpened","isBlockTemplatePart","isNextBlockTemplatePart","nextBlockType","isPrevBlockTemplatePart","prevClientId","prevName","prevBlockType","trash","ZoomOutPopover","zoomOutModeInserterButtonHovered","setZoomOutModeInserterButtonHovered","isReady","setIsReady","shouldRenderInsertionPoint","ZoomOutModeInserterButton","BlockTools","showEmptyBlockSideInserter","showBreadcrumb","showBlockToolbarPopover","showZoomOutToolbar","isEmptyDefaultBlock","_showEmptyBlockSideInserter","maybeShowBreadcrumb","_showZoomOutToolbar","blockSelectionButtonRef","blockToolbarRef","blockToolbarAfterRef","BlockToolbarBreadcrumb","ZoomOutModeInserters","useTransformCommands","invalidSelection","commands","close","useActionsCommands","command","useQuickActionsCommands","_isGroupable","useBlockCommands","useCommandLoader","hook","EDITOR_STYLE_TRANSFORM_OPTIONS","ExperimentalBlockCanvas","shouldIframe","contentRefProp","iframeProps","resetTypingRef","localRef","WritingFlow","ColorSelectorSVGIcon","ColorSelectorIcon","renderToggleComponent","TextColor","BackgroundColor","BlockColorsStyleSelector","ListViewContext","useListViewContext","AriaReferencedText","Appender","nestingLevel","setInsertedBlock","hideInserter","insertedBlockTitle","maybeInsertedBlock","AnimatedTreeGridRow","TreeGridRow","ListViewLeaf","isDragged","animationRef","enableAnimation","mergedRef","positionInSet","setSize","isExpanded","ListViewExpander","forceToggle","getImage","onContextMenu","onToggleExpanded","ariaDescribedBy","shouldShowLockIcon","images","getImagesFromGallery","getImagesFromBlock","useListViewImages","clearData","pinSmall","ListViewBlockContents","siblingBlockCount","blockMovingClientId","selectedBlockInBlockEditor","AdditionalBlockContent","draggableClientIds","ListViewBlockSelectButton","focusListItem","focusClientId","treeGridElement","getFocusElement","ListViewBlock","displacement","isAfterDraggedBlocks","isNesting","isBranchSelected","showBlockMovers","isSyncedBranch","cellRef","rowRef","settingsRef","settingsAnchorRect","setSettingsAnchorRect","isFirstSelectedBlock","isLastSelectedBlock","allowRightClickOverrides","showBlockActions","expand","collapse","collapseAll","listViewInstanceId","expandedState","treeGridElementRef","getBlocksToUpdate","isUpdatingSelectedBlocks","firstBlockRootClientId","blocksToUpdate","selectEditorBlock","updateFocusAndSelection","shouldSelectBlock","toggleExpanded","settingsPopoverAnchor","clearSettingsAnchorRect","rowItemRef","isSingleSelection","rowRect","scrollContainerRect","useListViewScrollIntoView","blockPositionDescription","getBlockPositionDescription","siblingCount","blockPropertiesDescription","getBlockPropertiesDescription","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","colSpan","dropdownClientIds","currentlyEditingBlockInCanvas","isDeleteKey","_getPreviousBlockClie","blocksToDelete","blockToUpdate","updatedBlocks","newlySelectedBlocks","blockParents","TreeGridCell","withoutGridItem","TreeGridItem","disableOpenOnArrowDown","countBlocks","draggedClientIds","isExpandedByDefault","_expandedState$block$","countReducer","_expandedState$block$2","ListViewBranch","listPosition","fixedListWindow","shouldShowInnerBlocks","showAppender","showAppenderProp","parentBlockInformation","syncedBranch","canParentExpand","blockDropPosition","blockDropTargetIndex","firstDraggedBlockIndex","blockIndexes","filteredBlocks","_expandedState$client","thisBlockIndex","getDragDisplacementValues","itemInView","blockInView","updatedPath","hasNestedBlocks","shouldExpand","isClientIdSelected","isSelectedBranch","showBlock","treeGridCellProps","ListViewDropIndicatorPreview","draggedBlockClientId","listViewRef","blockDropTarget","dropPosition","targetElement","rtl","getDropIndicatorWidth","targetElementRect","windowScroll","distanceBetweenContainerAndTarget","scrollContainerWidth","horizontalScrollOffsetStyle","ariaLevel","_ariaLevel","hasAdjacentSelectedBranch","doc","scrollbarWidth","NESTING_LEVEL_INDENTATION","getNextNonDraggedBlock","nextBlockData","isDraggedBlock","ALLOWED_DROP_EDGES","getListViewDropTarget","candidateBlockData","candidateBlockIndex","blockData","isCursorWithinBlock","previousBlockData","candidateBlockParents","currentBlockData","getCandidateBlockParents","isDraggingBelow","canInsertDraggedBlocksAsChild","innerBlockCount","blockIndentPosition","isNestingGesture","newBlockIndex","isUpGesture","nextBlock","currentLevel","nextLevel","desiredRelativeLevel","distanceBetweenPointAndBlockIndentPosition","desiredParentLevel","getDesiredRelativeParentLevel","targetParentIndex","canInsertDraggedBlocksAsSibling","EXPAND_THROTTLE_OPTIONS","leading","PrivateListView","ListViewComponent","blockSettingsMenu","additionalBlockContent","clientIdsTree","useListViewClientIds","currentGlobalIndex","traverseBlocks","blockList","useListViewBlockIndexes","visibleBlockCount","updateBlockSelection","destinationClientId","focusPosition","isOnlyDeselection","isKeyPress","HOME","END","clientIdWithParents","blockId","startTarget","endTarget","startParents","endParents","startId","endId","getCommonDepthClientIds","updatedSelectedBlocks","selectionDiff","useBlockSelection","setExpandedState","setSelectedTreeId","firstSelectedBlockClientId","selectedTreeId","selectedBlockParentClientIds","useListViewExpandSelectedItem","dropZoneRef","setTarget","maybeExpandBlock","_expandedState","_target","throttledMaybeExpandBlock","draggedBlockClientIds","isBlockDrag","newTarget","useListViewDropZone","elementRef","clipBoardRef","listViewRow","originallySelectedBlockClientIds","getPasteBlocks","treeGridRef","expandRow","collapseRow","focusRow","endRow","_getBlockParents","useListViewCollapseItems","firstDraggedBlockClientId","_blockDropTargetIndex","_firstDraggedBlockIndex","foundBlockIndex","contextValue","useFixedWindowList","useWindowing","windowOverscan","describedById","TreeGrid","onCollapseRow","onExpandRow","onFocusRow","applicationAriaLabel","BlockNavigationDropdownToggle","listView","ListView","BlockStylesPreviewPanel","previewBlocks","onHoverClassName","previewClassName","hoveredStyle","setHoveredStyle","isMobileViewport","debouncedSetHoveredStyle","styleItemHandler","_item$name","onSelectStylePreview","LEVEL_TO_PATH","HeadingLevelIcon","HEADING_LEVELS","HeadingLevelDropdown","targetLevel","instructions","allowSkip","VIEWMODES","Actions","onBlockPatternSelect","CarouselNavigation","handlePrevious","handleNext","activeSlide","totalSlides","SetupToolbar","viewMode","setViewMode","isCarouselView","displayControls","SetupContent","showTitles","containerClass","slideClass","BlockPatternSlide","BlockPatternSetup","filterPatternsFn","initialViewMode","setActiveSlide","usePatternsSetup","onPatternSelectCallback","VariationsButtons","selectedValue","VariationsDropdown","VariationsToggleGroupControl","isContentBlock","hasUniqueIcons","variationIcons","showButtons","colorsFeature","hasColorsToChoose","withColorContext","ColorPaletteControl","exampleDate","DateFormatPicker","format","defaultFormat","dateI18n","NonDefaultControls","_suggestedOptions$fin","suggestedOptions","suggestedFormat","humanTimeDiff","customOption","setIsCustom","setDate","setMonth","getMonth","WithToolsPanelItem","clearValue","ColorGradientSettingsDropdown","_setting$gradientValu","toggleSettings","PanelColorGradientSettingsInner","marginY","PanelColorGradientSettingsSelect","useColorsAndGradientsPalettes","MIN_ZOOM","MAX_ZOOM","ImageEditingContext","useImageEditingContext","ImageEditingProvider","naturalWidth","naturalHeight","onFinishEditing","onSaveImage","transformImage","editedUrl","setEditedUrl","crop","setCrop","setPosition","setZoom","rotation","setRotation","defaultAspect","aspect","setAspect","rotateClockwise","angle","naturalAspectRatio","prevPosition","Image","onload","translateX","translateY","getContext","translate","drawImage","toBlob","imgCrossOrigin","crossOrigin","useTransformImage","saveImage","isInProgress","setIsInProgress","modifiers","source_url","useSaveImage","providerValue","AspectRatioGroup","aspectRatios","ratioToNumber","presetRatioAsNumber","AspectRatioDropdown","aspectRatioIcon","newAspect","restrictPosition","mediaSize","cropSize","rotateSize","restrictPositionCoord","maxPosition","getDistanceBetweenPoints","pointA","pointB","getRotationBetweenPoints","atan2","limitArea","noOp","_max","getCenter","rotRad","_i","Cropper","imageRef","videoRef","containerPosition","containerRef","styleRef","containerRect","dragStartPosition","dragStartCrop","gestureZoomStart","gestureRotationStart","isTouching","lastPinchDistance","lastPinchRotation","rafDragTimeout","rafPinchTimeout","wheelTimer","currentDoc","currentWindow","hasWheelJustStarted","mediaObjectFit","initResizeObserver","isFirstResize","computeSizes","preventZoomSafari","cleanEvents","onDragStopped","onTouchMove","onGestureMove","onGestureEnd","onScroll","clearScrollEvent","onMediaLoad","emitCropData","setInitialCrop","onMediaLoaded","initialCroppedAreaPercentages","croppedAreaPercentages","minZoom","maxZoom","mediaBBoxSize","getInitialCropFromCroppedAreaPercentages","onCropChange","onZoomChange","initialCroppedAreaPixels","croppedAreaPixels","mediaNaturalBBoxSize","mediaZoom","getMediaZoom","getZoomFromCroppedAreaPixels","cropZoom","getInitialCropFromCroppedAreaPixels","mediaRef","saveContainerPosition","containerAspect","videoWidth","_c","_d","videoHeight","mediaAspect","renderedMediaSize","setMediaSize","mediaWidth","mediaHeight","containerHeight","fittingWidth","fittingHeight","getCropSize","_e","_f","onCropSizeChange","recomputeCropPosition","setCropSize","getMousePoint","onTouchStart","onTouchRequest","touches","onPinchStart","getTouchPoint","onPinchMove","onGestureStart","newZoom","setNewZoom","shouldUpdatePosition","onRotationChange","newRotation","onInteractionStart","offsetY","requestedPosition","newPosition","onInteractionEnd","onWheelRequest","zoomSpeed","getPointOnContainer","containerTopLeft","getPointOnMedia","zoomPoint","zoomTarget","getCropData","limitAreaFn","widthInPixels","heightInPixels","sizePixels","computeCroppedArea","getAspect","cropData","onCropComplete","onCropAreaChange","emitCropAreaChange","zoomWithScroll","disableAutomaticStylesInjection","nonce","complete","setImageRef","setVideoRef","objectFit","_g","_h","_j","load","getObjectFit","mediaProps","cropShape","showGrid","containerStyle","cropAreaStyle","mediaStyle","containerClassName","cropAreaClassName","mediaClassName","autoPlay","muted","onLoadedMetadata","touch","ImageCropper","editedHeight","area","newCropPercent","ZoomDropdown","RotationButton","rotateRightIcon","FormControls","ImageEditor","IMAGE_SIZE_PRESETS","ImageSizeControl","imageSizeHelp","imageWidth","imageHeight","imageSizeOptions","isResizable","onChangeImage","currentHeight","currentWidth","updateDimension","updateDimensions","customHeight","customWidth","defaultHeight","defaultWidth","setCurrentWidth","setCurrentHeight","dimension","nextHeight","useDimensionHandler","scaledWidth","scaledHeight","isCurrent","LinkViewerURL","urlLabel","linkClassName","__experimentalPopoverLegacyPositionToPlacement","URLPopover","additionalControls","renderSettings","computedPlacement","isSettingsExpanded","setIsSettingsExpanded","toggleSettingsVisibility","LinkEditor","onChangeInputValue","LinkViewer","onEditLinkClick","InsertFromURLPopover","URLSelectionUI","onChangeSrc","setPopoverAnchor","isURLInputVisible","setIsURLInputVisible","closeURLInput","openURLInput","mediaPreview","notices","disableDropZone","disableMediaButtons","onFilesPreUpload","deprecatedOnHTMLDrop","mediaLibraryButton","setSrc","_value$src","setMedia","lastMediaPassed","newMedia","filteredMedia","urlSlug","cutOffIndex","mediaBlocks","recursivelyFindMediaFromBlocks","uploadedMediaList","alt_text","handleBlocksDrop","onUpload","renderPlaceholder","typesAllowed","firstAllowedType","isOneType","isAudio","isImage","isVideo","placeholderClassName","renderDropZone","renderCancelLink","renderUrlSelectionUI","renderFeaturedImageToggle","renderMediaUploadChecked","libraryButton","defaultButton","uploadMediaLibraryButton","PanelColorSettings","colorSettings","otherSettings","PanelColorGradientSettings","FormatToolbar","hasActive","InlineToolbar","FormatToolbarContainer","editableContentElement","formatTypesSelector","richTextStore","getFormatTypes","interactiveContentTags","prefixSelectKeys","getPrefixedSelectKeys","wrapSelectionSettings","findSelection","nestedSelection","getMultilineTag","multiline","getAllowedFormats","allowedFormats","disableFormats","allEventListeners","pair","startChar","endChar","InputEvent","inputRule","trimmedTextBefore","prefixTransforms","__unstableAllowPrefixTransformations","formatTypes","transformed","accumlator","__unstableInputRule","searchText","preventEventDiscovery","activeFormats","onKeydown","isKeyboardEvent","primaryShift","keyboardShortcuts","keyboardShortcut","inputEvents","__experimentalUndo","_onPaste","__unstableEmbedURLOnPaste","preserveWhiteSpace","pastePlainText","log","pasteInline","__unstablePasteRule","valueToInsert","formats","addActiveFormats","trimmedPlainText","hasActiveFormats","onKeyDownDeprecated","onSplit","disableLineBreaks","onSplitAtEnd","onSplitAtDoubleLineEnd","parentEditable","useEventListeners","propsRef","refEffects","refEffect","cleanups","usesContextKey","EditFunction","activeFormat","getActiveFormat","activeObject","getActiveObject","isObjectActive","activeAttributes","activeObjectAttributes","FormatEdit","valueToHTMLString","RichText","multilineTag","childrenSource","Tag","identifier","multilineTagName","RichTextWrapper","richTextValue","keyboardShortcutContext","inputEventContext","instanceIdKey","removeNativeProps","__unstableMobileNoFocusOnMount","deleteEnter","placeholderTextColor","selectionColor","tagsToEliminate","disableEditingMenu","disableAutocorrection","adjustedValue","adjustedOnChange","originalIsSelected","inlineToolbar","wrapperClassName","autocompleters","withoutInteractiveFormatting","__unstableOnSplitAtEnd","__unstableOnSplitAtDoubleLineEnd","__unstablePastePlainText","__unstableDisableFormats","anchorRef","disableBoundBlock","bindingsPlaceholder","bindingsLabel","_fieldsList$relatedBi","relatedBinding","blockBindingsSource","blockBindingsContext","_disableBoundBlock","canUserEditValue","bindingKey","_bindingsPlaceholder","_bindingsLabel","shouldDisableEditing","adjustedAllowedFormats","hasFormats","baseSelection","prepareHandlers","valueHandlers","changeHandlers","allFormatTypes","interactive","keyedSelected","__experimentalGetPropsForEditableTreePreparation","richTextIdentifier","__experimentalCreatePrepareEditableTree","__experimentalCreateOnChangeEditableValue","dispatchers","__experimentalGetPropsForEditableTreeChangeHandler","useFormatTypes","removeEditorOnlyFormats","formatType","removeFormat","richTextRef","useRichText","__unstableFormats","__unstableText","changeHandler","__unstableIsSelected","__unstableDependencies","__unstableAfterParse","__unstableBeforeSerialize","__unstableAddInvisibleFormats","autocompleteProps","useAutocompleteProps","useBlockEditorAutocompleteProps","record","previousTextRef","useMarkPersistent","__unstableSlotNameProvider","suppressContentEditableWarning","PrivateRichText","fromDOM","__unstableCreateElement","NewComponent","RichTextMultiline","PublicForwardedRichTextContainer","contentProps","EditableText","__experimentalVersion","remainingProps","ResponsiveBlockControlLabel","desc","accessibleLabel","toggleLabel","onIsResponsiveChange","renderDefaultControl","renderResponsiveControls","isResponsive","defaultLabel","viewports","toggleControlLabel","toggleHelpText","defaultControl","RichTextShortcut","onUse","onUseRef","RichTextToolbarButton","shortcutType","shortcutCharacter","fillName","__unstableRichTextInputEvent","callbacks","selectIcon","editIcon","unitsProp","BaseUnitControl","URLInputButton","toggle","submitLink","buttonLabel","arrowLeft","LINK_DESTINATION_NONE","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_ATTACHMENT","NEW_TAB_REL","ImageURLInputUI","linkDestination","onChangeUrl","mediaUrl","mediaLink","linkTarget","linkClass","rel","showLightboxSetting","lightboxEnabled","onSetLightbox","resetLightbox","setIsOpen","urlInput","setUrlInput","stopEditLink","getLinkDestinations","linkDestinations","advancedOptions","updatedLinkTarget","newLinkTarget","updatedRel","rels","relVal","getUpdatedLinkTargetSettings","linkEditorValue","hideLightboxPanel","showLinkEditor","linkIcon","openLinkUI","onFocusOutside","autocompleteElement","closeLinkUI","linkDestinationInput","onSetHref","selectedDestination","lightbox","enabled","startEditLink","PreviewOptions","useResizeCanvas","deviceType","actualWidth","updateActualWidth","resizeListener","getCanvasWidth","device","deviceWidth","marginVertical","marginHorizontal","contentInlineStyles","SkipToSelectedBlock","MultiSelectionInspector","words","wordCount","TAB_SETTINGS","cog","TAB_STYLES","TAB_LIST_VIEW","AdvancedControls","PositionControlsPanel","setInitialOpen","multiSelectedBlocks","PositionControls","InspectorControlsGroups","SettingsTab","showAdvancedControls","StylesTab","borderPanelLabel","BlockStyles","allowlist","InspectorControlsTabs","initialTabName","useIsListViewTabDisabled","useInspectorControlsTabs","bindingsGroup","borderGroup","colorGroup","defaultGroup","dimensionsGroup","listGroup","positionGroup","stylesGroup","typographyGroup","effectsGroup","listViewDisabled","listFills","hasListFills","hasStyleFills","advancedFills","settingsFills","showTabs","tabSettings","getShowTabs","blockInspectorTabs","createPrivateSlotFill","BlockInfo","BlockQuickNavigation","BlockQuickNavigationItem","BlockStylesPanel","BlockInspectorLockedBlocks","topLevelLockedBlock","contentClientIds","BlockInspectorSingleBlockWrapper","wrapper","AnimatedContainer","blockInspectorAnimationSettings","animationOrigin","BlockInspectorSingleBlock","availableTabs","BlockVariationTransforms","BlockInspector","showNoBlockSelectedMessage","_selectedBlockClientId","_selectedBlockName","_blockType","globalBlockInspectorAnimationSettings","useBlockInspectorAnimationSettings","isSelectedBlockUnregistered","getUnregisteredTypeHandlerName","__unstableUseClipboardHandler","CopyHandler","PrivateInserterLibrary","MultiSelectScrollIntoView","isIE","arrowKeyCodes","initialTriggerPercentage","useTypewriter","scrollResizeRafId","onKeyDownRafId","caretRect","onScrollResize","computeCaretRectangle","maintainCaretPosition","isSelectionEligibleForScroll","currentCaretRect","scrollY","scrollContainerY","relativeScrollPosition","editableNodes","isLastEditableNode","scrollContainerHeight","addSelectionChangeListener","computeCaretRectOnSelectionChange","RenderedRefsContext","RecursionProvider","previouslyRenderedBlocks","newRenderedBlocks","addToBlockType","useHasRecursion","DeprecatedExperimentalRecursionProvider","DeprecatedExperimentalUseHasRecursion","InspectorPopoverHeader","PrivatePublishDateTimePicker","showPopoverHeaderActions","isCompact","currentDate","additionalProps","datePickerProps","startOfWeek","l10n","currentTime","DatePickerComponent","TimePicker","DateTimePicker","__experimentalGetElementClassName","useHasImageSettingsPanel","ImageSettingsPanel","lightboxChecked","newSetting","AdvancedPanel","cssError","setCSSError","customCSS","TextareaControl","spellCheck","globalStylesChangesCache","translationMap","h1","h2","h3","h4","h5","h6","getBlockNames","memoized","len","searchCache","maxSize","memoize","isObject","deepCompare","originalObject","parentPath","allKeys","diffs","changedPath","getGlobalStylesChangelist","changedValueTree","curr","translation","keyArray","getTranslation","getGlobalStylesChanges","changeList","changesLength","maxResults","changeValues","changeValuesLength","joinedChangesValue","addValuesForElement","addValuesForElements","StrictMode","addValuesForBlocks","getSaveElement","DEFAULT_SCALE_OPTIONS","ScaleTool","scaleHelp","reactPropsRegex","isPropValid","StyleSheet","_insertTag","tags","nextSibling","firstChild","isSpeedy","speedy","ctr","_proto","hydrate","createTextNode","createStyleElement","sheet","sheetForTag","insertRule","indexof","begin","characters","return","peek","caret","alloc","dealloc","delimit","whitespace","escaping","commenter","MS","MOZ","WEBKIT","COMMENT","DECLARATION","KEYFRAMES","hash","compile","rulesets","points","scanning","ampersand","reference","declaration","identifierWithPointTracking","fixedElements","compat","isImplicitRule","toRules","getRules","parentRules","removeLabel","defaultStylisPlugins","ssrStyles","_insert","stylisPlugins","inserted","nodesToHydrate","attrib","currentSheet","finalizingPlugins","serializer","shouldCache","registered","unitlessKeys","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","WebkitLineClamp","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","processStyleValue","cursor","handleInterpolation","mergedProps","interpolation","__emotion_styles","interpolated","createStringFromObject","previousCursor","labelPattern","EmotionCacheContext","ThemeContext","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","__emotion_forwardProp","createStyled","identifierName","targetClassName","__emotion_real","baseTag","__emotion_base","defaultShouldForwardProp","shouldUseAs","Styled","finalTag","classInterpolations","rawClassName","stringMode","strings","isStringTag","registerStyles","finalShouldForwardProp","ele","possiblyStyleElement","withComponent","nextTag","nextOptions","SingleColumnToolsPanelItem","_styled","WidthHeightTool","_value$width","_value$height","onDimensionChange","nextDimension","DEFAULT_SIZE_OPTIONS","getRichTextValues","skipFilters","fromHTMLString","PrivateQuickInserter","ResizableBoxPopover","resizableBoxProps","LayoutStyle","layoutStyle","BlockRemovalWarningModal","onConfirmRemoval","useLayoutStyles","DimensionsTool","defaultAspectRatio","scaleOptions","defaultScale","unitsOptions","tools","lastScale","setLastScale","lastAspectRatio","setLastAspectRatio","showScaleControl","nextAspectRatio","nextScale","ResolutionTool","__unstableBlockStyleVariationOverridesWithConfig","overridesWithConfig","newOverrides","overriddenClientIds","configStyles"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"./build/block-editor/index.min.js","mappings":"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EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,EAAK,IACL,EAAK,IACL,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,EAAI,IACJ,EAAI,IACJ,EAAI,IACJ,EAAI,KAGD3tB,EAAQhH,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,EACAC,EACApyD,EACAqyD,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAzL,EACA0L,EACAC,EACAC,EACAC,EACAC,EACAtE,EACAN,EACAQ,EACAC,EACAE,EACAZ,EACA8E,EACAC,EACAC,EACAC,EACAC,EACAC,EACAnE,EACAoE,EACAC,EACAC,GACAC,GACAC,GACAC,GACAjL,IACG3G,GACH,6BACA,4BACA,iCACA,kCACA,gCACA,8BACA,8BACA,+BACA,6BACA,4BACA,uBACA,wBACA,wBACA,uBACA,yBACA,4BACA,yBACA,2BACA,2BACA,kBACA,iBACA,mBACA,8BACA,4BACA,8BACA,+BACA,6BACA,gBACA,yBACA,uBACA,SACA,eACA,gBACA,eACA,eACA,eACA,uBACA,sBACA,sBACA,wBACA,uBACA,uBACA,uBACA,sBACA,wBACA,yBACA,wBACA,0BACA,yBACA,uBACA,mBACA,aACA,aACA,gBACA,eACA,UAmJD,OAAOoL,IAhJahB,EAAAA,EAAAA,UAAS,KACrB,CACNyB,WAAY,CACXyD,kBACAC,kBAED3jD,MAAO,CACN+gD,QAAS,CACRhhC,OAAQ+gC,EACRvvB,MAAOyvB,EACP/0D,QAASg1D,GAEVn9B,UAAW,CACV/D,OAAQylC,EACRj0B,MAAOk0B,EACPx5D,QAASy5D,GAEVO,QAAS,CACRlmC,OAAQslC,EACR9zB,MAAO+zB,EACPr5D,QAASs5D,GAEVhE,mBACAJ,iBACAZ,iBACAxgC,OAAQqlC,EACR9E,eAAgBqF,EAChBnF,gBACAP,WAAY2F,EACZxF,KAAMyF,GACN1F,QAAS4F,GACT7F,OAAQ8F,GACRpoD,KAAMkoD,IAEP5M,WAAY,CACX8G,aAAc,CACbjgC,OAAQ6jC,EACR33D,QAAS43D,EACTtyB,MAAOuyB,GAERrhC,UAAW,CACV1C,OAAQikC,EACR/3D,QAAS8zD,EACTxuB,MAAO0yB,GAERnE,iBACAC,iBAAkBgE,EAClBxL,YACAf,aACA9lD,aACAkvD,YACAH,cACAyD,iBACAE,gBACAC,gBACAF,eAEDtjD,QA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","sources":["webpack://wp/./node_modules/autosize/dist/autosize.js","webpack://wp/./node_modules/computed-style/dist/computedStyle.commonjs.js","webpack://wp/./node_modules/diff/src/diff/base.js","webpack://wp/./node_modules/diff/src/diff/character.js","webpack://wp/./node_modules/fast-deep-equal/es6/index.js","webpack://wp/./node_modules/fast-deep-equal/index.js","webpack://wp/./node_modules/line-height/lib/line-height.js","webpack://wp/./node_modules/normalize-wheel/index.js","webpack://wp/./node_modules/normalize-wheel/src/ExecutionEnvironment.js","webpack://wp/./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","webpack://wp/./node_modules/normalize-wheel/src/isEventSupported.js","webpack://wp/./node_modules/normalize-wheel/src/normalizeWheel.js","webpack://wp/./node_modules/picocolors/picocolors.browser.js","webpack://wp/./node_modules/postcss-prefix-selector/index.js","webpack://wp/./node_modules/postcss/lib/at-rule.js","webpack://wp/./node_modules/postcss/lib/comment.js","webpack://wp/./node_modules/postcss/lib/container.js","webpack://wp/./node_modules/postcss/lib/css-syntax-error.js","webpack://wp/./node_modules/postcss/lib/declaration.js","webpack://wp/./node_modules/postcss/lib/document.js","webpack://wp/./node_modules/postcss/lib/fromJSON.js","webpack://wp/./node_modules/postcss/lib/input.js","webpack://wp/./node_modules/postcss/lib/lazy-result.js","webpack://wp/./node_modules/postcss/lib/list.js","webpack://wp/./node_modules/postcss/lib/map-generator.js","webpack://wp/./node_modules/postcss/lib/no-work-result.js","webpack://wp/./node_modules/postcss/lib/node.js","webpack://wp/./node_modules/postcss/lib/parse.js","webpack://wp/./node_modules/postcss/lib/parser.js","webpack://wp/./node_modules/postcss/lib/postcss.js","webpack://wp/./node_modules/postcss/lib/previous-map.js","webpack://wp/./node_modules/postcss/lib/processor.js","webpack://wp/./node_modules/postcss/lib/result.js","webpack://wp/./node_modules/postcss/lib/root.js","webpack://wp/./node_modules/postcss/lib/rule.js","webpack://wp/./node_modules/postcss/lib/stringifier.js","webpack://wp/./node_modules/postcss/lib/stringify.js","webpack://wp/./node_modules/postcss/lib/symbols.js","webpack://wp/./node_modules/postcss/lib/tokenize.js","webpack://wp/./node_modules/postcss/lib/warn-once.js","webpack://wp/./node_modules/postcss/lib/warning.js","webpack://wp/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://wp/./node_modules/prop-types/index.js","webpack://wp/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://wp/./node_modules/react-autosize-textarea/lib/TextareaAutosize.js","webpack://wp/./node_modules/react-autosize-textarea/lib/index.js","webpack://wp/./node_modules/remove-accents/index.js","webpack://wp/./packages/block-editor/node_modules/postcss-urlrebase/index.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/index.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/parse.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/stringify.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/unit.js","webpack://wp/./packages/block-editor/node_modules/postcss-value-parser/lib/walk.js","webpack://wp/external window \"React\"","webpack://wp/./node_modules/nanoid/non-secure/index.cjs","webpack://wp/webpack/bootstrap","webpack://wp/webpack/runtime/compat get default export","webpack://wp/webpack/runtime/define property getters","webpack://wp/webpack/runtime/hasOwnProperty shorthand","webpack://wp/webpack/runtime/make namespace object","webpack://wp/external window [\"wp\",\"blocks\"]","webpack://wp/external window [\"wp\",\"element\"]","webpack://wp/external window [\"wp\",\"data\"]","webpack://wp/external window [\"wp\",\"compose\"]","webpack://wp/external window [\"wp\",\"hooks\"]","../../packages/block-editor/src/components/block-edit/context.js","webpack://wp/external window [\"wp\",\"deprecated\"]","webpack://wp/external window [\"wp\",\"i18n\"]","../../packages/block-editor/src/store/defaults.js","../../packages/block-editor/src/store/array.js","../../packages/block-editor/src/store/reducer.js","webpack://wp/external window [\"wp\",\"primitives\"]","webpack://wp/external window \"ReactJSXRuntime\"","../../packages/icons/src/library/symbol.js","webpack://wp/external window [\"wp\",\"richText\"]","webpack://wp/external window [\"wp\",\"blockSerializationDefaultParser\"]","../../packages/block-editor/src/store/private-keys.js","webpack://wp/external window [\"wp\",\"privateApis\"]","../../packages/block-editor/src/lock-unlock.js","../../packages/block-editor/src/store/constants.js","../../packages/block-editor/src/store/utils.js","../../packages/block-editor/src/utils/sorting.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/utils.js","../../packages/block-editor/src/utils/object.js","../../packages/block-editor/src/store/get-block-settings.js","../../packages/block-editor/src/store/private-selectors.js","../../packages/block-editor/src/store/selectors.js","../../packages/block-editor/src/store/private-actions.js","webpack://wp/external window [\"wp\",\"a11y\"]","webpack://wp/external window [\"wp\",\"notices\"]","../../packages/block-editor/src/utils/selection.js","../../packages/block-editor/src/store/actions.js","../../packages/block-editor/src/store/index.js","../../packages/block-editor/src/components/use-settings/index.js","webpack://wp/external window [\"wp\",\"styleEngine\"]","../../packages/block-editor/src/components/font-sizes/fluid-utils.js","../../packages/block-editor/src/utils/format-font-weight.js","../../packages/block-editor/src/utils/get-font-styles-and-weights.js","../../packages/block-editor/src/utils/format-font-style.js","../../packages/block-editor/src/components/global-styles/typography-utils.js","../../packages/block-editor/src/components/global-styles/utils.js","../../packages/block-editor/src/components/global-styles/context.js","../../packages/block-editor/src/components/global-styles/hooks.js","webpack://wp/./node_modules/clsx/dist/clsx.mjs","../../packages/block-editor/src/hooks/utils.js","../../packages/block-editor/src/hooks/compat.js","webpack://wp/external window [\"wp\",\"components\"]","../../packages/block-editor/src/components/block-controls/groups.js","../../packages/block-editor/src/components/block-controls/fill.js","../../packages/block-editor/src/components/block-controls/hook.js","webpack://wp/external window [\"wp\",\"warning\"]","../../packages/block-editor/src/components/block-controls/slot.js","../../packages/block-editor/src/components/block-controls/index.js","../../packages/icons/src/library/justify-left.js","../../packages/icons/src/library/justify-center.js","../../packages/icons/src/library/justify-right.js","../../packages/icons/src/library/justify-space-between.js","../../packages/icons/src/library/justify-stretch.js","../../packages/icons/src/library/arrow-right.js","../../packages/icons/src/library/arrow-down.js","../../packages/block-editor/src/layouts/definitions.js","../../packages/block-editor/src/layouts/utils.js","../../packages/icons/src/library/sides-all.js","../../packages/icons/src/library/sides-horizontal.js","../../packages/icons/src/library/sides-vertical.js","../../packages/icons/src/library/sides-top.js","../../packages/icons/src/library/sides-right.js","../../packages/icons/src/library/sides-bottom.js","../../packages/icons/src/library/sides-left.js","../../packages/block-editor/src/components/spacing-sizes-control/utils.js","../../packages/block-editor/src/hooks/gap.js","../../packages/block-editor/src/components/block-vertical-alignment-control/icons.js","../../packages/block-editor/src/components/block-vertical-alignment-control/ui.js","../../packages/block-editor/src/components/block-vertical-alignment-control/index.js","../../packages/block-editor/src/components/justify-content-control/ui.js","../../packages/block-editor/src/components/justify-content-control/index.js","../../packages/block-editor/src/layouts/flex.js","../../packages/block-editor/src/layouts/flow.js","../../packages/icons/src/icon/index.js","../../packages/icons/src/library/align-none.js","../../packages/icons/src/library/stretch-wide.js","../../packages/block-editor/src/layouts/constrained.js","../../packages/block-editor/src/layouts/grid.js","../../packages/block-editor/src/layouts/index.js","../../packages/block-editor/src/components/block-list/layout.js","../../packages/block-editor/src/components/block-alignment-control/use-available-alignments.js","../../packages/icons/src/library/position-left.js","../../packages/icons/src/library/position-center.js","../../packages/icons/src/library/position-right.js","../../packages/icons/src/library/stretch-full-width.js","../../packages/block-editor/src/components/block-alignment-control/constants.js","../../packages/block-editor/src/components/block-alignment-control/ui.js","../../packages/block-editor/src/components/block-alignment-control/index.js","../../packages/block-editor/src/components/block-editing-mode/index.js","../../packages/block-editor/src/hooks/align.js","../../packages/block-editor/src/components/inspector-controls/groups.js","../../packages/block-editor/src/components/inspector-controls/fill.js","../../packages/block-editor/src/components/inspector-controls/block-support-tools-panel.js","../../packages/block-editor/src/components/inspector-controls/block-support-slot-container.js","../../packages/block-editor/src/components/inspector-controls/slot.js","../../packages/block-editor/src/components/inspector-controls/index.js","webpack://wp/external window [\"wp\",\"url\"]","webpack://wp/external window [\"wp\",\"dom\"]","webpack://wp/external window [\"wp\",\"blob\"]","webpack://wp/external window [\"wp\",\"keycodes\"]","../../packages/icons/src/library/media.js","../../packages/icons/src/library/upload.js","../../packages/icons/src/library/post-featured-image.js","../../packages/block-editor/src/components/media-upload/index.js","../../packages/block-editor/src/components/media-upload/check.js","webpack://wp/external window [\"wp\",\"isShallowEqual\"]","webpack://wp/external window [\"wp\",\"preferences\"]","../../packages/icons/src/library/keyboard-return.js","../../packages/icons/src/library/chevron-left-small.js","../../packages/icons/src/library/chevron-right-small.js","../../packages/block-editor/src/components/link-control/settings-drawer.js","../../packages/block-editor/src/components/url-input/index.js","../../packages/icons/src/library/plus.js","../../packages/block-editor/src/components/link-control/search-create-button.js","../../packages/icons/src/library/post-list.js","../../packages/icons/src/library/page.js","../../packages/icons/src/library/tag.js","../../packages/icons/src/library/category.js","../../packages/icons/src/library/file.js","../../packages/icons/src/library/globe.js","../../packages/icons/src/library/home.js","../../packages/icons/src/library/verse.js","../../packages/block-editor/src/components/link-control/search-item.js","../../packages/block-editor/src/components/link-control/constants.js","../../packages/block-editor/src/components/link-control/search-results.js","../../packages/block-editor/src/components/link-control/is-url-like.js","../../packages/block-editor/src/components/link-control/use-search-handler.js","../../packages/block-editor/src/components/link-control/search-input.js","../../packages/icons/src/library/info.js","../../packages/icons/src/library/edit.js","../../packages/icons/src/library/pencil.js","../../packages/icons/src/library/link-off.js","../../packages/icons/src/library/copy-small.js","../../packages/block-editor/src/components/link-control/viewer-slot.js","../../packages/block-editor/src/components/link-control/use-rich-url-data.js","../../packages/block-editor/src/components/link-control/link-preview.js","../../packages/block-editor/src/components/link-control/settings.js","../../packages/block-editor/src/components/link-control/index.js","../../packages/block-editor/src/components/link-control/use-internal-value.js","../../packages/block-editor/src/components/link-control/use-create-page.js","../../packages/block-editor/src/components/media-replace-flow/index.js","../../packages/block-editor/src/components/background-image-control/index.js","../../packages/block-editor/src/components/global-styles/background-panel.js","../../packages/block-editor/src/hooks/background.js","../../packages/block-editor/src/hooks/lock.js","../../packages/block-editor/src/hooks/anchor.js","../../packages/block-editor/src/hooks/aria-label.js","../../packages/block-editor/src/hooks/custom-class-name.js","../../packages/block-editor/src/hooks/generated-class-name.js","webpack://wp/./node_modules/colord/index.mjs","webpack://wp/./node_modules/colord/plugins/names.mjs","webpack://wp/./node_modules/colord/plugins/a11y.mjs","../../packages/block-editor/src/components/colors/utils.js","../../packages/block-editor/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js","../../packages/block-editor/src/components/border-radius-control/utils.js","../../packages/block-editor/src/components/border-radius-control/all-input-control.js","../../packages/block-editor/src/components/border-radius-control/input-controls.js","../../packages/icons/src/library/link.js","../../packages/block-editor/src/components/border-radius-control/linked-button.js","../../packages/block-editor/src/components/border-radius-control/index.js","../../packages/icons/src/library/check.js","../../packages/icons/src/library/shadow.js","../../packages/block-editor/src/components/global-styles/shadow-panel-components.js","../../packages/block-editor/src/components/global-styles/border-panel.js","../../packages/block-editor/src/hooks/border.js","../../packages/block-editor/src/components/gradients/use-gradient.js","../../packages/block-editor/src/components/colors-gradients/control.js","../../packages/block-editor/src/components/global-styles/color-panel.js","../../packages/block-editor/src/components/contrast-checker/index.js","../../packages/block-editor/src/components/provider/block-refs-provider.js","../../packages/block-editor/src/components/block-list/use-block-props/use-block-refs.js","../../packages/block-editor/src/hooks/contrast-checker.js","../../packages/block-editor/src/hooks/color.js","../../packages/block-editor/src/components/font-family/index.js","../../packages/block-editor/src/components/font-appearance-control/index.js","../../packages/block-editor/src/components/line-height-control/utils.js","../../packages/block-editor/src/components/line-height-control/index.js","../../packages/block-editor/src/components/letter-spacing-control/index.js","../../packages/icons/src/library/align-left.js","../../packages/icons/src/library/align-center.js","../../packages/icons/src/library/align-right.js","../../packages/icons/src/library/align-justify.js","../../packages/block-editor/src/components/text-alignment-control/index.js","../../packages/icons/src/library/reset.js","../../packages/icons/src/library/format-uppercase.js","../../packages/icons/src/library/format-lowercase.js","../../packages/icons/src/library/format-capitalize.js","../../packages/block-editor/src/components/text-transform-control/index.js","../../packages/icons/src/library/format-underline.js","../../packages/icons/src/library/format-strikethrough.js","../../packages/block-editor/src/components/text-decoration-control/index.js","../../packages/icons/src/library/text-horizontal.js","../../packages/icons/src/library/text-vertical.js","../../packages/block-editor/src/components/writing-mode-control/index.js","../../packages/block-editor/src/components/global-styles/typography-panel.js","../../packages/block-editor/src/hooks/line-height.js","webpack://wp/external window [\"wp\",\"tokenList\"]","../../packages/block-editor/src/hooks/font-family.js","../../packages/block-editor/src/components/font-sizes/utils.js","../../packages/block-editor/src/hooks/font-size.js","../../packages/block-editor/src/components/alignment-control/ui.js","../../packages/block-editor/src/components/alignment-control/index.js","../../packages/block-editor/src/hooks/text-align.js","../../packages/block-editor/src/hooks/typography.js","../../packages/icons/src/library/settings.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/spacing-input-control.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/axial.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/separated.js","../../packages/block-editor/src/components/spacing-sizes-control/input-controls/single.js","../../packages/block-editor/src/components/spacing-sizes-control/linked-button.js","../../packages/block-editor/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js","../../packages/block-editor/src/components/spacing-sizes-control/index.js","../../packages/block-editor/src/components/height-control/index.js","../../packages/block-editor/src/components/grid/use-get-number-of-blocks-before-cell.js","../../packages/block-editor/src/components/child-layout-control/index.js","../../packages/block-editor/src/components/dimensions-tool/aspect-ratio-tool.js","../../packages/block-editor/src/components/global-styles/dimensions-panel.js","../../packages/block-editor/src/components/block-popover/use-popover-scroll.js","../../packages/block-editor/src/utils/dom.js","../../packages/block-editor/src/components/block-popover/index.js","../../packages/block-editor/src/components/block-popover/cover.js","../../packages/block-editor/src/hooks/spacing-visualizer.js","../../packages/block-editor/src/hooks/dimensions.js","../../packages/block-editor/src/hooks/style.js","../../packages/block-editor/src/hooks/settings.js","../../packages/icons/src/library/filter.js","../../packages/block-editor/src/components/duotone-control/index.js","../../packages/block-editor/src/components/duotone/utils.js","../../packages/block-editor/src/components/global-styles/get-block-css-selector.js","../../packages/block-editor/src/components/global-styles/filters-panel.js","../../packages/block-editor/src/hooks/duotone.js","../../packages/block-editor/src/components/use-block-display-information/index.js","../../packages/block-editor/src/hooks/position.js","../../packages/block-editor/src/components/global-styles/use-global-styles-output.js","../../packages/block-editor/src/hooks/block-style-variation.js","../../packages/block-editor/src/hooks/layout.js","../../packages/block-editor/src/components/grid/utils.js","../../packages/block-editor/src/components/inserter/tips.js","../../packages/icons/src/library/chevron-right.js","../../packages/icons/src/library/chevron-left.js","../../packages/icons/src/library/block-default.js","../../packages/block-editor/src/components/block-icon/index.js","../../packages/block-editor/src/components/block-card/index.js","../../packages/block-editor/src/components/provider/with-registry-provider.js","../../packages/block-editor/src/components/provider/use-block-sync.js","webpack://wp/external window [\"wp\",\"keyboardShortcuts\"]","../../packages/block-editor/src/components/keyboard-shortcuts/index.js","../../packages/block-editor/src/components/provider/index.js","../../packages/block-editor/src/components/block-context/index.js","../../packages/block-editor/src/components/block-edit/edit.js","../../packages/icons/src/library/more-vertical.js","../../packages/block-editor/src/components/warning/index.js","../../packages/block-editor/src/components/block-edit/multiple-usage-warning.js","../../packages/block-editor/src/components/block-list/private-block-context.js","../../packages/block-editor/src/components/block-edit/index.js","../../packages/block-editor/src/components/block-compare/block-view.js","../../packages/block-editor/src/components/block-compare/index.js","../../packages/block-editor/src/components/block-list/block-invalid-warning.js","../../packages/block-editor/src/components/block-list/block-crash-warning.js","../../packages/block-editor/src/components/block-list/block-crash-boundary.js","../../packages/block-editor/src/components/block-list/block-html.js","webpack://wp/./node_modules/@react-spring/rafz/dist/react-spring-rafz.esm.js","webpack://wp/./node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","webpack://wp/./node_modules/@react-spring/animated/dist/react-spring-animated.esm.js","webpack://wp/./node_modules/@react-spring/core/dist/react-spring-core.esm.js","webpack://wp/external window \"ReactDOM\"","webpack://wp/./node_modules/@react-spring/web/dist/react-spring-web.esm.js","../../packages/block-editor/src/components/use-moving-animation/index.js","../../packages/block-editor/src/components/block-list/use-block-props/use-focus-first-element.js","../../packages/block-editor/src/components/block-list/use-block-props/use-is-hovered.js","../../packages/block-editor/src/components/block-list/use-block-props/use-focus-handler.js","../../packages/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js","../../packages/block-editor/src/components/block-list/use-block-props/use-nav-mode-exit.js","../../packages/block-editor/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js","../../packages/block-editor/src/components/block-list/use-block-props/use-intersection-observer.js","../../packages/block-editor/src/components/block-list/use-block-props/use-scroll-into-view.js","../../packages/block-editor/src/components/use-flash-editable-blocks/index.js","../../packages/block-editor/src/hooks/use-bindings-attributes.js","../../packages/block-editor/src/components/block-list/use-block-props/index.js","../../packages/block-editor/src/components/block-list/block.js","webpack://wp/external window [\"wp\",\"htmlEntities\"]","../../packages/block-editor/src/components/default-block-appender/index.js","../../packages/block-editor/src/components/block-list-appender/index.js","../../packages/block-editor/src/components/block-popover/inbetween.js","../../packages/block-editor/src/components/block-popover/drop-zone.js","../../packages/block-editor/src/components/block-tools/insertion-point.js","../../packages/block-editor/src/components/block-list/use-in-between-inserter.js","../../packages/block-editor/src/components/block-selection-clearer/index.js","../../packages/block-editor/src/components/inner-blocks/use-nested-settings-update.js","../../packages/block-editor/src/components/use-on-block-drop/index.js","../../packages/block-editor/src/utils/math.js","../../packages/block-editor/src/components/use-block-drop-zone/index.js","../../packages/block-editor/src/components/inner-blocks/index.js","../../packages/block-editor/src/components/inner-blocks/use-block-context.js","../../packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js","../../packages/block-editor/src/components/inner-blocks/default-block-appender.js","../../packages/block-editor/src/components/inner-blocks/button-block-appender.js","../../packages/block-editor/src/components/observe-typing/index.js","../../packages/block-editor/src/components/block-list/zoom-out-separator.js","../../packages/block-editor/src/components/block-list/index.js","../../packages/block-editor/src/components/writing-flow/use-multi-selection.js","../../packages/block-editor/src/components/writing-flow/use-arrow-nav.js","../../packages/block-editor/src/components/writing-flow/use-select-all.js","../../packages/block-editor/src/components/writing-flow/use-drag-selection.js","../../packages/block-editor/src/components/writing-flow/use-selection-observer.js","../../packages/block-editor/src/components/writing-flow/use-click-selection.js","../../packages/block-editor/src/components/writing-flow/use-input.js","../../packages/block-editor/src/utils/use-notify-copy.js","../../packages/block-editor/src/utils/pasting.js","../../packages/block-editor/src/components/writing-flow/utils.js","../../packages/block-editor/src/components/writing-flow/use-clipboard-handler.js","../../packages/block-editor/src/components/writing-flow/index.js","../../packages/block-editor/src/components/writing-flow/use-tab-nav.js","../../packages/block-editor/src/components/iframe/get-compatibility-styles.js","../../packages/block-editor/src/components/iframe/index.js","webpack://wp/./node_modules/parsel-js/dist/parsel.js","webpack://wp/./node_modules/postcss/lib/postcss.mjs","../../packages/block-editor/src/utils/transform-styles/index.js","../../packages/block-editor/src/components/editor-styles/index.js","../../packages/block-editor/src/components/block-preview/auto.js","../../packages/block-editor/src/components/block-preview/index.js","../../packages/block-editor/src/components/inserter/preview-panel.js","../../packages/block-editor/src/components/inserter-listbox/item.js","../../packages/icons/src/library/drag-handle.js","../../packages/block-editor/src/components/block-draggable/draggable-chip.js","../../packages/block-editor/src/components/inserter-draggable-blocks/index.js","../../packages/block-editor/src/components/inserter-list-item/index.js","../../packages/block-editor/src/components/inserter-listbox/group.js","../../packages/block-editor/src/components/inserter-listbox/row.js","../../packages/block-editor/src/components/block-types-list/index.js","../../packages/block-editor/src/components/inserter/panel.js","../../packages/block-editor/src/components/inserter/hooks/use-block-types-state.js","../../packages/block-editor/src/components/inserter-listbox/index.js","../../packages/block-editor/src/components/inserter/no-results.js","../../packages/block-editor/src/components/inserter/block-types-tab.js","../../packages/block-editor/src/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js","../../packages/block-editor/src/components/block-patterns-paging/index.js","../../packages/block-editor/src/components/block-patterns-list/index.js","../../packages/block-editor/src/components/inserter/hooks/use-insertion-point.js","../../packages/block-editor/src/components/inserter/hooks/use-patterns-state.js","webpack://wp/./node_modules/lower-case/src/index.ts","webpack://wp/./node_modules/no-case/src/index.ts","../../packages/block-editor/src/components/inserter/search-items.js","../../packages/block-editor/src/components/inserter/hooks/use-patterns-paging.js","../../packages/block-editor/src/components/inserter/block-patterns-explorer/pattern-list.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/use-pattern-categories.js","../../packages/block-editor/src/components/inserter/block-patterns-explorer/index.js","../../packages/block-editor/src/components/inserter/mobile-tab-navigation.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/patterns-filter.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js","../../packages/block-editor/src/components/inserter/category-tabs/index.js","../../packages/block-editor/src/components/inserter/block-patterns-tab/index.js","../../packages/icons/src/library/external.js","../../packages/block-editor/src/components/inserter/media-tab/utils.js","../../packages/block-editor/src/components/inserter/media-tab/media-preview.js","../../packages/block-editor/src/components/inserter/media-tab/media-list.js","../../packages/block-editor/src/components/inserter/media-tab/media-panel.js","../../packages/block-editor/src/components/inserter/media-tab/hooks.js","../../packages/block-editor/src/components/inserter/media-tab/media-tab.js","../../packages/block-editor/src/components/inserter-menu-extension/index.js","../../packages/block-editor/src/utils/order-inserter-block-items.js","../../packages/block-editor/src/components/inserter/search-results.js","../../packages/icons/src/library/close-small.js","../../packages/block-editor/src/components/tabbed-sidebar/index.js","../../packages/block-editor/src/components/inserter/menu.js","../../packages/block-editor/src/components/inserter/quick-inserter.js","../../packages/block-editor/src/components/inserter/index.js","../../packages/block-editor/src/components/button-block-appender/index.js","../../packages/block-editor/src/components/grid/grid-visualizer.js","../../packages/block-editor/src/components/grid/grid-item-resizer.js","../../packages/icons/src/library/chevron-up.js","../../packages/icons/src/library/chevron-down.js","../../packages/block-editor/src/components/grid/grid-item-movers.js","../../packages/block-editor/src/hooks/layout-child.js","../../packages/block-editor/src/hooks/content-lock-ui.js","../../packages/block-editor/src/hooks/metadata.js","../../packages/block-editor/src/hooks/block-hooks.js","../../packages/block-editor/src/utils/block-bindings.js","../../packages/block-editor/src/hooks/block-bindings.js","../../packages/block-editor/src/components/grid/use-grid-layout-sync.js","../../packages/block-editor/src/hooks/grid-visualizer.js","../../packages/block-editor/src/hooks/block-renaming.js","../../packages/block-editor/src/hooks/use-border-props.js","../../packages/block-editor/src/hooks/use-shadow-props.js","../../packages/block-editor/src/hooks/use-color-props.js","../../packages/block-editor/src/hooks/use-spacing-props.js","../../packages/block-editor/src/hooks/use-typography-props.js","../../packages/block-editor/src/hooks/use-cached-truthy.js","../../packages/block-editor/src/hooks/use-zoom-out.js","../../packages/block-editor/src/hooks/index.js","../../packages/block-editor/src/components/colors/with-colors.js","../../packages/block-editor/src/components/font-sizes/font-size-picker.js","../../packages/block-editor/src/components/font-sizes/with-font-sizes.js","../../packages/block-editor/src/autocompleters/block.js","webpack://wp/external window [\"wp\",\"apiFetch\"]","../../packages/icons/src/library/post.js","../../packages/block-editor/src/autocompleters/link.js","../../packages/block-editor/src/components/autocomplete/index.js","../../packages/icons/src/library/fullscreen.js","../../packages/block-editor/src/components/block-full-height-alignment-control/index.js","../../packages/block-editor/src/components/block-alignment-matrix-control/index.js","../../packages/block-editor/src/components/block-title/use-block-display-title.js","../../packages/block-editor/src/components/block-title/index.js","../../packages/block-editor/src/utils/get-editor-region.js","../../packages/block-editor/src/components/block-breadcrumb/index.js","../../packages/block-editor/src/components/block-content-overlay/index.js","../../packages/block-editor/src/components/block-tools/use-block-toolbar-popover-props.js","../../packages/block-editor/src/components/block-tools/use-selected-block-tool-props.js","../../packages/block-editor/src/components/block-tools/empty-block-inserter.js","../../packages/block-editor/src/components/block-draggable/index.js","../../packages/block-editor/src/components/block-draggable/use-scroll-when-dragging.js","../../packages/block-editor/src/components/block-mover/mover-description.js","../../packages/block-editor/src/components/block-mover/button.js","../../packages/block-editor/src/components/block-mover/index.js","../../packages/block-editor/src/components/block-toolbar/utils.js","../../packages/block-editor/src/components/block-parent-selector/index.js","../../packages/icons/src/library/copy.js","../../packages/block-editor/src/components/block-switcher/preview-block-popover.js","../../packages/block-editor/src/components/block-switcher/block-variation-transformations.js","../../packages/block-editor/src/components/block-switcher/block-transformations-menu.js","../../packages/block-editor/src/components/block-styles/utils.js","../../packages/block-editor/src/components/block-styles/use-styles-for-block.js","../../packages/block-editor/src/components/block-styles/menu-items.js","../../packages/block-editor/src/components/block-switcher/block-styles-menu.js","../../packages/block-editor/src/components/block-switcher/utils.js","../../packages/block-editor/src/components/block-switcher/use-transformed-patterns.js","../../packages/block-editor/src/components/block-switcher/pattern-transformations-menu.js","../../packages/block-editor/src/components/block-switcher/index.js","../../packages/block-editor/src/components/block-toolbar/block-toolbar-last-item.js","../../packages/block-editor/src/hooks/supports.js","../../packages/block-editor/src/components/use-paste-styles/index.js","../../packages/block-editor/src/components/block-actions/index.js","../../packages/block-editor/src/components/block-settings-menu/block-html-convert-button.js","../../packages/block-editor/src/components/block-settings-menu/block-settings-menu-first-item.js","../../packages/block-editor/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js","../../packages/block-editor/src/components/convert-to-group-buttons/index.js","../../packages/block-editor/src/components/block-lock/use-block-lock.js","../../packages/icons/src/library/unlock.js","../../packages/icons/src/library/lock-outline.js","../../packages/icons/src/library/lock.js","../../packages/block-editor/src/components/block-lock/modal.js","../../packages/block-editor/src/components/block-lock/menu-item.js","../../packages/block-editor/src/components/block-settings-menu/block-mode-toggle.js","../../packages/block-editor/src/components/content-lock/modify-content-lock-menu-item.js","../../packages/block-editor/src/components/block-rename/is-empty-string.js","../../packages/block-editor/src/components/block-rename/modal.js","../../packages/block-editor/src/components/block-rename/rename-control.js","../../packages/block-editor/src/components/block-settings-menu-controls/index.js","../../packages/block-editor/src/components/block-rename/use-block-rename.js","../../packages/block-editor/src/components/block-settings-menu/block-parent-selector-menu-item.js","../../packages/block-editor/src/components/block-settings-menu/block-settings-dropdown.js","../../packages/block-editor/src/components/block-settings-menu/index.js","../../packages/block-editor/src/components/block-lock/toolbar.js","../../packages/icons/src/library/group.js","../../packages/icons/src/library/row.js","../../packages/icons/src/library/stack.js","../../packages/icons/src/library/grid.js","../../packages/block-editor/src/components/convert-to-group-buttons/toolbar.js","../../packages/block-editor/src/components/block-edit-visually-button/index.js","../../packages/block-editor/src/components/block-toolbar/block-name-context.js","../../packages/block-editor/src/components/navigable-toolbar/index.js","../../packages/block-editor/src/components/block-controls/use-has-block-controls.js","../../packages/block-editor/src/components/block-toolbar/use-has-block-toolbar.js","../../packages/block-editor/src/components/block-toolbar/index.js","../../packages/block-editor/src/components/block-tools/block-toolbar-popover.js","../../packages/block-editor/src/components/block-tools/block-selection-button.js","../../packages/block-editor/src/components/block-tools/block-toolbar-breadcrumb.js","../../packages/icons/src/library/trash.js","../../packages/icons/src/library/shuffle.js","../../packages/block-editor/src/components/block-toolbar/shuffle.js","../../packages/block-editor/src/components/block-tools/zoom-out-toolbar.js","../../packages/block-editor/src/components/block-tools/zoom-out-popover.js","../../packages/block-editor/src/components/block-tools/zoom-out-mode-inserter-button.js","../../packages/block-editor/src/components/block-tools/zoom-out-mode-inserters.js","../../packages/block-editor/src/components/block-tools/index.js","../../packages/block-editor/src/components/block-tools/use-show-block-tools.js","webpack://wp/external window [\"wp\",\"commands\"]","../../packages/icons/src/library/move-to.js","../../packages/icons/src/library/ungroup.js","../../packages/block-editor/src/components/use-block-commands/index.js","../../packages/block-editor/src/components/block-canvas/index.js","../../packages/block-editor/src/components/color-style-selector/index.js","../../packages/icons/src/library/list-view.js","../../packages/block-editor/src/components/list-view/context.js","../../packages/block-editor/src/components/list-view/aria-referenced-text.js","../../packages/block-editor/src/components/list-view/appender.js","../../packages/block-editor/src/components/list-view/leaf.js","../../packages/icons/src/library/pin-small.js","../../packages/icons/src/library/lock-small.js","../../packages/block-editor/src/components/list-view/expander.js","../../packages/block-editor/src/components/list-view/use-list-view-images.js","../../packages/block-editor/src/components/list-view/block-select-button.js","../../packages/block-editor/src/components/list-view/block-contents.js","../../packages/block-editor/src/components/list-view/utils.js","../../packages/block-editor/src/components/list-view/block.js","../../packages/block-editor/src/components/list-view/use-list-view-scroll-into-view.js","../../packages/block-editor/src/components/list-view/branch.js","../../packages/block-editor/src/components/list-view/drop-indicator.js","../../packages/block-editor/src/components/list-view/use-list-view-drop-zone.js","../../packages/block-editor/src/components/list-view/index.js","../../packages/block-editor/src/components/list-view/use-list-view-client-ids.js","../../packages/block-editor/src/components/list-view/use-list-view-block-indexes.js","../../packages/block-editor/src/components/list-view/use-block-selection.js","../../packages/block-editor/src/components/list-view/use-list-view-expand-selected-item.js","../../packages/block-editor/src/components/list-view/use-clipboard-handler.js","../../packages/block-editor/src/components/list-view/use-list-view-collapse-items.js","../../packages/block-editor/src/components/block-navigation/dropdown.js","../../packages/block-editor/src/components/block-styles/preview-panel.js","../../packages/block-editor/src/components/block-styles/index.js","../../packages/block-editor/src/components/block-heading-level-dropdown/heading-level-icon.js","../../packages/icons/src/library/paragraph.js","../../packages/icons/src/library/heading-level-1.js","../../packages/icons/src/library/heading-level-2.js","../../packages/icons/src/library/heading-level-3.js","../../packages/icons/src/library/heading-level-4.js","../../packages/icons/src/library/heading-level-5.js","../../packages/icons/src/library/heading-level-6.js","../../packages/block-editor/src/components/block-heading-level-dropdown/index.js","../../packages/icons/src/library/layout.js","../../packages/block-editor/src/components/block-variation-picker/index.js","../../packages/block-editor/src/components/block-pattern-setup/constants.js","../../packages/block-editor/src/components/block-pattern-setup/setup-toolbar.js","../../packages/block-editor/src/components/block-pattern-setup/index.js","../../packages/block-editor/src/components/block-pattern-setup/use-patterns-setup.js","../../packages/block-editor/src/components/block-variation-transforms/index.js","../../packages/block-editor/src/components/color-palette/with-color-context.js","../../packages/block-editor/src/components/color-palette/index.js","../../packages/block-editor/src/components/color-palette/control.js","webpack://wp/external window [\"wp\",\"date\"]","../../packages/block-editor/src/components/date-format-picker/index.js","../../packages/block-editor/src/components/colors-gradients/dropdown.js","../../packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js","../../packages/icons/src/library/aspect-ratio.js","../../packages/block-editor/src/components/image-editor/constants.js","../../packages/block-editor/src/components/image-editor/context.js","../../packages/block-editor/src/components/image-editor/use-transform-image.js","../../packages/block-editor/src/components/image-editor/use-save-image.js","../../packages/block-editor/src/components/image-editor/aspect-ratio-dropdown.js","webpack://wp/./packages/block-editor/node_modules/tslib/tslib.es6.js","webpack://wp/./packages/block-editor/node_modules/src/helpers.ts","webpack://wp/./packages/block-editor/node_modules/src/Cropper.tsx","../../packages/block-editor/src/components/image-editor/cropper.js","../../packages/icons/src/library/search.js","../../packages/block-editor/src/components/image-editor/zoom-dropdown.js","../../packages/icons/src/library/rotate-right.js","../../packages/block-editor/src/components/image-editor/rotation-button.js","../../packages/block-editor/src/components/image-editor/form-controls.js","../../packages/block-editor/src/components/image-editor/index.js","../../packages/block-editor/src/components/image-size-control/index.js","../../packages/block-editor/src/components/image-size-control/use-dimension-handler.js","../../packages/block-editor/src/components/url-popover/link-viewer-url.js","../../packages/block-editor/src/components/url-popover/index.js","../../packages/block-editor/src/components/url-popover/link-editor.js","../../packages/block-editor/src/components/url-popover/link-viewer.js","../../packages/block-editor/src/components/media-placeholder/index.js","../../packages/block-editor/src/components/panel-color-settings/index.js","../../packages/block-editor/src/components/rich-text/format-toolbar/index.js","../../packages/block-editor/src/components/rich-text/format-toolbar-container.js","../../packages/block-editor/src/components/rich-text/use-format-types.js","../../packages/block-editor/src/components/rich-text/event-listeners/before-input-rules.js","../../packages/block-editor/src/components/rich-text/event-listeners/input-rules.js","../../packages/block-editor/src/components/rich-text/utils.js","../../packages/block-editor/src/components/rich-text/event-listeners/paste-handler.js","../../packages/block-editor/src/components/rich-text/event-listeners/index.js","../../packages/block-editor/src/components/rich-text/prevent-event-discovery.js","../../packages/block-editor/src/components/rich-text/event-listeners/insert-replacement-text.js","../../packages/block-editor/src/components/rich-text/event-listeners/remove-browser-shortcuts.js","../../packages/block-editor/src/components/rich-text/event-listeners/shortcuts.js","../../packages/block-editor/src/components/rich-text/event-listeners/input-events.js","../../packages/block-editor/src/components/rich-text/event-listeners/undo-automatic-change.js","../../packages/block-editor/src/components/rich-text/event-listeners/delete.js","../../packages/block-editor/src/components/rich-text/event-listeners/enter.js","../../packages/block-editor/src/components/rich-text/event-listeners/firefox-compat.js","../../packages/block-editor/src/components/rich-text/format-edit.js","../../packages/block-editor/src/components/rich-text/content.js","../../packages/block-editor/src/components/rich-text/multiline.js","../../packages/block-editor/src/components/rich-text/index.js","../../packages/block-editor/src/components/rich-text/use-mark-persistent.js","../../packages/block-editor/src/components/rich-text/with-deprecations.js","../../packages/block-editor/src/components/editable-text/index.js","../../packages/block-editor/src/components/plain-text/index.js","../../packages/block-editor/src/components/responsive-block-control/label.js","../../packages/block-editor/src/components/responsive-block-control/index.js","../../packages/block-editor/src/components/rich-text/shortcut.js","../../packages/block-editor/src/components/rich-text/toolbar-button.js","../../packages/block-editor/src/components/rich-text/input-event.js","../../packages/block-editor/src/components/tool-selector/index.js","../../packages/block-editor/src/components/unit-control/index.js","../../packages/icons/src/library/arrow-left.js","../../packages/block-editor/src/components/url-input/button.js","../../packages/icons/src/library/image.js","../../packages/block-editor/src/components/url-popover/image-url-input-ui.js","../../packages/block-editor/src/components/preview-options/index.js","../../packages/block-editor/src/components/use-resize-canvas/index.js","../../packages/block-editor/src/components/skip-to-selected-block/index.js","webpack://wp/external window [\"wp\",\"wordcount\"]","../../packages/block-editor/src/components/multi-selection-inspector/index.js","../../packages/icons/src/library/cog.js","../../packages/icons/src/library/styles.js","../../packages/block-editor/src/components/inspector-controls-tabs/utils.js","../../packages/block-editor/src/components/inspector-controls-tabs/advanced-controls-panel.js","../../packages/block-editor/src/components/inspector-controls-tabs/position-controls-panel.js","../../packages/block-editor/src/components/inspector-controls-tabs/settings-tab.js","../../packages/block-editor/src/components/inspector-controls-tabs/styles-tab.js","../../packages/block-editor/src/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js","../../packages/block-editor/src/components/inspector-controls-tabs/index.js","../../packages/block-editor/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js","../../packages/block-editor/src/components/block-info-slot-fill/index.js","../../packages/block-editor/src/components/block-quick-navigation/index.js","../../packages/block-editor/src/components/block-inspector/index.js","../../packages/block-editor/src/components/block-inspector/useBlockInspectorAnimationSettings.js","../../packages/block-editor/src/components/copy-handler/index.js","../../packages/block-editor/src/components/inserter/library.js","../../packages/block-editor/src/components/selection-scroll-into-view/index.js","../../packages/block-editor/src/components/typewriter/index.js","../../packages/block-editor/src/components/recursion-provider/index.js","../../packages/block-editor/src/components/inspector-popover-header/index.js","../../packages/block-editor/src/components/publish-date-time-picker/index.js","../../packages/block-editor/src/elements/index.js","../../packages/block-editor/src/utils/get-px-from-css-unit.js","../../packages/block-editor/src/components/global-styles/image-settings-panel.js","../../packages/block-editor/src/components/global-styles/advanced-panel.js","../../packages/block-editor/src/components/global-styles/get-global-styles-changes.js","webpack://wp/./node_modules/memize/dist/index.js","../../packages/block-editor/src/components/rich-text/get-rich-text-values.js","../../packages/block-editor/src/components/dimensions-tool/scale-tool.js","webpack://wp/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://wp/./node_modules/@emotion/styled/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://wp/./node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://wp/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","webpack://wp/./node_modules/stylis/src/Utility.js","webpack://wp/./node_modules/stylis/src/Tokenizer.js","webpack://wp/./node_modules/stylis/src/Enum.js","webpack://wp/./node_modules/stylis/src/Serializer.js","webpack://wp/./node_modules/stylis/src/Prefixer.js","webpack://wp/./node_modules/stylis/src/Parser.js","webpack://wp/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://wp/./node_modules/stylis/src/Middleware.js","webpack://wp/./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://wp/./node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://wp/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","webpack://wp/./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js","webpack://wp/./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","webpack://wp/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://wp/./node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../packages/block-editor/src/components/dimensions-tool/width-height-tool.js","../../packages/block-editor/src/components/dimensions-tool/index.js","../../packages/block-editor/src/components/resolution-tool/index.js","../../packages/block-editor/src/private-apis.js","../../packages/block-editor/src/components/resizable-box-popover/index.js","../../packages/block-editor/src/components/block-removal-warning-modal/index.js"],"sourcesContent":["/*!\n\tautosize 4.0.2\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'exports'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, exports);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, mod.exports);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (module, exports) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function createEvent(name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = null;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\t\t\tta.style.height = ta.scrollHeight + heightOffset + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that \n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight < styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap.delete(ta);\n\t\t}.bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function autosize(el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function autosize(el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\texports.default = autosize;\n\tmodule.exports = exports['default'];\n});","// This code has been refactored for 140 bytes\n// You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js\nvar computedStyle = function (el, prop, getComputedStyle) {\n getComputedStyle = window.getComputedStyle;\n\n // In one fell swoop\n return (\n // If we have getComputedStyle\n getComputedStyle ?\n // Query it\n // TODO: From CSS-Query notes, we might need (node, null) for FF\n getComputedStyle(el) :\n\n // Otherwise, we are in IE and use currentStyle\n el.currentStyle\n )[\n // Switch to camelCase for CSSOM\n // DEV: Grabbed from jQuery\n // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194\n // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597\n prop.replace(/-(\\w)/gi, function (word, letter) {\n return letter.toUpperCase();\n })\n ];\n};\n\nmodule.exports = computedStyle;\n","export default function Diff() {}\n\nDiff.prototype = {\n diff(oldString, newString, options = {}) {\n let callback = options.callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n this.options = options;\n\n let self = this;\n\n function done(value) {\n if (callback) {\n setTimeout(function() { callback(undefined, value); }, 0);\n return true;\n } else {\n return value;\n }\n }\n\n // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n\n let newLen = newString.length, oldLen = oldString.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n let bestPath = [{ newPos: -1, components: [] }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n let oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([{value: this.join(newString), count: newString.length}]);\n }\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (let diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n let basePath;\n let addPath = bestPath[diagonalPath - 1],\n removePath = bestPath[diagonalPath + 1],\n oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n let canAdd = addPath && addPath.newPos + 1 < newLen,\n canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);\n\n // If we have hit the end of both strings, then we are done\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n }\n\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced.\n if (callback) {\n (function exec() {\n setTimeout(function() {\n // This should not happen, but we want to be safe.\n /* istanbul ignore next */\n if (editLength > maxEditLength) {\n return callback();\n }\n\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n } else {\n while (editLength <= maxEditLength) {\n let ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n\n pushComponent(components, added, removed) {\n let last = components[components.length - 1];\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {count: last.count + 1, added: added, removed: removed };\n } else {\n components.push({count: 1, added: added, removed: removed });\n }\n },\n extractCommon(basePath, newString, oldString, diagonalPath) {\n let newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath,\n\n commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({count: commonCount});\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n\n equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right\n || (this.options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n },\n removeEmpty(array) {\n let ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput(value) {\n return value;\n },\n tokenize(value) {\n return value.split('');\n },\n join(chars) {\n return chars.join('');\n }\n};\n\nfunction buildValues(diff, components, newString, oldString, useLongestToken) {\n let componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n let component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n let value = newString.slice(newPos, newPos + component.count);\n value = value.map(function(value, i) {\n let oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n\n // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n if (componentPos && components[componentPos - 1].added) {\n let tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n }\n\n // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n let lastComponent = components[componentLen - 1];\n if (componentLen > 1\n && typeof lastComponent.value === 'string'\n && (lastComponent.added || lastComponent.removed)\n && diff.equals('', lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\n","import Diff from './base';\n\nexport const characterDiff = new Diff();\nexport function diffChars(oldStr, newStr, options) { return characterDiff.diff(oldStr, newStr, options); }\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","// Load in dependencies\nvar computedStyle = require('computed-style');\n\n/**\n * Calculate the `line-height` of a given node\n * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.\n * @returns {Number} `line-height` of the element in pixels\n */\nfunction lineHeight(node) {\n // Grab the line-height via style\n var lnHeightStr = computedStyle(node, 'line-height');\n var lnHeight = parseFloat(lnHeightStr, 10);\n\n // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')\n if (lnHeightStr === lnHeight + '') {\n // Save the old lineHeight style and update the em unit to the element\n var _lnHeightStyle = node.style.lineHeight;\n node.style.lineHeight = lnHeightStr + 'em';\n\n // Calculate the em based height\n lnHeightStr = computedStyle(node, 'line-height');\n lnHeight = parseFloat(lnHeightStr, 10);\n\n // Revert the lineHeight style\n if (_lnHeightStyle) {\n node.style.lineHeight = _lnHeightStyle;\n } else {\n delete node.style.lineHeight;\n }\n }\n\n // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)\n // DEV: `em` units are converted to `pt` in IE6\n // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length\n if (lnHeightStr.indexOf('pt') !== -1) {\n lnHeight *= 4;\n lnHeight /= 3;\n // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)\n } else if (lnHeightStr.indexOf('mm') !== -1) {\n lnHeight *= 96;\n lnHeight /= 25.4;\n // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)\n } else if (lnHeightStr.indexOf('cm') !== -1) {\n lnHeight *= 96;\n lnHeight /= 2.54;\n // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)\n } else if (lnHeightStr.indexOf('in') !== -1) {\n lnHeight *= 96;\n // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)\n } else if (lnHeightStr.indexOf('pc') !== -1) {\n lnHeight *= 16;\n }\n\n // Continue our computation\n lnHeight = Math.round(lnHeight);\n\n // If the line-height is \"normal\", calculate by font-size\n if (lnHeightStr === 'normal') {\n // Create a temporary node\n var nodeName = node.nodeName;\n var _node = document.createElement(nodeName);\n _node.innerHTML = ' ';\n\n // If we have a text area, reset it to only 1 row\n // https://github.com/twolfson/line-height/issues/4\n if (nodeName.toUpperCase() === 'TEXTAREA') {\n _node.setAttribute('rows', '1');\n }\n\n // Set the font-size of the element\n var fontSizeStr = computedStyle(node, 'font-size');\n _node.style.fontSize = fontSizeStr;\n\n // Remove default padding/border which can affect offset height\n // https://github.com/twolfson/line-height/issues/4\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight\n _node.style.padding = '0px';\n _node.style.border = '0px';\n\n // Append it to the body\n var body = document.body;\n body.appendChild(_node);\n\n // Assume the line height of the element is the height\n var height = _node.offsetHeight;\n lnHeight = height;\n\n // Remove our child from the DOM\n body.removeChild(_node);\n }\n\n // Return the calculated height\n return lnHeight;\n}\n\n// Export lineHeight\nmodule.exports = lineHeight;\n","module.exports = require('./src/normalizeWheel.js');\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","module.exports = function postcssPrefixSelector(options) {\r\n const prefix = options.prefix;\r\n const prefixWithSpace = /\\s+$/.test(prefix) ? prefix : `${prefix} `;\r\n const ignoreFiles = options.ignoreFiles ? [].concat(options.ignoreFiles) : [];\r\n const includeFiles = options.includeFiles\r\n ? [].concat(options.includeFiles)\r\n : [];\r\n\r\n return function (root) {\r\n if (\r\n ignoreFiles.length &&\r\n root.source.input.file &&\r\n isFileInArray(root.source.input.file, ignoreFiles)\r\n ) {\r\n return;\r\n }\r\n if (\r\n includeFiles.length &&\r\n root.source.input.file &&\r\n !isFileInArray(root.source.input.file, includeFiles)\r\n ) {\r\n return;\r\n }\r\n\r\n root.walkRules((rule) => {\r\n const keyframeRules = [\r\n 'keyframes',\r\n '-webkit-keyframes',\r\n '-moz-keyframes',\r\n '-o-keyframes',\r\n '-ms-keyframes',\r\n ];\r\n\r\n if (rule.parent && keyframeRules.includes(rule.parent.name)) {\r\n return;\r\n }\r\n\r\n rule.selectors = rule.selectors.map((selector) => {\r\n if (options.exclude && excludeSelector(selector, options.exclude)) {\r\n return selector;\r\n }\r\n\r\n if (options.transform) {\r\n return options.transform(\r\n prefix,\r\n selector,\r\n prefixWithSpace + selector,\r\n root.source.input.file,\r\n rule\r\n );\r\n }\r\n\r\n return prefixWithSpace + selector;\r\n });\r\n });\r\n };\r\n};\r\n\r\nfunction isFileInArray(file, arr) {\r\n return arr.some((ruleOrString) => {\r\n if (ruleOrString instanceof RegExp) {\r\n return ruleOrString.test(file);\r\n }\r\n\r\n return file.includes(ruleOrString);\r\n });\r\n}\r\n\r\nfunction excludeSelector(selector, excludeArr) {\r\n return excludeArr.some((excludeRule) => {\r\n if (excludeRule instanceof RegExp) {\r\n return excludeRule.test(selector);\r\n }\r\n\r\n return selector === excludeRule;\r\n });\r\n}\r\n","'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'atrule'\n }\n\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.append(...children)\n }\n\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.prepend(...children)\n }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n","'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n constructor(defaults) {\n super(defaults)\n this.type = 'comment'\n }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet Declaration = require('./declaration')\nlet Comment = require('./comment')\nlet Node = require('./node')\n\nlet parse, Rule, AtRule, Root\n\nfunction cleanSource(nodes) {\n return nodes.map(i => {\n if (i.nodes) i.nodes = cleanSource(i.nodes)\n delete i.source\n return i\n })\n}\n\nfunction markDirtyUp(node) {\n node[isClean] = false\n if (node.proxyOf.nodes) {\n for (let i of node.proxyOf.nodes) {\n markDirtyUp(i)\n }\n }\n}\n\nclass Container extends Node {\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last)\n for (let node of nodes) this.proxyOf.nodes.push(node)\n }\n\n this.markDirty()\n\n return this\n }\n\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween)\n if (this.nodes) {\n for (let node of this.nodes) node.cleanRaws(keepBetween)\n }\n }\n\n each(callback) {\n if (!this.proxyOf.nodes) return undefined\n let iterator = this.getIterator()\n\n let index, result\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index = this.indexes[iterator]\n result = callback(this.proxyOf.nodes[index], index)\n if (result === false) break\n\n this.indexes[iterator] += 1\n }\n\n delete this.indexes[iterator]\n return result\n }\n\n every(condition) {\n return this.nodes.every(condition)\n }\n\n getIterator() {\n if (!this.lastEach) this.lastEach = 0\n if (!this.indexes) this.indexes = {}\n\n this.lastEach += 1\n let iterator = this.lastEach\n this.indexes[iterator] = 0\n\n return iterator\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (!node[prop]) {\n return node[prop]\n } else if (\n prop === 'each' ||\n (typeof prop === 'string' && prop.startsWith('walk'))\n ) {\n return (...args) => {\n return node[prop](\n ...args.map(i => {\n if (typeof i === 'function') {\n return (child, index) => i(child.toProxy(), index)\n } else {\n return i\n }\n })\n )\n }\n } else if (prop === 'every' || prop === 'some') {\n return cb => {\n return node[prop]((child, ...other) =>\n cb(child.toProxy(), ...other)\n )\n }\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else if (prop === 'nodes') {\n return node.nodes.map(i => i.toProxy())\n } else if (prop === 'first' || prop === 'last') {\n return node[prop].toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (prop === 'name' || prop === 'params' || prop === 'selector') {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n index(child) {\n if (typeof child === 'number') return child\n if (child.proxyOf) child = child.proxyOf\n return this.proxyOf.nodes.indexOf(child)\n }\n\n insertAfter(exist, add) {\n let existIndex = this.index(exist)\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex < index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n insertBefore(exist, add) {\n let existIndex = this.index(exist)\n let type = existIndex === 0 ? 'prepend' : false\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex <= index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n normalize(nodes, sample) {\n if (typeof nodes === 'string') {\n nodes = cleanSource(parse(nodes).nodes)\n } else if (typeof nodes === 'undefined') {\n nodes = []\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type === 'root' && this.type !== 'document') {\n nodes = nodes.nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type) {\n nodes = [nodes]\n } else if (nodes.prop) {\n if (typeof nodes.value === 'undefined') {\n throw new Error('Value field is missed in node creation')\n } else if (typeof nodes.value !== 'string') {\n nodes.value = String(nodes.value)\n }\n nodes = [new Declaration(nodes)]\n } else if (nodes.selector) {\n nodes = [new Rule(nodes)]\n } else if (nodes.name) {\n nodes = [new AtRule(nodes)]\n } else if (nodes.text) {\n nodes = [new Comment(nodes)]\n } else {\n throw new Error('Unknown node type in node creation')\n }\n\n let processed = nodes.map(i => {\n /* c8 ignore next */\n if (!i[my]) Container.rebuild(i)\n i = i.proxyOf\n if (i.parent) i.parent.removeChild(i)\n if (i[isClean]) markDirtyUp(i)\n if (typeof i.raws.before === 'undefined') {\n if (sample && typeof sample.raws.before !== 'undefined') {\n i.raws.before = sample.raws.before.replace(/\\S/g, '')\n }\n }\n i.parent = this.proxyOf\n return i\n })\n\n return processed\n }\n\n prepend(...children) {\n children = children.reverse()\n for (let child of children) {\n let nodes = this.normalize(child, this.first, 'prepend').reverse()\n for (let node of nodes) this.proxyOf.nodes.unshift(node)\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n push(child) {\n child.parent = this\n this.proxyOf.nodes.push(child)\n return this\n }\n\n removeAll() {\n for (let node of this.proxyOf.nodes) node.parent = undefined\n this.proxyOf.nodes = []\n\n this.markDirty()\n\n return this\n }\n\n removeChild(child) {\n child = this.index(child)\n this.proxyOf.nodes[child].parent = undefined\n this.proxyOf.nodes.splice(child, 1)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (index >= child) {\n this.indexes[id] = index - 1\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts\n opts = {}\n }\n\n this.walkDecls(decl => {\n if (opts.props && !opts.props.includes(decl.prop)) return\n if (opts.fast && !decl.value.includes(opts.fast)) return\n\n decl.value = decl.value.replace(pattern, callback)\n })\n\n this.markDirty()\n\n return this\n }\n\n some(condition) {\n return this.nodes.some(condition)\n }\n\n walk(callback) {\n return this.each((child, i) => {\n let result\n try {\n result = callback(child, i)\n } catch (e) {\n throw child.addToError(e)\n }\n if (result !== false && child.walk) {\n result = child.walk(callback)\n }\n\n return result\n })\n }\n\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name\n return this.walk((child, i) => {\n if (child.type === 'atrule') {\n return callback(child, i)\n }\n })\n }\n if (name instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'atrule' && name.test(child.name)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'atrule' && child.name === name) {\n return callback(child, i)\n }\n })\n }\n\n walkComments(callback) {\n return this.walk((child, i) => {\n if (child.type === 'comment') {\n return callback(child, i)\n }\n })\n }\n\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop\n return this.walk((child, i) => {\n if (child.type === 'decl') {\n return callback(child, i)\n }\n })\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'decl' && prop.test(child.prop)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'decl' && child.prop === prop) {\n return callback(child, i)\n }\n })\n }\n\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector\n\n return this.walk((child, i) => {\n if (child.type === 'rule') {\n return callback(child, i)\n }\n })\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'rule' && selector.test(child.selector)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'rule' && child.selector === selector) {\n return callback(child, i)\n }\n })\n }\n\n get first() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[0]\n }\n\n get last() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n }\n}\n\nContainer.registerParse = dependant => {\n parse = dependant\n}\n\nContainer.registerRule = dependant => {\n Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n AtRule = dependant\n}\n\nContainer.registerRoot = dependant => {\n Root = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n/* c8 ignore start */\nContainer.rebuild = node => {\n if (node.type === 'atrule') {\n Object.setPrototypeOf(node, AtRule.prototype)\n } else if (node.type === 'rule') {\n Object.setPrototypeOf(node, Rule.prototype)\n } else if (node.type === 'decl') {\n Object.setPrototypeOf(node, Declaration.prototype)\n } else if (node.type === 'comment') {\n Object.setPrototypeOf(node, Comment.prototype)\n } else if (node.type === 'root') {\n Object.setPrototypeOf(node, Root.prototype)\n }\n\n node[my] = true\n\n if (node.nodes) {\n node.nodes.forEach(child => {\n Container.rebuild(child)\n })\n }\n}\n/* c8 ignore stop */\n","'use strict'\n\nlet pico = require('picocolors')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n constructor(message, line, column, source, file, plugin) {\n super(message)\n this.name = 'CssSyntaxError'\n this.reason = message\n\n if (file) {\n this.file = file\n }\n if (source) {\n this.source = source\n }\n if (plugin) {\n this.plugin = plugin\n }\n if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n if (typeof line === 'number') {\n this.line = line\n this.column = column\n } else {\n this.line = line.line\n this.column = line.column\n this.endLine = column.line\n this.endColumn = column.column\n }\n }\n\n this.setMessage()\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError)\n }\n }\n\n setMessage() {\n this.message = this.plugin ? this.plugin + ': ' : ''\n this.message += this.file ? this.file : ''\n if (typeof this.line !== 'undefined') {\n this.message += ':' + this.line + ':' + this.column\n }\n this.message += ': ' + this.reason\n }\n\n showSourceCode(color) {\n if (!this.source) return ''\n\n let css = this.source\n if (color == null) color = pico.isColorSupported\n if (terminalHighlight) {\n if (color) css = terminalHighlight(css)\n }\n\n let lines = css.split(/\\r?\\n/)\n let start = Math.max(this.line - 3, 0)\n let end = Math.min(this.line + 2, lines.length)\n\n let maxWidth = String(end).length\n\n let mark, aside\n if (color) {\n let { bold, gray, red } = pico.createColors(true)\n mark = text => bold(red(text))\n aside = text => gray(text)\n } else {\n mark = aside = str => str\n }\n\n return lines\n .slice(start, end)\n .map((line, index) => {\n let number = start + 1 + index\n let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n if (number === this.line) {\n let spacing =\n aside(gutter.replace(/\\d/g, ' ')) +\n line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n }\n return ' ' + aside(gutter) + line\n })\n .join('\\n')\n }\n\n toString() {\n let code = this.showSourceCode()\n if (code) {\n code = '\\n\\n' + code + '\\n'\n }\n return this.name + ': ' + this.message + code\n }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n","'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n constructor(defaults) {\n if (\n defaults &&\n typeof defaults.value !== 'undefined' &&\n typeof defaults.value !== 'string'\n ) {\n defaults = { ...defaults, value: String(defaults.value) }\n }\n super(defaults)\n this.type = 'decl'\n }\n\n get variable() {\n return this.prop.startsWith('--') || this.prop[0] === '$'\n }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n constructor(defaults) {\n // type needs to be passed to super, otherwise child roots won't be normalized correctly\n super({ type: 'document', ...defaults })\n\n if (!this.nodes) {\n this.nodes = []\n }\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n\n return lazy.stringify()\n }\n}\n\nDocument.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet PreviousMap = require('./previous-map')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Input = require('./input')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nfunction fromJSON(json, inputs) {\n if (Array.isArray(json)) return json.map(n => fromJSON(n))\n\n let { inputs: ownInputs, ...defaults } = json\n if (ownInputs) {\n inputs = []\n for (let input of ownInputs) {\n let inputHydrated = { ...input, __proto__: Input.prototype }\n if (inputHydrated.map) {\n inputHydrated.map = {\n ...inputHydrated.map,\n __proto__: PreviousMap.prototype\n }\n }\n inputs.push(inputHydrated)\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))\n }\n if (defaults.source) {\n let { inputId, ...source } = defaults.source\n defaults.source = source\n if (inputId != null) {\n defaults.source.input = inputs[inputId]\n }\n }\n if (defaults.type === 'root') {\n return new Root(defaults)\n } else if (defaults.type === 'decl') {\n return new Declaration(defaults)\n } else if (defaults.type === 'rule') {\n return new Rule(defaults)\n } else if (defaults.type === 'comment') {\n return new Comment(defaults)\n } else if (defaults.type === 'atrule') {\n return new AtRule(defaults)\n } else {\n throw new Error('Unknown node type: ' + json.type)\n }\n}\n\nmodule.exports = fromJSON\nfromJSON.default = fromJSON\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\nlet { isAbsolute, resolve } = require('path')\nlet { nanoid } = require('nanoid/non-secure')\n\nlet terminalHighlight = require('./terminal-highlight')\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\n\nlet fromOffsetCache = Symbol('fromOffsetCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nclass Input {\n constructor(css, opts = {}) {\n if (\n css === null ||\n typeof css === 'undefined' ||\n (typeof css === 'object' && !css.toString)\n ) {\n throw new Error(`PostCSS received ${css} instead of CSS string`)\n }\n\n this.css = css.toString()\n\n if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n this.hasBOM = true\n this.css = this.css.slice(1)\n } else {\n this.hasBOM = false\n }\n\n if (opts.from) {\n if (\n !pathAvailable ||\n /^\\w+:\\/\\//.test(opts.from) ||\n isAbsolute(opts.from)\n ) {\n this.file = opts.from\n } else {\n this.file = resolve(opts.from)\n }\n }\n\n if (pathAvailable && sourceMapAvailable) {\n let map = new PreviousMap(this.css, opts)\n if (map.text) {\n this.map = map\n let file = map.consumer().file\n if (!this.file && file) this.file = this.mapResolve(file)\n }\n }\n\n if (!this.file) {\n this.id = ''\n }\n if (this.map) this.map.file = this.from\n }\n\n error(message, line, column, opts = {}) {\n let result, endLine, endColumn\n\n if (line && typeof line === 'object') {\n let start = line\n let end = column\n if (typeof start.offset === 'number') {\n let pos = this.fromOffset(start.offset)\n line = pos.line\n column = pos.col\n } else {\n line = start.line\n column = start.column\n }\n if (typeof end.offset === 'number') {\n let pos = this.fromOffset(end.offset)\n endLine = pos.line\n endColumn = pos.col\n } else {\n endLine = end.line\n endColumn = end.column\n }\n } else if (!column) {\n let pos = this.fromOffset(line)\n line = pos.line\n column = pos.col\n }\n\n let origin = this.origin(line, column, endLine, endColumn)\n if (origin) {\n result = new CssSyntaxError(\n message,\n origin.endLine === undefined\n ? origin.line\n : { column: origin.column, line: origin.line },\n origin.endLine === undefined\n ? origin.column\n : { column: origin.endColumn, line: origin.endLine },\n origin.source,\n origin.file,\n opts.plugin\n )\n } else {\n result = new CssSyntaxError(\n message,\n endLine === undefined ? line : { column, line },\n endLine === undefined ? column : { column: endColumn, line: endLine },\n this.css,\n this.file,\n opts.plugin\n )\n }\n\n result.input = { column, endColumn, endLine, line, source: this.css }\n if (this.file) {\n if (pathToFileURL) {\n result.input.url = pathToFileURL(this.file).toString()\n }\n result.input.file = this.file\n }\n\n return result\n }\n\n fromOffset(offset) {\n let lastLine, lineToIndex\n if (!this[fromOffsetCache]) {\n let lines = this.css.split('\\n')\n lineToIndex = new Array(lines.length)\n let prevIndex = 0\n\n for (let i = 0, l = lines.length; i < l; i++) {\n lineToIndex[i] = prevIndex\n prevIndex += lines[i].length + 1\n }\n\n this[fromOffsetCache] = lineToIndex\n } else {\n lineToIndex = this[fromOffsetCache]\n }\n lastLine = lineToIndex[lineToIndex.length - 1]\n\n let min = 0\n if (offset >= lastLine) {\n min = lineToIndex.length - 1\n } else {\n let max = lineToIndex.length - 2\n let mid\n while (min < max) {\n mid = min + ((max - min) >> 1)\n if (offset < lineToIndex[mid]) {\n max = mid - 1\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1\n } else {\n min = mid\n break\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n }\n }\n\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file\n }\n return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n }\n\n origin(line, column, endLine, endColumn) {\n if (!this.map) return false\n let consumer = this.map.consumer()\n\n let from = consumer.originalPositionFor({ column, line })\n if (!from.source) return false\n\n let to\n if (typeof endLine === 'number') {\n to = consumer.originalPositionFor({ column: endColumn, line: endLine })\n }\n\n let fromUrl\n\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL(from.source)\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n )\n }\n\n let result = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n }\n\n if (fromUrl.protocol === 'file:') {\n if (fileURLToPath) {\n result.file = fileURLToPath(fromUrl)\n } else {\n /* c8 ignore next 2 */\n throw new Error(`file: protocol is not available in this PostCSS build`)\n }\n }\n\n let source = consumer.sourceContentFor(from.source)\n if (source) result.source = source\n\n return result\n }\n\n toJSON() {\n let json = {}\n for (let name of ['hasBOM', 'css', 'file', 'id']) {\n if (this[name] != null) {\n json[name] = this[name]\n }\n }\n if (this.map) {\n json.map = { ...this.map }\n if (json.map.consumerCache) {\n json.map.consumerCache = undefined\n }\n }\n return json\n }\n\n get from() {\n return this.file || this.id\n }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input)\n}\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet Container = require('./container')\nlet Document = require('./document')\nlet warnOnce = require('./warn-once')\nlet Result = require('./result')\nlet parse = require('./parse')\nlet Root = require('./root')\n\nconst TYPE_TO_CLASS_NAME = {\n atrule: 'AtRule',\n comment: 'Comment',\n decl: 'Declaration',\n document: 'Document',\n root: 'Root',\n rule: 'Rule'\n}\n\nconst PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n}\n\nconst NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n let key = false\n let type = TYPE_TO_CLASS_NAME[node.type]\n if (node.type === 'decl') {\n key = node.prop.toLowerCase()\n } else if (node.type === 'atrule') {\n key = node.name.toLowerCase()\n }\n\n if (key && node.append) {\n return [\n type,\n type + '-' + key,\n CHILDREN,\n type + 'Exit',\n type + 'Exit-' + key\n ]\n } else if (key) {\n return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n } else if (node.append) {\n return [type, CHILDREN, type + 'Exit']\n } else {\n return [type, type + 'Exit']\n }\n}\n\nfunction toStack(node) {\n let events\n if (node.type === 'document') {\n events = ['Document', CHILDREN, 'DocumentExit']\n } else if (node.type === 'root') {\n events = ['Root', CHILDREN, 'RootExit']\n } else {\n events = getEvents(node)\n }\n\n return {\n eventIndex: 0,\n events,\n iterator: 0,\n node,\n visitorIndex: 0,\n visitors: []\n }\n}\n\nfunction cleanMarks(node) {\n node[isClean] = false\n if (node.nodes) node.nodes.forEach(i => cleanMarks(i))\n return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n constructor(processor, css, opts) {\n this.stringified = false\n this.processed = false\n\n let root\n if (\n typeof css === 'object' &&\n css !== null &&\n (css.type === 'root' || css.type === 'document')\n ) {\n root = cleanMarks(css)\n } else if (css instanceof LazyResult || css instanceof Result) {\n root = cleanMarks(css.root)\n if (css.map) {\n if (typeof opts.map === 'undefined') opts.map = {}\n if (!opts.map.inline) opts.map.inline = false\n opts.map.prev = css.map\n }\n } else {\n let parser = parse\n if (opts.syntax) parser = opts.syntax.parse\n if (opts.parser) parser = opts.parser\n if (parser.parse) parser = parser.parse\n\n try {\n root = parser(css, opts)\n } catch (error) {\n this.processed = true\n this.error = error\n }\n\n if (root && !root[my]) {\n /* c8 ignore next 2 */\n Container.rebuild(root)\n }\n }\n\n this.result = new Result(processor, root, opts)\n this.helpers = { ...postcss, postcss, result: this.result }\n this.plugins = this.processor.plugins.map(plugin => {\n if (typeof plugin === 'object' && plugin.prepare) {\n return { ...plugin, ...plugin.prepare(this.result) }\n } else {\n return plugin\n }\n })\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n if (this.processed) return Promise.resolve(this.result)\n if (!this.processing) {\n this.processing = this.runAsync()\n }\n return this.processing\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n getAsyncError() {\n throw new Error('Use process(css).then(cb) to work with async plugins')\n }\n\n handleError(error, node) {\n let plugin = this.result.lastPlugin\n try {\n if (node) node.addToError(error)\n this.error = error\n if (error.name === 'CssSyntaxError' && !error.plugin) {\n error.plugin = plugin.postcssPlugin\n error.setMessage()\n } else if (plugin.postcssVersion) {\n if (process.env.NODE_ENV !== 'production') {\n let pluginName = plugin.postcssPlugin\n let pluginVer = plugin.postcssVersion\n let runtimeVer = this.result.processor.version\n let a = pluginVer.split('.')\n let b = runtimeVer.split('.')\n\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n // eslint-disable-next-line no-console\n console.error(\n 'Unknown error from PostCSS plugin. Your current PostCSS ' +\n 'version is ' +\n runtimeVer +\n ', but ' +\n pluginName +\n ' uses ' +\n pluginVer +\n '. Perhaps this is the source of the error below.'\n )\n }\n }\n }\n } catch (err) {\n /* c8 ignore next 3 */\n // eslint-disable-next-line no-console\n if (console && console.error) console.error(err)\n }\n return error\n }\n\n prepareVisitors() {\n this.listeners = {}\n let add = (plugin, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = []\n this.listeners[type].push([plugin, cb])\n }\n for (let plugin of this.plugins) {\n if (typeof plugin === 'object') {\n for (let event in plugin) {\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n `Try to update PostCSS (${this.processor.version} now).`\n )\n }\n if (!NOT_VISITORS[event]) {\n if (typeof plugin[event] === 'object') {\n for (let filter in plugin[event]) {\n if (filter === '*') {\n add(plugin, event, plugin[event][filter])\n } else {\n add(\n plugin,\n event + '-' + filter.toLowerCase(),\n plugin[event][filter]\n )\n }\n }\n } else if (typeof plugin[event] === 'function') {\n add(plugin, event, plugin[event])\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0\n }\n\n async runAsync() {\n this.plugin = 0\n for (let i = 0; i < this.plugins.length; i++) {\n let plugin = this.plugins[i]\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (error) {\n throw this.handleError(error)\n }\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n let stack = [toStack(root)]\n while (stack.length > 0) {\n let promise = this.visitTick(stack)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (e) {\n let node = stack[stack.length - 1].node\n throw this.handleError(e, node)\n }\n }\n }\n }\n\n if (this.listeners.OnceExit) {\n for (let [plugin, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin\n try {\n if (root.type === 'document') {\n let roots = root.nodes.map(subRoot =>\n visitor(subRoot, this.helpers)\n )\n\n await Promise.all(roots)\n } else {\n await visitor(root, this.helpers)\n }\n } catch (e) {\n throw this.handleError(e)\n }\n }\n }\n }\n\n this.processed = true\n return this.stringify()\n }\n\n runOnRoot(plugin) {\n this.result.lastPlugin = plugin\n try {\n if (typeof plugin === 'object' && plugin.Once) {\n if (this.result.root.type === 'document') {\n let roots = this.result.root.nodes.map(root =>\n plugin.Once(root, this.helpers)\n )\n\n if (isPromise(roots[0])) {\n return Promise.all(roots)\n }\n\n return roots\n }\n\n return plugin.Once(this.result.root, this.helpers)\n } else if (typeof plugin === 'function') {\n return plugin(this.result.root, this.result)\n }\n } catch (error) {\n throw this.handleError(error)\n }\n }\n\n stringify() {\n if (this.error) throw this.error\n if (this.stringified) return this.result\n this.stringified = true\n\n this.sync()\n\n let opts = this.result.opts\n let str = stringify\n if (opts.syntax) str = opts.syntax.stringify\n if (opts.stringifier) str = opts.stringifier\n if (str.stringify) str = str.stringify\n\n let map = new MapGenerator(str, this.result.root, this.result.opts)\n let data = map.generate()\n this.result.css = data[0]\n this.result.map = data[1]\n\n return this.result\n }\n\n sync() {\n if (this.error) throw this.error\n if (this.processed) return this.result\n this.processed = true\n\n if (this.processing) {\n throw this.getAsyncError()\n }\n\n for (let plugin of this.plugins) {\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n this.walkSync(root)\n }\n if (this.listeners.OnceExit) {\n if (root.type === 'document') {\n for (let subRoot of root.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot)\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root)\n }\n }\n }\n\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this.opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this.css\n }\n\n visitSync(visitors, node) {\n for (let [plugin, visitor] of visitors) {\n this.result.lastPlugin = plugin\n let promise\n try {\n promise = visitor(node, this.helpers)\n } catch (e) {\n throw this.handleError(e, node.proxyOf)\n }\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n return true\n }\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n }\n\n visitTick(stack) {\n let visit = stack[stack.length - 1]\n let { node, visitors } = visit\n\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n stack.pop()\n return\n }\n\n if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n let [plugin, visitor] = visitors[visit.visitorIndex]\n visit.visitorIndex += 1\n if (visit.visitorIndex === visitors.length) {\n visit.visitors = []\n visit.visitorIndex = 0\n }\n this.result.lastPlugin = plugin\n try {\n return visitor(node.toProxy(), this.helpers)\n } catch (e) {\n throw this.handleError(e, node)\n }\n }\n\n if (visit.iterator !== 0) {\n let iterator = visit.iterator\n let child\n while ((child = node.nodes[node.indexes[iterator]])) {\n node.indexes[iterator] += 1\n if (!child[isClean]) {\n child[isClean] = true\n stack.push(toStack(child))\n return\n }\n }\n visit.iterator = 0\n delete node.indexes[iterator]\n }\n\n let events = visit.events\n while (visit.eventIndex < events.length) {\n let event = events[visit.eventIndex]\n visit.eventIndex += 1\n if (event === CHILDREN) {\n if (node.nodes && node.nodes.length) {\n node[isClean] = true\n visit.iterator = node.getIterator()\n }\n return\n } else if (this.listeners[event]) {\n visit.visitors = this.listeners[event]\n return\n }\n }\n stack.pop()\n }\n\n walkSync(node) {\n node[isClean] = true\n let events = getEvents(node)\n for (let event of events) {\n if (event === CHILDREN) {\n if (node.nodes) {\n node.each(child => {\n if (!child[isClean]) this.walkSync(child)\n })\n }\n } else {\n let visitors = this.listeners[event]\n if (visitors) {\n if (this.visitSync(visitors, node.toProxy())) return\n }\n }\n }\n }\n\n warnings() {\n return this.sync().warnings()\n }\n\n get content() {\n return this.stringify().content\n }\n\n get css() {\n return this.stringify().css\n }\n\n get map() {\n return this.stringify().map\n }\n\n get messages() {\n return this.sync().messages\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n return this.sync().root\n }\n\n get [Symbol.toStringTag]() {\n return 'LazyResult'\n }\n}\n\nLazyResult.registerPostcss = dependant => {\n postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n","'use strict'\n\nlet list = {\n comma(string) {\n return list.split(string, [','], true)\n },\n\n space(string) {\n let spaces = [' ', '\\n', '\\t']\n return list.split(string, spaces)\n },\n\n split(string, separators, last) {\n let array = []\n let current = ''\n let split = false\n\n let func = 0\n let inQuote = false\n let prevQuote = ''\n let escape = false\n\n for (let letter of string) {\n if (escape) {\n escape = false\n } else if (letter === '\\\\') {\n escape = true\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true\n prevQuote = letter\n } else if (letter === '(') {\n func += 1\n } else if (letter === ')') {\n if (func > 0) func -= 1\n } else if (func === 0) {\n if (separators.includes(letter)) split = true\n }\n\n if (split) {\n if (current !== '') array.push(current.trim())\n current = ''\n split = false\n } else {\n current += letter\n }\n }\n\n if (last || current !== '') array.push(current.trim())\n return array\n }\n}\n\nmodule.exports = list\nlist.default = list\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { dirname, relative, resolve, sep } = require('path')\nlet { pathToFileURL } = require('url')\n\nlet Input = require('./input')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(dirname && resolve && relative && sep)\n\nclass MapGenerator {\n constructor(stringify, root, opts, cssString) {\n this.stringify = stringify\n this.mapOpts = opts.map || {}\n this.root = root\n this.opts = opts\n this.css = cssString\n this.originalCSS = cssString\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute\n\n this.memoizedFileURLs = new Map()\n this.memoizedPaths = new Map()\n this.memoizedURLs = new Map()\n }\n\n addAnnotation() {\n let content\n\n if (this.isInline()) {\n content =\n 'data:application/json;base64,' + this.toBase64(this.map.toString())\n } else if (typeof this.mapOpts.annotation === 'string') {\n content = this.mapOpts.annotation\n } else if (typeof this.mapOpts.annotation === 'function') {\n content = this.mapOpts.annotation(this.opts.to, this.root)\n } else {\n content = this.outputFile() + '.map'\n }\n let eol = '\\n'\n if (this.css.includes('\\r\\n')) eol = '\\r\\n'\n\n this.css += eol + '/*# sourceMappingURL=' + content + ' */'\n }\n\n applyPrevMaps() {\n for (let prev of this.previous()) {\n let from = this.toUrl(this.path(prev.file))\n let root = prev.root || dirname(prev.file)\n let map\n\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text)\n if (map.sourcesContent) {\n map.sourcesContent = null\n }\n } else {\n map = prev.consumer()\n }\n\n this.map.applySourceMap(map, from, this.toUrl(this.path(root)))\n }\n }\n\n clearAnnotation() {\n if (this.mapOpts.annotation === false) return\n\n if (this.root) {\n let node\n for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n node = this.root.nodes[i]\n if (node.type !== 'comment') continue\n if (node.text.indexOf('# sourceMappingURL=') === 0) {\n this.root.removeChild(i)\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/\\n*?\\/\\*#[\\S\\s]*?\\*\\/$/gm, '')\n }\n }\n\n generate() {\n this.clearAnnotation()\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap()\n } else {\n let result = ''\n this.stringify(this.root, i => {\n result += i\n })\n return [result]\n }\n }\n\n generateMap() {\n if (this.root) {\n this.generateString()\n } else if (this.previous().length === 1) {\n let prev = this.previous()[0].consumer()\n prev.file = this.outputFile()\n this.map = SourceMapGenerator.fromSourceMap(prev, {\n ignoreInvalidMapping: true\n })\n } else {\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n })\n this.map.addMapping({\n generated: { column: 0, line: 1 },\n original: { column: 0, line: 1 },\n source: this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : ''\n })\n }\n\n if (this.isSourcesContent()) this.setSourcesContent()\n if (this.root && this.previous().length > 0) this.applyPrevMaps()\n if (this.isAnnotation()) this.addAnnotation()\n\n if (this.isInline()) {\n return [this.css]\n } else {\n return [this.css, this.map]\n }\n }\n\n generateString() {\n this.css = ''\n this.map = new SourceMapGenerator({\n file: this.outputFile(),\n ignoreInvalidMapping: true\n })\n\n let line = 1\n let column = 1\n\n let noSource = ''\n let mapping = {\n generated: { column: 0, line: 0 },\n original: { column: 0, line: 0 },\n source: ''\n }\n\n let lines, last\n this.stringify(this.root, (str, node, type) => {\n this.css += str\n\n if (node && type !== 'end') {\n mapping.generated.line = line\n mapping.generated.column = column - 1\n if (node.source && node.source.start) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.start.line\n mapping.original.column = node.source.start.column - 1\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n this.map.addMapping(mapping)\n }\n }\n\n lines = str.match(/\\n/g)\n if (lines) {\n line += lines.length\n last = str.lastIndexOf('\\n')\n column = str.length - last\n } else {\n column += str.length\n }\n\n if (node && type !== 'start') {\n let p = node.parent || { raws: {} }\n let childless =\n node.type === 'decl' || (node.type === 'atrule' && !node.nodes)\n if (!childless || node !== p.last || p.raws.semicolon) {\n if (node.source && node.source.end) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.end.line\n mapping.original.column = node.source.end.column - 1\n mapping.generated.line = line\n mapping.generated.column = column - 2\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n mapping.generated.line = line\n mapping.generated.column = column - 1\n this.map.addMapping(mapping)\n }\n }\n }\n })\n }\n\n isAnnotation() {\n if (this.isInline()) {\n return true\n }\n if (typeof this.mapOpts.annotation !== 'undefined') {\n return this.mapOpts.annotation\n }\n if (this.previous().length) {\n return this.previous().some(i => i.annotation)\n }\n return true\n }\n\n isInline() {\n if (typeof this.mapOpts.inline !== 'undefined') {\n return this.mapOpts.inline\n }\n\n let annotation = this.mapOpts.annotation\n if (typeof annotation !== 'undefined' && annotation !== true) {\n return false\n }\n\n if (this.previous().length) {\n return this.previous().some(i => i.inline)\n }\n return true\n }\n\n isMap() {\n if (typeof this.opts.map !== 'undefined') {\n return !!this.opts.map\n }\n return this.previous().length > 0\n }\n\n isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n return this.mapOpts.sourcesContent\n }\n if (this.previous().length) {\n return this.previous().some(i => i.withContent())\n }\n return true\n }\n\n outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to)\n } else if (this.opts.from) {\n return this.path(this.opts.from)\n } else {\n return 'to.css'\n }\n }\n\n path(file) {\n if (this.mapOpts.absolute) return file\n if (file.charCodeAt(0) === 60 /* `<` */) return file\n if (/^\\w+:\\/\\//.test(file)) return file\n let cached = this.memoizedPaths.get(file)\n if (cached) return cached\n\n let from = this.opts.to ? dirname(this.opts.to) : '.'\n\n if (typeof this.mapOpts.annotation === 'string') {\n from = dirname(resolve(from, this.mapOpts.annotation))\n }\n\n let path = relative(from, file)\n this.memoizedPaths.set(file, path)\n\n return path\n }\n\n previous() {\n if (!this.previousMaps) {\n this.previousMaps = []\n if (this.root) {\n this.root.walk(node => {\n if (node.source && node.source.input.map) {\n let map = node.source.input.map\n if (!this.previousMaps.includes(map)) {\n this.previousMaps.push(map)\n }\n }\n })\n } else {\n let input = new Input(this.originalCSS, this.opts)\n if (input.map) this.previousMaps.push(input.map)\n }\n }\n\n return this.previousMaps\n }\n\n setSourcesContent() {\n let already = {}\n if (this.root) {\n this.root.walk(node => {\n if (node.source) {\n let from = node.source.input.from\n if (from && !already[from]) {\n already[from] = true\n let fromUrl = this.usesFileUrls\n ? this.toFileUrl(from)\n : this.toUrl(this.path(from))\n this.map.setSourceContent(fromUrl, node.source.input.css)\n }\n }\n })\n } else if (this.css) {\n let from = this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : ''\n this.map.setSourceContent(from, this.css)\n }\n }\n\n sourcePath(node) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from)\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node.source.input.from)\n } else {\n return this.toUrl(this.path(node.source.input.from))\n }\n }\n\n toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString('base64')\n } else {\n return window.btoa(unescape(encodeURIComponent(str)))\n }\n }\n\n toFileUrl(path) {\n let cached = this.memoizedFileURLs.get(path)\n if (cached) return cached\n\n if (pathToFileURL) {\n let fileURL = pathToFileURL(path).toString()\n this.memoizedFileURLs.set(path, fileURL)\n\n return fileURL\n } else {\n throw new Error(\n '`map.absolute` option is not available in this PostCSS build'\n )\n }\n }\n\n toUrl(path) {\n let cached = this.memoizedURLs.get(path)\n if (cached) return cached\n\n if (sep === '\\\\') {\n path = path.replace(/\\\\/g, '/')\n }\n\n let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n this.memoizedURLs.set(path, url)\n\n return url\n }\n}\n\nmodule.exports = MapGenerator\n","'use strict'\n\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet warnOnce = require('./warn-once')\nlet parse = require('./parse')\nconst Result = require('./result')\n\nclass NoWorkResult {\n constructor(processor, css, opts) {\n css = css.toString()\n this.stringified = false\n\n this._processor = processor\n this._css = css\n this._opts = opts\n this._map = undefined\n let root\n\n let str = stringify\n this.result = new Result(this._processor, root, this._opts)\n this.result.css = css\n\n let self = this\n Object.defineProperty(this.result, 'root', {\n get() {\n return self.root\n }\n })\n\n let map = new MapGenerator(str, root, this._opts, css)\n if (map.isMap()) {\n let [generatedCSS, generatedMap] = map.generate()\n if (generatedCSS) {\n this.result.css = generatedCSS\n }\n if (generatedMap) {\n this.result.map = generatedMap\n }\n } else {\n map.clearAnnotation()\n this.result.css = map.css\n }\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n return Promise.resolve(this.result)\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n sync() {\n if (this.error) throw this.error\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this._opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this._css\n }\n\n warnings() {\n return []\n }\n\n get content() {\n return this.result.css\n }\n\n get css() {\n return this.result.css\n }\n\n get map() {\n return this.result.map\n }\n\n get messages() {\n return []\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n if (this._root) {\n return this._root\n }\n\n let root\n let parser = parse\n\n try {\n root = parser(this._css, this._opts)\n } catch (error) {\n this.error = error\n }\n\n if (this.error) {\n throw this.error\n } else {\n this._root = root\n return root\n }\n }\n\n get [Symbol.toStringTag]() {\n return 'NoWorkResult'\n }\n}\n\nmodule.exports = NoWorkResult\nNoWorkResult.default = NoWorkResult\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\n\nfunction cloneNode(obj, parent) {\n let cloned = new obj.constructor()\n\n for (let i in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n /* c8 ignore next 2 */\n continue\n }\n if (i === 'proxyCache') continue\n let value = obj[i]\n let type = typeof value\n\n if (i === 'parent' && type === 'object') {\n if (parent) cloned[i] = parent\n } else if (i === 'source') {\n cloned[i] = value\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(j => cloneNode(j, cloned))\n } else {\n if (type === 'object' && value !== null) value = cloneNode(value)\n cloned[i] = value\n }\n }\n\n return cloned\n}\n\nclass Node {\n constructor(defaults = {}) {\n this.raws = {}\n this[isClean] = false\n this[my] = true\n\n for (let name in defaults) {\n if (name === 'nodes') {\n this.nodes = []\n for (let node of defaults[name]) {\n if (typeof node.clone === 'function') {\n this.append(node.clone())\n } else {\n this.append(node)\n }\n }\n } else {\n this[name] = defaults[name]\n }\n }\n }\n\n addToError(error) {\n error.postcssNode = this\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s = this.source\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n )\n }\n return error\n }\n\n after(add) {\n this.parent.insertAfter(this, add)\n return this\n }\n\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name]\n }\n return this\n }\n\n before(add) {\n this.parent.insertBefore(this, add)\n return this\n }\n\n cleanRaws(keepBetween) {\n delete this.raws.before\n delete this.raws.after\n if (!keepBetween) delete this.raws.between\n }\n\n clone(overrides = {}) {\n let cloned = cloneNode(this)\n for (let name in overrides) {\n cloned[name] = overrides[name]\n }\n return cloned\n }\n\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertAfter(this, cloned)\n return cloned\n }\n\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertBefore(this, cloned)\n return cloned\n }\n\n error(message, opts = {}) {\n if (this.source) {\n let { end, start } = this.rangeBy(opts)\n return this.source.input.error(\n message,\n { column: start.column, line: start.line },\n { column: end.column, line: end.line },\n opts\n )\n }\n return new CssSyntaxError(message)\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (\n prop === 'prop' ||\n prop === 'value' ||\n prop === 'name' ||\n prop === 'params' ||\n prop === 'important' ||\n /* c8 ignore next */\n prop === 'text'\n ) {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n markDirty() {\n if (this[isClean]) {\n this[isClean] = false\n let next = this\n while ((next = next.parent)) {\n next[isClean] = false\n }\n }\n }\n\n next() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index + 1]\n }\n\n positionBy(opts, stringRepresentation) {\n let pos = this.source.start\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation)\n } else if (opts.word) {\n stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) pos = this.positionInside(index, stringRepresentation)\n }\n return pos\n }\n\n positionInside(index, stringRepresentation) {\n let string = stringRepresentation || this.toString()\n let column = this.source.start.column\n let line = this.source.start.line\n\n for (let i = 0; i < index; i++) {\n if (string[i] === '\\n') {\n column = 1\n line += 1\n } else {\n column += 1\n }\n }\n\n return { column, line }\n }\n\n prev() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index - 1]\n }\n\n rangeBy(opts) {\n let start = {\n column: this.source.start.column,\n line: this.source.start.line\n }\n let end = this.source.end\n ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n }\n : {\n column: start.column + 1,\n line: start.line\n }\n\n if (opts.word) {\n let stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) {\n start = this.positionInside(index, stringRepresentation)\n end = this.positionInside(index + opts.word.length, stringRepresentation)\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n }\n } else if (opts.index) {\n start = this.positionInside(opts.index)\n }\n\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n }\n } else if (typeof opts.endIndex === 'number') {\n end = this.positionInside(opts.endIndex)\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1)\n }\n }\n\n if (\n end.line < start.line ||\n (end.line === start.line && end.column <= start.column)\n ) {\n end = { column: start.column + 1, line: start.line }\n }\n\n return { end, start }\n }\n\n raw(prop, defaultType) {\n let str = new Stringifier()\n return str.raw(this, prop, defaultType)\n }\n\n remove() {\n if (this.parent) {\n this.parent.removeChild(this)\n }\n this.parent = undefined\n return this\n }\n\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this\n let foundSelf = false\n for (let node of nodes) {\n if (node === this) {\n foundSelf = true\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node)\n bookmark = node\n } else {\n this.parent.insertBefore(bookmark, node)\n }\n }\n\n if (!foundSelf) {\n this.remove()\n }\n }\n\n return this\n }\n\n root() {\n let result = this\n while (result.parent && result.parent.type !== 'document') {\n result = result.parent\n }\n return result\n }\n\n toJSON(_, inputs) {\n let fixed = {}\n let emitInputs = inputs == null\n inputs = inputs || new Map()\n let inputsNextIndex = 0\n\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n /* c8 ignore next 2 */\n continue\n }\n if (name === 'parent' || name === 'proxyCache') continue\n let value = this[name]\n\n if (Array.isArray(value)) {\n fixed[name] = value.map(i => {\n if (typeof i === 'object' && i.toJSON) {\n return i.toJSON(null, inputs)\n } else {\n return i\n }\n })\n } else if (typeof value === 'object' && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs)\n } else if (name === 'source') {\n let inputId = inputs.get(value.input)\n if (inputId == null) {\n inputId = inputsNextIndex\n inputs.set(value.input, inputsNextIndex)\n inputsNextIndex++\n }\n fixed[name] = {\n end: value.end,\n inputId,\n start: value.start\n }\n } else {\n fixed[name] = value\n }\n }\n\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n }\n\n return fixed\n }\n\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor())\n }\n return this.proxyCache\n }\n\n toString(stringifier = stringify) {\n if (stringifier.stringify) stringifier = stringifier.stringify\n let result = ''\n stringifier(this, i => {\n result += i\n })\n return result\n }\n\n warn(result, text, opts) {\n let data = { node: this }\n for (let i in opts) data[i] = opts[i]\n return result.warn(text, data)\n }\n\n get proxyOf() {\n return this\n }\n}\n\nmodule.exports = Node\nNode.default = Node\n","'use strict'\n\nlet Container = require('./container')\nlet Parser = require('./parser')\nlet Input = require('./input')\n\nfunction parse(css, opts) {\n let input = new Input(css, opts)\n let parser = new Parser(input)\n try {\n parser.parse()\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n if (e.name === 'CssSyntaxError' && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse SCSS with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-scss parser'\n } else if (/\\.sass/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Sass with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-sass parser'\n } else if (/\\.less$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Less with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-less parser'\n }\n }\n }\n throw e\n }\n\n return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet tokenizer = require('./tokenize')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nconst SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n}\n\nfunction findLastWithPosition(tokens) {\n for (let i = tokens.length - 1; i >= 0; i--) {\n let token = tokens[i]\n let pos = token[3] || token[2]\n if (pos) return pos\n }\n}\n\nclass Parser {\n constructor(input) {\n this.input = input\n\n this.root = new Root()\n this.current = this.root\n this.spaces = ''\n this.semicolon = false\n\n this.createTokenizer()\n this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }\n }\n\n atrule(token) {\n let node = new AtRule()\n node.name = token[1].slice(1)\n if (node.name === '') {\n this.unnamedAtrule(node, token)\n }\n this.init(node, token[2])\n\n let type\n let prev\n let shift\n let last = false\n let open = false\n let params = []\n let brackets = []\n\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n type = token[0]\n\n if (type === '(' || type === '[') {\n brackets.push(type === '(' ? ')' : ']')\n } else if (type === '{' && brackets.length > 0) {\n brackets.push('}')\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n }\n\n if (brackets.length === 0) {\n if (type === ';') {\n node.source.end = this.getPosition(token[2])\n node.source.end.offset++\n this.semicolon = true\n break\n } else if (type === '{') {\n open = true\n break\n } else if (type === '}') {\n if (params.length > 0) {\n shift = params.length - 1\n prev = params[shift]\n while (prev && prev[0] === 'space') {\n prev = params[--shift]\n }\n if (prev) {\n node.source.end = this.getPosition(prev[3] || prev[2])\n node.source.end.offset++\n }\n }\n this.end(token)\n break\n } else {\n params.push(token)\n }\n } else {\n params.push(token)\n }\n\n if (this.tokenizer.endOfFile()) {\n last = true\n break\n }\n }\n\n node.raws.between = this.spacesAndCommentsFromEnd(params)\n if (params.length) {\n node.raws.afterName = this.spacesAndCommentsFromStart(params)\n this.raw(node, 'params', params)\n if (last) {\n token = params[params.length - 1]\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n this.spaces = node.raws.between\n node.raws.between = ''\n }\n } else {\n node.raws.afterName = ''\n node.params = ''\n }\n\n if (open) {\n node.nodes = []\n this.current = node\n }\n }\n\n checkMissedSemicolon(tokens) {\n let colon = this.colon(tokens)\n if (colon === false) return\n\n let founded = 0\n let token\n for (let j = colon - 1; j >= 0; j--) {\n token = tokens[j]\n if (token[0] !== 'space') {\n founded += 1\n if (founded === 2) break\n }\n }\n // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n // And because we need it after that one we do +1 to get the next one.\n throw this.input.error(\n 'Missed semicolon',\n token[0] === 'word' ? token[3] + 1 : token[2]\n )\n }\n\n colon(tokens) {\n let brackets = 0\n let token, type, prev\n for (let [i, element] of tokens.entries()) {\n token = element\n type = token[0]\n\n if (type === '(') {\n brackets += 1\n }\n if (type === ')') {\n brackets -= 1\n }\n if (brackets === 0 && type === ':') {\n if (!prev) {\n this.doubleColon(token)\n } else if (prev[0] === 'word' && prev[1] === 'progid') {\n continue\n } else {\n return i\n }\n }\n\n prev = token\n }\n return false\n }\n\n comment(token) {\n let node = new Comment()\n this.init(node, token[2])\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n\n let text = token[1].slice(2, -2)\n if (/^\\s*$/.test(text)) {\n node.text = ''\n node.raws.left = text\n node.raws.right = ''\n } else {\n let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/)\n node.text = match[2]\n node.raws.left = match[1]\n node.raws.right = match[3]\n }\n }\n\n createTokenizer() {\n this.tokenizer = tokenizer(this.input)\n }\n\n decl(tokens, customProperty) {\n let node = new Declaration()\n this.init(node, tokens[0][2])\n\n let last = tokens[tokens.length - 1]\n if (last[0] === ';') {\n this.semicolon = true\n tokens.pop()\n }\n\n node.source.end = this.getPosition(\n last[3] || last[2] || findLastWithPosition(tokens)\n )\n node.source.end.offset++\n\n while (tokens[0][0] !== 'word') {\n if (tokens.length === 1) this.unknownWord(tokens)\n node.raws.before += tokens.shift()[1]\n }\n node.source.start = this.getPosition(tokens[0][2])\n\n node.prop = ''\n while (tokens.length) {\n let type = tokens[0][0]\n if (type === ':' || type === 'space' || type === 'comment') {\n break\n }\n node.prop += tokens.shift()[1]\n }\n\n node.raws.between = ''\n\n let token\n while (tokens.length) {\n token = tokens.shift()\n\n if (token[0] === ':') {\n node.raws.between += token[1]\n break\n } else {\n if (token[0] === 'word' && /\\w/.test(token[1])) {\n this.unknownWord([token])\n }\n node.raws.between += token[1]\n }\n }\n\n if (node.prop[0] === '_' || node.prop[0] === '*') {\n node.raws.before += node.prop[0]\n node.prop = node.prop.slice(1)\n }\n\n let firstSpaces = []\n let next\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n firstSpaces.push(tokens.shift())\n }\n\n this.precheckMissedSemicolon(tokens)\n\n for (let i = tokens.length - 1; i >= 0; i--) {\n token = tokens[i]\n if (token[1].toLowerCase() === '!important') {\n node.important = true\n let string = this.stringFrom(tokens, i)\n string = this.spacesFromEnd(tokens) + string\n if (string !== ' !important') node.raws.important = string\n break\n } else if (token[1].toLowerCase() === 'important') {\n let cache = tokens.slice(0)\n let str = ''\n for (let j = i; j > 0; j--) {\n let type = cache[j][0]\n if (str.trim().indexOf('!') === 0 && type !== 'space') {\n break\n }\n str = cache.pop()[1] + str\n }\n if (str.trim().indexOf('!') === 0) {\n node.important = true\n node.raws.important = str\n tokens = cache\n }\n }\n\n if (token[0] !== 'space' && token[0] !== 'comment') {\n break\n }\n }\n\n let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')\n\n if (hasWord) {\n node.raws.between += firstSpaces.map(i => i[1]).join('')\n firstSpaces = []\n }\n this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)\n\n if (node.value.includes(':') && !customProperty) {\n this.checkMissedSemicolon(tokens)\n }\n }\n\n doubleColon(token) {\n throw this.input.error(\n 'Double colon',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n\n emptyRule(token) {\n let node = new Rule()\n this.init(node, token[2])\n node.selector = ''\n node.raws.between = ''\n this.current = node\n }\n\n end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.semicolon = false\n\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.spaces = ''\n\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2])\n this.current.source.end.offset++\n this.current = this.current.parent\n } else {\n this.unexpectedClose(token)\n }\n }\n\n endFile() {\n if (this.current.parent) this.unclosedBlock()\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.root.source.end = this.getPosition(this.tokenizer.position())\n }\n\n freeSemicolon(token) {\n this.spaces += token[1]\n if (this.current.nodes) {\n let prev = this.current.nodes[this.current.nodes.length - 1]\n if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces\n this.spaces = ''\n }\n }\n }\n\n // Helpers\n\n getPosition(offset) {\n let pos = this.input.fromOffset(offset)\n return {\n column: pos.col,\n line: pos.line,\n offset\n }\n }\n\n init(node, offset) {\n this.current.push(node)\n node.source = {\n input: this.input,\n start: this.getPosition(offset)\n }\n node.raws.before = this.spaces\n this.spaces = ''\n if (node.type !== 'comment') this.semicolon = false\n }\n\n other(start) {\n let end = false\n let type = null\n let colon = false\n let bracket = null\n let brackets = []\n let customProperty = start[1].startsWith('--')\n\n let tokens = []\n let token = start\n while (token) {\n type = token[0]\n tokens.push(token)\n\n if (type === '(' || type === '[') {\n if (!bracket) bracket = token\n brackets.push(type === '(' ? ')' : ']')\n } else if (customProperty && colon && type === '{') {\n if (!bracket) bracket = token\n brackets.push('}')\n } else if (brackets.length === 0) {\n if (type === ';') {\n if (colon) {\n this.decl(tokens, customProperty)\n return\n } else {\n break\n }\n } else if (type === '{') {\n this.rule(tokens)\n return\n } else if (type === '}') {\n this.tokenizer.back(tokens.pop())\n end = true\n break\n } else if (type === ':') {\n colon = true\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n if (brackets.length === 0) bracket = null\n }\n\n token = this.tokenizer.nextToken()\n }\n\n if (this.tokenizer.endOfFile()) end = true\n if (brackets.length > 0) this.unclosedBracket(bracket)\n\n if (end && colon) {\n if (!customProperty) {\n while (tokens.length) {\n token = tokens[tokens.length - 1][0]\n if (token !== 'space' && token !== 'comment') break\n this.tokenizer.back(tokens.pop())\n }\n }\n this.decl(tokens, customProperty)\n } else {\n this.unknownWord(tokens)\n }\n }\n\n parse() {\n let token\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n\n switch (token[0]) {\n case 'space':\n this.spaces += token[1]\n break\n\n case ';':\n this.freeSemicolon(token)\n break\n\n case '}':\n this.end(token)\n break\n\n case 'comment':\n this.comment(token)\n break\n\n case 'at-word':\n this.atrule(token)\n break\n\n case '{':\n this.emptyRule(token)\n break\n\n default:\n this.other(token)\n break\n }\n }\n this.endFile()\n }\n\n precheckMissedSemicolon(/* tokens */) {\n // Hook for Safe Parser\n }\n\n raw(node, prop, tokens, customProperty) {\n let token, type\n let length = tokens.length\n let value = ''\n let clean = true\n let next, prev\n\n for (let i = 0; i < length; i += 1) {\n token = tokens[i]\n type = token[0]\n if (type === 'space' && i === length - 1 && !customProperty) {\n clean = false\n } else if (type === 'comment') {\n prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'\n next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === ',') {\n clean = false\n } else {\n value += token[1]\n }\n } else {\n clean = false\n }\n } else {\n value += token[1]\n }\n }\n if (!clean) {\n let raw = tokens.reduce((all, i) => all + i[1], '')\n node.raws[prop] = { raw, value }\n }\n node[prop] = value\n }\n\n rule(tokens) {\n tokens.pop()\n\n let node = new Rule()\n this.init(node, tokens[0][2])\n\n node.raws.between = this.spacesAndCommentsFromEnd(tokens)\n this.raw(node, 'selector', tokens)\n this.current = node\n }\n\n spacesAndCommentsFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n // Errors\n\n spacesAndCommentsFromStart(tokens) {\n let next\n let spaces = ''\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n spaces += tokens.shift()[1]\n }\n return spaces\n }\n\n spacesFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n stringFrom(tokens, from) {\n let result = ''\n for (let i = from; i < tokens.length; i++) {\n result += tokens[i][1]\n }\n tokens.splice(from, tokens.length - from)\n return result\n }\n\n unclosedBlock() {\n let pos = this.current.source.start\n throw this.input.error('Unclosed block', pos.line, pos.column)\n }\n\n unclosedBracket(bracket) {\n throw this.input.error(\n 'Unclosed bracket',\n { offset: bracket[2] },\n { offset: bracket[2] + 1 }\n )\n }\n\n unexpectedClose(token) {\n throw this.input.error(\n 'Unexpected }',\n { offset: token[2] },\n { offset: token[2] + 1 }\n )\n }\n\n unknownWord(tokens) {\n throw this.input.error(\n 'Unknown word',\n { offset: tokens[0][2] },\n { offset: tokens[0][2] + tokens[0][1].length }\n )\n }\n\n unnamedAtrule(node, token) {\n throw this.input.error(\n 'At-rule without name',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n}\n\nmodule.exports = Parser\n","'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet LazyResult = require('./lazy-result')\nlet Container = require('./container')\nlet Processor = require('./processor')\nlet stringify = require('./stringify')\nlet fromJSON = require('./fromJSON')\nlet Document = require('./document')\nlet Warning = require('./warning')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Result = require('./result.js')\nlet Input = require('./input')\nlet parse = require('./parse')\nlet list = require('./list')\nlet Rule = require('./rule')\nlet Root = require('./root')\nlet Node = require('./node')\n\nfunction postcss(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0]\n }\n return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n let warningPrinted = false\n function creator(...args) {\n // eslint-disable-next-line no-console\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': postcss.plugin was deprecated. Migration guide:\\n' +\n 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n )\n if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n /* c8 ignore next 7 */\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' +\n 'https://www.w3ctech.com/topic/2226'\n )\n }\n }\n let transformer = initializer(...args)\n transformer.postcssPlugin = name\n transformer.postcssVersion = new Processor().version\n return transformer\n }\n\n let cache\n Object.defineProperty(creator, 'postcss', {\n get() {\n if (!cache) cache = creator()\n return cache\n }\n })\n\n creator.process = function (css, processOpts, pluginOpts) {\n return postcss([creator(pluginOpts)]).process(css, processOpts)\n }\n\n return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Processor = Processor\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { existsSync, readFileSync } = require('fs')\nlet { dirname, join } = require('path')\n\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, 'base64').toString()\n } else {\n /* c8 ignore next 2 */\n return window.atob(str)\n }\n}\n\nclass PreviousMap {\n constructor(css, opts) {\n if (opts.map === false) return\n this.loadAnnotation(css)\n this.inline = this.startWith(this.annotation, 'data:')\n\n let prev = opts.map ? opts.map.prev : undefined\n let text = this.loadMap(opts.from, prev)\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from\n }\n if (this.mapFile) this.root = dirname(this.mapFile)\n if (text) this.text = text\n }\n\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer(this.text)\n }\n return this.consumerCache\n }\n\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n let baseUri = /^data:application\\/json;base64,/\n let charsetUri = /^data:application\\/json;charset=utf-?8,/\n let uri = /^data:application\\/json,/\n\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n }\n\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length))\n }\n\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1]\n throw new Error('Unsupported source map encoding ' + encoding)\n }\n\n getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n }\n\n isMap(map) {\n if (typeof map !== 'object') return false\n return (\n typeof map.mappings === 'string' ||\n typeof map._mappings === 'string' ||\n Array.isArray(map.sections)\n )\n }\n\n loadAnnotation(css) {\n let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm)\n if (!comments) return\n\n // sourceMappingURLs from comments, strings, etc.\n let start = css.lastIndexOf(comments.pop())\n let end = css.indexOf('*/', start)\n\n if (start > -1 && end > -1) {\n // Locate the last sourceMappingURL to avoid pickin\n this.annotation = this.getAnnotationURL(css.substring(start, end))\n }\n }\n\n loadFile(path) {\n this.root = dirname(path)\n if (existsSync(path)) {\n this.mapFile = path\n return readFileSync(path, 'utf-8').toString().trim()\n }\n }\n\n loadMap(file, prev) {\n if (prev === false) return false\n\n if (prev) {\n if (typeof prev === 'string') {\n return prev\n } else if (typeof prev === 'function') {\n let prevPath = prev(file)\n if (prevPath) {\n let map = this.loadFile(prevPath)\n if (!map) {\n throw new Error(\n 'Unable to load previous source map: ' + prevPath.toString()\n )\n }\n return map\n }\n } else if (prev instanceof SourceMapConsumer) {\n return SourceMapGenerator.fromSourceMap(prev).toString()\n } else if (prev instanceof SourceMapGenerator) {\n return prev.toString()\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev)\n } else {\n throw new Error(\n 'Unsupported previous source map format: ' + prev.toString()\n )\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation)\n } else if (this.annotation) {\n let map = this.annotation\n if (file) map = join(dirname(file), map)\n return this.loadFile(map)\n }\n }\n\n startWith(string, start) {\n if (!string) return false\n return string.substr(0, start.length) === start\n }\n\n withContent() {\n return !!(\n this.consumer().sourcesContent &&\n this.consumer().sourcesContent.length > 0\n )\n }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n","'use strict'\n\nlet NoWorkResult = require('./no-work-result')\nlet LazyResult = require('./lazy-result')\nlet Document = require('./document')\nlet Root = require('./root')\n\nclass Processor {\n constructor(plugins = []) {\n this.version = '8.4.38'\n this.plugins = this.normalize(plugins)\n }\n\n normalize(plugins) {\n let normalized = []\n for (let i of plugins) {\n if (i.postcss === true) {\n i = i()\n } else if (i.postcss) {\n i = i.postcss\n }\n\n if (typeof i === 'object' && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins)\n } else if (typeof i === 'object' && i.postcssPlugin) {\n normalized.push(i)\n } else if (typeof i === 'function') {\n normalized.push(i)\n } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n 'one of the syntax/parser/stringifier options as outlined ' +\n 'in your PostCSS runner documentation.'\n )\n }\n } else {\n throw new Error(i + ' is not a PostCSS plugin')\n }\n }\n return normalized\n }\n\n process(css, opts = {}) {\n if (\n !this.plugins.length &&\n !opts.parser &&\n !opts.stringifier &&\n !opts.syntax\n ) {\n return new NoWorkResult(this, css, opts)\n } else {\n return new LazyResult(this, css, opts)\n }\n }\n\n use(plugin) {\n this.plugins = this.plugins.concat(this.normalize([plugin]))\n return this\n }\n}\n\nmodule.exports = Processor\nProcessor.default = Processor\n\nRoot.registerProcessor(Processor)\nDocument.registerProcessor(Processor)\n","'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n constructor(processor, root, opts) {\n this.processor = processor\n this.messages = []\n this.root = root\n this.opts = opts\n this.css = undefined\n this.map = undefined\n }\n\n toString() {\n return this.css\n }\n\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin\n }\n }\n\n let warning = new Warning(text, opts)\n this.messages.push(warning)\n\n return warning\n }\n\n warnings() {\n return this.messages.filter(i => i.type === 'warning')\n }\n\n get content() {\n return this.css\n }\n}\n\nmodule.exports = Result\nResult.default = Result\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'root'\n if (!this.nodes) this.nodes = []\n }\n\n normalize(child, sample, type) {\n let nodes = super.normalize(child)\n\n if (sample) {\n if (type === 'prepend') {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before\n } else {\n delete sample.raws.before\n }\n } else if (this.first !== sample) {\n for (let node of nodes) {\n node.raws.before = sample.raws.before\n }\n }\n }\n\n return nodes\n }\n\n removeChild(child, ignore) {\n let index = this.index(child)\n\n if (!ignore && index === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index].raws.before\n }\n\n return super.removeChild(child)\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n return lazy.stringify()\n }\n}\n\nRoot.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n\nContainer.registerRoot(Root)\n","'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'rule'\n if (!this.nodes) this.nodes = []\n }\n\n get selectors() {\n return list.comma(this.selector)\n }\n\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null\n let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n this.selector = values.join(sep)\n }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n","'use strict'\n\nconst DEFAULT_RAW = {\n after: '\\n',\n beforeClose: '\\n',\n beforeComment: '\\n',\n beforeDecl: '\\n',\n beforeOpen: ' ',\n beforeRule: '\\n',\n colon: ': ',\n commentLeft: ' ',\n commentRight: ' ',\n emptyBody: '',\n indent: ' ',\n semicolon: false\n}\n\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\nclass Stringifier {\n constructor(builder) {\n this.builder = builder\n }\n\n atrule(node, semicolon) {\n let name = '@' + node.name\n let params = node.params ? this.rawValue(node, 'params') : ''\n\n if (typeof node.raws.afterName !== 'undefined') {\n name += node.raws.afterName\n } else if (params) {\n name += ' '\n }\n\n if (node.nodes) {\n this.block(node, name + params)\n } else {\n let end = (node.raws.between || '') + (semicolon ? ';' : '')\n this.builder(name + params + end, node)\n }\n }\n\n beforeAfter(node, detect) {\n let value\n if (node.type === 'decl') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (node.type === 'comment') {\n value = this.raw(node, null, 'beforeComment')\n } else if (detect === 'before') {\n value = this.raw(node, null, 'beforeRule')\n } else {\n value = this.raw(node, null, 'beforeClose')\n }\n\n let buf = node.parent\n let depth = 0\n while (buf && buf.type !== 'root') {\n depth += 1\n buf = buf.parent\n }\n\n if (value.includes('\\n')) {\n let indent = this.raw(node, null, 'indent')\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent\n }\n }\n\n return value\n }\n\n block(node, start) {\n let between = this.raw(node, 'between', 'beforeOpen')\n this.builder(start + between + '{', node, 'start')\n\n let after\n if (node.nodes && node.nodes.length) {\n this.body(node)\n after = this.raw(node, 'after')\n } else {\n after = this.raw(node, 'after', 'emptyBody')\n }\n\n if (after) this.builder(after)\n this.builder('}', node, 'end')\n }\n\n body(node) {\n let last = node.nodes.length - 1\n while (last > 0) {\n if (node.nodes[last].type !== 'comment') break\n last -= 1\n }\n\n let semicolon = this.raw(node, 'semicolon')\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i]\n let before = this.raw(child, 'before')\n if (before) this.builder(before)\n this.stringify(child, last !== i || semicolon)\n }\n }\n\n comment(node) {\n let left = this.raw(node, 'left', 'commentLeft')\n let right = this.raw(node, 'right', 'commentRight')\n this.builder('/*' + left + node.text + right + '*/', node)\n }\n\n decl(node, semicolon) {\n let between = this.raw(node, 'between', 'colon')\n let string = node.prop + between + this.rawValue(node, 'value')\n\n if (node.important) {\n string += node.raws.important || ' !important'\n }\n\n if (semicolon) string += ';'\n this.builder(string, node)\n }\n\n document(node) {\n this.body(node)\n }\n\n raw(node, own, detect) {\n let value\n if (!detect) detect = own\n\n // Already had\n if (own) {\n value = node.raws[own]\n if (typeof value !== 'undefined') return value\n }\n\n let parent = node.parent\n\n if (detect === 'before') {\n // Hack for first rule in CSS\n if (!parent || (parent.type === 'root' && parent.first === node)) {\n return ''\n }\n\n // `root` nodes in `document` should use only their own raws\n if (parent && parent.type === 'document') {\n return ''\n }\n }\n\n // Floating child without parent\n if (!parent) return DEFAULT_RAW[detect]\n\n // Detect style by other nodes\n let root = node.root()\n if (!root.rawCache) root.rawCache = {}\n if (typeof root.rawCache[detect] !== 'undefined') {\n return root.rawCache[detect]\n }\n\n if (detect === 'before' || detect === 'after') {\n return this.beforeAfter(node, detect)\n } else {\n let method = 'raw' + capitalize(detect)\n if (this[method]) {\n value = this[method](root, node)\n } else {\n root.walk(i => {\n value = i.raws[own]\n if (typeof value !== 'undefined') return false\n })\n }\n }\n\n if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n root.rawCache[detect] = value\n return value\n }\n\n rawBeforeClose(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== 'undefined') {\n value = i.raws.after\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawBeforeComment(root, node) {\n let value\n root.walkComments(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeDecl(root, node) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeRule')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeOpen(root) {\n let value\n root.walk(i => {\n if (i.type !== 'decl') {\n value = i.raws.between\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawBeforeRule(root) {\n let value\n root.walk(i => {\n if (i.nodes && (i.parent !== root || root.first !== i)) {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawColon(root) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.between !== 'undefined') {\n value = i.raws.between.replace(/[^\\s:]/g, '')\n return false\n }\n })\n return value\n }\n\n rawEmptyBody(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawIndent(root) {\n if (root.raws.indent) return root.raws.indent\n let value\n root.walk(i => {\n let p = i.parent\n if (p && p !== root && p.parent && p.parent === root) {\n if (typeof i.raws.before !== 'undefined') {\n let parts = i.raws.before.split('\\n')\n value = parts[parts.length - 1]\n value = value.replace(/\\S/g, '')\n return false\n }\n }\n })\n return value\n }\n\n rawSemicolon(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n value = i.raws.semicolon\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawValue(node, prop) {\n let value = node[prop]\n let raw = node.raws[prop]\n if (raw && raw.value === value) {\n return raw.raw\n }\n\n return value\n }\n\n root(node) {\n this.body(node)\n if (node.raws.after) this.builder(node.raws.after)\n }\n\n rule(node) {\n this.block(node, this.rawValue(node, 'selector'))\n if (node.raws.ownSemicolon) {\n this.builder(node.raws.ownSemicolon, node, 'end')\n }\n }\n\n stringify(node, semicolon) {\n /* c8 ignore start */\n if (!this[node.type]) {\n throw new Error(\n 'Unknown AST node type ' +\n node.type +\n '. ' +\n 'Maybe you need to change PostCSS stringifier.'\n )\n }\n /* c8 ignore stop */\n this[node.type](node, semicolon)\n }\n}\n\nmodule.exports = Stringifier\nStringifier.default = Stringifier\n","'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n let str = new Stringifier(builder)\n str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n","'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n","'use strict'\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0)\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0)\nconst BACKSLASH = '\\\\'.charCodeAt(0)\nconst SLASH = '/'.charCodeAt(0)\nconst NEWLINE = '\\n'.charCodeAt(0)\nconst SPACE = ' '.charCodeAt(0)\nconst FEED = '\\f'.charCodeAt(0)\nconst TAB = '\\t'.charCodeAt(0)\nconst CR = '\\r'.charCodeAt(0)\nconst OPEN_SQUARE = '['.charCodeAt(0)\nconst CLOSE_SQUARE = ']'.charCodeAt(0)\nconst OPEN_PARENTHESES = '('.charCodeAt(0)\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0)\nconst OPEN_CURLY = '{'.charCodeAt(0)\nconst CLOSE_CURLY = '}'.charCodeAt(0)\nconst SEMICOLON = ';'.charCodeAt(0)\nconst ASTERISK = '*'.charCodeAt(0)\nconst COLON = ':'.charCodeAt(0)\nconst AT = '@'.charCodeAt(0)\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/\nconst RE_HEX_ESCAPE = /[\\da-f]/i\n\nmodule.exports = function tokenizer(input, options = {}) {\n let css = input.css.valueOf()\n let ignore = options.ignoreErrors\n\n let code, next, quote, content, escape\n let escaped, escapePos, prev, n, currentToken\n\n let length = css.length\n let pos = 0\n let buffer = []\n let returned = []\n\n function position() {\n return pos\n }\n\n function unclosed(what) {\n throw input.error('Unclosed ' + what, pos)\n }\n\n function endOfFile() {\n return returned.length === 0 && pos >= length\n }\n\n function nextToken(opts) {\n if (returned.length) return returned.pop()\n if (pos >= length) return\n\n let ignoreUnclosed = opts ? opts.ignoreUnclosed : false\n\n code = css.charCodeAt(pos)\n\n switch (code) {\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED: {\n next = pos\n do {\n next += 1\n code = css.charCodeAt(next)\n } while (\n code === SPACE ||\n code === NEWLINE ||\n code === TAB ||\n code === CR ||\n code === FEED\n )\n\n currentToken = ['space', css.slice(pos, next)]\n pos = next - 1\n break\n }\n\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES: {\n let controlChar = String.fromCharCode(code)\n currentToken = [controlChar, controlChar, pos]\n break\n }\n\n case OPEN_PARENTHESES: {\n prev = buffer.length ? buffer.pop()[1] : ''\n n = css.charCodeAt(pos + 1)\n if (\n prev === 'url' &&\n n !== SINGLE_QUOTE &&\n n !== DOUBLE_QUOTE &&\n n !== SPACE &&\n n !== NEWLINE &&\n n !== TAB &&\n n !== FEED &&\n n !== CR\n ) {\n next = pos\n do {\n escaped = false\n next = css.indexOf(')', next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos\n break\n } else {\n unclosed('bracket')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['brackets', css.slice(pos, next + 1), pos, next]\n\n pos = next\n } else {\n next = css.indexOf(')', pos + 1)\n content = css.slice(pos, next + 1)\n\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = ['(', '(', pos]\n } else {\n currentToken = ['brackets', content, pos, next]\n pos = next\n }\n }\n\n break\n }\n\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE: {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"'\n next = pos\n do {\n escaped = false\n next = css.indexOf(quote, next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1\n break\n } else {\n unclosed('string')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['string', css.slice(pos, next + 1), pos, next]\n pos = next\n break\n }\n\n case AT: {\n RE_AT_END.lastIndex = pos + 1\n RE_AT_END.test(css)\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_AT_END.lastIndex - 2\n }\n\n currentToken = ['at-word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n case BACKSLASH: {\n next = pos\n escape = true\n while (css.charCodeAt(next + 1) === BACKSLASH) {\n next += 1\n escape = !escape\n }\n code = css.charCodeAt(next + 1)\n if (\n escape &&\n code !== SLASH &&\n code !== SPACE &&\n code !== NEWLINE &&\n code !== TAB &&\n code !== CR &&\n code !== FEED\n ) {\n next += 1\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n next += 1\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1\n }\n }\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n default: {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf('*/', pos + 2) + 1\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length\n } else {\n unclosed('comment')\n }\n }\n\n currentToken = ['comment', css.slice(pos, next + 1), pos, next]\n pos = next\n } else {\n RE_WORD_END.lastIndex = pos + 1\n RE_WORD_END.test(css)\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_WORD_END.lastIndex - 2\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n buffer.push(currentToken)\n pos = next\n }\n\n break\n }\n }\n\n pos++\n return currentToken\n }\n\n function back(token) {\n returned.push(token)\n }\n\n return {\n back,\n endOfFile,\n nextToken,\n position\n }\n}\n","/* eslint-disable no-console */\n'use strict'\n\nlet printed = {}\n\nmodule.exports = function warnOnce(message) {\n if (printed[message]) return\n printed[message] = true\n\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(message)\n }\n}\n","'use strict'\n\nclass Warning {\n constructor(text, opts = {}) {\n this.type = 'warning'\n this.text = text\n\n if (opts.node && opts.node.source) {\n let range = opts.node.rangeBy(opts)\n this.line = range.start.line\n this.column = range.start.column\n this.endLine = range.end.line\n this.endColumn = range.end.column\n }\n\n for (let opt in opts) this[opt] = opts[opt]\n }\n\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message\n }\n\n if (this.plugin) {\n return this.plugin + ': ' + this.text\n }\n\n return this.text\n }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n t[p[i]] = s[p[i]];\n return t;\n};\nexports.__esModule = true;\nvar React = require(\"react\");\nvar PropTypes = require(\"prop-types\");\nvar autosize = require(\"autosize\");\nvar _getLineHeight = require(\"line-height\");\nvar getLineHeight = _getLineHeight;\nvar RESIZED = \"autosize:resized\";\n/**\n * A light replacement for built-in textarea component\n * which automaticaly adjusts its height to match the content\n */\nvar TextareaAutosizeClass = /** @class */ (function (_super) {\n __extends(TextareaAutosizeClass, _super);\n function TextareaAutosizeClass() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n lineHeight: null\n };\n _this.textarea = null;\n _this.onResize = function (e) {\n if (_this.props.onResize) {\n _this.props.onResize(e);\n }\n };\n _this.updateLineHeight = function () {\n if (_this.textarea) {\n _this.setState({\n lineHeight: getLineHeight(_this.textarea)\n });\n }\n };\n _this.onChange = function (e) {\n var onChange = _this.props.onChange;\n _this.currentValue = e.currentTarget.value;\n onChange && onChange(e);\n };\n return _this;\n }\n TextareaAutosizeClass.prototype.componentDidMount = function () {\n var _this = this;\n var _a = this.props, maxRows = _a.maxRows, async = _a.async;\n if (typeof maxRows === \"number\") {\n this.updateLineHeight();\n }\n if (typeof maxRows === \"number\" || async) {\n /*\n the defer is needed to:\n - force \"autosize\" to activate the scrollbar when this.props.maxRows is passed\n - support StyledComponents (see #71)\n */\n setTimeout(function () { return _this.textarea && autosize(_this.textarea); });\n }\n else {\n this.textarea && autosize(this.textarea);\n }\n if (this.textarea) {\n this.textarea.addEventListener(RESIZED, this.onResize);\n }\n };\n TextareaAutosizeClass.prototype.componentWillUnmount = function () {\n if (this.textarea) {\n this.textarea.removeEventListener(RESIZED, this.onResize);\n autosize.destroy(this.textarea);\n }\n };\n TextareaAutosizeClass.prototype.render = function () {\n var _this = this;\n 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;\n var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;\n return (React.createElement(\"textarea\", __assign({}, props, { onChange: this.onChange, style: maxHeight ? __assign({}, style, { maxHeight: maxHeight }) : style, ref: function (element) {\n _this.textarea = element;\n if (typeof _this.props.innerRef === 'function') {\n _this.props.innerRef(element);\n }\n else if (_this.props.innerRef) {\n _this.props.innerRef.current = element;\n }\n } }), children));\n };\n TextareaAutosizeClass.prototype.componentDidUpdate = function () {\n this.textarea && autosize.update(this.textarea);\n };\n TextareaAutosizeClass.defaultProps = {\n rows: 1,\n async: false\n };\n TextareaAutosizeClass.propTypes = {\n rows: PropTypes.number,\n maxRows: PropTypes.number,\n onResize: PropTypes.func,\n innerRef: PropTypes.any,\n async: PropTypes.bool\n };\n return TextareaAutosizeClass;\n}(React.Component));\nexports.TextareaAutosize = React.forwardRef(function (props, ref) {\n return React.createElement(TextareaAutosizeClass, __assign({}, props, { innerRef: ref }));\n});\n","\"use strict\";\nexports.__esModule = true;\nvar TextareaAutosize_1 = require(\"./TextareaAutosize\");\nexports[\"default\"] = TextareaAutosize_1.TextareaAutosize;\n","var characterMap = {\n\t\"À\": \"A\",\n\t\"Á\": \"A\",\n\t\"Â\": \"A\",\n\t\"Ã\": \"A\",\n\t\"Ä\": \"A\",\n\t\"Å\": \"A\",\n\t\"Ấ\": \"A\",\n\t\"Ắ\": \"A\",\n\t\"Ẳ\": \"A\",\n\t\"Ẵ\": \"A\",\n\t\"Ặ\": \"A\",\n\t\"Æ\": \"AE\",\n\t\"Ầ\": \"A\",\n\t\"Ằ\": \"A\",\n\t\"Ȃ\": \"A\",\n\t\"Ả\": \"A\",\n\t\"Ạ\": \"A\",\n\t\"Ẩ\": \"A\",\n\t\"Ẫ\": \"A\",\n\t\"Ậ\": \"A\",\n\t\"Ç\": \"C\",\n\t\"Ḉ\": \"C\",\n\t\"È\": \"E\",\n\t\"É\": \"E\",\n\t\"Ê\": \"E\",\n\t\"Ë\": \"E\",\n\t\"Ế\": \"E\",\n\t\"Ḗ\": \"E\",\n\t\"Ề\": \"E\",\n\t\"Ḕ\": \"E\",\n\t\"Ḝ\": \"E\",\n\t\"Ȇ\": \"E\",\n\t\"Ẻ\": \"E\",\n\t\"Ẽ\": \"E\",\n\t\"Ẹ\": \"E\",\n\t\"Ể\": \"E\",\n\t\"Ễ\": \"E\",\n\t\"Ệ\": \"E\",\n\t\"Ì\": \"I\",\n\t\"Í\": \"I\",\n\t\"Î\": \"I\",\n\t\"Ï\": \"I\",\n\t\"Ḯ\": \"I\",\n\t\"Ȋ\": \"I\",\n\t\"Ỉ\": \"I\",\n\t\"Ị\": \"I\",\n\t\"Ð\": \"D\",\n\t\"Ñ\": \"N\",\n\t\"Ò\": \"O\",\n\t\"Ó\": \"O\",\n\t\"Ô\": \"O\",\n\t\"Õ\": \"O\",\n\t\"Ö\": \"O\",\n\t\"Ø\": \"O\",\n\t\"Ố\": \"O\",\n\t\"Ṍ\": \"O\",\n\t\"Ṓ\": \"O\",\n\t\"Ȏ\": \"O\",\n\t\"Ỏ\": \"O\",\n\t\"Ọ\": \"O\",\n\t\"Ổ\": \"O\",\n\t\"Ỗ\": \"O\",\n\t\"Ộ\": \"O\",\n\t\"Ờ\": \"O\",\n\t\"Ở\": \"O\",\n\t\"Ỡ\": \"O\",\n\t\"Ớ\": \"O\",\n\t\"Ợ\": \"O\",\n\t\"Ù\": \"U\",\n\t\"Ú\": \"U\",\n\t\"Û\": \"U\",\n\t\"Ü\": \"U\",\n\t\"Ủ\": \"U\",\n\t\"Ụ\": \"U\",\n\t\"Ử\": \"U\",\n\t\"Ữ\": \"U\",\n\t\"Ự\": \"U\",\n\t\"Ý\": \"Y\",\n\t\"à\": \"a\",\n\t\"á\": \"a\",\n\t\"â\": \"a\",\n\t\"ã\": \"a\",\n\t\"ä\": \"a\",\n\t\"å\": \"a\",\n\t\"ấ\": \"a\",\n\t\"ắ\": \"a\",\n\t\"ẳ\": \"a\",\n\t\"ẵ\": \"a\",\n\t\"ặ\": \"a\",\n\t\"æ\": \"ae\",\n\t\"ầ\": \"a\",\n\t\"ằ\": \"a\",\n\t\"ȃ\": \"a\",\n\t\"ả\": \"a\",\n\t\"ạ\": \"a\",\n\t\"ẩ\": \"a\",\n\t\"ẫ\": \"a\",\n\t\"ậ\": \"a\",\n\t\"ç\": \"c\",\n\t\"ḉ\": \"c\",\n\t\"è\": \"e\",\n\t\"é\": \"e\",\n\t\"ê\": \"e\",\n\t\"ë\": \"e\",\n\t\"ế\": \"e\",\n\t\"ḗ\": \"e\",\n\t\"ề\": \"e\",\n\t\"ḕ\": \"e\",\n\t\"ḝ\": \"e\",\n\t\"ȇ\": \"e\",\n\t\"ẻ\": \"e\",\n\t\"ẽ\": \"e\",\n\t\"ẹ\": \"e\",\n\t\"ể\": \"e\",\n\t\"ễ\": \"e\",\n\t\"ệ\": \"e\",\n\t\"ì\": \"i\",\n\t\"í\": \"i\",\n\t\"î\": \"i\",\n\t\"ï\": \"i\",\n\t\"ḯ\": \"i\",\n\t\"ȋ\": \"i\",\n\t\"ỉ\": \"i\",\n\t\"ị\": \"i\",\n\t\"ð\": \"d\",\n\t\"ñ\": \"n\",\n\t\"ò\": \"o\",\n\t\"ó\": \"o\",\n\t\"ô\": \"o\",\n\t\"õ\": \"o\",\n\t\"ö\": \"o\",\n\t\"ø\": \"o\",\n\t\"ố\": \"o\",\n\t\"ṍ\": \"o\",\n\t\"ṓ\": \"o\",\n\t\"ȏ\": \"o\",\n\t\"ỏ\": \"o\",\n\t\"ọ\": \"o\",\n\t\"ổ\": \"o\",\n\t\"ỗ\": \"o\",\n\t\"ộ\": \"o\",\n\t\"ờ\": \"o\",\n\t\"ở\": \"o\",\n\t\"ỡ\": \"o\",\n\t\"ớ\": \"o\",\n\t\"ợ\": \"o\",\n\t\"ù\": \"u\",\n\t\"ú\": \"u\",\n\t\"û\": \"u\",\n\t\"ü\": \"u\",\n\t\"ủ\": \"u\",\n\t\"ụ\": \"u\",\n\t\"ử\": \"u\",\n\t\"ữ\": \"u\",\n\t\"ự\": \"u\",\n\t\"ý\": \"y\",\n\t\"ÿ\": \"y\",\n\t\"Ā\": \"A\",\n\t\"ā\": \"a\",\n\t\"Ă\": \"A\",\n\t\"ă\": \"a\",\n\t\"Ą\": \"A\",\n\t\"ą\": \"a\",\n\t\"Ć\": \"C\",\n\t\"ć\": \"c\",\n\t\"Ĉ\": \"C\",\n\t\"ĉ\": \"c\",\n\t\"Ċ\": \"C\",\n\t\"ċ\": \"c\",\n\t\"Č\": \"C\",\n\t\"č\": \"c\",\n\t\"C̆\": \"C\",\n\t\"c̆\": \"c\",\n\t\"Ď\": \"D\",\n\t\"ď\": \"d\",\n\t\"Đ\": \"D\",\n\t\"đ\": \"d\",\n\t\"Ē\": \"E\",\n\t\"ē\": \"e\",\n\t\"Ĕ\": \"E\",\n\t\"ĕ\": \"e\",\n\t\"Ė\": \"E\",\n\t\"ė\": \"e\",\n\t\"Ę\": \"E\",\n\t\"ę\": \"e\",\n\t\"Ě\": \"E\",\n\t\"ě\": \"e\",\n\t\"Ĝ\": \"G\",\n\t\"Ǵ\": \"G\",\n\t\"ĝ\": \"g\",\n\t\"ǵ\": \"g\",\n\t\"Ğ\": \"G\",\n\t\"ğ\": \"g\",\n\t\"Ġ\": \"G\",\n\t\"ġ\": \"g\",\n\t\"Ģ\": \"G\",\n\t\"ģ\": \"g\",\n\t\"Ĥ\": \"H\",\n\t\"ĥ\": \"h\",\n\t\"Ħ\": \"H\",\n\t\"ħ\": \"h\",\n\t\"Ḫ\": \"H\",\n\t\"ḫ\": \"h\",\n\t\"Ĩ\": \"I\",\n\t\"ĩ\": \"i\",\n\t\"Ī\": \"I\",\n\t\"ī\": \"i\",\n\t\"Ĭ\": \"I\",\n\t\"ĭ\": \"i\",\n\t\"Į\": \"I\",\n\t\"į\": \"i\",\n\t\"İ\": \"I\",\n\t\"ı\": \"i\",\n\t\"IJ\": \"IJ\",\n\t\"ij\": \"ij\",\n\t\"Ĵ\": \"J\",\n\t\"ĵ\": \"j\",\n\t\"Ķ\": \"K\",\n\t\"ķ\": \"k\",\n\t\"Ḱ\": \"K\",\n\t\"ḱ\": \"k\",\n\t\"K̆\": \"K\",\n\t\"k̆\": \"k\",\n\t\"Ĺ\": \"L\",\n\t\"ĺ\": \"l\",\n\t\"Ļ\": \"L\",\n\t\"ļ\": \"l\",\n\t\"Ľ\": \"L\",\n\t\"ľ\": \"l\",\n\t\"Ŀ\": \"L\",\n\t\"ŀ\": \"l\",\n\t\"Ł\": \"l\",\n\t\"ł\": \"l\",\n\t\"Ḿ\": \"M\",\n\t\"ḿ\": \"m\",\n\t\"M̆\": \"M\",\n\t\"m̆\": \"m\",\n\t\"Ń\": \"N\",\n\t\"ń\": \"n\",\n\t\"Ņ\": \"N\",\n\t\"ņ\": \"n\",\n\t\"Ň\": \"N\",\n\t\"ň\": \"n\",\n\t\"ʼn\": \"n\",\n\t\"N̆\": \"N\",\n\t\"n̆\": \"n\",\n\t\"Ō\": \"O\",\n\t\"ō\": \"o\",\n\t\"Ŏ\": \"O\",\n\t\"ŏ\": \"o\",\n\t\"Ő\": \"O\",\n\t\"ő\": \"o\",\n\t\"Œ\": \"OE\",\n\t\"œ\": \"oe\",\n\t\"P̆\": \"P\",\n\t\"p̆\": \"p\",\n\t\"Ŕ\": \"R\",\n\t\"ŕ\": \"r\",\n\t\"Ŗ\": \"R\",\n\t\"ŗ\": \"r\",\n\t\"Ř\": \"R\",\n\t\"ř\": \"r\",\n\t\"R̆\": \"R\",\n\t\"r̆\": \"r\",\n\t\"Ȓ\": \"R\",\n\t\"ȓ\": \"r\",\n\t\"Ś\": \"S\",\n\t\"ś\": \"s\",\n\t\"Ŝ\": \"S\",\n\t\"ŝ\": \"s\",\n\t\"Ş\": \"S\",\n\t\"Ș\": \"S\",\n\t\"ș\": \"s\",\n\t\"ş\": \"s\",\n\t\"Š\": \"S\",\n\t\"š\": \"s\",\n\t\"Ţ\": \"T\",\n\t\"ţ\": \"t\",\n\t\"ț\": \"t\",\n\t\"Ț\": \"T\",\n\t\"Ť\": \"T\",\n\t\"ť\": \"t\",\n\t\"Ŧ\": \"T\",\n\t\"ŧ\": \"t\",\n\t\"T̆\": \"T\",\n\t\"t̆\": \"t\",\n\t\"Ũ\": \"U\",\n\t\"ũ\": \"u\",\n\t\"Ū\": \"U\",\n\t\"ū\": \"u\",\n\t\"Ŭ\": \"U\",\n\t\"ŭ\": \"u\",\n\t\"Ů\": \"U\",\n\t\"ů\": \"u\",\n\t\"Ű\": \"U\",\n\t\"ű\": \"u\",\n\t\"Ų\": \"U\",\n\t\"ų\": \"u\",\n\t\"Ȗ\": \"U\",\n\t\"ȗ\": \"u\",\n\t\"V̆\": \"V\",\n\t\"v̆\": \"v\",\n\t\"Ŵ\": \"W\",\n\t\"ŵ\": \"w\",\n\t\"Ẃ\": \"W\",\n\t\"ẃ\": \"w\",\n\t\"X̆\": \"X\",\n\t\"x̆\": \"x\",\n\t\"Ŷ\": \"Y\",\n\t\"ŷ\": \"y\",\n\t\"Ÿ\": \"Y\",\n\t\"Y̆\": \"Y\",\n\t\"y̆\": \"y\",\n\t\"Ź\": \"Z\",\n\t\"ź\": \"z\",\n\t\"Ż\": \"Z\",\n\t\"ż\": \"z\",\n\t\"Ž\": \"Z\",\n\t\"ž\": \"z\",\n\t\"ſ\": \"s\",\n\t\"ƒ\": \"f\",\n\t\"Ơ\": \"O\",\n\t\"ơ\": \"o\",\n\t\"Ư\": \"U\",\n\t\"ư\": \"u\",\n\t\"Ǎ\": \"A\",\n\t\"ǎ\": \"a\",\n\t\"Ǐ\": \"I\",\n\t\"ǐ\": \"i\",\n\t\"Ǒ\": \"O\",\n\t\"ǒ\": \"o\",\n\t\"Ǔ\": \"U\",\n\t\"ǔ\": \"u\",\n\t\"Ǖ\": \"U\",\n\t\"ǖ\": \"u\",\n\t\"Ǘ\": \"U\",\n\t\"ǘ\": \"u\",\n\t\"Ǚ\": \"U\",\n\t\"ǚ\": \"u\",\n\t\"Ǜ\": \"U\",\n\t\"ǜ\": \"u\",\n\t\"Ứ\": \"U\",\n\t\"ứ\": \"u\",\n\t\"Ṹ\": \"U\",\n\t\"ṹ\": \"u\",\n\t\"Ǻ\": \"A\",\n\t\"ǻ\": \"a\",\n\t\"Ǽ\": \"AE\",\n\t\"ǽ\": \"ae\",\n\t\"Ǿ\": \"O\",\n\t\"ǿ\": \"o\",\n\t\"Þ\": \"TH\",\n\t\"þ\": \"th\",\n\t\"Ṕ\": \"P\",\n\t\"ṕ\": \"p\",\n\t\"Ṥ\": \"S\",\n\t\"ṥ\": \"s\",\n\t\"X́\": \"X\",\n\t\"x́\": \"x\",\n\t\"Ѓ\": \"Г\",\n\t\"ѓ\": \"г\",\n\t\"Ќ\": \"К\",\n\t\"ќ\": \"к\",\n\t\"A̋\": \"A\",\n\t\"a̋\": \"a\",\n\t\"E̋\": \"E\",\n\t\"e̋\": \"e\",\n\t\"I̋\": \"I\",\n\t\"i̋\": \"i\",\n\t\"Ǹ\": \"N\",\n\t\"ǹ\": \"n\",\n\t\"Ồ\": \"O\",\n\t\"ồ\": \"o\",\n\t\"Ṑ\": \"O\",\n\t\"ṑ\": \"o\",\n\t\"Ừ\": \"U\",\n\t\"ừ\": \"u\",\n\t\"Ẁ\": \"W\",\n\t\"ẁ\": \"w\",\n\t\"Ỳ\": \"Y\",\n\t\"ỳ\": \"y\",\n\t\"Ȁ\": \"A\",\n\t\"ȁ\": \"a\",\n\t\"Ȅ\": \"E\",\n\t\"ȅ\": \"e\",\n\t\"Ȉ\": \"I\",\n\t\"ȉ\": \"i\",\n\t\"Ȍ\": \"O\",\n\t\"ȍ\": \"o\",\n\t\"Ȑ\": \"R\",\n\t\"ȑ\": \"r\",\n\t\"Ȕ\": \"U\",\n\t\"ȕ\": \"u\",\n\t\"B̌\": \"B\",\n\t\"b̌\": \"b\",\n\t\"Č̣\": \"C\",\n\t\"č̣\": \"c\",\n\t\"Ê̌\": \"E\",\n\t\"ê̌\": \"e\",\n\t\"F̌\": \"F\",\n\t\"f̌\": \"f\",\n\t\"Ǧ\": \"G\",\n\t\"ǧ\": \"g\",\n\t\"Ȟ\": \"H\",\n\t\"ȟ\": \"h\",\n\t\"J̌\": \"J\",\n\t\"ǰ\": \"j\",\n\t\"Ǩ\": \"K\",\n\t\"ǩ\": \"k\",\n\t\"M̌\": \"M\",\n\t\"m̌\": \"m\",\n\t\"P̌\": \"P\",\n\t\"p̌\": \"p\",\n\t\"Q̌\": \"Q\",\n\t\"q̌\": \"q\",\n\t\"Ř̩\": \"R\",\n\t\"ř̩\": \"r\",\n\t\"Ṧ\": \"S\",\n\t\"ṧ\": \"s\",\n\t\"V̌\": \"V\",\n\t\"v̌\": \"v\",\n\t\"W̌\": \"W\",\n\t\"w̌\": \"w\",\n\t\"X̌\": \"X\",\n\t\"x̌\": \"x\",\n\t\"Y̌\": \"Y\",\n\t\"y̌\": \"y\",\n\t\"A̧\": \"A\",\n\t\"a̧\": \"a\",\n\t\"B̧\": \"B\",\n\t\"b̧\": \"b\",\n\t\"Ḑ\": \"D\",\n\t\"ḑ\": \"d\",\n\t\"Ȩ\": \"E\",\n\t\"ȩ\": \"e\",\n\t\"Ɛ̧\": \"E\",\n\t\"ɛ̧\": \"e\",\n\t\"Ḩ\": \"H\",\n\t\"ḩ\": \"h\",\n\t\"I̧\": \"I\",\n\t\"i̧\": \"i\",\n\t\"Ɨ̧\": \"I\",\n\t\"ɨ̧\": \"i\",\n\t\"M̧\": \"M\",\n\t\"m̧\": \"m\",\n\t\"O̧\": \"O\",\n\t\"o̧\": \"o\",\n\t\"Q̧\": \"Q\",\n\t\"q̧\": \"q\",\n\t\"U̧\": \"U\",\n\t\"u̧\": \"u\",\n\t\"X̧\": \"X\",\n\t\"x̧\": \"x\",\n\t\"Z̧\": \"Z\",\n\t\"z̧\": \"z\",\n\t\"й\":\"и\",\n\t\"Й\":\"И\",\n\t\"ё\":\"е\",\n\t\"Ё\":\"Е\",\n};\n\nvar chars = Object.keys(characterMap).join('|');\nvar allAccents = new RegExp(chars, 'g');\nvar firstAccent = new RegExp(chars, '');\n\nfunction matcher(match) {\n\treturn characterMap[match];\n}\n\nvar removeAccents = function(string) {\n\treturn string.replace(allAccents, matcher);\n};\n\nvar hasAccents = function(string) {\n\treturn !!string.match(firstAccent);\n};\n\nmodule.exports = removeAccents;\nmodule.exports.has = hasAccents;\nmodule.exports.remove = removeAccents;\n","const CSSValueParser = require('postcss-value-parser')\n\n/**\n * @type {import('postcss').PluginCreator}\n */\nmodule.exports = (opts) => {\n\n const DEFAULTS = {\n skipHostRelativeUrls: true,\n }\n const config = Object.assign(DEFAULTS, opts)\n\n return {\n postcssPlugin: 'rebaseUrl',\n\n Declaration(decl) {\n // The faster way to find Declaration node\n const parsedValue = CSSValueParser(decl.value)\n\n let valueChanged = false\n parsedValue.walk(node => {\n if (node.type !== 'function' || node.value !== 'url') {\n return\n }\n\n const urlVal = node.nodes[0].value\n\n // bases relative URLs with rootUrl\n const basedUrl = new URL(urlVal, opts.rootUrl)\n\n // skip host-relative, already normalized URLs (e.g. `/images/image.jpg`, without `..`s)\n if ((basedUrl.pathname === urlVal) && config.skipHostRelativeUrls) {\n return false // skip this value\n }\n\n node.nodes[0].value = basedUrl.toString()\n valueChanged = true\n\n return false // do not walk deeper\n })\n\n if (valueChanged) {\n decl.value = CSSValueParser.stringify(parsedValue)\n }\n\n }\n }\n}\n\nmodule.exports.postcss = true\n","var parse = require(\"./parse\");\nvar walk = require(\"./walk\");\nvar stringify = require(\"./stringify\");\n\nfunction ValueParser(value) {\n if (this instanceof ValueParser) {\n this.nodes = parse(value);\n return this;\n }\n return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n walk(this.nodes, cb, bubble);\n return this;\n};\n\nValueParser.unit = require(\"./unit\");\n\nValueParser.walk = walk;\n\nValueParser.stringify = stringify;\n\nmodule.exports = ValueParser;\n","var openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\nvar uLower = \"u\".charCodeAt(0);\nvar uUpper = \"U\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar isUnicodeRange = /^[a-f0-9?-]+$/i;\n\nmodule.exports = function(input) {\n var tokens = [];\n var value = input;\n\n var next,\n quote,\n prev,\n token,\n escape,\n escapePos,\n whitespacePos,\n parenthesesOpenPos;\n var pos = 0;\n var code = value.charCodeAt(pos);\n var max = value.length;\n var stack = [{ nodes: tokens }];\n var balanced = 0;\n var parent;\n\n var name = \"\";\n var before = \"\";\n var after = \"\";\n\n while (pos < max) {\n // Whitespaces\n if (code <= 32) {\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n token = value.slice(pos, next);\n\n prev = tokens[tokens.length - 1];\n if (code === closeParentheses && balanced) {\n after = token;\n } else if (prev && prev.type === \"div\") {\n prev.after = token;\n prev.sourceEndIndex += token.length;\n } else if (\n code === comma ||\n code === colon ||\n (code === slash &&\n value.charCodeAt(next + 1) !== star &&\n (!parent ||\n (parent && parent.type === \"function\" && parent.value !== \"calc\")))\n ) {\n before = token;\n } else {\n tokens.push({\n type: \"space\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n }\n\n pos = next;\n\n // Quotes\n } else if (code === singleQuote || code === doubleQuote) {\n next = pos;\n quote = code === singleQuote ? \"'\" : '\"';\n token = {\n type: \"string\",\n sourceIndex: pos,\n quote: quote\n };\n do {\n escape = false;\n next = value.indexOf(quote, next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += quote;\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n token.value = value.slice(pos + 1, next);\n token.sourceEndIndex = token.unclosed ? next : next + 1;\n tokens.push(token);\n pos = next + 1;\n code = value.charCodeAt(pos);\n\n // Comments\n } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n next = value.indexOf(\"*/\", pos);\n\n token = {\n type: \"comment\",\n sourceIndex: pos,\n sourceEndIndex: next + 2\n };\n\n if (next === -1) {\n token.unclosed = true;\n next = value.length;\n token.sourceEndIndex = next;\n }\n\n token.value = value.slice(pos + 2, next);\n tokens.push(token);\n\n pos = next + 2;\n code = value.charCodeAt(pos);\n\n // Operation within calc\n } else if (\n (code === slash || code === star) &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\"\n ) {\n token = value[pos];\n tokens.push({\n type: \"word\",\n sourceIndex: pos - before.length,\n sourceEndIndex: pos + token.length,\n value: token\n });\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Dividers\n } else if (code === slash || code === comma || code === colon) {\n token = value[pos];\n\n tokens.push({\n type: \"div\",\n sourceIndex: pos - before.length,\n sourceEndIndex: pos + token.length,\n value: token,\n before: before,\n after: \"\"\n });\n before = \"\";\n\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Open parentheses\n } else if (openParentheses === code) {\n // Whitespaces after open parentheses\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n parenthesesOpenPos = pos;\n token = {\n type: \"function\",\n sourceIndex: pos - name.length,\n value: name,\n before: value.slice(parenthesesOpenPos + 1, next)\n };\n pos = next;\n\n if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n next -= 1;\n do {\n escape = false;\n next = value.indexOf(\")\", next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += \")\";\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n // Whitespaces before closed\n whitespacePos = next;\n do {\n whitespacePos -= 1;\n code = value.charCodeAt(whitespacePos);\n } while (code <= 32);\n if (parenthesesOpenPos < whitespacePos) {\n if (pos !== whitespacePos + 1) {\n token.nodes = [\n {\n type: \"word\",\n sourceIndex: pos,\n sourceEndIndex: whitespacePos + 1,\n value: value.slice(pos, whitespacePos + 1)\n }\n ];\n } else {\n token.nodes = [];\n }\n if (token.unclosed && whitespacePos + 1 !== next) {\n token.after = \"\";\n token.nodes.push({\n type: \"space\",\n sourceIndex: whitespacePos + 1,\n sourceEndIndex: next,\n value: value.slice(whitespacePos + 1, next)\n });\n } else {\n token.after = value.slice(whitespacePos + 1, next);\n token.sourceEndIndex = next;\n }\n } else {\n token.after = \"\";\n token.nodes = [];\n }\n pos = next + 1;\n token.sourceEndIndex = token.unclosed ? next : pos;\n code = value.charCodeAt(pos);\n tokens.push(token);\n } else {\n balanced += 1;\n token.after = \"\";\n token.sourceEndIndex = pos + 1;\n tokens.push(token);\n stack.push(token);\n tokens = token.nodes = [];\n parent = token;\n }\n name = \"\";\n\n // Close parentheses\n } else if (closeParentheses === code && balanced) {\n pos += 1;\n code = value.charCodeAt(pos);\n\n parent.after = after;\n parent.sourceEndIndex += after.length;\n after = \"\";\n balanced -= 1;\n stack[stack.length - 1].sourceEndIndex = pos;\n stack.pop();\n parent = stack[balanced];\n tokens = parent.nodes;\n\n // Words\n } else {\n next = pos;\n do {\n if (code === backslash) {\n next += 1;\n }\n next += 1;\n code = value.charCodeAt(next);\n } while (\n next < max &&\n !(\n code <= 32 ||\n code === singleQuote ||\n code === doubleQuote ||\n code === comma ||\n code === colon ||\n code === slash ||\n code === openParentheses ||\n (code === star &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === slash &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === closeParentheses && balanced)\n )\n );\n token = value.slice(pos, next);\n\n if (openParentheses === code) {\n name = token;\n } else if (\n (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&\n plus === token.charCodeAt(1) &&\n isUnicodeRange.test(token.slice(2))\n ) {\n tokens.push({\n type: \"unicode-range\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n } else {\n tokens.push({\n type: \"word\",\n sourceIndex: pos,\n sourceEndIndex: next,\n value: token\n });\n }\n\n pos = next;\n }\n }\n\n for (pos = stack.length - 1; pos; pos -= 1) {\n stack[pos].unclosed = true;\n stack[pos].sourceEndIndex = value.length;\n }\n\n return stack[0].nodes;\n};\n","function stringifyNode(node, custom) {\n var type = node.type;\n var value = node.value;\n var buf;\n var customResult;\n\n if (custom && (customResult = custom(node)) !== undefined) {\n return customResult;\n } else if (type === \"word\" || type === \"space\") {\n return value;\n } else if (type === \"string\") {\n buf = node.quote || \"\";\n return buf + value + (node.unclosed ? \"\" : buf);\n } else if (type === \"comment\") {\n return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n } else if (type === \"div\") {\n return (node.before || \"\") + value + (node.after || \"\");\n } else if (Array.isArray(node.nodes)) {\n buf = stringify(node.nodes, custom);\n if (type !== \"function\") {\n return buf;\n }\n return (\n value +\n \"(\" +\n (node.before || \"\") +\n buf +\n (node.after || \"\") +\n (node.unclosed ? \"\" : \")\")\n );\n }\n return value;\n}\n\nfunction stringify(nodes, custom) {\n var result, i;\n\n if (Array.isArray(nodes)) {\n result = \"\";\n for (i = nodes.length - 1; ~i; i -= 1) {\n result = stringifyNode(nodes[i], custom) + result;\n }\n return result;\n }\n return stringifyNode(nodes, custom);\n}\n\nmodule.exports = stringify;\n","var minus = \"-\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar dot = \".\".charCodeAt(0);\nvar exp = \"e\".charCodeAt(0);\nvar EXP = \"E\".charCodeAt(0);\n\n// Check if three code points would start a number\n// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number\nfunction likeNumber(value) {\n var code = value.charCodeAt(0);\n var nextCode;\n\n if (code === plus || code === minus) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n var nextNextCode = value.charCodeAt(2);\n\n if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code === dot) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code >= 48 && code <= 57) {\n return true;\n }\n\n return false;\n}\n\n// Consume a number\n// https://www.w3.org/TR/css-syntax-3/#consume-number\nmodule.exports = function(value) {\n var pos = 0;\n var length = value.length;\n var code;\n var nextCode;\n var nextNextCode;\n\n if (length === 0 || !likeNumber(value)) {\n return false;\n }\n\n code = value.charCodeAt(pos);\n\n if (code === plus || code === minus) {\n pos++;\n }\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n\n if (code === dot && nextCode >= 48 && nextCode <= 57) {\n pos += 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n nextNextCode = value.charCodeAt(pos + 2);\n\n if (\n (code === exp || code === EXP) &&\n ((nextCode >= 48 && nextCode <= 57) ||\n ((nextCode === plus || nextCode === minus) &&\n nextNextCode >= 48 &&\n nextNextCode <= 57))\n ) {\n pos += nextCode === plus || nextCode === minus ? 3 : 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n return {\n number: value.slice(0, pos),\n unit: value.slice(pos)\n };\n};\n","module.exports = function walk(nodes, cb, bubble) {\n var i, max, node, result;\n\n for (i = 0, max = nodes.length; i < max; i += 1) {\n node = nodes[i];\n if (!bubble) {\n result = cb(node, i, nodes);\n }\n\n if (\n result !== false &&\n node.type === \"function\" &&\n Array.isArray(node.nodes)\n ) {\n walk(node.nodes, cb, bubble);\n }\n\n if (bubble) {\n cb(node, i, nodes);\n }\n }\n};\n","module.exports = window[\"React\"];","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nlet nanoid = (size = 21) => {\n let id = ''\n let i = size\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\nmodule.exports = { nanoid, customAlphabet }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blocks\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"element\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"data\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"compose\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"hooks\"];","/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\nexport const mayDisplayControlsKey = Symbol( 'mayDisplayControls' );\nexport const mayDisplayParentControlsKey = Symbol( 'mayDisplayParentControls' );\nexport const blockEditingModeKey = Symbol( 'blockEditingMode' );\nexport const blockBindingsKey = Symbol( 'blockBindings' );\nexport const isPreviewModeKey = Symbol( 'isPreviewMode' );\n\nexport const DEFAULT_BLOCK_EDIT_CONTEXT = {\n\tname: '',\n\tisSelected: false,\n};\n\nconst Context = createContext( DEFAULT_BLOCK_EDIT_CONTEXT );\nconst { Provider } = Context;\n\nexport { Provider as BlockEditContextProvider };\n\n/**\n * A hook that returns the block edit context.\n *\n * @return {Object} Block edit context\n */\nexport function useBlockEditContext() {\n\treturn useContext( Context );\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"deprecated\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"i18n\"];","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\n\nexport const PREFERENCES_DEFAULTS = {\n\tinsertUsage: {},\n};\n\n/**\n * The default editor settings\n *\n * @typedef {Object} SETTINGS_DEFAULT\n * @property {boolean} alignWide Enable/Disable Wide/Full Alignments\n * @property {boolean} supportsLayout Enable/disable layouts support in container blocks.\n * @property {boolean} imageEditing Image Editing settings set to false to disable.\n * @property {Array} imageSizes Available image sizes\n * @property {number} maxWidth Max width to constraint resizing\n * @property {boolean|Array} allowedBlockTypes Allowed block types\n * @property {boolean} hasFixedToolbar Whether or not the editor toolbar is fixed\n * @property {boolean} distractionFree Whether or not the editor UI is distraction free\n * @property {boolean} focusMode Whether the focus mode is enabled or not\n * @property {Array} styles Editor Styles\n * @property {boolean} keepCaretInsideBlock Whether caret should move between blocks in edit mode\n * @property {string} bodyPlaceholder Empty post placeholder\n * @property {string} titlePlaceholder Empty title placeholder\n * @property {boolean} canLockBlocks Whether the user can manage Block Lock state\n * @property {boolean} codeEditingEnabled Whether or not the user can switch to the code editor\n * @property {boolean} generateAnchors Enable/Disable auto anchor generation for Heading blocks\n * @property {boolean} enableOpenverseMediaCategory Enable/Disable the Openverse media category in the inserter.\n * @property {boolean} clearBlockSelection Whether the block editor should clear selection on mousedown when a block is not clicked.\n * @property {boolean} __experimentalCanUserUseUnfilteredHTML Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes.\n * @property {boolean} __experimentalBlockDirectory Whether the user has enabled the Block Directory\n * @property {Array} __experimentalBlockPatterns Array of objects representing the block patterns\n * @property {Array} __experimentalBlockPatternCategories Array of objects representing the block pattern categories\n */\nexport const SETTINGS_DEFAULTS = {\n\talignWide: false,\n\tsupportsLayout: true,\n\n\t// colors setting is not used anymore now defaults are passed from theme.json on the server and core has its own defaults.\n\t// The setting is only kept for backward compatibility purposes.\n\tcolors: [\n\t\t{\n\t\t\tname: __( 'Black' ),\n\t\t\tslug: 'black',\n\t\t\tcolor: '#000000',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Cyan bluish gray' ),\n\t\t\tslug: 'cyan-bluish-gray',\n\t\t\tcolor: '#abb8c3',\n\t\t},\n\t\t{\n\t\t\tname: __( 'White' ),\n\t\t\tslug: 'white',\n\t\t\tcolor: '#ffffff',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Pale pink' ),\n\t\t\tslug: 'pale-pink',\n\t\t\tcolor: '#f78da7',\n\t\t},\n\t\t{ name: __( 'Vivid red' ), slug: 'vivid-red', color: '#cf2e2e' },\n\t\t{\n\t\t\tname: __( 'Luminous vivid orange' ),\n\t\t\tslug: 'luminous-vivid-orange',\n\t\t\tcolor: '#ff6900',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous vivid amber' ),\n\t\t\tslug: 'luminous-vivid-amber',\n\t\t\tcolor: '#fcb900',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Light green cyan' ),\n\t\t\tslug: 'light-green-cyan',\n\t\t\tcolor: '#7bdcb5',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Vivid green cyan' ),\n\t\t\tslug: 'vivid-green-cyan',\n\t\t\tcolor: '#00d084',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Pale cyan blue' ),\n\t\t\tslug: 'pale-cyan-blue',\n\t\t\tcolor: '#8ed1fc',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Vivid cyan blue' ),\n\t\t\tslug: 'vivid-cyan-blue',\n\t\t\tcolor: '#0693e3',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Vivid purple' ),\n\t\t\tslug: 'vivid-purple',\n\t\t\tcolor: '#9b51e0',\n\t\t},\n\t],\n\t// fontSizes setting is not used anymore now defaults are passed from theme.json on the server and core has its own defaults.\n\t// The setting is only kept for backward compatibility purposes.\n\tfontSizes: [\n\t\t{\n\t\t\tname: _x( 'Small', 'font size name' ),\n\t\t\tsize: 13,\n\t\t\tslug: 'small',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Normal', 'font size name' ),\n\t\t\tsize: 16,\n\t\t\tslug: 'normal',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Medium', 'font size name' ),\n\t\t\tsize: 20,\n\t\t\tslug: 'medium',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Large', 'font size name' ),\n\t\t\tsize: 36,\n\t\t\tslug: 'large',\n\t\t},\n\t\t{\n\t\t\tname: _x( 'Huge', 'font size name' ),\n\t\t\tsize: 42,\n\t\t\tslug: 'huge',\n\t\t},\n\t],\n\n\t// Image default size slug.\n\timageDefaultSize: 'large',\n\n\timageSizes: [\n\t\t{ slug: 'thumbnail', name: __( 'Thumbnail' ) },\n\t\t{ slug: 'medium', name: __( 'Medium' ) },\n\t\t{ slug: 'large', name: __( 'Large' ) },\n\t\t{ slug: 'full', name: __( 'Full Size' ) },\n\t],\n\n\t// Allow plugin to disable Image Editor if need be.\n\timageEditing: true,\n\n\t// This is current max width of the block inner area\n\t// It's used to constraint image resizing and this value could be overridden later by themes\n\tmaxWidth: 580,\n\n\t// Allowed block types for the editor, defaulting to true (all supported).\n\tallowedBlockTypes: true,\n\n\t// Maximum upload size in bytes allowed for the site.\n\tmaxUploadFileSize: 0,\n\n\t// List of allowed mime types and file extensions.\n\tallowedMimeTypes: null,\n\n\t// Allows to disable block locking interface.\n\tcanLockBlocks: true,\n\n\t// Allows to disable Openverse media category in the inserter.\n\tenableOpenverseMediaCategory: true,\n\n\tclearBlockSelection: true,\n\n\t__experimentalCanUserUseUnfilteredHTML: false,\n\t__experimentalBlockDirectory: false,\n\t__mobileEnablePageTemplates: false,\n\t__experimentalBlockPatterns: [],\n\t__experimentalBlockPatternCategories: [],\n\t__unstableIsPreviewMode: false,\n\n\t// These settings will be completely revamped in the future.\n\t// The goal is to evolve this into an API which will instruct\n\t// the block inspector to animate transitions between what it\n\t// displays based on the relationship between the selected block\n\t// and its parent, and only enable it if the parent is controlling\n\t// its children blocks.\n\tblockInspectorAnimation: {\n\t\tanimationParent: 'core/navigation',\n\t\t'core/navigation': { enterDirection: 'leftToRight' },\n\t\t'core/navigation-submenu': { enterDirection: 'rightToLeft' },\n\t\t'core/navigation-link': { enterDirection: 'rightToLeft' },\n\t\t'core/search': { enterDirection: 'rightToLeft' },\n\t\t'core/social-links': { enterDirection: 'rightToLeft' },\n\t\t'core/page-list': { enterDirection: 'rightToLeft' },\n\t\t'core/spacer': { enterDirection: 'rightToLeft' },\n\t\t'core/home-link': { enterDirection: 'rightToLeft' },\n\t\t'core/site-title': { enterDirection: 'rightToLeft' },\n\t\t'core/site-logo': { enterDirection: 'rightToLeft' },\n\t},\n\n\tgenerateAnchors: false,\n\t// gradients setting is not used anymore now defaults are passed from theme.json on the server and core has its own defaults.\n\t// The setting is only kept for backward compatibility purposes.\n\tgradients: [\n\t\t{\n\t\t\tname: __( 'Vivid cyan blue to vivid purple' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',\n\t\t\tslug: 'vivid-cyan-blue-to-vivid-purple',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Light green cyan to vivid green cyan' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)',\n\t\t\tslug: 'light-green-cyan-to-vivid-green-cyan',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous vivid amber to luminous vivid orange' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)',\n\t\t\tslug: 'luminous-vivid-amber-to-luminous-vivid-orange',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous vivid orange to vivid red' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)',\n\t\t\tslug: 'luminous-vivid-orange-to-vivid-red',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Very light gray to cyan bluish gray' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%)',\n\t\t\tslug: 'very-light-gray-to-cyan-bluish-gray',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Cool to warm spectrum' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%)',\n\t\t\tslug: 'cool-to-warm-spectrum',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Blush light purple' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%)',\n\t\t\tslug: 'blush-light-purple',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Blush bordeaux' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%)',\n\t\t\tslug: 'blush-bordeaux',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Luminous dusk' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%)',\n\t\t\tslug: 'luminous-dusk',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Pale ocean' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%)',\n\t\t\tslug: 'pale-ocean',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Electric grass' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%)',\n\t\t\tslug: 'electric-grass',\n\t\t},\n\t\t{\n\t\t\tname: __( 'Midnight' ),\n\t\t\tgradient:\n\t\t\t\t'linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%)',\n\t\t\tslug: 'midnight',\n\t\t},\n\t],\n\n\t__unstableResolvedAssets: { styles: [], scripts: [] },\n};\n","/**\n * Insert one or multiple elements into a given position of an array.\n *\n * @param {Array} array Source array.\n * @param {*} elements Elements to insert.\n * @param {number} index Insert Position.\n *\n * @return {Array} Result.\n */\nexport function insertAt( array, elements, index ) {\n\treturn [\n\t\t...array.slice( 0, index ),\n\t\t...( Array.isArray( elements ) ? elements : [ elements ] ),\n\t\t...array.slice( index ),\n\t];\n}\n\n/**\n * Moves an element in an array.\n *\n * @param {Array} array Source array.\n * @param {number} from Source index.\n * @param {number} to Destination index.\n * @param {number} count Number of elements to move.\n *\n * @return {Array} Result.\n */\nexport function moveTo( array, from, to, count = 1 ) {\n\tconst withoutMovedElements = [ ...array ];\n\twithoutMovedElements.splice( from, count );\n\treturn insertAt(\n\t\twithoutMovedElements,\n\t\tarray.slice( from, from + count ),\n\t\tto\n\t);\n}\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { pipe } from '@wordpress/compose';\nimport { combineReducers, select } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\n/**\n * Internal dependencies\n */\nimport { PREFERENCES_DEFAULTS, SETTINGS_DEFAULTS } from './defaults';\nimport { insertAt, moveTo } from './array';\n\nconst identity = ( x ) => x;\n\n/**\n * Given an array of blocks, returns an object where each key is a nesting\n * context, the value of which is an array of block client IDs existing within\n * that nesting context.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockOrder( blocks, rootClientId = '' ) {\n\tconst result = new Map();\n\tconst current = [];\n\tresult.set( rootClientId, current );\n\tblocks.forEach( ( block ) => {\n\t\tconst { clientId, innerBlocks } = block;\n\t\tcurrent.push( clientId );\n\t\tmapBlockOrder( innerBlocks, clientId ).forEach(\n\t\t\t( order, subClientId ) => {\n\t\t\t\tresult.set( subClientId, order );\n\t\t\t}\n\t\t);\n\t} );\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object where each key contains\n * the clientId of the block and the value is the parent of the block.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockParents( blocks, rootClientId = '' ) {\n\tconst result = [];\n\tconst stack = [ [ rootClientId, blocks ] ];\n\twhile ( stack.length ) {\n\t\tconst [ parent, currentBlocks ] = stack.shift();\n\t\tcurrentBlocks.forEach( ( { innerBlocks, ...block } ) => {\n\t\t\tresult.push( [ block.clientId, parent ] );\n\t\t\tif ( innerBlocks?.length ) {\n\t\t\t\tstack.push( [ block.clientId, innerBlocks ] );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n}\n\n/**\n * Helper method to iterate through all blocks, recursing into inner blocks,\n * applying a transformation function to each one.\n * Returns a flattened object with the transformed blocks.\n *\n * @param {Array} blocks Blocks to flatten.\n * @param {Function} transform Transforming function to be applied to each block.\n *\n * @return {Array} Flattened object.\n */\nfunction flattenBlocks( blocks, transform = identity ) {\n\tconst result = [];\n\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult.push( [ block.clientId, transform( block ) ] );\n\t}\n\n\treturn result;\n}\n\nfunction getFlattenedClientIds( blocks ) {\n\tconst result = {};\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult[ block.clientId ] = true;\n\t}\n\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object containing all blocks, without\n * attributes, recursing into inner blocks. Keys correspond to the block client\n * ID, the value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlocksWithoutAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => {\n\t\tconst { attributes, ...restBlock } = block;\n\t\treturn restBlock;\n\t} );\n}\n\n/**\n * Given an array of blocks, returns an object containing all block attributes,\n * recursing into inner blocks. Keys correspond to the block client ID, the\n * value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlockAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => block.attributes );\n}\n\n/**\n * Returns true if the two object arguments have the same keys, or false\n * otherwise.\n *\n * @param {Object} a First object.\n * @param {Object} b Second object.\n *\n * @return {boolean} Whether the two objects have the same keys.\n */\nexport function hasSameKeys( a, b ) {\n\treturn fastDeepEqual( Object.keys( a ), Object.keys( b ) );\n}\n\n/**\n * Returns true if, given the currently dispatching action and the previously\n * dispatched action, the two actions are updating the same block attribute, or\n * false otherwise.\n *\n * @param {Object} action Currently dispatching action.\n * @param {Object} lastAction Previously dispatched action.\n *\n * @return {boolean} Whether actions are updating the same block attribute.\n */\nexport function isUpdatingSameBlockAttribute( action, lastAction ) {\n\treturn (\n\t\taction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tlastAction !== undefined &&\n\t\tlastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tfastDeepEqual( action.clientIds, lastAction.clientIds ) &&\n\t\thasSameKeys( action.attributes, lastAction.attributes )\n\t);\n}\n\nfunction updateBlockTreeForBlocks( state, blocks ) {\n\tconst treeToUpdate = state.tree;\n\tconst stack = [ ...blocks ];\n\tconst flattenedBlocks = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst block = stack.shift();\n\t\tstack.push( ...block.innerBlocks );\n\t\tflattenedBlocks.push( ...block.innerBlocks );\n\t}\n\t// Create objects before mutating them, that way it's always defined.\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set( block.clientId, {} );\n\t}\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set(\n\t\t\tblock.clientId,\n\t\t\tObject.assign( treeToUpdate.get( block.clientId ), {\n\t\t\t\t...state.byClientId.get( block.clientId ),\n\t\t\t\tattributes: state.attributes.get( block.clientId ),\n\t\t\t\tinnerBlocks: block.innerBlocks.map( ( subBlock ) =>\n\t\t\t\t\ttreeToUpdate.get( subBlock.clientId )\n\t\t\t\t),\n\t\t\t} )\n\t\t);\n\t}\n}\n\nfunction updateParentInnerBlocksInTree(\n\tstate,\n\tupdatedClientIds,\n\tupdateChildrenOfUpdatedClientIds = false\n) {\n\tconst treeToUpdate = state.tree;\n\tconst uncontrolledParents = new Set( [] );\n\tconst controlledParents = new Set();\n\tfor ( const clientId of updatedClientIds ) {\n\t\tlet current = updateChildrenOfUpdatedClientIds\n\t\t\t? clientId\n\t\t\t: state.parents.get( clientId );\n\t\tdo {\n\t\t\tif ( state.controlledInnerBlocks[ current ] ) {\n\t\t\t\t// Should stop on controlled blocks.\n\t\t\t\t// If we reach a controlled parent, break out of the loop.\n\t\t\t\tcontrolledParents.add( current );\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Else continue traversing up through parents.\n\t\t\t\tuncontrolledParents.add( current );\n\t\t\t\tcurrent = state.parents.get( current );\n\t\t\t}\n\t\t} while ( current !== undefined );\n\t}\n\n\t// To make sure the order of assignments doesn't matter,\n\t// we first create empty objects and mutates the inner blocks later.\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.set( clientId, { ...treeToUpdate.get( clientId ) } );\n\t}\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.get( clientId ).innerBlocks = (\n\t\t\tstate.order.get( clientId ) || []\n\t\t).map( ( subClientId ) => treeToUpdate.get( subClientId ) );\n\t}\n\n\t// Controlled parent blocks, need a dedicated key for their inner blocks\n\t// to be used when doing getBlocks( controlledBlockClientId ).\n\tfor ( const clientId of controlledParents ) {\n\t\ttreeToUpdate.set( 'controlled||' + clientId, {\n\t\t\tinnerBlocks: ( state.order.get( clientId ) || [] ).map(\n\t\t\t\t( subClientId ) => treeToUpdate.get( subClientId )\n\t\t\t),\n\t\t} );\n\t}\n}\n\n/**\n * Higher-order reducer intended to compute full block objects key for each block in the post.\n * This is a denormalization to optimize the performance of the getBlock selectors and avoid\n * recomputing the block objects and avoid heavy memoization.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockTree =\n\t( reducer ) =>\n\t( state = {}, action ) => {\n\t\tconst newState = reducer( state, action );\n\n\t\tif ( newState === state ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tnewState.tree = state.tree ? state.tree : new Map();\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.rootClientId ? [ action.rootClientId ] : [ '' ],\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK':\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tnewState.tree.set( action.clientId, {\n\t\t\t\t\t...newState.tree.get( action.clientId ),\n\t\t\t\t\t...newState.byClientId.get( action.clientId ),\n\t\t\t\t\tattributes: newState.attributes.get( action.clientId ),\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\t[ action.clientId ],\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.clientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.tree.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.clientIds,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst inserterClientIds = getFlattenedClientIds(\n\t\t\t\t\taction.blocks\n\t\t\t\t);\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\t// Controlled inner blocks are only removed\n\t\t\t\t\t// if the block doesn't move to another position\n\t\t\t\t\t// otherwise their content will be lost.\n\t\t\t\t\tif ( ! inserterClientIds[ clientId ] ) {\n\t\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.blocks.map( ( b ) => b.clientId ),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\t// If there are no replaced blocks, it means we're removing blocks so we need to update their parent.\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tif ( action.fromRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.fromRootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tupdatedBlockUids.push( '' );\n\t\t\t\t}\n\t\t\t\tif ( action.toRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.toRootClientId );\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_UP':\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst updatedBlockUids = [\n\t\t\t\t\taction.rootClientId ? action.rootClientId : '',\n\t\t\t\t];\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SAVE_REUSABLE_BLOCK_SUCCESS': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tnewState.attributes.forEach( ( attributes, clientId ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnewState.byClientId.get( clientId ).name ===\n\t\t\t\t\t\t\t'core/block' &&\n\t\t\t\t\t\tattributes.ref === action.updatedId\n\t\t\t\t\t) {\n\t\t\t\t\t\tupdatedBlockUids.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdatedBlockUids.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.byClientId.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t\tinnerBlocks: newState.tree.get( clientId ).innerBlocks,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn newState;\n\t};\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isPersistentChange` property value corresponding to whether a change in\n * state can be considered as persistent. All changes are considered persistent\n * except when updating the same block attribute as in the previous action.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withPersistentBlockChange( reducer ) {\n\tlet lastAction;\n\tlet markNextChangeAsNotPersistent = false;\n\tlet explicitPersistent;\n\n\treturn ( state, action ) => {\n\t\tlet nextState = reducer( state, action );\n\n\t\tlet nextIsPersistentChange;\n\t\tif ( action.type === 'SET_EXPLICIT_PERSISTENT' ) {\n\t\t\texplicitPersistent = action.isPersistentChange;\n\t\t\tnextIsPersistentChange = state.isPersistentChange ?? true;\n\t\t}\n\n\t\tif ( explicitPersistent !== undefined ) {\n\t\t\tnextIsPersistentChange = explicitPersistent;\n\t\t\treturn nextIsPersistentChange === nextState.isPersistentChange\n\t\t\t\t? nextState\n\t\t\t\t: {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t\t };\n\t\t}\n\n\t\tconst isExplicitPersistentChange =\n\t\t\taction.type === 'MARK_LAST_CHANGE_AS_PERSISTENT' ||\n\t\t\tmarkNextChangeAsNotPersistent;\n\n\t\t// Defer to previous state value (or default) unless changing or\n\t\t// explicitly marking as persistent.\n\t\tif ( state === nextState && ! isExplicitPersistentChange ) {\n\t\t\tmarkNextChangeAsNotPersistent =\n\t\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\t\tnextIsPersistentChange = state?.isPersistentChange ?? true;\n\t\t\tif ( state.isPersistentChange === nextIsPersistentChange ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t};\n\t\t}\n\n\t\tnextState = {\n\t\t\t...nextState,\n\t\t\tisPersistentChange: isExplicitPersistentChange\n\t\t\t\t? ! markNextChangeAsNotPersistent\n\t\t\t\t: ! isUpdatingSameBlockAttribute( action, lastAction ),\n\t\t};\n\n\t\t// In comparing against the previous action, consider only those which\n\t\t// would have qualified as one which would have been ignored or not\n\t\t// have resulted in a changed state.\n\t\tlastAction = action;\n\t\tmarkNextChangeAsNotPersistent =\n\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isIgnoredChange` property value corresponding to whether a change in state\n * can be considered as ignored. A change is considered ignored when the result\n * of an action not incurred by direct user interaction.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withIgnoredBlockChange( reducer ) {\n\t/**\n\t * Set of action types for which a blocks state change should be ignored.\n\t *\n\t * @type {Set}\n\t */\n\tconst IGNORED_ACTION_TYPES = new Set( [ 'RECEIVE_BLOCKS' ] );\n\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( nextState !== state ) {\n\t\t\tnextState.isIgnoredChange = IGNORED_ACTION_TYPES.has( action.type );\n\t\t}\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer targeting the combined blocks reducer, augmenting\n * block client IDs in remove action to include cascade of inner blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withInnerBlocksRemoveCascade = ( reducer ) => ( state, action ) => {\n\t// Gets all children which need to be removed.\n\tconst getAllChildren = ( clientIds ) => {\n\t\tlet result = clientIds;\n\t\tfor ( let i = 0; i < result.length; i++ ) {\n\t\t\tif (\n\t\t\t\t! state.order.get( result[ i ] ) ||\n\t\t\t\t( action.keepControlledInnerBlocks &&\n\t\t\t\t\taction.keepControlledInnerBlocks[ result[ i ] ] )\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( result === clientIds ) {\n\t\t\t\tresult = [ ...result ];\n\t\t\t}\n\n\t\t\tresult.push( ...state.order.get( result[ i ] ) );\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( state ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\tremovedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'REPLACE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\treplacedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `RESET_BLOCKS` action. When dispatched, this action will replace all\n * blocks that exist in the post, leaving blocks that exist only in state (e.g.\n * reusable blocks and blocks controlled by inner blocks controllers) alone.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockReset = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'RESET_BLOCKS' ) {\n\t\tconst newState = {\n\t\t\t...state,\n\t\t\tbyClientId: new Map(\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks )\n\t\t\t),\n\t\t\tattributes: new Map( getFlattenedBlockAttributes( action.blocks ) ),\n\t\t\torder: mapBlockOrder( action.blocks ),\n\t\t\tparents: new Map( mapBlockParents( action.blocks ) ),\n\t\t\tcontrolledInnerBlocks: {},\n\t\t};\n\n\t\tnewState.tree = new Map( state?.tree );\n\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\tnewState.tree.set( '', {\n\t\t\tinnerBlocks: action.blocks.map( ( subBlock ) =>\n\t\t\t\tnewState.tree.get( subBlock.clientId )\n\t\t\t),\n\t\t} );\n\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `REPLACE_INNER_BLOCKS` action. When dispatched, this action the state\n * should become equivalent to the execution of a `REMOVE_BLOCKS` action\n * containing all the child's of the root block followed by the execution of\n * `INSERT_BLOCKS` with the new blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withReplaceInnerBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type !== 'REPLACE_INNER_BLOCKS' ) {\n\t\treturn reducer( state, action );\n\t}\n\n\t// Finds every nested inner block controller. We must check the action blocks\n\t// and not just the block parent state because some inner block controllers\n\t// should be deleted if specified, whereas others should not be deleted. If\n\t// a controlled should not be deleted, then we need to avoid deleting its\n\t// inner blocks from the block state because its inner blocks will not be\n\t// attached to the block in the action.\n\tconst nestedControllers = {};\n\tif ( Object.keys( state.controlledInnerBlocks ).length ) {\n\t\tconst stack = [ ...action.blocks ];\n\t\twhile ( stack.length ) {\n\t\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\t\tstack.push( ...innerBlocks );\n\t\t\tif ( !! state.controlledInnerBlocks[ block.clientId ] ) {\n\t\t\t\tnestedControllers[ block.clientId ] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// The `keepControlledInnerBlocks` prop will keep the inner blocks of the\n\t// marked block in the block state so that they can be reattached to the\n\t// marked block when we re-insert everything a few lines below.\n\tlet stateAfterBlocksRemoval = state;\n\tif ( state.order.get( action.rootClientId ) ) {\n\t\tstateAfterBlocksRemoval = reducer( stateAfterBlocksRemoval, {\n\t\t\ttype: 'REMOVE_BLOCKS',\n\t\t\tkeepControlledInnerBlocks: nestedControllers,\n\t\t\tclientIds: state.order.get( action.rootClientId ),\n\t\t} );\n\t}\n\tlet stateAfterInsert = stateAfterBlocksRemoval;\n\tif ( action.blocks.length ) {\n\t\tstateAfterInsert = reducer( stateAfterInsert, {\n\t\t\t...action,\n\t\t\ttype: 'INSERT_BLOCKS',\n\t\t\tindex: 0,\n\t\t} );\n\n\t\t// We need to re-attach the controlled inner blocks to the blocks tree and\n\t\t// preserve their block order. Otherwise, an inner block controller's blocks\n\t\t// will be deleted entirely from its entity.\n\t\tconst stateAfterInsertOrder = new Map( stateAfterInsert.order );\n\t\tObject.keys( nestedControllers ).forEach( ( key ) => {\n\t\t\tif ( state.order.get( key ) ) {\n\t\t\t\tstateAfterInsertOrder.set( key, state.order.get( key ) );\n\t\t\t}\n\t\t} );\n\t\tstateAfterInsert.order = stateAfterInsertOrder;\n\t\tstateAfterInsert.tree = new Map( stateAfterInsert.tree );\n\t\tObject.keys( nestedControllers ).forEach( ( _key ) => {\n\t\t\tconst key = `controlled||${ _key }`;\n\t\t\tif ( state.tree.has( key ) ) {\n\t\t\t\tstateAfterInsert.tree.set( key, state.tree.get( key ) );\n\t\t\t}\n\t\t} );\n\t}\n\treturn stateAfterInsert;\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `SAVE_REUSABLE_BLOCK_SUCCESS` action. This action can't be handled by\n * regular reducers and needs a higher-order reducer since it needs access to\n * both `byClientId` and `attributes` simultaneously.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withSaveReusableBlock = ( reducer ) => ( state, action ) => {\n\tif ( state && action.type === 'SAVE_REUSABLE_BLOCK_SUCCESS' ) {\n\t\tconst { id, updatedId } = action;\n\n\t\t// If a temporary reusable block is saved, we swap the temporary id with the final one.\n\t\tif ( id === updatedId ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tstate = { ...state };\n\t\tstate.attributes = new Map( state.attributes );\n\t\tstate.attributes.forEach( ( attributes, clientId ) => {\n\t\t\tconst { name } = state.byClientId.get( clientId );\n\t\t\tif ( name === 'core/block' && attributes.ref === id ) {\n\t\t\t\tstate.attributes.set( clientId, {\n\t\t\t\t\t...attributes,\n\t\t\t\t\tref: updatedId,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn reducer( state, action );\n};\n/**\n * Higher-order reducer which removes blocks from state when switching parent block controlled state.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withResetControlledBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t// when switching a block from controlled to uncontrolled or inverse,\n\t\t// we need to remove its content first.\n\t\tconst tempState = reducer( state, {\n\t\t\ttype: 'REPLACE_INNER_BLOCKS',\n\t\t\trootClientId: action.clientId,\n\t\t\tblocks: [],\n\t\t} );\n\t\treturn reducer( tempState, action );\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Reducer returning the blocks state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blocks = pipe(\n\tcombineReducers,\n\twithSaveReusableBlock, // Needs to be before withBlockCache.\n\twithBlockTree, // Needs to be before withInnerBlocksRemoveCascade.\n\twithInnerBlocksRemoveCascade,\n\twithReplaceInnerBlocks, // Needs to be after withInnerBlocksRemoveCascade.\n\twithBlockReset,\n\twithPersistentBlockChange,\n\twithIgnoredBlockChange,\n\twithResetControlledBlocks\n)( {\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tbyClientId( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known.\n\t\t\t\tif ( ! state.has( action.clientId ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\t// Do nothing if only attributes change.\n\t\t\t\tconst { attributes, ...changes } = action.updates;\n\t\t\t\tif ( Object.values( changes ).length === 0 ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...changes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tattributes( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known or there are no attribute changes.\n\t\t\t\tif (\n\t\t\t\t\t! state.get( action.clientId ) ||\n\t\t\t\t\t! action.updates.attributes\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...action.updates.attributes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\t// Avoid a state change if none of the block IDs are known.\n\t\t\t\tif ( action.clientIds.every( ( id ) => ! state.get( id ) ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tlet hasChange = false;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst updatedAttributeEntries = Object.entries(\n\t\t\t\t\t\taction.uniqueByBlock\n\t\t\t\t\t\t\t? action.attributes[ clientId ]\n\t\t\t\t\t\t\t: action.attributes ?? {}\n\t\t\t\t\t);\n\t\t\t\t\tif ( updatedAttributeEntries.length === 0 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet hasUpdatedAttributes = false;\n\t\t\t\t\tconst existingAttributes = state.get( clientId );\n\t\t\t\t\tconst newAttributes = {};\n\t\t\t\t\tupdatedAttributeEntries.forEach( ( [ key, value ] ) => {\n\t\t\t\t\t\tif ( existingAttributes[ key ] !== value ) {\n\t\t\t\t\t\t\thasUpdatedAttributes = true;\n\t\t\t\t\t\t\tnewAttributes[ key ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\thasChange = hasChange || hasUpdatedAttributes;\n\t\t\t\t\tif ( hasUpdatedAttributes ) {\n\t\t\t\t\t\tnewState.set( clientId, {\n\t\t\t\t\t\t\t...existingAttributes,\n\t\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn hasChange ? newState : state;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\torder( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst blockOrder = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tblockOrder.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\t'',\n\t\t\t\t\t( state.get( '' ) ?? [] ).concat( blockOrder[ '' ] )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst { rootClientId = '' } = action;\n\t\t\t\tconst subState = state.get( rootClientId ) || [];\n\t\t\t\tconst mappedBlocks = mapBlockOrder(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\t\tconst { index = subState.length } = action;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tinsertAt(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tmappedBlocks.get( rootClientId ),\n\t\t\t\t\t\tindex\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst {\n\t\t\t\t\tfromRootClientId = '',\n\t\t\t\t\ttoRootClientId = '',\n\t\t\t\t\tclientIds,\n\t\t\t\t} = action;\n\t\t\t\tconst { index = state.get( toRootClientId ).length } = action;\n\n\t\t\t\t// Moving inside the same parent block.\n\t\t\t\tif ( fromRootClientId === toRootClientId ) {\n\t\t\t\t\tconst subState = state.get( toRootClientId );\n\t\t\t\t\tconst fromIndex = subState.indexOf( clientIds[ 0 ] );\n\t\t\t\t\tconst newState = new Map( state );\n\t\t\t\t\tnewState.set(\n\t\t\t\t\t\ttoRootClientId,\n\t\t\t\t\t\tmoveTo(\n\t\t\t\t\t\t\tstate.get( toRootClientId ),\n\t\t\t\t\t\t\tfromIndex,\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\treturn newState;\n\t\t\t\t}\n\n\t\t\t\t// Moving from a parent block to another.\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\tfromRootClientId,\n\t\t\t\t\tstate\n\t\t\t\t\t\t.get( fromRootClientId )\n\t\t\t\t\t\t?.filter( ( id ) => ! clientIds.includes( id ) ) ?? []\n\t\t\t\t);\n\t\t\t\tnewState.set(\n\t\t\t\t\ttoRootClientId,\n\t\t\t\t\tinsertAt( state.get( toRootClientId ), clientIds, index )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_UP': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif ( ! subState.length || firstClientId === subState[ 0 ] ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex - 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst lastClientId = clientIds[ clientIds.length - 1 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif (\n\t\t\t\t\t! subState.length ||\n\t\t\t\t\tlastClientId === subState[ subState.length - 1 ]\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex + 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst { clientIds } = action;\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst mappedBlocks = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder = Object.values( order ).reduce(\n\t\t\t\t\t\t( result, subClientId ) => {\n\t\t\t\t\t\t\tif ( subClientId === clientIds[ 0 ] ) {\n\t\t\t\t\t\t\t\treturn [ ...result, ...mappedBlocks.get( '' ) ];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( clientIds.indexOf( subClientId ) === -1 ) {\n\t\t\t\t\t\t\t\tresult.push( subClientId );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\t// Remove inner block ordering for removed blocks.\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder =\n\t\t\t\t\t\torder?.filter(\n\t\t\t\t\t\t\t( id ) => ! action.removedClientIds.includes( id )\n\t\t\t\t\t\t) ?? [];\n\t\t\t\t\tif ( newSubOrder.length !== order.length ) {\n\t\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// While technically redundant data as the inverse of `order`, it serves as\n\t// an optimization for the selectors which derive the ancestry of a block.\n\tparents( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\taction.rootClientId || ''\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.clientIds.forEach( ( id ) => {\n\t\t\t\t\tnewState.set( id, action.toRootClientId || '' );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\tstate.get( action.clientIds[ 0 ] )\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\tcontrolledInnerBlocks(\n\t\tstate = {},\n\t\t{ type, clientId, hasControlledInnerBlocks }\n\t) {\n\t\tif ( type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ clientId ]: hasControlledInnerBlocks,\n\t\t\t};\n\t\t}\n\t\treturn state;\n\t},\n} );\n\n/**\n * Reducer returning visibility status of block interface.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isBlockInterfaceHidden( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'HIDE_BLOCK_INTERFACE':\n\t\t\treturn true;\n\n\t\tcase 'SHOW_BLOCK_INTERFACE':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning typing state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isTyping( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_TYPING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_TYPING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragging state. It is possible for a user to be dragging\n * data from outside of the editor, so this state is separate from `draggedBlocks`.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isDragging( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_DRAGGING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragged block client id.\n *\n * @param {string[]} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string[]} Updated state.\n */\nexport function draggedBlocks( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING_BLOCKS':\n\t\t\treturn action.clientIds;\n\n\t\tcase 'STOP_DRAGGING_BLOCKS':\n\t\t\treturn [];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking the visible blocks.\n *\n * @param {Record} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record} Block visibility.\n */\nexport function blockVisibility( state = {}, action ) {\n\tif ( action.type === 'SET_BLOCK_VISIBILITY' ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.updates,\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Internal helper reducer for selectionStart and selectionEnd. Can hold a block\n * selection, represented by an object with property clientId.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nfunction selectionHelper( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'CLEAR_SELECTED_BLOCK': {\n\t\t\tif ( state.clientId ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn state;\n\t\t}\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.clientId };\n\t\tcase 'REPLACE_INNER_BLOCKS':\n\t\tcase 'INSERT_BLOCKS': {\n\t\t\tif ( ! action.updateSelection || ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.blocks[ 0 ].clientId };\n\t\t}\n\t\tcase 'REMOVE_BLOCKS':\n\t\t\tif (\n\t\t\t\t! action.clientIds ||\n\t\t\t\t! action.clientIds.length ||\n\t\t\t\taction.clientIds.indexOf( state.clientId ) === -1\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {};\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tif ( action.clientIds.indexOf( state.clientId ) === -1 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst blockToSelect =\n\t\t\t\taction.blocks[ action.indexToSelect ] ||\n\t\t\t\taction.blocks[ action.blocks.length - 1 ];\n\n\t\t\tif ( ! blockToSelect ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tif ( blockToSelect.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: blockToSelect.clientId };\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the selection state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function selection( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SELECTION_CHANGE':\n\t\t\tif ( action.clientId ) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.startOffset,\n\t\t\t\t\t},\n\t\t\t\t\tselectionEnd: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.endOffset,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: action.start || state.selectionStart,\n\t\t\t\tselectionEnd: action.end || state.selectionEnd,\n\t\t\t};\n\t\tcase 'RESET_SELECTION':\n\t\t\tconst { selectionStart, selectionEnd } = action;\n\t\t\treturn {\n\t\t\t\tselectionStart,\n\t\t\t\tselectionEnd,\n\t\t\t};\n\t\tcase 'MULTI_SELECT':\n\t\t\tconst { start, end } = action;\n\n\t\t\tif (\n\t\t\t\tstart === state.selectionStart?.clientId &&\n\t\t\t\tend === state.selectionEnd?.clientId\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: { clientId: start },\n\t\t\t\tselectionEnd: { clientId: end },\n\t\t\t};\n\t\tcase 'RESET_BLOCKS':\n\t\t\tconst startClientId = state?.selectionStart?.clientId;\n\t\t\tconst endClientId = state?.selectionEnd?.clientId;\n\n\t\t\t// Do nothing if there's no selected block.\n\t\t\tif ( ! startClientId && ! endClientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// If the start of the selection won't exist after reset, remove selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === startClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {},\n\t\t\t\t\tselectionEnd: {},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If the end of the selection won't exist after reset, collapse selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === endClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectionEnd: state.selectionStart,\n\t\t\t\t};\n\t\t\t}\n\t}\n\n\tconst selectionStart = selectionHelper( state.selectionStart, action );\n\tconst selectionEnd = selectionHelper( state.selectionEnd, action );\n\n\tif (\n\t\tselectionStart === state.selectionStart &&\n\t\tselectionEnd === state.selectionEnd\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\tselectionStart,\n\t\tselectionEnd,\n\t};\n}\n\n/**\n * Reducer returning whether the user is multi-selecting.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isMultiSelecting( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_MULTI_SELECT':\n\t\t\treturn true;\n\n\t\tcase 'STOP_MULTI_SELECT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether selection is enabled.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isSelectionEnabled( state = true, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_SELECTION':\n\t\t\treturn action.isSelectionEnabled;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the data needed to display a prompt when certain blocks\n * are removed, or `false` if no such prompt is requested.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nfunction removalPromptData( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'DISPLAY_BLOCK_REMOVAL_PROMPT':\n\t\t\tconst { clientIds, selectPrevious, message } = action;\n\t\t\treturn {\n\t\t\t\tclientIds,\n\t\t\t\tselectPrevious,\n\t\t\t\tmessage,\n\t\t\t};\n\t\tcase 'CLEAR_BLOCK_REMOVAL_PROMPT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning any rules that a block editor may provide in order to\n * prevent a user from accidentally removing certain blocks. These rules are\n * then used to display a confirmation prompt to the user. For instance, in the\n * Site Editor, the Query Loop block is important enough to warrant such\n * confirmation.\n *\n * The data is a record whose keys are block types (e.g. 'core/query') and\n * whose values are the explanation to be shown to users (e.g. 'Query Loop\n * displays a list of posts or pages.').\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record} Updated state.\n */\nfunction blockRemovalRules( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_REMOVAL_RULES':\n\t\t\treturn action.rules;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the initial block selection.\n *\n * Currently this in only used to restore the selection after block deletion and\n * pasting new content.This reducer should eventually be removed in favour of setting\n * selection directly.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {number|null} Initial position: 0, -1 or null.\n */\nexport function initialPosition( state = null, action ) {\n\tif (\n\t\taction.type === 'REPLACE_BLOCKS' &&\n\t\taction.initialPosition !== undefined\n\t) {\n\t\treturn action.initialPosition;\n\t} else if (\n\t\t[\n\t\t\t'MULTI_SELECT',\n\t\t\t'SELECT_BLOCK',\n\t\t\t'RESET_SELECTION',\n\t\t\t'INSERT_BLOCKS',\n\t\t\t'REPLACE_INNER_BLOCKS',\n\t\t].includes( action.type )\n\t) {\n\t\treturn action.initialPosition;\n\t}\n\n\treturn state;\n}\n\nexport function blocksMode( state = {}, action ) {\n\tif ( action.type === 'TOGGLE_BLOCK_MODE' ) {\n\t\tconst { clientId } = action;\n\t\treturn {\n\t\t\t...state,\n\t\t\t[ clientId ]:\n\t\t\t\tstate[ clientId ] && state[ clientId ] === 'html'\n\t\t\t\t\t? 'visual'\n\t\t\t\t\t: 'html',\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion point visibility, either null if there\n * is not an explicit insertion point assigned, or an object of its `index` and\n * `rootClientId`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function insertionPoint( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SHOW_INSERTION_POINT': {\n\t\t\tconst {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t} = action;\n\t\t\tconst nextState = {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t};\n\n\t\t\t// Bail out updates if the states are the same.\n\t\t\treturn fastDeepEqual( state, nextState ) ? state : nextState;\n\t\t}\n\n\t\tcase 'HIDE_INSERTION_POINT':\n\t\t\treturn null;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether the post blocks match the defined template or not.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function template( state = { isValid: true }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_TEMPLATE_VALIDITY':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisValid: action.isValid,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the editor setting.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function settings( state = SETTINGS_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_SETTINGS':\n\t\t\tif ( action.reset ) {\n\t\t\t\treturn {\n\t\t\t\t\t...SETTINGS_DEFAULTS,\n\t\t\t\t\t...action.settings,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.settings,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the user preferences.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function preferences( state = PREFERENCES_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tconst nextInsertUsage = action.blocks.reduce(\n\t\t\t\t( prevUsage, block ) => {\n\t\t\t\t\tconst { attributes, name: blockName } = block;\n\t\t\t\t\tlet id = blockName;\n\t\t\t\t\t// If a block variation match is found change the name to be the same with the\n\t\t\t\t\t// one that is used for block variations in the Inserter (`getItemFromVariation`).\n\t\t\t\t\tconst match = select( blocksStore ).getActiveBlockVariation(\n\t\t\t\t\t\tblockName,\n\t\t\t\t\t\tattributes\n\t\t\t\t\t);\n\t\t\t\t\tif ( match?.name ) {\n\t\t\t\t\t\tid += '/' + match.name;\n\t\t\t\t\t}\n\t\t\t\t\tif ( blockName === 'core/block' ) {\n\t\t\t\t\t\tid += '/' + attributes.ref;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prevUsage,\n\t\t\t\t\t\t[ id ]: {\n\t\t\t\t\t\t\ttime: action.time,\n\t\t\t\t\t\t\tcount: prevUsage[ id ]\n\t\t\t\t\t\t\t\t? prevUsage[ id ].count + 1\n\t\t\t\t\t\t\t\t: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstate.insertUsage\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tinsertUsage: nextInsertUsage,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning an object where each key is a block client ID, its value\n * representing the settings for its nested blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blockListSettings = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\t// Even if the replaced blocks have the same client ID, our logic\n\t\t// should correct the state.\n\t\tcase 'REPLACE_BLOCKS':\n\t\tcase 'REMOVE_BLOCKS': {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t( [ id ] ) => ! action.clientIds.includes( id )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tcase 'UPDATE_BLOCK_LIST_SETTINGS': {\n\t\t\tconst updates =\n\t\t\t\ttypeof action.clientId === 'string'\n\t\t\t\t\t? { [ action.clientId ]: action.settings }\n\t\t\t\t\t: action.clientId;\n\n\t\t\t// Remove settings that are the same as the current state.\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tif ( ! state[ clientId ] ) {\n\t\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tfastDeepEqual( state[ clientId ], updates[ clientId ] )\n\t\t\t\t) {\n\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( Object.keys( updates ).length === 0 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst merged = { ...state, ...updates };\n\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tdelete merged[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn merged;\n\t\t}\n\t}\n\treturn state;\n};\n\n/**\n * Reducer returning which mode is enabled.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function editorMode( state = 'edit', action ) {\n\t// Let inserting block in navigation mode always trigger Edit mode.\n\tif ( action.type === 'INSERT_BLOCKS' && state === 'navigation' ) {\n\t\treturn 'edit';\n\t}\n\n\tif ( action.type === 'SET_EDITOR_MODE' ) {\n\t\treturn action.mode;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether the block moving mode is enabled or not.\n *\n * @param {string|null} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function hasBlockMovingClientId( state = null, action ) {\n\tif ( action.type === 'SET_BLOCK_MOVING_MODE' ) {\n\t\treturn action.hasBlockMovingClientId;\n\t}\n\n\tif ( action.type === 'SET_EDITOR_MODE' ) {\n\t\treturn null;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer return an updated state representing the most recent block attribute\n * update. The state is structured as an object where the keys represent the\n * client IDs of blocks, the values a subset of attributes from the most recent\n * block update. The state is always reset to null if the last action is\n * anything other than an attributes update.\n *\n * @param {Object} state Current state.\n * @param {Object} action Action object.\n *\n * @return {[string,Object]} Updated state.\n */\nexport function lastBlockAttributesChange( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_BLOCK':\n\t\t\tif ( ! action.updates.attributes ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn { [ action.clientId ]: action.updates.attributes };\n\n\t\tcase 'UPDATE_BLOCK_ATTRIBUTES':\n\t\t\treturn action.clientIds.reduce(\n\t\t\t\t( accumulator, id ) => ( {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t[ id ]: action.uniqueByBlock\n\t\t\t\t\t\t? action.attributes[ id ]\n\t\t\t\t\t\t: action.attributes,\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current highlighted block.\n *\n * @param {boolean} state Current highlighted block.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function highlightedBlock( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_BLOCK_HIGHLIGHT':\n\t\t\tconst { clientId, isHighlighted } = action;\n\n\t\t\tif ( isHighlighted ) {\n\t\t\t\treturn clientId;\n\t\t\t} else if ( state === clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn state;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current expanded block in the list view.\n *\n * @param {string|null} state Current expanded block.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function expandedBlock( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EXPANDED_IN_LIST_VIEW':\n\t\t\treturn action.clientId;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion event list state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function lastBlockInserted( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS':\n\t\t\tif ( ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst clientIds = action.blocks.map( ( block ) => {\n\t\t\t\treturn block.clientId;\n\t\t\t} );\n\n\t\t\tconst source = action.meta?.source;\n\n\t\t\treturn { clientIds, source };\n\t\tcase 'RESET_BLOCKS':\n\t\t\treturn {};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the block that is eding temporarily edited as blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingAsBlocks( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.temporarilyEditingAsBlocks;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the focus mode that should be used when temporarily edit as blocks finishes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingFocusModeRevert( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.focusModeToRevert;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of block client IDs to block editing modes.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function blockEditingModes( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EDITING_MODE':\n\t\t\treturn new Map( state ).set( action.clientId, action.mode );\n\t\tcase 'UNSET_BLOCK_EDITING_MODE': {\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.clientId );\n\t\t\treturn newState;\n\t\t}\n\t\tcase 'RESET_BLOCKS': {\n\t\t\treturn state.has( '' )\n\t\t\t\t? new Map().set( '', state.get( '' ) )\n\t\t\t\t: state;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the clientId of the block settings menu that is currently open.\n *\n * @param {string|null} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function openedBlockSettingsMenu( state = null, action ) {\n\tif ( 'SET_OPENED_BLOCK_SETTINGS_MENU' === action.type ) {\n\t\treturn action?.clientId ?? null;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of style IDs to style overrides.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function styleOverrides( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_STYLE_OVERRIDE':\n\t\t\treturn new Map( state ).set( action.id, action.style );\n\t\tcase 'DELETE_STYLE_OVERRIDE': {\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.id );\n\t\t\treturn newState;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of the registered inserter media categories.\n *\n * @param {Array} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Array} Updated state.\n */\nexport function registeredInserterMediaCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_INSERTER_MEDIA_CATEGORY':\n\t\t\treturn [ ...state, action.category ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting last focused element\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function lastFocus( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'LAST_FOCUS':\n\t\t\treturn action.lastFocus;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting currently hovered block.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function hoveredBlockClientId( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'HOVER_BLOCK':\n\t\t\treturn action.clientId;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting zoom out state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function zoomLevel( state = 100, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_ZOOM_LEVEL':\n\t\t\treturn action.zoom;\n\t\tcase 'RESET_ZOOM_LEVEL':\n\t\t\treturn 100;\n\t}\n\n\treturn state;\n}\n\nconst combinedReducers = combineReducers( {\n\tblocks,\n\tisDragging,\n\tisTyping,\n\tisBlockInterfaceHidden,\n\tdraggedBlocks,\n\tselection,\n\tisMultiSelecting,\n\tisSelectionEnabled,\n\tinitialPosition,\n\tblocksMode,\n\tblockListSettings,\n\tinsertionPoint,\n\ttemplate,\n\tsettings,\n\tpreferences,\n\tlastBlockAttributesChange,\n\tlastFocus,\n\teditorMode,\n\thasBlockMovingClientId,\n\texpandedBlock,\n\thighlightedBlock,\n\tlastBlockInserted,\n\ttemporarilyEditingAsBlocks,\n\ttemporarilyEditingFocusModeRevert,\n\tblockVisibility,\n\tblockEditingModes,\n\tstyleOverrides,\n\tremovalPromptData,\n\tblockRemovalRules,\n\topenedBlockSettingsMenu,\n\tregisteredInserterMediaCategories,\n\thoveredBlockClientId,\n\tzoomLevel,\n} );\n\nfunction withAutomaticChangeReset( reducer ) {\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( ! state ) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Take over the last value without creating a new reference.\n\t\tnextState.automaticChangeStatus = state.automaticChangeStatus;\n\n\t\tif ( action.type === 'MARK_AUTOMATIC_CHANGE' ) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'pending',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\taction.type === 'MARK_AUTOMATIC_CHANGE_FINAL' &&\n\t\t\tstate.automaticChangeStatus === 'pending'\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'final',\n\t\t\t};\n\t\t}\n\n\t\t// If there's a change that doesn't affect blocks or selection, maintain\n\t\t// the current status.\n\t\tif (\n\t\t\tnextState.blocks === state.blocks &&\n\t\t\tnextState.selection === state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// As long as the state is not final, ignore any selection changes.\n\t\tif (\n\t\t\tnextState.automaticChangeStatus !== 'final' &&\n\t\t\tnextState.selection !== state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Reset the status if blocks change or selection changes (when status is final).\n\t\treturn {\n\t\t\t...nextState,\n\t\t\tautomaticChangeStatus: undefined,\n\t\t};\n\t};\n}\n\nexport default withAutomaticChangeReset( combinedReducers );\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"primitives\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"ReactJSXRuntime\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst symbol = (\n\t\n\t\t\n\t\n);\n\nexport default symbol;\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"richText\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blockSerializationDefaultParser\"];","export const globalStylesDataKey = Symbol( 'globalStylesDataKey' );\nexport const globalStylesLinksDataKey = Symbol( 'globalStylesLinks' );\nexport const selectBlockPatternsKey = Symbol( 'selectBlockPatternsKey' );\nexport const reusableBlocksSelectKey = Symbol( 'reusableBlocksSelect' );\nexport const sectionRootClientIdKey = Symbol( 'sectionRootClientIdKey' );\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"privateApis\"];","/**\n * WordPress dependencies\n */\nimport { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';\n\nexport const { lock, unlock } =\n\t__dangerousOptInToUnstableAPIsOnlyForCoreModules(\n\t\t'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.',\n\t\t'@wordpress/block-editor'\n\t);\n","export const STORE_NAME = 'core/block-editor';\n","/**\n * WordPress dependencies\n */\nimport { parse } from '@wordpress/blocks';\nimport { parse as grammarParse } from '@wordpress/block-serialization-default-parser';\n\n/**\n * Internal dependencies\n */\nimport { selectBlockPatternsKey } from './private-keys';\nimport { unlock } from '../lock-unlock';\nimport { STORE_NAME } from './constants';\n\nexport const withRootClientIdOptionKey = Symbol( 'withRootClientId' );\n\nconst parsedPatternCache = new WeakMap();\nconst grammarMapCache = new WeakMap();\n\nfunction parsePattern( pattern ) {\n\tconst blocks = parse( pattern.content, {\n\t\t__unstableSkipMigrationLogs: true,\n\t} );\n\tif ( blocks.length === 1 ) {\n\t\tblocks[ 0 ].attributes = {\n\t\t\t...blocks[ 0 ].attributes,\n\t\t\tmetadata: {\n\t\t\t\t...( blocks[ 0 ].attributes.metadata || {} ),\n\t\t\t\tcategories: pattern.categories,\n\t\t\t\tpatternName: pattern.name,\n\t\t\t\tname: blocks[ 0 ].attributes.metadata?.name || pattern.title,\n\t\t\t},\n\t\t};\n\t}\n\treturn {\n\t\t...pattern,\n\t\tblocks,\n\t};\n}\n\nexport function getParsedPattern( pattern ) {\n\tlet parsedPattern = parsedPatternCache.get( pattern );\n\tif ( ! parsedPattern ) {\n\t\tparsedPattern = parsePattern( pattern );\n\t\tparsedPatternCache.set( pattern, parsedPattern );\n\t}\n\treturn parsedPattern;\n}\n\nexport function getGrammar( pattern ) {\n\tlet grammarMap = grammarMapCache.get( pattern );\n\tif ( ! grammarMap ) {\n\t\tgrammarMap = grammarParse( pattern.content );\n\t\t// Block names are null only at the top level for whitespace.\n\t\tgrammarMap = grammarMap.filter( ( block ) => block.blockName !== null );\n\t\tgrammarMapCache.set( pattern, grammarMap );\n\t}\n\treturn grammarMap;\n}\n\nexport const checkAllowList = ( list, item, defaultResult = null ) => {\n\tif ( typeof list === 'boolean' ) {\n\t\treturn list;\n\t}\n\tif ( Array.isArray( list ) ) {\n\t\t// TODO: when there is a canonical way to detect that we are editing a post\n\t\t// the following check should be changed to something like:\n\t\t// if ( list.includes( 'core/post-content' ) && getEditorMode() === 'post-content' && item === null )\n\t\tif ( list.includes( 'core/post-content' ) && item === null ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn list.includes( item );\n\t}\n\treturn defaultResult;\n};\n\nexport const checkAllowListRecursive = ( blocks, allowedBlockTypes ) => {\n\tif ( typeof allowedBlockTypes === 'boolean' ) {\n\t\treturn allowedBlockTypes;\n\t}\n\n\tconst blocksQueue = [ ...blocks ];\n\twhile ( blocksQueue.length > 0 ) {\n\t\tconst block = blocksQueue.shift();\n\n\t\tconst isAllowed = checkAllowList(\n\t\t\tallowedBlockTypes,\n\t\t\tblock.name || block.blockName,\n\t\t\ttrue\n\t\t);\n\t\tif ( ! isAllowed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tblock.innerBlocks?.forEach( ( innerBlock ) => {\n\t\t\tblocksQueue.push( innerBlock );\n\t\t} );\n\t}\n\n\treturn true;\n};\n\nexport const getAllPatternsDependants = ( select ) => ( state ) => {\n\treturn [\n\t\tstate.settings.__experimentalBlockPatterns,\n\t\tstate.settings.__experimentalUserPatternCategories,\n\t\tstate.settings.__experimentalReusableBlocks,\n\t\tstate.settings[ selectBlockPatternsKey ]?.( select ),\n\t\tstate.blockPatterns,\n\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t];\n};\n\nexport function getInsertBlockTypeDependants( state, rootClientId ) {\n\treturn [\n\t\tstate.blockListSettings[ rootClientId ],\n\t\tstate.blocks.byClientId.get( rootClientId ),\n\t\tstate.settings.allowedBlockTypes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockEditingModes,\n\t];\n}\n","/**\n * Recursive stable sorting comparator function.\n *\n * @param {string|Function} field Field to sort by.\n * @param {Array} items Items to sort.\n * @param {string} order Order, 'asc' or 'desc'.\n * @return {Function} Comparison function to be used in a `.sort()`.\n */\nconst comparator = ( field, items, order ) => {\n\treturn ( a, b ) => {\n\t\tlet cmpA, cmpB;\n\n\t\tif ( typeof field === 'function' ) {\n\t\t\tcmpA = field( a );\n\t\t\tcmpB = field( b );\n\t\t} else {\n\t\t\tcmpA = a[ field ];\n\t\t\tcmpB = b[ field ];\n\t\t}\n\n\t\tif ( cmpA > cmpB ) {\n\t\t\treturn order === 'asc' ? 1 : -1;\n\t\t} else if ( cmpB > cmpA ) {\n\t\t\treturn order === 'asc' ? -1 : 1;\n\t\t}\n\n\t\tconst orderA = items.findIndex( ( item ) => item === a );\n\t\tconst orderB = items.findIndex( ( item ) => item === b );\n\n\t\t// Stable sort: maintaining original array order\n\t\tif ( orderA > orderB ) {\n\t\t\treturn 1;\n\t\t} else if ( orderB > orderA ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t};\n};\n\n/**\n * Order items by a certain key.\n * Supports decorator functions that allow complex picking of a comparison field.\n * Sorts in ascending order by default, but supports descending as well.\n * Stable sort - maintains original order of equal items.\n *\n * @param {Array} items Items to order.\n * @param {string|Function} field Field to order by.\n * @param {string} order Sorting order, `asc` or `desc`.\n * @return {Array} Sorted items.\n */\nexport function orderBy( items, field, order = 'asc' ) {\n\treturn items.concat().sort( comparator( field, items, order ) );\n}\n","/**\n * WordPress dependencies\n */\n\nimport { __, _x } from '@wordpress/i18n';\n\nexport const INSERTER_PATTERN_TYPES = {\n\tuser: 'user',\n\ttheme: 'theme',\n\tdirectory: 'directory',\n};\n\nexport const INSERTER_SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\nexport const allPatternsCategory = {\n\tname: 'allPatterns',\n\tlabel: _x( 'All', 'patterns' ),\n};\n\nexport const myPatternsCategory = {\n\tname: 'myPatterns',\n\tlabel: __( 'My patterns' ),\n};\n\nexport function isPatternFiltered( pattern, sourceFilter, syncFilter ) {\n\tconst isUserPattern = pattern.name.startsWith( 'core/block' );\n\tconst isDirectoryPattern =\n\t\tpattern.source === 'core' ||\n\t\tpattern.source?.startsWith( 'pattern-directory' );\n\n\t// If theme source selected, filter out user created patterns and those from\n\t// the core patterns directory.\n\tif (\n\t\tsourceFilter === INSERTER_PATTERN_TYPES.theme &&\n\t\t( isUserPattern || isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If the directory source is selected, filter out user created patterns\n\t// and those bundled with the theme.\n\tif (\n\t\tsourceFilter === INSERTER_PATTERN_TYPES.directory &&\n\t\t( isUserPattern || ! isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If user source selected, filter out theme patterns.\n\tif (\n\t\tsourceFilter === INSERTER_PATTERN_TYPES.user &&\n\t\tpattern.type !== INSERTER_PATTERN_TYPES.user\n\t) {\n\t\treturn true;\n\t}\n\n\t// Filter by sync status.\n\tif (\n\t\tsyncFilter === INSERTER_SYNC_TYPES.full &&\n\t\tpattern.syncStatus !== ''\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tsyncFilter === INSERTER_SYNC_TYPES.unsynced &&\n\t\tpattern.syncStatus !== 'unsynced' &&\n\t\tisUserPattern\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","/**\n * Immutably sets a value inside an object. Like `lodash#set`, but returning a\n * new object. Treats nullish initial values as empty objects. Clones any\n * nested objects. Supports arrays, too.\n *\n * @param {Object} object Object to set a value in.\n * @param {number|string|Array} path Path in the object to modify.\n * @param {*} value New value to set.\n * @return {Object} Cloned object with the new value set.\n */\nexport function setImmutably( object, path, value ) {\n\t// Normalize path\n\tpath = Array.isArray( path ) ? [ ...path ] : [ path ];\n\n\t// Shallowly clone the base of the object\n\tobject = Array.isArray( object ) ? [ ...object ] : { ...object };\n\n\tconst leaf = path.pop();\n\n\t// Traverse object from root to leaf, shallowly cloning at each level\n\tlet prev = object;\n\tfor ( const key of path ) {\n\t\tconst lvl = prev[ key ];\n\t\tprev = prev[ key ] = Array.isArray( lvl ) ? [ ...lvl ] : { ...lvl };\n\t}\n\n\tprev[ leaf ] = value;\n\n\treturn object;\n}\n\n/**\n * Helper util to return a value from a certain path of the object.\n * Path is specified as either:\n * - a string of properties, separated by dots, for example: \"x.y\".\n * - an array of properties, for example `[ 'x', 'y' ]`.\n * You can also specify a default value in case the result is nullish.\n *\n * @param {Object} object Input object.\n * @param {string|Array} path Path to the object property.\n * @param {*} defaultValue Default value if the value at the specified path is nullish.\n * @return {*} Value of the object property at the specified path.\n */\nexport const getValueFromObjectPath = ( object, path, defaultValue ) => {\n\tconst arrayPath = Array.isArray( path ) ? path : path.split( '.' );\n\tlet value = object;\n\tarrayPath.forEach( ( fieldName ) => {\n\t\tvalue = value?.[ fieldName ];\n\t} );\n\treturn value ?? defaultValue;\n};\n\n/**\n * Helper util to filter out objects with duplicate values for a given property.\n *\n * @param {Object[]} array Array of objects to filter.\n * @param {string} property Property to filter unique values by.\n *\n * @return {Object[]} Array of objects with unique values for the specified property.\n */\nexport function uniqByProperty( array, property ) {\n\tconst seen = new Set();\n\treturn array.filter( ( item ) => {\n\t\tconst value = item[ property ];\n\t\treturn seen.has( value ) ? false : seen.add( value );\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_PATHS_WITH_OVERRIDE as PATHS_WITH_OVERRIDE,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromObjectPath } from '../utils/object';\nimport { getBlockName, getSettings, getBlockAttributes } from './selectors';\n\nconst blockedPaths = [\n\t'color',\n\t'border',\n\t'dimensions',\n\t'typography',\n\t'spacing',\n];\n\nconst deprecatedFlags = {\n\t'color.palette': ( settings ) => settings.colors,\n\t'color.gradients': ( settings ) => settings.gradients,\n\t'color.custom': ( settings ) =>\n\t\tsettings.disableCustomColors === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomColors,\n\t'color.customGradient': ( settings ) =>\n\t\tsettings.disableCustomGradients === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomGradients,\n\t'typography.fontSizes': ( settings ) => settings.fontSizes,\n\t'typography.customFontSize': ( settings ) =>\n\t\tsettings.disableCustomFontSizes === undefined\n\t\t\t? undefined\n\t\t\t: ! settings.disableCustomFontSizes,\n\t'typography.lineHeight': ( settings ) => settings.enableCustomLineHeight,\n\t'spacing.units': ( settings ) => {\n\t\tif ( settings.enableCustomUnits === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( settings.enableCustomUnits === true ) {\n\t\t\treturn [ 'px', 'em', 'rem', 'vh', 'vw', '%' ];\n\t\t}\n\n\t\treturn settings.enableCustomUnits;\n\t},\n\t'spacing.padding': ( settings ) => settings.enableCustomSpacing,\n};\n\nconst prefixedFlags = {\n\t/*\n\t * These were only available in the plugin\n\t * and can be removed when the minimum WordPress version\n\t * for the plugin is 5.9.\n\t */\n\t'border.customColor': 'border.color',\n\t'border.customStyle': 'border.style',\n\t'border.customWidth': 'border.width',\n\t'typography.customFontStyle': 'typography.fontStyle',\n\t'typography.customFontWeight': 'typography.fontWeight',\n\t'typography.customLetterSpacing': 'typography.letterSpacing',\n\t'typography.customTextDecorations': 'typography.textDecoration',\n\t'typography.customTextTransforms': 'typography.textTransform',\n\t/*\n\t * These were part of WordPress 5.8 and we need to keep them.\n\t */\n\t'border.customRadius': 'border.radius',\n\t'spacing.customMargin': 'spacing.margin',\n\t'spacing.customPadding': 'spacing.padding',\n\t'typography.customLineHeight': 'typography.lineHeight',\n};\n\n/**\n * Remove `custom` prefixes for flags that did not land in 5.8.\n *\n * This provides continued support for `custom` prefixed properties. It will\n * be removed once third party devs have had sufficient time to update themes,\n * plugins, etc.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34485\n *\n * @param {string} path Path to desired value in settings.\n * @return {string} The value for defined setting.\n */\nconst removeCustomPrefixes = ( path ) => {\n\treturn prefixedFlags[ path ] || path;\n};\n\nexport function getBlockSettings( state, clientId, ...paths ) {\n\tconst blockName = getBlockName( state, clientId );\n\tconst candidates = [];\n\n\tif ( clientId ) {\n\t\tlet id = clientId;\n\t\tdo {\n\t\t\tconst name = getBlockName( state, id );\n\t\t\tif ( hasBlockSupport( name, '__experimentalSettings', false ) ) {\n\t\t\t\tcandidates.push( id );\n\t\t\t}\n\t\t} while ( ( id = state.blocks.parents.get( id ) ) );\n\t}\n\n\treturn paths.map( ( path ) => {\n\t\tif ( blockedPaths.includes( path ) ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t'Top level useSetting paths are disabled. Please use a subpath to query the information needed.'\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// 0. Allow third parties to filter the block's settings at runtime.\n\t\tlet result = applyFilters(\n\t\t\t'blockEditor.useSetting.before',\n\t\t\tundefined,\n\t\t\tpath,\n\t\t\tclientId,\n\t\t\tblockName\n\t\t);\n\n\t\tif ( undefined !== result ) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst normalizedPath = removeCustomPrefixes( path );\n\n\t\t// 1. Take settings from the block instance or its ancestors.\n\t\t// Start from the current block and work our way up the ancestors.\n\t\tfor ( const candidateClientId of candidates ) {\n\t\t\tconst candidateAtts = getBlockAttributes(\n\t\t\t\tstate,\n\t\t\t\tcandidateClientId\n\t\t\t);\n\t\t\tresult =\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tcandidateAtts.settings?.blocks?.[ blockName ],\n\t\t\t\t\tnormalizedPath\n\t\t\t\t) ??\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tcandidateAtts.settings,\n\t\t\t\t\tnormalizedPath\n\t\t\t\t);\n\t\t\tif ( result !== undefined ) {\n\t\t\t\t// Stop the search for more distant ancestors and move on.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// 2. Fall back to the settings from the block editor store (__experimentalFeatures).\n\t\tconst settings = getSettings( state );\n\t\tif ( result === undefined && blockName ) {\n\t\t\tresult = getValueFromObjectPath(\n\t\t\t\tsettings.__experimentalFeatures?.blocks?.[ blockName ],\n\t\t\t\tnormalizedPath\n\t\t\t);\n\t\t}\n\n\t\tif ( result === undefined ) {\n\t\t\tresult = getValueFromObjectPath(\n\t\t\t\tsettings.__experimentalFeatures,\n\t\t\t\tnormalizedPath\n\t\t\t);\n\t\t}\n\n\t\t// Return if the setting was found in either the block instance or the store.\n\t\tif ( result !== undefined ) {\n\t\t\tif ( PATHS_WITH_OVERRIDE[ normalizedPath ] ) {\n\t\t\t\treturn result.custom ?? result.theme ?? result.default;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t// 3. Otherwise, use deprecated settings.\n\t\tconst deprecatedSettingsValue =\n\t\t\tdeprecatedFlags[ normalizedPath ]?.( settings );\n\t\tif ( deprecatedSettingsValue !== undefined ) {\n\t\t\treturn deprecatedSettingsValue;\n\t\t}\n\n\t\t// 4. Fallback for typography.dropCap:\n\t\t// This is only necessary to support typography.dropCap.\n\t\t// when __experimentalFeatures are not present (core without plugin).\n\t\t// To remove when __experimentalFeatures are ported to core.\n\t\treturn normalizedPath === 'typography.dropCap' ? true : undefined;\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockOrder,\n\tgetBlockParents,\n\tgetBlockEditingMode,\n\tgetSettings,\n\tcanInsertBlockType,\n\tgetBlockName,\n\tgetTemplateLock,\n\tgetClientIdsWithDescendants,\n} from './selectors';\nimport {\n\tcheckAllowListRecursive,\n\tgetAllPatternsDependants,\n\tgetInsertBlockTypeDependants,\n\tgetGrammar,\n} from './utils';\nimport { INSERTER_PATTERN_TYPES } from '../components/inserter/block-patterns-tab/utils';\nimport { STORE_NAME } from './constants';\nimport { unlock } from '../lock-unlock';\nimport {\n\tselectBlockPatternsKey,\n\treusableBlocksSelectKey,\n\tsectionRootClientIdKey,\n} from './private-keys';\n\nexport { getBlockSettings } from './get-block-settings';\n\n/**\n * Returns true if the block interface is hidden, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the block toolbar is hidden.\n */\nexport function isBlockInterfaceHidden( state ) {\n\treturn state.isBlockInterfaceHidden;\n}\n\n/**\n * Gets the client ids of the last inserted blocks.\n *\n * @param {Object} state Global application state.\n * @return {Array|undefined} Client Ids of the last inserted block(s).\n */\nexport function getLastInsertedBlocksClientIds( state ) {\n\treturn state?.lastBlockInserted?.clientIds;\n}\n\nexport function getBlockWithoutAttributes( state, clientId ) {\n\treturn state.blocks.byClientId.get( clientId );\n}\n\n/**\n * Returns true if all of the descendants of a block with the given client ID\n * have an editing mode of 'disabled', or false otherwise.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n *\n * @return {boolean} Whether the block descendants are disabled.\n */\nexport const isBlockSubtreeDisabled = ( state, clientId ) => {\n\tconst isChildSubtreeDisabled = ( childClientId ) => {\n\t\treturn (\n\t\t\tgetBlockEditingMode( state, childClientId ) === 'disabled' &&\n\t\t\tgetBlockOrder( state, childClientId ).every(\n\t\t\t\tisChildSubtreeDisabled\n\t\t\t)\n\t\t);\n\t};\n\treturn getBlockOrder( state, clientId ).every( isChildSubtreeDisabled );\n};\n\nfunction getEnabledClientIdsTreeUnmemoized( state, rootClientId ) {\n\tconst blockOrder = getBlockOrder( state, rootClientId );\n\tconst result = [];\n\n\tfor ( const clientId of blockOrder ) {\n\t\tconst innerBlocks = getEnabledClientIdsTreeUnmemoized(\n\t\t\tstate,\n\t\t\tclientId\n\t\t);\n\t\tif ( getBlockEditingMode( state, clientId ) !== 'disabled' ) {\n\t\t\tresult.push( { clientId, innerBlocks } );\n\t\t} else {\n\t\t\tresult.push( ...innerBlocks );\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Returns a tree of block objects with only clientID and innerBlocks set.\n * Blocks with a 'disabled' editing mode are not included.\n *\n * @param {Object} state Global application state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Tree of block objects with only clientID and innerBlocks set.\n */\nexport const getEnabledClientIdsTree = createSelector(\n\tgetEnabledClientIdsTreeUnmemoized,\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t\tstate.editorMode,\n\t]\n);\n\n/**\n * Returns a list of a given block's ancestors, from top to bottom. Blocks with\n * a 'disabled' editing mode are excluded.\n *\n * @see getBlockParents\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n * @param {boolean} ascending Order results from bottom to top (true) or top\n * to bottom (false).\n */\nexport const getEnabledBlockParents = createSelector(\n\t( state, clientId, ascending = false ) => {\n\t\treturn getBlockParents( state, clientId, ascending ).filter(\n\t\t\t( parent ) => getBlockEditingMode( state, parent ) !== 'disabled'\n\t\t);\n\t},\n\t( state ) => [\n\t\tstate.blocks.parents,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t]\n);\n\n/**\n * Selector that returns the data needed to display a prompt when certain\n * blocks are removed, or `false` if no such prompt is requested.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nexport function getRemovalPromptData( state ) {\n\treturn state.removalPromptData;\n}\n\n/**\n * Returns true if removal prompt exists, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether removal prompt exists.\n */\nexport function getBlockRemovalRules( state ) {\n\treturn state.blockRemovalRules;\n}\n\n/**\n * Returns the client ID of the block settings menu that is currently open.\n *\n * @param {Object} state Global application state.\n * @return {string|null} The client ID of the block menu that is currently open.\n */\nexport function getOpenedBlockSettingsMenu( state ) {\n\treturn state.openedBlockSettingsMenu;\n}\n\n/**\n * Returns all style overrides, intended to be merged with global editor styles.\n *\n * Overrides are sorted to match the order of the blocks they relate to. This\n * is useful to maintain correct CSS cascade order.\n *\n * @param {Object} state Global application state.\n *\n * @return {Array} An array of style ID to style override pairs.\n */\nexport const getStyleOverrides = createSelector(\n\t( state ) => {\n\t\tconst clientIds = getClientIdsWithDescendants( state );\n\t\tconst clientIdMap = clientIds.reduce( ( acc, clientId, index ) => {\n\t\t\tacc[ clientId ] = index;\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\treturn [ ...state.styleOverrides ].sort( ( overrideA, overrideB ) => {\n\t\t\t// Once the overrides Map is spread to an array, the first element\n\t\t\t// is the key, while the second is the override itself including\n\t\t\t// the clientId to sort by.\n\t\t\tconst [ , { clientId: clientIdA } ] = overrideA;\n\t\t\tconst [ , { clientId: clientIdB } ] = overrideB;\n\n\t\t\tconst aIndex = clientIdMap[ clientIdA ] ?? -1;\n\t\t\tconst bIndex = clientIdMap[ clientIdB ] ?? -1;\n\n\t\t\treturn aIndex - bIndex;\n\t\t} );\n\t},\n\t( state ) => [ state.blocks.order, state.styleOverrides ]\n);\n\n/** @typedef {import('./actions').InserterMediaCategory} InserterMediaCategory */\n/**\n * Returns the registered inserter media categories through the public API.\n *\n * @param {Object} state Editor state.\n *\n * @return {InserterMediaCategory[]} Inserter media categories.\n */\nexport function getRegisteredInserterMediaCategories( state ) {\n\treturn state.registeredInserterMediaCategories;\n}\n\n/**\n * Returns an array containing the allowed inserter media categories.\n * It merges the registered media categories from extenders with the\n * core ones. It also takes into account the allowed `mime_types`, which\n * can be altered by `upload_mimes` filter and restrict some of them.\n *\n * @param {Object} state Global application state.\n *\n * @return {InserterMediaCategory[]} Client IDs of descendants.\n */\nexport const getInserterMediaCategories = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tsettings: {\n\t\t\t\tinserterMediaCategories,\n\t\t\t\tallowedMimeTypes,\n\t\t\t\tenableOpenverseMediaCategory,\n\t\t\t},\n\t\t\tregisteredInserterMediaCategories,\n\t\t} = state;\n\t\t// The allowed `mime_types` can be altered by `upload_mimes` filter and restrict\n\t\t// some of them. In this case we shouldn't add the category to the available media\n\t\t// categories list in the inserter.\n\t\tif (\n\t\t\t( ! inserterMediaCategories &&\n\t\t\t\t! registeredInserterMediaCategories.length ) ||\n\t\t\t! allowedMimeTypes\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst coreInserterMediaCategoriesNames =\n\t\t\tinserterMediaCategories?.map( ( { name } ) => name ) || [];\n\t\tconst mergedCategories = [\n\t\t\t...( inserterMediaCategories || [] ),\n\t\t\t...( registeredInserterMediaCategories || [] ).filter(\n\t\t\t\t( { name } ) =>\n\t\t\t\t\t! coreInserterMediaCategoriesNames.includes( name )\n\t\t\t),\n\t\t];\n\t\treturn mergedCategories.filter( ( category ) => {\n\t\t\t// Check if Openverse category is enabled.\n\t\t\tif (\n\t\t\t\t! enableOpenverseMediaCategory &&\n\t\t\t\tcategory.name === 'openverse'\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Object.values( allowedMimeTypes ).some( ( mimeType ) =>\n\t\t\t\tmimeType.startsWith( `${ category.mediaType }/` )\n\t\t\t);\n\t\t} );\n\t},\n\t( state ) => [\n\t\tstate.settings.inserterMediaCategories,\n\t\tstate.settings.allowedMimeTypes,\n\t\tstate.settings.enableOpenverseMediaCategory,\n\t\tstate.registeredInserterMediaCategories,\n\t]\n);\n\n/**\n * Returns whether there is at least one allowed pattern for inner blocks children.\n * This is useful for deferring the parsing of all patterns until needed.\n *\n * @param {Object} state Editor state.\n * @param {string} [rootClientId=null] Target root client ID.\n *\n * @return {boolean} If there is at least one allowed pattern.\n */\nexport const hasAllowedPatterns = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, rootClientId = null ) => {\n\t\t\tconst { getAllPatterns } = unlock( select( STORE_NAME ) );\n\t\t\tconst patterns = getAllPatterns();\n\t\t\tconst { allowedBlockTypes } = getSettings( state );\n\t\t\treturn patterns.some( ( pattern ) => {\n\t\t\t\tconst { inserter = true } = pattern;\n\t\t\t\tif ( ! inserter ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst grammar = getGrammar( pattern );\n\t\t\t\treturn (\n\t\t\t\t\tcheckAllowListRecursive( grammar, allowedBlockTypes ) &&\n\t\t\t\t\tgrammar.every( ( { name: blockName } ) =>\n\t\t\t\t\t\tcanInsertBlockType( state, blockName, rootClientId )\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} );\n\t\t},\n\t\t( state, rootClientId ) => [\n\t\t\t...getAllPatternsDependants( select )( state ),\n\t\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t\t]\n\t)\n);\n\nfunction mapUserPattern(\n\tuserPattern,\n\t__experimentalUserPatternCategories = []\n) {\n\treturn {\n\t\tname: `core/block/${ userPattern.id }`,\n\t\tid: userPattern.id,\n\t\ttype: INSERTER_PATTERN_TYPES.user,\n\t\ttitle: userPattern.title.raw,\n\t\tcategories: userPattern.wp_pattern_category.map( ( catId ) => {\n\t\t\tconst category = __experimentalUserPatternCategories.find(\n\t\t\t\t( { id } ) => id === catId\n\t\t\t);\n\t\t\treturn category ? category.slug : catId;\n\t\t} ),\n\t\tcontent: userPattern.content.raw,\n\t\tsyncStatus: userPattern.wp_pattern_sync_status,\n\t};\n}\n\nexport const getPatternBySlug = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, patternName ) => {\n\t\t\t// Only fetch reusable blocks if we know we need them. To do: maybe\n\t\t\t// use the entity record API to retrieve the block by slug.\n\t\t\tif ( patternName?.startsWith( 'core/block/' ) ) {\n\t\t\t\tconst _id = parseInt(\n\t\t\t\t\tpatternName.slice( 'core/block/'.length ),\n\t\t\t\t\t10\n\t\t\t\t);\n\t\t\t\tconst block = unlock( select( STORE_NAME ) )\n\t\t\t\t\t.getReusableBlocks()\n\t\t\t\t\t.find( ( { id } ) => id === _id );\n\n\t\t\t\tif ( ! block ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn mapUserPattern(\n\t\t\t\t\tblock,\n\t\t\t\t\tstate.settings.__experimentalUserPatternCategories\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t// This setting is left for back compat.\n\t\t\t\t...( state.settings.__experimentalBlockPatterns ?? [] ),\n\t\t\t\t...( state.settings[ selectBlockPatternsKey ]?.( select ) ??\n\t\t\t\t\t[] ),\n\t\t\t].find( ( { name } ) => name === patternName );\n\t\t},\n\t\t( state, patternName ) =>\n\t\t\tpatternName?.startsWith( 'core/block/' )\n\t\t\t\t? [\n\t\t\t\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t\t\t\t\t\tstate.settings.__experimentalReusableBlocks,\n\t\t\t\t ]\n\t\t\t\t: [\n\t\t\t\t\t\tstate.settings.__experimentalBlockPatterns,\n\t\t\t\t\t\tstate.settings[ selectBlockPatternsKey ]?.( select ),\n\t\t\t\t ]\n\t)\n);\n\nexport const getAllPatterns = createRegistrySelector( ( select ) =>\n\tcreateSelector( ( state ) => {\n\t\treturn [\n\t\t\t...unlock( select( STORE_NAME ) )\n\t\t\t\t.getReusableBlocks()\n\t\t\t\t.map( ( userPattern ) =>\n\t\t\t\t\tmapUserPattern(\n\t\t\t\t\t\tuserPattern,\n\t\t\t\t\t\tstate.settings.__experimentalUserPatternCategories\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t// This setting is left for back compat.\n\t\t\t...( state.settings.__experimentalBlockPatterns ?? [] ),\n\t\t\t...( state.settings[ selectBlockPatternsKey ]?.( select ) ?? [] ),\n\t\t].filter(\n\t\t\t( x, index, arr ) =>\n\t\t\t\tindex === arr.findIndex( ( y ) => x.name === y.name )\n\t\t);\n\t}, getAllPatternsDependants( select ) )\n);\n\nexport const isResolvingPatterns = createRegistrySelector( ( select ) =>\n\tcreateSelector( ( state ) => {\n\t\tconst blockPatternsSelect = state.settings[ selectBlockPatternsKey ];\n\t\tconst reusableBlocksSelect = state.settings[ reusableBlocksSelectKey ];\n\t\treturn (\n\t\t\t( blockPatternsSelect\n\t\t\t\t? blockPatternsSelect( select ) === undefined\n\t\t\t\t: false ) ||\n\t\t\t( reusableBlocksSelect\n\t\t\t\t? reusableBlocksSelect( select ) === undefined\n\t\t\t\t: false )\n\t\t);\n\t}, getAllPatternsDependants( select ) )\n);\n\nconst EMPTY_ARRAY = [];\n\nexport const getReusableBlocks = createRegistrySelector(\n\t( select ) => ( state ) => {\n\t\tconst reusableBlocksSelect = state.settings[ reusableBlocksSelectKey ];\n\t\treturn (\n\t\t\t( reusableBlocksSelect\n\t\t\t\t? reusableBlocksSelect( select )\n\t\t\t\t: state.settings.__experimentalReusableBlocks ) ?? EMPTY_ARRAY\n\t\t);\n\t}\n);\n\n/**\n * Returns the element of the last element that had focus when focus left the editor canvas.\n *\n * @param {Object} state Block editor state.\n *\n * @return {Object} Element.\n */\nexport function getLastFocus( state ) {\n\treturn state.lastFocus;\n}\n\n/**\n * Returns true if the user is dragging anything, or false otherwise. It is possible for a\n * user to be dragging data from outside of the editor, so this selector is separate from\n * the `isDraggingBlocks` selector which only returns true if the user is dragging blocks.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether user is dragging.\n */\nexport function isDragging( state ) {\n\treturn state.isDragging;\n}\n\n/**\n * Retrieves the expanded block from the state.\n *\n * @param {Object} state Block editor state.\n *\n * @return {string|null} The client ID of the expanded block, if set.\n */\nexport function getExpandedBlock( state ) {\n\treturn state.expandedBlock;\n}\n\n/**\n * Retrieves the client ID of the ancestor block that is content locking the block\n * with the provided client ID.\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n *\n * @return {?string} Client ID of the ancestor block that is content locking the block.\n */\nexport const getContentLockingParent = createSelector(\n\t( state, clientId ) => {\n\t\tlet current = clientId;\n\t\tlet result;\n\t\twhile ( ( current = state.blocks.parents.get( current ) ) ) {\n\t\t\tif (\n\t\t\t\tgetBlockName( state, current ) === 'core/block' ||\n\t\t\t\tgetTemplateLock( state, current ) === 'contentOnly'\n\t\t\t) {\n\t\t\t\tresult = current;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t( state ) => [ state.blocks.parents, state.blockListSettings ]\n);\n\n/**\n * Retrieves the client ID of the block that is content locked but is\n * currently being temporarily edited as a non-locked block.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} The client ID of the block being temporarily edited as a non-locked block.\n */\nexport function getTemporarilyEditingAsBlocks( state ) {\n\treturn state.temporarilyEditingAsBlocks;\n}\n\n/**\n * Returns the focus mode that should be reapplied when the user stops editing\n * a content locked blocks as a block without locking.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} The focus mode that should be re-set when temporarily editing as blocks stops.\n */\nexport function getTemporarilyEditingFocusModeToRevert( state ) {\n\treturn state.temporarilyEditingFocusModeRevert;\n}\n\n/**\n * Returns the style attributes of multiple blocks.\n *\n * @param {Object} state Global application state.\n * @param {string[]} clientIds An array of block client IDs.\n *\n * @return {Object} An object where keys are client IDs and values are the corresponding block styles or undefined.\n */\nexport const getBlockStyles = createSelector(\n\t( state, clientIds ) =>\n\t\tclientIds.reduce( ( styles, clientId ) => {\n\t\t\tstyles[ clientId ] = state.blocks.attributes.get( clientId )?.style;\n\t\t\treturn styles;\n\t\t}, {} ),\n\t( state, clientIds ) => [\n\t\t...clientIds.map(\n\t\t\t( clientId ) => state.blocks.attributes.get( clientId )?.style\n\t\t),\n\t]\n);\n\n/**\n * Returns whether zoom out mode is enabled.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Is zoom out mode enabled.\n */\nexport function isZoomOutMode( state ) {\n\treturn state.editorMode === 'zoom-out';\n}\n\n/**\n * Retrieves the client ID of the block which contains the blocks\n * acting as \"sections\" in the editor. This is typically the \"main content\"\n * of the template/post.\n *\n * @param {Object} state Editor state.\n *\n * @return {string|undefined} The section root client ID or undefined if not set.\n */\nexport function getSectionRootClientId( state ) {\n\treturn state.settings?.[ sectionRootClientIdKey ];\n}\n\n/**\n * Returns the zoom out state.\n *\n * @param {Object} state Global application state.\n * @return {boolean} The zoom out state.\n */\nexport function getZoomLevel( state ) {\n\treturn state.zoomLevel;\n}\n\n/**\n * Returns whether the editor is considered zoomed out.\n *\n * @param {Object} state Global application state.\n * @return {boolean} Whether the editor is zoomed.\n */\nexport function isZoomOut( state ) {\n\treturn getZoomLevel( state ) < 100;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockType,\n\tgetBlockTypes,\n\tgetBlockVariations,\n\thasBlockSupport,\n\tgetPossibleBlockTransformations,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { Platform } from '@wordpress/element';\nimport { applyFilters } from '@wordpress/hooks';\nimport { symbol } from '@wordpress/icons';\nimport { create, remove, toHTMLString } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\nimport { createSelector, createRegistrySelector } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\twithRootClientIdOptionKey,\n\tcheckAllowListRecursive,\n\tcheckAllowList,\n\tgetAllPatternsDependants,\n\tgetInsertBlockTypeDependants,\n\tgetParsedPattern,\n\tgetGrammar,\n} from './utils';\nimport { orderBy } from '../utils/sorting';\nimport { STORE_NAME } from './constants';\nimport { unlock } from '../lock-unlock';\n\nimport {\n\tgetContentLockingParent,\n\tgetTemporarilyEditingAsBlocks,\n\tgetTemporarilyEditingFocusModeToRevert,\n\tgetSectionRootClientId,\n} from './private-selectors';\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPBlockSelection\n *\n * @property {string} clientId A block client ID.\n * @property {string} attributeKey A block attribute key.\n * @property {number} offset An attribute value offset, based on the rich\n * text value. See `wp.richText.create`.\n */\n\n// Module constants.\nconst MILLISECONDS_PER_HOUR = 3600 * 1000;\nconst MILLISECONDS_PER_DAY = 24 * 3600 * 1000;\nconst MILLISECONDS_PER_WEEK = 7 * 24 * 3600 * 1000;\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Shared reference to an empty Set for cases where it is important to avoid\n * returning a new Set reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n *\n * @type {Set}\n */\nconst EMPTY_SET = new Set();\n\nconst EMPTY_OBJECT = {};\n\n/**\n * Returns a block's name given its client ID, or null if no block exists with\n * the client ID.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {string} Block name.\n */\nexport function getBlockName( state, clientId ) {\n\tconst block = state.blocks.byClientId.get( clientId );\n\tconst socialLinkName = 'core/social-link';\n\n\tif ( Platform.OS !== 'web' && block?.name === socialLinkName ) {\n\t\tconst attributes = state.blocks.attributes.get( clientId );\n\t\tconst { service } = attributes ?? {};\n\n\t\treturn service ? `${ socialLinkName }-${ service }` : socialLinkName;\n\t}\n\treturn block ? block.name : null;\n}\n\n/**\n * Returns whether a block is valid or not.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Is Valid.\n */\nexport function isBlockValid( state, clientId ) {\n\tconst block = state.blocks.byClientId.get( clientId );\n\treturn !! block && block.isValid;\n}\n\n/**\n * Returns a block's attributes given its client ID, or null if no block exists with\n * the client ID.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {Object?} Block attributes.\n */\nexport function getBlockAttributes( state, clientId ) {\n\tconst block = state.blocks.byClientId.get( clientId );\n\tif ( ! block ) {\n\t\treturn null;\n\t}\n\n\treturn state.blocks.attributes.get( clientId );\n}\n\n/**\n * Returns a block given its client ID. This is a parsed copy of the block,\n * containing its `blockName`, `clientId`, and current `attributes` state. This\n * is not the block's registration settings, which must be retrieved from the\n * blocks module registration store.\n *\n * getBlock recurses through its inner blocks until all its children blocks have\n * been retrieved. Note that getBlock will not return the child inner blocks of\n * an inner block controller. This is because an inner block controller syncs\n * itself with its own entity, and should therefore not be included with the\n * blocks of a different entity. For example, say you call `getBlocks( TP )` to\n * get the blocks of a template part. If another template part is a child of TP,\n * then the nested template part's child blocks will not be returned. This way,\n * the template block itself is considered part of the parent, but the children\n * are not.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Parsed block object.\n */\nexport function getBlock( state, clientId ) {\n\tif ( ! state.blocks.byClientId.has( clientId ) ) {\n\t\treturn null;\n\t}\n\n\treturn state.blocks.tree.get( clientId );\n}\n\nexport const __unstableGetBlockWithoutInnerBlocks = createSelector(\n\t( state, clientId ) => {\n\t\tconst block = state.blocks.byClientId.get( clientId );\n\t\tif ( ! block ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\t...block,\n\t\t\tattributes: getBlockAttributes( state, clientId ),\n\t\t};\n\t},\n\t( state, clientId ) => [\n\t\tstate.blocks.byClientId.get( clientId ),\n\t\tstate.blocks.attributes.get( clientId ),\n\t]\n);\n\n/**\n * Returns all block objects for the current post being edited as an array in\n * the order they appear in the post. Note that this will exclude child blocks\n * of nested inner block controllers.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Post blocks.\n */\nexport function getBlocks( state, rootClientId ) {\n\tconst treeKey =\n\t\t! rootClientId || ! areInnerBlocksControlled( state, rootClientId )\n\t\t\t? rootClientId || ''\n\t\t\t: 'controlled||' + rootClientId;\n\treturn state.blocks.tree.get( treeKey )?.innerBlocks || EMPTY_ARRAY;\n}\n\n/**\n * Returns a stripped down block object containing only its client ID,\n * and its inner blocks' client IDs.\n *\n * @deprecated\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Client ID of the block to get.\n *\n * @return {Object} Client IDs of the post blocks.\n */\nexport const __unstableGetClientIdWithClientIdsTree = createSelector(\n\t( state, clientId ) => {\n\t\tdeprecated(\n\t\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetClientIdWithClientIdsTree\",\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.5',\n\t\t\t}\n\t\t);\n\t\treturn {\n\t\t\tclientId,\n\t\t\tinnerBlocks: __unstableGetClientIdsTree( state, clientId ),\n\t\t};\n\t},\n\t( state ) => [ state.blocks.order ]\n);\n\n/**\n * Returns the block tree represented in the block-editor store from the\n * given root, consisting of stripped down block objects containing only\n * their client IDs, and their inner blocks' client IDs.\n *\n * @deprecated\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Client IDs of the post blocks.\n */\nexport const __unstableGetClientIdsTree = createSelector(\n\t( state, rootClientId = '' ) => {\n\t\tdeprecated(\n\t\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetClientIdsTree\",\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.5',\n\t\t\t}\n\t\t);\n\t\treturn getBlockOrder( state, rootClientId ).map( ( clientId ) =>\n\t\t\t__unstableGetClientIdWithClientIdsTree( state, clientId )\n\t\t);\n\t},\n\t( state ) => [ state.blocks.order ]\n);\n\n/**\n * Returns an array containing the clientIds of all descendants of the blocks\n * given. Returned ids are ordered first by the order of the ids given, then\n * by the order that they appear in the editor.\n *\n * @param {Object} state Global application state.\n * @param {string|string[]} rootIds Client ID(s) for which descendant blocks are to be returned.\n *\n * @return {Array} Client IDs of descendants.\n */\nexport const getClientIdsOfDescendants = createSelector(\n\t( state, rootIds ) => {\n\t\trootIds = Array.isArray( rootIds ) ? [ ...rootIds ] : [ rootIds ];\n\t\tconst ids = [];\n\n\t\t// Add the descendants of the root blocks first.\n\t\tfor ( const rootId of rootIds ) {\n\t\t\tconst order = state.blocks.order.get( rootId );\n\t\t\tif ( order ) {\n\t\t\t\tids.push( ...order );\n\t\t\t}\n\t\t}\n\n\t\tlet index = 0;\n\n\t\t// Add the descendants of the descendants, recursively.\n\t\twhile ( index < ids.length ) {\n\t\t\tconst id = ids[ index ];\n\t\t\tconst order = state.blocks.order.get( id );\n\t\t\tif ( order ) {\n\t\t\t\tids.splice( index + 1, 0, ...order );\n\t\t\t}\n\t\t\tindex++;\n\t\t}\n\n\t\treturn ids;\n\t},\n\t( state ) => [ state.blocks.order ]\n);\n\n/**\n * Returns an array containing the clientIds of the top-level blocks and\n * their descendants of any depth (for nested blocks). Ids are returned\n * in the same order that they appear in the editor.\n *\n * @param {Object} state Global application state.\n *\n * @return {Array} ids of top-level and descendant blocks.\n */\nexport const getClientIdsWithDescendants = ( state ) =>\n\tgetClientIdsOfDescendants( state, '' );\n\n/**\n * Returns the total number of blocks, or the total number of blocks with a specific name in a post.\n * The number returned includes nested blocks.\n *\n * @param {Object} state Global application state.\n * @param {?string} blockName Optional block name, if specified only blocks of that type will be counted.\n *\n * @return {number} Number of blocks in the post, or number of blocks with name equal to blockName.\n */\nexport const getGlobalBlockCount = createSelector(\n\t( state, blockName ) => {\n\t\tconst clientIds = getClientIdsWithDescendants( state );\n\t\tif ( ! blockName ) {\n\t\t\treturn clientIds.length;\n\t\t}\n\t\tlet count = 0;\n\t\tfor ( const clientId of clientIds ) {\n\t\t\tconst block = state.blocks.byClientId.get( clientId );\n\t\t\tif ( block.name === blockName ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t},\n\t( state ) => [ state.blocks.order, state.blocks.byClientId ]\n);\n\n/**\n * Returns all blocks that match a blockName. Results include nested blocks.\n *\n * @param {Object} state Global application state.\n * @param {string[]} blockName Block name(s) for which clientIds are to be returned.\n *\n * @return {Array} Array of clientIds of blocks with name equal to blockName.\n */\nexport const getBlocksByName = createSelector(\n\t( state, blockName ) => {\n\t\tif ( ! blockName ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\tconst blockNames = Array.isArray( blockName )\n\t\t\t? blockName\n\t\t\t: [ blockName ];\n\t\tconst clientIds = getClientIdsWithDescendants( state );\n\t\tconst foundBlocks = clientIds.filter( ( clientId ) => {\n\t\t\tconst block = state.blocks.byClientId.get( clientId );\n\t\t\treturn blockNames.includes( block.name );\n\t\t} );\n\t\treturn foundBlocks.length > 0 ? foundBlocks : EMPTY_ARRAY;\n\t},\n\t( state ) => [ state.blocks.order, state.blocks.byClientId ]\n);\n\n/**\n * Returns all global blocks that match a blockName. Results include nested blocks.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n * @param {string[]} blockName Block name(s) for which clientIds are to be returned.\n *\n * @return {Array} Array of clientIds of blocks with name equal to blockName.\n */\nexport function __experimentalGetGlobalBlocksByName( state, blockName ) {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__experimentalGetGlobalBlocksByName\",\n\t\t{\n\t\t\tsince: '6.5',\n\t\t\talternative: `wp.data.select( 'core/block-editor' ).getBlocksByName`,\n\t\t}\n\t);\n\treturn getBlocksByName( state, blockName );\n}\n\n/**\n * Given an array of block client IDs, returns the corresponding array of block\n * objects.\n *\n * @param {Object} state Editor state.\n * @param {string[]} clientIds Client IDs for which blocks are to be returned.\n *\n * @return {WPBlock[]} Block objects.\n */\nexport const getBlocksByClientId = createSelector(\n\t( state, clientIds ) =>\n\t\t( Array.isArray( clientIds ) ? clientIds : [ clientIds ] ).map(\n\t\t\t( clientId ) => getBlock( state, clientId )\n\t\t),\n\t( state, clientIds ) =>\n\t\t( Array.isArray( clientIds ) ? clientIds : [ clientIds ] ).map(\n\t\t\t( clientId ) => state.blocks.tree.get( clientId )\n\t\t)\n);\n\n/**\n * Given an array of block client IDs, returns the corresponding array of block\n * names.\n *\n * @param {Object} state Editor state.\n * @param {string[]} clientIds Client IDs for which block names are to be returned.\n *\n * @return {string[]} Block names.\n */\nexport const getBlockNamesByClientId = createSelector(\n\t( state, clientIds ) =>\n\t\tgetBlocksByClientId( state, clientIds )\n\t\t\t.filter( Boolean )\n\t\t\t.map( ( block ) => block.name ),\n\t( state, clientIds ) => getBlocksByClientId( state, clientIds )\n);\n\n/**\n * Returns the number of blocks currently present in the post.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {number} Number of blocks in the post.\n */\nexport function getBlockCount( state, rootClientId ) {\n\treturn getBlockOrder( state, rootClientId ).length;\n}\n\n/**\n * Returns the current selection start block client ID, attribute key and text\n * offset.\n *\n * @param {Object} state Block editor state.\n *\n * @return {WPBlockSelection} Selection start information.\n */\nexport function getSelectionStart( state ) {\n\treturn state.selection.selectionStart;\n}\n\n/**\n * Returns the current selection end block client ID, attribute key and text\n * offset.\n *\n * @param {Object} state Block editor state.\n *\n * @return {WPBlockSelection} Selection end information.\n */\nexport function getSelectionEnd( state ) {\n\treturn state.selection.selectionEnd;\n}\n\n/**\n * Returns the current block selection start. This value may be null, and it\n * may represent either a singular block selection or multi-selection start.\n * A selection is singular if its start and end match.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} Client ID of block selection start.\n */\nexport function getBlockSelectionStart( state ) {\n\treturn state.selection.selectionStart.clientId;\n}\n\n/**\n * Returns the current block selection end. This value may be null, and it\n * may represent either a singular block selection or multi-selection end.\n * A selection is singular if its start and end match.\n *\n * @param {Object} state Global application state.\n *\n * @return {?string} Client ID of block selection end.\n */\nexport function getBlockSelectionEnd( state ) {\n\treturn state.selection.selectionEnd.clientId;\n}\n\n/**\n * Returns the number of blocks currently selected in the post.\n *\n * @param {Object} state Global application state.\n *\n * @return {number} Number of blocks selected in the post.\n */\nexport function getSelectedBlockCount( state ) {\n\tconst multiSelectedBlockCount =\n\t\tgetMultiSelectedBlockClientIds( state ).length;\n\n\tif ( multiSelectedBlockCount ) {\n\t\treturn multiSelectedBlockCount;\n\t}\n\n\treturn state.selection.selectionStart.clientId ? 1 : 0;\n}\n\n/**\n * Returns true if there is a single selected block, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether a single block is selected.\n */\nexport function hasSelectedBlock( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\treturn (\n\t\t!! selectionStart.clientId &&\n\t\tselectionStart.clientId === selectionEnd.clientId\n\t);\n}\n\n/**\n * Returns the currently selected block client ID, or null if there is no\n * selected block.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Selected block client ID.\n */\nexport function getSelectedBlockClientId( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\tconst { clientId } = selectionStart;\n\n\tif ( ! clientId || clientId !== selectionEnd.clientId ) {\n\t\treturn null;\n\t}\n\n\treturn clientId;\n}\n\n/**\n * Returns the currently selected block, or null if there is no selected block.\n *\n * @param {Object} state Global application state.\n *\n * @return {?Object} Selected block.\n */\nexport function getSelectedBlock( state ) {\n\tconst clientId = getSelectedBlockClientId( state );\n\treturn clientId ? getBlock( state, clientId ) : null;\n}\n\n/**\n * Given a block client ID, returns the root block from which the block is\n * nested, an empty string for top-level blocks, or null if the block does not\n * exist.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n *\n * @return {?string} Root client ID, if exists\n */\nexport function getBlockRootClientId( state, clientId ) {\n\treturn state.blocks.parents.get( clientId ) ?? null;\n}\n\n/**\n * Given a block client ID, returns the list of all its parents from top to bottom.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n * @param {boolean} ascending Order results from bottom to top (true) or top to bottom (false).\n *\n * @return {Array} ClientIDs of the parent blocks.\n */\nexport const getBlockParents = createSelector(\n\t( state, clientId, ascending = false ) => {\n\t\tconst parents = [];\n\t\tlet current = clientId;\n\t\twhile ( ( current = state.blocks.parents.get( current ) ) ) {\n\t\t\tparents.push( current );\n\t\t}\n\n\t\tif ( ! parents.length ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\treturn ascending ? parents : parents.reverse();\n\t},\n\t( state ) => [ state.blocks.parents ]\n);\n\n/**\n * Given a block client ID and a block name, returns the list of all its parents\n * from top to bottom, filtered by the given name(s). For example, if passed\n * 'core/group' as the blockName, it will only return parents which are group\n * blocks. If passed `[ 'core/group', 'core/cover']`, as the blockName, it will\n * return parents which are group blocks and parents which are cover blocks.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n * @param {string|string[]} blockName Block name(s) to filter.\n * @param {boolean} ascending Order results from bottom to top (true) or top to bottom (false).\n *\n * @return {Array} ClientIDs of the parent blocks.\n */\nexport const getBlockParentsByBlockName = createSelector(\n\t( state, clientId, blockName, ascending = false ) => {\n\t\tconst parents = getBlockParents( state, clientId, ascending );\n\t\tconst hasName = Array.isArray( blockName )\n\t\t\t? ( name ) => blockName.includes( name )\n\t\t\t: ( name ) => blockName === name;\n\t\treturn parents.filter( ( id ) => hasName( getBlockName( state, id ) ) );\n\t},\n\t( state ) => [ state.blocks.parents ]\n);\n/**\n * Given a block client ID, returns the root of the hierarchy from which the block is nested, return the block itself for root level blocks.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find root client ID.\n *\n * @return {string} Root client ID\n */\nexport function getBlockHierarchyRootClientId( state, clientId ) {\n\tlet current = clientId;\n\tlet parent;\n\tdo {\n\t\tparent = current;\n\t\tcurrent = state.blocks.parents.get( current );\n\t} while ( current );\n\treturn parent;\n}\n\n/**\n * Given a block client ID, returns the lowest common ancestor with selected client ID.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block from which to find common ancestor client ID.\n *\n * @return {string} Common ancestor client ID or undefined\n */\nexport function getLowestCommonAncestorWithSelectedBlock( state, clientId ) {\n\tconst selectedId = getSelectedBlockClientId( state );\n\tconst clientParents = [ ...getBlockParents( state, clientId ), clientId ];\n\tconst selectedParents = [\n\t\t...getBlockParents( state, selectedId ),\n\t\tselectedId,\n\t];\n\n\tlet lowestCommonAncestor;\n\n\tconst maxDepth = Math.min( clientParents.length, selectedParents.length );\n\tfor ( let index = 0; index < maxDepth; index++ ) {\n\t\tif ( clientParents[ index ] === selectedParents[ index ] ) {\n\t\t\tlowestCommonAncestor = clientParents[ index ];\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn lowestCommonAncestor;\n}\n\n/**\n * Returns the client ID of the block adjacent one at the given reference\n * startClientId and modifier directionality. Defaults start startClientId to\n * the selected block, and direction as next block. Returns null if there is no\n * adjacent block.\n *\n * @param {Object} state Editor state.\n * @param {?string} startClientId Optional client ID of block from which to\n * search.\n * @param {?number} modifier Directionality multiplier (1 next, -1\n * previous).\n *\n * @return {?string} Return the client ID of the block, or null if none exists.\n */\nexport function getAdjacentBlockClientId( state, startClientId, modifier = 1 ) {\n\t// Default to selected block.\n\tif ( startClientId === undefined ) {\n\t\tstartClientId = getSelectedBlockClientId( state );\n\t}\n\n\t// Try multi-selection starting at extent based on modifier.\n\tif ( startClientId === undefined ) {\n\t\tif ( modifier < 0 ) {\n\t\t\tstartClientId = getFirstMultiSelectedBlockClientId( state );\n\t\t} else {\n\t\t\tstartClientId = getLastMultiSelectedBlockClientId( state );\n\t\t}\n\t}\n\n\t// Validate working start client ID.\n\tif ( ! startClientId ) {\n\t\treturn null;\n\t}\n\n\t// Retrieve start block root client ID, being careful to allow the falsey\n\t// empty string top-level root by explicitly testing against null.\n\tconst rootClientId = getBlockRootClientId( state, startClientId );\n\tif ( rootClientId === null ) {\n\t\treturn null;\n\t}\n\n\tconst { order } = state.blocks;\n\tconst orderSet = order.get( rootClientId );\n\tconst index = orderSet.indexOf( startClientId );\n\tconst nextIndex = index + 1 * modifier;\n\n\t// Block was first in set and we're attempting to get previous.\n\tif ( nextIndex < 0 ) {\n\t\treturn null;\n\t}\n\n\t// Block was last in set and we're attempting to get next.\n\tif ( nextIndex === orderSet.length ) {\n\t\treturn null;\n\t}\n\n\t// Assume incremented index is within the set.\n\treturn orderSet[ nextIndex ];\n}\n\n/**\n * Returns the previous block's client ID from the given reference start ID.\n * Defaults start to the selected block. Returns null if there is no previous\n * block.\n *\n * @param {Object} state Editor state.\n * @param {?string} startClientId Optional client ID of block from which to\n * search.\n *\n * @return {?string} Adjacent block's client ID, or null if none exists.\n */\nexport function getPreviousBlockClientId( state, startClientId ) {\n\treturn getAdjacentBlockClientId( state, startClientId, -1 );\n}\n\n/**\n * Returns the next block's client ID from the given reference start ID.\n * Defaults start to the selected block. Returns null if there is no next\n * block.\n *\n * @param {Object} state Editor state.\n * @param {?string} startClientId Optional client ID of block from which to\n * search.\n *\n * @return {?string} Adjacent block's client ID, or null if none exists.\n */\nexport function getNextBlockClientId( state, startClientId ) {\n\treturn getAdjacentBlockClientId( state, startClientId, 1 );\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns the initial caret position for the selected block.\n * This position is to used to position the caret properly when the selected block changes.\n * If the current block is not a RichText, having initial position set to 0 means \"focus block\"\n *\n * @param {Object} state Global application state.\n *\n * @return {0|-1|null} Initial position.\n */\nexport function getSelectedBlocksInitialCaretPosition( state ) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn state.initialPosition;\n}\n\n/**\n * Returns the current selection set of block client IDs (multiselection or single selection).\n *\n * @param {Object} state Editor state.\n *\n * @return {Array} Multi-selected block client IDs.\n */\nexport const getSelectedBlockClientIds = createSelector(\n\t( state ) => {\n\t\tconst { selectionStart, selectionEnd } = state.selection;\n\n\t\tif ( ! selectionStart.clientId || ! selectionEnd.clientId ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\t\treturn [ selectionStart.clientId ];\n\t\t}\n\n\t\t// Retrieve root client ID to aid in retrieving relevant nested block\n\t\t// order, being careful to allow the falsey empty string top-level root\n\t\t// by explicitly testing against null.\n\t\tconst rootClientId = getBlockRootClientId(\n\t\t\tstate,\n\t\t\tselectionStart.clientId\n\t\t);\n\n\t\tif ( rootClientId === null ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tconst blockOrder = getBlockOrder( state, rootClientId );\n\t\tconst startIndex = blockOrder.indexOf( selectionStart.clientId );\n\t\tconst endIndex = blockOrder.indexOf( selectionEnd.clientId );\n\n\t\tif ( startIndex > endIndex ) {\n\t\t\treturn blockOrder.slice( endIndex, startIndex + 1 );\n\t\t}\n\n\t\treturn blockOrder.slice( startIndex, endIndex + 1 );\n\t},\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.selection.selectionStart.clientId,\n\t\tstate.selection.selectionEnd.clientId,\n\t]\n);\n\n/**\n * Returns the current multi-selection set of block client IDs, or an empty\n * array if there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {Array} Multi-selected block client IDs.\n */\nexport function getMultiSelectedBlockClientIds( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\treturn getSelectedBlockClientIds( state );\n}\n\n/**\n * Returns the current multi-selection set of blocks, or an empty array if\n * there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {Array} Multi-selected block objects.\n */\nexport const getMultiSelectedBlocks = createSelector(\n\t( state ) => {\n\t\tconst multiSelectedBlockClientIds =\n\t\t\tgetMultiSelectedBlockClientIds( state );\n\t\tif ( ! multiSelectedBlockClientIds.length ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\treturn multiSelectedBlockClientIds.map( ( clientId ) =>\n\t\t\tgetBlock( state, clientId )\n\t\t);\n\t},\n\t( state ) => [\n\t\t...getSelectedBlockClientIds.getDependants( state ),\n\t\tstate.blocks.byClientId,\n\t\tstate.blocks.order,\n\t\tstate.blocks.attributes,\n\t]\n);\n\n/**\n * Returns the client ID of the first block in the multi-selection set, or null\n * if there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} First block client ID in the multi-selection set.\n */\nexport function getFirstMultiSelectedBlockClientId( state ) {\n\treturn getMultiSelectedBlockClientIds( state )[ 0 ] || null;\n}\n\n/**\n * Returns the client ID of the last block in the multi-selection set, or null\n * if there is no multi-selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Last block client ID in the multi-selection set.\n */\nexport function getLastMultiSelectedBlockClientId( state ) {\n\tconst selectedClientIds = getMultiSelectedBlockClientIds( state );\n\treturn selectedClientIds[ selectedClientIds.length - 1 ] || null;\n}\n\n/**\n * Returns true if a multi-selection exists, and the block corresponding to the\n * specified client ID is the first block of the multi-selection set, or false\n * otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is first in multi-selection.\n */\nexport function isFirstMultiSelectedBlock( state, clientId ) {\n\treturn getFirstMultiSelectedBlockClientId( state ) === clientId;\n}\n\n/**\n * Returns true if the client ID occurs within the block multi-selection, or\n * false otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is in multi-selection set.\n */\nexport function isBlockMultiSelected( state, clientId ) {\n\treturn getMultiSelectedBlockClientIds( state ).indexOf( clientId ) !== -1;\n}\n\n/**\n * Returns true if an ancestor of the block is multi-selected, or false\n * otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether an ancestor of the block is in multi-selection\n * set.\n */\nexport const isAncestorMultiSelected = createSelector(\n\t( state, clientId ) => {\n\t\tlet ancestorClientId = clientId;\n\t\tlet isMultiSelected = false;\n\t\twhile ( ancestorClientId && ! isMultiSelected ) {\n\t\t\tancestorClientId = getBlockRootClientId( state, ancestorClientId );\n\t\t\tisMultiSelected = isBlockMultiSelected( state, ancestorClientId );\n\t\t}\n\t\treturn isMultiSelected;\n\t},\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.selection.selectionStart.clientId,\n\t\tstate.selection.selectionEnd.clientId,\n\t]\n);\n\n/**\n * Returns the client ID of the block which begins the multi-selection set, or\n * null if there is no multi-selection.\n *\n * This is not necessarily the first client ID in the selection.\n *\n * @see getFirstMultiSelectedBlockClientId\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Client ID of block beginning multi-selection.\n */\nexport function getMultiSelectedBlocksStartClientId( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\treturn null;\n\t}\n\n\treturn selectionStart.clientId || null;\n}\n\n/**\n * Returns the client ID of the block which ends the multi-selection set, or\n * null if there is no multi-selection.\n *\n * This is not necessarily the last client ID in the selection.\n *\n * @see getLastMultiSelectedBlockClientId\n *\n * @param {Object} state Editor state.\n *\n * @return {?string} Client ID of block ending multi-selection.\n */\nexport function getMultiSelectedBlocksEndClientId( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId === selectionEnd.clientId ) {\n\t\treturn null;\n\t}\n\n\treturn selectionEnd.clientId || null;\n}\n\n/**\n * Returns true if the selection is not partial.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the selection is mergeable.\n */\nexport function __unstableIsFullySelected( state ) {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\treturn (\n\t\t! selectionAnchor.attributeKey &&\n\t\t! selectionFocus.attributeKey &&\n\t\ttypeof selectionAnchor.offset === 'undefined' &&\n\t\ttypeof selectionFocus.offset === 'undefined'\n\t);\n}\n\n/**\n * Returns true if the selection is collapsed.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether the selection is collapsed.\n */\nexport function __unstableIsSelectionCollapsed( state ) {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\treturn (\n\t\t!! selectionAnchor &&\n\t\t!! selectionFocus &&\n\t\tselectionAnchor.clientId === selectionFocus.clientId &&\n\t\tselectionAnchor.attributeKey === selectionFocus.attributeKey &&\n\t\tselectionAnchor.offset === selectionFocus.offset\n\t);\n}\n\nexport function __unstableSelectionHasUnmergeableBlock( state ) {\n\treturn getSelectedBlockClientIds( state ).some( ( clientId ) => {\n\t\tconst blockName = getBlockName( state, clientId );\n\t\tconst blockType = getBlockType( blockName );\n\t\treturn ! blockType.merge;\n\t} );\n}\n\n/**\n * Check whether the selection is mergeable.\n *\n * @param {Object} state Editor state.\n * @param {boolean} isForward Whether to merge forwards.\n *\n * @return {boolean} Whether the selection is mergeable.\n */\nexport function __unstableIsSelectionMergeable( state, isForward ) {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\n\t// It's not mergeable if the start and end are within the same block.\n\tif ( selectionAnchor.clientId === selectionFocus.clientId ) {\n\t\treturn false;\n\t}\n\n\t// It's not mergeable if there's no rich text selection.\n\tif (\n\t\t! selectionAnchor.attributeKey ||\n\t\t! selectionFocus.attributeKey ||\n\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\ttypeof selectionFocus.offset === 'undefined'\n\t) {\n\t\treturn false;\n\t}\n\n\tconst anchorRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionAnchor.clientId\n\t);\n\tconst focusRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionFocus.clientId\n\t);\n\n\t// It's not mergeable if the selection doesn't start and end in the same\n\t// block list. Maybe in the future it should be allowed.\n\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\treturn false;\n\t}\n\n\tconst blockOrder = getBlockOrder( state, anchorRootClientId );\n\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t// Reassign selection start and end based on order.\n\tlet selectionStart, selectionEnd;\n\n\tif ( anchorIndex > focusIndex ) {\n\t\tselectionStart = selectionFocus;\n\t\tselectionEnd = selectionAnchor;\n\t} else {\n\t\tselectionStart = selectionAnchor;\n\t\tselectionEnd = selectionFocus;\n\t}\n\n\tconst targetBlockClientId = isForward\n\t\t? selectionEnd.clientId\n\t\t: selectionStart.clientId;\n\tconst blockToMergeClientId = isForward\n\t\t? selectionStart.clientId\n\t\t: selectionEnd.clientId;\n\n\tconst targetBlockName = getBlockName( state, targetBlockClientId );\n\tconst targetBlockType = getBlockType( targetBlockName );\n\n\tif ( ! targetBlockType.merge ) {\n\t\treturn false;\n\t}\n\n\tconst blockToMerge = getBlock( state, blockToMergeClientId );\n\n\t// It's mergeable if the blocks are of the same type.\n\tif ( blockToMerge.name === targetBlockName ) {\n\t\treturn true;\n\t}\n\n\t// If the blocks are of a different type, try to transform the block being\n\t// merged into the same type of block.\n\tconst blocksToMerge = switchToBlockType( blockToMerge, targetBlockName );\n\n\treturn blocksToMerge && blocksToMerge.length;\n}\n\n/**\n * Get partial selected blocks with their content updated\n * based on the selection.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object[]} Updated partial selected blocks.\n */\nexport const __unstableGetSelectedBlocksWithPartialSelection = ( state ) => {\n\tconst selectionAnchor = getSelectionStart( state );\n\tconst selectionFocus = getSelectionEnd( state );\n\n\tif ( selectionAnchor.clientId === selectionFocus.clientId ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\t// Can't split if the selection is not set.\n\tif (\n\t\t! selectionAnchor.attributeKey ||\n\t\t! selectionFocus.attributeKey ||\n\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\ttypeof selectionFocus.offset === 'undefined'\n\t) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst anchorRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionAnchor.clientId\n\t);\n\tconst focusRootClientId = getBlockRootClientId(\n\t\tstate,\n\t\tselectionFocus.clientId\n\t);\n\n\t// It's not splittable if the selection doesn't start and end in the same\n\t// block list. Maybe in the future it should be allowed.\n\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst blockOrder = getBlockOrder( state, anchorRootClientId );\n\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t// Reassign selection start and end based on order.\n\tconst [ selectionStart, selectionEnd ] =\n\t\tanchorIndex > focusIndex\n\t\t\t? [ selectionFocus, selectionAnchor ]\n\t\t\t: [ selectionAnchor, selectionFocus ];\n\n\tconst blockA = getBlock( state, selectionStart.clientId );\n\tconst blockB = getBlock( state, selectionEnd.clientId );\n\n\tconst htmlA = blockA.attributes[ selectionStart.attributeKey ];\n\tconst htmlB = blockB.attributes[ selectionEnd.attributeKey ];\n\n\tlet valueA = create( { html: htmlA } );\n\tlet valueB = create( { html: htmlB } );\n\n\tvalueA = remove( valueA, 0, selectionStart.offset );\n\tvalueB = remove( valueB, selectionEnd.offset, valueB.text.length );\n\n\treturn [\n\t\t{\n\t\t\t...blockA,\n\t\t\tattributes: {\n\t\t\t\t...blockA.attributes,\n\t\t\t\t[ selectionStart.attributeKey ]: toHTMLString( {\n\t\t\t\t\tvalue: valueA,\n\t\t\t\t} ),\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t...blockB,\n\t\t\tattributes: {\n\t\t\t\t...blockB.attributes,\n\t\t\t\t[ selectionEnd.attributeKey ]: toHTMLString( {\n\t\t\t\t\tvalue: valueB,\n\t\t\t\t} ),\n\t\t\t},\n\t\t},\n\t];\n};\n\n/**\n * Returns an array containing all block client IDs in the editor in the order\n * they appear. Optionally accepts a root client ID of the block list for which\n * the order should be returned, defaulting to the top-level block order.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Array} Ordered client IDs of editor blocks.\n */\nexport function getBlockOrder( state, rootClientId ) {\n\treturn state.blocks.order.get( rootClientId || '' ) || EMPTY_ARRAY;\n}\n\n/**\n * Returns the index at which the block corresponding to the specified client\n * ID occurs within the block order, or `-1` if the block does not exist.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {number} Index at which block exists in order.\n */\nexport function getBlockIndex( state, clientId ) {\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\treturn getBlockOrder( state, rootClientId ).indexOf( clientId );\n}\n\n/**\n * Returns true if the block corresponding to the specified client ID is\n * currently selected and no multi-selection exists, or false otherwise.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is selected and multi-selection exists.\n */\nexport function isBlockSelected( state, clientId ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\n\tif ( selectionStart.clientId !== selectionEnd.clientId ) {\n\t\treturn false;\n\t}\n\n\treturn selectionStart.clientId === clientId;\n}\n\n/**\n * Returns true if one of the block's inner blocks is selected.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n * @param {boolean} deep Perform a deep check.\n *\n * @return {boolean} Whether the block has an inner block selected\n */\nexport function hasSelectedInnerBlock( state, clientId, deep = false ) {\n\tconst selectedBlockClientIds = getSelectedBlockClientIds( state );\n\n\tif ( ! selectedBlockClientIds.length ) {\n\t\treturn false;\n\t}\n\n\tif ( deep ) {\n\t\treturn selectedBlockClientIds.some( ( id ) =>\n\t\t\t// Pass true because we don't care about order and it's more\n\t\t\t// performant.\n\t\t\tgetBlockParents( state, id, true ).includes( clientId )\n\t\t);\n\t}\n\n\treturn selectedBlockClientIds.some(\n\t\t( id ) => getBlockRootClientId( state, id ) === clientId\n\t);\n}\n\n/**\n * Returns true if one of the block's inner blocks is dragged.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n * @param {boolean} deep Perform a deep check.\n *\n * @return {boolean} Whether the block has an inner block dragged\n */\nexport function hasDraggedInnerBlock( state, clientId, deep = false ) {\n\treturn getBlockOrder( state, clientId ).some(\n\t\t( innerClientId ) =>\n\t\t\tisBlockBeingDragged( state, innerClientId ) ||\n\t\t\t( deep && hasDraggedInnerBlock( state, innerClientId, deep ) )\n\t);\n}\n\n/**\n * Returns true if the block corresponding to the specified client ID is\n * currently selected but isn't the last of the selected blocks. Here \"last\"\n * refers to the block sequence in the document, _not_ the sequence of\n * multi-selection, which is why `state.selectionEnd` isn't used.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {boolean} Whether block is selected and not the last in the\n * selection.\n */\nexport function isBlockWithinSelection( state, clientId ) {\n\tif ( ! clientId ) {\n\t\treturn false;\n\t}\n\n\tconst clientIds = getMultiSelectedBlockClientIds( state );\n\tconst index = clientIds.indexOf( clientId );\n\treturn index > -1 && index < clientIds.length - 1;\n}\n\n/**\n * Returns true if a multi-selection has been made, or false otherwise.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Whether multi-selection has been made.\n */\nexport function hasMultiSelection( state ) {\n\tconst { selectionStart, selectionEnd } = state.selection;\n\treturn selectionStart.clientId !== selectionEnd.clientId;\n}\n\n/**\n * Whether in the process of multi-selecting or not. This flag is only true\n * while the multi-selection is being selected (by mouse move), and is false\n * once the multi-selection has been settled.\n *\n * @see hasMultiSelection\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} True if multi-selecting, false if not.\n */\nexport function isMultiSelecting( state ) {\n\treturn state.isMultiSelecting;\n}\n\n/**\n * Selector that returns if multi-selection is enabled or not.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} True if it should be possible to multi-select blocks, false if multi-selection is disabled.\n */\nexport function isSelectionEnabled( state ) {\n\treturn state.isSelectionEnabled;\n}\n\n/**\n * Returns the block's editing mode, defaulting to \"visual\" if not explicitly\n * assigned.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Block editing mode.\n */\nexport function getBlockMode( state, clientId ) {\n\treturn state.blocksMode[ clientId ] || 'visual';\n}\n\n/**\n * Returns true if the user is typing, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether user is typing.\n */\nexport function isTyping( state ) {\n\treturn state.isTyping;\n}\n\n/**\n * Returns true if the user is dragging blocks, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether user is dragging blocks.\n */\nexport function isDraggingBlocks( state ) {\n\treturn !! state.draggedBlocks.length;\n}\n\n/**\n * Returns the client ids of any blocks being directly dragged.\n *\n * This does not include children of a parent being dragged.\n *\n * @param {Object} state Global application state.\n *\n * @return {string[]} Array of dragged block client ids.\n */\nexport function getDraggedBlockClientIds( state ) {\n\treturn state.draggedBlocks;\n}\n\n/**\n * Returns whether the block is being dragged.\n *\n * Only returns true if the block is being directly dragged,\n * not if the block is a child of a parent being dragged.\n * See `isAncestorBeingDragged` for child blocks.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId Client id for block to check.\n *\n * @return {boolean} Whether the block is being dragged.\n */\nexport function isBlockBeingDragged( state, clientId ) {\n\treturn state.draggedBlocks.includes( clientId );\n}\n\n/**\n * Returns whether a parent/ancestor of the block is being dragged.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId Client id for block to check.\n *\n * @return {boolean} Whether the block's ancestor is being dragged.\n */\nexport function isAncestorBeingDragged( state, clientId ) {\n\t// Return early if no blocks are being dragged rather than\n\t// the more expensive check for parents.\n\tif ( ! isDraggingBlocks( state ) ) {\n\t\treturn false;\n\t}\n\n\tconst parents = getBlockParents( state, clientId );\n\treturn parents.some( ( parentClientId ) =>\n\t\tisBlockBeingDragged( state, parentClientId )\n\t);\n}\n\n/**\n * Returns true if the caret is within formatted text, or false otherwise.\n *\n * @deprecated\n *\n * @return {boolean} Whether the caret is within formatted text.\n */\nexport function isCaretWithinFormattedText() {\n\tdeprecated(\n\t\t'wp.data.select( \"core/block-editor\" ).isCaretWithinFormattedText',\n\t\t{\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.3',\n\t\t}\n\t);\n\n\treturn false;\n}\n\n/**\n * Returns the insertion point, the index at which the new inserted block would\n * be placed. Defaults to the last index.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} Insertion point object with `rootClientId`, `index`.\n */\nexport const getBlockInsertionPoint = createSelector(\n\t( state ) => {\n\t\tlet rootClientId, index;\n\n\t\tconst {\n\t\t\tinsertionPoint,\n\t\t\tselection: { selectionEnd },\n\t\t} = state;\n\t\tif ( insertionPoint !== null ) {\n\t\t\treturn insertionPoint;\n\t\t}\n\n\t\tconst { clientId } = selectionEnd;\n\n\t\tif ( clientId ) {\n\t\t\trootClientId = getBlockRootClientId( state, clientId ) || undefined;\n\t\t\tindex = getBlockIndex( state, selectionEnd.clientId ) + 1;\n\t\t} else {\n\t\t\tindex = getBlockOrder( state ).length;\n\t\t}\n\n\t\treturn { rootClientId, index };\n\t},\n\t( state ) => [\n\t\tstate.insertionPoint,\n\t\tstate.selection.selectionEnd.clientId,\n\t\tstate.blocks.parents,\n\t\tstate.blocks.order,\n\t]\n);\n\n/**\n * Returns true if we should show the block insertion point.\n *\n * @param {Object} state Global application state.\n *\n * @return {?boolean} Whether the insertion point is visible or not.\n */\nexport function isBlockInsertionPointVisible( state ) {\n\treturn state.insertionPoint !== null;\n}\n\n/**\n * Returns whether the blocks matches the template or not.\n *\n * @param {boolean} state\n * @return {?boolean} Whether the template is valid or not.\n */\nexport function isValidTemplate( state ) {\n\treturn state.template.isValid;\n}\n\n/**\n * Returns the defined block template\n *\n * @param {boolean} state\n *\n * @return {?Array} Block Template.\n */\nexport function getTemplate( state ) {\n\treturn state.settings.template;\n}\n\n/**\n * Returns the defined block template lock. Optionally accepts a root block\n * client ID as context, otherwise defaulting to the global context.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional block root client ID.\n *\n * @return {string|false} Block Template Lock\n */\nexport function getTemplateLock( state, rootClientId ) {\n\tif ( ! rootClientId ) {\n\t\treturn state.settings.templateLock ?? false;\n\t}\n\n\treturn getBlockListSettings( state, rootClientId )?.templateLock ?? false;\n}\n\n/**\n * Determines if the given block type is allowed to be inserted into the block list.\n * This function is not exported and not memoized because using a memoized selector\n * inside another memoized selector is just a waste of time.\n *\n * @param {Object} state Editor state.\n * @param {string|Object} blockName The block type object, e.g., the response\n * from the block directory; or a string name of\n * an installed block type, e.g.' core/paragraph'.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given block type is allowed to be inserted.\n */\nconst canInsertBlockTypeUnmemoized = (\n\tstate,\n\tblockName,\n\trootClientId = null\n) => {\n\tlet blockType;\n\tif ( blockName && 'object' === typeof blockName ) {\n\t\tblockType = blockName;\n\t\tblockName = blockType.name;\n\t} else {\n\t\tblockType = getBlockType( blockName );\n\t}\n\tif ( ! blockType ) {\n\t\treturn false;\n\t}\n\n\tconst { allowedBlockTypes } = getSettings( state );\n\n\tconst isBlockAllowedInEditor = checkAllowList(\n\t\tallowedBlockTypes,\n\t\tblockName,\n\t\ttrue\n\t);\n\tif ( ! isBlockAllowedInEditor ) {\n\t\treturn false;\n\t}\n\n\tconst isLocked = !! getTemplateLock( state, rootClientId );\n\tif ( isLocked ) {\n\t\treturn false;\n\t}\n\n\tif ( getBlockEditingMode( state, rootClientId ?? '' ) === 'disabled' ) {\n\t\treturn false;\n\t}\n\n\tconst parentBlockListSettings = getBlockListSettings( state, rootClientId );\n\n\t// The parent block doesn't have settings indicating it doesn't support\n\t// inner blocks, return false.\n\tif ( rootClientId && parentBlockListSettings === undefined ) {\n\t\treturn false;\n\t}\n\n\tconst parentName = getBlockName( state, rootClientId );\n\tconst parentBlockType = getBlockType( parentName );\n\n\t// Look at the `blockType.allowedBlocks` field to determine whether this is an allowed child block.\n\tconst parentAllowedChildBlocks = parentBlockType?.allowedBlocks;\n\tlet hasParentAllowedBlock = checkAllowList(\n\t\tparentAllowedChildBlocks,\n\t\tblockName\n\t);\n\n\t// The `allowedBlocks` block list setting can further limit which blocks are allowed children.\n\tif ( hasParentAllowedBlock !== false ) {\n\t\tconst parentAllowedBlocks = parentBlockListSettings?.allowedBlocks;\n\t\tconst hasParentListAllowedBlock = checkAllowList(\n\t\t\tparentAllowedBlocks,\n\t\t\tblockName\n\t\t);\n\t\t// Never downgrade the result from `true` to `null`\n\t\tif ( hasParentListAllowedBlock !== null ) {\n\t\t\thasParentAllowedBlock = hasParentListAllowedBlock;\n\t\t}\n\t}\n\n\tconst blockAllowedParentBlocks = blockType.parent;\n\tconst hasBlockAllowedParent = checkAllowList(\n\t\tblockAllowedParentBlocks,\n\t\tparentName\n\t);\n\n\tlet hasBlockAllowedAncestor = true;\n\tconst blockAllowedAncestorBlocks = blockType.ancestor;\n\tif ( blockAllowedAncestorBlocks ) {\n\t\tconst ancestors = [\n\t\t\trootClientId,\n\t\t\t...getBlockParents( state, rootClientId ),\n\t\t];\n\n\t\thasBlockAllowedAncestor = ancestors.some( ( ancestorClientId ) =>\n\t\t\tcheckAllowList(\n\t\t\t\tblockAllowedAncestorBlocks,\n\t\t\t\tgetBlockName( state, ancestorClientId )\n\t\t\t)\n\t\t);\n\t}\n\n\tconst canInsert =\n\t\thasBlockAllowedAncestor &&\n\t\t( ( hasParentAllowedBlock === null &&\n\t\t\thasBlockAllowedParent === null ) ||\n\t\t\thasParentAllowedBlock === true ||\n\t\t\thasBlockAllowedParent === true );\n\n\tif ( ! canInsert ) {\n\t\treturn canInsert;\n\t}\n\n\t/**\n\t * This filter is an ad-hoc solution to prevent adding template parts inside post content.\n\t * Conceptually, having a filter inside a selector is bad pattern so this code will be\n\t * replaced by a declarative API that doesn't the following drawbacks:\n\t *\n\t * Filters are not reactive: Upon switching between \"template mode\" and non \"template mode\",\n\t * the filter and selector won't necessarily be executed again. For now, it doesn't matter much\n\t * because you can't switch between the two modes while the inserter stays open.\n\t *\n\t * Filters are global: Once they're defined, they will affect all editor instances and all registries.\n\t * An ideal API would only affect specific editor instances.\n\t */\n\treturn applyFilters(\n\t\t'blockEditor.__unstableCanInsertBlockType',\n\t\tcanInsert,\n\t\tblockType,\n\t\trootClientId,\n\t\t{\n\t\t\t// Pass bound selectors of the current registry. If we're in a nested\n\t\t\t// context, the data will differ from the one selected from the root\n\t\t\t// registry.\n\t\t\tgetBlock: getBlock.bind( null, state ),\n\t\t\tgetBlockParentsByBlockName: getBlockParentsByBlockName.bind(\n\t\t\t\tnull,\n\t\t\t\tstate\n\t\t\t),\n\t\t}\n\t);\n};\n\n/**\n * Determines if the given block type is allowed to be inserted into the block list.\n *\n * @param {Object} state Editor state.\n * @param {string} blockName The name of the block type, e.g.' core/paragraph'.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given block type is allowed to be inserted.\n */\nexport const canInsertBlockType = createSelector(\n\tcanInsertBlockTypeUnmemoized,\n\t( state, blockName, rootClientId ) =>\n\t\tgetInsertBlockTypeDependants( state, rootClientId )\n);\n\n/**\n * Determines if the given blocks are allowed to be inserted into the block\n * list.\n *\n * @param {Object} state Editor state.\n * @param {string} clientIds The block client IDs to be inserted.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given blocks are allowed to be inserted.\n */\nexport function canInsertBlocks( state, clientIds, rootClientId = null ) {\n\treturn clientIds.every( ( id ) =>\n\t\tcanInsertBlockType( state, getBlockName( state, id ), rootClientId )\n\t);\n}\n\n/**\n * Determines if the given block is allowed to be deleted.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId The block client Id.\n *\n * @return {boolean} Whether the given block is allowed to be removed.\n */\nexport function canRemoveBlock( state, clientId ) {\n\tconst attributes = getBlockAttributes( state, clientId );\n\tif ( attributes === null ) {\n\t\treturn true;\n\t}\n\tif ( attributes.lock?.remove !== undefined ) {\n\t\treturn ! attributes.lock.remove;\n\t}\n\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\tif ( getTemplateLock( state, rootClientId ) ) {\n\t\treturn false;\n\t}\n\n\treturn getBlockEditingMode( state, rootClientId ) !== 'disabled';\n}\n\n/**\n * Determines if the given blocks are allowed to be removed.\n *\n * @param {Object} state Editor state.\n * @param {string} clientIds The block client IDs to be removed.\n *\n * @return {boolean} Whether the given blocks are allowed to be removed.\n */\nexport function canRemoveBlocks( state, clientIds ) {\n\treturn clientIds.every( ( clientId ) => canRemoveBlock( state, clientId ) );\n}\n\n/**\n * Determines if the given block is allowed to be moved.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId The block client Id.\n *\n * @return {boolean} Whether the given block is allowed to be moved.\n */\nexport function canMoveBlock( state, clientId ) {\n\tconst attributes = getBlockAttributes( state, clientId );\n\tif ( attributes === null ) {\n\t\treturn true;\n\t}\n\tif ( attributes.lock?.move !== undefined ) {\n\t\treturn ! attributes.lock.move;\n\t}\n\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\tif ( getTemplateLock( state, rootClientId ) === 'all' ) {\n\t\treturn false;\n\t}\n\treturn getBlockEditingMode( state, rootClientId ) !== 'disabled';\n}\n\n/**\n * Determines if the given blocks are allowed to be moved.\n *\n * @param {Object} state Editor state.\n * @param {string} clientIds The block client IDs to be moved.\n *\n * @return {boolean} Whether the given blocks are allowed to be moved.\n */\nexport function canMoveBlocks( state, clientIds ) {\n\treturn clientIds.every( ( clientId ) => canMoveBlock( state, clientId ) );\n}\n\n/**\n * Determines if the given block is allowed to be edited.\n *\n * @param {Object} state Editor state.\n * @param {string} clientId The block client Id.\n *\n * @return {boolean} Whether the given block is allowed to be edited.\n */\nexport function canEditBlock( state, clientId ) {\n\tconst attributes = getBlockAttributes( state, clientId );\n\tif ( attributes === null ) {\n\t\treturn true;\n\t}\n\n\tconst { lock } = attributes;\n\n\t// When the edit is true, we cannot edit the block.\n\treturn ! lock?.edit;\n}\n\n/**\n * Determines if the given block type can be locked/unlocked by a user.\n *\n * @param {Object} state Editor state.\n * @param {(string|Object)} nameOrType Block name or type object.\n *\n * @return {boolean} Whether a given block type can be locked/unlocked.\n */\nexport function canLockBlockType( state, nameOrType ) {\n\tif ( ! hasBlockSupport( nameOrType, 'lock', true ) ) {\n\t\treturn false;\n\t}\n\n\t// Use block editor settings as the default value.\n\treturn !! state.settings?.canLockBlocks;\n}\n\n/**\n * Returns information about how recently and frequently a block has been inserted.\n *\n * @param {Object} state Global application state.\n * @param {string} id A string which identifies the insert, e.g. 'core/block/12'\n *\n * @return {?{ time: number, count: number }} An object containing `time` which is when the last\n * insert occurred as a UNIX epoch, and `count` which is\n * the number of inserts that have occurred.\n */\nfunction getInsertUsage( state, id ) {\n\treturn state.preferences.insertUsage?.[ id ] ?? null;\n}\n\n/**\n * Returns whether we can show a block type in the inserter\n *\n * @param {Object} state Global State\n * @param {Object} blockType BlockType\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Whether the given block type is allowed to be shown in the inserter.\n */\nconst canIncludeBlockTypeInInserter = ( state, blockType, rootClientId ) => {\n\tif ( ! hasBlockSupport( blockType, 'inserter', true ) ) {\n\t\treturn false;\n\t}\n\n\treturn canInsertBlockTypeUnmemoized( state, blockType.name, rootClientId );\n};\n\n/**\n * Return a function to be used to tranform a block variation to an inserter item\n *\n * @param {Object} state Global State\n * @param {Object} item Denormalized inserter item\n * @return {Function} Function to transform a block variation to inserter item\n */\nconst getItemFromVariation = ( state, item ) => ( variation ) => {\n\tconst variationId = `${ item.id }/${ variation.name }`;\n\tconst { time, count = 0 } = getInsertUsage( state, variationId ) || {};\n\treturn {\n\t\t...item,\n\t\tid: variationId,\n\t\ticon: variation.icon || item.icon,\n\t\ttitle: variation.title || item.title,\n\t\tdescription: variation.description || item.description,\n\t\tcategory: variation.category || item.category,\n\t\t// If `example` is explicitly undefined for the variation, the preview will not be shown.\n\t\texample: variation.hasOwnProperty( 'example' )\n\t\t\t? variation.example\n\t\t\t: item.example,\n\t\tinitialAttributes: {\n\t\t\t...item.initialAttributes,\n\t\t\t...variation.attributes,\n\t\t},\n\t\tinnerBlocks: variation.innerBlocks,\n\t\tkeywords: variation.keywords || item.keywords,\n\t\tfrecency: calculateFrecency( time, count ),\n\t};\n};\n\n/**\n * Returns the calculated frecency.\n *\n * 'frecency' is a heuristic (https://en.wikipedia.org/wiki/Frecency)\n * that combines block usage frequenty and recency.\n *\n * @param {number} time When the last insert occurred as a UNIX epoch\n * @param {number} count The number of inserts that have occurred.\n *\n * @return {number} The calculated frecency.\n */\nconst calculateFrecency = ( time, count ) => {\n\tif ( ! time ) {\n\t\treturn count;\n\t}\n\t// The selector is cached, which means Date.now() is the last time that the\n\t// relevant state changed. This suits our needs.\n\tconst duration = Date.now() - time;\n\tswitch ( true ) {\n\t\tcase duration < MILLISECONDS_PER_HOUR:\n\t\t\treturn count * 4;\n\t\tcase duration < MILLISECONDS_PER_DAY:\n\t\t\treturn count * 2;\n\t\tcase duration < MILLISECONDS_PER_WEEK:\n\t\t\treturn count / 2;\n\t\tdefault:\n\t\t\treturn count / 4;\n\t}\n};\n\n/**\n * Returns a function that accepts a block type and builds an item to be shown\n * in a specific context. It's used for building items for Inserter and available\n * block Transfroms list.\n *\n * @param {Object} state Editor state.\n * @param {Object} options Options object for handling the building of a block type.\n * @param {string} options.buildScope The scope for which the item is going to be used.\n * @return {Function} Function returns an item to be shown in a specific context (Inserter|Transforms list).\n */\nconst buildBlockTypeItem =\n\t( state, { buildScope = 'inserter' } ) =>\n\t( blockType ) => {\n\t\tconst id = blockType.name;\n\n\t\tlet isDisabled = false;\n\t\tif ( ! hasBlockSupport( blockType.name, 'multiple', true ) ) {\n\t\t\tisDisabled = getBlocksByClientId(\n\t\t\t\tstate,\n\t\t\t\tgetClientIdsWithDescendants( state )\n\t\t\t).some( ( { name } ) => name === blockType.name );\n\t\t}\n\n\t\tconst { time, count = 0 } = getInsertUsage( state, id ) || {};\n\t\tconst blockItemBase = {\n\t\t\tid,\n\t\t\tname: blockType.name,\n\t\t\ttitle: blockType.title,\n\t\t\ticon: blockType.icon,\n\t\t\tisDisabled,\n\t\t\tfrecency: calculateFrecency( time, count ),\n\t\t};\n\t\tif ( buildScope === 'transform' ) {\n\t\t\treturn blockItemBase;\n\t\t}\n\n\t\tconst inserterVariations = getBlockVariations(\n\t\t\tblockType.name,\n\t\t\t'inserter'\n\t\t);\n\t\treturn {\n\t\t\t...blockItemBase,\n\t\t\tinitialAttributes: {},\n\t\t\tdescription: blockType.description,\n\t\t\tcategory: blockType.category,\n\t\t\tkeywords: blockType.keywords,\n\t\t\tvariations: inserterVariations,\n\t\t\texample: blockType.example,\n\t\t\tutility: 1, // Deprecated.\n\t\t};\n\t};\n\n/**\n * Determines the items that appear in the inserter. Includes both static\n * items (e.g. a regular block type) and dynamic items (e.g. a reusable block).\n *\n * Each item object contains what's necessary to display a button in the\n * inserter and handle its selection.\n *\n * The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)\n * that combines block usage frequenty and recency.\n *\n * Items are returned ordered descendingly by their 'utility' and 'frecency'.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPEditorInserterItem[]} Items that appear in inserter.\n *\n * @typedef {Object} WPEditorInserterItem\n * @property {string} id Unique identifier for the item.\n * @property {string} name The type of block to create.\n * @property {Object} initialAttributes Attributes to pass to the newly created block.\n * @property {string} title Title of the item, as it appears in the inserter.\n * @property {string} icon Dashicon for the item, as it appears in the inserter.\n * @property {string} category Block category that the item is associated with.\n * @property {string[]} keywords Keywords that can be searched to find this item.\n * @property {boolean} isDisabled Whether or not the user should be prevented from inserting\n * this item.\n * @property {number} frecency Heuristic that combines frequency and recency.\n */\nexport const getInserterItems = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, rootClientId = null, options = EMPTY_OBJECT ) => {\n\t\t\tconst buildReusableBlockInserterItem = ( reusableBlock ) => {\n\t\t\t\tconst icon = ! reusableBlock.wp_pattern_sync_status\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tsrc: symbol,\n\t\t\t\t\t\t\tforeground: 'var(--wp-block-synced-color)',\n\t\t\t\t\t }\n\t\t\t\t\t: symbol;\n\t\t\t\tconst id = `core/block/${ reusableBlock.id }`;\n\t\t\t\tconst { time, count = 0 } = getInsertUsage( state, id ) || {};\n\t\t\t\tconst frecency = calculateFrecency( time, count );\n\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tname: 'core/block',\n\t\t\t\t\tinitialAttributes: { ref: reusableBlock.id },\n\t\t\t\t\ttitle: reusableBlock.title?.raw,\n\t\t\t\t\ticon,\n\t\t\t\t\tcategory: 'reusable',\n\t\t\t\t\tkeywords: [ 'reusable' ],\n\t\t\t\t\tisDisabled: false,\n\t\t\t\t\tutility: 1, // Deprecated.\n\t\t\t\t\tfrecency,\n\t\t\t\t\tcontent: reusableBlock.content?.raw,\n\t\t\t\t\tsyncStatus: reusableBlock.wp_pattern_sync_status,\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst syncedPatternInserterItems = canInsertBlockTypeUnmemoized(\n\t\t\t\tstate,\n\t\t\t\t'core/block',\n\t\t\t\trootClientId\n\t\t\t)\n\t\t\t\t? unlock( select( STORE_NAME ) )\n\t\t\t\t\t\t.getReusableBlocks()\n\t\t\t\t\t\t.map( buildReusableBlockInserterItem )\n\t\t\t\t: [];\n\n\t\t\tconst buildBlockTypeInserterItem = buildBlockTypeItem( state, {\n\t\t\t\tbuildScope: 'inserter',\n\t\t\t} );\n\n\t\t\tlet blockTypeInserterItems = getBlockTypes()\n\t\t\t\t.filter( ( blockType ) =>\n\t\t\t\t\thasBlockSupport( blockType, 'inserter', true )\n\t\t\t\t)\n\t\t\t\t.map( buildBlockTypeInserterItem );\n\n\t\t\tif ( options[ withRootClientIdOptionKey ] ) {\n\t\t\t\tblockTypeInserterItems = blockTypeInserterItems.reduce(\n\t\t\t\t\t( accumulator, item ) => {\n\t\t\t\t\t\titem.rootClientId = rootClientId ?? '';\n\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t! canInsertBlockTypeUnmemoized(\n\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\titem.name,\n\t\t\t\t\t\t\t\titem.rootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif ( ! item.rootClientId ) {\n\t\t\t\t\t\t\t\tlet sectionRootClientId;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tsectionRootClientId =\n\t\t\t\t\t\t\t\t\t\tgetSectionRootClientId( state );\n\t\t\t\t\t\t\t\t} catch ( e ) {}\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tsectionRootClientId &&\n\t\t\t\t\t\t\t\t\tcanInsertBlockTypeUnmemoized(\n\t\t\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\t\t\titem.name,\n\t\t\t\t\t\t\t\t\t\tsectionRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\titem.rootClientId = sectionRootClientId;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete item.rootClientId;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst parentClientId = getBlockRootClientId(\n\t\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\t\titem.rootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\titem.rootClientId = parentClientId;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// We could also add non insertable items and gray them out.\n\t\t\t\t\t\tif ( item.hasOwnProperty( 'rootClientId' ) ) {\n\t\t\t\t\t\t\taccumulator.push( item );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t},\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tblockTypeInserterItems = blockTypeInserterItems.filter(\n\t\t\t\t\t( blockType ) =>\n\t\t\t\t\t\tcanIncludeBlockTypeInInserter(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tblockType,\n\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst items = blockTypeInserterItems.reduce(\n\t\t\t\t( accumulator, item ) => {\n\t\t\t\t\tconst { variations = [] } = item;\n\t\t\t\t\t// Exclude any block type item that is to be replaced by a default variation.\n\t\t\t\t\tif ( ! variations.some( ( { isDefault } ) => isDefault ) ) {\n\t\t\t\t\t\taccumulator.push( item );\n\t\t\t\t\t}\n\t\t\t\t\tif ( variations.length ) {\n\t\t\t\t\t\tconst variationMapper = getItemFromVariation(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\titem\n\t\t\t\t\t\t);\n\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\t...variations.map( variationMapper )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t[]\n\t\t\t);\n\n\t\t\t// Ensure core blocks are prioritized in the returned results,\n\t\t\t// because third party blocks can be registered earlier than\n\t\t\t// the core blocks (usually by using the `init` action),\n\t\t\t// thus affecting the display order.\n\t\t\t// We don't sort reusable blocks as they are handled differently.\n\t\t\tconst groupByType = ( blocks, block ) => {\n\t\t\t\tconst { core, noncore } = blocks;\n\t\t\t\tconst type = block.name.startsWith( 'core/' ) ? core : noncore;\n\n\t\t\t\ttype.push( block );\n\t\t\t\treturn blocks;\n\t\t\t};\n\t\t\tconst { core: coreItems, noncore: nonCoreItems } = items.reduce(\n\t\t\t\tgroupByType,\n\t\t\t\t{ core: [], noncore: [] }\n\t\t\t);\n\t\t\tconst sortedBlockTypes = [ ...coreItems, ...nonCoreItems ];\n\t\t\treturn [ ...sortedBlockTypes, ...syncedPatternInserterItems ];\n\t\t},\n\t\t( state, rootClientId ) => [\n\t\t\tgetBlockTypes(),\n\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t\t\tstate.blocks.order,\n\t\t\tstate.preferences.insertUsage,\n\t\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t\t]\n\t)\n);\n\n/**\n * Determines the items that appear in the available block transforms list.\n *\n * Each item object contains what's necessary to display a menu item in the\n * transform list and handle its selection.\n *\n * The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)\n * that combines block usage frequenty and recency.\n *\n * Items are returned ordered descendingly by their 'frecency'.\n *\n * @param {Object} state Editor state.\n * @param {Object|Object[]} blocks Block object or array objects.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPEditorTransformItem[]} Items that appear in inserter.\n *\n * @typedef {Object} WPEditorTransformItem\n * @property {string} id Unique identifier for the item.\n * @property {string} name The type of block to create.\n * @property {string} title Title of the item, as it appears in the inserter.\n * @property {string} icon Dashicon for the item, as it appears in the inserter.\n * @property {boolean} isDisabled Whether or not the user should be prevented from inserting\n * this item.\n * @property {number} frecency Heuristic that combines frequency and recency.\n */\nexport const getBlockTransformItems = createSelector(\n\t( state, blocks, rootClientId = null ) => {\n\t\tconst normalizedBlocks = Array.isArray( blocks ) ? blocks : [ blocks ];\n\t\tconst buildBlockTypeTransformItem = buildBlockTypeItem( state, {\n\t\t\tbuildScope: 'transform',\n\t\t} );\n\t\tconst blockTypeTransformItems = getBlockTypes()\n\t\t\t.filter( ( blockType ) =>\n\t\t\t\tcanIncludeBlockTypeInInserter( state, blockType, rootClientId )\n\t\t\t)\n\t\t\t.map( buildBlockTypeTransformItem );\n\n\t\tconst itemsByName = Object.fromEntries(\n\t\t\tObject.entries( blockTypeTransformItems ).map( ( [ , value ] ) => [\n\t\t\t\tvalue.name,\n\t\t\t\tvalue,\n\t\t\t] )\n\t\t);\n\n\t\tconst possibleTransforms = getPossibleBlockTransformations(\n\t\t\tnormalizedBlocks\n\t\t).reduce( ( accumulator, block ) => {\n\t\t\tif ( itemsByName[ block?.name ] ) {\n\t\t\t\taccumulator.push( itemsByName[ block.name ] );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\treturn orderBy(\n\t\t\tpossibleTransforms,\n\t\t\t( block ) => itemsByName[ block.name ].frecency,\n\t\t\t'desc'\n\t\t);\n\t},\n\t( state, blocks, rootClientId ) => [\n\t\tgetBlockTypes(),\n\t\tstate.preferences.insertUsage,\n\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t]\n);\n\n/**\n * Determines whether there are items to show in the inserter.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {boolean} Items that appear in inserter.\n */\nexport const hasInserterItems = createRegistrySelector(\n\t( select ) =>\n\t\t( state, rootClientId = null ) => {\n\t\t\tconst hasBlockType = getBlockTypes().some( ( blockType ) =>\n\t\t\t\tcanIncludeBlockTypeInInserter( state, blockType, rootClientId )\n\t\t\t);\n\t\t\tif ( hasBlockType ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst hasReusableBlock =\n\t\t\t\tcanInsertBlockTypeUnmemoized(\n\t\t\t\t\tstate,\n\t\t\t\t\t'core/block',\n\t\t\t\t\trootClientId\n\t\t\t\t) &&\n\t\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks().length > 0;\n\n\t\t\treturn hasReusableBlock;\n\t\t}\n);\n\n/**\n * Returns the list of allowed inserter blocks for inner blocks children.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Array?} The list of allowed block types.\n */\nexport const getAllowedBlocks = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, rootClientId = null ) => {\n\t\t\tif ( ! rootClientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst blockTypes = getBlockTypes().filter( ( blockType ) =>\n\t\t\t\tcanIncludeBlockTypeInInserter( state, blockType, rootClientId )\n\t\t\t);\n\n\t\t\tconst hasReusableBlock =\n\t\t\t\tcanInsertBlockTypeUnmemoized(\n\t\t\t\t\tstate,\n\t\t\t\t\t'core/block',\n\t\t\t\t\trootClientId\n\t\t\t\t) &&\n\t\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks().length > 0;\n\n\t\t\tif ( hasReusableBlock ) {\n\t\t\t\tblockTypes.push( 'core/block' );\n\t\t\t}\n\n\t\t\treturn blockTypes;\n\t\t},\n\t\t( state, rootClientId ) => [\n\t\t\tgetBlockTypes(),\n\t\t\tunlock( select( STORE_NAME ) ).getReusableBlocks(),\n\t\t\t...getInsertBlockTypeDependants( state, rootClientId ),\n\t\t]\n\t)\n);\n\nexport const __experimentalGetAllowedBlocks = createSelector(\n\t( state, rootClientId = null ) => {\n\t\tdeprecated(\n\t\t\t'wp.data.select( \"core/block-editor\" ).__experimentalGetAllowedBlocks',\n\t\t\t{\n\t\t\t\talternative:\n\t\t\t\t\t'wp.data.select( \"core/block-editor\" ).getAllowedBlocks',\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t}\n\t\t);\n\t\treturn getAllowedBlocks( state, rootClientId );\n\t},\n\t( state, rootClientId ) =>\n\t\tgetAllowedBlocks.getDependants( state, rootClientId )\n);\n\n/**\n * Returns the block to be directly inserted by the block appender.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPDirectInsertBlock|undefined} The block type to be directly inserted.\n *\n * @typedef {Object} WPDirectInsertBlock\n * @property {string} name The type of block.\n * @property {?Object} attributes Attributes to pass to the newly created block.\n * @property {?Array} attributesToCopy Attributes to be copied from adjecent blocks when inserted.\n */\nexport function getDirectInsertBlock( state, rootClientId = null ) {\n\tif ( ! rootClientId ) {\n\t\treturn;\n\t}\n\tconst { defaultBlock, directInsert } =\n\t\tstate.blockListSettings[ rootClientId ] ?? {};\n\tif ( ! defaultBlock || ! directInsert ) {\n\t\treturn;\n\t}\n\n\treturn defaultBlock;\n}\n\nexport function __experimentalGetDirectInsertBlock(\n\tstate,\n\trootClientId = null\n) {\n\tdeprecated(\n\t\t'wp.data.select( \"core/block-editor\" ).__experimentalGetDirectInsertBlock',\n\t\t{\n\t\t\talternative:\n\t\t\t\t'wp.data.select( \"core/block-editor\" ).getDirectInsertBlock',\n\t\t\tsince: '6.3',\n\t\t\tversion: '6.4',\n\t\t}\n\t);\n\treturn getDirectInsertBlock( state, rootClientId );\n}\n\nexport const __experimentalGetParsedPattern = createRegistrySelector(\n\t( select ) => ( state, patternName ) => {\n\t\tconst pattern = unlock( select( STORE_NAME ) ).getPatternBySlug(\n\t\t\tpatternName\n\t\t);\n\t\treturn pattern ? getParsedPattern( pattern ) : null;\n\t}\n);\n\nconst getAllowedPatternsDependants = ( select ) => ( state, rootClientId ) => [\n\t...getAllPatternsDependants( select )( state ),\n\t...getInsertBlockTypeDependants( state, rootClientId ),\n];\n\n/**\n * Returns the list of allowed patterns for inner blocks children.\n *\n * @param {Object} state Editor state.\n * @param {?string} rootClientId Optional target root client ID.\n *\n * @return {Array?} The list of allowed patterns.\n */\nexport const __experimentalGetAllowedPatterns = createRegistrySelector(\n\t( select ) => {\n\t\treturn createSelector( ( state, rootClientId = null ) => {\n\t\t\tconst { getAllPatterns } = unlock( select( STORE_NAME ) );\n\t\t\tconst patterns = getAllPatterns();\n\t\t\tconst { allowedBlockTypes } = getSettings( state );\n\t\t\tconst parsedPatterns = patterns\n\t\t\t\t.filter( ( { inserter = true } ) => !! inserter )\n\t\t\t\t.map( ( pattern ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...pattern,\n\t\t\t\t\t\tget blocks() {\n\t\t\t\t\t\t\treturn getParsedPattern( pattern ).blocks;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\tconst availableParsedPatterns = parsedPatterns.filter(\n\t\t\t\t( pattern ) =>\n\t\t\t\t\tcheckAllowListRecursive(\n\t\t\t\t\t\tgetGrammar( pattern ),\n\t\t\t\t\t\tallowedBlockTypes\n\t\t\t\t\t)\n\t\t\t);\n\t\t\tconst patternsAllowed = availableParsedPatterns.filter(\n\t\t\t\t( pattern ) =>\n\t\t\t\t\tgetGrammar( pattern ).every( ( { blockName: name } ) =>\n\t\t\t\t\t\tcanInsertBlockType( state, name, rootClientId )\n\t\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn patternsAllowed;\n\t\t}, getAllowedPatternsDependants( select ) );\n\t}\n);\n\n/**\n * Returns the list of patterns based on their declared `blockTypes`\n * and a block's name.\n * Patterns can use `blockTypes` to integrate in work flows like\n * suggesting appropriate patterns in a Placeholder state(during insertion)\n * or blocks transformations.\n *\n * @param {Object} state Editor state.\n * @param {string|string[]} blockNames Block's name or array of block names to find matching pattens.\n * @param {?string} rootClientId Optional target root client ID.\n *\n * @return {Array} The list of matched block patterns based on declared `blockTypes` and block name.\n */\nexport const getPatternsByBlockTypes = createRegistrySelector( ( select ) =>\n\tcreateSelector(\n\t\t( state, blockNames, rootClientId = null ) => {\n\t\t\tif ( ! blockNames ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\tconst patterns =\n\t\t\t\tselect( STORE_NAME ).__experimentalGetAllowedPatterns(\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\tconst normalizedBlockNames = Array.isArray( blockNames )\n\t\t\t\t? blockNames\n\t\t\t\t: [ blockNames ];\n\t\t\tconst filteredPatterns = patterns.filter( ( pattern ) =>\n\t\t\t\tpattern?.blockTypes?.some?.( ( blockName ) =>\n\t\t\t\t\tnormalizedBlockNames.includes( blockName )\n\t\t\t\t)\n\t\t\t);\n\t\t\tif ( filteredPatterns.length === 0 ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\treturn filteredPatterns;\n\t\t},\n\t\t( state, blockNames, rootClientId ) =>\n\t\t\tgetAllowedPatternsDependants( select )( state, rootClientId )\n\t)\n);\n\nexport const __experimentalGetPatternsByBlockTypes = createRegistrySelector(\n\t( select ) => {\n\t\tdeprecated(\n\t\t\t'wp.data.select( \"core/block-editor\" ).__experimentalGetPatternsByBlockTypes',\n\t\t\t{\n\t\t\t\talternative:\n\t\t\t\t\t'wp.data.select( \"core/block-editor\" ).getPatternsByBlockTypes',\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t}\n\t\t);\n\t\treturn select( STORE_NAME ).getPatternsByBlockTypes;\n\t}\n);\n\n/**\n * Determines the items that appear in the available pattern transforms list.\n *\n * For now we only handle blocks without InnerBlocks and take into account\n * the `__experimentalRole` property of blocks' attributes for the transformation.\n *\n * We return the first set of possible eligible block patterns,\n * by checking the `blockTypes` property. We still have to recurse through\n * block pattern's blocks and try to find matches from the selected blocks.\n * Now this happens in the consumer to avoid heavy operations in the selector.\n *\n * @param {Object} state Editor state.\n * @param {Object[]} blocks The selected blocks.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {WPBlockPattern[]} Items that are eligible for a pattern transformation.\n */\nexport const __experimentalGetPatternTransformItems = createRegistrySelector(\n\t( select ) =>\n\t\tcreateSelector(\n\t\t\t( state, blocks, rootClientId = null ) => {\n\t\t\t\tif ( ! blocks ) {\n\t\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * For now we only handle blocks without InnerBlocks and take into account\n\t\t\t\t * the `__experimentalRole` property of blocks' attributes for the transformation.\n\t\t\t\t * Note that the blocks have been retrieved through `getBlock`, which doesn't\n\t\t\t\t * return the inner blocks of an inner block controller, so we still need\n\t\t\t\t * to check for this case too.\n\t\t\t\t */\n\t\t\t\tif (\n\t\t\t\t\tblocks.some(\n\t\t\t\t\t\t( { clientId, innerBlocks } ) =>\n\t\t\t\t\t\t\tinnerBlocks.length ||\n\t\t\t\t\t\t\tareInnerBlocksControlled( state, clientId )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t\t}\n\n\t\t\t\t// Create a Set of the selected block names that is used in patterns filtering.\n\t\t\t\tconst selectedBlockNames = Array.from(\n\t\t\t\t\tnew Set( blocks.map( ( { name } ) => name ) )\n\t\t\t\t);\n\t\t\t\t/**\n\t\t\t\t * Here we will return first set of possible eligible block patterns,\n\t\t\t\t * by checking the `blockTypes` property. We still have to recurse through\n\t\t\t\t * block pattern's blocks and try to find matches from the selected blocks.\n\t\t\t\t * Now this happens in the consumer to avoid heavy operations in the selector.\n\t\t\t\t */\n\t\t\t\treturn select( STORE_NAME ).getPatternsByBlockTypes(\n\t\t\t\t\tselectedBlockNames,\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\t},\n\t\t\t( state, blocks, rootClientId ) =>\n\t\t\t\tgetAllowedPatternsDependants( select )( state, rootClientId )\n\t\t)\n);\n\n/**\n * Returns the Block List settings of a block, if any exist.\n *\n * @param {Object} state Editor state.\n * @param {?string} clientId Block client ID.\n *\n * @return {?Object} Block settings of the block if set.\n */\nexport function getBlockListSettings( state, clientId ) {\n\treturn state.blockListSettings[ clientId ];\n}\n\n/**\n * Returns the editor settings.\n *\n * @param {Object} state Editor state.\n *\n * @return {Object} The editor settings object.\n */\nexport function getSettings( state ) {\n\treturn state.settings;\n}\n\n/**\n * Returns true if the most recent block change is be considered persistent, or\n * false otherwise. A persistent change is one committed by BlockEditorProvider\n * via its `onChange` callback, in addition to `onInput`.\n *\n * @param {Object} state Block editor state.\n *\n * @return {boolean} Whether the most recent block change was persistent.\n */\nexport function isLastBlockChangePersistent( state ) {\n\treturn state.blocks.isPersistentChange;\n}\n\n/**\n * Returns the block list settings for an array of blocks, if any exist.\n *\n * @param {Object} state Editor state.\n * @param {Array} clientIds Block client IDs.\n *\n * @return {Object} An object where the keys are client ids and the values are\n * a block list setting object.\n */\nexport const __experimentalGetBlockListSettingsForBlocks = createSelector(\n\t( state, clientIds = [] ) => {\n\t\treturn clientIds.reduce( ( blockListSettingsForBlocks, clientId ) => {\n\t\t\tif ( ! state.blockListSettings[ clientId ] ) {\n\t\t\t\treturn blockListSettingsForBlocks;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...blockListSettingsForBlocks,\n\t\t\t\t[ clientId ]: state.blockListSettings[ clientId ],\n\t\t\t};\n\t\t}, {} );\n\t},\n\t( state ) => [ state.blockListSettings ]\n);\n\n/**\n * Returns the title of a given reusable block\n *\n * @param {Object} state Global application state.\n * @param {number|string} ref The shared block's ID.\n *\n * @return {string} The reusable block saved title.\n */\nexport const __experimentalGetReusableBlockTitle = createRegistrySelector(\n\t( select ) =>\n\t\tcreateSelector(\n\t\t\t( state, ref ) => {\n\t\t\t\tdeprecated(\n\t\t\t\t\t\"wp.data.select( 'core/block-editor' ).__experimentalGetReusableBlockTitle\",\n\t\t\t\t\t{\n\t\t\t\t\t\tsince: '6.6',\n\t\t\t\t\t\tversion: '6.8',\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst reusableBlock = unlock( select( STORE_NAME ) )\n\t\t\t\t\t.getReusableBlocks()\n\t\t\t\t\t.find( ( block ) => block.id === ref );\n\t\t\t\tif ( ! reusableBlock ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn reusableBlock.title?.raw;\n\t\t\t},\n\t\t\t() => [ unlock( select( STORE_NAME ) ).getReusableBlocks() ]\n\t\t)\n);\n\n/**\n * Returns true if the most recent block change is be considered ignored, or\n * false otherwise. An ignored change is one not to be committed by\n * BlockEditorProvider, neither via `onChange` nor `onInput`.\n *\n * @param {Object} state Block editor state.\n *\n * @return {boolean} Whether the most recent block change was ignored.\n */\nexport function __unstableIsLastBlockChangeIgnored( state ) {\n\t// TODO: Removal Plan: Changes incurred by RECEIVE_BLOCKS should not be\n\t// ignored if in-fact they result in a change in blocks state. The current\n\t// need to ignore changes not a result of user interaction should be\n\t// accounted for in the refactoring of reusable blocks as occurring within\n\t// their own separate block editor / state (#7119).\n\treturn state.blocks.isIgnoredChange;\n}\n\n/**\n * Returns the block attributes changed as a result of the last dispatched\n * action.\n *\n * @param {Object} state Block editor state.\n *\n * @return {Object} Subsets of block attributes changed, keyed\n * by block client ID.\n */\nexport function __experimentalGetLastBlockAttributeChanges( state ) {\n\treturn state.lastBlockAttributesChange;\n}\n\n/**\n * Returns whether the navigation mode is enabled.\n *\n * @param {Object} state Editor state.\n *\n * @return {boolean} Is navigation mode enabled.\n */\nexport function isNavigationMode( state ) {\n\treturn state.editorMode === 'navigation';\n}\n\n/**\n * Returns the current editor mode.\n *\n * @param {Object} state Editor state.\n *\n * @return {string} the editor mode.\n */\nexport function __unstableGetEditorMode( state ) {\n\treturn state.editorMode;\n}\n\n/**\n * Returns whether block moving mode is enabled.\n *\n * @param {Object} state Editor state.\n *\n * @return {string} Client Id of moving block.\n */\nexport function hasBlockMovingClientId( state ) {\n\treturn state.hasBlockMovingClientId;\n}\n\n/**\n * Returns true if the last change was an automatic change, false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the last change was automatic.\n */\nexport function didAutomaticChange( state ) {\n\treturn !! state.automaticChangeStatus;\n}\n\n/**\n * Returns true if the current highlighted block matches the block clientId.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block to check.\n *\n * @return {boolean} Whether the block is currently highlighted.\n */\nexport function isBlockHighlighted( state, clientId ) {\n\treturn state.highlightedBlock === clientId;\n}\n\n/**\n * Checks if a given block has controlled inner blocks.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block to check.\n *\n * @return {boolean} True if the block has controlled inner blocks.\n */\nexport function areInnerBlocksControlled( state, clientId ) {\n\treturn !! state.blocks.controlledInnerBlocks[ clientId ];\n}\n\n/**\n * Returns the clientId for the first 'active' block of a given array of block names.\n * A block is 'active' if it (or a child) is the selected block.\n * Returns the first match moving up the DOM from the selected block.\n *\n * @param {Object} state Global application state.\n * @param {string[]} validBlocksNames The names of block types to check for.\n *\n * @return {string} The matching block's clientId.\n */\nexport const __experimentalGetActiveBlockIdByBlockNames = createSelector(\n\t( state, validBlockNames ) => {\n\t\tif ( ! validBlockNames.length ) {\n\t\t\treturn null;\n\t\t}\n\t\t// Check if selected block is a valid entity area.\n\t\tconst selectedBlockClientId = getSelectedBlockClientId( state );\n\t\tif (\n\t\t\tvalidBlockNames.includes(\n\t\t\t\tgetBlockName( state, selectedBlockClientId )\n\t\t\t)\n\t\t) {\n\t\t\treturn selectedBlockClientId;\n\t\t}\n\t\t// Check if first selected block is a child of a valid entity area.\n\t\tconst multiSelectedBlockClientIds =\n\t\t\tgetMultiSelectedBlockClientIds( state );\n\t\tconst entityAreaParents = getBlockParentsByBlockName(\n\t\t\tstate,\n\t\t\tselectedBlockClientId || multiSelectedBlockClientIds[ 0 ],\n\t\t\tvalidBlockNames\n\t\t);\n\t\tif ( entityAreaParents ) {\n\t\t\t// Last parent closest/most interior.\n\t\t\treturn entityAreaParents[ entityAreaParents.length - 1 ];\n\t\t}\n\t\treturn null;\n\t},\n\t( state, validBlockNames ) => [\n\t\tstate.selection.selectionStart.clientId,\n\t\tstate.selection.selectionEnd.clientId,\n\t\tvalidBlockNames,\n\t]\n);\n\n/**\n * Tells if the block with the passed clientId was just inserted.\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n * @param {?string} source Optional insertion source of the block.\n * @return {boolean} True if the block matches the last block inserted from the specified source.\n */\nexport function wasBlockJustInserted( state, clientId, source ) {\n\tconst { lastBlockInserted } = state;\n\treturn (\n\t\tlastBlockInserted.clientIds?.includes( clientId ) &&\n\t\tlastBlockInserted.source === source\n\t);\n}\n\n/**\n * Tells if the block is visible on the canvas or not.\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n * @return {boolean} True if the block is visible.\n */\nexport function isBlockVisible( state, clientId ) {\n\treturn state.blockVisibility?.[ clientId ] ?? true;\n}\n\n/**\n * Returns the currently hovered block.\n *\n * @param {Object} state Global application state.\n * @return {Object} Client Id of the hovered block.\n */\nexport function getHoveredBlockClientId( state ) {\n\treturn state.hoveredBlockClientId;\n}\n\n/**\n * Returns the list of all hidden blocks.\n *\n * @param {Object} state Global application state.\n * @return {[string]} List of hidden blocks.\n */\nexport const __unstableGetVisibleBlocks = createSelector(\n\t( state ) => {\n\t\tconst visibleBlocks = new Set(\n\t\t\tObject.keys( state.blockVisibility ).filter(\n\t\t\t\t( key ) => state.blockVisibility[ key ]\n\t\t\t)\n\t\t);\n\t\tif ( visibleBlocks.size === 0 ) {\n\t\t\treturn EMPTY_SET;\n\t\t}\n\t\treturn visibleBlocks;\n\t},\n\t( state ) => [ state.blockVisibility ]\n);\n\nexport function __unstableHasActiveBlockOverlayActive( state, clientId ) {\n\t// Prevent overlay on blocks with a non-default editing mode. If the mdoe is\n\t// 'disabled' then the overlay is redundant since the block can't be\n\t// selected. If the mode is 'contentOnly' then the overlay is redundant\n\t// since there will be no controls to interact with once selected.\n\tif ( getBlockEditingMode( state, clientId ) !== 'default' ) {\n\t\treturn false;\n\t}\n\n\t// If the block editing is locked, the block overlay is always active.\n\tif ( ! canEditBlock( state, clientId ) ) {\n\t\treturn true;\n\t}\n\n\tconst editorMode = __unstableGetEditorMode( state );\n\n\t// In zoom-out mode, the block overlay is always active for section level blocks.\n\tif ( editorMode === 'zoom-out' ) {\n\t\tconst sectionRootClientId = getSectionRootClientId( state );\n\t\tif ( sectionRootClientId ) {\n\t\t\tconst sectionClientIds = getBlockOrder(\n\t\t\t\tstate,\n\t\t\t\tsectionRootClientId\n\t\t\t);\n\t\t\tif ( sectionClientIds?.includes( clientId ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if ( clientId && ! getBlockRootClientId( state, clientId ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// In navigation mode, the block overlay is active when the block is not\n\t// selected (and doesn't contain a selected child). The same behavior is\n\t// also enabled in all modes for blocks that have controlled children\n\t// (reusable block, template part, navigation), unless explicitly disabled\n\t// with `supports.__experimentalDisableBlockOverlay`.\n\tconst blockSupportDisable = hasBlockSupport(\n\t\tgetBlockName( state, clientId ),\n\t\t'__experimentalDisableBlockOverlay',\n\t\tfalse\n\t);\n\tconst shouldEnableIfUnselected =\n\t\teditorMode === 'navigation' ||\n\t\t( blockSupportDisable\n\t\t\t? false\n\t\t\t: areInnerBlocksControlled( state, clientId ) );\n\n\treturn (\n\t\tshouldEnableIfUnselected &&\n\t\t! isBlockSelected( state, clientId ) &&\n\t\t! hasSelectedInnerBlock( state, clientId, true )\n\t);\n}\n\nexport function __unstableIsWithinBlockOverlay( state, clientId ) {\n\tlet parent = state.blocks.parents.get( clientId );\n\twhile ( !! parent ) {\n\t\tif ( __unstableHasActiveBlockOverlayActive( state, parent ) ) {\n\t\t\treturn true;\n\t\t}\n\t\tparent = state.blocks.parents.get( parent );\n\t}\n\treturn false;\n}\n\n/**\n * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode\n */\n\n/**\n * Returns the block editing mode for a given block.\n *\n * The mode can be one of three options:\n *\n * - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be\n * selected.\n * - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the\n * toolbar, the block movers, block settings.\n * - `'default'`: Allows editing the block as normal.\n *\n * Blocks can set a mode using the `useBlockEditingMode` hook.\n *\n * The mode is inherited by all of the block's inner blocks, unless they have\n * their own mode.\n *\n * A template lock can also set a mode. If the template lock is `'contentOnly'`,\n * the block's mode is overridden to `'contentOnly'` if the block has a content\n * role attribute, or `'disabled'` otherwise.\n *\n * @see useBlockEditingMode\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID, or `''` for the root container.\n *\n * @return {BlockEditingMode} The block editing mode. One of `'disabled'`,\n * `'contentOnly'`, or `'default'`.\n */\nexport const getBlockEditingMode = createRegistrySelector(\n\t( select ) =>\n\t\t( state, clientId = '' ) => {\n\t\t\t// Some selectors that call this provide `null` as the default\n\t\t\t// rootClientId, but the default rootClientId is actually `''`.\n\t\t\tif ( clientId === null ) {\n\t\t\t\tclientId = '';\n\t\t\t}\n\n\t\t\t// In zoom-out mode, override the behavior set by\n\t\t\t// __unstableSetBlockEditingMode to only allow editing the top-level\n\t\t\t// sections.\n\t\t\tconst editorMode = __unstableGetEditorMode( state );\n\t\t\tif ( editorMode === 'zoom-out' ) {\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId( state );\n\n\t\t\t\tif ( clientId === '' /* ROOT_CONTAINER_CLIENT_ID */ ) {\n\t\t\t\t\treturn sectionRootClientId ? 'disabled' : 'contentOnly';\n\t\t\t\t}\n\t\t\t\tif ( clientId === sectionRootClientId ) {\n\t\t\t\t\treturn 'contentOnly';\n\t\t\t\t}\n\t\t\t\tconst sectionsClientIds = getBlockOrder(\n\t\t\t\t\tstate,\n\t\t\t\t\tsectionRootClientId\n\t\t\t\t);\n\n\t\t\t\t// Sections are always contentOnly.\n\t\t\t\tif ( sectionsClientIds?.includes( clientId ) ) {\n\t\t\t\t\treturn 'contentOnly';\n\t\t\t\t}\n\n\t\t\t\treturn 'disabled';\n\t\t\t}\n\n\t\t\tconst blockEditingMode = state.blockEditingModes.get( clientId );\n\t\t\tif ( blockEditingMode ) {\n\t\t\t\treturn blockEditingMode;\n\t\t\t}\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn 'default';\n\t\t\t}\n\t\t\tconst rootClientId = getBlockRootClientId( state, clientId );\n\t\t\tconst templateLock = getTemplateLock( state, rootClientId );\n\t\t\tif ( templateLock === 'contentOnly' ) {\n\t\t\t\tconst name = getBlockName( state, clientId );\n\t\t\t\tconst isContent =\n\t\t\t\t\tselect( blocksStore ).__experimentalHasContentRoleAttribute(\n\t\t\t\t\t\tname\n\t\t\t\t\t);\n\t\t\t\treturn isContent ? 'contentOnly' : 'disabled';\n\t\t\t}\n\t\t\tconst parentMode = getBlockEditingMode( state, rootClientId );\n\t\t\treturn parentMode === 'contentOnly' ? 'default' : parentMode;\n\t\t}\n);\n\n/**\n * Indicates if a block is ungroupable.\n * A block is ungroupable if it is a single grouping block with inner blocks.\n * If a block has an `ungroup` transform, it is also ungroupable, without the\n * requirement of being the default grouping block.\n * Additionally a block can only be ungrouped if it has inner blocks and can\n * be removed.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId Client Id of the block. If not passed the selected block's client id will be used.\n * @return {boolean} True if the block is ungroupable.\n */\nexport const isUngroupable = createRegistrySelector(\n\t( select ) =>\n\t\t( state, clientId = '' ) => {\n\t\t\tconst _clientId = clientId || getSelectedBlockClientId( state );\n\t\t\tif ( ! _clientId ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst { getGroupingBlockName } = select( blocksStore );\n\t\t\tconst block = getBlock( state, _clientId );\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\tconst _isUngroupable =\n\t\t\t\tblock &&\n\t\t\t\t( block.name === groupingBlockName ||\n\t\t\t\t\tgetBlockType( block.name )?.transforms?.ungroup ) &&\n\t\t\t\t!! block.innerBlocks.length;\n\n\t\t\treturn _isUngroupable && canRemoveBlock( state, _clientId );\n\t\t}\n);\n\n/**\n * Indicates if the provided blocks(by client ids) are groupable.\n * We need to have at least one block, have a grouping block name set and\n * be able to remove these blocks.\n *\n * @param {Object} state Global application state.\n * @param {string[]} clientIds Block client ids. If not passed the selected blocks client ids will be used.\n * @return {boolean} True if the blocks are groupable.\n */\nexport const isGroupable = createRegistrySelector(\n\t( select ) =>\n\t\t( state, clientIds = EMPTY_ARRAY ) => {\n\t\t\tconst { getGroupingBlockName } = select( blocksStore );\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\tconst _clientIds = clientIds?.length\n\t\t\t\t? clientIds\n\t\t\t\t: getSelectedBlockClientIds( state );\n\t\t\tconst rootClientId = _clientIds?.length\n\t\t\t\t? getBlockRootClientId( state, _clientIds[ 0 ] )\n\t\t\t\t: undefined;\n\t\t\tconst groupingBlockAvailable = canInsertBlockType(\n\t\t\t\tstate,\n\t\t\t\tgroupingBlockName,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tconst _isGroupable = groupingBlockAvailable && _clientIds.length;\n\t\t\treturn _isGroupable && canRemoveBlocks( state, _clientIds );\n\t\t}\n);\n\n/**\n * DO-NOT-USE in production.\n * This selector is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n * @param {Object} clientId Client Id of the block.\n *\n * @return {?string} Client ID of the ancestor block that is content locking the block.\n */\nexport const __unstableGetContentLockingParent = ( state, clientId ) => {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetContentLockingParent\",\n\t\t{\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.7',\n\t\t}\n\t);\n\treturn getContentLockingParent( state, clientId );\n};\n\n/**\n * DO-NOT-USE in production.\n * This selector is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n */\nexport function __unstableGetTemporarilyEditingAsBlocks( state ) {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetTemporarilyEditingAsBlocks\",\n\t\t{\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.7',\n\t\t}\n\t);\n\treturn getTemporarilyEditingAsBlocks( state );\n}\n\n/**\n * DO-NOT-USE in production.\n * This selector is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @deprecated\n *\n * @param {Object} state Global application state.\n */\nexport function __unstableGetTemporarilyEditingFocusModeToRevert( state ) {\n\tdeprecated(\n\t\t\"wp.data.select( 'core/block-editor' ).__unstableGetTemporarilyEditingFocusModeToRevert\",\n\t\t{\n\t\t\tsince: '6.5',\n\t\t\tversion: '6.7',\n\t\t}\n\t);\n\treturn getTemporarilyEditingFocusModeToRevert( state );\n}\n","/**\n * WordPress dependencies\n */\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from './index';\nimport { unlock } from '../lock-unlock';\n\nconst castArray = ( maybeArray ) =>\n\tArray.isArray( maybeArray ) ? maybeArray : [ maybeArray ];\n\n/**\n * A list of private/experimental block editor settings that\n * should not become a part of the WordPress public API.\n * BlockEditorProvider will remove these settings from the\n * settings object it receives.\n *\n * @see https://github.com/WordPress/gutenberg/pull/46131\n */\nconst privateSettings = [\n\t'inserterMediaCategories',\n\t'blockInspectorAnimation',\n];\n\n/**\n * Action that updates the block editor settings and\n * conditionally preserves the experimental ones.\n *\n * @param {Object} settings Updated settings\n * @param {Object} options Options object.\n * @param {boolean} options.stripExperimentalSettings Whether to strip experimental settings.\n * @param {boolean} options.reset Whether to reset the settings.\n * @return {Object} Action object\n */\nexport function __experimentalUpdateSettings(\n\tsettings,\n\t{ stripExperimentalSettings = false, reset = false } = {}\n) {\n\tlet cleanSettings = settings;\n\t// There are no plugins in the mobile apps, so there is no\n\t// need to strip the experimental settings:\n\tif ( stripExperimentalSettings && Platform.OS === 'web' ) {\n\t\tcleanSettings = {};\n\t\tfor ( const key in settings ) {\n\t\t\tif ( ! privateSettings.includes( key ) ) {\n\t\t\t\tcleanSettings[ key ] = settings[ key ];\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\ttype: 'UPDATE_SETTINGS',\n\t\tsettings: cleanSettings,\n\t\treset,\n\t};\n}\n\n/**\n * Hides the block interface (eg. toolbar, outline, etc.)\n *\n * @return {Object} Action object.\n */\nexport function hideBlockInterface() {\n\treturn {\n\t\ttype: 'HIDE_BLOCK_INTERFACE',\n\t};\n}\n\n/**\n * Shows the block interface (eg. toolbar, outline, etc.)\n *\n * @return {Object} Action object.\n */\nexport function showBlockInterface() {\n\treturn {\n\t\ttype: 'SHOW_BLOCK_INTERFACE',\n\t};\n}\n\n/**\n * Yields action objects used in signalling that the blocks corresponding to\n * the set of specified client IDs are to be removed.\n *\n * Compared to `removeBlocks`, this private interface exposes an additional\n * parameter; see `forceRemove`.\n *\n * @param {string|string[]} clientIds Client IDs of blocks to remove.\n * @param {boolean} selectPrevious True if the previous block\n * or the immediate parent\n * (if no previous block exists)\n * should be selected\n * when a block is removed.\n * @param {boolean} forceRemove Whether to force the operation,\n * bypassing any checks for certain\n * block types.\n */\nexport const privateRemoveBlocks =\n\t( clientIds, selectPrevious = true, forceRemove = false ) =>\n\t( { select, dispatch, registry } ) => {\n\t\tif ( ! clientIds || ! clientIds.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclientIds = castArray( clientIds );\n\t\tconst canRemoveBlocks = select.canRemoveBlocks( clientIds );\n\n\t\tif ( ! canRemoveBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// In certain editing contexts, we'd like to prevent accidental removal\n\t\t// of important blocks. For example, in the site editor, the Query Loop\n\t\t// block is deemed important. In such cases, we'll ask the user for\n\t\t// confirmation that they intended to remove such block(s). However,\n\t\t// the editor instance is responsible for presenting those confirmation\n\t\t// prompts to the user. Any instance opting into removal prompts must\n\t\t// register using `setBlockRemovalRules()`.\n\t\t//\n\t\t// @see https://github.com/WordPress/gutenberg/pull/51145\n\t\tconst rules = ! forceRemove && select.getBlockRemovalRules();\n\n\t\tif ( rules ) {\n\t\t\tfunction flattenBlocks( blocks ) {\n\t\t\t\tconst result = [];\n\t\t\t\tconst stack = [ ...blocks ];\n\t\t\t\twhile ( stack.length ) {\n\t\t\t\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\t\t\t\tstack.push( ...innerBlocks );\n\t\t\t\t\tresult.push( block );\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tconst blockList = clientIds.map( select.getBlock );\n\t\t\tconst flattenedBlocks = flattenBlocks( blockList );\n\n\t\t\t// Find the first message and use it.\n\t\t\tlet message;\n\t\t\tfor ( const rule of rules ) {\n\t\t\t\tmessage = rule.callback( flattenedBlocks );\n\t\t\t\tif ( message ) {\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\tdisplayBlockRemovalPrompt(\n\t\t\t\t\t\t\tclientIds,\n\t\t\t\t\t\t\tselectPrevious,\n\t\t\t\t\t\t\tmessage\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( selectPrevious ) {\n\t\t\tdispatch.selectPreviousBlock( clientIds[ 0 ], selectPrevious );\n\t\t}\n\n\t\t// We're batching these two actions because an extra `undo/redo` step can\n\t\t// be created, based on whether we insert a default block or not.\n\t\tregistry.batch( () => {\n\t\t\tdispatch( { type: 'REMOVE_BLOCKS', clientIds } );\n\t\t\t// To avoid a focus loss when removing the last block, assure there is\n\t\t\t// always a default block if the last of the blocks have been removed.\n\t\t\tdispatch( ensureDefaultBlock() );\n\t\t} );\n\t};\n\n/**\n * Action which will insert a default block insert action if there\n * are no other blocks at the root of the editor. This action should be used\n * in actions which may result in no blocks remaining in the editor (removal,\n * replacement, etc).\n */\nexport const ensureDefaultBlock =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\t// To avoid a focus loss when removing the last block, assure there is\n\t\t// always a default block if the last of the blocks have been removed.\n\t\tconst count = select.getBlockCount();\n\t\tif ( count > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there's an custom appender, don't insert default block.\n\t\t// We have to remember to manually move the focus elsewhere to\n\t\t// prevent it from being lost though.\n\t\tconst { __unstableHasCustomAppender } = select.getSettings();\n\t\tif ( __unstableHasCustomAppender ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch.insertDefaultBlock();\n\t};\n\n/**\n * Returns an action object used in signalling that a block removal prompt must\n * be displayed.\n *\n * Contrast with `setBlockRemovalRules`.\n *\n * @param {string|string[]} clientIds Client IDs of blocks to remove.\n * @param {boolean} selectPrevious True if the previous block or the\n * immediate parent (if no previous\n * block exists) should be selected\n * when a block is removed.\n * @param {string} message Message to display in the prompt.\n *\n * @return {Object} Action object.\n */\nfunction displayBlockRemovalPrompt( clientIds, selectPrevious, message ) {\n\treturn {\n\t\ttype: 'DISPLAY_BLOCK_REMOVAL_PROMPT',\n\t\tclientIds,\n\t\tselectPrevious,\n\t\tmessage,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that a block removal prompt must\n * be cleared, either be cause the user has confirmed or canceled the request\n * for removal.\n *\n * @return {Object} Action object.\n */\nexport function clearBlockRemovalPrompt() {\n\treturn {\n\t\ttype: 'CLEAR_BLOCK_REMOVAL_PROMPT',\n\t};\n}\n\n/**\n * Returns an action object used to set up any rules that a block editor may\n * provide in order to prevent a user from accidentally removing certain\n * blocks. These rules are then used to display a confirmation prompt to the\n * user. For instance, in the Site Editor, the Query Loop block is important\n * enough to warrant such confirmation.\n *\n * IMPORTANT: Registering rules implicitly signals to the `privateRemoveBlocks`\n * action that the editor will be responsible for displaying block removal\n * prompts and confirming deletions. This action is meant to be used by\n * component `BlockRemovalWarningModal` only.\n *\n * The data is a record whose keys are block types (e.g. 'core/query') and\n * whose values are the explanation to be shown to users (e.g. 'Query Loop\n * displays a list of posts or pages.').\n *\n * Contrast with `displayBlockRemovalPrompt`.\n *\n * @param {Record|false} rules Block removal rules.\n * @return {Object} Action object.\n */\nexport function setBlockRemovalRules( rules = false ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_REMOVAL_RULES',\n\t\trules,\n\t};\n}\n\n/**\n * Sets the client ID of the block settings menu that is currently open.\n *\n * @param {?string} clientId The block client ID.\n * @return {Object} Action object.\n */\nexport function setOpenedBlockSettingsMenu( clientId ) {\n\treturn {\n\t\ttype: 'SET_OPENED_BLOCK_SETTINGS_MENU',\n\t\tclientId,\n\t};\n}\n\nexport function setStyleOverride( id, style ) {\n\treturn {\n\t\ttype: 'SET_STYLE_OVERRIDE',\n\t\tid,\n\t\tstyle,\n\t};\n}\n\nexport function deleteStyleOverride( id ) {\n\treturn {\n\t\ttype: 'DELETE_STYLE_OVERRIDE',\n\t\tid,\n\t};\n}\n\n/**\n * Action that sets the element that had focus when focus leaves the editor canvas.\n *\n * @param {Object} lastFocus The last focused element.\n *\n *\n * @return {Object} Action object.\n */\nexport function setLastFocus( lastFocus = null ) {\n\treturn {\n\t\ttype: 'LAST_FOCUS',\n\t\tlastFocus,\n\t};\n}\n\n/**\n * Action that stops temporarily editing as blocks.\n *\n * @param {string} clientId The block's clientId.\n */\nexport function stopEditingAsBlocks( clientId ) {\n\treturn ( { select, dispatch, registry } ) => {\n\t\tconst focusModeToRevert = unlock(\n\t\t\tregistry.select( blockEditorStore )\n\t\t).getTemporarilyEditingFocusModeToRevert();\n\t\tdispatch.__unstableMarkNextChangeAsNotPersistent();\n\t\tdispatch.updateBlockAttributes( clientId, {\n\t\t\ttemplateLock: 'contentOnly',\n\t\t} );\n\t\tdispatch.updateBlockListSettings( clientId, {\n\t\t\t...select.getBlockListSettings( clientId ),\n\t\t\ttemplateLock: 'contentOnly',\n\t\t} );\n\t\tdispatch.updateSettings( { focusMode: focusModeToRevert } );\n\t\tdispatch.__unstableSetTemporarilyEditingAsBlocks();\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has begun to drag.\n *\n * @return {Object} Action object.\n */\nexport function startDragging() {\n\treturn {\n\t\ttype: 'START_DRAGGING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has stopped dragging.\n *\n * @return {Object} Action object.\n */\nexport function stopDragging() {\n\treturn {\n\t\ttype: 'STOP_DRAGGING',\n\t};\n}\n\n/**\n * @param {string|null} clientId The block's clientId, or `null` to clear.\n *\n * @return {Object} Action object.\n */\nexport function expandBlock( clientId ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_EXPANDED_IN_LIST_VIEW',\n\t\tclientId,\n\t};\n}\n\n/**\n * Temporarily modify/unlock the content-only block for editions.\n *\n * @param {string} clientId The client id of the block.\n */\nexport const modifyContentLockBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tdispatch.selectBlock( clientId );\n\t\tdispatch.__unstableMarkNextChangeAsNotPersistent();\n\t\tdispatch.updateBlockAttributes( clientId, {\n\t\t\ttemplateLock: undefined,\n\t\t} );\n\t\tdispatch.updateBlockListSettings( clientId, {\n\t\t\t...select.getBlockListSettings( clientId ),\n\t\t\ttemplateLock: false,\n\t\t} );\n\t\tconst focusModeToRevert = select.getSettings().focusMode;\n\t\tdispatch.updateSettings( { focusMode: true } );\n\t\tdispatch.__unstableSetTemporarilyEditingAsBlocks(\n\t\t\tclientId,\n\t\t\tfocusModeToRevert\n\t\t);\n\t};\n\n/**\n * Sets the zoom level.\n *\n * @param {number} zoom the new zoom level\n * @return {Object} Action object.\n */\nexport function setZoomLevel( zoom = 100 ) {\n\treturn {\n\t\ttype: 'SET_ZOOM_LEVEL',\n\t\tzoom,\n\t};\n}\n\n/**\n * Resets the Zoom state.\n * @return {Object} Action object.\n */\nexport function resetZoomLevel() {\n\treturn {\n\t\ttype: 'RESET_ZOOM_LEVEL',\n\t};\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"a11y\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"notices\"];","/**\n * WordPress dependencies\n */\nimport { RichTextData } from '@wordpress/rich-text';\n\n/**\n * A robust way to retain selection position through various\n * transforms is to insert a special character at the position and\n * then recover it.\n */\nexport const START_OF_SELECTED_AREA = '\\u0086';\n\n/**\n * Retrieve the block attribute that contains the selection position.\n *\n * @param {Object} blockAttributes Block attributes.\n * @return {string|void} The name of the block attribute that was previously selected.\n */\nexport function retrieveSelectedAttribute( blockAttributes ) {\n\tif ( ! blockAttributes ) {\n\t\treturn;\n\t}\n\n\treturn Object.keys( blockAttributes ).find( ( name ) => {\n\t\tconst value = blockAttributes[ name ];\n\t\treturn (\n\t\t\t( typeof value === 'string' || value instanceof RichTextData ) &&\n\t\t\t// To do: refactor this to use rich text's selection instead, so we\n\t\t\t// no longer have to use on this hack inserting a special character.\n\t\t\tvalue.toString().indexOf( START_OF_SELECTED_AREA ) !== -1\n\t\t);\n\t} );\n}\n\nexport function findRichTextAttributeKey( blockType ) {\n\tfor ( const [ key, value ] of Object.entries( blockType.attributes ) ) {\n\t\tif ( value.source === 'rich-text' || value.source === 'html' ) {\n\t\t\treturn key;\n\t\t}\n\t}\n}\n","/* eslint no-console: [ 'error', { allow: [ 'error', 'warn' ] } ] */\n/**\n * WordPress dependencies\n */\nimport {\n\tcloneBlock,\n\t__experimentalCloneSanitizedBlock,\n\tcreateBlock,\n\tdoBlocksMatchTemplate,\n\tgetBlockType,\n\tgetDefaultBlockName,\n\thasBlockSupport,\n\tswitchToBlockType,\n\tsynchronizeBlocksWithTemplate,\n\tgetBlockSupport,\n\tisUnmodifiedDefaultBlock,\n\tisUnmodifiedBlock,\n} from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { create, insert, remove, toHTMLString } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport {\n\tretrieveSelectedAttribute,\n\tfindRichTextAttributeKey,\n\tSTART_OF_SELECTED_AREA,\n} from '../utils/selection';\nimport {\n\t__experimentalUpdateSettings,\n\tprivateRemoveBlocks,\n} from './private-actions';\n\n/** @typedef {import('../components/use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\nconst castArray = ( maybeArray ) =>\n\tArray.isArray( maybeArray ) ? maybeArray : [ maybeArray ];\n\n/**\n * Action that resets blocks state to the specified array of blocks, taking precedence\n * over any other content reflected as an edit in state.\n *\n * @param {Array} blocks Array of blocks.\n */\nexport const resetBlocks =\n\t( blocks ) =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'RESET_BLOCKS', blocks } );\n\t\tdispatch( validateBlocksToTemplate( blocks ) );\n\t};\n\n/**\n * Block validity is a function of blocks state (at the point of a\n * reset) and the template setting. As a compromise to its placement\n * across distinct parts of state, it is implemented here as a side\n * effect of the block reset action.\n *\n * @param {Array} blocks Array of blocks.\n */\nexport const validateBlocksToTemplate =\n\t( blocks ) =>\n\t( { select, dispatch } ) => {\n\t\tconst template = select.getTemplate();\n\t\tconst templateLock = select.getTemplateLock();\n\n\t\t// Unlocked templates are considered always valid because they act\n\t\t// as default values only.\n\t\tconst isBlocksValidToTemplate =\n\t\t\t! template ||\n\t\t\ttemplateLock !== 'all' ||\n\t\t\tdoBlocksMatchTemplate( blocks, template );\n\n\t\t// Update if validity has changed.\n\t\tconst isValidTemplate = select.isValidTemplate();\n\n\t\tif ( isBlocksValidToTemplate !== isValidTemplate ) {\n\t\t\tdispatch.setTemplateValidity( isBlocksValidToTemplate );\n\t\t\treturn isBlocksValidToTemplate;\n\t\t}\n\t};\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPBlockSelection\n *\n * @property {string} clientId A block client ID.\n * @property {string} attributeKey A block attribute key.\n * @property {number} offset An attribute value offset, based on the rich\n * text value. See `wp.richText.create`.\n */\n\n/**\n * A selection object.\n *\n * @typedef {Object} WPSelection\n *\n * @property {WPBlockSelection} start The selection start.\n * @property {WPBlockSelection} end The selection end.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns an action object used in signalling that selection state should be\n * reset to the specified selection.\n *\n * @param {WPBlockSelection} selectionStart The selection start.\n * @param {WPBlockSelection} selectionEnd The selection end.\n * @param {0|-1|null} initialPosition Initial block position.\n *\n * @return {Object} Action object.\n */\nexport function resetSelection(\n\tselectionStart,\n\tselectionEnd,\n\tinitialPosition\n) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn {\n\t\ttype: 'RESET_SELECTION',\n\t\tselectionStart,\n\t\tselectionEnd,\n\t\tinitialPosition,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that blocks have been received.\n * Unlike resetBlocks, these should be appended to the existing known set, not\n * replacing.\n *\n * @deprecated\n *\n * @param {Object[]} blocks Array of block objects.\n *\n * @return {Object} Action object.\n */\nexport function receiveBlocks( blocks ) {\n\tdeprecated( 'wp.data.dispatch( \"core/block-editor\" ).receiveBlocks', {\n\t\tsince: '5.9',\n\t\talternative: 'resetBlocks or insertBlocks',\n\t} );\n\n\treturn {\n\t\ttype: 'RECEIVE_BLOCKS',\n\t\tblocks,\n\t};\n}\n\n/**\n * Action that updates attributes of multiple blocks with the specified client IDs.\n *\n * @param {string|string[]} clientIds Block client IDs.\n * @param {Object} attributes Block attributes to be merged. Should be keyed by clientIds if\n * uniqueByBlock is true.\n * @param {boolean} uniqueByBlock true if each block in clientIds array has a unique set of attributes\n * @return {Object} Action object.\n */\nexport function updateBlockAttributes(\n\tclientIds,\n\tattributes,\n\tuniqueByBlock = false\n) {\n\treturn {\n\t\ttype: 'UPDATE_BLOCK_ATTRIBUTES',\n\t\tclientIds: castArray( clientIds ),\n\t\tattributes,\n\t\tuniqueByBlock,\n\t};\n}\n\n/**\n * Action that updates the block with the specified client ID.\n *\n * @param {string} clientId Block client ID.\n * @param {Object} updates Block attributes to be merged.\n *\n * @return {Object} Action object.\n */\nexport function updateBlock( clientId, updates ) {\n\treturn {\n\t\ttype: 'UPDATE_BLOCK',\n\t\tclientId,\n\t\tupdates,\n\t};\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns an action object used in signalling that the block with the\n * specified client ID has been selected, optionally accepting a position\n * value reflecting its selection directionality. An initialPosition of -1\n * reflects a reverse selection.\n *\n * @param {string} clientId Block client ID.\n * @param {0|-1|null} initialPosition Optional initial position. Pass as -1 to\n * reflect reverse selection.\n *\n * @return {Object} Action object.\n */\nexport function selectBlock( clientId, initialPosition = 0 ) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn {\n\t\ttype: 'SELECT_BLOCK',\n\t\tinitialPosition,\n\t\tclientId,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the block with the\n * specified client ID has been hovered.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Action object.\n */\nexport function hoverBlock( clientId ) {\n\treturn {\n\t\ttype: 'HOVER_BLOCK',\n\t\tclientId,\n\t};\n}\n\n/**\n * Yields action objects used in signalling that the block preceding the given\n * clientId (or optionally, its first parent from bottom to top)\n * should be selected.\n *\n * @param {string} clientId Block client ID.\n * @param {boolean} fallbackToParent If true, select the first parent if there is no previous block.\n */\nexport const selectPreviousBlock =\n\t( clientId, fallbackToParent = false ) =>\n\t( { select, dispatch } ) => {\n\t\tconst previousBlockClientId =\n\t\t\tselect.getPreviousBlockClientId( clientId );\n\t\tif ( previousBlockClientId ) {\n\t\t\tdispatch.selectBlock( previousBlockClientId, -1 );\n\t\t} else if ( fallbackToParent ) {\n\t\t\tconst firstParentClientId = select.getBlockRootClientId( clientId );\n\t\t\tif ( firstParentClientId ) {\n\t\t\t\tdispatch.selectBlock( firstParentClientId, -1 );\n\t\t\t}\n\t\t}\n\t};\n\n/**\n * Yields action objects used in signalling that the block following the given\n * clientId should be selected.\n *\n * @param {string} clientId Block client ID.\n */\nexport const selectNextBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tconst nextBlockClientId = select.getNextBlockClientId( clientId );\n\t\tif ( nextBlockClientId ) {\n\t\t\tdispatch.selectBlock( nextBlockClientId );\n\t\t}\n\t};\n\n/**\n * Action that starts block multi-selection.\n *\n * @return {Object} Action object.\n */\nexport function startMultiSelect() {\n\treturn {\n\t\ttype: 'START_MULTI_SELECT',\n\t};\n}\n\n/**\n * Action that stops block multi-selection.\n *\n * @return {Object} Action object.\n */\nexport function stopMultiSelect() {\n\treturn {\n\t\ttype: 'STOP_MULTI_SELECT',\n\t};\n}\n\n/**\n * Action that changes block multi-selection.\n *\n * @param {string} start First block of the multi selection.\n * @param {string} end Last block of the multiselection.\n * @param {number|null} __experimentalInitialPosition Optional initial position. Pass as null to skip focus within editor canvas.\n */\nexport const multiSelect =\n\t( start, end, __experimentalInitialPosition = 0 ) =>\n\t( { select, dispatch } ) => {\n\t\tconst startBlockRootClientId = select.getBlockRootClientId( start );\n\t\tconst endBlockRootClientId = select.getBlockRootClientId( end );\n\n\t\t// Only allow block multi-selections at the same level.\n\t\tif ( startBlockRootClientId !== endBlockRootClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch( {\n\t\t\ttype: 'MULTI_SELECT',\n\t\t\tstart,\n\t\t\tend,\n\t\t\tinitialPosition: __experimentalInitialPosition,\n\t\t} );\n\n\t\tconst blockCount = select.getSelectedBlockCount();\n\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: number of selected blocks */\n\t\t\t\t_n( '%s block selected.', '%s blocks selected.', blockCount ),\n\t\t\t\tblockCount\n\t\t\t),\n\t\t\t'assertive'\n\t\t);\n\t};\n\n/**\n * Action that clears the block selection.\n *\n * @return {Object} Action object.\n */\nexport function clearSelectedBlock() {\n\treturn {\n\t\ttype: 'CLEAR_SELECTED_BLOCK',\n\t};\n}\n\n/**\n * Action that enables or disables block selection.\n *\n * @param {boolean} [isSelectionEnabled=true] Whether block selection should\n * be enabled.\n *\n * @return {Object} Action object.\n */\nexport function toggleSelection( isSelectionEnabled = true ) {\n\treturn {\n\t\ttype: 'TOGGLE_SELECTION',\n\t\tisSelectionEnabled,\n\t};\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Action that replaces given blocks with one or more replacement blocks.\n *\n * @param {(string|string[])} clientIds Block client ID(s) to replace.\n * @param {(Object|Object[])} blocks Replacement block(s).\n * @param {number} indexToSelect Index of replacement block to select.\n * @param {0|-1|null} initialPosition Index of caret after in the selected block after the operation.\n * @param {?Object} meta Optional Meta values to be passed to the action object.\n *\n * @return {Object} Action object.\n */\nexport const replaceBlocks =\n\t( clientIds, blocks, indexToSelect, initialPosition = 0, meta ) =>\n\t( { select, dispatch, registry } ) => {\n\t\t/* eslint-enable jsdoc/valid-types */\n\t\tclientIds = castArray( clientIds );\n\t\tblocks = castArray( blocks );\n\t\tconst rootClientId = select.getBlockRootClientId( clientIds[ 0 ] );\n\t\t// Replace is valid if the new blocks can be inserted in the root block.\n\t\tfor ( let index = 0; index < blocks.length; index++ ) {\n\t\t\tconst block = blocks[ index ];\n\t\t\tconst canInsertBlock = select.canInsertBlockType(\n\t\t\t\tblock.name,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tif ( ! canInsertBlock ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// We're batching these two actions because an extra `undo/redo` step can\n\t\t// be created, based on whether we insert a default block or not.\n\t\tregistry.batch( () => {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'REPLACE_BLOCKS',\n\t\t\t\tclientIds,\n\t\t\t\tblocks,\n\t\t\t\ttime: Date.now(),\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition,\n\t\t\t\tmeta,\n\t\t\t} );\n\t\t\t// To avoid a focus loss when removing the last block, assure there is\n\t\t\t// always a default block if the last of the blocks have been removed.\n\t\t\tdispatch.ensureDefaultBlock();\n\t\t} );\n\t};\n\n/**\n * Action that replaces a single block with one or more replacement blocks.\n *\n * @param {(string|string[])} clientId Block client ID to replace.\n * @param {(Object|Object[])} block Replacement block(s).\n *\n * @return {Object} Action object.\n */\nexport function replaceBlock( clientId, block ) {\n\treturn replaceBlocks( clientId, block );\n}\n\n/**\n * Higher-order action creator which, given the action type to dispatch creates\n * an action creator for managing block movement.\n *\n * @param {string} type Action type to dispatch.\n *\n * @return {Function} Action creator.\n */\nconst createOnMove =\n\t( type ) =>\n\t( clientIds, rootClientId ) =>\n\t( { select, dispatch } ) => {\n\t\t// If one of the blocks is locked or the parent is locked, we cannot move any block.\n\t\tconst canMoveBlocks = select.canMoveBlocks( clientIds );\n\t\tif ( ! canMoveBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch( { type, clientIds: castArray( clientIds ), rootClientId } );\n\t};\n\nexport const moveBlocksDown = createOnMove( 'MOVE_BLOCKS_DOWN' );\nexport const moveBlocksUp = createOnMove( 'MOVE_BLOCKS_UP' );\n\n/**\n * Action that moves given blocks to a new position.\n *\n * @param {?string} clientIds The client IDs of the blocks.\n * @param {?string} fromRootClientId Root client ID source.\n * @param {?string} toRootClientId Root client ID destination.\n * @param {number} index The index to move the blocks to.\n */\nexport const moveBlocksToPosition =\n\t( clientIds, fromRootClientId = '', toRootClientId = '', index ) =>\n\t( { select, dispatch } ) => {\n\t\tconst canMoveBlocks = select.canMoveBlocks( clientIds );\n\n\t\t// If one of the blocks is locked or the parent is locked, we cannot move any block.\n\t\tif ( ! canMoveBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If moving inside the same root block the move is always possible.\n\t\tif ( fromRootClientId !== toRootClientId ) {\n\t\t\tconst canRemoveBlocks = select.canRemoveBlocks( clientIds );\n\n\t\t\t// If we're moving to another block, it means we're deleting blocks from\n\t\t\t// the original block, so we need to check if removing is possible.\n\t\t\tif ( ! canRemoveBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst canInsertBlocks = select.canInsertBlocks(\n\t\t\t\tclientIds,\n\t\t\t\ttoRootClientId\n\t\t\t);\n\n\t\t\t// If moving to other parent block, the move is possible if we can insert a block of the same type inside the new parent block.\n\t\t\tif ( ! canInsertBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tdispatch( {\n\t\t\ttype: 'MOVE_BLOCKS_TO_POSITION',\n\t\t\tfromRootClientId,\n\t\t\ttoRootClientId,\n\t\t\tclientIds,\n\t\t\tindex,\n\t\t} );\n\t};\n\n/**\n * Action that moves given block to a new position.\n *\n * @param {?string} clientId The client ID of the block.\n * @param {?string} fromRootClientId Root client ID source.\n * @param {?string} toRootClientId Root client ID destination.\n * @param {number} index The index to move the block to.\n */\nexport function moveBlockToPosition(\n\tclientId,\n\tfromRootClientId = '',\n\ttoRootClientId = '',\n\tindex\n) {\n\treturn moveBlocksToPosition(\n\t\t[ clientId ],\n\t\tfromRootClientId,\n\t\ttoRootClientId,\n\t\tindex\n\t);\n}\n\n/**\n * Action that inserts a single block, optionally at a specific index respective a root block list.\n *\n * Only allowed blocks are inserted. The action may fail silently for blocks that are not allowed or if\n * a templateLock is active on the block list.\n *\n * @param {Object} block Block object to insert.\n * @param {?number} index Index at which block should be inserted.\n * @param {?string} rootClientId Optional root client ID of block list on which to insert.\n * @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.\n * @param {?Object} meta Optional Meta values to be passed to the action object.\n *\n * @return {Object} Action object.\n */\nexport function insertBlock(\n\tblock,\n\tindex,\n\trootClientId,\n\tupdateSelection,\n\tmeta\n) {\n\treturn insertBlocks(\n\t\t[ block ],\n\t\tindex,\n\t\trootClientId,\n\t\tupdateSelection,\n\t\t0,\n\t\tmeta\n\t);\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Action that inserts an array of blocks, optionally at a specific index respective a root block list.\n *\n * Only allowed blocks are inserted. The action may fail silently for blocks that are not allowed or if\n * a templateLock is active on the block list.\n *\n * @param {Object[]} blocks Block objects to insert.\n * @param {?number} index Index at which block should be inserted.\n * @param {?string} rootClientId Optional root client ID of block list on which to insert.\n * @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.\n * @param {0|-1|null} initialPosition Initial focus position. Setting it to null prevent focusing the inserted block.\n * @param {?Object} meta Optional Meta values to be passed to the action object.\n *\n * @return {Object} Action object.\n */\nexport const insertBlocks =\n\t(\n\t\tblocks,\n\t\tindex,\n\t\trootClientId,\n\t\tupdateSelection = true,\n\t\tinitialPosition = 0,\n\t\tmeta\n\t) =>\n\t( { select, dispatch } ) => {\n\t\t/* eslint-enable jsdoc/valid-types */\n\t\tif ( initialPosition !== null && typeof initialPosition === 'object' ) {\n\t\t\tmeta = initialPosition;\n\t\t\tinitialPosition = 0;\n\t\t\tdeprecated(\n\t\t\t\t\"meta argument in wp.data.dispatch('core/block-editor')\",\n\t\t\t\t{\n\t\t\t\t\tsince: '5.8',\n\t\t\t\t\thint: 'The meta argument is now the 6th argument of the function',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tblocks = castArray( blocks );\n\t\tconst allowedBlocks = [];\n\t\tfor ( const block of blocks ) {\n\t\t\tconst isValid = select.canInsertBlockType(\n\t\t\t\tblock.name,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tif ( isValid ) {\n\t\t\t\tallowedBlocks.push( block );\n\t\t\t}\n\t\t}\n\t\tif ( allowedBlocks.length ) {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'INSERT_BLOCKS',\n\t\t\t\tblocks: allowedBlocks,\n\t\t\t\tindex,\n\t\t\t\trootClientId,\n\t\t\t\ttime: Date.now(),\n\t\t\t\tupdateSelection,\n\t\t\t\tinitialPosition: updateSelection ? initialPosition : null,\n\t\t\t\tmeta,\n\t\t\t} );\n\t\t}\n\t};\n\n/**\n * Action that shows the insertion point.\n *\n * @param {?string} rootClientId Optional root client ID of block list on\n * which to insert.\n * @param {?number} index Index at which block should be inserted.\n * @param {?Object} __unstableOptions Additional options.\n * @property {boolean} __unstableWithInserter Whether or not to show an inserter button.\n * @property {WPDropOperation} operation The operation to perform when applied,\n * either 'insert' or 'replace' for now.\n *\n * @return {Object} Action object.\n */\nexport function showInsertionPoint(\n\trootClientId,\n\tindex,\n\t__unstableOptions = {}\n) {\n\tconst { __unstableWithInserter, operation, nearestSide } =\n\t\t__unstableOptions;\n\treturn {\n\t\ttype: 'SHOW_INSERTION_POINT',\n\t\trootClientId,\n\t\tindex,\n\t\t__unstableWithInserter,\n\t\toperation,\n\t\tnearestSide,\n\t};\n}\n/**\n * Action that hides the insertion point.\n */\nexport const hideInsertionPoint =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! select.isBlockInsertionPointVisible() ) {\n\t\t\treturn;\n\t\t}\n\t\tdispatch( {\n\t\t\ttype: 'HIDE_INSERTION_POINT',\n\t\t} );\n\t};\n\n/**\n * Action that resets the template validity.\n *\n * @param {boolean} isValid template validity flag.\n *\n * @return {Object} Action object.\n */\nexport function setTemplateValidity( isValid ) {\n\treturn {\n\t\ttype: 'SET_TEMPLATE_VALIDITY',\n\t\tisValid,\n\t};\n}\n\n/**\n * Action that synchronizes the template with the list of blocks.\n *\n * @return {Object} Action object.\n */\nexport const synchronizeTemplate =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\tdispatch( { type: 'SYNCHRONIZE_TEMPLATE' } );\n\t\tconst blocks = select.getBlocks();\n\t\tconst template = select.getTemplate();\n\t\tconst updatedBlockList = synchronizeBlocksWithTemplate(\n\t\t\tblocks,\n\t\t\ttemplate\n\t\t);\n\n\t\tdispatch.resetBlocks( updatedBlockList );\n\t};\n\n/**\n * Delete the current selection.\n *\n * @param {boolean} isForward\n */\nexport const __unstableDeleteSelection =\n\t( isForward ) =>\n\t( { registry, select, dispatch } ) => {\n\t\tconst selectionAnchor = select.getSelectionStart();\n\t\tconst selectionFocus = select.getSelectionEnd();\n\n\t\tif ( selectionAnchor.clientId === selectionFocus.clientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// It's not mergeable if there's no rich text selection.\n\t\tif (\n\t\t\t! selectionAnchor.attributeKey ||\n\t\t\t! selectionFocus.attributeKey ||\n\t\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\t\ttypeof selectionFocus.offset === 'undefined'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst anchorRootClientId = select.getBlockRootClientId(\n\t\t\tselectionAnchor.clientId\n\t\t);\n\t\tconst focusRootClientId = select.getBlockRootClientId(\n\t\t\tselectionFocus.clientId\n\t\t);\n\n\t\t// It's not mergeable if the selection doesn't start and end in the same\n\t\t// block list. Maybe in the future it should be allowed.\n\t\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockOrder = select.getBlockOrder( anchorRootClientId );\n\t\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\t\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t\t// Reassign selection start and end based on order.\n\t\tlet selectionStart, selectionEnd;\n\n\t\tif ( anchorIndex > focusIndex ) {\n\t\t\tselectionStart = selectionFocus;\n\t\t\tselectionEnd = selectionAnchor;\n\t\t} else {\n\t\t\tselectionStart = selectionAnchor;\n\t\t\tselectionEnd = selectionFocus;\n\t\t}\n\n\t\tconst targetSelection = isForward ? selectionEnd : selectionStart;\n\t\tconst targetBlock = select.getBlock( targetSelection.clientId );\n\t\tconst targetBlockType = getBlockType( targetBlock.name );\n\n\t\tif ( ! targetBlockType.merge ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectionA = selectionStart;\n\t\tconst selectionB = selectionEnd;\n\n\t\tconst blockA = select.getBlock( selectionA.clientId );\n\t\tconst blockB = select.getBlock( selectionB.clientId );\n\n\t\tconst htmlA = blockA.attributes[ selectionA.attributeKey ];\n\t\tconst htmlB = blockB.attributes[ selectionB.attributeKey ];\n\n\t\tlet valueA = create( { html: htmlA } );\n\t\tlet valueB = create( { html: htmlB } );\n\n\t\tvalueA = remove( valueA, selectionA.offset, valueA.text.length );\n\t\tvalueB = insert( valueB, START_OF_SELECTED_AREA, 0, selectionB.offset );\n\n\t\t// Clone the blocks so we don't manipulate the original.\n\t\tconst cloneA = cloneBlock( blockA, {\n\t\t\t[ selectionA.attributeKey ]: toHTMLString( { value: valueA } ),\n\t\t} );\n\t\tconst cloneB = cloneBlock( blockB, {\n\t\t\t[ selectionB.attributeKey ]: toHTMLString( { value: valueB } ),\n\t\t} );\n\n\t\tconst followingBlock = isForward ? cloneA : cloneB;\n\n\t\t// We can only merge blocks with similar types\n\t\t// thus, we transform the block to merge first\n\t\tconst blocksWithTheSameType =\n\t\t\tblockA.name === blockB.name\n\t\t\t\t? [ followingBlock ]\n\t\t\t\t: switchToBlockType( followingBlock, targetBlockType.name );\n\n\t\t// If the block types can not match, do nothing\n\t\tif ( ! blocksWithTheSameType || ! blocksWithTheSameType.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet updatedAttributes;\n\n\t\tif ( isForward ) {\n\t\t\tconst blockToMerge = blocksWithTheSameType.pop();\n\t\t\tupdatedAttributes = targetBlockType.merge(\n\t\t\t\tblockToMerge.attributes,\n\t\t\t\tcloneB.attributes\n\t\t\t);\n\t\t} else {\n\t\t\tconst blockToMerge = blocksWithTheSameType.shift();\n\t\t\tupdatedAttributes = targetBlockType.merge(\n\t\t\t\tcloneA.attributes,\n\t\t\t\tblockToMerge.attributes\n\t\t\t);\n\t\t}\n\n\t\tconst newAttributeKey = retrieveSelectedAttribute( updatedAttributes );\n\n\t\tconst convertedHtml = updatedAttributes[ newAttributeKey ];\n\t\tconst convertedValue = create( { html: convertedHtml } );\n\t\tconst newOffset = convertedValue.text.indexOf( START_OF_SELECTED_AREA );\n\t\tconst newValue = remove( convertedValue, newOffset, newOffset + 1 );\n\t\tconst newHtml = toHTMLString( { value: newValue } );\n\n\t\tupdatedAttributes[ newAttributeKey ] = newHtml;\n\n\t\tconst selectedBlockClientIds = select.getSelectedBlockClientIds();\n\t\tconst replacement = [\n\t\t\t...( isForward ? blocksWithTheSameType : [] ),\n\t\t\t{\n\t\t\t\t// Preserve the original client ID.\n\t\t\t\t...targetBlock,\n\t\t\t\tattributes: {\n\t\t\t\t\t...targetBlock.attributes,\n\t\t\t\t\t...updatedAttributes,\n\t\t\t\t},\n\t\t\t},\n\t\t\t...( isForward ? [] : blocksWithTheSameType ),\n\t\t];\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.selectionChange(\n\t\t\t\ttargetBlock.clientId,\n\t\t\t\tnewAttributeKey,\n\t\t\t\tnewOffset,\n\t\t\t\tnewOffset\n\t\t\t);\n\n\t\t\tdispatch.replaceBlocks(\n\t\t\t\tselectedBlockClientIds,\n\t\t\t\treplacement,\n\t\t\t\t0, // If we don't pass the `indexToSelect` it will default to the last block.\n\t\t\t\tselect.getSelectedBlocksInitialCaretPosition()\n\t\t\t);\n\t\t} );\n\t};\n\n/**\n * Split the current selection.\n * @param {?Array} blocks\n */\nexport const __unstableSplitSelection =\n\t( blocks = [] ) =>\n\t( { registry, select, dispatch } ) => {\n\t\tconst selectionAnchor = select.getSelectionStart();\n\t\tconst selectionFocus = select.getSelectionEnd();\n\t\tconst anchorRootClientId = select.getBlockRootClientId(\n\t\t\tselectionAnchor.clientId\n\t\t);\n\t\tconst focusRootClientId = select.getBlockRootClientId(\n\t\t\tselectionFocus.clientId\n\t\t);\n\n\t\t// It's not splittable if the selection doesn't start and end in the same\n\t\t// block list. Maybe in the future it should be allowed.\n\t\tif ( anchorRootClientId !== focusRootClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockOrder = select.getBlockOrder( anchorRootClientId );\n\t\tconst anchorIndex = blockOrder.indexOf( selectionAnchor.clientId );\n\t\tconst focusIndex = blockOrder.indexOf( selectionFocus.clientId );\n\n\t\t// Reassign selection start and end based on order.\n\t\tlet selectionStart, selectionEnd;\n\n\t\tif ( anchorIndex > focusIndex ) {\n\t\t\tselectionStart = selectionFocus;\n\t\t\tselectionEnd = selectionAnchor;\n\t\t} else {\n\t\t\tselectionStart = selectionAnchor;\n\t\t\tselectionEnd = selectionFocus;\n\t\t}\n\n\t\tconst selectionA = selectionStart;\n\t\tconst selectionB = selectionEnd;\n\t\tconst blockA = select.getBlock( selectionA.clientId );\n\t\tconst blockB = select.getBlock( selectionB.clientId );\n\t\tconst blockAType = getBlockType( blockA.name );\n\t\tconst blockBType = getBlockType( blockB.name );\n\t\tconst attributeKeyA =\n\t\t\ttypeof selectionA.attributeKey === 'string'\n\t\t\t\t? selectionA.attributeKey\n\t\t\t\t: findRichTextAttributeKey( blockAType );\n\t\tconst attributeKeyB =\n\t\t\ttypeof selectionB.attributeKey === 'string'\n\t\t\t\t? selectionB.attributeKey\n\t\t\t\t: findRichTextAttributeKey( blockBType );\n\t\tconst blockAttributes = select.getBlockAttributes(\n\t\t\tselectionA.clientId\n\t\t);\n\t\tconst bindings = blockAttributes?.metadata?.bindings;\n\n\t\t// If the attribute is bound, don't split the selection and insert a new block instead.\n\t\tif ( bindings?.[ attributeKeyA ] ) {\n\t\t\t// Show warning if user tries to insert a block into another block with bindings.\n\t\t\tif ( blocks.length ) {\n\t\t\t\tconst { createWarningNotice } =\n\t\t\t\t\tregistry.dispatch( noticesStore );\n\t\t\t\tcreateWarningNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t\"Blocks can't be inserted into other blocks with bindings\"\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdispatch.insertAfterBlock( selectionA.clientId );\n\t\t\treturn;\n\t\t}\n\n\t\t// Can't split if the selection is not set.\n\t\tif (\n\t\t\t! attributeKeyA ||\n\t\t\t! attributeKeyB ||\n\t\t\ttypeof selectionAnchor.offset === 'undefined' ||\n\t\t\ttypeof selectionFocus.offset === 'undefined'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We can do some short-circuiting if the selection is collapsed.\n\t\tif (\n\t\t\tselectionA.clientId === selectionB.clientId &&\n\t\t\tattributeKeyA === attributeKeyB &&\n\t\t\tselectionA.offset === selectionB.offset\n\t\t) {\n\t\t\t// If an unmodified default block is selected, replace it. We don't\n\t\t\t// want to be converting into a default block.\n\t\t\tif ( blocks.length ) {\n\t\t\t\tif ( isUnmodifiedDefaultBlock( blockA ) ) {\n\t\t\t\t\tdispatch.replaceBlocks(\n\t\t\t\t\t\t[ selectionA.clientId ],\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t\t-1\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If selection is at the start or end, we can simply insert an\n\t\t\t// empty block, provided this block has no inner blocks.\n\t\t\telse if ( ! select.getBlockOrder( selectionA.clientId ).length ) {\n\t\t\t\tfunction createEmpty() {\n\t\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\t\treturn select.canInsertBlockType(\n\t\t\t\t\t\tdefaultBlockName,\n\t\t\t\t\t\tanchorRootClientId\n\t\t\t\t\t)\n\t\t\t\t\t\t? createBlock( defaultBlockName )\n\t\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\t\tselect.getBlockName( selectionA.clientId )\n\t\t\t\t\t\t );\n\t\t\t\t}\n\n\t\t\t\tconst length = blockAttributes[ attributeKeyA ].length;\n\n\t\t\t\tif ( selectionA.offset === 0 && length ) {\n\t\t\t\t\tdispatch.insertBlocks(\n\t\t\t\t\t\t[ createEmpty() ],\n\t\t\t\t\t\tselect.getBlockIndex( selectionA.clientId ),\n\t\t\t\t\t\tanchorRootClientId,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( selectionA.offset === length ) {\n\t\t\t\t\tdispatch.insertBlocks(\n\t\t\t\t\t\t[ createEmpty() ],\n\t\t\t\t\t\tselect.getBlockIndex( selectionA.clientId ) + 1,\n\t\t\t\t\t\tanchorRootClientId\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst htmlA = blockA.attributes[ attributeKeyA ];\n\t\tconst htmlB = blockB.attributes[ attributeKeyB ];\n\n\t\tlet valueA = create( { html: htmlA } );\n\t\tlet valueB = create( { html: htmlB } );\n\n\t\tvalueA = remove( valueA, selectionA.offset, valueA.text.length );\n\t\tvalueB = remove( valueB, 0, selectionB.offset );\n\n\t\tlet head = {\n\t\t\t// Preserve the original client ID.\n\t\t\t...blockA,\n\t\t\t// If both start and end are the same, should only copy innerBlocks\n\t\t\t// once.\n\t\t\tinnerBlocks:\n\t\t\t\tblockA.clientId === blockB.clientId ? [] : blockA.innerBlocks,\n\t\t\tattributes: {\n\t\t\t\t...blockA.attributes,\n\t\t\t\t[ attributeKeyA ]: toHTMLString( { value: valueA } ),\n\t\t\t},\n\t\t};\n\n\t\tlet tail = {\n\t\t\t...blockB,\n\t\t\t// Only preserve the original client ID if the end is different.\n\t\t\tclientId:\n\t\t\t\tblockA.clientId === blockB.clientId\n\t\t\t\t\t? createBlock( blockB.name ).clientId\n\t\t\t\t\t: blockB.clientId,\n\t\t\tattributes: {\n\t\t\t\t...blockB.attributes,\n\t\t\t\t[ attributeKeyB ]: toHTMLString( { value: valueB } ),\n\t\t\t},\n\t\t};\n\n\t\t// When splitting a block, attempt to convert the tail block to the\n\t\t// default block type. For example, when splitting a heading block, the\n\t\t// tail block will be converted to a paragraph block. Note that for\n\t\t// blocks such as a list item and button, this will be skipped because\n\t\t// the default block type cannot be inserted.\n\t\tconst defaultBlockName = getDefaultBlockName();\n\t\tif (\n\t\t\t// A block is only split when the selection is within the same\n\t\t\t// block.\n\t\t\tblockA.clientId === blockB.clientId &&\n\t\t\tdefaultBlockName &&\n\t\t\ttail.name !== defaultBlockName &&\n\t\t\tselect.canInsertBlockType( defaultBlockName, anchorRootClientId )\n\t\t) {\n\t\t\tconst switched = switchToBlockType( tail, defaultBlockName );\n\t\t\tif ( switched?.length === 1 ) {\n\t\t\t\ttail = switched[ 0 ];\n\t\t\t}\n\t\t}\n\n\t\tif ( ! blocks.length ) {\n\t\t\tdispatch.replaceBlocks( select.getSelectedBlockClientIds(), [\n\t\t\t\thead,\n\t\t\t\ttail,\n\t\t\t] );\n\t\t\treturn;\n\t\t}\n\n\t\tlet selection;\n\t\tconst output = [];\n\t\tconst clonedBlocks = [ ...blocks ];\n\t\tconst firstBlock = clonedBlocks.shift();\n\t\tconst headType = getBlockType( head.name );\n\t\tconst firstBlocks =\n\t\t\theadType.merge && firstBlock.name === headType.name\n\t\t\t\t? [ firstBlock ]\n\t\t\t\t: switchToBlockType( firstBlock, headType.name );\n\n\t\tif ( firstBlocks?.length ) {\n\t\t\tconst first = firstBlocks.shift();\n\t\t\thead = {\n\t\t\t\t...head,\n\t\t\t\tattributes: {\n\t\t\t\t\t...head.attributes,\n\t\t\t\t\t...headType.merge( head.attributes, first.attributes ),\n\t\t\t\t},\n\t\t\t};\n\t\t\toutput.push( head );\n\t\t\tselection = {\n\t\t\t\tclientId: head.clientId,\n\t\t\t\tattributeKey: attributeKeyA,\n\t\t\t\toffset: create( { html: head.attributes[ attributeKeyA ] } )\n\t\t\t\t\t.text.length,\n\t\t\t};\n\t\t\tclonedBlocks.unshift( ...firstBlocks );\n\t\t} else {\n\t\t\tif ( ! isUnmodifiedBlock( head ) ) {\n\t\t\t\toutput.push( head );\n\t\t\t}\n\t\t\toutput.push( firstBlock );\n\t\t}\n\n\t\tconst lastBlock = clonedBlocks.pop();\n\t\tconst tailType = getBlockType( tail.name );\n\n\t\tif ( clonedBlocks.length ) {\n\t\t\toutput.push( ...clonedBlocks );\n\t\t}\n\n\t\tif ( lastBlock ) {\n\t\t\tconst lastBlocks =\n\t\t\t\ttailType.merge && tailType.name === lastBlock.name\n\t\t\t\t\t? [ lastBlock ]\n\t\t\t\t\t: switchToBlockType( lastBlock, tailType.name );\n\n\t\t\tif ( lastBlocks?.length ) {\n\t\t\t\tconst last = lastBlocks.pop();\n\t\t\t\toutput.push( {\n\t\t\t\t\t...tail,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t...tail.attributes,\n\t\t\t\t\t\t...tailType.merge( last.attributes, tail.attributes ),\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t\toutput.push( ...lastBlocks );\n\t\t\t\tselection = {\n\t\t\t\t\tclientId: tail.clientId,\n\t\t\t\t\tattributeKey: attributeKeyB,\n\t\t\t\t\toffset: create( {\n\t\t\t\t\t\thtml: last.attributes[ attributeKeyB ],\n\t\t\t\t\t} ).text.length,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\toutput.push( lastBlock );\n\t\t\t\tif ( ! isUnmodifiedBlock( tail ) ) {\n\t\t\t\t\toutput.push( tail );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( ! isUnmodifiedBlock( tail ) ) {\n\t\t\toutput.push( tail );\n\t\t}\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.replaceBlocks(\n\t\t\t\tselect.getSelectedBlockClientIds(),\n\t\t\t\toutput,\n\t\t\t\toutput.length - 1,\n\t\t\t\t0\n\t\t\t);\n\t\t\tif ( selection ) {\n\t\t\t\tdispatch.selectionChange(\n\t\t\t\t\tselection.clientId,\n\t\t\t\t\tselection.attributeKey,\n\t\t\t\t\tselection.offset,\n\t\t\t\t\tselection.offset\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t};\n\n/**\n * Expand the selection to cover the entire blocks, removing partial selection.\n */\nexport const __unstableExpandSelection =\n\t() =>\n\t( { select, dispatch } ) => {\n\t\tconst selectionAnchor = select.getSelectionStart();\n\t\tconst selectionFocus = select.getSelectionEnd();\n\t\tdispatch.selectionChange( {\n\t\t\tstart: { clientId: selectionAnchor.clientId },\n\t\t\tend: { clientId: selectionFocus.clientId },\n\t\t} );\n\t};\n\n/**\n * Action that merges two blocks.\n *\n * @param {string} firstBlockClientId Client ID of the first block to merge.\n * @param {string} secondBlockClientId Client ID of the second block to merge.\n */\nexport const mergeBlocks =\n\t( firstBlockClientId, secondBlockClientId ) =>\n\t( { registry, select, dispatch } ) => {\n\t\tconst clientIdA = firstBlockClientId;\n\t\tconst clientIdB = secondBlockClientId;\n\t\tconst blockA = select.getBlock( clientIdA );\n\t\tconst blockAType = getBlockType( blockA.name );\n\n\t\tif ( ! blockAType ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockB = select.getBlock( clientIdB );\n\n\t\tif (\n\t\t\t! blockAType.merge &&\n\t\t\tgetBlockSupport( blockA.name, '__experimentalOnMerge' )\n\t\t) {\n\t\t\t// If there's no merge function defined, attempt merging inner\n\t\t\t// blocks.\n\t\t\tconst blocksWithTheSameType = switchToBlockType(\n\t\t\t\tblockB,\n\t\t\t\tblockAType.name\n\t\t\t);\n\t\t\t// Only focus the previous block if it's not mergeable.\n\t\t\tif ( blocksWithTheSameType?.length !== 1 ) {\n\t\t\t\tdispatch.selectBlock( blockA.clientId );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [ blockWithSameType ] = blocksWithTheSameType;\n\t\t\tif ( blockWithSameType.innerBlocks.length < 1 ) {\n\t\t\t\tdispatch.selectBlock( blockA.clientId );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.insertBlocks(\n\t\t\t\t\tblockWithSameType.innerBlocks,\n\t\t\t\t\tundefined,\n\t\t\t\t\tclientIdA\n\t\t\t\t);\n\t\t\t\tdispatch.removeBlock( clientIdB );\n\t\t\t\tdispatch.selectBlock(\n\t\t\t\t\tblockWithSameType.innerBlocks[ 0 ].clientId\n\t\t\t\t);\n\n\t\t\t\t// Attempt to merge the next block if it's the same type and\n\t\t\t\t// same attributes. This is useful when merging a paragraph into\n\t\t\t\t// a list, and the next block is also a list. If we don't merge,\n\t\t\t\t// it looks like one list, but it's actually two lists. The same\n\t\t\t\t// applies to other blocks such as a group with the same\n\t\t\t\t// attributes.\n\t\t\t\tconst nextBlockClientId =\n\t\t\t\t\tselect.getNextBlockClientId( clientIdA );\n\n\t\t\t\tif (\n\t\t\t\t\tnextBlockClientId &&\n\t\t\t\t\tselect.getBlockName( clientIdA ) ===\n\t\t\t\t\t\tselect.getBlockName( nextBlockClientId )\n\t\t\t\t) {\n\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\tselect.getBlockAttributes( clientIdA );\n\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\tselect.getBlockAttributes( nextBlockClientId );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tdispatch.moveBlocksToPosition(\n\t\t\t\t\t\t\tselect.getBlockOrder( nextBlockClientId ),\n\t\t\t\t\t\t\tnextBlockClientId,\n\t\t\t\t\t\t\tclientIdA\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.removeBlock( nextBlockClientId, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isUnmodifiedDefaultBlock( blockA ) ) {\n\t\t\tdispatch.removeBlock(\n\t\t\t\tclientIdA,\n\t\t\t\tselect.isBlockSelected( clientIdA )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isUnmodifiedDefaultBlock( blockB ) ) {\n\t\t\tdispatch.removeBlock(\n\t\t\t\tclientIdB,\n\t\t\t\tselect.isBlockSelected( clientIdB )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! blockAType.merge ) {\n\t\t\tdispatch.selectBlock( blockA.clientId );\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockBType = getBlockType( blockB.name );\n\t\tconst { clientId, attributeKey, offset } = select.getSelectionStart();\n\t\tconst selectedBlockType =\n\t\t\tclientId === clientIdA ? blockAType : blockBType;\n\t\tconst attributeDefinition =\n\t\t\tselectedBlockType.attributes[ attributeKey ];\n\t\tconst canRestoreTextSelection =\n\t\t\t( clientId === clientIdA || clientId === clientIdB ) &&\n\t\t\tattributeKey !== undefined &&\n\t\t\toffset !== undefined &&\n\t\t\t// We cannot restore text selection if the RichText identifier\n\t\t\t// is not a defined block attribute key. This can be the case if the\n\t\t\t// fallback intance ID is used to store selection (and no RichText\n\t\t\t// identifier is set), or when the identifier is wrong.\n\t\t\t!! attributeDefinition;\n\n\t\tif ( ! attributeDefinition ) {\n\t\t\tif ( typeof attributeKey === 'number' ) {\n\t\t\t\twindow.console.error(\n\t\t\t\t\t`RichText needs an identifier prop that is the block attribute key of the attribute it controls. Its type is expected to be a string, but was ${ typeof attributeKey }`\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\twindow.console.error(\n\t\t\t\t\t'The RichText identifier prop does not match any attributes defined by the block.'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Clone the blocks so we don't insert the character in a \"live\" block.\n\t\tconst cloneA = cloneBlock( blockA );\n\t\tconst cloneB = cloneBlock( blockB );\n\n\t\tif ( canRestoreTextSelection ) {\n\t\t\tconst selectedBlock = clientId === clientIdA ? cloneA : cloneB;\n\t\t\tconst html = selectedBlock.attributes[ attributeKey ];\n\t\t\tconst value = insert(\n\t\t\t\tcreate( { html } ),\n\t\t\t\tSTART_OF_SELECTED_AREA,\n\t\t\t\toffset,\n\t\t\t\toffset\n\t\t\t);\n\n\t\t\tselectedBlock.attributes[ attributeKey ] = toHTMLString( {\n\t\t\t\tvalue,\n\t\t\t} );\n\t\t}\n\n\t\t// We can only merge blocks with similar types\n\t\t// thus, we transform the block to merge first.\n\t\tconst blocksWithTheSameType =\n\t\t\tblockA.name === blockB.name\n\t\t\t\t? [ cloneB ]\n\t\t\t\t: switchToBlockType( cloneB, blockA.name );\n\n\t\t// If the block types can not match, do nothing.\n\t\tif ( ! blocksWithTheSameType || ! blocksWithTheSameType.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Calling the merge to update the attributes and remove the block to be merged.\n\t\tconst updatedAttributes = blockAType.merge(\n\t\t\tcloneA.attributes,\n\t\t\tblocksWithTheSameType[ 0 ].attributes\n\t\t);\n\n\t\tif ( canRestoreTextSelection ) {\n\t\t\tconst newAttributeKey =\n\t\t\t\tretrieveSelectedAttribute( updatedAttributes );\n\t\t\tconst convertedHtml = updatedAttributes[ newAttributeKey ];\n\t\t\tconst convertedValue = create( { html: convertedHtml } );\n\t\t\tconst newOffset = convertedValue.text.indexOf(\n\t\t\t\tSTART_OF_SELECTED_AREA\n\t\t\t);\n\t\t\tconst newValue = remove( convertedValue, newOffset, newOffset + 1 );\n\t\t\tconst newHtml = toHTMLString( { value: newValue } );\n\n\t\t\tupdatedAttributes[ newAttributeKey ] = newHtml;\n\n\t\t\tdispatch.selectionChange(\n\t\t\t\tblockA.clientId,\n\t\t\t\tnewAttributeKey,\n\t\t\t\tnewOffset,\n\t\t\t\tnewOffset\n\t\t\t);\n\t\t}\n\n\t\tdispatch.replaceBlocks(\n\t\t\t[ blockA.clientId, blockB.clientId ],\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\t...blockA,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t...blockA.attributes,\n\t\t\t\t\t\t...updatedAttributes,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...blocksWithTheSameType.slice( 1 ),\n\t\t\t],\n\t\t\t0 // If we don't pass the `indexToSelect` it will default to the last block.\n\t\t);\n\t};\n\n/**\n * Yields action objects used in signalling that the blocks corresponding to\n * the set of specified client IDs are to be removed.\n *\n * @param {string|string[]} clientIds Client IDs of blocks to remove.\n * @param {boolean} selectPrevious True if the previous block\n * or the immediate parent\n * (if no previous block exists)\n * should be selected\n * when a block is removed.\n */\nexport const removeBlocks = ( clientIds, selectPrevious = true ) =>\n\tprivateRemoveBlocks( clientIds, selectPrevious );\n\n/**\n * Returns an action object used in signalling that the block with the\n * specified client ID is to be removed.\n *\n * @param {string} clientId Client ID of block to remove.\n * @param {boolean} selectPrevious True if the previous block should be\n * selected when a block is removed.\n *\n * @return {Object} Action object.\n */\nexport function removeBlock( clientId, selectPrevious ) {\n\treturn removeBlocks( [ clientId ], selectPrevious );\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Returns an action object used in signalling that the inner blocks with the\n * specified client ID should be replaced.\n *\n * @param {string} rootClientId Client ID of the block whose InnerBlocks will re replaced.\n * @param {Object[]} blocks Block objects to insert as new InnerBlocks\n * @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to false.\n * @param {0|-1|null} initialPosition Initial block position.\n * @return {Object} Action object.\n */\nexport function replaceInnerBlocks(\n\trootClientId,\n\tblocks,\n\tupdateSelection = false,\n\tinitialPosition = 0\n) {\n\t/* eslint-enable jsdoc/valid-types */\n\treturn {\n\t\ttype: 'REPLACE_INNER_BLOCKS',\n\t\trootClientId,\n\t\tblocks,\n\t\tupdateSelection,\n\t\tinitialPosition: updateSelection ? initialPosition : null,\n\t\ttime: Date.now(),\n\t};\n}\n\n/**\n * Returns an action object used to toggle the block editing mode between\n * visual and HTML modes.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {Object} Action object.\n */\nexport function toggleBlockMode( clientId ) {\n\treturn {\n\t\ttype: 'TOGGLE_BLOCK_MODE',\n\t\tclientId,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has begun to type.\n *\n * @return {Object} Action object.\n */\nexport function startTyping() {\n\treturn {\n\t\ttype: 'START_TYPING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has stopped typing.\n *\n * @return {Object} Action object.\n */\nexport function stopTyping() {\n\treturn {\n\t\ttype: 'STOP_TYPING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has begun to drag blocks.\n *\n * @param {string[]} clientIds An array of client ids being dragged\n *\n * @return {Object} Action object.\n */\nexport function startDraggingBlocks( clientIds = [] ) {\n\treturn {\n\t\ttype: 'START_DRAGGING_BLOCKS',\n\t\tclientIds,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user has stopped dragging blocks.\n *\n * @return {Object} Action object.\n */\nexport function stopDraggingBlocks() {\n\treturn {\n\t\ttype: 'STOP_DRAGGING_BLOCKS',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the caret has entered formatted text.\n *\n * @deprecated\n *\n * @return {Object} Action object.\n */\nexport function enterFormattedText() {\n\tdeprecated( 'wp.data.dispatch( \"core/block-editor\" ).enterFormattedText', {\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t} );\n\treturn {\n\t\ttype: 'DO_NOTHING',\n\t};\n}\n\n/**\n * Returns an action object used in signalling that the user caret has exited formatted text.\n *\n * @deprecated\n *\n * @return {Object} Action object.\n */\nexport function exitFormattedText() {\n\tdeprecated( 'wp.data.dispatch( \"core/block-editor\" ).exitFormattedText', {\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t} );\n\treturn {\n\t\ttype: 'DO_NOTHING',\n\t};\n}\n\n/**\n * Action that changes the position of the user caret.\n *\n * @param {string|WPSelection} clientId The selected block client ID.\n * @param {string} attributeKey The selected block attribute key.\n * @param {number} startOffset The start offset.\n * @param {number} endOffset The end offset.\n *\n * @return {Object} Action object.\n */\nexport function selectionChange(\n\tclientId,\n\tattributeKey,\n\tstartOffset,\n\tendOffset\n) {\n\tif ( typeof clientId === 'string' ) {\n\t\treturn {\n\t\t\ttype: 'SELECTION_CHANGE',\n\t\t\tclientId,\n\t\t\tattributeKey,\n\t\t\tstartOffset,\n\t\t\tendOffset,\n\t\t};\n\t}\n\n\treturn { type: 'SELECTION_CHANGE', ...clientId };\n}\n\n/**\n * Action that adds a new block of the default type to the block list.\n *\n * @param {?Object} attributes Optional attributes of the block to assign.\n * @param {?string} rootClientId Optional root client ID of block list on which\n * to append.\n * @param {?number} index Optional index where to insert the default block.\n */\nexport const insertDefaultBlock =\n\t( attributes, rootClientId, index ) =>\n\t( { dispatch } ) => {\n\t\t// Abort if there is no default block type (if it has been unregistered).\n\t\tconst defaultBlockName = getDefaultBlockName();\n\t\tif ( ! defaultBlockName ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst block = createBlock( defaultBlockName, attributes );\n\n\t\treturn dispatch.insertBlock( block, index, rootClientId );\n\t};\n\n/**\n * @typedef {Object< string, Object >} SettingsByClientId\n */\n\n/**\n * Action that changes the nested settings of the given block(s).\n *\n * @param {string | SettingsByClientId} clientId Client ID of the block whose\n * nested setting are being\n * received, or object of settings\n * by client ID.\n * @param {Object} settings Object with the new settings\n * for the nested block.\n *\n * @return {Object} Action object\n */\nexport function updateBlockListSettings( clientId, settings ) {\n\treturn {\n\t\ttype: 'UPDATE_BLOCK_LIST_SETTINGS',\n\t\tclientId,\n\t\tsettings,\n\t};\n}\n\n/**\n * Action that updates the block editor settings.\n *\n * @param {Object} settings Updated settings\n *\n * @return {Object} Action object\n */\nexport function updateSettings( settings ) {\n\treturn __experimentalUpdateSettings( settings, {\n\t\tstripExperimentalSettings: true,\n\t} );\n}\n\n/**\n * Action that signals that a temporary reusable block has been saved\n * in order to switch its temporary id with the real id.\n *\n * @param {string} id Reusable block's id.\n * @param {string} updatedId Updated block's id.\n *\n * @return {Object} Action object.\n */\nexport function __unstableSaveReusableBlock( id, updatedId ) {\n\treturn {\n\t\ttype: 'SAVE_REUSABLE_BLOCK_SUCCESS',\n\t\tid,\n\t\tupdatedId,\n\t};\n}\n\n/**\n * Action that marks the last block change explicitly as persistent.\n *\n * @return {Object} Action object.\n */\nexport function __unstableMarkLastChangeAsPersistent() {\n\treturn { type: 'MARK_LAST_CHANGE_AS_PERSISTENT' };\n}\n\n/**\n * Action that signals that the next block change should be marked explicitly as not persistent.\n *\n * @return {Object} Action object.\n */\nexport function __unstableMarkNextChangeAsNotPersistent() {\n\treturn { type: 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT' };\n}\n\n/**\n * Action that marks the last block change as an automatic change, meaning it was not\n * performed by the user, and can be undone using the `Escape` and `Backspace` keys.\n * This action must be called after the change was made, and any actions that are a\n * consequence of it, so it is recommended to be called at the next idle period to ensure all\n * selection changes have been recorded.\n */\nexport const __unstableMarkAutomaticChange =\n\t() =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'MARK_AUTOMATIC_CHANGE' } );\n\t\tconst { requestIdleCallback = ( cb ) => setTimeout( cb, 100 ) } =\n\t\t\twindow;\n\t\trequestIdleCallback( () => {\n\t\t\tdispatch( { type: 'MARK_AUTOMATIC_CHANGE_FINAL' } );\n\t\t} );\n\t};\n\n/**\n * Action that enables or disables the navigation mode.\n *\n * @param {boolean} isNavigationMode Enable/Disable navigation mode.\n */\nexport const setNavigationMode =\n\t( isNavigationMode = true ) =>\n\t( { dispatch } ) => {\n\t\tdispatch.__unstableSetEditorMode(\n\t\t\tisNavigationMode ? 'navigation' : 'edit'\n\t\t);\n\t};\n\n/**\n * Action that sets the editor mode\n *\n * @param {string} mode Editor mode\n */\nexport const __unstableSetEditorMode =\n\t( mode ) =>\n\t( { dispatch, select } ) => {\n\t\t// When switching to zoom-out mode, we need to select the parent section\n\t\tif ( mode === 'zoom-out' ) {\n\t\t\tconst firstSelectedClientId = select.getBlockSelectionStart();\n\n\t\t\tconst sectionRootClientId = select.getSectionRootClientId();\n\n\t\t\tif ( firstSelectedClientId ) {\n\t\t\t\tlet sectionClientId;\n\n\t\t\t\tif ( sectionRootClientId ) {\n\t\t\t\t\tconst sectionClientIds =\n\t\t\t\t\t\tselect.getBlockOrder( sectionRootClientId );\n\n\t\t\t\t\t// If the selected block is a section block, use it.\n\t\t\t\t\tif ( sectionClientIds?.includes( firstSelectedClientId ) ) {\n\t\t\t\t\t\tsectionClientId = firstSelectedClientId;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If the selected block is not a section block, find\n\t\t\t\t\t\t// the parent section that contains the selected block.\n\t\t\t\t\t\tsectionClientId = select\n\t\t\t\t\t\t\t.getBlockParents( firstSelectedClientId )\n\t\t\t\t\t\t\t.find( ( parent ) =>\n\t\t\t\t\t\t\t\tsectionClientIds.includes( parent )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsectionClientId = select.getBlockHierarchyRootClientId(\n\t\t\t\t\t\tfirstSelectedClientId\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( sectionClientId ) {\n\t\t\t\t\tdispatch.selectBlock( sectionClientId );\n\t\t\t\t} else {\n\t\t\t\t\tdispatch.clearSelectedBlock();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdispatch( { type: 'SET_EDITOR_MODE', mode } );\n\n\t\tif ( mode === 'navigation' ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.'\n\t\t\t\t)\n\t\t\t);\n\t\t} else if ( mode === 'edit' ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'You are currently in edit mode. To return to the navigation mode, press Escape.'\n\t\t\t\t)\n\t\t\t);\n\t\t} else if ( mode === 'zoom-out' ) {\n\t\t\tspeak( __( 'You are currently in zoom-out mode.' ) );\n\t\t}\n\t};\n\n/**\n * Action that enables or disables the block moving mode.\n *\n * @param {string|null} hasBlockMovingClientId Enable/Disable block moving mode.\n */\nexport const setBlockMovingClientId =\n\t( hasBlockMovingClientId = null ) =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'SET_BLOCK_MOVING_MODE', hasBlockMovingClientId } );\n\n\t\tif ( hasBlockMovingClientId ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.'\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Action that duplicates a list of blocks.\n *\n * @param {string[]} clientIds\n * @param {boolean} updateSelection\n */\nexport const duplicateBlocks =\n\t( clientIds, updateSelection = true ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! clientIds || ! clientIds.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return early if blocks don't exist.\n\t\tconst blocks = select.getBlocksByClientId( clientIds );\n\t\tif ( blocks.some( ( block ) => ! block ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return early if blocks don't support multiple usage.\n\t\tconst blockNames = blocks.map( ( block ) => block.name );\n\t\tif (\n\t\t\tblockNames.some(\n\t\t\t\t( blockName ) =>\n\t\t\t\t\t! hasBlockSupport( blockName, 'multiple', true )\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rootClientId = select.getBlockRootClientId( clientIds[ 0 ] );\n\t\tconst clientIdsArray = castArray( clientIds );\n\t\tconst lastSelectedIndex = select.getBlockIndex(\n\t\t\tclientIdsArray[ clientIdsArray.length - 1 ]\n\t\t);\n\t\tconst clonedBlocks = blocks.map( ( block ) =>\n\t\t\t__experimentalCloneSanitizedBlock( block )\n\t\t);\n\t\tdispatch.insertBlocks(\n\t\t\tclonedBlocks,\n\t\t\tlastSelectedIndex + 1,\n\t\t\trootClientId,\n\t\t\tupdateSelection\n\t\t);\n\t\tif ( clonedBlocks.length > 1 && updateSelection ) {\n\t\t\tdispatch.multiSelect(\n\t\t\t\tclonedBlocks[ 0 ].clientId,\n\t\t\t\tclonedBlocks[ clonedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t\treturn clonedBlocks.map( ( block ) => block.clientId );\n\t};\n\n/**\n * Action that inserts a default block before a given block.\n *\n * @param {string} clientId\n */\nexport const insertBeforeBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! clientId ) {\n\t\t\treturn;\n\t\t}\n\t\tconst rootClientId = select.getBlockRootClientId( clientId );\n\t\tconst isLocked = select.getTemplateLock( rootClientId );\n\t\tif ( isLocked ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockIndex = select.getBlockIndex( clientId );\n\t\tconst directInsertBlock = rootClientId\n\t\t\t? select.getDirectInsertBlock( rootClientId )\n\t\t\t: null;\n\n\t\tif ( ! directInsertBlock ) {\n\t\t\treturn dispatch.insertDefaultBlock( {}, rootClientId, blockIndex );\n\t\t}\n\n\t\tconst copiedAttributes = {};\n\t\tif ( directInsertBlock.attributesToCopy ) {\n\t\t\tconst attributes = select.getBlockAttributes( clientId );\n\t\t\tdirectInsertBlock.attributesToCopy.forEach( ( key ) => {\n\t\t\t\tif ( attributes[ key ] ) {\n\t\t\t\t\tcopiedAttributes[ key ] = attributes[ key ];\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tconst block = createBlock( directInsertBlock.name, {\n\t\t\t...directInsertBlock.attributes,\n\t\t\t...copiedAttributes,\n\t\t} );\n\t\treturn dispatch.insertBlock( block, blockIndex, rootClientId );\n\t};\n\n/**\n * Action that inserts a default block after a given block.\n *\n * @param {string} clientId\n */\nexport const insertAfterBlock =\n\t( clientId ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! clientId ) {\n\t\t\treturn;\n\t\t}\n\t\tconst rootClientId = select.getBlockRootClientId( clientId );\n\t\tconst isLocked = select.getTemplateLock( rootClientId );\n\t\tif ( isLocked ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockIndex = select.getBlockIndex( clientId );\n\t\tconst directInsertBlock = rootClientId\n\t\t\t? select.getDirectInsertBlock( rootClientId )\n\t\t\t: null;\n\n\t\tif ( ! directInsertBlock ) {\n\t\t\treturn dispatch.insertDefaultBlock(\n\t\t\t\t{},\n\t\t\t\trootClientId,\n\t\t\t\tblockIndex + 1\n\t\t\t);\n\t\t}\n\n\t\tconst copiedAttributes = {};\n\t\tif ( directInsertBlock.attributesToCopy ) {\n\t\t\tconst attributes = select.getBlockAttributes( clientId );\n\t\t\tdirectInsertBlock.attributesToCopy.forEach( ( key ) => {\n\t\t\t\tif ( attributes[ key ] ) {\n\t\t\t\t\tcopiedAttributes[ key ] = attributes[ key ];\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tconst block = createBlock( directInsertBlock.name, {\n\t\t\t...directInsertBlock.attributes,\n\t\t\t...copiedAttributes,\n\t\t} );\n\t\treturn dispatch.insertBlock( block, blockIndex + 1, rootClientId );\n\t};\n\n/**\n * Action that toggles the highlighted block state.\n *\n * @param {string} clientId The block's clientId.\n * @param {boolean} isHighlighted The highlight state.\n */\nexport function toggleBlockHighlight( clientId, isHighlighted ) {\n\treturn {\n\t\ttype: 'TOGGLE_BLOCK_HIGHLIGHT',\n\t\tclientId,\n\t\tisHighlighted,\n\t};\n}\n\n/**\n * Action that \"flashes\" the block with a given `clientId` by rhythmically highlighting it.\n *\n * @param {string} clientId Target block client ID.\n */\nexport const flashBlock =\n\t( clientId ) =>\n\tasync ( { dispatch } ) => {\n\t\tdispatch( toggleBlockHighlight( clientId, true ) );\n\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 150 ) );\n\t\tdispatch( toggleBlockHighlight( clientId, false ) );\n\t};\n\n/**\n * Action that sets whether a block has controlled inner blocks.\n *\n * @param {string} clientId The block's clientId.\n * @param {boolean} hasControlledInnerBlocks True if the block's inner blocks are controlled.\n */\nexport function setHasControlledInnerBlocks(\n\tclientId,\n\thasControlledInnerBlocks\n) {\n\treturn {\n\t\ttype: 'SET_HAS_CONTROLLED_INNER_BLOCKS',\n\t\thasControlledInnerBlocks,\n\t\tclientId,\n\t};\n}\n\n/**\n * Action that sets whether given blocks are visible on the canvas.\n *\n * @param {Record} updates For each block's clientId, its new visibility setting.\n */\nexport function setBlockVisibility( updates ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_VISIBILITY',\n\t\tupdates,\n\t};\n}\n\n/**\n * Action that sets whether a block is being temporarily edited as blocks.\n *\n * DO-NOT-USE in production.\n * This action is created for internal/experimental only usage and may be\n * removed anytime without any warning, causing breakage on any plugin or theme invoking it.\n *\n * @param {?string} temporarilyEditingAsBlocks The block's clientId being temporarily edited as blocks.\n * @param {?string} focusModeToRevert The focus mode to revert after temporarily edit as blocks finishes.\n */\nexport function __unstableSetTemporarilyEditingAsBlocks(\n\ttemporarilyEditingAsBlocks,\n\tfocusModeToRevert\n) {\n\treturn {\n\t\ttype: 'SET_TEMPORARILY_EDITING_AS_BLOCKS',\n\t\ttemporarilyEditingAsBlocks,\n\t\tfocusModeToRevert,\n\t};\n}\n\n/**\n * Interface for inserter media requests.\n *\n * @typedef {Object} InserterMediaRequest\n * @property {number} per_page How many items to fetch per page.\n * @property {string} search The search term to use for filtering the results.\n */\n\n/**\n * Interface for inserter media responses. Any media resource should\n * map their response to this interface, in order to create the core\n * WordPress media blocks (image, video, audio).\n *\n * @typedef {Object} InserterMediaItem\n * @property {string} title The title of the media item.\n * @property {string} url The source url of the media item.\n * @property {string} [previewUrl] The preview source url of the media item to display in the media list.\n * @property {number} [id] The WordPress id of the media item.\n * @property {number|string} [sourceId] The id of the media item from external source.\n * @property {string} [alt] The alt text of the media item.\n * @property {string} [caption] The caption of the media item.\n */\n\n/**\n * Registers a new inserter media category. Once registered, the media category is\n * available in the inserter's media tab.\n *\n * The following interfaces are used:\n *\n * _Type Definition_\n *\n * - _InserterMediaRequest_ `Object`: Interface for inserter media requests.\n *\n * _Properties_\n *\n * - _per_page_ `number`: How many items to fetch per page.\n * - _search_ `string`: The search term to use for filtering the results.\n *\n * _Type Definition_\n *\n * - _InserterMediaItem_ `Object`: Interface for inserter media responses. Any media resource should\n * map their response to this interface, in order to create the core\n * WordPress media blocks (image, video, audio).\n *\n * _Properties_\n *\n * - _title_ `string`: The title of the media item.\n * - _url_ `string: The source url of the media item.\n * - _previewUrl_ `[string]`: The preview source url of the media item to display in the media list.\n * - _id_ `[number]`: The WordPress id of the media item.\n * - _sourceId_ `[number|string]`: The id of the media item from external source.\n * - _alt_ `[string]`: The alt text of the media item.\n * - _caption_ `[string]`: The caption of the media item.\n *\n * @param {InserterMediaCategory} category The inserter media category to register.\n *\n * @example\n * ```js\n *\n * wp.data.dispatch('core/block-editor').registerInserterMediaCategory( {\n * \t name: 'openverse',\n * \t labels: {\n * \t \tname: 'Openverse',\n * \t \tsearch_items: 'Search Openverse',\n * \t },\n * \t mediaType: 'image',\n * \t async fetch( query = {} ) {\n * \t \tconst defaultArgs = {\n * \t \t\tmature: false,\n * \t \t\texcluded_source: 'flickr,inaturalist,wikimedia',\n * \t \t\tlicense: 'pdm,cc0',\n * \t \t};\n * \t \tconst finalQuery = { ...query, ...defaultArgs };\n * \t \t// Sometimes you might need to map the supported request params according to `InserterMediaRequest`.\n * \t \t// interface. In this example the `search` query param is named `q`.\n * \t \tconst mapFromInserterMediaRequest = {\n * \t \t\tper_page: 'page_size',\n * \t \t\tsearch: 'q',\n * \t \t};\n * \t \tconst url = new URL( 'https://api.openverse.org/v1/images/' );\n * \t \tObject.entries( finalQuery ).forEach( ( [ key, value ] ) => {\n * \t \t\tconst queryKey = mapFromInserterMediaRequest[ key ] || key;\n * \t \t\turl.searchParams.set( queryKey, value );\n * \t \t} );\n * \t \tconst response = await window.fetch( url, {\n * \t \t\theaders: {\n * \t \t\t\t'User-Agent': 'WordPress/inserter-media-fetch',\n * \t \t\t},\n * \t \t} );\n * \t \tconst jsonResponse = await response.json();\n * \t \tconst results = jsonResponse.results;\n * \t \treturn results.map( ( result ) => ( {\n * \t \t\t...result,\n * \t \t\t// If your response result includes an `id` prop that you want to access later, it should\n * \t \t\t// be mapped to `InserterMediaItem`'s `sourceId` prop. This can be useful if you provide\n * \t \t\t// a report URL getter.\n * \t \t\t// Additionally you should always clear the `id` value of your response results because\n * \t \t\t// it is used to identify WordPress media items.\n * \t \t\tsourceId: result.id,\n * \t \t\tid: undefined,\n * \t \t\tcaption: result.caption,\n * \t \t\tpreviewUrl: result.thumbnail,\n * \t \t} ) );\n * \t },\n * \t getReportUrl: ( { sourceId } ) =>\n * \t \t`https://wordpress.org/openverse/image/${ sourceId }/report/`,\n * \t isExternalResource: true,\n * } );\n * ```\n *\n * @typedef {Object} InserterMediaCategory Interface for inserter media category.\n * @property {string} name The name of the media category, that should be unique among all media categories.\n * @property {Object} labels Labels for the media category.\n * @property {string} labels.name General name of the media category. It's used in the inserter media items list.\n * @property {string} [labels.search_items='Search'] Label for searching items. Default is ‘Search Posts’ / ‘Search Pages’.\n * @property {('image'|'audio'|'video')} mediaType The media type of the media category.\n * @property {(InserterMediaRequest) => Promise} fetch The function to fetch media items for the category.\n * @property {(InserterMediaItem) => string} [getReportUrl] If the media category supports reporting media items, this function should return\n * the report url for the media item. It accepts the `InserterMediaItem` as an argument.\n * @property {boolean} [isExternalResource] If the media category is an external resource, this should be set to true.\n * This is used to avoid making a request to the external resource when the user\n */\nexport const registerInserterMediaCategory =\n\t( category ) =>\n\t( { select, dispatch } ) => {\n\t\tif ( ! category || typeof category !== 'object' ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should be an `InserterMediaCategory` object.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ( ! category.name ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should have a `name` that should be unique among all media categories.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ( ! category.labels?.name ) {\n\t\t\tconsole.error( 'Category should have a `labels.name`.' );\n\t\t\treturn;\n\t\t}\n\t\tif ( ! [ 'image', 'audio', 'video' ].includes( category.mediaType ) ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should have `mediaType` property that is one of `image|audio|video`.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ( ! category.fetch || typeof category.fetch !== 'function' ) {\n\t\t\tconsole.error(\n\t\t\t\t'Category should have a `fetch` function defined with the following signature `(InserterMediaRequest) => Promise`.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst registeredInserterMediaCategories =\n\t\t\tselect.getRegisteredInserterMediaCategories();\n\t\tif (\n\t\t\tregisteredInserterMediaCategories.some(\n\t\t\t\t( { name } ) => name === category.name\n\t\t\t)\n\t\t) {\n\t\t\tconsole.error(\n\t\t\t\t`A category is already registered with the same name: \"${ category.name }\".`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\tregisteredInserterMediaCategories.some(\n\t\t\t\t( { labels: { name } = {} } ) => name === category.labels?.name\n\t\t\t)\n\t\t) {\n\t\t\tconsole.error(\n\t\t\t\t`A category is already registered with the same labels.name: \"${ category.labels.name }\".`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\t// `inserterMediaCategories` is a private block editor setting, which means it cannot\n\t\t// be updated through the public `updateSettings` action. We preserve this setting as\n\t\t// private, so extenders can only add new inserter media categories and don't have any\n\t\t// control over the core media categories.\n\t\tdispatch( {\n\t\t\ttype: 'REGISTER_INSERTER_MEDIA_CATEGORY',\n\t\t\tcategory: { ...category, isExternalResource: true },\n\t\t} );\n\t};\n\n/**\n * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode\n */\n\n/**\n * Sets the block editing mode for a given block.\n *\n * @see useBlockEditingMode\n *\n * @param {string} clientId The block client ID, or `''` for the root container.\n * @param {BlockEditingMode} mode The block editing mode. One of `'disabled'`,\n * `'contentOnly'`, or `'default'`.\n *\n * @return {Object} Action object.\n */\nexport function setBlockEditingMode( clientId = '', mode ) {\n\treturn {\n\t\ttype: 'SET_BLOCK_EDITING_MODE',\n\t\tclientId,\n\t\tmode,\n\t};\n}\n\n/**\n * Clears the block editing mode for a given block.\n *\n * @see useBlockEditingMode\n *\n * @param {string} clientId The block client ID, or `''` for the root container.\n *\n * @return {Object} Action object.\n */\nexport function unsetBlockEditingMode( clientId = '' ) {\n\treturn {\n\t\ttype: 'UNSET_BLOCK_EDITING_MODE',\n\t\tclientId,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { createReduxStore, registerStore } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as privateActions from './private-actions';\nimport * as privateSelectors from './private-selectors';\nimport * as actions from './actions';\nimport { STORE_NAME } from './constants';\nimport { unlock } from '../lock-unlock';\n\n/**\n * Block editor data store configuration.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore\n */\nexport const storeConfig = {\n\treducer,\n\tselectors,\n\tactions,\n};\n\n/**\n * Store definition for the block editor namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n */\nexport const store = createReduxStore( STORE_NAME, {\n\t...storeConfig,\n\tpersist: [ 'preferences' ],\n} );\n\n// We will be able to use the `register` function once we switch\n// the \"preferences\" persistence to use the new preferences package.\nconst registeredStore = registerStore( STORE_NAME, {\n\t...storeConfig,\n\tpersist: [ 'preferences' ],\n} );\nunlock( registeredStore ).registerPrivateActions( privateActions );\nunlock( registeredStore ).registerPrivateSelectors( privateSelectors );\n\n// TODO: Remove once we switch to the `register` function (see above).\n//\n// Until then, private functions also need to be attached to the original\n// `store` descriptor in order to avoid unit tests failing, which could happen\n// when tests create new registries in which they register stores.\n//\n// @see https://github.com/WordPress/gutenberg/pull/51145#discussion_r1239999590\nunlock( store ).registerPrivateActions( privateActions );\nunlock( store ).registerPrivateSelectors( privateSelectors );\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Hook that retrieves the given settings for the block instance in use.\n *\n * It looks up the settings first in the block instance hierarchy.\n * If none are found, it'll look them up in the block editor settings.\n *\n * @param {string[]} paths The paths to the settings.\n * @return {any[]} Returns the values defined for the settings.\n * @example\n * ```js\n * const [ fixed, sticky ] = useSettings( 'position.fixed', 'position.sticky' );\n * ```\n */\nexport function useSettings( ...paths ) {\n\tconst { clientId = null } = useBlockEditContext();\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getBlockSettings(\n\t\t\t\tclientId,\n\t\t\t\t...paths\n\t\t\t),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[ clientId, ...paths ]\n\t);\n}\n\n/**\n * Hook that retrieves the given setting for the block instance in use.\n *\n * It looks up the setting first in the block instance hierarchy.\n * If none is found, it'll look it up in the block editor settings.\n *\n * @deprecated 6.5.0 Use useSettings instead.\n *\n * @param {string} path The path to the setting.\n * @return {any} Returns the value defined for the setting.\n * @example\n * ```js\n * const isEnabled = useSetting( 'typography.dropCap' );\n * ```\n */\nexport function useSetting( path ) {\n\tdeprecated( 'wp.blockEditor.useSetting', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.useSettings',\n\t\tnote: 'The new useSettings function can retrieve multiple settings at once, with better performance.',\n\t} );\n\n\tconst [ value ] = useSettings( path );\n\treturn value;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"styleEngine\"];","/**\n * The fluid utilities must match the backend equivalent.\n * See: gutenberg_get_typography_font_size_value() in lib/block-supports/typography.php\n * ---------------------------------------------------------------\n */\n\n// Defaults.\nconst DEFAULT_MAXIMUM_VIEWPORT_WIDTH = '1600px';\nconst DEFAULT_MINIMUM_VIEWPORT_WIDTH = '320px';\nconst DEFAULT_SCALE_FACTOR = 1;\nconst DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN = 0.25;\nconst DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX = 0.75;\nconst DEFAULT_MINIMUM_FONT_SIZE_LIMIT = '14px';\n\n/**\n * Computes a fluid font-size value that uses clamp(). A minimum and maximum\n * font size OR a single font size can be specified.\n *\n * If a single font size is specified, it is scaled up and down using a logarithmic scale.\n *\n * @example\n * ```js\n * // Calculate fluid font-size value from a minimum and maximum value.\n * const fontSize = getComputedFluidTypographyValue( {\n * minimumFontSize: '20px',\n * maximumFontSize: '45px'\n * } );\n * // Calculate fluid font-size value from a single font size.\n * const fontSize = getComputedFluidTypographyValue( {\n * fontSize: '30px',\n * } );\n * ```\n *\n * @param {Object} args\n * @param {?string} args.minimumViewportWidth Minimum viewport size from which type will have fluidity. Optional if fontSize is specified.\n * @param {?string} args.maximumViewportWidth Maximum size up to which type will have fluidity. Optional if fontSize is specified.\n * @param {string|number} [args.fontSize] Size to derive maximumFontSize and minimumFontSize from, if necessary. Optional if minimumFontSize and maximumFontSize are specified.\n * @param {?string} args.maximumFontSize Maximum font size for any clamp() calculation. Optional.\n * @param {?string} args.minimumFontSize Minimum font size for any clamp() calculation. Optional.\n * @param {?number} args.scaleFactor A scale factor to determine how fast a font scales within boundaries. Optional.\n * @param {?string} args.minimumFontSizeLimit The smallest a calculated font size may be. Optional.\n *\n * @return {string|null} A font-size value using clamp().\n */\nexport function getComputedFluidTypographyValue( {\n\tminimumFontSize,\n\tmaximumFontSize,\n\tfontSize,\n\tminimumViewportWidth = DEFAULT_MINIMUM_VIEWPORT_WIDTH,\n\tmaximumViewportWidth = DEFAULT_MAXIMUM_VIEWPORT_WIDTH,\n\tscaleFactor = DEFAULT_SCALE_FACTOR,\n\tminimumFontSizeLimit,\n} ) {\n\t// Validate incoming settings and set defaults.\n\tminimumFontSizeLimit = !! getTypographyValueAndUnit( minimumFontSizeLimit )\n\t\t? minimumFontSizeLimit\n\t\t: DEFAULT_MINIMUM_FONT_SIZE_LIMIT;\n\n\t/*\n\t * Calculates missing minimumFontSize and maximumFontSize from\n\t * defaultFontSize if provided.\n\t */\n\tif ( fontSize ) {\n\t\t// Parses default font size.\n\t\tconst fontSizeParsed = getTypographyValueAndUnit( fontSize );\n\n\t\t// Protect against invalid units.\n\t\tif ( ! fontSizeParsed?.unit ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Parses the minimum font size limit, so we can perform checks using it.\n\t\tconst minimumFontSizeLimitParsed = getTypographyValueAndUnit(\n\t\t\tminimumFontSizeLimit,\n\t\t\t{\n\t\t\t\tcoerceTo: fontSizeParsed.unit,\n\t\t\t}\n\t\t);\n\n\t\t// Don't enforce minimum font size if a font size has explicitly set a min and max value.\n\t\tif (\n\t\t\t!! minimumFontSizeLimitParsed?.value &&\n\t\t\t! minimumFontSize &&\n\t\t\t! maximumFontSize\n\t\t) {\n\t\t\t/*\n\t\t\t * If a minimum size was not passed to this function\n\t\t\t * and the user-defined font size is lower than $minimum_font_size_limit,\n\t\t\t * do not calculate a fluid value.\n\t\t\t */\n\t\t\tif ( fontSizeParsed?.value <= minimumFontSizeLimitParsed?.value ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// If no fluid max font size is available use the incoming value.\n\t\tif ( ! maximumFontSize ) {\n\t\t\tmaximumFontSize = `${ fontSizeParsed.value }${ fontSizeParsed.unit }`;\n\t\t}\n\n\t\t/*\n\t\t * If no minimumFontSize is provided, create one using\n\t\t * the given font size multiplied by the min font size scale factor.\n\t\t */\n\t\tif ( ! minimumFontSize ) {\n\t\t\tconst fontSizeValueInPx =\n\t\t\t\tfontSizeParsed.unit === 'px'\n\t\t\t\t\t? fontSizeParsed.value\n\t\t\t\t\t: fontSizeParsed.value * 16;\n\n\t\t\t/*\n\t\t\t * The scale factor is a multiplier that affects how quickly the curve will move towards the minimum,\n\t\t\t * that is, how quickly the size factor reaches 0 given increasing font size values.\n\t\t\t * For a - b * log2(), lower values of b will make the curve move towards the minimum faster.\n\t\t\t * The scale factor is constrained between min and max values.\n\t\t\t */\n\t\t\tconst minimumFontSizeFactor = Math.min(\n\t\t\t\tMath.max(\n\t\t\t\t\t1 - 0.075 * Math.log2( fontSizeValueInPx ),\n\t\t\t\t\tDEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN\n\t\t\t\t),\n\t\t\t\tDEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX\n\t\t\t);\n\n\t\t\t// Calculates the minimum font size.\n\t\t\tconst calculatedMinimumFontSize = roundToPrecision(\n\t\t\t\tfontSizeParsed.value * minimumFontSizeFactor,\n\t\t\t\t3\n\t\t\t);\n\n\t\t\t// Only use calculated min font size if it's > $minimum_font_size_limit value.\n\t\t\tif (\n\t\t\t\t!! minimumFontSizeLimitParsed?.value &&\n\t\t\t\tcalculatedMinimumFontSize < minimumFontSizeLimitParsed?.value\n\t\t\t) {\n\t\t\t\tminimumFontSize = `${ minimumFontSizeLimitParsed.value }${ minimumFontSizeLimitParsed.unit }`;\n\t\t\t} else {\n\t\t\t\tminimumFontSize = `${ calculatedMinimumFontSize }${ fontSizeParsed.unit }`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Grab the minimum font size and normalize it in order to use the value for calculations.\n\tconst minimumFontSizeParsed = getTypographyValueAndUnit( minimumFontSize );\n\n\t// We get a 'preferred' unit to keep units consistent when calculating,\n\t// otherwise the result will not be accurate.\n\tconst fontSizeUnit = minimumFontSizeParsed?.unit || 'rem';\n\n\t// Grabs the maximum font size and normalize it in order to use the value for calculations.\n\tconst maximumFontSizeParsed = getTypographyValueAndUnit( maximumFontSize, {\n\t\tcoerceTo: fontSizeUnit,\n\t} );\n\n\t// Checks for mandatory min and max sizes, and protects against unsupported units.\n\tif ( ! minimumFontSizeParsed || ! maximumFontSizeParsed ) {\n\t\treturn null;\n\t}\n\n\t// Uses rem for accessible fluid target font scaling.\n\tconst minimumFontSizeRem = getTypographyValueAndUnit( minimumFontSize, {\n\t\tcoerceTo: 'rem',\n\t} );\n\n\t// Viewport widths defined for fluid typography. Normalize units\n\tconst maximumViewportWidthParsed = getTypographyValueAndUnit(\n\t\tmaximumViewportWidth,\n\t\t{ coerceTo: fontSizeUnit }\n\t);\n\tconst minimumViewportWidthParsed = getTypographyValueAndUnit(\n\t\tminimumViewportWidth,\n\t\t{ coerceTo: fontSizeUnit }\n\t);\n\n\t// Protect against unsupported units.\n\tif (\n\t\t! maximumViewportWidthParsed ||\n\t\t! minimumViewportWidthParsed ||\n\t\t! minimumFontSizeRem\n\t) {\n\t\treturn null;\n\t}\n\n\t// Calculates the linear factor denominator. If it's 0, we cannot calculate a fluid value.\n\tconst linearDenominator =\n\t\tmaximumViewportWidthParsed.value - minimumViewportWidthParsed.value;\n\tif ( ! linearDenominator ) {\n\t\treturn null;\n\t}\n\n\t// Build CSS rule.\n\t// Borrowed from https://websemantics.uk/tools/responsive-font-calculator/.\n\tconst minViewportWidthOffsetValue = roundToPrecision(\n\t\tminimumViewportWidthParsed.value / 100,\n\t\t3\n\t);\n\n\tconst viewportWidthOffset =\n\t\troundToPrecision( minViewportWidthOffsetValue, 3 ) + fontSizeUnit;\n\tconst linearFactor =\n\t\t100 *\n\t\t( ( maximumFontSizeParsed.value - minimumFontSizeParsed.value ) /\n\t\t\tlinearDenominator );\n\tconst linearFactorScaled = roundToPrecision(\n\t\t( linearFactor || 1 ) * scaleFactor,\n\t\t3\n\t);\n\tconst fluidTargetFontSize = `${ minimumFontSizeRem.value }${ minimumFontSizeRem.unit } + ((1vw - ${ viewportWidthOffset }) * ${ linearFactorScaled })`;\n\n\treturn `clamp(${ minimumFontSize }, ${ fluidTargetFontSize }, ${ maximumFontSize })`;\n}\n\n/**\n * Internal method that checks a string for a unit and value and returns an array consisting of `'value'` and `'unit'`, e.g., [ '42', 'rem' ].\n * A raw font size of `value + unit` is expected. If the value is an integer, it will convert to `value + 'px'`.\n *\n * @param {string|number} rawValue Raw size value from theme.json.\n * @param {Object|undefined} options Calculation options.\n *\n * @return {{ unit: string, value: number }|null} An object consisting of `'value'` and `'unit'` properties.\n */\nexport function getTypographyValueAndUnit( rawValue, options = {} ) {\n\tif ( typeof rawValue !== 'string' && typeof rawValue !== 'number' ) {\n\t\treturn null;\n\t}\n\n\t// Converts numeric values to pixel values by default.\n\tif ( isFinite( rawValue ) ) {\n\t\trawValue = `${ rawValue }px`;\n\t}\n\n\tconst { coerceTo, rootSizeValue, acceptableUnits } = {\n\t\tcoerceTo: '',\n\t\t// Default browser font size. Later we could inject some JS to compute this `getComputedStyle( document.querySelector( \"html\" ) ).fontSize`.\n\t\trootSizeValue: 16,\n\t\tacceptableUnits: [ 'rem', 'px', 'em' ],\n\t\t...options,\n\t};\n\n\tconst acceptableUnitsGroup = acceptableUnits?.join( '|' );\n\tconst regexUnits = new RegExp(\n\t\t`^(\\\\d*\\\\.?\\\\d+)(${ acceptableUnitsGroup }){1,1}$`\n\t);\n\n\tconst matches = rawValue.match( regexUnits );\n\n\t// We need a number value and a unit.\n\tif ( ! matches || matches.length < 3 ) {\n\t\treturn null;\n\t}\n\n\tlet [ , value, unit ] = matches;\n\n\tlet returnValue = parseFloat( value );\n\n\tif ( 'px' === coerceTo && ( 'em' === unit || 'rem' === unit ) ) {\n\t\treturnValue = returnValue * rootSizeValue;\n\t\tunit = coerceTo;\n\t}\n\n\tif ( 'px' === unit && ( 'em' === coerceTo || 'rem' === coerceTo ) ) {\n\t\treturnValue = returnValue / rootSizeValue;\n\t\tunit = coerceTo;\n\t}\n\n\t/*\n\t * No calculation is required if swapping between em and rem yet,\n\t * since we assume a root size value. Later we might like to differentiate between\n\t * :root font size (rem) and parent element font size (em) relativity.\n\t */\n\tif (\n\t\t( 'em' === coerceTo || 'rem' === coerceTo ) &&\n\t\t( 'em' === unit || 'rem' === unit )\n\t) {\n\t\tunit = coerceTo;\n\t}\n\n\treturn {\n\t\tvalue: roundToPrecision( returnValue, 3 ),\n\t\tunit,\n\t};\n}\n\n/**\n * Returns a value rounded to defined precision.\n * Returns `undefined` if the value is not a valid finite number.\n *\n * @param {number} value Raw value.\n * @param {number} digits The number of digits to appear after the decimal point\n *\n * @return {number|undefined} Value rounded to standard precision.\n */\nexport function roundToPrecision( value, digits = 3 ) {\n\tconst base = Math.pow( 10, digits );\n\treturn Number.isFinite( value )\n\t\t? parseFloat( Math.round( value * base ) / base )\n\t\t: undefined;\n}\n","/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Formats font weights to human readable names.\n *\n * @param {string} fontWeight font weight string\n * @return {Object} new object with formatted font weight\n */\nexport function formatFontWeight( fontWeight ) {\n\tif ( ! fontWeight ) {\n\t\treturn {};\n\t}\n\n\tif ( typeof fontWeight === 'object' ) {\n\t\treturn fontWeight;\n\t}\n\n\tlet name;\n\n\tswitch ( fontWeight ) {\n\t\tcase 'normal':\n\t\tcase '400':\n\t\t\tname = _x( 'Regular', 'font weight' );\n\t\t\tbreak;\n\t\tcase 'bold':\n\t\tcase '700':\n\t\t\tname = _x( 'Bold', 'font weight' );\n\t\t\tbreak;\n\t\tcase '100':\n\t\t\tname = _x( 'Thin', 'font weight' );\n\t\t\tbreak;\n\t\tcase '200':\n\t\t\tname = _x( 'Extra Light', 'font weight' );\n\t\t\tbreak;\n\t\tcase '300':\n\t\t\tname = _x( 'Light', 'font weight' );\n\t\t\tbreak;\n\t\tcase '500':\n\t\t\tname = _x( 'Medium', 'font weight' );\n\t\t\tbreak;\n\t\tcase '600':\n\t\t\tname = _x( 'Semi Bold', 'font weight' );\n\t\t\tbreak;\n\t\tcase '800':\n\t\t\tname = _x( 'Extra Bold', 'font weight' );\n\t\t\tbreak;\n\t\tcase '900':\n\t\t\tname = _x( 'Black', 'font weight' );\n\t\t\tbreak;\n\t\tcase '1000':\n\t\t\tname = _x( 'Extra Black', 'font weight' );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tname = fontWeight;\n\t\t\tbreak;\n\t}\n\n\treturn { name, value: fontWeight };\n}\n","/**\n * WordPress dependencies\n */\nimport { _x, __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { formatFontStyle } from './format-font-style';\nimport { formatFontWeight } from './format-font-weight';\n\nconst FONT_STYLES = [\n\t{\n\t\tname: _x( 'Regular', 'font style' ),\n\t\tvalue: 'normal',\n\t},\n\t{\n\t\tname: _x( 'Italic', 'font style' ),\n\t\tvalue: 'italic',\n\t},\n];\n\nconst FONT_WEIGHTS = [\n\t{\n\t\tname: _x( 'Thin', 'font weight' ),\n\t\tvalue: '100',\n\t},\n\t{\n\t\tname: _x( 'Extra Light', 'font weight' ),\n\t\tvalue: '200',\n\t},\n\t{\n\t\tname: _x( 'Light', 'font weight' ),\n\t\tvalue: '300',\n\t},\n\t{\n\t\tname: _x( 'Regular', 'font weight' ),\n\t\tvalue: '400',\n\t},\n\t{\n\t\tname: _x( 'Medium', 'font weight' ),\n\t\tvalue: '500',\n\t},\n\t{\n\t\tname: _x( 'Semi Bold', 'font weight' ),\n\t\tvalue: '600',\n\t},\n\t{\n\t\tname: _x( 'Bold', 'font weight' ),\n\t\tvalue: '700',\n\t},\n\t{\n\t\tname: _x( 'Extra Bold', 'font weight' ),\n\t\tvalue: '800',\n\t},\n\t{\n\t\tname: _x( 'Black', 'font weight' ),\n\t\tvalue: '900',\n\t},\n\t{\n\t\tname: _x( 'Extra Black', 'font weight' ),\n\t\tvalue: '1000',\n\t},\n];\n\n/**\n * Builds a list of font style and weight options based on font family faces.\n * Defaults to the standard font styles and weights if no font family faces are provided.\n *\n * @param {Array} fontFamilyFaces font family faces array\n * @return {Object} new object with combined and separated font style and weight properties\n */\nexport function getFontStylesAndWeights( fontFamilyFaces ) {\n\tlet fontStyles = [];\n\tlet fontWeights = [];\n\tconst combinedStyleAndWeightOptions = [];\n\tconst isSystemFont = ! fontFamilyFaces || fontFamilyFaces?.length === 0;\n\tlet isVariableFont = false;\n\n\tfontFamilyFaces?.forEach( ( face ) => {\n\t\t// Check for variable font by looking for a space in the font weight value. e.g. \"100 900\"\n\t\tif (\n\t\t\t'string' === typeof face.fontWeight &&\n\t\t\t/\\s/.test( face.fontWeight.trim() )\n\t\t) {\n\t\t\tisVariableFont = true;\n\n\t\t\t// Find font weight start and end values.\n\t\t\tlet [ startValue, endValue ] = face.fontWeight.split( ' ' );\n\t\t\tstartValue = parseInt( startValue.slice( 0, 1 ) );\n\t\t\tif ( endValue === '1000' ) {\n\t\t\t\tendValue = 10;\n\t\t\t} else {\n\t\t\t\tendValue = parseInt( endValue.slice( 0, 1 ) );\n\t\t\t}\n\n\t\t\t// Create font weight options for available variable weights.\n\t\t\tfor ( let i = startValue; i <= endValue; i++ ) {\n\t\t\t\tconst fontWeightValue = `${ i.toString() }00`;\n\t\t\t\tif (\n\t\t\t\t\t! fontWeights.some(\n\t\t\t\t\t\t( weight ) => weight.value === fontWeightValue\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tfontWeights.push( formatFontWeight( fontWeightValue ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Format font style and weight values.\n\t\tconst fontWeight = formatFontWeight(\n\t\t\t'number' === typeof face.fontWeight\n\t\t\t\t? face.fontWeight.toString()\n\t\t\t\t: face.fontWeight\n\t\t);\n\t\tconst fontStyle = formatFontStyle( face.fontStyle );\n\n\t\t// Create font style and font weight lists without duplicates.\n\t\tif ( fontStyle && Object.keys( fontStyle ).length ) {\n\t\t\tif (\n\t\t\t\t! fontStyles.some(\n\t\t\t\t\t( style ) => style.value === fontStyle.value\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tfontStyles.push( fontStyle );\n\t\t\t}\n\t\t}\n\n\t\tif ( fontWeight && Object.keys( fontWeight ).length ) {\n\t\t\tif (\n\t\t\t\t! fontWeights.some(\n\t\t\t\t\t( weight ) => weight.value === fontWeight.value\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif ( ! isVariableFont ) {\n\t\t\t\t\tfontWeights.push( fontWeight );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t// If there is no font weight of 600 or above, then include faux bold as an option.\n\tif ( ! fontWeights.some( ( weight ) => weight.value >= '600' ) ) {\n\t\tfontWeights.push( {\n\t\t\tname: _x( 'Bold', 'font weight' ),\n\t\t\tvalue: '700',\n\t\t} );\n\t}\n\n\t// If there is no italic font style, then include faux italic as an option.\n\tif ( ! fontStyles.some( ( style ) => style.value === 'italic' ) ) {\n\t\tfontStyles.push( {\n\t\t\tname: _x( 'Italic', 'font style' ),\n\t\t\tvalue: 'italic',\n\t\t} );\n\t}\n\n\t// Use default font styles and weights for system fonts.\n\tif ( isSystemFont ) {\n\t\tfontStyles = FONT_STYLES;\n\t\tfontWeights = FONT_WEIGHTS;\n\t}\n\n\t// Use default styles and weights if there are no available styles or weights from the provided font faces.\n\tfontStyles = fontStyles.length === 0 ? FONT_STYLES : fontStyles;\n\tfontWeights = fontWeights.length === 0 ? FONT_WEIGHTS : fontWeights;\n\n\t// Generate combined font style and weight options for available fonts.\n\tfontStyles.forEach( ( { name: styleName, value: styleValue } ) => {\n\t\tfontWeights.forEach( ( { name: weightName, value: weightValue } ) => {\n\t\t\tconst optionName =\n\t\t\t\tstyleValue === 'normal'\n\t\t\t\t\t? weightName\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t/* translators: 1: Font weight name. 2: Font style name. */\n\t\t\t\t\t\t\t__( '%1$s %2$s' ),\n\t\t\t\t\t\t\tweightName,\n\t\t\t\t\t\t\tstyleName\n\t\t\t\t\t );\n\n\t\t\tcombinedStyleAndWeightOptions.push( {\n\t\t\t\tkey: `${ styleValue }-${ weightValue }`,\n\t\t\t\tname: optionName,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontStyle: styleValue,\n\t\t\t\t\tfontWeight: weightValue,\n\t\t\t\t},\n\t\t\t} );\n\t\t} );\n\t} );\n\n\treturn {\n\t\tfontStyles,\n\t\tfontWeights,\n\t\tcombinedStyleAndWeightOptions,\n\t\tisSystemFont,\n\t\tisVariableFont,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Formats font styles to human readable names.\n *\n * @param {string} fontStyle font style string\n * @return {Object} new object with formatted font style\n */\nexport function formatFontStyle( fontStyle ) {\n\tif ( ! fontStyle ) {\n\t\treturn {};\n\t}\n\n\tif ( typeof fontStyle === 'object' ) {\n\t\treturn fontStyle;\n\t}\n\n\tlet name;\n\n\tswitch ( fontStyle ) {\n\t\tcase 'normal':\n\t\t\tname = _x( 'Regular', 'font style' );\n\t\t\tbreak;\n\t\tcase 'italic':\n\t\t\tname = _x( 'Italic', 'font style' );\n\t\t\tbreak;\n\t\tcase 'oblique':\n\t\t\tname = _x( 'Oblique', 'font style' );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tname = fontStyle;\n\t\t\tbreak;\n\t}\n\n\treturn { name, value: fontStyle };\n}\n","/**\n * The fluid utilities must match the backend equivalent.\n * See: gutenberg_get_typography_font_size_value() in lib/block-supports/typography.php\n * ---------------------------------------------------------------\n */\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetComputedFluidTypographyValue,\n\tgetTypographyValueAndUnit,\n} from '../font-sizes/fluid-utils';\nimport { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights';\n\n/**\n * @typedef {Object} FluidPreset\n * @property {string|undefined} max A maximum font size value.\n * @property {?string|undefined} min A minimum font size value.\n */\n\n/**\n * @typedef {Object} Preset\n * @property {?string|?number} size A default font size.\n * @property {string} name A font size name, displayed in the UI.\n * @property {string} slug A font size slug\n * @property {boolean|FluidPreset|undefined} fluid Specifies the minimum and maximum font size value of a fluid font size.\n */\n\n/**\n * @typedef {Object} TypographySettings\n * @property {?string} minViewportWidth Minimum viewport size from which type will have fluidity. Optional if size is specified.\n * @property {?string} maxViewportWidth Maximum size up to which type will have fluidity. Optional if size is specified.\n * @property {?number} scaleFactor A scale factor to determine how fast a font scales within boundaries. Optional.\n * @property {?number} minFontSizeFactor How much to scale defaultFontSize by to derive minimumFontSize. Optional.\n * @property {?string} minFontSize The smallest a calculated font size may be. Optional.\n */\n\n/**\n * Returns a font-size value based on a given font-size preset.\n * Takes into account fluid typography parameters and attempts to return a css formula depending on available, valid values.\n *\n * The Core PHP equivalent is wp_get_typography_font_size_value().\n *\n * @param {Preset} preset\n * @param {Object} settings\n * @param {boolean|TypographySettings} settings.typography.fluid Whether fluid typography is enabled, and, optionally, fluid font size options.\n * @param {Object?} settings.typography.layout Layout options.\n *\n * @return {string|*} A font-size value or the value of preset.size.\n */\nexport function getTypographyFontSizeValue( preset, settings ) {\n\tconst { size: defaultSize } = preset;\n\n\t/*\n\t * Catch falsy values and 0/'0'. Fluid calculations cannot be performed on `0`.\n\t * Also return early when a preset font size explicitly disables fluid typography with `false`.\n\t */\n\tif ( ! defaultSize || '0' === defaultSize || false === preset?.fluid ) {\n\t\treturn defaultSize;\n\t}\n\n\t/*\n\t * Return early when fluid typography is disabled in the settings, and there\n\t * are no local settings to enable it for the individual preset.\n\t *\n\t * If this condition isn't met, either the settings or individual preset settings\n\t * have enabled fluid typography.\n\t */\n\tif (\n\t\t! isFluidTypographyEnabled( settings?.typography ) &&\n\t\t! isFluidTypographyEnabled( preset )\n\t) {\n\t\treturn defaultSize;\n\t}\n\n\tlet fluidTypographySettings =\n\t\tgetFluidTypographyOptionsFromSettings( settings );\n\tfluidTypographySettings =\n\t\ttypeof fluidTypographySettings?.fluid === 'object'\n\t\t\t? fluidTypographySettings?.fluid\n\t\t\t: {};\n\n\tconst fluidFontSizeValue = getComputedFluidTypographyValue( {\n\t\tminimumFontSize: preset?.fluid?.min,\n\t\tmaximumFontSize: preset?.fluid?.max,\n\t\tfontSize: defaultSize,\n\t\tminimumFontSizeLimit: fluidTypographySettings?.minFontSize,\n\t\tmaximumViewportWidth: fluidTypographySettings?.maxViewportWidth,\n\t\tminimumViewportWidth: fluidTypographySettings?.minViewportWidth,\n\t} );\n\n\tif ( !! fluidFontSizeValue ) {\n\t\treturn fluidFontSizeValue;\n\t}\n\n\treturn defaultSize;\n}\n\nfunction isFluidTypographyEnabled( typographySettings ) {\n\tconst fluidSettings = typographySettings?.fluid;\n\treturn (\n\t\ttrue === fluidSettings ||\n\t\t( fluidSettings &&\n\t\t\ttypeof fluidSettings === 'object' &&\n\t\t\tObject.keys( fluidSettings ).length > 0 )\n\t);\n}\n\n/**\n * Returns fluid typography settings from theme.json setting object.\n *\n * @param {Object} settings Theme.json settings\n * @param {Object} settings.typography Theme.json typography settings\n * @param {Object} settings.layout Theme.json layout settings\n * @return {TypographySettings} Fluid typography settings\n */\nexport function getFluidTypographyOptionsFromSettings( settings ) {\n\tconst typographySettings = settings?.typography;\n\tconst layoutSettings = settings?.layout;\n\tconst defaultMaxViewportWidth = getTypographyValueAndUnit(\n\t\tlayoutSettings?.wideSize\n\t)\n\t\t? layoutSettings?.wideSize\n\t\t: null;\n\treturn isFluidTypographyEnabled( typographySettings ) &&\n\t\tdefaultMaxViewportWidth\n\t\t? {\n\t\t\t\tfluid: {\n\t\t\t\t\tmaxViewportWidth: defaultMaxViewportWidth,\n\t\t\t\t\t...typographySettings.fluid,\n\t\t\t\t},\n\t\t }\n\t\t: {\n\t\t\t\tfluid: typographySettings?.fluid,\n\t\t };\n}\n\n/**\n * Returns an object of merged font families and the font faces from the selected font family\n * based on the theme.json settings object and the currently selected font family.\n *\n * @param {Object} settings Theme.json settings.\n * @param {string} selectedFontFamily Decoded font family string.\n * @return {Object} Merged font families and font faces from the selected font family.\n */\nexport function getMergedFontFamiliesAndFontFamilyFaces(\n\tsettings,\n\tselectedFontFamily\n) {\n\tconst fontFamiliesFromSettings = settings?.typography?.fontFamilies;\n\n\tconst fontFamilies = [ 'default', 'theme', 'custom' ].flatMap(\n\t\t( key ) => fontFamiliesFromSettings?.[ key ] ?? []\n\t);\n\n\tconst fontFamilyFaces =\n\t\tfontFamilies.find(\n\t\t\t( family ) => family.fontFamily === selectedFontFamily\n\t\t)?.fontFace ?? [];\n\n\treturn { fontFamilies, fontFamilyFaces };\n}\n\n/**\n * Returns the nearest font weight value from the available font weight list based on the new font weight.\n * The nearest font weight is the one with the smallest difference from the new font weight.\n *\n * @param {Array} availableFontWeights Array of available font weights.\n * @param {string} newFontWeightValue New font weight value.\n * @return {string} Nearest font weight.\n */\nexport function findNearestFontWeight(\n\tavailableFontWeights,\n\tnewFontWeightValue\n) {\n\tnewFontWeightValue =\n\t\t'number' === typeof newFontWeightValue\n\t\t\t? newFontWeightValue.toString()\n\t\t\t: newFontWeightValue;\n\tif ( ! newFontWeightValue || typeof newFontWeightValue !== 'string' ) {\n\t\treturn '';\n\t}\n\n\tif ( ! availableFontWeights || availableFontWeights.length === 0 ) {\n\t\treturn newFontWeightValue;\n\t}\n\n\tconst nearestFontWeight = availableFontWeights?.reduce(\n\t\t( nearest, { value: fw } ) => {\n\t\t\tconst currentDiff = Math.abs(\n\t\t\t\tparseInt( fw ) - parseInt( newFontWeightValue )\n\t\t\t);\n\t\t\tconst nearestDiff = Math.abs(\n\t\t\t\tparseInt( nearest ) - parseInt( newFontWeightValue )\n\t\t\t);\n\t\t\treturn currentDiff < nearestDiff ? fw : nearest;\n\t\t},\n\t\tavailableFontWeights[ 0 ]?.value\n\t);\n\n\treturn nearestFontWeight;\n}\n\n/**\n * Returns the nearest font style based on the new font style.\n * Defaults to an empty string if the new font style is not valid or available.\n *\n * @param {Array} availableFontStyles Array of available font weights.\n * @param {string} newFontStyleValue New font style value.\n * @return {string} Nearest font style or an empty string.\n */\nexport function findNearestFontStyle( availableFontStyles, newFontStyleValue ) {\n\tif ( typeof newFontStyleValue !== 'string' || ! newFontStyleValue ) {\n\t\treturn '';\n\t}\n\n\tconst validStyles = [ 'normal', 'italic', 'oblique' ];\n\tif ( ! validStyles.includes( newFontStyleValue ) ) {\n\t\treturn '';\n\t}\n\n\tif (\n\t\t! availableFontStyles ||\n\t\tavailableFontStyles.length === 0 ||\n\t\tavailableFontStyles.find(\n\t\t\t( style ) => style.value === newFontStyleValue\n\t\t)\n\t) {\n\t\treturn newFontStyleValue;\n\t}\n\n\tif (\n\t\tnewFontStyleValue === 'oblique' &&\n\t\t! availableFontStyles.find( ( style ) => style.value === 'oblique' )\n\t) {\n\t\treturn 'italic';\n\t}\n\n\treturn '';\n}\n\n/**\n * Returns the nearest font style and weight based on the available font family faces and the new font style and weight.\n *\n * @param {Array} fontFamilyFaces Array of available font family faces.\n * @param {string} fontStyle New font style. Defaults to previous value.\n * @param {string} fontWeight New font weight. Defaults to previous value.\n * @return {Object} Nearest font style and font weight.\n */\nexport function findNearestStyleAndWeight(\n\tfontFamilyFaces,\n\tfontStyle,\n\tfontWeight\n) {\n\tlet nearestFontStyle = fontStyle;\n\tlet nearestFontWeight = fontWeight;\n\n\tconst { fontStyles, fontWeights, combinedStyleAndWeightOptions } =\n\t\tgetFontStylesAndWeights( fontFamilyFaces );\n\n\t// Check if the new font style and weight are available in the font family faces.\n\tconst hasFontStyle = fontStyles?.some(\n\t\t( { value: fs } ) => fs === fontStyle\n\t);\n\tconst hasFontWeight = fontWeights?.some(\n\t\t( { value: fw } ) => fw?.toString() === fontWeight?.toString()\n\t);\n\n\tif ( ! hasFontStyle ) {\n\t\t/*\n\t\t * Default to italic if oblique is not available.\n\t\t * Or find the nearest font style based on the nearest font weight.\n\t\t */\n\t\tnearestFontStyle = fontStyle\n\t\t\t? findNearestFontStyle( fontStyles, fontStyle )\n\t\t\t: combinedStyleAndWeightOptions?.find(\n\t\t\t\t\t( option ) =>\n\t\t\t\t\t\toption.style.fontWeight ===\n\t\t\t\t\t\tfindNearestFontWeight( fontWeights, fontWeight )\n\t\t\t )?.style?.fontStyle;\n\t}\n\n\tif ( ! hasFontWeight ) {\n\t\t/*\n\t\t * Find the nearest font weight based on available weights.\n\t\t * Or find the nearest font weight based on the nearest font style.\n\t\t */\n\t\tnearestFontWeight = fontWeight\n\t\t\t? findNearestFontWeight( fontWeights, fontWeight )\n\t\t\t: combinedStyleAndWeightOptions?.find(\n\t\t\t\t\t( option ) =>\n\t\t\t\t\t\toption.style.fontStyle ===\n\t\t\t\t\t\t( nearestFontStyle || fontStyle )\n\t\t\t )?.style?.fontWeight;\n\t}\n\n\treturn { nearestFontStyle, nearestFontWeight };\n}\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useViewportMatch } from '@wordpress/compose';\nimport { getCSSValueFromRawStyle } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { getTypographyFontSizeValue } from './typography-utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/* Supporting data. */\nexport const ROOT_BLOCK_SELECTOR = 'body';\nexport const ROOT_CSS_PROPERTIES_SELECTOR = ':root';\n\nexport const PRESET_METADATA = [\n\t{\n\t\tpath: [ 'color', 'palette' ],\n\t\tvalueKey: 'color',\n\t\tcssVarInfix: 'color',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'color', propertyName: 'color' },\n\t\t\t{\n\t\t\t\tclassSuffix: 'background-color',\n\t\t\t\tpropertyName: 'background-color',\n\t\t\t},\n\t\t\t{\n\t\t\t\tclassSuffix: 'border-color',\n\t\t\t\tpropertyName: 'border-color',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'gradients' ],\n\t\tvalueKey: 'gradient',\n\t\tcssVarInfix: 'gradient',\n\t\tclasses: [\n\t\t\t{\n\t\t\t\tclassSuffix: 'gradient-background',\n\t\t\t\tpropertyName: 'background',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'color', 'duotone' ],\n\t\tvalueKey: 'colors',\n\t\tcssVarInfix: 'duotone',\n\t\tvalueFunc: ( { slug } ) => `url( '#wp-duotone-${ slug }' )`,\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'shadow', 'presets' ],\n\t\tvalueKey: 'shadow',\n\t\tcssVarInfix: 'shadow',\n\t\tclasses: [],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontSizes' ],\n\t\tvalueFunc: ( preset, settings ) =>\n\t\t\tgetTypographyFontSizeValue( preset, settings ),\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'font-size',\n\t\tclasses: [ { classSuffix: 'font-size', propertyName: 'font-size' } ],\n\t},\n\t{\n\t\tpath: [ 'typography', 'fontFamilies' ],\n\t\tvalueKey: 'fontFamily',\n\t\tcssVarInfix: 'font-family',\n\t\tclasses: [\n\t\t\t{ classSuffix: 'font-family', propertyName: 'font-family' },\n\t\t],\n\t},\n\t{\n\t\tpath: [ 'spacing', 'spacingSizes' ],\n\t\tvalueKey: 'size',\n\t\tcssVarInfix: 'spacing',\n\t\tvalueFunc: ( { size } ) => size,\n\t\tclasses: [],\n\t},\n];\n\nexport const STYLE_PATH_TO_CSS_VAR_INFIX = {\n\t'color.background': 'color',\n\t'color.text': 'color',\n\t'filter.duotone': 'duotone',\n\t'elements.link.color.text': 'color',\n\t'elements.link.:hover.color.text': 'color',\n\t'elements.link.typography.fontFamily': 'font-family',\n\t'elements.link.typography.fontSize': 'font-size',\n\t'elements.button.color.text': 'color',\n\t'elements.button.color.background': 'color',\n\t'elements.caption.color.text': 'color',\n\t'elements.button.typography.fontFamily': 'font-family',\n\t'elements.button.typography.fontSize': 'font-size',\n\t'elements.heading.color': 'color',\n\t'elements.heading.color.background': 'color',\n\t'elements.heading.typography.fontFamily': 'font-family',\n\t'elements.heading.gradient': 'gradient',\n\t'elements.heading.color.gradient': 'gradient',\n\t'elements.h1.color': 'color',\n\t'elements.h1.color.background': 'color',\n\t'elements.h1.typography.fontFamily': 'font-family',\n\t'elements.h1.color.gradient': 'gradient',\n\t'elements.h2.color': 'color',\n\t'elements.h2.color.background': 'color',\n\t'elements.h2.typography.fontFamily': 'font-family',\n\t'elements.h2.color.gradient': 'gradient',\n\t'elements.h3.color': 'color',\n\t'elements.h3.color.background': 'color',\n\t'elements.h3.typography.fontFamily': 'font-family',\n\t'elements.h3.color.gradient': 'gradient',\n\t'elements.h4.color': 'color',\n\t'elements.h4.color.background': 'color',\n\t'elements.h4.typography.fontFamily': 'font-family',\n\t'elements.h4.color.gradient': 'gradient',\n\t'elements.h5.color': 'color',\n\t'elements.h5.color.background': 'color',\n\t'elements.h5.typography.fontFamily': 'font-family',\n\t'elements.h5.color.gradient': 'gradient',\n\t'elements.h6.color': 'color',\n\t'elements.h6.color.background': 'color',\n\t'elements.h6.typography.fontFamily': 'font-family',\n\t'elements.h6.color.gradient': 'gradient',\n\t'color.gradient': 'gradient',\n\tshadow: 'shadow',\n\t'typography.fontSize': 'font-size',\n\t'typography.fontFamily': 'font-family',\n};\n\n// A static list of block attributes that store global style preset slugs.\nexport const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {\n\t'color.background': 'backgroundColor',\n\t'color.text': 'textColor',\n\t'color.gradient': 'gradient',\n\t'typography.fontSize': 'fontSize',\n\t'typography.fontFamily': 'fontFamily',\n};\n\nexport function useToolsPanelDropdownMenuProps() {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n}\n\nfunction findInPresetsBy(\n\tfeatures,\n\tblockName,\n\tpresetPath,\n\tpresetProperty,\n\tpresetValueValue\n) {\n\t// Block presets take priority above root level presets.\n\tconst orderedPresetsByOrigin = [\n\t\tgetValueFromObjectPath( features, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t...presetPath,\n\t\t] ),\n\t\tgetValueFromObjectPath( features, presetPath ),\n\t];\n\n\tfor ( const presetByOrigin of orderedPresetsByOrigin ) {\n\t\tif ( presetByOrigin ) {\n\t\t\t// Preset origins ordered by priority.\n\t\t\tconst origins = [ 'custom', 'theme', 'default' ];\n\t\t\tfor ( const origin of origins ) {\n\t\t\t\tconst presets = presetByOrigin[ origin ];\n\t\t\t\tif ( presets ) {\n\t\t\t\t\tconst presetObject = presets.find(\n\t\t\t\t\t\t( preset ) =>\n\t\t\t\t\t\t\tpreset[ presetProperty ] === presetValueValue\n\t\t\t\t\t);\n\t\t\t\t\tif ( presetObject ) {\n\t\t\t\t\t\tif ( presetProperty === 'slug' ) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// If there is a highest priority preset with the same slug but different value the preset we found was overwritten and should be ignored.\n\t\t\t\t\t\tconst highestPresetObjectWithSameSlug = findInPresetsBy(\n\t\t\t\t\t\t\tfeatures,\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tpresetPath,\n\t\t\t\t\t\t\t'slug',\n\t\t\t\t\t\t\tpresetObject.slug\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thighestPresetObjectWithSameSlug[\n\t\t\t\t\t\t\t\tpresetProperty\n\t\t\t\t\t\t\t] === presetObject[ presetProperty ]\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn presetObject;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function getPresetVariableFromValue(\n\tfeatures,\n\tblockName,\n\tvariableStylePath,\n\tpresetPropertyValue\n) {\n\tif ( ! presetPropertyValue ) {\n\t\treturn presetPropertyValue;\n\t}\n\n\tconst cssVarInfix = STYLE_PATH_TO_CSS_VAR_INFIX[ variableStylePath ];\n\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === cssVarInfix\n\t);\n\n\tif ( ! metadata ) {\n\t\t// The property doesn't have preset data\n\t\t// so the value should be returned as it is.\n\t\treturn presetPropertyValue;\n\t}\n\tconst { valueKey, path } = metadata;\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures,\n\t\tblockName,\n\t\tpath,\n\t\tvalueKey,\n\t\tpresetPropertyValue\n\t);\n\n\tif ( ! presetObject ) {\n\t\t// Value wasn't found in the presets,\n\t\t// so it must be a custom value.\n\t\treturn presetPropertyValue;\n\t}\n\n\treturn `var:preset|${ cssVarInfix }|${ presetObject.slug }`;\n}\n\nfunction getValueFromPresetVariable(\n\tfeatures,\n\tblockName,\n\tvariable,\n\t[ presetType, slug ]\n) {\n\tconst metadata = PRESET_METADATA.find(\n\t\t( data ) => data.cssVarInfix === presetType\n\t);\n\tif ( ! metadata ) {\n\t\treturn variable;\n\t}\n\n\tconst presetObject = findInPresetsBy(\n\t\tfeatures.settings,\n\t\tblockName,\n\t\tmetadata.path,\n\t\t'slug',\n\t\tslug\n\t);\n\n\tif ( presetObject ) {\n\t\tconst { valueKey } = metadata;\n\t\tconst result = presetObject[ valueKey ];\n\t\treturn getValueFromVariable( features, blockName, result );\n\t}\n\n\treturn variable;\n}\n\nfunction getValueFromCustomVariable( features, blockName, variable, path ) {\n\tconst result =\n\t\tgetValueFromObjectPath( features.settings, [\n\t\t\t'blocks',\n\t\t\tblockName,\n\t\t\t'custom',\n\t\t\t...path,\n\t\t] ) ??\n\t\tgetValueFromObjectPath( features.settings, [ 'custom', ...path ] );\n\tif ( ! result ) {\n\t\treturn variable;\n\t}\n\t// A variable may reference another variable so we need recursion until we find the value.\n\treturn getValueFromVariable( features, blockName, result );\n}\n\n/**\n * Attempts to fetch the value of a theme.json CSS variable.\n *\n * @param {Object} features GlobalStylesContext config, e.g., user, base or merged. Represents the theme.json tree.\n * @param {string} blockName The name of a block as represented in the styles property. E.g., 'root' for root-level, and 'core/${blockName}' for blocks.\n * @param {string|*} variable An incoming style value. A CSS var value is expected, but it could be any value.\n * @return {string|*|{ref}} The value of the CSS var, if found. If not found, the passed variable argument.\n */\nexport function getValueFromVariable( features, blockName, variable ) {\n\tif ( ! variable || typeof variable !== 'string' ) {\n\t\tif ( typeof variable?.ref === 'string' ) {\n\t\t\tvariable = getValueFromObjectPath( features, variable.ref );\n\t\t\t// Presence of another ref indicates a reference to another dynamic value.\n\t\t\t// Pointing to another dynamic value is not supported.\n\t\t\tif ( ! variable || !! variable?.ref ) {\n\t\t\t\treturn variable;\n\t\t\t}\n\t\t} else {\n\t\t\treturn variable;\n\t\t}\n\t}\n\tconst USER_VALUE_PREFIX = 'var:';\n\tconst THEME_VALUE_PREFIX = 'var(--wp--';\n\tconst THEME_VALUE_SUFFIX = ')';\n\n\tlet parsedVar;\n\n\tif ( variable.startsWith( USER_VALUE_PREFIX ) ) {\n\t\tparsedVar = variable.slice( USER_VALUE_PREFIX.length ).split( '|' );\n\t} else if (\n\t\tvariable.startsWith( THEME_VALUE_PREFIX ) &&\n\t\tvariable.endsWith( THEME_VALUE_SUFFIX )\n\t) {\n\t\tparsedVar = variable\n\t\t\t.slice( THEME_VALUE_PREFIX.length, -THEME_VALUE_SUFFIX.length )\n\t\t\t.split( '--' );\n\t} else {\n\t\t// We don't know how to parse the value: either is raw of uses complex CSS such as `calc(1px * var(--wp--variable) )`\n\t\treturn variable;\n\t}\n\n\tconst [ type, ...path ] = parsedVar;\n\tif ( type === 'preset' ) {\n\t\treturn getValueFromPresetVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\tif ( type === 'custom' ) {\n\t\treturn getValueFromCustomVariable(\n\t\t\tfeatures,\n\t\t\tblockName,\n\t\t\tvariable,\n\t\t\tpath\n\t\t);\n\t}\n\treturn variable;\n}\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nexport function scopeSelector( scope, selector ) {\n\tif ( ! scope || ! selector ) {\n\t\treturn selector;\n\t}\n\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Scopes a collection of selectors for features and subfeatures.\n *\n * @example\n * ```js\n * const scope = '.custom-scope';\n * const selectors = {\n * color: '.wp-my-block p',\n * typography: { fontSize: '.wp-my-block caption' },\n * };\n * const result = scopeFeatureSelector( scope, selectors );\n * // result is {\n * // color: '.custom-scope .wp-my-block p',\n * // typography: { fonSize: '.custom-scope .wp-my-block caption' },\n * // }\n * ```\n *\n * @param {string} scope Selector to scope collection of selectors with.\n * @param {Object} selectors Collection of feature selectors e.g.\n *\n * @return {Object|undefined} Scoped collection of feature selectors.\n */\nexport function scopeFeatureSelectors( scope, selectors ) {\n\tif ( ! scope || ! selectors ) {\n\t\treturn;\n\t}\n\n\tconst featureSelectors = {};\n\n\tObject.entries( selectors ).forEach( ( [ feature, selector ] ) => {\n\t\tif ( typeof selector === 'string' ) {\n\t\t\tfeatureSelectors[ feature ] = scopeSelector( scope, selector );\n\t\t}\n\n\t\tif ( typeof selector === 'object' ) {\n\t\t\tfeatureSelectors[ feature ] = {};\n\n\t\t\tObject.entries( selector ).forEach(\n\t\t\t\t( [ subfeature, subfeatureSelector ] ) => {\n\t\t\t\t\tfeatureSelectors[ feature ][ subfeature ] = scopeSelector(\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tsubfeatureSelector\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn featureSelectors;\n}\n\n/**\n * Appends a sub-selector to an existing one.\n *\n * Given the compounded `selector` \"h1, h2, h3\"\n * and the `toAppend` selector \".some-class\" the result will be\n * \"h1.some-class, h2.some-class, h3.some-class\".\n *\n * @param {string} selector Original selector.\n * @param {string} toAppend Selector to append.\n *\n * @return {string} The new selector.\n */\nexport function appendToSelector( selector, toAppend ) {\n\tif ( ! selector.includes( ',' ) ) {\n\t\treturn selector + toAppend;\n\t}\n\tconst selectors = selector.split( ',' );\n\tconst newSelectors = selectors.map( ( sel ) => sel + toAppend );\n\treturn newSelectors.join( ',' );\n}\n\n/**\n * Compares global style variations according to their styles and settings properties.\n *\n * @example\n * ```js\n * const globalStyles = { styles: { typography: { fontSize: '10px' } }, settings: {} };\n * const variation = { styles: { typography: { fontSize: '10000px' } }, settings: {} };\n * const isEqual = areGlobalStyleConfigsEqual( globalStyles, variation );\n * // false\n * ```\n *\n * @param {Object} original A global styles object.\n * @param {Object} variation A global styles object.\n *\n * @return {boolean} Whether `original` and `variation` match.\n */\nexport function areGlobalStyleConfigsEqual( original, variation ) {\n\tif ( typeof original !== 'object' || typeof variation !== 'object' ) {\n\t\treturn original === variation;\n\t}\n\treturn (\n\t\tfastDeepEqual( original?.styles, variation?.styles ) &&\n\t\tfastDeepEqual( original?.settings, variation?.settings )\n\t);\n}\n\n/**\n * Generates the selector for a block style variation by creating the\n * appropriate CSS class and adding it to the ancestor portion of the block's\n * selector.\n *\n * For example, take the Button block which has a compound selector:\n * `.wp-block-button .wp-block-button__link`. With a variation named 'custom',\n * the class `.is-style-custom` should be added to the `.wp-block-button`\n * ancestor only.\n *\n * This function will take into account comma separated and complex selectors.\n *\n * @param {string} variation Name for the variation.\n * @param {string} blockSelector CSS selector for the block.\n *\n * @return {string} CSS selector for the block style variation.\n */\nexport function getBlockStyleVariationSelector( variation, blockSelector ) {\n\tconst variationClass = `.is-style-${ variation }`;\n\n\tif ( ! blockSelector ) {\n\t\treturn variationClass;\n\t}\n\n\tconst ancestorRegex = /((?::\\([^)]+\\))?\\s*)([^\\s:]+)/;\n\tconst addVariationClass = ( _match, group1, group2 ) => {\n\t\treturn group1 + group2 + variationClass;\n\t};\n\n\tconst result = blockSelector\n\t\t.split( ',' )\n\t\t.map( ( part ) => part.replace( ancestorRegex, addVariationClass ) );\n\n\treturn result.join( ',' );\n}\n\n/**\n * Looks up a theme file URI based on a relative path.\n *\n * @param {string} file A relative path.\n * @param {Array} themeFileURIs A collection of absolute theme file URIs and their corresponding file paths.\n * @return {string} A resolved theme file URI, if one is found in the themeFileURIs collection.\n */\nexport function getResolvedThemeFilePath( file, themeFileURIs ) {\n\tif ( ! file || ! themeFileURIs || ! Array.isArray( themeFileURIs ) ) {\n\t\treturn file;\n\t}\n\n\tconst uri = themeFileURIs.find(\n\t\t( themeFileUri ) => themeFileUri?.name === file\n\t);\n\n\tif ( ! uri?.href ) {\n\t\treturn file;\n\t}\n\n\treturn uri?.href;\n}\n\n/**\n * Resolves ref values in theme JSON.\n *\n * @param {Object|string} ruleValue A block style value that may contain a reference to a theme.json value.\n * @param {Object} tree A theme.json object.\n * @return {*} The resolved value or incoming ruleValue.\n */\nexport function getResolvedRefValue( ruleValue, tree ) {\n\tif ( ! ruleValue || ! tree ) {\n\t\treturn ruleValue;\n\t}\n\n\t/*\n\t * Where the rule value is an object with a 'ref' property pointing\n\t * to a path, this converts that path into the value at that path.\n\t * For example: { \"ref\": \"style.color.background\" } => \"#fff\".\n\t */\n\tif ( typeof ruleValue !== 'string' && ruleValue?.ref ) {\n\t\tconst resolvedRuleValue = getCSSValueFromRawStyle(\n\t\t\tgetValueFromObjectPath( tree, ruleValue.ref )\n\t\t);\n\n\t\t/*\n\t\t * Presence of another ref indicates a reference to another dynamic value.\n\t\t * Pointing to another dynamic value is not supported.\n\t\t */\n\t\tif ( resolvedRuleValue?.ref ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ( resolvedRuleValue === undefined ) {\n\t\t\treturn ruleValue;\n\t\t}\n\n\t\treturn resolvedRuleValue;\n\t}\n\treturn ruleValue;\n}\n\n/**\n * Resolves ref and relative path values in theme JSON.\n *\n * @param {Object|string} ruleValue A block style value that may contain a reference to a theme.json value.\n * @param {Object} tree A theme.json object.\n * @return {*} The resolved value or incoming ruleValue.\n */\nexport function getResolvedValue( ruleValue, tree ) {\n\tif ( ! ruleValue || ! tree ) {\n\t\treturn ruleValue;\n\t}\n\n\t// Resolve ref values.\n\tconst resolvedValue = getResolvedRefValue( ruleValue, tree );\n\n\t// Resolve relative paths.\n\tif ( resolvedValue?.url ) {\n\t\tresolvedValue.url = getResolvedThemeFilePath(\n\t\t\tresolvedValue.url,\n\t\t\ttree?._links?.[ 'wp:theme-file' ]\n\t\t);\n\t}\n\n\treturn resolvedValue;\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nexport const DEFAULT_GLOBAL_STYLES_CONTEXT = {\n\tuser: {},\n\tbase: {},\n\tmerged: {},\n\tsetUserConfig: () => {},\n};\n\nexport const GlobalStylesContext = createContext(\n\tDEFAULT_GLOBAL_STYLES_CONTEXT\n);\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useContext, useCallback, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, getPresetVariableFromValue } from './utils';\nimport { getValueFromObjectPath, setImmutably } from '../../utils/object';\nimport { GlobalStylesContext } from './context';\nimport { unlock } from '../../lock-unlock';\n\nconst EMPTY_CONFIG = { settings: {}, styles: {} };\n\nconst VALID_SETTINGS = [\n\t'appearanceTools',\n\t'useRootPaddingAwareAlignments',\n\t'background.backgroundImage',\n\t'background.backgroundRepeat',\n\t'background.backgroundSize',\n\t'background.backgroundPosition',\n\t'border.color',\n\t'border.radius',\n\t'border.style',\n\t'border.width',\n\t'shadow.presets',\n\t'shadow.defaultPresets',\n\t'color.background',\n\t'color.button',\n\t'color.caption',\n\t'color.custom',\n\t'color.customDuotone',\n\t'color.customGradient',\n\t'color.defaultDuotone',\n\t'color.defaultGradients',\n\t'color.defaultPalette',\n\t'color.duotone',\n\t'color.gradients',\n\t'color.heading',\n\t'color.link',\n\t'color.palette',\n\t'color.text',\n\t'custom',\n\t'dimensions.aspectRatio',\n\t'dimensions.minHeight',\n\t'layout.contentSize',\n\t'layout.definitions',\n\t'layout.wideSize',\n\t'lightbox.enabled',\n\t'lightbox.allowEditing',\n\t'position.fixed',\n\t'position.sticky',\n\t'spacing.customSpacingSize',\n\t'spacing.defaultSpacingSizes',\n\t'spacing.spacingSizes',\n\t'spacing.spacingScale',\n\t'spacing.blockGap',\n\t'spacing.margin',\n\t'spacing.padding',\n\t'spacing.units',\n\t'typography.fluid',\n\t'typography.customFontSize',\n\t'typography.defaultFontSizes',\n\t'typography.dropCap',\n\t'typography.fontFamilies',\n\t'typography.fontSizes',\n\t'typography.fontStyle',\n\t'typography.fontWeight',\n\t'typography.letterSpacing',\n\t'typography.lineHeight',\n\t'typography.textAlign',\n\t'typography.textColumns',\n\t'typography.textDecoration',\n\t'typography.textTransform',\n\t'typography.writingMode',\n];\n\nexport const useGlobalStylesReset = () => {\n\tconst { user, setUserConfig } = useContext( GlobalStylesContext );\n\tconst config = {\n\t\tsettings: user.settings,\n\t\tstyles: user.styles,\n\t};\n\tconst canReset = !! config && ! fastDeepEqual( config, EMPTY_CONFIG );\n\treturn [\n\t\tcanReset,\n\t\tuseCallback( () => setUserConfig( EMPTY_CONFIG ), [ setUserConfig ] ),\n\t];\n};\n\nexport function useGlobalSetting( propertyPath, blockName, source = 'all' ) {\n\tconst { setUserConfig, ...configs } = useContext( GlobalStylesContext );\n\tconst appendedBlockPath = blockName ? '.blocks.' + blockName : '';\n\tconst appendedPropertyPath = propertyPath ? '.' + propertyPath : '';\n\tconst contextualPath = `settings${ appendedBlockPath }${ appendedPropertyPath }`;\n\tconst globalPath = `settings${ appendedPropertyPath }`;\n\tconst sourceKey = source === 'all' ? 'merged' : source;\n\n\tconst settingValue = useMemo( () => {\n\t\tconst configToUse = configs[ sourceKey ];\n\t\tif ( ! configToUse ) {\n\t\t\tthrow 'Unsupported source';\n\t\t}\n\n\t\tif ( propertyPath ) {\n\t\t\treturn (\n\t\t\t\tgetValueFromObjectPath( configToUse, contextualPath ) ??\n\t\t\t\tgetValueFromObjectPath( configToUse, globalPath )\n\t\t\t);\n\t\t}\n\n\t\tlet result = {};\n\t\tVALID_SETTINGS.forEach( ( setting ) => {\n\t\t\tconst value =\n\t\t\t\tgetValueFromObjectPath(\n\t\t\t\t\tconfigToUse,\n\t\t\t\t\t`settings${ appendedBlockPath }.${ setting }`\n\t\t\t\t) ??\n\t\t\t\tgetValueFromObjectPath( configToUse, `settings.${ setting }` );\n\t\t\tif ( value !== undefined ) {\n\t\t\t\tresult = setImmutably( result, setting.split( '.' ), value );\n\t\t\t}\n\t\t} );\n\t\treturn result;\n\t}, [\n\t\tconfigs,\n\t\tsourceKey,\n\t\tpropertyPath,\n\t\tcontextualPath,\n\t\tglobalPath,\n\t\tappendedBlockPath,\n\t] );\n\n\tconst setSetting = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) =>\n\t\t\tsetImmutably( currentConfig, contextualPath.split( '.' ), newValue )\n\t\t);\n\t};\n\treturn [ settingValue, setSetting ];\n}\n\nexport function useGlobalStyle(\n\tpath,\n\tblockName,\n\tsource = 'all',\n\t{ shouldDecodeEncode = true } = {}\n) {\n\tconst {\n\t\tmerged: mergedConfig,\n\t\tbase: baseConfig,\n\t\tuser: userConfig,\n\t\tsetUserConfig,\n\t} = useContext( GlobalStylesContext );\n\tconst appendedPath = path ? '.' + path : '';\n\tconst finalPath = ! blockName\n\t\t? `styles${ appendedPath }`\n\t\t: `styles.blocks.${ blockName }${ appendedPath }`;\n\n\tconst setStyle = ( newValue ) => {\n\t\tsetUserConfig( ( currentConfig ) =>\n\t\t\tsetImmutably(\n\t\t\t\tcurrentConfig,\n\t\t\t\tfinalPath.split( '.' ),\n\t\t\t\tshouldDecodeEncode\n\t\t\t\t\t? getPresetVariableFromValue(\n\t\t\t\t\t\t\tmergedConfig.settings,\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tnewValue\n\t\t\t\t\t )\n\t\t\t\t\t: newValue\n\t\t\t)\n\t\t);\n\t};\n\n\tlet rawResult, result;\n\tswitch ( source ) {\n\t\tcase 'all':\n\t\t\trawResult = getValueFromObjectPath( mergedConfig, finalPath );\n\t\t\tresult = shouldDecodeEncode\n\t\t\t\t? getValueFromVariable( mergedConfig, blockName, rawResult )\n\t\t\t\t: rawResult;\n\t\t\tbreak;\n\t\tcase 'user':\n\t\t\trawResult = getValueFromObjectPath( userConfig, finalPath );\n\t\t\tresult = shouldDecodeEncode\n\t\t\t\t? getValueFromVariable( mergedConfig, blockName, rawResult )\n\t\t\t\t: rawResult;\n\t\t\tbreak;\n\t\tcase 'base':\n\t\t\trawResult = getValueFromObjectPath( baseConfig, finalPath );\n\t\t\tresult = shouldDecodeEncode\n\t\t\t\t? getValueFromVariable( baseConfig, blockName, rawResult )\n\t\t\t\t: rawResult;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow 'Unsupported source';\n\t}\n\n\treturn [ result, setStyle ];\n}\n\n/**\n * React hook that overrides a global settings object with block and element specific settings.\n *\n * @param {Object} parentSettings Settings object.\n * @param {blockName?} blockName Block name.\n * @param {element?} element Element name.\n *\n * @return {Object} Merge of settings and supports.\n */\nexport function useSettingsForBlockElement(\n\tparentSettings,\n\tblockName,\n\telement\n) {\n\tconst { supportedStyles, supports } = useSelect(\n\t\t( select ) => {\n\t\t\treturn {\n\t\t\t\tsupportedStyles: unlock(\n\t\t\t\t\tselect( blocksStore )\n\t\t\t\t).getSupportedStyles( blockName, element ),\n\t\t\t\tsupports:\n\t\t\t\t\tselect( blocksStore ).getBlockType( blockName )?.supports,\n\t\t\t};\n\t\t},\n\t\t[ blockName, element ]\n\t);\n\n\treturn useMemo( () => {\n\t\tconst updatedSettings = { ...parentSettings };\n\n\t\tif ( ! supportedStyles.includes( 'fontSize' ) ) {\n\t\t\tupdatedSettings.typography = {\n\t\t\t\t...updatedSettings.typography,\n\t\t\t\tfontSizes: {},\n\t\t\t\tcustomFontSize: false,\n\t\t\t\tdefaultFontSizes: false,\n\t\t\t};\n\t\t}\n\n\t\tif ( ! supportedStyles.includes( 'fontFamily' ) ) {\n\t\t\tupdatedSettings.typography = {\n\t\t\t\t...updatedSettings.typography,\n\t\t\t\tfontFamilies: {},\n\t\t\t};\n\t\t}\n\n\t\tupdatedSettings.color = {\n\t\t\t...updatedSettings.color,\n\t\t\ttext:\n\t\t\t\tupdatedSettings.color?.text &&\n\t\t\t\tsupportedStyles.includes( 'color' ),\n\t\t\tbackground:\n\t\t\t\tupdatedSettings.color?.background &&\n\t\t\t\t( supportedStyles.includes( 'background' ) ||\n\t\t\t\t\tsupportedStyles.includes( 'backgroundColor' ) ),\n\t\t\tbutton:\n\t\t\t\tupdatedSettings.color?.button &&\n\t\t\t\tsupportedStyles.includes( 'buttonColor' ),\n\t\t\theading:\n\t\t\t\tupdatedSettings.color?.heading &&\n\t\t\t\tsupportedStyles.includes( 'headingColor' ),\n\t\t\tlink:\n\t\t\t\tupdatedSettings.color?.link &&\n\t\t\t\tsupportedStyles.includes( 'linkColor' ),\n\t\t\tcaption:\n\t\t\t\tupdatedSettings.color?.caption &&\n\t\t\t\tsupportedStyles.includes( 'captionColor' ),\n\t\t};\n\n\t\t// Some blocks can enable background colors but disable gradients.\n\t\tif ( ! supportedStyles.includes( 'background' ) ) {\n\t\t\tupdatedSettings.color.gradients = [];\n\t\t\tupdatedSettings.color.customGradient = false;\n\t\t}\n\n\t\t// If filters are not supported by the block/element, disable duotone.\n\t\tif ( ! supportedStyles.includes( 'filter' ) ) {\n\t\t\tupdatedSettings.color.defaultDuotone = false;\n\t\t\tupdatedSettings.color.customDuotone = false;\n\t\t}\n\n\t\t[\n\t\t\t'lineHeight',\n\t\t\t'fontStyle',\n\t\t\t'fontWeight',\n\t\t\t'letterSpacing',\n\t\t\t'textAlign',\n\t\t\t'textTransform',\n\t\t\t'textDecoration',\n\t\t\t'writingMode',\n\t\t].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.typography = {\n\t\t\t\t\t...updatedSettings.typography,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t// The column-count style is named text column to reduce confusion with\n\t\t// the columns block and manage expectations from the support.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/33587\n\t\tif ( ! supportedStyles.includes( 'columnCount' ) ) {\n\t\t\tupdatedSettings.typography = {\n\t\t\t\t...updatedSettings.typography,\n\t\t\t\ttextColumns: false,\n\t\t\t};\n\t\t}\n\n\t\t[ 'contentSize', 'wideSize' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.layout = {\n\t\t\t\t\t...updatedSettings.layout,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'padding', 'margin', 'blockGap' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.spacing = {\n\t\t\t\t\t...updatedSettings.spacing,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst sides = Array.isArray( supports?.spacing?.[ key ] )\n\t\t\t\t? supports?.spacing?.[ key ]\n\t\t\t\t: supports?.spacing?.[ key ]?.sides;\n\t\t\t// Check if spacing type is supported before adding sides.\n\t\t\tif ( sides?.length && updatedSettings.spacing?.[ key ] ) {\n\t\t\t\tupdatedSettings.spacing = {\n\t\t\t\t\t...updatedSettings.spacing,\n\t\t\t\t\t[ key ]: {\n\t\t\t\t\t\t...updatedSettings.spacing?.[ key ],\n\t\t\t\t\t\tsides,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'aspectRatio', 'minHeight' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.dimensions = {\n\t\t\t\t\t...updatedSettings.dimensions,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'radius', 'color', 'style', 'width' ].forEach( ( key ) => {\n\t\t\tif (\n\t\t\t\t! supportedStyles.includes(\n\t\t\t\t\t'border' + key.charAt( 0 ).toUpperCase() + key.slice( 1 )\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tupdatedSettings.border = {\n\t\t\t\t\t...updatedSettings.border,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t[ 'backgroundImage', 'backgroundSize' ].forEach( ( key ) => {\n\t\t\tif ( ! supportedStyles.includes( key ) ) {\n\t\t\t\tupdatedSettings.background = {\n\t\t\t\t\t...updatedSettings.background,\n\t\t\t\t\t[ key ]: false,\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\tupdatedSettings.shadow = supportedStyles.includes( 'shadow' )\n\t\t\t? updatedSettings.shadow\n\t\t\t: false;\n\n\t\t// Text alignment is only available for blocks.\n\t\tif ( element ) {\n\t\t\tupdatedSettings.typography.textAlign = false;\n\t\t}\n\n\t\treturn updatedSettings;\n\t}, [ parentSettings, supportedStyles, supports, element ] );\n}\n\nexport function useColorsPerOrigin( settings ) {\n\tconst customColors = settings?.color?.palette?.custom;\n\tconst themeColors = settings?.color?.palette?.theme;\n\tconst defaultColors = settings?.color?.palette?.default;\n\tconst shouldDisplayDefaultColors = settings?.color?.defaultPalette;\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeColors && themeColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: themeColors,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultColors &&\n\t\t\tdefaultColors &&\n\t\t\tdefaultColors.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tcolors: defaultColors,\n\t\t\t} );\n\t\t}\n\t\tif ( customColors && customColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tcolors: customColors,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomColors,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tshouldDisplayDefaultColors,\n\t] );\n}\n\nexport function useGradientsPerOrigin( settings ) {\n\tconst customGradients = settings?.color?.gradients?.custom;\n\tconst themeGradients = settings?.color?.gradients?.theme;\n\tconst defaultGradients = settings?.color?.gradients?.default;\n\tconst shouldDisplayDefaultGradients = settings?.color?.defaultGradients;\n\n\treturn useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeGradients && themeGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tgradients: themeGradients,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultGradients &&\n\t\t\tdefaultGradients &&\n\t\t\tdefaultGradients.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tgradients: defaultGradients,\n\t\t\t} );\n\t\t}\n\t\tif ( customGradients && customGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tgradients: customGradients,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t\tshouldDisplayDefaultGradients,\n\t] );\n}\n","function 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 {\n\tif (\n\t\tobject === null ||\n\t\ttypeof object !== 'object' ||\n\t\tArray.isArray( object )\n\t) {\n\t\treturn object;\n\t}\n\n\tconst cleanedNestedObjects = Object.entries( object )\n\t\t.map( ( [ key, value ] ) => [ key, cleanEmptyObject( value ) ] )\n\t\t.filter( ( [ , value ] ) => value !== undefined );\n\treturn ! cleanedNestedObjects.length\n\t\t? undefined\n\t\t: Object.fromEntries( cleanedNestedObjects );\n};\n\nexport function transformStyles(\n\tactiveSupports,\n\tmigrationPaths,\n\tresult,\n\tsource,\n\tindex,\n\tresults\n) {\n\t// If there are no active supports return early.\n\tif (\n\t\tObject.values( activeSupports ?? {} ).every(\n\t\t\t( isActive ) => ! isActive\n\t\t)\n\t) {\n\t\treturn result;\n\t}\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the styles should not be transformed.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\t// For cases where we have a transform from one block to multiple blocks\n\t// or multiple blocks to one block we apply the styles of the first source block\n\t// to the result(s).\n\tlet referenceBlockAttributes = source[ 0 ]?.attributes;\n\t// If we are in presence of transform between more than one block in the source\n\t// that has more than one block in the result\n\t// we apply the styles on source N to the result N,\n\t// if source N does not exists we do nothing.\n\tif ( results.length > 1 && source.length > 1 ) {\n\t\tif ( source[ index ] ) {\n\t\t\treferenceBlockAttributes = source[ index ]?.attributes;\n\t\t} else {\n\t\t\treturn result;\n\t\t}\n\t}\n\tlet returnBlock = result;\n\tObject.entries( activeSupports ).forEach( ( [ support, isActive ] ) => {\n\t\tif ( isActive ) {\n\t\t\tmigrationPaths[ support ].forEach( ( path ) => {\n\t\t\t\tconst styleValue = getValueFromObjectPath(\n\t\t\t\t\treferenceBlockAttributes,\n\t\t\t\t\tpath\n\t\t\t\t);\n\t\t\t\tif ( styleValue ) {\n\t\t\t\t\treturnBlock = {\n\t\t\t\t\t\t...returnBlock,\n\t\t\t\t\t\tattributes: setImmutably(\n\t\t\t\t\t\t\treturnBlock.attributes,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tstyleValue\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\treturn returnBlock;\n}\n\n/**\n * Check whether serialization of specific block support feature or set should\n * be skipped.\n *\n * @param {string|Object} blockNameOrType Block name or block type object.\n * @param {string} featureSet Name of block support feature set.\n * @param {string} feature Name of the individual feature to check.\n *\n * @return {boolean} Whether serialization should occur.\n */\nexport function shouldSkipSerialization(\n\tblockNameOrType,\n\tfeatureSet,\n\tfeature\n) {\n\tconst support = getBlockSupport( blockNameOrType, featureSet );\n\tconst skipSerialization = support?.__experimentalSkipSerialization;\n\n\tif ( Array.isArray( skipSerialization ) ) {\n\t\treturn skipSerialization.includes( feature );\n\t}\n\n\treturn skipSerialization;\n}\n\nconst pendingStyleOverrides = new WeakMap();\n\n/**\n * Override a block editor settings style. Leave the ID blank to create a new\n * style.\n *\n * @param {Object} override Override object.\n * @param {?string} override.id Id of the style override, leave blank to create\n * a new style.\n * @param {string} override.css CSS to apply.\n */\nexport function useStyleOverride( { id, css } ) {\n\treturn usePrivateStyleOverride( { id, css } );\n}\n\nexport function usePrivateStyleOverride( {\n\tid,\n\tcss,\n\tassets,\n\t__unstableType,\n\tvariation,\n\tclientId,\n} = {} ) {\n\tconst { setStyleOverride, deleteStyleOverride } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst registry = useRegistry();\n\tconst fallbackId = useId();\n\tuseEffect( () => {\n\t\t// Unmount if there is CSS and assets are empty.\n\t\tif ( ! css && ! assets ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst _id = id || fallbackId;\n\t\tconst override = {\n\t\t\tid,\n\t\t\tcss,\n\t\t\tassets,\n\t\t\t__unstableType,\n\t\t\tvariation,\n\t\t\tclientId,\n\t\t};\n\t\t// Batch updates to style overrides to avoid triggering cascading renders\n\t\t// for each style override block included in a tree and optimize initial render.\n\t\tif ( ! pendingStyleOverrides.get( registry ) ) {\n\t\t\tpendingStyleOverrides.set( registry, [] );\n\t\t}\n\t\tpendingStyleOverrides.get( registry ).push( [ _id, override ] );\n\t\twindow.queueMicrotask( () => {\n\t\t\tif ( pendingStyleOverrides.get( registry )?.length ) {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tpendingStyleOverrides.get( registry ).forEach( ( args ) => {\n\t\t\t\t\t\tsetStyleOverride( ...args );\n\t\t\t\t\t} );\n\t\t\t\t\tpendingStyleOverrides.set( registry, [] );\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn () => {\n\t\t\tconst isPending = pendingStyleOverrides\n\t\t\t\t.get( registry )\n\t\t\t\t?.find( ( [ currentId ] ) => currentId === _id );\n\t\t\tif ( isPending ) {\n\t\t\t\tpendingStyleOverrides.set(\n\t\t\t\t\tregistry,\n\t\t\t\t\tpendingStyleOverrides\n\t\t\t\t\t\t.get( registry )\n\t\t\t\t\t\t.filter( ( [ currentId ] ) => currentId !== _id )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdeleteStyleOverride( _id );\n\t\t\t}\n\t\t};\n\t}, [\n\t\tid,\n\t\tcss,\n\t\tclientId,\n\t\tassets,\n\t\t__unstableType,\n\t\tfallbackId,\n\t\tsetStyleOverride,\n\t\tdeleteStyleOverride,\n\t\tregistry,\n\t] );\n}\n\n/**\n * Based on the block and its context, returns an object of all the block settings.\n * This object can be passed as a prop to all the Styles UI components\n * (TypographyPanel, DimensionsPanel...).\n *\n * @param {string} name Block name.\n * @param {*} parentLayout Parent layout.\n *\n * @return {Object} Settings object.\n */\nexport function useBlockSettings( name, parentLayout ) {\n\tconst [\n\t\tbackgroundImage,\n\t\tbackgroundSize,\n\t\tcustomFontFamilies,\n\t\tdefaultFontFamilies,\n\t\tthemeFontFamilies,\n\t\tdefaultFontSizesEnabled,\n\t\tcustomFontSizes,\n\t\tdefaultFontSizes,\n\t\tthemeFontSizes,\n\t\tcustomFontSize,\n\t\tfontStyle,\n\t\tfontWeight,\n\t\tlineHeight,\n\t\ttextAlign,\n\t\ttextColumns,\n\t\ttextDecoration,\n\t\twritingMode,\n\t\ttextTransform,\n\t\tletterSpacing,\n\t\tpadding,\n\t\tmargin,\n\t\tblockGap,\n\t\tdefaultSpacingSizesEnabled,\n\t\tcustomSpacingSize,\n\t\tuserSpacingSizes,\n\t\tdefaultSpacingSizes,\n\t\tthemeSpacingSizes,\n\t\tunits,\n\t\taspectRatio,\n\t\tminHeight,\n\t\tlayout,\n\t\tborderColor,\n\t\tborderRadius,\n\t\tborderStyle,\n\t\tborderWidth,\n\t\tcustomColorsEnabled,\n\t\tcustomColors,\n\t\tcustomDuotone,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tdefaultPalette,\n\t\tdefaultDuotone,\n\t\tuserDuotonePalette,\n\t\tthemeDuotonePalette,\n\t\tdefaultDuotonePalette,\n\t\tuserGradientPalette,\n\t\tthemeGradientPalette,\n\t\tdefaultGradientPalette,\n\t\tdefaultGradients,\n\t\tareCustomGradientsEnabled,\n\t\tisBackgroundEnabled,\n\t\tisLinkEnabled,\n\t\tisTextEnabled,\n\t\tisHeadingEnabled,\n\t\tisButtonEnabled,\n\t\tshadow,\n\t] = useSettings(\n\t\t'background.backgroundImage',\n\t\t'background.backgroundSize',\n\t\t'typography.fontFamilies.custom',\n\t\t'typography.fontFamilies.default',\n\t\t'typography.fontFamilies.theme',\n\t\t'typography.defaultFontSizes',\n\t\t'typography.fontSizes.custom',\n\t\t'typography.fontSizes.default',\n\t\t'typography.fontSizes.theme',\n\t\t'typography.customFontSize',\n\t\t'typography.fontStyle',\n\t\t'typography.fontWeight',\n\t\t'typography.lineHeight',\n\t\t'typography.textAlign',\n\t\t'typography.textColumns',\n\t\t'typography.textDecoration',\n\t\t'typography.writingMode',\n\t\t'typography.textTransform',\n\t\t'typography.letterSpacing',\n\t\t'spacing.padding',\n\t\t'spacing.margin',\n\t\t'spacing.blockGap',\n\t\t'spacing.defaultSpacingSizes',\n\t\t'spacing.customSpacingSize',\n\t\t'spacing.spacingSizes.custom',\n\t\t'spacing.spacingSizes.default',\n\t\t'spacing.spacingSizes.theme',\n\t\t'spacing.units',\n\t\t'dimensions.aspectRatio',\n\t\t'dimensions.minHeight',\n\t\t'layout',\n\t\t'border.color',\n\t\t'border.radius',\n\t\t'border.style',\n\t\t'border.width',\n\t\t'color.custom',\n\t\t'color.palette.custom',\n\t\t'color.customDuotone',\n\t\t'color.palette.theme',\n\t\t'color.palette.default',\n\t\t'color.defaultPalette',\n\t\t'color.defaultDuotone',\n\t\t'color.duotone.custom',\n\t\t'color.duotone.theme',\n\t\t'color.duotone.default',\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default',\n\t\t'color.defaultGradients',\n\t\t'color.customGradient',\n\t\t'color.background',\n\t\t'color.link',\n\t\t'color.text',\n\t\t'color.heading',\n\t\t'color.button',\n\t\t'shadow'\n\t);\n\n\tconst rawSettings = useMemo( () => {\n\t\treturn {\n\t\t\tbackground: {\n\t\t\t\tbackgroundImage,\n\t\t\t\tbackgroundSize,\n\t\t\t},\n\t\t\tcolor: {\n\t\t\t\tpalette: {\n\t\t\t\t\tcustom: customColors,\n\t\t\t\t\ttheme: themeColors,\n\t\t\t\t\tdefault: defaultColors,\n\t\t\t\t},\n\t\t\t\tgradients: {\n\t\t\t\t\tcustom: userGradientPalette,\n\t\t\t\t\ttheme: themeGradientPalette,\n\t\t\t\t\tdefault: defaultGradientPalette,\n\t\t\t\t},\n\t\t\t\tduotone: {\n\t\t\t\t\tcustom: userDuotonePalette,\n\t\t\t\t\ttheme: themeDuotonePalette,\n\t\t\t\t\tdefault: defaultDuotonePalette,\n\t\t\t\t},\n\t\t\t\tdefaultGradients,\n\t\t\t\tdefaultPalette,\n\t\t\t\tdefaultDuotone,\n\t\t\t\tcustom: customColorsEnabled,\n\t\t\t\tcustomGradient: areCustomGradientsEnabled,\n\t\t\t\tcustomDuotone,\n\t\t\t\tbackground: isBackgroundEnabled,\n\t\t\t\tlink: isLinkEnabled,\n\t\t\t\theading: isHeadingEnabled,\n\t\t\t\tbutton: isButtonEnabled,\n\t\t\t\ttext: isTextEnabled,\n\t\t\t},\n\t\t\ttypography: {\n\t\t\t\tfontFamilies: {\n\t\t\t\t\tcustom: customFontFamilies,\n\t\t\t\t\tdefault: defaultFontFamilies,\n\t\t\t\t\ttheme: themeFontFamilies,\n\t\t\t\t},\n\t\t\t\tfontSizes: {\n\t\t\t\t\tcustom: customFontSizes,\n\t\t\t\t\tdefault: defaultFontSizes,\n\t\t\t\t\ttheme: themeFontSizes,\n\t\t\t\t},\n\t\t\t\tcustomFontSize,\n\t\t\t\tdefaultFontSizes: defaultFontSizesEnabled,\n\t\t\t\tfontStyle,\n\t\t\t\tfontWeight,\n\t\t\t\tlineHeight,\n\t\t\t\ttextAlign,\n\t\t\t\ttextColumns,\n\t\t\t\ttextDecoration,\n\t\t\t\ttextTransform,\n\t\t\t\tletterSpacing,\n\t\t\t\twritingMode,\n\t\t\t},\n\t\t\tspacing: {\n\t\t\t\tspacingSizes: {\n\t\t\t\t\tcustom: userSpacingSizes,\n\t\t\t\t\tdefault: defaultSpacingSizes,\n\t\t\t\t\ttheme: themeSpacingSizes,\n\t\t\t\t},\n\t\t\t\tcustomSpacingSize,\n\t\t\t\tdefaultSpacingSizes: defaultSpacingSizesEnabled,\n\t\t\t\tpadding,\n\t\t\t\tmargin,\n\t\t\t\tblockGap,\n\t\t\t\tunits,\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tcolor: borderColor,\n\t\t\t\tradius: borderRadius,\n\t\t\t\tstyle: borderStyle,\n\t\t\t\twidth: borderWidth,\n\t\t\t},\n\t\t\tdimensions: {\n\t\t\t\taspectRatio,\n\t\t\t\tminHeight,\n\t\t\t},\n\t\t\tlayout,\n\t\t\tparentLayout,\n\t\t\tshadow,\n\t\t};\n\t}, [\n\t\tbackgroundImage,\n\t\tbackgroundSize,\n\t\tcustomFontFamilies,\n\t\tdefaultFontFamilies,\n\t\tthemeFontFamilies,\n\t\tdefaultFontSizesEnabled,\n\t\tcustomFontSizes,\n\t\tdefaultFontSizes,\n\t\tthemeFontSizes,\n\t\tcustomFontSize,\n\t\tfontStyle,\n\t\tfontWeight,\n\t\tlineHeight,\n\t\ttextAlign,\n\t\ttextColumns,\n\t\ttextDecoration,\n\t\ttextTransform,\n\t\tletterSpacing,\n\t\twritingMode,\n\t\tpadding,\n\t\tmargin,\n\t\tblockGap,\n\t\tdefaultSpacingSizesEnabled,\n\t\tcustomSpacingSize,\n\t\tuserSpacingSizes,\n\t\tdefaultSpacingSizes,\n\t\tthemeSpacingSizes,\n\t\tunits,\n\t\taspectRatio,\n\t\tminHeight,\n\t\tlayout,\n\t\tparentLayout,\n\t\tborderColor,\n\t\tborderRadius,\n\t\tborderStyle,\n\t\tborderWidth,\n\t\tcustomColorsEnabled,\n\t\tcustomColors,\n\t\tcustomDuotone,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tdefaultPalette,\n\t\tdefaultDuotone,\n\t\tuserDuotonePalette,\n\t\tthemeDuotonePalette,\n\t\tdefaultDuotonePalette,\n\t\tuserGradientPalette,\n\t\tthemeGradientPalette,\n\t\tdefaultGradientPalette,\n\t\tdefaultGradients,\n\t\tareCustomGradientsEnabled,\n\t\tisBackgroundEnabled,\n\t\tisLinkEnabled,\n\t\tisTextEnabled,\n\t\tisHeadingEnabled,\n\t\tisButtonEnabled,\n\t\tshadow,\n\t] );\n\n\treturn useSettingsForBlockElement( rawSettings, name );\n}\n\nexport function createBlockEditFilter( features ) {\n\t// We don't want block controls to re-render when typing inside a block.\n\t// `memo` will prevent re-renders unless props change, so only pass the\n\t// needed props and not the whole attributes object.\n\tfeatures = features.map( ( settings ) => {\n\t\treturn { ...settings, Edit: memo( settings.edit ) };\n\t} );\n\tconst withBlockEditHooks = createHigherOrderComponent(\n\t\t( OriginalBlockEdit ) => ( props ) => {\n\t\t\tconst context = useBlockEditContext();\n\t\t\t// CAUTION: code added before this line will be executed for all\n\t\t\t// blocks, not just those that support the feature! Code added\n\t\t\t// above this line should be carefully evaluated for its impact on\n\t\t\t// performance.\n\t\t\treturn [\n\t\t\t\t...features.map( ( feature, i ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tEdit,\n\t\t\t\t\t\thasSupport,\n\t\t\t\t\t\tattributeKeys = [],\n\t\t\t\t\t\tshareWithChildBlocks,\n\t\t\t\t\t} = feature;\n\t\t\t\t\tconst shouldDisplayControls =\n\t\t\t\t\t\tcontext[ mayDisplayControlsKey ] ||\n\t\t\t\t\t\t( context[ mayDisplayParentControlsKey ] &&\n\t\t\t\t\t\t\tshareWithChildBlocks );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! shouldDisplayControls ||\n\t\t\t\t\t\t! hasSupport( props.name )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst neededProps = {};\n\t\t\t\t\tfor ( const key of attributeKeys ) {\n\t\t\t\t\t\tif ( props.attributes[ key ] ) {\n\t\t\t\t\t\t\tneededProps[ key ] = props.attributes[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\t,\n\t\t\t];\n\t\t},\n\t\t'withBlockEditHooks'\n\t);\n\taddFilter( 'editor.BlockEdit', 'core/editor/hooks', withBlockEditHooks );\n}\n\nfunction BlockProps( { index, useBlockProps, setAllWrapperProps, ...props } ) {\n\tconst wrapperProps = useBlockProps( props );\n\tconst setWrapperProps = ( next ) =>\n\t\tsetAllWrapperProps( ( prev ) => {\n\t\t\tconst nextAll = [ ...prev ];\n\t\t\tnextAll[ index ] = next;\n\t\t\treturn nextAll;\n\t\t} );\n\t// Setting state after every render is fine because this component is\n\t// pure and will only re-render when needed props change.\n\tuseEffect( () => {\n\t\t// We could shallow compare the props, but since this component only\n\t\t// changes when needed attributes change, the benefit is probably small.\n\t\tsetWrapperProps( wrapperProps );\n\t\treturn () => {\n\t\t\tsetWrapperProps( undefined );\n\t\t};\n\t} );\n\treturn null;\n}\n\nconst BlockPropsPure = memo( BlockProps );\n\nexport function createBlockListBlockFilter( features ) {\n\tconst withBlockListBlockHooks = createHigherOrderComponent(\n\t\t( BlockListBlock ) => ( props ) => {\n\t\t\tconst [ allWrapperProps, setAllWrapperProps ] = useState(\n\t\t\t\tArray( features.length ).fill( undefined )\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t...features.map( ( feature, i ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\thasSupport,\n\t\t\t\t\t\tattributeKeys = [],\n\t\t\t\t\t\tuseBlockProps,\n\t\t\t\t\t\tisMatch,\n\t\t\t\t\t} = feature;\n\n\t\t\t\t\tconst neededProps = {};\n\t\t\t\t\tfor ( const key of attributeKeys ) {\n\t\t\t\t\t\tif ( props.attributes[ key ] ) {\n\t\t\t\t\t\t\tneededProps[ key ] = props.attributes[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip rendering if none of the needed attributes are\n\t\t\t\t\t\t// set.\n\t\t\t\t\t\t! Object.keys( neededProps ).length ||\n\t\t\t\t\t\t! hasSupport( props.name ) ||\n\t\t\t\t\t\t( isMatch && ! isMatch( neededProps ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\t {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t...wrapperProps,\n\t\t\t\t\t\t\t\tclassName: clsx(\n\t\t\t\t\t\t\t\t\tacc.className,\n\t\t\t\t\t\t\t\t\twrapperProps.className\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t...acc.style,\n\t\t\t\t\t\t\t\t\t...wrapperProps.style,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}, props.wrapperProps || {} ) }\n\t\t\t\t/>,\n\t\t\t];\n\t\t},\n\t\t'withBlockListBlockHooks'\n\t);\n\taddFilter(\n\t\t'editor.BlockListBlock',\n\t\t'core/editor/hooks',\n\t\twithBlockListBlockHooks\n\t);\n}\n\nexport function createBlockSaveFilter( features ) {\n\tfunction extraPropsFromHooks( props, name, attributes ) {\n\t\treturn features.reduce( ( accu, feature ) => {\n\t\t\tconst { hasSupport, attributeKeys = [], addSaveProps } = feature;\n\n\t\t\tconst neededAttributes = {};\n\t\t\tfor ( const key of attributeKeys ) {\n\t\t\t\tif ( attributes[ key ] ) {\n\t\t\t\t\tneededAttributes[ key ] = attributes[ key ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// Skip rendering if none of the needed attributes are\n\t\t\t\t// set.\n\t\t\t\t! Object.keys( neededAttributes ).length ||\n\t\t\t\t! hasSupport( name )\n\t\t\t) {\n\t\t\t\treturn accu;\n\t\t\t}\n\n\t\t\treturn addSaveProps( accu, name, neededAttributes );\n\t\t}, props );\n\t}\n\taddFilter(\n\t\t'blocks.getSaveContent.extraProps',\n\t\t'core/editor/hooks',\n\t\textraPropsFromHooks,\n\t\t0\n\t);\n\taddFilter(\n\t\t'blocks.getSaveContent.extraProps',\n\t\t'core/editor/hooks',\n\t\t( props ) => {\n\t\t\t// Previously we had a filter deleting the className if it was an empty\n\t\t\t// string. That filter is no longer running, so now we need to delete it\n\t\t\t// here.\n\t\t\tif ( props.hasOwnProperty( 'className' ) && ! props.className ) {\n\t\t\t\tdelete props.className;\n\t\t\t}\n\n\t\t\treturn props;\n\t\t}\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { addFilter } from '@wordpress/hooks';\n\nfunction migrateLightBlockWrapper( settings ) {\n\tconst { apiVersion = 1 } = settings;\n\tif (\n\t\tapiVersion < 2 &&\n\t\thasBlockSupport( settings, 'lightBlockWrapper', false )\n\t) {\n\t\tsettings.apiVersion = 2;\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/compat/migrateLightBlockWrapper',\n\tmigrateLightBlockWrapper\n);\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"components\"];","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst BlockControlsDefault = createSlotFill( 'BlockControls' );\nconst BlockControlsBlock = createSlotFill( 'BlockControlsBlock' );\nconst BlockControlsInline = createSlotFill( 'BlockFormatControls' );\nconst BlockControlsOther = createSlotFill( 'BlockControlsOther' );\nconst BlockControlsParent = createSlotFill( 'BlockControlsParent' );\n\nconst groups = {\n\tdefault: BlockControlsDefault,\n\tblock: BlockControlsBlock,\n\tinline: BlockControlsInline,\n\tother: BlockControlsOther,\n\tparent: BlockControlsParent,\n};\n\nexport default groups;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalStyleProvider as StyleProvider,\n\tToolbarGroup,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport useBlockControlsFill from './hook';\n\nexport default function BlockControlsFill( {\n\tgroup = 'default',\n\tcontrols,\n\tchildren,\n\t__experimentalShareWithChildBlocks = false,\n} ) {\n\tconst Fill = useBlockControlsFill(\n\t\tgroup,\n\t\t__experimentalShareWithChildBlocks\n\t);\n\tif ( ! Fill ) {\n\t\treturn null;\n\t}\n\n\tconst innerMarkup = (\n\t\t<>\n\t\t\t{ group === 'default' && }\n\t\t\t{ children }\n\t\t\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( fillProps ) => {\n\t\t\t\t\t// `fillProps.forwardedContext` is an array of context provider entries, provided by slot,\n\t\t\t\t\t// that should wrap the fill markup.\n\t\t\t\t\tconst { forwardedContext = [] } = fillProps;\n\t\t\t\t\treturn forwardedContext.reduce(\n\t\t\t\t\t\t( inner, [ Provider, props ] ) => (\n\t\t\t\t\t\t\t{ inner }\n\t\t\t\t\t\t),\n\t\t\t\t\t\tinnerMarkup\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\n\n/**\n * Internal dependencies\n */\nimport groups from './groups';\nimport {\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n\tmayDisplayParentControlsKey,\n} from '../block-edit/context';\n\nexport default function useBlockControlsFill( group, shareWithChildBlocks ) {\n\tconst context = useBlockEditContext();\n\tif ( context[ mayDisplayControlsKey ] ) {\n\t\treturn groups[ group ]?.Fill;\n\t}\n\tif ( context[ mayDisplayParentControlsKey ] && shareWithChildBlocks ) {\n\t\treturn groups.parent.Fill;\n\t}\n\treturn null;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"warning\"];","/**\n * WordPress dependencies\n */\nimport { useContext, useMemo } from '@wordpress/element';\nimport {\n\tprivateApis,\n\t__experimentalToolbarContext as ToolbarContext,\n\tToolbarGroup,\n\t__experimentalUseSlotFills as useSlotFills,\n} from '@wordpress/components';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport groups from './groups';\nimport { unlock } from '../../lock-unlock';\n\nconst { ComponentsContext } = unlock( privateApis );\n\nexport default function BlockControlsSlot( { group = 'default', ...props } ) {\n\tconst toolbarState = useContext( ToolbarContext );\n\tconst contextState = useContext( ComponentsContext );\n\tconst fillProps = useMemo(\n\t\t() => ( {\n\t\t\tforwardedContext: [\n\t\t\t\t[ ToolbarContext.Provider, { value: toolbarState } ],\n\t\t\t\t[ ComponentsContext.Provider, { value: contextState } ],\n\t\t\t],\n\t\t} ),\n\t\t[ toolbarState, contextState ]\n\t);\n\n\tconst Slot = groups[ group ]?.Slot;\n\tconst fills = useSlotFills( Slot?.__unstableName );\n\tif ( ! Slot ) {\n\t\twarning( `Unknown BlockControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\n\tif ( ! fills?.length ) {\n\t\treturn null;\n\t}\n\n\tconst slot = ;\n\n\tif ( group === 'default' ) {\n\t\treturn slot;\n\t}\n\n\treturn { slot };\n}\n","/**\n * Internal dependencies\n */\nimport BlockControlsFill from './fill';\nimport BlockControlsSlot from './slot';\n\nconst BlockControls = BlockControlsFill;\n\nBlockControls.Slot = BlockControlsSlot;\n\n// This is just here for backward compatibility.\nexport const BlockFormatControls = ( props ) => {\n\treturn ;\n};\nBlockFormatControls.Slot = ( props ) => {\n\treturn ;\n};\n\nexport default BlockControls;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyLeft = (\n\t\n\t\t\n\t\n);\n\nexport default justifyLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyCenter = (\n\t\n\t\t\n\t\n);\n\nexport default justifyCenter;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyRight = (\n\t\n\t\t\n\t\n);\n\nexport default justifyRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifySpaceBetween = (\n\t\n\t\t\n\t\n);\n\nexport default justifySpaceBetween;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst justifyStretch = (\n\t\n\t\t\n\t\n);\n\nexport default justifyStretch;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst arrowRight = (\n\t\n\t\t\n\t\n);\n\nexport default arrowRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst arrowDown = (\n\t\n\t\t\n\t\n);\n\nexport default arrowDown;\n","// Layout definitions keyed by layout type.\n// Provides a common definition of slugs, classnames, base styles, and spacing styles for each layout type.\n// If making changes or additions to layout definitions, be sure to update the corresponding PHP definitions in\n// `block-supports/layout.php` so that the server-side and client-side definitions match.\nexport const LAYOUT_DEFINITIONS = {\n\tdefault: {\n\t\tname: 'default',\n\t\tslug: 'flow',\n\t\tclassName: 'is-layout-flow',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > .alignleft',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t'margin-inline-start': '0',\n\t\t\t\t\t'margin-inline-end': '2em',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .alignright',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'right',\n\t\t\t\t\t'margin-inline-start': '2em',\n\t\t\t\t\t'margin-inline-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .aligncenter',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-left': 'auto !important',\n\t\t\t\t\t'margin-right': 'auto !important',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > :first-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > :last-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > *',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': null,\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tconstrained: {\n\t\tname: 'constrained',\n\t\tslug: 'constrained',\n\t\tclassName: 'is-layout-constrained',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > .alignleft',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t'margin-inline-start': '0',\n\t\t\t\t\t'margin-inline-end': '2em',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .alignright',\n\t\t\t\trules: {\n\t\t\t\t\tfloat: 'right',\n\t\t\t\t\t'margin-inline-start': '2em',\n\t\t\t\t\t'margin-inline-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .aligncenter',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-left': 'auto !important',\n\t\t\t\t\t'margin-right': 'auto !important',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector:\n\t\t\t\t\t' > :where(:not(.alignleft):not(.alignright):not(.alignfull))',\n\t\t\t\trules: {\n\t\t\t\t\t'max-width': 'var(--wp--style--global--content-size)',\n\t\t\t\t\t'margin-left': 'auto !important',\n\t\t\t\t\t'margin-right': 'auto !important',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > .alignwide',\n\t\t\t\trules: {\n\t\t\t\t\t'max-width': 'var(--wp--style--global--wide-size)',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > :first-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > :last-child',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > *',\n\t\t\t\trules: {\n\t\t\t\t\t'margin-block-start': null,\n\t\t\t\t\t'margin-block-end': '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tflex: {\n\t\tname: 'flex',\n\t\tslug: 'flex',\n\t\tclassName: 'is-layout-flex',\n\t\tdisplayMode: 'flex',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: '',\n\t\t\t\trules: {\n\t\t\t\t\t'flex-wrap': 'wrap',\n\t\t\t\t\t'align-items': 'center',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tselector: ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.\n\t\t\t\trules: {\n\t\t\t\t\tmargin: '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: '',\n\t\t\t\trules: {\n\t\t\t\t\tgap: null,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tgrid: {\n\t\tname: 'grid',\n\t\tslug: 'grid',\n\t\tclassName: 'is-layout-grid',\n\t\tdisplayMode: 'grid',\n\t\tbaseStyles: [\n\t\t\t{\n\t\t\t\tselector: ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.\n\t\t\t\trules: {\n\t\t\t\t\tmargin: '0',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tspacingStyles: [\n\t\t\t{\n\t\t\t\tselector: '',\n\t\t\t\trules: {\n\t\t\t\t\tgap: null,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\n/**\n * Utility to generate the proper CSS selector for layout styles.\n *\n * @param {string} selectors CSS selector, also supports multiple comma-separated selectors.\n * @param {string} append The string to append.\n *\n * @return {string} - CSS selector.\n */\nexport function appendSelectors( selectors, append = '' ) {\n\treturn selectors\n\t\t.split( ',' )\n\t\t.map(\n\t\t\t( subselector ) =>\n\t\t\t\t`${ subselector }${ append ? ` ${ append }` : '' }`\n\t\t)\n\t\t.join( ',' );\n}\n\n/**\n * Get generated blockGap CSS rules based on layout definitions provided in theme.json\n * Falsy values in the layout definition's spacingStyles rules will be swapped out\n * with the provided `blockGapValue`.\n *\n * @param {string} selector The CSS selector to target for the generated rules.\n * @param {Object} layoutDefinitions Layout definitions object.\n * @param {string} layoutType The layout type (e.g. `default` or `flex`).\n * @param {string} blockGapValue The current blockGap value to be applied.\n * @return {string} The generated CSS rules.\n */\nexport function getBlockGapCSS(\n\tselector,\n\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\tlayoutType,\n\tblockGapValue\n) {\n\tlet output = '';\n\tif (\n\t\tlayoutDefinitions?.[ layoutType ]?.spacingStyles?.length &&\n\t\tblockGapValue\n\t) {\n\t\tlayoutDefinitions[ layoutType ].spacingStyles.forEach( ( gapStyle ) => {\n\t\t\toutput += `${ appendSelectors(\n\t\t\t\tselector,\n\t\t\t\tgapStyle.selector.trim()\n\t\t\t) } { `;\n\t\t\toutput += Object.entries( gapStyle.rules )\n\t\t\t\t.map(\n\t\t\t\t\t( [ cssProperty, value ] ) =>\n\t\t\t\t\t\t`${ cssProperty }: ${ value ? value : blockGapValue }`\n\t\t\t\t)\n\t\t\t\t.join( '; ' );\n\t\t\toutput += '; }';\n\t\t} );\n\t}\n\treturn output;\n}\n\n/**\n * Helper method to assign contextual info to clarify\n * alignment settings.\n *\n * Besides checking if `contentSize` and `wideSize` have a\n * value, we now show this information only if their values\n * are not a `css var`. This needs to change when parsing\n * css variables land.\n *\n * @see https://github.com/WordPress/gutenberg/pull/34710#issuecomment-918000752\n *\n * @param {Object} layout The layout object.\n * @return {Object} An object with contextual info per alignment.\n */\nexport function getAlignmentsInfo( layout ) {\n\tconst { contentSize, wideSize, type = 'default' } = layout;\n\tconst alignmentInfo = {};\n\tconst sizeRegex =\n\t\t/^(?!0)\\d+(px|em|rem|vw|vh|%|svw|lvw|dvw|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax)?$/i;\n\tif ( sizeRegex.test( contentSize ) && type === 'constrained' ) {\n\t\t// translators: %s: container size (i.e. 600px etc)\n\t\talignmentInfo.none = sprintf( __( 'Max %s wide' ), contentSize );\n\t}\n\tif ( sizeRegex.test( wideSize ) ) {\n\t\t// translators: %s: container size (i.e. 600px etc)\n\t\talignmentInfo.wide = sprintf( __( 'Max %s wide' ), wideSize );\n\t}\n\treturn alignmentInfo;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesAll = (\n\t\n\t\t\n\t\n);\n\nexport default sidesAll;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesHorizontal = (\n\t\n\t\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesHorizontal;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesVertical = (\n\t\n\t\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesVertical;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesTop = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesTop;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesRight = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesBottom = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesBottom;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst sidesLeft = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default sidesLeft;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tsidesAll,\n\tsidesBottom,\n\tsidesHorizontal,\n\tsidesLeft,\n\tsidesRight,\n\tsidesTop,\n\tsidesVertical,\n} from '@wordpress/icons';\n\nexport const RANGE_CONTROL_MAX_SIZE = 8;\n\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\n\nexport const DEFAULT_VALUES = {\n\ttop: undefined,\n\tright: undefined,\n\tbottom: undefined,\n\tleft: undefined,\n};\n\nexport const ICONS = {\n\tcustom: sidesAll,\n\taxial: sidesAll,\n\thorizontal: sidesHorizontal,\n\tvertical: sidesVertical,\n\ttop: sidesTop,\n\tright: sidesRight,\n\tbottom: sidesBottom,\n\tleft: sidesLeft,\n};\n\nexport const LABELS = {\n\tdefault: __( 'Spacing control' ),\n\ttop: __( 'Top' ),\n\tbottom: __( 'Bottom' ),\n\tleft: __( 'Left' ),\n\tright: __( 'Right' ),\n\tmixed: __( 'Mixed' ),\n\tvertical: __( 'Vertical' ),\n\thorizontal: __( 'Horizontal' ),\n\taxial: __( 'Horizontal & vertical' ),\n\tcustom: __( 'Custom' ),\n};\n\nexport const VIEWS = {\n\taxial: 'axial',\n\ttop: 'top',\n\tright: 'right',\n\tbottom: 'bottom',\n\tleft: 'left',\n\tcustom: 'custom',\n};\n\n/**\n * Checks is given value is a spacing preset.\n *\n * @param {string} value Value to check\n *\n * @return {boolean} Return true if value is string in format var:preset|spacing|.\n */\nexport function isValueSpacingPreset( value ) {\n\tif ( ! value?.includes ) {\n\t\treturn false;\n\t}\n\treturn value === '0' || value.includes( 'var:preset|spacing|' );\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} Mapping of the spacing preset to its equivalent custom value.\n */\nexport function getCustomValueFromPreset( value, spacingSizes ) {\n\tif ( ! isValueSpacingPreset( value ) ) {\n\t\treturn value;\n\t}\n\n\tconst slug = getSpacingPresetSlug( value );\n\tconst spacingSize = spacingSizes.find(\n\t\t( size ) => String( size.slug ) === slug\n\t);\n\n\treturn spacingSize?.size;\n}\n\n/**\n * Converts a custom value to preset value if one can be found.\n *\n * Returns value as-is if no match is found.\n *\n * @param {string} value Value to convert\n * @param {Array} spacingSizes Array of the current spacing preset objects\n *\n * @return {string} The preset value if it can be found.\n */\nexport function getPresetValueFromCustomValue( value, spacingSizes ) {\n\t// Return value as-is if it is undefined or is already a preset, or '0';\n\tif ( ! value || isValueSpacingPreset( value ) || value === '0' ) {\n\t\treturn value;\n\t}\n\n\tconst spacingMatch = spacingSizes.find(\n\t\t( size ) => String( size.size ) === String( value )\n\t);\n\n\tif ( spacingMatch?.slug ) {\n\t\treturn `var:preset|spacing|${ spacingMatch.slug }`;\n\t}\n\n\treturn value;\n}\n\n/**\n * Converts a spacing preset into a custom value.\n *\n * @param {string} value Value to convert.\n *\n * @return {string | undefined} CSS var string for given spacing preset value.\n */\nexport function getSpacingPresetCssVar( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\tif ( ! slug ) {\n\t\treturn value;\n\t}\n\n\treturn `var(--wp--preset--spacing--${ slug[ 1 ] })`;\n}\n\n/**\n * Returns the slug section of the given spacing preset string.\n *\n * @param {string} value Value to extract slug from.\n *\n * @return {string|undefined} The int value of the slug from given spacing preset.\n */\nexport function getSpacingPresetSlug( value ) {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\tif ( value === '0' || value === 'default' ) {\n\t\treturn value;\n\t}\n\n\tconst slug = value.match( /var:preset\\|spacing\\|(.+)/ );\n\n\treturn slug ? slug[ 1 ] : undefined;\n}\n\n/**\n * Converts spacing preset value into a Range component value .\n *\n * @param {string} presetValue Value to convert to Range value.\n * @param {Array} spacingSizes Array of current spacing preset value objects.\n *\n * @return {number} The int value for use in Range control.\n */\nexport function getSliderValueFromPreset( presetValue, spacingSizes ) {\n\tif ( presetValue === undefined ) {\n\t\treturn 0;\n\t}\n\tconst slug =\n\t\tparseFloat( presetValue, 10 ) === 0\n\t\t\t? '0'\n\t\t\t: getSpacingPresetSlug( presetValue );\n\tconst sliderValue = spacingSizes.findIndex( ( spacingSize ) => {\n\t\treturn String( spacingSize.slug ) === slug;\n\t} );\n\n\t// Returning NaN rather than undefined as undefined makes range control thumb sit in center\n\treturn sliderValue !== -1 ? sliderValue : NaN;\n}\n\n/**\n * Gets an items with the most occurrence within an array\n * https://stackoverflow.com/a/20762713\n *\n * @param {Array} arr Array of items to check.\n * @return {any} The item with the most occurrences.\n */\nfunction mode( arr ) {\n\treturn arr\n\t\t.sort(\n\t\t\t( a, b ) =>\n\t\t\t\tarr.filter( ( v ) => v === a ).length -\n\t\t\t\tarr.filter( ( v ) => v === b ).length\n\t\t)\n\t\t.pop();\n}\n\n/**\n * Gets the 'all' input value from values data.\n *\n * @param {Object} values Box spacing values\n *\n * @return {string} The most common value from all sides of box.\n */\nexport function getAllRawValue( values = {} ) {\n\treturn mode( Object.values( values ) );\n}\n\n/**\n * Checks to determine if values are mixed.\n *\n * @param {Object} values Box values.\n * @param {Array} sides Sides that values relate to.\n *\n * @return {boolean} Whether values are mixed.\n */\nexport function isValuesMixed( values = {}, sides = ALL_SIDES ) {\n\treturn (\n\t\t( Object.values( values ).length >= 1 &&\n\t\t\tObject.values( values ).length < sides.length ) ||\n\t\tnew Set( Object.values( values ) ).size > 1\n\t);\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param {Object} values Box values.\n *\n * @return {boolean} Whether values are defined.\n */\nexport function isValuesDefined( values ) {\n\tif ( values === undefined || values === null ) {\n\t\treturn false;\n\t}\n\treturn Object.values( values ).filter( ( value ) => !! value ).length > 0;\n}\n\n/**\n * Determines whether a particular axis has support. If no axis is\n * specified, this function checks if either axis is supported.\n *\n * @param {Array} sides Supported sides.\n * @param {string} axis Which axis to check.\n *\n * @return {boolean} Whether there is support for the specified axis or both axes.\n */\nexport function hasAxisSupport( sides, axis ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn false;\n\t}\n\n\tconst hasHorizontalSupport =\n\t\tsides.includes( 'horizontal' ) ||\n\t\t( sides.includes( 'left' ) && sides.includes( 'right' ) );\n\n\tconst hasVerticalSupport =\n\t\tsides.includes( 'vertical' ) ||\n\t\t( sides.includes( 'top' ) && sides.includes( 'bottom' ) );\n\n\tif ( axis === 'horizontal' ) {\n\t\treturn hasHorizontalSupport;\n\t}\n\n\tif ( axis === 'vertical' ) {\n\t\treturn hasVerticalSupport;\n\t}\n\n\treturn hasHorizontalSupport || hasVerticalSupport;\n}\n\n/**\n * Determines which menu options should be included in the SidePicker.\n *\n * @param {Array} sides Supported sides.\n *\n * @return {Object} Menu options with each option containing label & icon.\n */\nexport function getSupportedMenuItems( sides ) {\n\tif ( ! sides || ! sides.length ) {\n\t\treturn {};\n\t}\n\n\tconst menuItems = {};\n\n\t// Determine the primary \"side\" menu options.\n\tconst hasHorizontalSupport = hasAxisSupport( sides, 'horizontal' );\n\tconst hasVerticalSupport = hasAxisSupport( sides, 'vertical' );\n\n\tif ( hasHorizontalSupport && hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.axial, icon: ICONS.axial };\n\t} else if ( hasHorizontalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.horizontal, icon: ICONS.horizontal };\n\t} else if ( hasVerticalSupport ) {\n\t\tmenuItems.axial = { label: LABELS.vertical, icon: ICONS.vertical };\n\t}\n\n\t// Track whether we have any individual sides so we can omit the custom\n\t// option if required.\n\tlet numberOfIndividualSides = 0;\n\n\tALL_SIDES.forEach( ( side ) => {\n\t\tif ( sides.includes( side ) ) {\n\t\t\tnumberOfIndividualSides += 1;\n\t\t\tmenuItems[ side ] = {\n\t\t\t\tlabel: LABELS[ side ],\n\t\t\t\ticon: ICONS[ side ],\n\t\t\t};\n\t\t}\n\t} );\n\n\t// Add custom item if there are enough sides to warrant a separated view.\n\tif ( numberOfIndividualSides > 1 ) {\n\t\tmenuItems.custom = { label: LABELS.custom, icon: ICONS.custom };\n\t}\n\n\treturn menuItems;\n}\n\n/**\n * Checks if the supported sides are balanced for each axis.\n * - Horizontal - both left and right sides are supported.\n * - Vertical - both top and bottom are supported.\n *\n * @param {Array} sides The supported sides which may be axes as well.\n *\n * @return {boolean} Whether or not the supported sides are balanced.\n */\nexport function hasBalancedSidesSupport( sides = [] ) {\n\tconst counts = { top: 0, right: 0, bottom: 0, left: 0 };\n\tsides.forEach( ( side ) => ( counts[ side ] += 1 ) );\n\n\treturn (\n\t\t( counts.top + counts.bottom ) % 2 === 0 &&\n\t\t( counts.left + counts.right ) % 2 === 0\n\t);\n}\n\n/**\n * Determines which view the SpacingSizesControl should default to on its\n * first render; Axial, Custom, or Single side.\n *\n * @param {Object} values Current side values.\n * @param {Array} sides Supported sides.\n *\n * @return {string} View to display.\n */\nexport function getInitialView( values = {}, sides ) {\n\tconst { top, right, bottom, left } = values;\n\tconst sideValues = [ top, right, bottom, left ].filter( Boolean );\n\n\t// Axial ( Horizontal & vertical ).\n\t// - Has axial side support\n\t// - Has axial side values which match\n\t// - Has no values and the supported sides are balanced\n\tconst hasMatchingAxialValues =\n\t\ttop === bottom && left === right && ( !! top || !! left );\n\tconst hasNoValuesAndBalancedSides =\n\t\t! sideValues.length && hasBalancedSidesSupport( sides );\n\tconst hasOnlyAxialSides =\n\t\tsides?.includes( 'horizontal' ) &&\n\t\tsides?.includes( 'vertical' ) &&\n\t\tsides?.length === 2;\n\n\tif (\n\t\thasAxisSupport( sides ) &&\n\t\t( hasMatchingAxialValues || hasNoValuesAndBalancedSides )\n\t) {\n\t\treturn VIEWS.axial;\n\t}\n\n\t// Only axial sides are supported and single value defined.\n\t// - Ensure the side returned is the first side that has a value.\n\tif ( hasOnlyAxialSides && sideValues.length === 1 ) {\n\t\tlet side;\n\n\t\tObject.entries( values ).some( ( [ key, value ] ) => {\n\t\t\tside = key;\n\t\t\treturn value !== undefined;\n\t\t} );\n\n\t\treturn side;\n\t}\n\n\t// Only single side supported and no value defined.\n\tif ( sides?.length === 1 && ! sideValues.length ) {\n\t\treturn sides[ 0 ];\n\t}\n\n\t// Default to the Custom (separated sides) view.\n\treturn VIEWS.custom;\n}\n","/**\n * Internal dependencies\n */\nimport { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';\n\n/**\n * Returns a BoxControl object value from a given blockGap style value.\n * The string check is for backwards compatibility before Gutenberg supported\n * split gap values (row and column) and the value was a string n + unit.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @return {Object|null} A value to pass to the BoxControl component.\n */\nexport function getGapBoxControlValueFromStyle( blockGapValue ) {\n\tif ( ! blockGapValue ) {\n\t\treturn null;\n\t}\n\n\tconst isValueString = typeof blockGapValue === 'string';\n\treturn {\n\t\ttop: isValueString ? blockGapValue : blockGapValue?.top,\n\t\tleft: isValueString ? blockGapValue : blockGapValue?.left,\n\t};\n}\n\n/**\n * Returns a CSS value for the `gap` property from a given blockGap style.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @param {string?} defaultValue A default gap value.\n * @return {string|null} The concatenated gap value (row and column).\n */\nexport function getGapCSSValue( blockGapValue, defaultValue = '0' ) {\n\tconst blockGapBoxControlValue =\n\t\tgetGapBoxControlValueFromStyle( blockGapValue );\n\tif ( ! blockGapBoxControlValue ) {\n\t\treturn null;\n\t}\n\n\tconst row =\n\t\tgetSpacingPresetCssVar( blockGapBoxControlValue?.top ) || defaultValue;\n\tconst column =\n\t\tgetSpacingPresetCssVar( blockGapBoxControlValue?.left ) || defaultValue;\n\n\treturn row === column ? row : `${ row } ${ column }`;\n}\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/components';\n\nexport const alignBottom = (\n\t\n\t\t\n\t\n);\n\nexport const alignCenter = (\n\t\n\t\t\n\t\n);\n\nexport const alignTop = (\n\t\n\t\t\n\t\n);\n\nexport const alignStretch = (\n\t\n\t\t\n\t\n);\n\nexport const spaceBetween = (\n\t\n\t\t\n\t\n);\n","/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\nimport { ToolbarGroup, ToolbarDropdownMenu } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\talignTop,\n\talignCenter,\n\talignBottom,\n\talignStretch,\n\tspaceBetween,\n} from './icons';\n\nconst BLOCK_ALIGNMENTS_CONTROLS = {\n\ttop: {\n\t\ticon: alignTop,\n\t\ttitle: _x( 'Align top', 'Block vertical alignment setting' ),\n\t},\n\tcenter: {\n\t\ticon: alignCenter,\n\t\ttitle: _x( 'Align middle', 'Block vertical alignment setting' ),\n\t},\n\tbottom: {\n\t\ticon: alignBottom,\n\t\ttitle: _x( 'Align bottom', 'Block vertical alignment setting' ),\n\t},\n\tstretch: {\n\t\ticon: alignStretch,\n\t\ttitle: _x( 'Stretch to fill', 'Block vertical alignment setting' ),\n\t},\n\t'space-between': {\n\t\ticon: spaceBetween,\n\t\ttitle: _x( 'Space between', 'Block vertical alignment setting' ),\n\t},\n};\n\nconst DEFAULT_CONTROLS = [ 'top', 'center', 'bottom' ];\nconst DEFAULT_CONTROL = 'top';\n\nfunction BlockVerticalAlignmentUI( {\n\tvalue,\n\tonChange,\n\tcontrols = DEFAULT_CONTROLS,\n\tisCollapsed = true,\n\tisToolbar,\n} ) {\n\tfunction applyOrUnset( align ) {\n\t\treturn () => onChange( value === align ? undefined : align );\n\t}\n\n\tconst activeAlignment = BLOCK_ALIGNMENTS_CONTROLS[ value ];\n\tconst defaultAlignmentControl =\n\t\tBLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst extraProps = isToolbar ? { isCollapsed } : {};\n\n\treturn (\n\t\t {\n\t\t\t\treturn {\n\t\t\t\t\t...BLOCK_ALIGNMENTS_CONTROLS[ control ],\n\t\t\t\t\tisActive: value === control,\n\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\tonClick: applyOrUnset( control ),\n\t\t\t\t};\n\t\t\t} ) }\n\t\t\t{ ...extraProps }\n\t\t/>\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-vertical-alignment-toolbar/README.md\n */\nexport default BlockVerticalAlignmentUI;\n","/**\n * Internal dependencies\n */\nimport BlockVerticalAlignmentUI from './ui';\n\nconst BlockVerticalAlignmentControl = ( props ) => {\n\treturn ;\n};\n\nconst BlockVerticalAlignmentToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-vertical-alignment-control/README.md\n */\nexport { BlockVerticalAlignmentControl, BlockVerticalAlignmentToolbar };\n","/**\n * WordPress dependencies\n */\nimport { ToolbarDropdownMenu, ToolbarGroup } from '@wordpress/components';\nimport {\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n\tjustifySpaceBetween,\n\tjustifyStretch,\n} from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nconst icons = {\n\tleft: justifyLeft,\n\tcenter: justifyCenter,\n\tright: justifyRight,\n\t'space-between': justifySpaceBetween,\n\tstretch: justifyStretch,\n};\n\nfunction JustifyContentUI( {\n\tallowedControls = [ 'left', 'center', 'right', 'space-between' ],\n\tisCollapsed = true,\n\tonChange,\n\tvalue,\n\tpopoverProps,\n\tisToolbar,\n} ) {\n\t// If the control is already selected we want a click\n\t// again on the control to deselect the item, so we\n\t// call onChange( undefined )\n\tconst handleClick = ( next ) => {\n\t\tif ( next === value ) {\n\t\t\tonChange( undefined );\n\t\t} else {\n\t\t\tonChange( next );\n\t\t}\n\t};\n\n\tconst icon = value ? icons[ value ] : icons.left;\n\tconst allControls = [\n\t\t{\n\t\t\tname: 'left',\n\t\t\ticon: justifyLeft,\n\t\t\ttitle: __( 'Justify items left' ),\n\t\t\tisActive: 'left' === value,\n\t\t\tonClick: () => handleClick( 'left' ),\n\t\t},\n\t\t{\n\t\t\tname: 'center',\n\t\t\ticon: justifyCenter,\n\t\t\ttitle: __( 'Justify items center' ),\n\t\t\tisActive: 'center' === value,\n\t\t\tonClick: () => handleClick( 'center' ),\n\t\t},\n\t\t{\n\t\t\tname: 'right',\n\t\t\ticon: justifyRight,\n\t\t\ttitle: __( 'Justify items right' ),\n\t\t\tisActive: 'right' === value,\n\t\t\tonClick: () => handleClick( 'right' ),\n\t\t},\n\t\t{\n\t\t\tname: 'space-between',\n\t\t\ticon: justifySpaceBetween,\n\t\t\ttitle: __( 'Space between items' ),\n\t\t\tisActive: 'space-between' === value,\n\t\t\tonClick: () => handleClick( 'space-between' ),\n\t\t},\n\t\t{\n\t\t\tname: 'stretch',\n\t\t\ticon: justifyStretch,\n\t\t\ttitle: __( 'Stretch items' ),\n\t\t\tisActive: 'stretch' === value,\n\t\t\tonClick: () => handleClick( 'stretch' ),\n\t\t},\n\t];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst extraProps = isToolbar ? { isCollapsed } : {};\n\n\treturn (\n\t\t\n\t\t\t\tallowedControls.includes( elem.name )\n\t\t\t) }\n\t\t\t{ ...extraProps }\n\t\t/>\n\t);\n}\n\nexport default JustifyContentUI;\n","/**\n * Internal dependencies\n */\nimport JustifyContentUI from './ui';\n\nconst JustifyContentControl = ( props ) => {\n\treturn ;\n};\n\nconst JustifyToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/justify-content-control/README.md\n */\nexport { JustifyContentControl, JustifyToolbar };\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n\tjustifySpaceBetween,\n\tjustifyStretch,\n\tarrowRight,\n\tarrowDown,\n} from '@wordpress/icons';\nimport {\n\tButton,\n\tToggleControl,\n\tFlex,\n\tFlexItem,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { appendSelectors, getBlockGapCSS } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport {\n\tBlockControls,\n\tJustifyContentControl,\n\tBlockVerticalAlignmentControl,\n} from '../components';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\n// Used with the default, horizontal flex orientation.\nconst justifyContentMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n\t'space-between': 'space-between',\n};\n\n// Used with the vertical (column) flex orientation.\nconst alignItemsMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n\tstretch: 'stretch',\n};\n\nconst verticalAlignmentMap = {\n\ttop: 'flex-start',\n\tcenter: 'center',\n\tbottom: 'flex-end',\n\tstretch: 'stretch',\n\t'space-between': 'space-between',\n};\n\nconst flexWrapOptions = [ 'wrap', 'nowrap' ];\n\nexport default {\n\tname: 'flex',\n\tlabel: __( 'Flex' ),\n\tinspectorControls: function FlexLayoutInspectorControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { allowOrientation = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ allowOrientation && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\ttoolBarControls: function FlexLayoutToolbarControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport,\n\t} ) {\n\t\tif ( layoutBlockSupport?.allowSwitching ) {\n\t\t\treturn null;\n\t\t}\n\t\tconst { allowVerticalAlignment = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ allowVerticalAlignment && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\n\t\t// If a block's block.json skips serialization for spacing or spacing.blockGap,\n\t\t// don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tstyle?.spacing?.blockGap &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? getGapCSSValue( style?.spacing?.blockGap, '0.5em' )\n\t\t\t\t: undefined;\n\t\tconst justifyContent = justifyContentMap[ layout.justifyContent ];\n\t\tconst flexWrap = flexWrapOptions.includes( layout.flexWrap )\n\t\t\t? layout.flexWrap\n\t\t\t: 'wrap';\n\t\tconst verticalAlignment =\n\t\t\tverticalAlignmentMap[ layout.verticalAlignment ];\n\t\tconst alignItems =\n\t\t\talignItemsMap[ layout.justifyContent ] || alignItemsMap.left;\n\n\t\tlet output = '';\n\t\tconst rules = [];\n\n\t\tif ( flexWrap && flexWrap !== 'wrap' ) {\n\t\t\trules.push( `flex-wrap: ${ flexWrap }` );\n\t\t}\n\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\tif ( verticalAlignment ) {\n\t\t\t\trules.push( `align-items: ${ verticalAlignment }` );\n\t\t\t}\n\t\t\tif ( justifyContent ) {\n\t\t\t\trules.push( `justify-content: ${ justifyContent }` );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( verticalAlignment ) {\n\t\t\t\trules.push( `justify-content: ${ verticalAlignment }` );\n\t\t\t}\n\t\t\trules.push( 'flex-direction: column' );\n\t\t\trules.push( `align-items: ${ alignItems }` );\n\t\t}\n\n\t\tif ( rules.length ) {\n\t\t\toutput = `${ appendSelectors( selector ) } {\n\t\t\t\t${ rules.join( '; ' ) };\n\t\t\t}`;\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'flex',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation( layout ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\t\treturn orientation;\n\t},\n\tgetAlignments() {\n\t\treturn [];\n\t},\n};\n\nfunction FlexLayoutVerticalAlignmentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { orientation = 'horizontal' } = layout;\n\n\tconst defaultVerticalAlignment =\n\t\torientation === 'horizontal'\n\t\t\t? verticalAlignmentMap.center\n\t\t\t: verticalAlignmentMap.top;\n\n\tconst { verticalAlignment = defaultVerticalAlignment } = layout;\n\n\tconst onVerticalAlignmentChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tverticalAlignment: value,\n\t\t} );\n\t};\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\tconst verticalAlignmentOptions = [\n\t\t{\n\t\t\tvalue: 'flex-start',\n\t\t\tlabel: __( 'Align items top' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\tlabel: __( 'Align items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'flex-end',\n\t\t\tlabel: __( 'Align items bottom' ),\n\t\t},\n\t];\n\n\treturn (\n\t\t
    \n\t\t\t{ __( 'Vertical alignment' ) }\n\t\t\t
    \n\t\t\t\t{ verticalAlignmentOptions.map( ( value, icon, label ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t onVerticalAlignmentChange( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t
    \n\t\t
    \n\t);\n}\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nfunction FlexLayoutJustifyContentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { justifyContent = 'left', orientation = 'horizontal' } = layout;\n\tconst onJustificationChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tjustifyContent: value,\n\t\t} );\n\t};\n\tconst allowedControls = [ 'left', 'center', 'right' ];\n\tif ( orientation === 'horizontal' ) {\n\t\tallowedControls.push( 'space-between' );\n\t} else {\n\t\tallowedControls.push( 'stretch' );\n\t}\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\tconst justificationOptions = [\n\t\t{\n\t\t\tvalue: 'left',\n\t\t\ticon: justifyLeft,\n\t\t\tlabel: __( 'Justify items left' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\ticon: justifyCenter,\n\t\t\tlabel: __( 'Justify items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'right',\n\t\t\ticon: justifyRight,\n\t\t\tlabel: __( 'Justify items right' ),\n\t\t},\n\t];\n\tif ( orientation === 'horizontal' ) {\n\t\tjustificationOptions.push( {\n\t\t\tvalue: 'space-between',\n\t\t\ticon: justifySpaceBetween,\n\t\t\tlabel: __( 'Space between items' ),\n\t\t} );\n\t} else {\n\t\tjustificationOptions.push( {\n\t\t\tvalue: 'stretch',\n\t\t\ticon: justifyStretch,\n\t\t\tlabel: __( 'Stretch items' ),\n\t\t} );\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ justificationOptions.map( ( { value, icon, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\nfunction FlexWrapControl( { layout, onChange } ) {\n\tconst { flexWrap = 'wrap' } = layout;\n\treturn (\n\t\t {\n\t\t\t\tonChange( {\n\t\t\t\t\t...layout,\n\t\t\t\t\tflexWrap: value ? 'wrap' : 'nowrap',\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tchecked={ flexWrap === 'wrap' }\n\t\t/>\n\t);\n}\n\nfunction OrientationControl( { layout, onChange } ) {\n\tconst {\n\t\torientation = 'horizontal',\n\t\tverticalAlignment,\n\t\tjustifyContent,\n\t} = layout;\n\treturn (\n\t\t {\n\t\t\t\t// Make sure the vertical alignment and justification are compatible with the new orientation.\n\t\t\t\tlet newVerticalAlignment = verticalAlignment;\n\t\t\t\tlet newJustification = justifyContent;\n\t\t\t\tif ( value === 'horizontal' ) {\n\t\t\t\t\tif ( verticalAlignment === 'space-between' ) {\n\t\t\t\t\t\tnewVerticalAlignment = 'center';\n\t\t\t\t\t}\n\t\t\t\t\tif ( justifyContent === 'stretch' ) {\n\t\t\t\t\t\tnewJustification = 'left';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ( verticalAlignment === 'stretch' ) {\n\t\t\t\t\t\tnewVerticalAlignment = 'top';\n\t\t\t\t\t}\n\t\t\t\t\tif ( justifyContent === 'space-between' ) {\n\t\t\t\t\t\tnewJustification = 'left';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn onChange( {\n\t\t\t\t\t...layout,\n\t\t\t\t\torientation: value,\n\t\t\t\t\tverticalAlignment: newVerticalAlignment,\n\t\t\t\t\tjustifyContent: newJustification,\n\t\t\t\t} );\n\t\t\t} }\n\t\t>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getBlockGapCSS, getAlignmentsInfo } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\nexport default {\n\tname: 'default',\n\tlabel: __( 'Flow' ),\n\tinspectorControls: function DefaultLayoutInspectorControls() {\n\t\treturn null;\n\t},\n\ttoolBarControls: function DefaultLayoutToolbarControls() {\n\t\treturn null;\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst blockGapStyleValue = getGapCSSValue( style?.spacing?.blockGap );\n\n\t\t// If a block's block.json skips serialization for spacing or\n\t\t// spacing.blockGap, don't apply the user-defined value to the styles.\n\t\tlet blockGapValue = '';\n\t\tif ( ! shouldSkipSerialization( blockName, 'spacing', 'blockGap' ) ) {\n\t\t\t// If an object is provided only use the 'top' value for this kind of gap.\n\t\t\tif ( blockGapStyleValue?.top ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue?.top );\n\t\t\t} else if ( typeof blockGapStyleValue === 'string' ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue );\n\t\t\t}\n\t\t}\n\n\t\tlet output = '';\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'default',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'vertical';\n\t},\n\tgetAlignments( layout, isBlockBasedTheme ) {\n\t\tconst alignmentInfo = getAlignmentsInfo( layout );\n\t\tif ( layout.alignments !== undefined ) {\n\t\t\tif ( ! layout.alignments.includes( 'none' ) ) {\n\t\t\t\tlayout.alignments.unshift( 'none' );\n\t\t\t}\n\t\t\treturn layout.alignments.map( ( alignment ) => ( {\n\t\t\t\tname: alignment,\n\t\t\t\tinfo: alignmentInfo[ alignment ],\n\t\t\t} ) );\n\t\t}\n\n\t\tconst alignments = [\n\t\t\t{ name: 'left' },\n\t\t\t{ name: 'center' },\n\t\t\t{ name: 'right' },\n\t\t];\n\n\t\t// This is for backwards compatibility with hybrid themes.\n\t\tif ( ! isBlockBasedTheme ) {\n\t\t\tconst { contentSize, wideSize } = layout;\n\t\t\tif ( contentSize ) {\n\t\t\t\talignments.unshift( { name: 'full' } );\n\t\t\t}\n\n\t\t\tif ( wideSize ) {\n\t\t\t\talignments.unshift( {\n\t\t\t\t\tname: 'wide',\n\t\t\t\t\tinfo: alignmentInfo.wide,\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\talignments.unshift( { name: 'none', info: alignmentInfo.none } );\n\n\t\treturn alignments;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { cloneElement, forwardRef } from '@wordpress/element';\n\n/** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */\n\n/**\n * Return an SVG icon.\n *\n * @param {IconProps} props icon is the SVG component to render\n * size is a number specifiying the icon size in pixels\n * Other props will be passed to wrapped SVG component\n * @param {import('react').ForwardedRef} ref The forwarded ref to the SVG element.\n *\n * @return {JSX.Element} Icon component\n */\nfunction Icon( { icon, size = 24, ...props }, ref ) {\n\treturn cloneElement( icon, {\n\t\twidth: size,\n\t\theight: size,\n\t\t...props,\n\t\tref,\n\t} );\n}\n\nexport default forwardRef( Icon );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignNone = (\n\t\n\t\t\n\t\n);\n\nexport default alignNone;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst stretchWide = (\n\t\n\t\t\n\t\n);\n\nexport default stretchWide;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tIcon,\n\talignNone,\n\tstretchWide,\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n} from '@wordpress/icons';\nimport { getCSSRules } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../components/use-settings';\nimport { appendSelectors, getBlockGapCSS, getAlignmentsInfo } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport { BlockControls, JustifyContentControl } from '../components';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\nexport default {\n\tname: 'constrained',\n\tlabel: __( 'Constrained' ),\n\tinspectorControls: function DefaultLayoutInspectorControls( {\n\t\tlayout,\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { wideSize, contentSize, justifyContent = 'center' } = layout;\n\t\tconst {\n\t\t\tallowJustification = true,\n\t\t\tallowCustomContentAndWideSize = true,\n\t\t} = layoutBlockSupport;\n\t\tconst onJustificationChange = ( value ) => {\n\t\t\tonChange( {\n\t\t\t\t...layout,\n\t\t\t\tjustifyContent: value,\n\t\t\t} );\n\t\t};\n\t\tconst justificationOptions = [\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\ticon: justifyLeft,\n\t\t\t\tlabel: __( 'Justify items left' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'center',\n\t\t\t\ticon: justifyCenter,\n\t\t\t\tlabel: __( 'Justify items center' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\ticon: justifyRight,\n\t\t\t\tlabel: __( 'Justify items right' ),\n\t\t\t},\n\t\t];\n\t\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\t\tconst units = useCustomUnits( {\n\t\t\tavailableUnits: availableUnits || [ '%', 'px', 'em', 'rem', 'vw' ],\n\t\t} );\n\t\treturn (\n\t\t\t\n\t\t\t\t{ allowCustomContentAndWideSize && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\tcontentSize: nextWidth,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\twideSize: nextWidth,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Customize the width for all elements that are assigned to the center or wide columns.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t

    \n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ allowJustification && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ justificationOptions.map(\n\t\t\t\t\t\t\t( { value, icon, label } ) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t},\n\ttoolBarControls: function DefaultLayoutToolbarControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport,\n\t} ) {\n\t\tconst { allowJustification = true } = layoutBlockSupport;\n\n\t\tif ( ! allowJustification ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout = {},\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst { contentSize, wideSize, justifyContent } = layout;\n\t\tconst blockGapStyleValue = getGapCSSValue( style?.spacing?.blockGap );\n\n\t\t// If a block's block.json skips serialization for spacing or\n\t\t// spacing.blockGap, don't apply the user-defined value to the styles.\n\t\tlet blockGapValue = '';\n\t\tif ( ! shouldSkipSerialization( blockName, 'spacing', 'blockGap' ) ) {\n\t\t\t// If an object is provided only use the 'top' value for this kind of gap.\n\t\t\tif ( blockGapStyleValue?.top ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue?.top );\n\t\t\t} else if ( typeof blockGapStyleValue === 'string' ) {\n\t\t\t\tblockGapValue = getGapCSSValue( blockGapStyleValue );\n\t\t\t}\n\t\t}\n\n\t\tconst marginLeft =\n\t\t\tjustifyContent === 'left' ? '0 !important' : 'auto !important';\n\t\tconst marginRight =\n\t\t\tjustifyContent === 'right' ? '0 !important' : 'auto !important';\n\n\t\tlet output =\n\t\t\t!! contentSize || !! wideSize\n\t\t\t\t? `\n\t\t\t\t\t${ appendSelectors(\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t\t\t) } {\n\t\t\t\t\t\tmax-width: ${ contentSize ?? wideSize };\n\t\t\t\t\t\tmargin-left: ${ marginLeft };\n\t\t\t\t\t\tmargin-right: ${ marginRight };\n\t\t\t\t\t}\n\t\t\t\t\t${ appendSelectors( selector, '> .alignwide' ) } {\n\t\t\t\t\t\tmax-width: ${ wideSize ?? contentSize };\n\t\t\t\t\t}\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmax-width: none;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t: '';\n\n\t\tif ( justifyContent === 'left' ) {\n\t\t\toutput += `${ appendSelectors(\n\t\t\t\tselector,\n\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t) }\n\t\t\t{ margin-left: ${ marginLeft }; }`;\n\t\t} else if ( justifyContent === 'right' ) {\n\t\t\toutput += `${ appendSelectors(\n\t\t\t\tselector,\n\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t) }\n\t\t\t{ margin-right: ${ marginRight }; }`;\n\t\t}\n\n\t\t// If there is custom padding, add negative margins for alignfull blocks.\n\t\tif ( style?.spacing?.padding ) {\n\t\t\t// The style object might be storing a preset so we need to make sure we get a usable value.\n\t\t\tconst paddingValues = getCSSRules( style );\n\t\t\tpaddingValues.forEach( ( rule ) => {\n\t\t\t\tif ( rule.key === 'paddingRight' ) {\n\t\t\t\t\t// Add unit if 0, to avoid calc(0 * -1) which is invalid.\n\t\t\t\t\tconst paddingRightValue =\n\t\t\t\t\t\trule.value === '0' ? '0px' : rule.value;\n\n\t\t\t\t\toutput += `\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmargin-right: calc(${ paddingRightValue } * -1);\n\t\t\t\t\t}\n\t\t\t\t\t`;\n\t\t\t\t} else if ( rule.key === 'paddingLeft' ) {\n\t\t\t\t\t// Add unit if 0, to avoid calc(0 * -1) which is invalid.\n\t\t\t\t\tconst paddingLeftValue =\n\t\t\t\t\t\trule.value === '0' ? '0px' : rule.value;\n\n\t\t\t\t\toutput += `\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmargin-left: calc(${ paddingLeftValue } * -1);\n\t\t\t\t\t}\n\t\t\t\t\t`;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'constrained',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'vertical';\n\t},\n\tgetAlignments( layout ) {\n\t\tconst alignmentInfo = getAlignmentsInfo( layout );\n\t\tif ( layout.alignments !== undefined ) {\n\t\t\tif ( ! layout.alignments.includes( 'none' ) ) {\n\t\t\t\tlayout.alignments.unshift( 'none' );\n\t\t\t}\n\t\t\treturn layout.alignments.map( ( alignment ) => ( {\n\t\t\t\tname: alignment,\n\t\t\t\tinfo: alignmentInfo[ alignment ],\n\t\t\t} ) );\n\t\t}\n\t\tconst { contentSize, wideSize } = layout;\n\n\t\tconst alignments = [\n\t\t\t{ name: 'left' },\n\t\t\t{ name: 'center' },\n\t\t\t{ name: 'right' },\n\t\t];\n\n\t\tif ( contentSize ) {\n\t\t\talignments.unshift( { name: 'full' } );\n\t\t}\n\n\t\tif ( wideSize ) {\n\t\t\talignments.unshift( { name: 'wide', info: alignmentInfo.wide } );\n\t\t}\n\n\t\talignments.unshift( { name: 'none', info: alignmentInfo.none } );\n\n\t\treturn alignments;\n\t},\n};\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nfunction DefaultLayoutJustifyContentControl( { layout, onChange } ) {\n\tconst { justifyContent = 'center' } = layout;\n\tconst onJustificationChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tjustifyContent: value,\n\t\t} );\n\t};\n\tconst allowedControls = [ 'left', 'center', 'right' ];\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\nimport {\n\tBaseControl,\n\tFlex,\n\tFlexItem,\n\tRangeControl,\n\t__experimentalNumberControl as NumberControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { appendSelectors, getBlockGapCSS } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport { shouldSkipSerialization } from '../hooks/utils';\nimport { LAYOUT_DEFINITIONS } from './definitions';\n\nconst RANGE_CONTROL_MAX_VALUES = {\n\tpx: 600,\n\t'%': 100,\n\tvw: 100,\n\tvh: 100,\n\tem: 38,\n\trem: 38,\n\tsvw: 100,\n\tlvw: 100,\n\tdvw: 100,\n\tsvh: 100,\n\tlvh: 100,\n\tdvh: 100,\n\tvi: 100,\n\tsvi: 100,\n\tlvi: 100,\n\tdvi: 100,\n\tvb: 100,\n\tsvb: 100,\n\tlvb: 100,\n\tdvb: 100,\n\tvmin: 100,\n\tsvmin: 100,\n\tlvmin: 100,\n\tdvmin: 100,\n\tvmax: 100,\n\tsvmax: 100,\n\tlvmax: 100,\n\tdvmax: 100,\n};\n\nconst units = [\n\t{ value: 'px', label: 'px', default: 0 },\n\t{ value: 'rem', label: 'rem', default: 0 },\n\t{ value: 'em', label: 'em', default: 0 },\n];\n\nexport default {\n\tname: 'grid',\n\tlabel: __( 'Grid' ),\n\tinspectorControls: function GridLayoutInspectorControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { allowSizingOnChildren = false } = layoutBlockSupport;\n\n\t\t// In the experiment we want to also show column control in Auto mode, and\n\t\t// the minimum width control in Manual mode.\n\t\tconst showColumnsControl =\n\t\t\twindow.__experimentalEnableGridInteractivity ||\n\t\t\t!! layout?.columnCount;\n\t\tconst showMinWidthControl =\n\t\t\twindow.__experimentalEnableGridInteractivity ||\n\t\t\t! layout?.columnCount;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ showColumnsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ showMinWidthControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\ttoolBarControls: function GridLayoutToolbarControls() {\n\t\treturn null;\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\t} ) {\n\t\tconst {\n\t\t\tminimumColumnWidth = null,\n\t\t\tcolumnCount = null,\n\t\t\trowCount = null,\n\t\t} = layout;\n\n\t\t// Check that the grid layout attributes are of the correct type, so that we don't accidentally\n\t\t// write code that stores a string attribute instead of a number.\n\t\tif ( process.env.NODE_ENV === 'development' ) {\n\t\t\tif (\n\t\t\t\tminimumColumnWidth &&\n\t\t\t\ttypeof minimumColumnWidth !== 'string'\n\t\t\t) {\n\t\t\t\tthrow new Error( 'minimumColumnWidth must be a string' );\n\t\t\t}\n\t\t\tif ( columnCount && typeof columnCount !== 'number' ) {\n\t\t\t\tthrow new Error( 'columnCount must be a number' );\n\t\t\t}\n\t\t\tif ( rowCount && typeof rowCount !== 'number' ) {\n\t\t\t\tthrow new Error( 'rowCount must be a number' );\n\t\t\t}\n\t\t}\n\n\t\t// If a block's block.json skips serialization for spacing or spacing.blockGap,\n\t\t// don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tstyle?.spacing?.blockGap &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? getGapCSSValue( style?.spacing?.blockGap, '0.5em' )\n\t\t\t\t: undefined;\n\n\t\tlet output = '';\n\t\tconst rules = [];\n\n\t\tif ( minimumColumnWidth && columnCount > 0 ) {\n\t\t\tconst maxValue = `max(${ minimumColumnWidth }, ( 100% - (${\n\t\t\t\tblockGapValue || '1.2rem'\n\t\t\t}*${ columnCount - 1 }) ) / ${ columnCount })`;\n\t\t\trules.push(\n\t\t\t\t`grid-template-columns: repeat(auto-fill, minmax(${ maxValue }, 1fr))`,\n\t\t\t\t`container-type: inline-size`\n\t\t\t);\n\t\t\tif ( rowCount ) {\n\t\t\t\trules.push(\n\t\t\t\t\t`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`\n\t\t\t\t);\n\t\t\t}\n\t\t} else if ( columnCount ) {\n\t\t\trules.push(\n\t\t\t\t`grid-template-columns: repeat(${ columnCount }, minmax(0, 1fr))`\n\t\t\t);\n\t\t\tif ( rowCount ) {\n\t\t\t\trules.push(\n\t\t\t\t\t`grid-template-rows: repeat(${ rowCount }, minmax(1rem, auto))`\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\trules.push(\n\t\t\t\t`grid-template-columns: repeat(auto-fill, minmax(min(${\n\t\t\t\t\tminimumColumnWidth || '12rem'\n\t\t\t\t}, 100%), 1fr))`,\n\t\t\t\t'container-type: inline-size'\n\t\t\t);\n\t\t}\n\n\t\tif ( rules.length ) {\n\t\t\t// Reason to disable: the extra line breaks added by prettier mess with the unit tests.\n\t\t\t// eslint-disable-next-line prettier/prettier\n\t\t\toutput = `${ appendSelectors( selector ) } { ${ rules.join(\n\t\t\t\t'; '\n\t\t\t) }; }`;\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'grid',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'horizontal';\n\t},\n\tgetAlignments() {\n\t\treturn [];\n\t},\n};\n\n// Enables setting minimum width of grid items.\nfunction GridLayoutMinimumWidthControl( { layout, onChange } ) {\n\tconst { minimumColumnWidth, columnCount, isManualPlacement } = layout;\n\tconst defaultValue = isManualPlacement || columnCount ? null : '12rem';\n\tconst value = minimumColumnWidth || defaultValue;\n\tconst [ quantity, unit = 'rem' ] =\n\t\tparseQuantityAndUnitFromRawValue( value );\n\n\tconst handleSliderChange = ( next ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tminimumColumnWidth: [ next, unit ].join( '' ),\n\t\t} );\n\t};\n\n\t// Mostly copied from HeightControl.\n\tconst handleUnitChange = ( newUnit ) => {\n\t\t// Attempt to smooth over differences between currentUnit and newUnit.\n\t\t// This should slightly improve the experience of switching between unit types.\n\t\tlet newValue;\n\n\t\tif ( [ 'em', 'rem' ].includes( newUnit ) && unit === 'px' ) {\n\t\t\t// Convert pixel value to an approximate of the new unit, assuming a root size of 16px.\n\t\t\tnewValue = ( quantity / 16 ).toFixed( 2 ) + newUnit;\n\t\t} else if ( [ 'em', 'rem' ].includes( unit ) && newUnit === 'px' ) {\n\t\t\t// Convert to pixel value assuming a root size of 16px.\n\t\t\tnewValue = Math.round( quantity * 16 ) + newUnit;\n\t\t}\n\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tminimumColumnWidth: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Minimum column width' ) }\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\tminimumColumnWidth:\n\t\t\t\t\t\t\t\t\tnewValue === '' ? undefined : newValue,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonUnitChange={ handleUnitChange }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tlabel={ __( 'Minimum column width' ) }\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    \n\t);\n}\n\n// Enables setting number of grid columns\nfunction GridLayoutColumnsAndRowsControl( {\n\tlayout,\n\tonChange,\n\tallowSizingOnChildren,\n} ) {\n\t// If the grid interactivity experiment is enabled, allow unsetting the column count.\n\tconst defaultColumnCount = window.__experimentalEnableGridInteractivity\n\t\t? undefined\n\t\t: 3;\n\tconst {\n\t\tcolumnCount = defaultColumnCount,\n\t\trowCount,\n\t\tisManualPlacement,\n\t} = layout;\n\n\treturn (\n\t\t<>\n\t\t\t
    \n\t\t\t\t{ ( ! window.__experimentalEnableGridInteractivity ||\n\t\t\t\t\t! isManualPlacement ) && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Columns' ) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Allow unsetting the column count when in auto mode.\n\t\t\t\t\t\t\t\t\tconst defaultNewColumnCount =\n\t\t\t\t\t\t\t\t\t\tisManualPlacement ? 1 : undefined;\n\t\t\t\t\t\t\t\t\tconst newColumnCount =\n\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t? defaultNewColumnCount\n\t\t\t\t\t\t\t\t\t\t\t: parseInt( value, 10 );\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\tcolumnCount: newColumnCount,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Don't allow unsetting the column count.\n\t\t\t\t\t\t\t\t\tconst newColumnCount =\n\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: parseInt( value, 10 );\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\tcolumnCount: newColumnCount,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ columnCount }\n\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\thideLabelFromVision={\n\t\t\t\t\t\t\t\t! window.__experimentalEnableGridInteractivity ||\n\t\t\t\t\t\t\t\t! isManualPlacement\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{ window.__experimentalEnableGridInteractivity &&\n\t\t\t\t\t\tallowSizingOnChildren &&\n\t\t\t\t\t\tisManualPlacement ? (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t// Don't allow unsetting the row count.\n\t\t\t\t\t\t\t\t\tconst newRowCount =\n\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t: parseInt( value, 10 );\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\trowCount: newRowCount,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tvalue={ rowCount }\n\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\tlabel={ __( 'Rows' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\t\tcolumnCount:\n\t\t\t\t\t\t\t\t\t\t\tvalue === '' || value === '0'\n\t\t\t\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t\t\t\t: value,\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\tmax={ 16 }\n\t\t\t\t\t\t\t\twithInputField={ false }\n\t\t\t\t\t\t\t\tlabel={ __( 'Columns' ) }\n\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n}\n\n// Enables switching between grid types\nfunction GridLayoutTypeControl( { layout, onChange } ) {\n\tconst { columnCount, rowCount, minimumColumnWidth, isManualPlacement } =\n\t\tlayout;\n\n\t/**\n\t * When switching, temporarily save any custom values set on the\n\t * previous type so we can switch back without loss.\n\t */\n\tconst [ tempColumnCount, setTempColumnCount ] = useState(\n\t\tcolumnCount || 3\n\t);\n\tconst [ tempRowCount, setTempRowCount ] = useState( rowCount );\n\tconst [ tempMinimumColumnWidth, setTempMinimumColumnWidth ] = useState(\n\t\tminimumColumnWidth || '12rem'\n\t);\n\n\tconst gridPlacement =\n\t\tisManualPlacement ||\n\t\t( !! columnCount && ! window.__experimentalEnableGridInteractivity )\n\t\t\t? 'manual'\n\t\t\t: 'auto';\n\n\tconst onChangeType = ( value ) => {\n\t\tif ( value === 'manual' ) {\n\t\t\tsetTempMinimumColumnWidth( minimumColumnWidth || '12rem' );\n\t\t} else {\n\t\t\tsetTempColumnCount( columnCount || 3 );\n\t\t\tsetTempRowCount( rowCount );\n\t\t}\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tcolumnCount: value === 'manual' ? tempColumnCount : null,\n\t\t\trowCount:\n\t\t\t\tvalue === 'manual' &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t\t\t? tempRowCount\n\t\t\t\t\t: undefined,\n\t\t\tisManualPlacement:\n\t\t\t\tvalue === 'manual' &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity\n\t\t\t\t\t? true\n\t\t\t\t\t: undefined,\n\t\t\tminimumColumnWidth:\n\t\t\t\tvalue === 'auto' ? tempMinimumColumnWidth : null,\n\t\t} );\n\t};\n\n\tconst helpText =\n\t\tgridPlacement === 'manual'\n\t\t\t? __(\n\t\t\t\t\t'Grid items can be manually placed in any position on the grid.'\n\t\t\t )\n\t\t\t: __(\n\t\t\t\t\t'Grid items are placed automatically depending on their order.'\n\t\t\t );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport flex from './flex';\nimport flow from './flow';\nimport constrained from './constrained';\nimport grid from './grid';\n\nconst layoutTypes = [ flow, flex, constrained, grid ];\n\n/**\n * Retrieves a layout type by name.\n *\n * @param {string} name - The name of the layout type.\n * @return {Object} Layout type.\n */\nexport function getLayoutType( name = 'default' ) {\n\treturn layoutTypes.find( ( layoutType ) => layoutType.name === name );\n}\n\n/**\n * Retrieves the available layout types.\n *\n * @return {Array} Layout types.\n */\nexport function getLayoutTypes() {\n\treturn layoutTypes;\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getLayoutType } from '../../layouts';\nimport { useSettings } from '../use-settings';\n\nexport const defaultLayout = { type: 'default' };\n\nconst Layout = createContext( defaultLayout );\n\n/**\n * Allows to define the layout.\n */\nexport const LayoutProvider = Layout.Provider;\n\n/**\n * React hook used to retrieve the layout config.\n */\nexport function useLayout() {\n\treturn useContext( Layout );\n}\n\nexport function LayoutStyle( { layout = {}, css, ...props } ) {\n\tconst layoutType = getLayoutType( layout.type );\n\tconst [ blockGapSupport ] = useSettings( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\tif ( layoutType ) {\n\t\tif ( css ) {\n\t\t\treturn ;\n\t\t}\n\t\tconst layoutStyle = layoutType.getLayoutStyle?.( {\n\t\t\thasBlockGapSupport,\n\t\t\tlayout,\n\t\t\t...props,\n\t\t} );\n\t\tif ( layoutStyle ) {\n\t\t\treturn ;\n\t\t}\n\t}\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useLayout } from '../block-list/layout';\nimport { store as blockEditorStore } from '../../store';\nimport { getLayoutType } from '../../layouts';\n\nconst EMPTY_ARRAY = [];\nconst DEFAULT_CONTROLS = [ 'none', 'left', 'center', 'right', 'wide', 'full' ];\nconst WIDE_CONTROLS = [ 'wide', 'full' ];\n\nexport default function useAvailableAlignments( controls = DEFAULT_CONTROLS ) {\n\t// Always add the `none` option if not exists.\n\tif ( ! controls.includes( 'none' ) ) {\n\t\tcontrols = [ 'none', ...controls ];\n\t}\n\tconst isNoneOnly = controls.length === 1 && controls[ 0 ] === 'none';\n\n\tconst [ wideControlsEnabled, themeSupportsLayout, isBlockBasedTheme ] =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\t// If `isNoneOnly` is true, we'll be returning early because there is\n\t\t\t\t// nothing to filter on an empty array. We won't need the info from\n\t\t\t\t// the `useSelect` but we must call it anyway because Rules of Hooks.\n\t\t\t\t// So the callback returns early to avoid block editor subscription.\n\t\t\t\tif ( isNoneOnly ) {\n\t\t\t\t\treturn [ false, false, false ];\n\t\t\t\t}\n\n\t\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\t\t\treturn [\n\t\t\t\t\tsettings.alignWide ?? false,\n\t\t\t\t\tsettings.supportsLayout,\n\t\t\t\t\tsettings.__unstableIsBlockBasedTheme,\n\t\t\t\t];\n\t\t\t},\n\t\t\t[ isNoneOnly ]\n\t\t);\n\tconst layout = useLayout();\n\n\tif ( isNoneOnly ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst layoutType = getLayoutType( layout?.type );\n\n\tif ( themeSupportsLayout ) {\n\t\tconst layoutAlignments = layoutType.getAlignments(\n\t\t\tlayout,\n\t\t\tisBlockBasedTheme\n\t\t);\n\t\tconst alignments = layoutAlignments.filter( ( alignment ) =>\n\t\t\tcontrols.includes( alignment.name )\n\t\t);\n\t\t// While we treat `none` as an alignment, we shouldn't return it if no\n\t\t// other alignments exist.\n\t\tif ( alignments.length === 1 && alignments[ 0 ].name === 'none' ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn alignments;\n\t}\n\n\t// Starting here, it's the fallback for themes not supporting the layout config.\n\tif ( layoutType.name !== 'default' && layoutType.name !== 'constrained' ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\tconst alignments = controls\n\t\t.filter( ( control ) => {\n\t\t\tif ( layout.alignments ) {\n\t\t\t\treturn layout.alignments.includes( control );\n\t\t\t}\n\n\t\t\tif ( ! wideControlsEnabled && WIDE_CONTROLS.includes( control ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn DEFAULT_CONTROLS.includes( control );\n\t\t} )\n\t\t.map( ( name ) => ( { name } ) );\n\n\t// While we treat `none` as an alignment, we shouldn't return it if no\n\t// other alignments exist.\n\tif ( alignments.length === 1 && alignments[ 0 ].name === 'none' ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\treturn alignments;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst positionLeft = (\n\t\n\t\t\n\t\n);\n\nexport default positionLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst positionCenter = (\n\t\n\t\t\n\t\n);\n\nexport default positionCenter;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst positionRight = (\n\t\n\t\t\n\t\n);\n\nexport default positionRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst stretchFullWidth = (\n\t\n\t\t\n\t\n);\n\nexport default stretchFullWidth;\n","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport {\n\talignNone,\n\tpositionCenter,\n\tpositionLeft,\n\tpositionRight,\n\tstretchFullWidth,\n\tstretchWide,\n} from '@wordpress/icons';\n\nexport const BLOCK_ALIGNMENTS_CONTROLS = {\n\tnone: {\n\t\ticon: alignNone,\n\t\ttitle: _x( 'None', 'Alignment option' ),\n\t},\n\tleft: {\n\t\ticon: positionLeft,\n\t\ttitle: __( 'Align left' ),\n\t},\n\tcenter: {\n\t\ticon: positionCenter,\n\t\ttitle: __( 'Align center' ),\n\t},\n\tright: {\n\t\ticon: positionRight,\n\t\ttitle: __( 'Align right' ),\n\t},\n\twide: {\n\t\ticon: stretchWide,\n\t\ttitle: __( 'Wide width' ),\n\t},\n\tfull: {\n\t\ticon: stretchFullWidth,\n\t\ttitle: __( 'Full width' ),\n\t},\n};\n\nexport const DEFAULT_CONTROL = 'none';\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tToolbarDropdownMenu,\n\tToolbarGroup,\n\tMenuGroup,\n\tMenuItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport useAvailableAlignments from './use-available-alignments';\nimport { BLOCK_ALIGNMENTS_CONTROLS, DEFAULT_CONTROL } from './constants';\n\nfunction BlockAlignmentUI( {\n\tvalue,\n\tonChange,\n\tcontrols,\n\tisToolbar,\n\tisCollapsed = true,\n} ) {\n\tconst enabledControls = useAvailableAlignments( controls );\n\tconst hasEnabledControls = !! enabledControls.length;\n\n\tif ( ! hasEnabledControls ) {\n\t\treturn null;\n\t}\n\n\tfunction onChangeAlignment( align ) {\n\t\tonChange( [ value, 'none' ].includes( align ) ? undefined : align );\n\t}\n\n\tconst activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[ value ];\n\tconst defaultAlignmentControl =\n\t\tBLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst commonProps = {\n\t\ticon: activeAlignmentControl\n\t\t\t? activeAlignmentControl.icon\n\t\t\t: defaultAlignmentControl.icon,\n\t\tlabel: __( 'Align' ),\n\t};\n\tconst extraProps = isToolbar\n\t\t? {\n\t\t\t\tisCollapsed,\n\t\t\t\tcontrols: enabledControls.map( ( { name: controlName } ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...BLOCK_ALIGNMENTS_CONTROLS[ controlName ],\n\t\t\t\t\t\tisActive:\n\t\t\t\t\t\t\tvalue === controlName ||\n\t\t\t\t\t\t\t( ! value && controlName === 'none' ),\n\t\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\t\tonClick: () => onChangeAlignment( controlName ),\n\t\t\t\t\t};\n\t\t\t\t} ),\n\t\t }\n\t\t: {\n\t\t\t\ttoggleProps: { description: __( 'Change alignment' ) },\n\t\t\t\tchildren: ( { onClose } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ enabledControls.map(\n\t\t\t\t\t\t\t\t\t( { name: controlName, info } ) => {\n\t\t\t\t\t\t\t\t\t\tconst { icon, title } =\n\t\t\t\t\t\t\t\t\t\t\tBLOCK_ALIGNMENTS_CONTROLS[\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t// If no value is provided, mark as selected the `none` option.\n\t\t\t\t\t\t\t\t\t\tconst isSelected =\n\t\t\t\t\t\t\t\t\t\t\tcontrolName === value ||\n\t\t\t\t\t\t\t\t\t\t\t( ! value &&\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName === 'none' );\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChangeAlignment(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\t\tinfo={ info }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t };\n\n\treturn ;\n}\n\nexport default BlockAlignmentUI;\n","/**\n * Internal dependencies\n */\nimport BlockAlignmentUI from './ui';\n\nconst BlockAlignmentControl = ( props ) => {\n\treturn ;\n};\n\nconst BlockAlignmentToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-alignment-control/README.md\n */\nexport { BlockAlignmentControl, BlockAlignmentToolbar };\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport {\n\tuseBlockEditContext,\n\tblockEditingModeKey,\n} from '../block-edit/context';\n\n/**\n * @typedef {'disabled'|'contentOnly'|'default'} BlockEditingMode\n */\n\n/**\n * Allows a block to restrict the user interface that is displayed for editing\n * that block and its inner blocks.\n *\n * @example\n * ```js\n * function MyBlock( { attributes, setAttributes } ) {\n * useBlockEditingMode( 'disabled' );\n * return
    ;\n * }\n * ```\n *\n * `mode` can be one of three options:\n *\n * - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be\n * selected.\n * - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the\n * toolbar, the block movers, block settings.\n * - `'default'`: Allows editing the block as normal.\n *\n * The mode is inherited by all of the block's inner blocks, unless they have\n * their own mode.\n *\n * If called outside of a block context, the mode is applied to all blocks.\n *\n * @param {?BlockEditingMode} mode The editing mode to apply. If undefined, the\n * current editing mode is not changed.\n *\n * @return {BlockEditingMode} The current editing mode.\n */\nexport function useBlockEditingMode( mode ) {\n\tconst context = useBlockEditContext();\n\tconst { clientId = '' } = context;\n\tconst { setBlockEditingMode, unsetBlockEditingMode } =\n\t\tuseDispatch( blockEditorStore );\n\tconst globalBlockEditingMode = useSelect(\n\t\t( select ) =>\n\t\t\t// Avoid adding the subscription if not needed!\n\t\t\tclientId ? null : select( blockEditorStore ).getBlockEditingMode(),\n\t\t[ clientId ]\n\t);\n\tuseEffect( () => {\n\t\tif ( mode ) {\n\t\t\tsetBlockEditingMode( clientId, mode );\n\t\t}\n\t\treturn () => {\n\t\t\tif ( mode ) {\n\t\t\t\tunsetBlockEditingMode( clientId );\n\t\t\t}\n\t\t};\n\t}, [ clientId, mode, setBlockEditingMode, unsetBlockEditingMode ] );\n\treturn clientId ? context[ blockEditingModeKey ] : globalBlockEditingMode;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { BlockControls, BlockAlignmentControl } from '../components';\nimport useAvailableAlignments from '../components/block-alignment-control/use-available-alignments';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * An array which includes all possible valid alignments,\n * used to validate if an alignment is valid or not.\n *\n * @constant\n * @type {string[]}\n */\nconst ALL_ALIGNMENTS = [ 'left', 'center', 'right', 'wide', 'full' ];\n\n/**\n * An array which includes all wide alignments.\n * In order for this alignments to be valid they need to be supported by the block,\n * and by the theme.\n *\n * @constant\n * @type {string[]}\n */\nconst WIDE_ALIGNMENTS = [ 'wide', 'full' ];\n\n/**\n * Returns the valid alignments.\n * Takes into consideration the aligns supported by a block, if the block supports wide controls or not and if theme supports wide controls or not.\n * Exported just for testing purposes, not exported outside the module.\n *\n * @param {?boolean|string[]} blockAlign Aligns supported by the block.\n * @param {?boolean} hasWideBlockSupport True if block supports wide alignments. And False otherwise.\n * @param {?boolean} hasWideEnabled True if theme supports wide alignments. And False otherwise.\n *\n * @return {string[]} Valid alignments.\n */\nexport function getValidAlignments(\n\tblockAlign,\n\thasWideBlockSupport = true,\n\thasWideEnabled = true\n) {\n\tlet validAlignments;\n\tif ( Array.isArray( blockAlign ) ) {\n\t\tvalidAlignments = ALL_ALIGNMENTS.filter( ( value ) =>\n\t\t\tblockAlign.includes( value )\n\t\t);\n\t} else if ( blockAlign === true ) {\n\t\t// `true` includes all alignments...\n\t\tvalidAlignments = [ ...ALL_ALIGNMENTS ];\n\t} else {\n\t\tvalidAlignments = [];\n\t}\n\n\tif (\n\t\t! hasWideEnabled ||\n\t\t( blockAlign === true && ! hasWideBlockSupport )\n\t) {\n\t\treturn validAlignments.filter(\n\t\t\t( alignment ) => ! WIDE_ALIGNMENTS.includes( alignment )\n\t\t);\n\t}\n\n\treturn validAlignments;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `align`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.align ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'align' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\talign: {\n\t\t\t\ttype: 'string',\n\t\t\t\t// Allow for '' since it is used by the `updateAlignment` function\n\t\t\t\t// in toolbar controls for special cases with defined default values.\n\t\t\t\tenum: [ ...ALL_ALIGNMENTS, '' ],\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockEditAlignmentToolbarControlsPure( {\n\tname: blockName,\n\talign,\n\tsetAttributes,\n} ) {\n\t// Compute the block valid alignments by taking into account,\n\t// if the theme supports wide alignments or not and the layout's\n\t// available alignments. We do that for conditionally rendering\n\t// Slot.\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( blockName, 'align' ),\n\t\thasBlockSupport( blockName, 'alignWide', true )\n\t);\n\n\tconst validAlignments = useAvailableAlignments(\n\t\tblockAllowedAlignments\n\t).map( ( { name } ) => name );\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( ! validAlignments.length || blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst updateAlignment = ( nextAlign ) => {\n\t\tif ( ! nextAlign ) {\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst blockDefaultAlign = blockType?.attributes?.align?.default;\n\t\t\tif ( blockDefaultAlign ) {\n\t\t\t\tnextAlign = '';\n\t\t\t}\n\t\t}\n\t\tsetAttributes( { align: nextAlign } );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: BlockEditAlignmentToolbarControlsPure,\n\tuseBlockProps,\n\taddSaveProps: addAssignedAlign,\n\tattributeKeys: [ 'align' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'align', false );\n\t},\n};\n\nfunction useBlockProps( { name, align } ) {\n\tconst blockAllowedAlignments = getValidAlignments(\n\t\tgetBlockSupport( name, 'align' ),\n\t\thasBlockSupport( name, 'alignWide', true )\n\t);\n\tconst validAlignments = useAvailableAlignments( blockAllowedAlignments );\n\n\tif ( validAlignments.some( ( alignment ) => alignment.name === align ) ) {\n\t\treturn { 'data-align': align };\n\t}\n\n\treturn {};\n}\n\n/**\n * Override props assigned to save component to inject alignment class name if\n * block supports it.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addAssignedAlign( props, blockType, attributes ) {\n\tconst { align } = attributes;\n\tconst blockAlign = getBlockSupport( blockType, 'align' );\n\tconst hasWideBlockSupport = hasBlockSupport( blockType, 'alignWide', true );\n\n\t// Compute valid alignments without taking into account if\n\t// the theme supports wide alignments or not.\n\t// This way changing themes does not impact the block save.\n\tconst isAlignValid = getValidAlignments(\n\t\tblockAlign,\n\t\thasWideBlockSupport\n\t).includes( align );\n\tif ( isAlignValid ) {\n\t\tprops.className = clsx( `align${ align }`, props.className );\n\t}\n\n\treturn props;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/align/addAttribute',\n\taddAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst InspectorControlsDefault = createSlotFill( 'InspectorControls' );\nconst InspectorControlsAdvanced = createSlotFill( 'InspectorAdvancedControls' );\nconst InspectorControlsBindings = createSlotFill( 'InspectorControlsBindings' );\nconst InspectorControlsBackground = createSlotFill(\n\t'InspectorControlsBackground'\n);\nconst InspectorControlsBorder = createSlotFill( 'InspectorControlsBorder' );\nconst InspectorControlsColor = createSlotFill( 'InspectorControlsColor' );\nconst InspectorControlsFilter = createSlotFill( 'InspectorControlsFilter' );\nconst InspectorControlsDimensions = createSlotFill(\n\t'InspectorControlsDimensions'\n);\nconst InspectorControlsPosition = createSlotFill( 'InspectorControlsPosition' );\nconst InspectorControlsTypography = createSlotFill(\n\t'InspectorControlsTypography'\n);\nconst InspectorControlsListView = createSlotFill( 'InspectorControlsListView' );\nconst InspectorControlsStyles = createSlotFill( 'InspectorControlsStyles' );\nconst InspectorControlsEffects = createSlotFill( 'InspectorControlsEffects' );\n\nconst groups = {\n\tdefault: InspectorControlsDefault,\n\tadvanced: InspectorControlsAdvanced,\n\tbackground: InspectorControlsBackground,\n\tbindings: InspectorControlsBindings,\n\tborder: InspectorControlsBorder,\n\tcolor: InspectorControlsColor,\n\tdimensions: InspectorControlsDimensions,\n\teffects: InspectorControlsEffects,\n\tfilter: InspectorControlsFilter,\n\tlist: InspectorControlsListView,\n\tposition: InspectorControlsPosition,\n\tsettings: InspectorControlsDefault, // Alias for default.\n\tstyles: InspectorControlsStyles,\n\ttypography: InspectorControlsTypography,\n};\n\nexport default groups;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalStyleProvider as StyleProvider,\n\t__experimentalToolsPanelContext as ToolsPanelContext,\n} from '@wordpress/components';\nimport warning from '@wordpress/warning';\nimport deprecated from '@wordpress/deprecated';\nimport { useEffect, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n} from '../block-edit/context';\nimport groups from './groups';\n\nexport default function InspectorControlsFill( {\n\tchildren,\n\tgroup = 'default',\n\t__experimentalGroup,\n\tresetAllFilter,\n} ) {\n\tif ( __experimentalGroup ) {\n\t\tdeprecated(\n\t\t\t'`__experimentalGroup` property in `InspectorControlsFill`',\n\t\t\t{\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t\talternative: '`group`',\n\t\t\t}\n\t\t);\n\t\tgroup = __experimentalGroup;\n\t}\n\n\tconst context = useBlockEditContext();\n\tconst Fill = groups[ group ]?.Fill;\n\tif ( ! Fill ) {\n\t\twarning( `Unknown InspectorControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\tif ( ! context[ mayDisplayControlsKey ] ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( fillProps ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\n\t\t\n\t);\n}\n\nfunction RegisterResetAll( { resetAllFilter, children } ) {\n\tconst { registerResetAllFilter, deregisterResetAllFilter } =\n\t\tuseContext( ToolsPanelContext );\n\tuseEffect( () => {\n\t\tif (\n\t\t\tresetAllFilter &&\n\t\t\tregisterResetAllFilter &&\n\t\t\tderegisterResetAllFilter\n\t\t) {\n\t\t\tregisterResetAllFilter( resetAllFilter );\n\t\t\treturn () => {\n\t\t\t\tderegisterResetAllFilter( resetAllFilter );\n\t\t\t};\n\t\t}\n\t}, [ resetAllFilter, registerResetAllFilter, deregisterResetAllFilter ] );\n\treturn children;\n}\n\nfunction ToolsPanelInspectorControl( { children, resetAllFilter, fillProps } ) {\n\t// `fillProps.forwardedContext` is an array of context provider entries, provided by slot,\n\t// that should wrap the fill markup.\n\tconst { forwardedContext = [] } = fillProps;\n\n\t// Children passed to InspectorControlsFill will not have\n\t// access to any React Context whose Provider is part of\n\t// the InspectorControlsSlot tree. So we re-create the\n\t// Provider in this subtree.\n\tconst innerMarkup = (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n\treturn forwardedContext.reduce(\n\t\t( inner, [ Provider, props ] ) => (\n\t\t\t{ inner }\n\t\t),\n\t\tinnerMarkup\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { cleanEmptyObject } from '../../hooks/utils';\nimport { useToolsPanelDropdownMenuProps } from '../global-styles/utils';\n\nexport default function BlockSupportToolsPanel( { children, group, label } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockAttributes,\n\t\tgetMultiSelectedBlockClientIds,\n\t\tgetSelectedBlockClientId,\n\t\thasMultiSelection,\n\t} = useSelect( blockEditorStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst panelId = getSelectedBlockClientId();\n\tconst resetAll = useCallback(\n\t\t( resetFilters = [] ) => {\n\t\t\tconst newAttributes = {};\n\n\t\t\tconst clientIds = hasMultiSelection()\n\t\t\t\t? getMultiSelectedBlockClientIds()\n\t\t\t\t: [ panelId ];\n\n\t\t\tclientIds.forEach( ( clientId ) => {\n\t\t\t\tconst { style } = getBlockAttributes( clientId );\n\t\t\t\tlet newBlockAttributes = { style };\n\n\t\t\t\tresetFilters.forEach( ( resetFilter ) => {\n\t\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\t\t...resetFilter( newBlockAttributes ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Enforce a cleaned style object.\n\t\t\t\tnewBlockAttributes = {\n\t\t\t\t\t...newBlockAttributes,\n\t\t\t\t\tstyle: cleanEmptyObject( newBlockAttributes.style ),\n\t\t\t\t};\n\n\t\t\t\tnewAttributes[ clientId ] = newBlockAttributes;\n\t\t\t} );\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes, true );\n\t\t},\n\t\t[\n\t\t\tgetBlockAttributes,\n\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\thasMultiSelection,\n\t\t\tpanelId,\n\t\t\tupdateBlockAttributes,\n\t\t]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanelContext as ToolsPanelContext } from '@wordpress/components';\nimport { useContext, useMemo } from '@wordpress/element';\n\nexport default function BlockSupportSlotContainer( {\n\tSlot,\n\tfillProps,\n\t...props\n} ) {\n\t// Add the toolspanel context provider and value to existing fill props\n\tconst toolsPanelContext = useContext( ToolsPanelContext );\n\tconst computedFillProps = useMemo(\n\t\t() => ( {\n\t\t\t...( fillProps ?? {} ),\n\t\t\tforwardedContext: [\n\t\t\t\t...( fillProps?.forwardedContext ?? [] ),\n\t\t\t\t[ ToolsPanelContext.Provider, { value: toolsPanelContext } ],\n\t\t\t],\n\t\t} ),\n\t\t[ toolsPanelContext, fillProps ]\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUseSlotFills as useSlotFills,\n\t__unstableMotionContext as MotionContext,\n} from '@wordpress/components';\nimport { useContext, useMemo } from '@wordpress/element';\nimport warning from '@wordpress/warning';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport BlockSupportToolsPanel from './block-support-tools-panel';\nimport BlockSupportSlotContainer from './block-support-slot-container';\nimport groups from './groups';\n\nexport default function InspectorControlsSlot( {\n\t__experimentalGroup,\n\tgroup = 'default',\n\tlabel,\n\tfillProps,\n\t...props\n} ) {\n\tif ( __experimentalGroup ) {\n\t\tdeprecated(\n\t\t\t'`__experimentalGroup` property in `InspectorControlsSlot`',\n\t\t\t{\n\t\t\t\tsince: '6.2',\n\t\t\t\tversion: '6.4',\n\t\t\t\talternative: '`group`',\n\t\t\t}\n\t\t);\n\t\tgroup = __experimentalGroup;\n\t}\n\tconst Slot = groups[ group ]?.Slot;\n\tconst fills = useSlotFills( Slot?.__unstableName );\n\n\tconst motionContextValue = useContext( MotionContext );\n\n\tconst computedFillProps = useMemo(\n\t\t() => ( {\n\t\t\t...( fillProps ?? {} ),\n\t\t\tforwardedContext: [\n\t\t\t\t...( fillProps?.forwardedContext ?? [] ),\n\t\t\t\t[ MotionContext.Provider, { value: motionContextValue } ],\n\t\t\t],\n\t\t} ),\n\t\t[ motionContextValue, fillProps ]\n\t);\n\n\tif ( ! Slot ) {\n\t\twarning( `Unknown InspectorControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\n\tif ( ! fills?.length ) {\n\t\treturn null;\n\t}\n\n\tif ( label ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport InspectorControlsFill from './fill';\nimport InspectorControlsSlot from './slot';\n\nconst InspectorControls = InspectorControlsFill;\n\nInspectorControls.Slot = InspectorControlsSlot;\n\n// This is just here for backward compatibility.\nexport const InspectorAdvancedControls = ( props ) => {\n\treturn ;\n};\nInspectorAdvancedControls.Slot = ( props ) => {\n\treturn ;\n};\nInspectorAdvancedControls.slotName = 'InspectorAdvancedControls';\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inspector-controls/README.md\n */\nexport default InspectorControls;\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"url\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"dom\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blob\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"keycodes\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst media = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default media;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst upload = (\n\t\n\t\t\n\t\n);\n\nexport default upload;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst postFeaturedImage = (\n\t\n\t\t\n\t\n);\n\nexport default postFeaturedImage;\n","/**\n * WordPress dependencies\n */\nimport { withFilters } from '@wordpress/components';\n\n/**\n * This is a placeholder for the media upload component necessary to make it possible to provide\n * an integration with the core blocks that handle media files. By default it renders nothing but\n * it provides a way to have it overridden with the `editor.MediaUpload` filter.\n *\n * @return {Component} The component to be rendered.\n */\nconst MediaUpload = () => null;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload/README.md\n */\nexport default withFilters( 'editor.MediaUpload' )( MediaUpload );\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function MediaUploadCheck( { fallback = null, children } ) {\n\tconst hasUploadPermissions = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn !! getSettings().mediaUpload;\n\t}, [] );\n\treturn hasUploadPermissions ? children : fallback;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload/README.md\n */\nexport default MediaUploadCheck;\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"isShallowEqual\"];","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"preferences\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst keyboardReturn = (\n\t\n\t\t\n\t\n);\n\nexport default keyboardReturn;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronLeftSmall = (\n\t\n\t\t\n\t\n);\n\nexport default chevronLeftSmall;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronRightSmall = (\n\t\n\t\t\n\t\n);\n\nexport default chevronRightSmall;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';\nimport { useReducedMotion, useInstanceId } from '@wordpress/compose';\nimport { _x, isRTL } from '@wordpress/i18n';\nimport { Fragment } from '@wordpress/element';\n\nfunction LinkSettingsDrawer( { children, settingsOpen, setSettingsOpen } ) {\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst MaybeAnimatePresence = prefersReducedMotion\n\t\t? Fragment\n\t\t: AnimatePresence;\n\tconst MaybeMotionDiv = prefersReducedMotion ? 'div' : motion.div;\n\n\tconst id = useInstanceId( LinkSettingsDrawer );\n\n\tconst settingsDrawerId = `link-control-settings-drawer-${ id }`;\n\n\treturn (\n\t\t<>\n\t\t\t setSettingsOpen( ! settingsOpen ) }\n\t\t\t\ticon={ isRTL() ? chevronLeftSmall : chevronRightSmall }\n\t\t\t\taria-controls={ settingsDrawerId }\n\t\t\t>\n\t\t\t\t{ _x( 'Advanced', 'Additional link settings' ) }\n\t\t\t\n\t\t\t\n\t\t\t\t{ settingsOpen && (\n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t\n\t);\n}\n\nexport default LinkSettingsDrawer;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\t__experimentalInputControl as InputControl,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport {\n\tcompose,\n\tdebounce,\n\twithInstanceId,\n\twithSafeTimeout,\n} from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Whether the argument is a function.\n *\n * @param {*} maybeFunc The argument to check.\n * @return {boolean} True if the argument is a function, false otherwise.\n */\nfunction isFunction( maybeFunc ) {\n\treturn typeof maybeFunc === 'function';\n}\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.suggestionsRequest = null;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tsuggestionsValue: null,\n\t\t\tselectedSuggestion: null,\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst { value, __experimentalShowInitialSuggestions = false } =\n\t\t\tthis.props;\n\n\t\t// Only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded.\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ]\n\t\t) {\n\t\t\tthis.suggestionNodes[ selectedSuggestion ].scrollIntoView( {\n\t\t\t\tbehavior: 'instant',\n\t\t\t\tblock: 'nearest',\n\t\t\t\tinline: 'nearest',\n\t\t\t} );\n\t\t}\n\n\t\t// Update suggestions when the value changes.\n\t\tif ( prevProps.value !== value && ! this.props.disableSuggestions ) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it.\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions.\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tthis.suggestionsRequest = null;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { __experimentalShowInitialSuggestions = false, value } =\n\t\t\tthis.props;\n\t\treturn (\n\t\t\t__experimentalShowInitialSuggestions && ! ( value && value.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.suggestionsRequest?.cancel?.();\n\t\t\tthis.suggestionsRequest = null;\n\n\t\t\tthis.setState( {\n\t\t\t\tsuggestions: [],\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tsuggestionsValue: value,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tsuggestionsValue: value,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tloading: false,\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.finally( () => {\n\t\t\t\t// If this is the current promise then reset the reference\n\t\t\t\t// to allow for checking if a new request is made.\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.suggestionsRequest = null;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( newValue ) {\n\t\tthis.props.onChange( newValue );\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\t// or there is already a request in progress.\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! ( suggestions && suggestions.length ) &&\n\t\t\tthis.suggestionsRequest === null\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value.\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tthis.props.onKeyDown?.( event );\n\t\tconst { showSuggestions, selectedSuggestion, suggestions, loading } =\n\t\t\tthis.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation.\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0.\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position.\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit.\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion =\n\t\t\tthis.state.suggestions[ this.state.selectedSuggestion ];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel = null,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t\thideLabelFromVision = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst inputId = `url-input-control-${ instanceId }`;\n\n\t\tconst controlProps = {\n\t\t\tid: inputId, // Passes attribute to label for the for attribute\n\t\t\tlabel,\n\t\t\tclassName: clsx( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t\thideLabelFromVision,\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tid: inputId,\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': label ? undefined : __( 'URL' ), // Ensure input always has an accessible label\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t\tsuffix: this.props.suffix,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ loading && }\n\t\t\t\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tsuggestionsValue,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tif ( ! showSuggestions || suggestions.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected':\n\t\t\t\t\tindex === selectedSuggestion ? true : undefined,\n\t\t\t};\n\t\t};\n\n\t\tif ( isFunction( renderSuggestions ) ) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions: ! suggestionsValue?.length,\n\t\t\t\tcurrentInputValue: suggestionsValue,\n\t\t\t} );\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t this.handleOnClick( suggestion ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ suggestion.title }\n\t\t\t\t\t\t\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail.\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions:\n\t\t\t\tgetSettings().__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst plus = (\n\t\n\t\t\n\t\n);\n\nexport default plus;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { MenuItem } from '@wordpress/components';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { plus } from '@wordpress/icons';\n\nexport const LinkControlSearchCreate = ( {\n\tsearchTerm,\n\tonClick,\n\titemProps,\n\tbuttonText,\n} ) => {\n\tif ( ! searchTerm ) {\n\t\treturn null;\n\t}\n\n\tlet text;\n\tif ( buttonText ) {\n\t\ttext =\n\t\t\ttypeof buttonText === 'function'\n\t\t\t\t? buttonText( searchTerm )\n\t\t\t\t: buttonText;\n\t} else {\n\t\ttext = createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create: %s' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: }\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ text }\n\t\t\n\t);\n};\n\nexport default LinkControlSearchCreate;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst postList = (\n\t\n\t\t\n\t\n);\n\nexport default postList;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst page = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default page;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst tag = (\n\t\n\t\t\n\t\n);\n\nexport default tag;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst category = (\n\t\n\t\t\n\t\n);\n\nexport default category;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst file = (\n\t\n\t\t\n\t\n);\n\nexport default file;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst globe = (\n\t\n\t\t\n\t\n);\n\nexport default globe;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst home = (\n\t\n\t\t\n\t\n);\n\nexport default home;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst verse = (\n\t\n\t\t\n\t\n);\n\nexport default verse;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem, TextHighlight } from '@wordpress/components';\nimport {\n\tIcon,\n\tglobe,\n\tpage,\n\ttag,\n\tpostList,\n\tcategory,\n\tfile,\n\thome,\n\tverse,\n} from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { safeDecodeURI, filterURLForDisplay, getPath } from '@wordpress/url';\nimport { pipe } from '@wordpress/compose';\n\nconst ICONS_MAP = {\n\tpost: postList,\n\tpage,\n\tpost_tag: tag,\n\tcategory,\n\tattachment: file,\n};\n\nfunction SearchItemIcon( { isURL, suggestion } ) {\n\tlet icon = null;\n\n\tif ( isURL ) {\n\t\ticon = globe;\n\t} else if ( suggestion.type in ICONS_MAP ) {\n\t\ticon = ICONS_MAP[ suggestion.type ];\n\t\tif ( suggestion.type === 'page' ) {\n\t\t\tif ( suggestion.isFrontPage ) {\n\t\t\t\ticon = home;\n\t\t\t}\n\t\t\tif ( suggestion.isBlogHome ) {\n\t\t\t\ticon = verse;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( icon ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn null;\n}\n\n/**\n * Adds a leading slash to a url if it doesn't already have one.\n * @param {string} url the url to add a leading slash to.\n * @return {string} the url with a leading slash.\n */\nfunction addLeadingSlash( url ) {\n\tconst trimmedURL = url?.trim();\n\n\tif ( ! trimmedURL?.length ) {\n\t\treturn url;\n\t}\n\n\treturn url?.replace( /^\\/?/, '/' );\n}\n\nfunction removeTrailingSlash( url ) {\n\tconst trimmedURL = url?.trim();\n\n\tif ( ! trimmedURL?.length ) {\n\t\treturn url;\n\t}\n\n\treturn url?.replace( /\\/$/, '' );\n}\n\nconst partialRight =\n\t( fn, ...partialArgs ) =>\n\t( ...args ) =>\n\t\tfn( ...args, ...partialArgs );\n\nconst defaultTo = ( d ) => ( v ) => {\n\treturn v === null || v === undefined || v !== v ? d : v;\n};\n\n/**\n * Prepares a URL for display in the UI.\n * - decodes the URL.\n * - filters it (removes protocol, www, etc.).\n * - truncates it if necessary.\n * - adds a leading slash.\n * @param {string} url the url.\n * @return {string} the processed url to display.\n */\nfunction getURLForDisplay( url ) {\n\tif ( ! url ) {\n\t\treturn url;\n\t}\n\n\treturn pipe(\n\t\tsafeDecodeURI,\n\t\tgetPath,\n\t\tdefaultTo( '' ),\n\t\tpartialRight( filterURLForDisplay, 24 ),\n\t\tremoveTrailingSlash,\n\t\taddLeadingSlash\n\t)( url );\n}\n\nexport const LinkControlSearchItem = ( {\n\titemProps,\n\tsuggestion,\n\tsearchTerm,\n\tonClick,\n\tisURL = false,\n\tshouldShowType = false,\n} ) => {\n\tconst info = isURL\n\t\t? __( 'Press ENTER to add this link' )\n\t\t: getURLForDisplay( suggestion.url );\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\tonClick={ onClick }\n\t\t\tshortcut={ shouldShowType && getVisualTypeName( suggestion ) }\n\t\t\tclassName=\"block-editor-link-control__search-item\"\n\t\t>\n\t\t\t\n\t\t\n\t);\n};\n\nfunction getVisualTypeName( suggestion ) {\n\tif ( suggestion.isFrontPage ) {\n\t\treturn 'front page';\n\t}\n\n\tif ( suggestion.isBlogHome ) {\n\t\treturn 'blog home';\n\t}\n\n\t// Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label.\n\treturn suggestion.type === 'post_tag' ? 'tag' : suggestion.type;\n}\n\nexport default LinkControlSearchItem;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n// Used as a unique identifier for the \"Create\" option within search results.\n// Used to help distinguish the \"Create\" suggestion within the search results in\n// order to handle it as a unique case.\nexport const CREATE_TYPE = '__CREATE__';\nexport const TEL_TYPE = 'tel';\nexport const URL_TYPE = 'link';\nexport const MAILTO_TYPE = 'mailto';\nexport const INTERNAL_TYPE = 'internal';\n\nexport const LINK_ENTRY_TYPES = [\n\tURL_TYPE,\n\tMAILTO_TYPE,\n\tTEL_TYPE,\n\tINTERNAL_TYPE,\n];\n\nexport const DEFAULT_LINK_SETTINGS = [\n\t{\n\t\tid: 'opensInNewTab',\n\t\ttitle: __( 'Open in new tab' ),\n\t},\n];\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { VisuallyHidden, MenuGroup } from '@wordpress/components';\n\n/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSearchCreate from './search-create-button';\nimport LinkControlSearchItem from './search-item';\nimport { CREATE_TYPE, LINK_ENTRY_TYPES } from './constants';\n\nexport default function LinkControlSearchResults( {\n\tinstanceId,\n\twithCreateSuggestion,\n\tcurrentInputValue,\n\thandleSuggestionClick,\n\tsuggestionsListProps,\n\tbuildSuggestionItemProps,\n\tsuggestions,\n\tselectedSuggestion,\n\tisLoading,\n\tisInitialSuggestions,\n\tcreateSuggestionButtonText,\n\tsuggestionsQuery,\n} ) {\n\tconst resultsListClasses = clsx(\n\t\t'block-editor-link-control__search-results',\n\t\t{\n\t\t\t'is-loading': isLoading,\n\t\t}\n\t);\n\n\tconst isSingleDirectEntryResult =\n\t\tsuggestions.length === 1 &&\n\t\tLINK_ENTRY_TYPES.includes( suggestions[ 0 ].type );\n\tconst shouldShowCreateSuggestion =\n\t\twithCreateSuggestion &&\n\t\t! isSingleDirectEntryResult &&\n\t\t! isInitialSuggestions;\n\t// If the query has a specified type, then we can skip showing them in the result. See #24839.\n\tconst shouldShowSuggestionsTypes = ! suggestionsQuery?.type;\n\n\t// According to guidelines aria-label should be added if the label\n\t// itself is not visible.\n\t// See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role\n\tconst searchResultsLabelId = `block-editor-link-control-search-results-label-${ instanceId }`;\n\tconst labelText = isInitialSuggestions\n\t\t? __( 'Suggestions' )\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Search results for \"%s\"' ),\n\t\t\t\tcurrentInputValue\n\t\t );\n\tconst searchResultsLabel = (\n\t\t\n\t\t\t{ labelText }\n\t\t\n\t);\n\n\treturn (\n\t\t
    \n\t\t\t{ searchResultsLabel }\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tshouldShowCreateSuggestion &&\n\t\t\t\t\t\t\tCREATE_TYPE === suggestion.type\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\thandleSuggestionClick( suggestion )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Intentionally only using `type` here as\n\t\t\t\t\t\t\t\t\t// the constant is enough to uniquely\n\t\t\t\t\t\t\t\t\t// identify the single \"CREATE\" suggestion.\n\t\t\t\t\t\t\t\t\tkey={ suggestion.type }\n\t\t\t\t\t\t\t\t\titemProps={ buildSuggestionItemProps(\n\t\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tisSelected={ index === selectedSuggestion }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we're not handling \"Create\" suggestions above then\n\t\t\t\t\t\t// we don't want them in the main results so exit early.\n\t\t\t\t\t\tif ( CREATE_TYPE === suggestion.type ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\thandleSuggestionClick( suggestion );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tisSelected={ index === selectedSuggestion }\n\t\t\t\t\t\t\t\tisURL={ LINK_ENTRY_TYPES.includes(\n\t\t\t\t\t\t\t\t\tsuggestion.type\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tsearchTerm={ currentInputValue }\n\t\t\t\t\t\t\t\tshouldShowType={ shouldShowSuggestionsTypes }\n\t\t\t\t\t\t\t\tisFrontPage={ suggestion?.isFrontPage }\n\t\t\t\t\t\t\t\tisBlogHome={ suggestion?.isBlogHome }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { getProtocol, isValidProtocol, isValidFragment } from '@wordpress/url';\n\n/**\n * Determines whether a given value could be a URL. Note this does not\n * guarantee the value is a URL only that it looks like it might be one. For\n * example, just because a string has `www.` in it doesn't make it a URL,\n * but it does make it highly likely that it will be so in the context of\n * creating a link it makes sense to treat it like one.\n *\n * @param {string} val the candidate for being URL-like (or not).\n *\n * @return {boolean} whether or not the value is potentially a URL.\n */\nexport default function isURLLike( val ) {\n\tconst hasSpaces = val.includes( ' ' );\n\n\tif ( hasSpaces ) {\n\t\treturn false;\n\t}\n\n\tconst protocol = getProtocol( val );\n\tconst protocolIsValid = isValidProtocol( protocol );\n\n\tconst mayBeTLD = hasPossibleTLD( val );\n\n\tconst isWWW = val?.startsWith( 'www.' );\n\n\tconst isInternal = val?.startsWith( '#' ) && isValidFragment( val );\n\n\treturn protocolIsValid || isWWW || isInternal || mayBeTLD;\n}\n\n/**\n * Checks if a given URL has a valid Top-Level Domain (TLD).\n *\n * @param {string} url - The URL to check.\n * @param {number} maxLength - The maximum length of the TLD.\n * @return {boolean} Returns true if the URL has a valid TLD, false otherwise.\n */\nfunction hasPossibleTLD( url, maxLength = 6 ) {\n\t// Clean the URL by removing anything after the first occurrence of \"?\" or \"#\".\n\tconst cleanedURL = url.split( /[?#]/ )[ 0 ];\n\n\t// Regular expression explanation:\n\t// - (?<=\\S) : Positive lookbehind assertion to ensure there is at least one non-whitespace character before the TLD\n\t// - \\. : Matches a literal dot (.)\n\t// - [a-zA-Z_]{2,maxLength} : Matches 2 to maxLength letters or underscores, representing the TLD\n\t// - (?:\\/|$) : Non-capturing group that matches either a forward slash (/) or the end of the string\n\tconst regex = new RegExp(\n\t\t`(?<=\\\\S)\\\\.(?:[a-zA-Z_]{2,${ maxLength }})(?:\\\\/|$)`\n\t);\n\n\treturn regex.test( cleanedURL );\n}\n","/**\n * WordPress dependencies\n */\nimport { getProtocol, prependHTTP } from '@wordpress/url';\nimport { useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport isURLLike from './is-url-like';\nimport {\n\tCREATE_TYPE,\n\tTEL_TYPE,\n\tMAILTO_TYPE,\n\tINTERNAL_TYPE,\n\tURL_TYPE,\n} from './constants';\nimport { store as blockEditorStore } from '../../store';\n\nexport const handleNoop = () => Promise.resolve( [] );\n\nexport const handleDirectEntry = ( val ) => {\n\tlet type = URL_TYPE;\n\n\tconst protocol = getProtocol( val ) || '';\n\n\tif ( protocol.includes( 'mailto' ) ) {\n\t\ttype = MAILTO_TYPE;\n\t}\n\n\tif ( protocol.includes( 'tel' ) ) {\n\t\ttype = TEL_TYPE;\n\t}\n\n\tif ( val?.startsWith( '#' ) ) {\n\t\ttype = INTERNAL_TYPE;\n\t}\n\n\treturn Promise.resolve( [\n\t\t{\n\t\t\tid: val,\n\t\t\ttitle: val,\n\t\t\turl: type === 'URL' ? prependHTTP( val ) : val,\n\t\t\ttype,\n\t\t},\n\t] );\n};\n\nconst handleEntitySearch = async (\n\tval,\n\tsuggestionsQuery,\n\tfetchSearchSuggestions,\n\twithCreateSuggestion,\n\tpageOnFront,\n\tpageForPosts\n) => {\n\tconst { isInitialSuggestions } = suggestionsQuery;\n\n\tconst results = await fetchSearchSuggestions( val, suggestionsQuery );\n\n\t// Identify front page and update type to match.\n\tresults.map( ( result ) => {\n\t\tif ( Number( result.id ) === pageOnFront ) {\n\t\t\tresult.isFrontPage = true;\n\t\t\treturn result;\n\t\t} else if ( Number( result.id ) === pageForPosts ) {\n\t\t\tresult.isBlogHome = true;\n\t\t\treturn result;\n\t\t}\n\n\t\treturn result;\n\t} );\n\n\t// If displaying initial suggestions just return plain results.\n\tif ( isInitialSuggestions ) {\n\t\treturn results;\n\t}\n\n\t// Here we append a faux suggestion to represent a \"CREATE\" option. This\n\t// is detected in the rendering of the search results and handled as a\n\t// special case. This is currently necessary because the suggestions\n\t// dropdown will only appear if there are valid suggestions and\n\t// therefore unless the create option is a suggestion it will not\n\t// display in scenarios where there are no results returned from the\n\t// API. In addition promoting CREATE to a first class suggestion affords\n\t// the a11y benefits afforded by `URLInput` to all suggestions (eg:\n\t// keyboard handling, ARIA roles...etc).\n\t//\n\t// Note also that the value of the `title` and `url` properties must correspond\n\t// to the text value of the ``. This is because `title` is used\n\t// when creating the suggestion. Similarly `url` is used when using keyboard to select\n\t// the suggestion (the
    `onSubmit` handler falls-back to `url`).\n\treturn isURLLike( val ) || ! withCreateSuggestion\n\t\t? results\n\t\t: results.concat( {\n\t\t\t\t// the `id` prop is intentionally ommitted here because it\n\t\t\t\t// is never exposed as part of the component's public API.\n\t\t\t\t// see: https://github.com/WordPress/gutenberg/pull/19775#discussion_r378931316.\n\t\t\t\ttitle: val, // Must match the existing ``s text value.\n\t\t\t\turl: val, // Must match the existing ``s text value.\n\t\t\t\ttype: CREATE_TYPE,\n\t\t } );\n};\n\nexport default function useSearchHandler(\n\tsuggestionsQuery,\n\tallowDirectEntry,\n\twithCreateSuggestion\n) {\n\tconst { fetchSearchSuggestions, pageOnFront, pageForPosts } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings } = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tpageOnFront: getSettings().pageOnFront,\n\t\t\t\tpageForPosts: getSettings().pageForPosts,\n\t\t\t\tfetchSearchSuggestions:\n\t\t\t\t\tgetSettings().__experimentalFetchLinkSuggestions,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst directEntryHandler = allowDirectEntry\n\t\t? handleDirectEntry\n\t\t: handleNoop;\n\n\treturn useCallback(\n\t\t( val, { isInitialSuggestions } ) => {\n\t\t\treturn isURLLike( val )\n\t\t\t\t? directEntryHandler( val, { isInitialSuggestions } )\n\t\t\t\t: handleEntitySearch(\n\t\t\t\t\t\tval,\n\t\t\t\t\t\t{ ...suggestionsQuery, isInitialSuggestions },\n\t\t\t\t\t\tfetchSearchSuggestions,\n\t\t\t\t\t\twithCreateSuggestion,\n\t\t\t\t\t\tpageOnFront,\n\t\t\t\t\t\tpageForPosts\n\t\t\t\t );\n\t\t},\n\t\t[\n\t\t\tdirectEntryHandler,\n\t\t\tfetchSearchSuggestions,\n\t\t\tpageOnFront,\n\t\t\tpageForPosts,\n\t\t\tsuggestionsQuery,\n\t\t\twithCreateSuggestion,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { forwardRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { URLInput } from '../';\nimport LinkControlSearchResults from './search-results';\nimport { CREATE_TYPE } from './constants';\nimport useSearchHandler from './use-search-handler';\n\n// Must be a function as otherwise URLInput will default\n// to the fetchLinkSuggestions passed in block editor settings\n// which will cause an unintended http request.\nconst noopSearchHandler = () => Promise.resolve( [] );\n\nconst noop = () => {};\n\nconst LinkControlSearchInput = forwardRef(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tchildren,\n\t\t\tcurrentLink = {},\n\t\t\tclassName = null,\n\t\t\tplaceholder = null,\n\t\t\twithCreateSuggestion = false,\n\t\t\tonCreateSuggestion = noop,\n\t\t\tonChange = noop,\n\t\t\tonSelect = noop,\n\t\t\tshowSuggestions = true,\n\t\t\trenderSuggestions = ( props ) => (\n\t\t\t\t\n\t\t\t),\n\t\t\tfetchSuggestions = null,\n\t\t\tallowDirectEntry = true,\n\t\t\tshowInitialSuggestions = false,\n\t\t\tsuggestionsQuery = {},\n\t\t\twithURLSuggestion = true,\n\t\t\tcreateSuggestionButtonText,\n\t\t\thideLabelFromVision = false,\n\t\t\tsuffix,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst genericSearchHandler = useSearchHandler(\n\t\t\tsuggestionsQuery,\n\t\t\tallowDirectEntry,\n\t\t\twithCreateSuggestion,\n\t\t\twithURLSuggestion\n\t\t);\n\n\t\tconst searchHandler = showSuggestions\n\t\t\t? fetchSuggestions || genericSearchHandler\n\t\t\t: noopSearchHandler;\n\n\t\tconst instanceId = useInstanceId( LinkControlSearchInput );\n\t\tconst [ focusedSuggestion, setFocusedSuggestion ] = useState();\n\n\t\t/**\n\t\t * Handles the user moving between different suggestions. Does not handle\n\t\t * choosing an individual item.\n\t\t *\n\t\t * @param {string} selection the url of the selected suggestion.\n\t\t * @param {Object} suggestion the suggestion object.\n\t\t */\n\t\tconst onInputChange = ( selection, suggestion ) => {\n\t\t\tonChange( selection );\n\t\t\tsetFocusedSuggestion( suggestion );\n\t\t};\n\n\t\tconst handleRenderSuggestions = ( props ) =>\n\t\t\trenderSuggestions( {\n\t\t\t\t...props,\n\t\t\t\tinstanceId,\n\t\t\t\twithCreateSuggestion,\n\t\t\t\tcreateSuggestionButtonText,\n\t\t\t\tsuggestionsQuery,\n\t\t\t\thandleSuggestionClick: ( suggestion ) => {\n\t\t\t\t\tif ( props.handleSuggestionClick ) {\n\t\t\t\t\t\tprops.handleSuggestionClick( suggestion );\n\t\t\t\t\t}\n\t\t\t\t\tonSuggestionSelected( suggestion );\n\t\t\t\t},\n\t\t\t} );\n\n\t\tconst onSuggestionSelected = async ( selectedSuggestion ) => {\n\t\t\tlet suggestion = selectedSuggestion;\n\t\t\tif ( CREATE_TYPE === selectedSuggestion.type ) {\n\t\t\t\t// Create a new page and call onSelect with the output from the onCreateSuggestion callback.\n\t\t\t\ttry {\n\t\t\t\t\tsuggestion = await onCreateSuggestion(\n\t\t\t\t\t\tselectedSuggestion.title\n\t\t\t\t\t);\n\t\t\t\t\tif ( suggestion?.url ) {\n\t\t\t\t\t\tonSelect( suggestion );\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tallowDirectEntry ||\n\t\t\t\t( suggestion && Object.keys( suggestion ).length >= 1 )\n\t\t\t) {\n\t\t\t\tconst { id, url, ...restLinkProps } = currentLink ?? {};\n\t\t\t\tonSelect(\n\t\t\t\t\t// Some direct entries don't have types or IDs, and we still need to clear the previous ones.\n\t\t\t\t\t{ ...restLinkProps, ...suggestion },\n\t\t\t\t\tsuggestion\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t
    \n\t\t\t\t {\n\t\t\t\t\t\tconst hasSuggestion = suggestion || focusedSuggestion;\n\n\t\t\t\t\t\t// If there is no suggestion and the value (ie: any manually entered URL) is empty\n\t\t\t\t\t\t// then don't allow submission otherwise we get empty links.\n\t\t\t\t\t\tif ( ! hasSuggestion && ! value?.trim()?.length ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSuggestionSelected(\n\t\t\t\t\t\t\t\thasSuggestion || { url: value }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tref={ ref }\n\t\t\t\t\tsuffix={ suffix }\n\t\t\t\t/>\n\t\t\t\t{ children }\n\t\t\t
    \n\t\t);\n\t}\n);\n\nexport default LinkControlSearchInput;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst info = (\n\t\n\t\t\n\t\n);\n\nexport default info;\n","/**\n * Internal dependencies\n */\n\nimport { default as pencil } from './pencil';\nexport default pencil;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst pencil = (\n\t\n\t\t\n\t\n);\n\nexport default pencil;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst linkOff = (\n\t\n\t\t\n\t\n);\n\nexport default linkOff;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst copySmall = (\n\t\n\t\t\n\t\n);\n\nexport default copySmall;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Slot: ViewerSlot, Fill: ViewerFill } = createSlotFill(\n\t'BlockEditorLinkControlViewer'\n);\n\nexport { ViewerSlot, ViewerFill };\nexport default ViewerSlot;\n","/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useEffect, useReducer } from '@wordpress/element';\n\nfunction reducer( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RESOLVED':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: false,\n\t\t\t\trichData: action.richData,\n\t\t\t};\n\t\tcase 'ERROR':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: false,\n\t\t\t\trichData: null,\n\t\t\t};\n\t\tcase 'LOADING':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: true,\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error( `Unexpected action type ${ action.type }` );\n\t}\n}\n\nfunction useRemoteUrlData( url ) {\n\tconst [ state, dispatch ] = useReducer( reducer, {\n\t\trichData: null,\n\t\tisFetching: false,\n\t} );\n\n\tconst { fetchRichUrlData } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tfetchRichUrlData: getSettings().__experimentalFetchRichUrlData,\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\t// Only make the request if we have an actual URL\n\t\t// and the fetching util is available. In some editors\n\t\t// there may not be such a util.\n\t\tif (\n\t\t\turl?.length &&\n\t\t\tfetchRichUrlData &&\n\t\t\ttypeof AbortController !== 'undefined'\n\t\t) {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'LOADING',\n\t\t\t} );\n\n\t\t\tconst controller = new window.AbortController();\n\n\t\t\tconst signal = controller.signal;\n\n\t\t\tfetchRichUrlData( url, {\n\t\t\t\tsignal,\n\t\t\t} )\n\t\t\t\t.then( ( urlData ) => {\n\t\t\t\t\tdispatch( {\n\t\t\t\t\t\ttype: 'RESOLVED',\n\t\t\t\t\t\trichData: urlData,\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\t// Avoid setting state on unmounted component\n\t\t\t\t\tif ( ! signal.aborted ) {\n\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\ttype: 'ERROR',\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t// Cleanup: when the URL changes the abort the current request.\n\t\t\treturn () => {\n\t\t\t\tcontroller.abort();\n\t\t\t};\n\t\t}\n\t}, [ url ] );\n\n\treturn state;\n}\n\nexport default useRemoteUrlData;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tExternalLink,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';\nimport { Icon, globe, info, linkOff, edit, copySmall } from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport { ViewerSlot } from './viewer-slot';\n\nimport useRichUrlData from './use-rich-url-data';\n\n/**\n * Filters the title for display. Removes the protocol and www prefix.\n *\n * @param {string} title The title to be filtered.\n *\n * @return {string} The filtered title.\n */\nfunction filterTitleForDisplay( title ) {\n\t// Derived from `filterURLForDisplay` in `@wordpress/url`.\n\treturn title\n\t\t.replace( /^[a-z\\-.\\+]+[0-9]*:(\\/\\/)?/i, '' )\n\t\t.replace( /^www\\./i, '' );\n}\n\nexport default function LinkPreview( {\n\tvalue,\n\tonEditClick,\n\thasRichPreviews = false,\n\thasUnlinkControl = false,\n\tonRemove,\n} ) {\n\tconst showIconLabels = useSelect(\n\t\t( select ) =>\n\t\t\tselect( preferencesStore ).get( 'core', 'showIconLabels' ),\n\t\t[]\n\t);\n\n\t// Avoid fetching if rich previews are not desired.\n\tconst showRichPreviews = hasRichPreviews ? value?.url : null;\n\n\tconst { richData, isFetching } = useRichUrlData( showRichPreviews );\n\n\t// Rich data may be an empty object so test for that.\n\tconst hasRichData = richData && Object.keys( richData ).length;\n\n\tconst displayURL =\n\t\t( value && filterURLForDisplay( safeDecodeURI( value.url ), 24 ) ) ||\n\t\t'';\n\n\t// url can be undefined if the href attribute is unset\n\tconst isEmptyURL = ! value?.url?.length;\n\n\tconst displayTitle =\n\t\t! isEmptyURL &&\n\t\tstripHTML( richData?.title || value?.title || displayURL );\n\n\tconst isUrlRedundant =\n\t\t! value?.url || filterTitleForDisplay( displayTitle ) === displayURL;\n\n\tlet icon;\n\n\tif ( richData?.icon ) {\n\t\ticon = \"\";\n\t} else if ( isEmptyURL ) {\n\t\ticon = ;\n\t} else {\n\t\ticon = ;\n\t}\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst ref = useCopyToClipboard( value.url, () => {\n\t\tcreateNotice( 'info', __( 'Link copied to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ icon }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ! isEmptyURL ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ displayTitle }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ ! isUrlRedundant && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ displayURL }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Link is empty' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ hasUnlinkControl && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { CheckboxControl, VisuallyHidden } from '@wordpress/components';\n\nconst noop = () => {};\n\nconst LinkControlSettings = ( { value, onChange = noop, settings } ) => {\n\tif ( ! settings || ! settings.length ) {\n\t\treturn null;\n\t}\n\n\tconst handleSettingChange = ( setting ) => ( newValue ) => {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\t[ setting.id ]: newValue,\n\t\t} );\n\t};\n\n\tconst theSettings = settings.map( ( setting ) => (\n\t\t\n\t) );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Currently selected link settings' ) }\n\t\t\t\n\t\t\t{ theSettings }\n\t\t
    \n\t);\n};\n\nexport default LinkControlSettings;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tSpinner,\n\tNotice,\n\tTextControl,\n\t__experimentalHStack as HStack,\n\t__experimentalInputControlSuffixWrapper as InputControlSuffixWrapper,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useState, useEffect } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport { ENTER } from '@wordpress/keycodes';\nimport { isShallowEqualObjects } from '@wordpress/is-shallow-equal';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as preferencesStore } from '@wordpress/preferences';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSettingsDrawer from './settings-drawer';\nimport LinkControlSearchInput from './search-input';\nimport LinkPreview from './link-preview';\nimport LinkSettings from './settings';\nimport useCreatePage from './use-create-page';\nimport useInternalValue from './use-internal-value';\nimport { ViewerFill } from './viewer-slot';\nimport { DEFAULT_LINK_SETTINGS } from './constants';\n\n/**\n * Default properties associated with a link control value.\n *\n * @typedef WPLinkControlDefaultValue\n *\n * @property {string} url Link URL.\n * @property {string=} title Link title.\n * @property {boolean=} opensInNewTab Whether link should open in a new browser\n * tab. This value is only assigned if not\n * providing a custom `settings` prop.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Custom settings values associated with a link.\n *\n * @typedef {{[setting:string]:any}} WPLinkControlSettingsValue\n */\n/* eslint-enable */\n\n/**\n * Custom settings values associated with a link.\n *\n * @typedef WPLinkControlSetting\n *\n * @property {string} id Identifier to use as property for setting value.\n * @property {string} title Human-readable label to show in user interface.\n */\n\n/**\n * Properties associated with a link control value, composed as a union of the\n * default properties and any custom settings values.\n *\n * @typedef {WPLinkControlDefaultValue&WPLinkControlSettingsValue} WPLinkControlValue\n */\n\n/** @typedef {(nextValue:WPLinkControlValue)=>void} WPLinkControlOnChangeProp */\n\n/**\n * Properties associated with a search suggestion used within the LinkControl.\n *\n * @typedef WPLinkControlSuggestion\n *\n * @property {string} id Identifier to use to uniquely identify the suggestion.\n * @property {string} type Identifies the type of the suggestion (eg: `post`,\n * `page`, `url`...etc)\n * @property {string} title Human-readable label to show in user interface.\n * @property {string} url A URL for the suggestion.\n */\n\n/** @typedef {(title:string)=>WPLinkControlSuggestion} WPLinkControlCreateSuggestionProp */\n\n/**\n * @typedef WPLinkControlProps\n *\n * @property {(WPLinkControlSetting[])=} settings An array of settings objects. Each object will used to\n * render a `ToggleControl` for that setting.\n * @property {boolean=} forceIsEditingLink If passed as either `true` or `false`, controls the\n * internal editing state of the component to respective\n * show or not show the URL input field.\n * @property {WPLinkControlValue=} value Current link value.\n * @property {WPLinkControlOnChangeProp=} onChange Value change handler, called with the updated value if\n * the user selects a new link or updates settings.\n * @property {boolean=} noDirectEntry Whether to allow turning a URL-like search query directly into a link.\n * @property {boolean=} showSuggestions Whether to present suggestions when typing the URL.\n * @property {boolean=} showInitialSuggestions Whether to present initial suggestions immediately.\n * @property {boolean=} withCreateSuggestion Whether to allow creation of link value from suggestion.\n * @property {Object=} suggestionsQuery Query parameters to pass along to wp.blockEditor.__experimentalFetchLinkSuggestions.\n * @property {boolean=} noURLSuggestion Whether to add a fallback suggestion which treats the search query as a URL.\n * @property {boolean=} hasTextControl Whether to add a text field to the UI to update the value.title.\n * @property {string|Function|undefined} createSuggestionButtonText The text to use in the button that calls createSuggestion.\n * @property {Function} renderControlBottom Optional controls to be rendered at the bottom of the component.\n */\n\nconst noop = () => {};\n\nconst PREFERENCE_SCOPE = 'core/block-editor';\nconst PREFERENCE_KEY = 'linkControlSettingsDrawer';\n\n/**\n * Renders a link control. A link control is a controlled input which maintains\n * a value associated with a link (HTML anchor element) and relevant settings\n * for how that link is expected to behave.\n *\n * @param {WPLinkControlProps} props Component props.\n */\nfunction LinkControl( {\n\tsearchInputPlaceholder,\n\tvalue,\n\tsettings = DEFAULT_LINK_SETTINGS,\n\tonChange = noop,\n\tonRemove,\n\tonCancel,\n\tnoDirectEntry = false,\n\tshowSuggestions = true,\n\tshowInitialSuggestions,\n\tforceIsEditingLink,\n\tcreateSuggestion,\n\twithCreateSuggestion,\n\tinputValue: propInputValue = '',\n\tsuggestionsQuery = {},\n\tnoURLSuggestion = false,\n\tcreateSuggestionButtonText,\n\thasRichPreviews = false,\n\thasTextControl = false,\n\trenderControlBottom = null,\n} ) {\n\tif ( withCreateSuggestion === undefined && createSuggestion ) {\n\t\twithCreateSuggestion = true;\n\t}\n\n\tconst [ settingsOpen, setSettingsOpen ] = useState( false );\n\n\tconst { advancedSettingsPreference } = useSelect( ( select ) => {\n\t\tconst prefsStore = select( preferencesStore );\n\n\t\treturn {\n\t\t\tadvancedSettingsPreference:\n\t\t\t\tprefsStore.get( PREFERENCE_SCOPE, PREFERENCE_KEY ) ?? false,\n\t\t};\n\t}, [] );\n\n\tconst { set: setPreference } = useDispatch( preferencesStore );\n\n\t/**\n\t * Sets the open/closed state of the Advanced Settings Drawer,\n\t * optionlly persisting the state to the user's preferences.\n\t *\n\t * Note that Block Editor components can be consumed by non-WordPress\n\t * environments which may not have preferences setup.\n\t * Therefore a local state is also used as a fallback.\n\t *\n\t * @param {boolean} prefVal the open/closed state of the Advanced Settings Drawer.\n\t */\n\tconst setSettingsOpenWithPreference = ( prefVal ) => {\n\t\tif ( setPreference ) {\n\t\t\tsetPreference( PREFERENCE_SCOPE, PREFERENCE_KEY, prefVal );\n\t\t}\n\t\tsetSettingsOpen( prefVal );\n\t};\n\n\t// Block Editor components can be consumed by non-WordPress environments\n\t// which may not have these preferences setup.\n\t// Therefore a local state is used as a fallback.\n\tconst isSettingsOpen = advancedSettingsPreference || settingsOpen;\n\n\tconst isMountingRef = useRef( true );\n\tconst wrapperNode = useRef();\n\tconst textInputRef = useRef();\n\tconst isEndingEditWithFocusRef = useRef( false );\n\n\tconst settingsKeys = settings.map( ( { id } ) => id );\n\n\tconst [\n\t\tinternalControlValue,\n\t\tsetInternalControlValue,\n\t\tsetInternalURLInputValue,\n\t\tsetInternalTextInputValue,\n\t\tcreateSetInternalSettingValueHandler,\n\t] = useInternalValue( value );\n\n\tconst valueHasChanges =\n\t\tvalue && ! isShallowEqualObjects( internalControlValue, value );\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState(\n\t\tforceIsEditingLink !== undefined\n\t\t\t? forceIsEditingLink\n\t\t\t: ! value || ! value.url\n\t);\n\n\tconst { createPage, isCreatingPage, errorMessage } =\n\t\tuseCreatePage( createSuggestion );\n\n\tuseEffect( () => {\n\t\tif ( forceIsEditingLink === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsEditingLink( forceIsEditingLink );\n\t}, [ forceIsEditingLink ] );\n\n\tuseEffect( () => {\n\t\t// We don't auto focus into the Link UI on mount\n\t\t// because otherwise using the keyboard to select text\n\t\t// *within* the link format is not possible.\n\t\tif ( isMountingRef.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Scenario - when:\n\t\t// - switching between editable and non editable LinkControl\n\t\t// - clicking on a link\n\t\t// ...then move focus to the *first* element to avoid focus loss\n\t\t// and to ensure focus is *within* the Link UI.\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperNode.current )[ 0 ] ||\n\t\t\twrapperNode.current;\n\n\t\tnextFocusTarget.focus();\n\n\t\tisEndingEditWithFocusRef.current = false;\n\t}, [ isEditingLink, isCreatingPage ] );\n\n\t// The component mounting reference is maintained separately\n\t// to correctly reset values in `StrictMode`.\n\tuseEffect( () => {\n\t\tisMountingRef.current = false;\n\n\t\treturn () => {\n\t\t\tisMountingRef.current = true;\n\t\t};\n\t}, [] );\n\n\tconst hasLinkValue = value?.url?.trim()?.length > 0;\n\n\t/**\n\t * Cancels editing state and marks that focus may need to be restored after\n\t * the next render, if focus was within the wrapper when editing finished.\n\t */\n\tconst stopEditing = () => {\n\t\tisEndingEditWithFocusRef.current = !! wrapperNode.current?.contains(\n\t\t\twrapperNode.current.ownerDocument.activeElement\n\t\t);\n\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst handleSelectSuggestion = ( updatedValue ) => {\n\t\t// Suggestions may contains \"settings\" values (e.g. `opensInNewTab`)\n\t\t// which should not overide any existing settings values set by the\n\t\t// user. This filters out any settings values from the suggestion.\n\t\tconst nonSettingsChanges = Object.keys( updatedValue ).reduce(\n\t\t\t( acc, key ) => {\n\t\t\t\tif ( ! settingsKeys.includes( key ) ) {\n\t\t\t\t\tacc[ key ] = updatedValue[ key ];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\tonChange( {\n\t\t\t...internalControlValue,\n\t\t\t...nonSettingsChanges,\n\t\t\t// As title is not a setting, it must be manually applied\n\t\t\t// in such a way as to preserve the users changes over\n\t\t\t// any \"title\" value provided by the \"suggestion\".\n\t\t\ttitle: internalControlValue?.title || updatedValue?.title,\n\t\t} );\n\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif ( valueHasChanges ) {\n\t\t\t// Submit the original value with new stored values applied\n\t\t\t// on top. URL is a special case as it may also be a prop.\n\t\t\tonChange( {\n\t\t\t\t...value,\n\t\t\t\t...internalControlValue,\n\t\t\t\turl: currentUrlInputValue,\n\t\t\t} );\n\t\t}\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmitWithEnter = ( event ) => {\n\t\tconst { keyCode } = event;\n\n\t\tif (\n\t\t\tkeyCode === ENTER &&\n\t\t\t! currentInputIsEmpty // Disallow submitting empty values.\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst resetInternalValues = () => {\n\t\tsetInternalControlValue( value );\n\t};\n\n\tconst handleCancel = ( event ) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// Ensure that any unsubmitted input changes are reset.\n\t\tresetInternalValues();\n\n\t\tif ( hasLinkValue ) {\n\t\t\t// If there is a link then exist editing mode and show preview.\n\t\t\tstopEditing();\n\t\t} else {\n\t\t\t// If there is no link value, then remove the link entirely.\n\t\t\tonRemove?.();\n\t\t}\n\n\t\tonCancel?.();\n\t};\n\n\tconst currentUrlInputValue =\n\t\tpropInputValue || internalControlValue?.url || '';\n\n\tconst currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;\n\n\tconst shownUnlinkControl =\n\t\tonRemove && value && ! isEditingLink && ! isCreatingPage;\n\n\tconst showActions = isEditingLink && hasLinkValue;\n\n\t// Only show text control once a URL value has been committed\n\t// and it isn't just empty whitespace.\n\t// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.\n\tconst showTextControl = hasLinkValue && hasTextControl;\n\n\tconst isEditing = ( isEditingLink || ! value ) && ! isCreatingPage;\n\tconst isDisabled = ! valueHasChanges || currentInputIsEmpty;\n\tconst showSettings = !! settings?.length && isEditingLink && hasLinkValue;\n\n\treturn (\n\t\t\n\t\t\t{ isCreatingPage && (\n\t\t\t\t
    \n\t\t\t\t\t { __( 'Creating' ) }…\n\t\t\t\t
    \n\t\t\t) }\n\n\t\t\t{ isEditing && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t{ showTextControl && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprops\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t{ errorMessage && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ errorMessage }\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ value && ! isEditingLink && ! isCreatingPage && (\n\t\t\t\t setIsEditingLink( true ) }\n\t\t\t\t\thasRichPreviews={ hasRichPreviews }\n\t\t\t\t\thasUnlinkControl={ shownUnlinkControl }\n\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\tsetIsEditingLink( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ showSettings && (\n\t\t\t\t
    \n\t\t\t\t\t{ ! currentInputIsEmpty && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t) }\n\n\t\t\t{ showActions && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ ! isCreatingPage && renderControlBottom && renderControlBottom() }\n\t\t\n\t);\n}\n\nLinkControl.ViewerFill = ViewerFill;\nLinkControl.DEFAULT_LINK_SETTINGS = DEFAULT_LINK_SETTINGS;\n\nexport default LinkControl;\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\n/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal';\n\nexport default function useInternalValue( value ) {\n\tconst [ internalValue, setInternalValue ] = useState( value || {} );\n\tconst [ previousValue, setPreviousValue ] = useState( value );\n\n\t// If the value prop changes, update the internal state.\n\t// See:\n\t// - https://github.com/WordPress/gutenberg/pull/51387#issuecomment-1722927384.\n\t// - https://react.dev/reference/react/useState#storing-information-from-previous-renders.\n\tif ( ! fastDeepEqual( value, previousValue ) ) {\n\t\tsetPreviousValue( value );\n\t\tsetInternalValue( value );\n\t}\n\n\tconst setInternalURLInputValue = ( nextValue ) => {\n\t\tsetInternalValue( {\n\t\t\t...internalValue,\n\t\t\turl: nextValue,\n\t\t} );\n\t};\n\n\tconst setInternalTextInputValue = ( nextValue ) => {\n\t\tsetInternalValue( {\n\t\t\t...internalValue,\n\t\t\ttitle: nextValue,\n\t\t} );\n\t};\n\n\tconst createSetInternalSettingValueHandler =\n\t\t( settingsKeys ) => ( nextValue ) => {\n\t\t\t// Only apply settings values which are defined in the settings prop.\n\t\t\tconst settingsUpdates = Object.keys( nextValue ).reduce(\n\t\t\t\t( acc, key ) => {\n\t\t\t\t\tif ( settingsKeys.includes( key ) ) {\n\t\t\t\t\t\tacc[ key ] = nextValue[ key ];\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tsetInternalValue( {\n\t\t\t\t...internalValue,\n\t\t\t\t...settingsUpdates,\n\t\t\t} );\n\t\t};\n\n\treturn [\n\t\tinternalValue,\n\t\tsetInternalValue,\n\t\tsetInternalURLInputValue,\n\t\tsetInternalTextInputValue,\n\t\tcreateSetInternalSettingValueHandler,\n\t];\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useState, useRef } from '@wordpress/element';\n\nexport default function useCreatePage( handleCreatePage ) {\n\tconst cancelableCreateSuggestion = useRef();\n\tconst [ isCreatingPage, setIsCreatingPage ] = useState( false );\n\tconst [ errorMessage, setErrorMessage ] = useState( null );\n\n\tconst createPage = async function ( suggestionTitle ) {\n\t\tsetIsCreatingPage( true );\n\t\tsetErrorMessage( null );\n\n\t\ttry {\n\t\t\t// Make cancellable in order that we can avoid setting State\n\t\t\t// if the component unmounts during the call to `createSuggestion`\n\t\t\tcancelableCreateSuggestion.current = makeCancelable(\n\t\t\t\t// Using Promise.resolve to allow createSuggestion to return a\n\t\t\t\t// non-Promise based value.\n\t\t\t\tPromise.resolve( handleCreatePage( suggestionTitle ) )\n\t\t\t);\n\n\t\t\treturn await cancelableCreateSuggestion.current.promise;\n\t\t} catch ( error ) {\n\t\t\tif ( error && error.isCanceled ) {\n\t\t\t\treturn; // bail if canceled to avoid setting state\n\t\t\t}\n\n\t\t\tsetErrorMessage(\n\t\t\t\terror.message ||\n\t\t\t\t\t__(\n\t\t\t\t\t\t'An unknown error occurred during creation. Please try again.'\n\t\t\t\t\t)\n\t\t\t);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tsetIsCreatingPage( false );\n\t\t}\n\t};\n\n\t/**\n\t * Handles cancelling any pending Promises that have been made cancelable.\n\t */\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\t// componentDidUnmount\n\t\t\tif ( cancelableCreateSuggestion.current ) {\n\t\t\t\tcancelableCreateSuggestion.current.cancel();\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\treturn {\n\t\tcreatePage,\n\t\tisCreatingPage,\n\t\terrorMessage,\n\t};\n}\n\n/**\n * Creates a wrapper around a promise which allows it to be programmatically\n * cancelled.\n * See: https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html\n *\n * @param {Promise} promise the Promise to make cancelable\n */\nconst makeCancelable = ( promise ) => {\n\tlet hasCanceled_ = false;\n\n\tconst wrappedPromise = new Promise( ( resolve, reject ) => {\n\t\tpromise.then(\n\t\t\t( val ) =>\n\t\t\t\thasCanceled_ ? reject( { isCanceled: true } ) : resolve( val ),\n\t\t\t( error ) =>\n\t\t\t\thasCanceled_ ? reject( { isCanceled: true } ) : reject( error )\n\t\t);\n\t} );\n\n\treturn {\n\t\tpromise: wrappedPromise,\n\t\tcancel() {\n\t\t\thasCanceled_ = true;\n\t\t},\n\t};\n};\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport {\n\tFormFileUpload,\n\tNavigableMenu,\n\tMenuItem,\n\tToolbarButton,\n\tDropdown,\n\twithFilters,\n} from '@wordpress/components';\nimport { useSelect, withDispatch } from '@wordpress/data';\nimport { DOWN } from '@wordpress/keycodes';\nimport {\n\tpostFeaturedImage,\n\tupload,\n\tmedia as mediaIcon,\n} from '@wordpress/icons';\nimport { compose } from '@wordpress/compose';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport MediaUpload from '../media-upload';\nimport MediaUploadCheck from '../media-upload/check';\nimport LinkControl from '../link-control';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\nlet uniqueId = 0;\n\nconst MediaReplaceFlow = ( {\n\tmediaURL,\n\tmediaId,\n\tmediaIds,\n\tallowedTypes,\n\taccept,\n\tonError,\n\tonSelect,\n\tonSelectURL,\n\tonReset,\n\tonToggleFeaturedImage,\n\tuseFeaturedImage,\n\tonFilesUpload = noop,\n\tname = __( 'Replace' ),\n\tcreateNotice,\n\tremoveNotice,\n\tchildren,\n\tmultiple = false,\n\taddToGallery,\n\thandleUpload = true,\n\tpopoverProps,\n} ) => {\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().mediaUpload;\n\t}, [] );\n\tconst canUpload = !! mediaUpload;\n\tconst editMediaButtonRef = useRef();\n\tconst errorNoticeID = `block-editor/media-replace-flow/error-notice/${ ++uniqueId }`;\n\n\tconst onUploadError = ( message ) => {\n\t\tconst safeMessage = stripHTML( message );\n\t\tif ( onError ) {\n\t\t\tonError( safeMessage );\n\t\t\treturn;\n\t\t}\n\t\t// We need to set a timeout for showing the notice\n\t\t// so that VoiceOver and possibly other screen readers\n\t\t// can announce the error after the toolbar button\n\t\t// regains focus once the upload dialog closes.\n\t\t// Otherwise VO simply skips over the notice and announces\n\t\t// the focused element and the open menu.\n\t\tsetTimeout( () => {\n\t\t\tcreateNotice( 'error', safeMessage, {\n\t\t\t\tspeak: true,\n\t\t\t\tid: errorNoticeID,\n\t\t\t\tisDismissible: true,\n\t\t\t} );\n\t\t}, 1000 );\n\t};\n\n\tconst selectMedia = ( media, closeMenu ) => {\n\t\tif ( useFeaturedImage && onToggleFeaturedImage ) {\n\t\t\tonToggleFeaturedImage();\n\t\t}\n\t\tcloseMenu();\n\t\t// Calling `onSelect` after the state update since it might unmount the component.\n\t\tonSelect( media );\n\t\tspeak( __( 'The media file has been replaced' ) );\n\t\tremoveNotice( errorNoticeID );\n\t};\n\n\tconst uploadFiles = ( event, closeMenu ) => {\n\t\tconst files = event.target.files;\n\t\tif ( ! handleUpload ) {\n\t\t\tcloseMenu();\n\t\t\treturn onSelect( files );\n\t\t}\n\t\tonFilesUpload( files );\n\t\tmediaUpload( {\n\t\t\tallowedTypes,\n\t\t\tfilesList: files,\n\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\tselectMedia( media, closeMenu );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst openOnArrowDown = ( event ) => {\n\t\tif ( event.keyCode === DOWN ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.target.click();\n\t\t}\n\t};\n\n\tconst onlyAllowsImages = () => {\n\t\tif ( ! allowedTypes || allowedTypes.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn allowedTypes.every(\n\t\t\t( allowedType ) =>\n\t\t\t\tallowedType === 'image' || allowedType.startsWith( 'image/' )\n\t\t);\n\t};\n\n\tconst gallery = multiple && onlyAllowsImages();\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t{ name }\n\t\t\t\t\n\t\t\t) }\n\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tselectMedia( media, onClose )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tallowedTypes={ allowedTypes }\n\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Open Media Library' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tuploadFiles( event, onClose );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\taccept={ accept }\n\t\t\t\t\t\t\t\tmultiple={ !! multiple }\n\t\t\t\t\t\t\t\trender={ ( { openFileDialog } ) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\topenFileDialog();\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t{ onToggleFeaturedImage && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Use featured image' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ mediaURL && onReset && (\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tonReset();\n\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ typeof children === 'function'\n\t\t\t\t\t\t\t? children( { onClose } )\n\t\t\t\t\t\t\t: children }\n\t\t\t\t\t\n\t\t\t\t\t{ onSelectURL && (\n\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Current media URL:' ) }\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tonSelectURL( url );\n\t\t\t\t\t\t\t\t\teditMediaButtonRef.current.focus();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-replace-flow/README.md\n */\nexport default compose( [\n\twithDispatch( ( dispatch ) => {\n\t\tconst { createNotice, removeNotice } = dispatch( noticesStore );\n\t\treturn {\n\t\t\tcreateNotice,\n\t\t\tremoveNotice,\n\t\t};\n\t} ),\n\twithFilters( 'editor.MediaReplaceFlow' ),\n] )( MediaReplaceFlow );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tToggleControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalVStack as VStack,\n\tDropZone,\n\tFlexItem,\n\tFocalPointPicker,\n\tMenuItem,\n\tVisuallyHidden,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n\tDropdown,\n\tPlaceholder,\n\tSpinner,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n} from '@wordpress/components';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\nimport { useRef, useState, useEffect, useMemo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { focus } from '@wordpress/dom';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport { getResolvedValue } from '../global-styles/utils';\nimport { hasBackgroundImageValue } from '../global-styles/background-panel';\nimport { setImmutably } from '../../utils/object';\nimport MediaReplaceFlow from '../media-replace-flow';\nimport { store as blockEditorStore } from '../../store';\n\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\n\nconst IMAGE_BACKGROUND_TYPE = 'image';\n\nconst BACKGROUND_POPOVER_PROPS = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-global-styles-background-panel__popover',\n};\nconst noop = () => {};\n\n/**\n * Get the help text for the background size control.\n *\n * @param {string} value backgroundSize value.\n * @return {string} Translated help text.\n */\nfunction backgroundSizeHelpText( value ) {\n\tif ( value === 'cover' || value === undefined ) {\n\t\treturn __( 'Image covers the space evenly.' );\n\t}\n\tif ( value === 'contain' ) {\n\t\treturn __( 'Image is contained without distortion.' );\n\t}\n\treturn __( 'Image has a fixed width.' );\n}\n\n/**\n * Converts decimal x and y coords from FocalPointPicker to percentage-based values\n * to use as backgroundPosition value.\n *\n * @param {{x?:number, y?:number}} value FocalPointPicker coords.\n * @return {string} \t\t\t\t backgroundPosition value.\n */\nexport const coordsToBackgroundPosition = ( value ) => {\n\tif ( ! value || ( isNaN( value.x ) && isNaN( value.y ) ) ) {\n\t\treturn undefined;\n\t}\n\n\tconst x = isNaN( value.x ) ? 0.5 : value.x;\n\tconst y = isNaN( value.y ) ? 0.5 : value.y;\n\n\treturn `${ x * 100 }% ${ y * 100 }%`;\n};\n\n/**\n * Converts backgroundPosition value to x and y coords for FocalPointPicker.\n *\n * @param {string} value backgroundPosition value.\n * @return {{x?:number, y?:number}} FocalPointPicker coords.\n */\nexport const backgroundPositionToCoords = ( value ) => {\n\tif ( ! value ) {\n\t\treturn { x: undefined, y: undefined };\n\t}\n\n\tlet [ x, y ] = value.split( ' ' ).map( ( v ) => parseFloat( v ) / 100 );\n\tx = isNaN( x ) ? undefined : x;\n\ty = isNaN( y ) ? x : y;\n\n\treturn { x, y };\n};\n\nfunction InspectorImagePreviewItem( {\n\tas = 'span',\n\timgUrl,\n\ttoggleProps = {},\n\tfilename,\n\tlabel,\n\tclassName,\n\tonToggleCallback = noop,\n} ) {\n\tuseEffect( () => {\n\t\tif ( typeof toggleProps?.isOpen !== 'undefined' ) {\n\t\t\tonToggleCallback( toggleProps?.isOpen );\n\t\t}\n\t}, [ toggleProps?.isOpen, onToggleCallback ] );\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ imgUrl && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ imgUrl\n\t\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: file name */\n\t\t\t\t\t\t\t\t\t__( 'Background image: %s' ),\n\t\t\t\t\t\t\t\t\tfilename || label\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: __( 'No background image selected' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BackgroundControlsPanel( {\n\tlabel,\n\tfilename,\n\turl: imgUrl,\n\tchildren,\n\tonToggle: onToggleCallback = noop,\n\thasImageValue,\n} ) {\n\tif ( ! hasImageValue ) {\n\t\treturn;\n\t}\n\n\tconst imgLabel =\n\t\tlabel || getFilename( imgUrl ) || __( 'Add background image' );\n\n\treturn (\n\t\t {\n\t\t\t\tconst toggleProps = {\n\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__dropdown-toggle',\n\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t'aria-label': __(\n\t\t\t\t\t\t'Background size, position and repeat options.'\n\t\t\t\t\t),\n\t\t\t\t\tisOpen,\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction LoadingSpinner() {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BackgroundImageControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tonRemoveImage = noop,\n\tonResetImage = noop,\n\tdisplayInPanel,\n\tdefaultValues,\n} ) {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst { id, title, url } = style?.background?.backgroundImage || {\n\t\t...inheritedValue?.background?.backgroundImage,\n\t};\n\tconst replaceContainerRef = useRef();\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetIsUploading( false );\n\t};\n\n\tconst resetBackgroundImage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundImage' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\n\tconst onSelectMedia = ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tresetBackgroundImage();\n\t\t\tsetIsUploading( false );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetIsUploading( true );\n\t\t\treturn;\n\t\t}\n\n\t\t// For media selections originated from a file upload.\n\t\tif (\n\t\t\t( media.media_type &&\n\t\t\t\tmedia.media_type !== IMAGE_BACKGROUND_TYPE ) ||\n\t\t\t( ! media.media_type &&\n\t\t\t\tmedia.type &&\n\t\t\t\tmedia.type !== IMAGE_BACKGROUND_TYPE )\n\t\t) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only images can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst sizeValue =\n\t\t\tstyle?.background?.backgroundSize || defaultValues?.backgroundSize;\n\t\tconst positionValue = style?.background?.backgroundPosition;\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundImage: {\n\t\t\t\t\turl: media.url,\n\t\t\t\t\tid: media.id,\n\t\t\t\t\tsource: 'file',\n\t\t\t\t\ttitle: media.title || undefined,\n\t\t\t\t},\n\t\t\t\tbackgroundPosition:\n\t\t\t\t\t/*\n\t\t\t\t\t * A background image uploaded and set in the editor receives a default background position of '50% 0',\n\t\t\t\t\t * when the background image size is the equivalent of \"Tile\".\n\t\t\t\t\t * This is to increase the chance that the image's focus point is visible.\n\t\t\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t\t\t */\n\t\t\t\t\t! positionValue && ( 'auto' === sizeValue || ! sizeValue )\n\t\t\t\t\t\t? '50% 0'\n\t\t\t\t\t\t: positionValue,\n\t\t\t\tbackgroundSize: sizeValue,\n\t\t\t} )\n\t\t);\n\t\tsetIsUploading( false );\n\t};\n\n\t// Drag and drop callback, restricting image to one.\n\tconst onFilesDrop = ( filesList ) => {\n\t\tif ( filesList?.length > 1 ) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only one image can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: [ IMAGE_BACKGROUND_TYPE ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tonSelectMedia( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst hasValue = hasBackgroundImageValue( style );\n\n\tconst closeAndFocus = () => {\n\t\tconst [ toggleButton ] = focus.tabbable.find(\n\t\t\treplaceContainerRef.current\n\t\t);\n\t\t// Focus the toggle button and close the dropdown menu.\n\t\t// This ensures similar behaviour as to selecting an image, where the dropdown is\n\t\t// closed and focus is redirected to the dropdown toggle button.\n\t\ttoggleButton?.focus();\n\t\ttoggleButton?.click();\n\t};\n\n\tconst onRemove = () =>\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\tbackgroundImage: 'none',\n\t\t\t} )\n\t\t);\n\tconst canRemove = ! hasValue && hasBackgroundImageValue( inheritedValue );\n\tconst imgLabel =\n\t\ttitle || getFilename( url ) || __( 'Add background image' );\n\n\treturn (\n\t\t\n\t\t\t{ isUploading && }\n\t\t\t\n\t\t\t\t}\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tonReset={ () => {\n\t\t\t\t\tcloseAndFocus();\n\t\t\t\t\tonResetImage();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ canRemove && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tcloseAndFocus();\n\t\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\t\tonRemoveImage();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BackgroundSizeControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tdefaultValues,\n} ) {\n\tconst sizeValue =\n\t\tstyle?.background?.backgroundSize ||\n\t\tinheritedValue?.background?.backgroundSize;\n\tconst repeatValue =\n\t\tstyle?.background?.backgroundRepeat ||\n\t\tinheritedValue?.background?.backgroundRepeat;\n\tconst imageValue =\n\t\tstyle?.background?.backgroundImage?.url ||\n\t\tinheritedValue?.background?.backgroundImage?.url;\n\tconst isUploadedImage = style?.background?.backgroundImage?.id;\n\tconst positionValue =\n\t\tstyle?.background?.backgroundPosition ||\n\t\tinheritedValue?.background?.backgroundPosition;\n\tconst attachmentValue =\n\t\tstyle?.background?.backgroundAttachment ||\n\t\tinheritedValue?.background?.backgroundAttachment;\n\n\t/*\n\t * Set default values for uploaded images.\n\t * The default values are passed by the consumer.\n\t * Block-level controls may have different defaults to root-level controls.\n\t * A falsy value is treated by default as `auto` (Tile).\n\t */\n\tlet currentValueForToggle =\n\t\t! sizeValue && isUploadedImage\n\t\t\t? defaultValues?.backgroundSize\n\t\t\t: sizeValue || 'auto';\n\t/*\n\t * The incoming value could be a value + unit, e.g. '20px'.\n\t * In this case set the value to 'tile'.\n\t */\n\tcurrentValueForToggle = ! [ 'cover', 'contain', 'auto' ].includes(\n\t\tcurrentValueForToggle\n\t)\n\t\t? 'auto'\n\t\t: currentValueForToggle;\n\t/*\n\t * If the current value is `cover` and the repeat value is `undefined`, then\n\t * the toggle should be unchecked as the default state. Otherwise, the toggle\n\t * should reflect the current repeat value.\n\t */\n\tconst repeatCheckedValue = ! (\n\t\trepeatValue === 'no-repeat' ||\n\t\t( currentValueForToggle === 'cover' && repeatValue === undefined )\n\t);\n\n\tconst updateBackgroundSize = ( next ) => {\n\t\t// When switching to 'contain' toggle the repeat off.\n\t\tlet nextRepeat = repeatValue;\n\t\tlet nextPosition = positionValue;\n\n\t\tif ( next === 'contain' ) {\n\t\t\tnextRepeat = 'no-repeat';\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif ( next === 'cover' ) {\n\t\t\tnextRepeat = undefined;\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif (\n\t\t\t( currentValueForToggle === 'cover' ||\n\t\t\t\tcurrentValueForToggle === 'contain' ) &&\n\t\t\tnext === 'auto'\n\t\t) {\n\t\t\tnextRepeat = undefined;\n\t\t\t/*\n\t\t\t * A background image uploaded and set in the editor (an image with a record id),\n\t\t\t * receives a default background position of '50% 0',\n\t\t\t * when the toggle switches to \"Tile\". This is to increase the chance that\n\t\t\t * the image's focus point is visible.\n\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t */\n\t\t\tif ( !! style?.background?.backgroundImage?.id ) {\n\t\t\t\tnextPosition = '50% 0';\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Next will be null when the input is cleared,\n\t\t * in which case the value should be 'auto'.\n\t\t */\n\t\tif ( ! next && currentValueForToggle === 'auto' ) {\n\t\t\tnext = 'auto';\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundPosition: nextPosition,\n\t\t\t\tbackgroundRepeat: nextRepeat,\n\t\t\t\tbackgroundSize: next,\n\t\t\t} )\n\t\t);\n\t};\n\n\tconst updateBackgroundPosition = ( next ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundPosition' ],\n\t\t\t\tcoordsToBackgroundPosition( next )\n\t\t\t)\n\t\t);\n\t};\n\n\tconst toggleIsRepeated = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundRepeat' ],\n\t\t\t\trepeatCheckedValue === true ? 'no-repeat' : 'repeat'\n\t\t\t)\n\t\t);\n\n\tconst toggleScrollWithPage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundAttachment' ],\n\t\t\t\tattachmentValue === 'fixed' ? 'scroll' : 'fixed'\n\t\t\t)\n\t\t);\n\n\t// Set a default background position for non-site-wide, uploaded images with a size of 'contain'.\n\tconst backgroundPositionValue =\n\t\t! positionValue && isUploadedImage && 'contain' === sizeValue\n\t\t\t? defaultValues?.backgroundPosition\n\t\t\t: positionValue;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tdefaultValues = {},\n} ) {\n\t/*\n\t * Resolve any inherited \"ref\" pointers.\n\t * Should the block editor need resolved, inherited values\n\t * across all controls, this could be abstracted into a hook,\n\t * e.g., useResolveGlobalStyle\n\t */\n\tconst { globalStyles, _links } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tglobalStyles: _settings[ globalStylesDataKey ],\n\t\t\t_links: _settings[ globalStylesLinksDataKey ],\n\t\t};\n\t}, [] );\n\tconst resolvedInheritedValue = useMemo( () => {\n\t\tconst resolvedValues = {\n\t\t\tbackground: {},\n\t\t};\n\n\t\tif ( ! inheritedValue?.background ) {\n\t\t\treturn inheritedValue;\n\t\t}\n\n\t\tObject.entries( inheritedValue?.background ).forEach(\n\t\t\t( [ key, backgroundValue ] ) => {\n\t\t\t\tresolvedValues.background[ key ] = getResolvedValue(\n\t\t\t\t\tbackgroundValue,\n\t\t\t\t\t{\n\t\t\t\t\t\tstyles: globalStyles,\n\t\t\t\t\t\t_links,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\treturn resolvedValues;\n\t}, [ globalStyles, _links, inheritedValue ] );\n\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\n\tconst { title, url } = value?.background?.backgroundImage || {\n\t\t...resolvedInheritedValue?.background?.backgroundImage,\n\t};\n\tconst hasImageValue =\n\t\thasBackgroundImageValue( value ) ||\n\t\thasBackgroundImageValue( resolvedInheritedValue );\n\n\tconst imageValue =\n\t\tvalue?.background?.backgroundImage ||\n\t\tinheritedValue?.background?.backgroundImage;\n\n\tconst shouldShowBackgroundImageControls =\n\t\thasImageValue &&\n\t\t'none' !== imageValue &&\n\t\t( settings?.background?.backgroundSize ||\n\t\t\tsettings?.background?.backgroundPosition ||\n\t\t\tsettings?.background?.backgroundRepeat );\n\n\tconst [ isDropDownOpen, setIsDropDownOpen ] = useState( false );\n\n\treturn (\n\t\t\n\t\t\t{ shouldShowBackgroundImageControls ? (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t {\n\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t} }\n\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useCallback, Platform } from '@wordpress/element';\n/**\n * Internal dependencies\n */\nimport BackgroundImageControl from '../background-image-control';\nimport { useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport { __ } from '@wordpress/i18n';\n\nconst DEFAULT_CONTROLS = {\n\tbackgroundImage: true,\n};\n\n/**\n * Checks site settings to see if the background panel may be used.\n * `settings.background.backgroundSize` exists also,\n * but can only be used if settings?.background?.backgroundImage is `true`.\n *\n * @param {Object} settings Site settings\n * @return {boolean} Whether site settings has activated background panel.\n */\nexport function useHasBackgroundPanel( settings ) {\n\treturn Platform.OS === 'web' && settings?.background?.backgroundImage;\n}\n\n/**\n * Checks if there is a current value in the background size block support\n * attributes. Background size values include background size as well\n * as background position.\n *\n * @param {Object} style Style attribute.\n * @return {boolean} Whether the block has a background size value set.\n */\nexport function hasBackgroundSizeValue( style ) {\n\treturn (\n\t\tstyle?.background?.backgroundPosition !== undefined ||\n\t\tstyle?.background?.backgroundSize !== undefined\n\t);\n}\n\n/**\n * Checks if there is a current value in the background image block support\n * attributes.\n *\n * @param {Object} style Style attribute.\n * @return {boolean} Whether the block has a background image value set.\n */\nexport function hasBackgroundImageValue( style ) {\n\treturn (\n\t\t!! style?.background?.backgroundImage?.id ||\n\t\t// Supports url() string values in theme.json.\n\t\t'string' === typeof style?.background?.backgroundImage ||\n\t\t!! style?.background?.backgroundImage?.url\n\t);\n}\n\nfunction BackgroundToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n\theaderLabel,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tas: Wrapper = BackgroundToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tdefaultValues = {},\n\theaderLabel = __( 'Background image' ),\n} ) {\n\tconst showBackgroundImageControl = useHasBackgroundPanel( settings );\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tbackground: {},\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t{ showBackgroundImageControl && (\n\t\t\t\t !! value?.background }\n\t\t\t\t\tlabel={ __( 'Image' ) }\n\t\t\t\t\tonDeselect={ resetBackground }\n\t\t\t\t\tisShownByDefault={ defaultControls.backgroundImage }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\nimport {\n\tdefault as StylesBackgroundPanel,\n\tuseHasBackgroundPanel,\n\thasBackgroundImageValue,\n} from '../components/global-styles/background-panel';\nimport { globalStylesDataKey } from '../store/private-keys';\n\nexport const BACKGROUND_SUPPORT_KEY = 'background';\n\n// Initial control values.\nexport const BACKGROUND_BLOCK_DEFAULT_VALUES = {\n\tbackgroundSize: 'cover',\n\tbackgroundPosition: '50% 50%', // used only when backgroundSize is 'contain'.\n};\n\n/**\n * Determine whether there is block support for background.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBackgroundSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BACKGROUND_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn (\n\t\t\t!! support?.backgroundImage ||\n\t\t\t!! support?.backgroundSize ||\n\t\t\t!! support?.backgroundRepeat\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function setBackgroundStyleDefaults( backgroundStyle ) {\n\tif ( ! backgroundStyle || ! backgroundStyle?.backgroundImage?.url ) {\n\t\treturn;\n\t}\n\n\tlet backgroundStylesWithDefaults;\n\n\t// Set block background defaults.\n\tif ( ! backgroundStyle?.backgroundSize ) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundSize: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize,\n\t\t};\n\t}\n\n\tif (\n\t\t'contain' === backgroundStyle?.backgroundSize &&\n\t\t! backgroundStyle?.backgroundPosition\n\t) {\n\t\tbackgroundStylesWithDefaults = {\n\t\t\tbackgroundPosition:\n\t\t\t\tBACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition,\n\t\t};\n\t}\n\treturn backgroundStylesWithDefaults;\n}\n\nfunction useBlockProps( { name, style } ) {\n\tif (\n\t\t! hasBackgroundSupport( name ) ||\n\t\t! style?.background?.backgroundImage\n\t) {\n\t\treturn;\n\t}\n\n\tconst backgroundStyles = setBackgroundStyleDefaults( style?.background );\n\n\tif ( ! backgroundStyles ) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\tstyle: {\n\t\t\t...backgroundStyles,\n\t\t},\n\t};\n}\n\n/**\n * Generates a CSS class name if an background image is set.\n *\n * @param {Object} style A block's style attribute.\n *\n * @return {string} CSS class name.\n */\nexport function getBackgroundImageClasses( style ) {\n\treturn hasBackgroundImageValue( style ) ? 'has-background' : '';\n}\n\nfunction BackgroundInspectorControl( { children } ) {\n\tconst resetAllFilter = useCallback( ( attributes ) => {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tstyle: {\n\t\t\t\t...attributes.style,\n\t\t\t\tbackground: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function BackgroundImagePanel( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\tsettings,\n} ) {\n\tconst { style, inheritedValue } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst _settings = getSettings();\n\t\t\treturn {\n\t\t\t\tstyle: getBlockAttributes( clientId )?.style,\n\t\t\t\t/*\n\t\t\t\t * To ensure we pass down the right inherited values:\n\t\t\t\t * @TODO 1. Pass inherited value down to all block style controls,\n\t\t\t\t * See: packages/block-editor/src/hooks/style.js\n\t\t\t\t * @TODO 2. Add support for block style variations,\n\t\t\t\t * See implementation: packages/block-editor/src/hooks/block-style-variation.js\n\t\t\t\t */\n\t\t\t\tinheritedValue:\n\t\t\t\t\t_settings[ globalStylesDataKey ]?.blocks?.[ name ],\n\t\t\t};\n\t\t},\n\t\t[ clientId, name ]\n\t);\n\n\tif (\n\t\t! useHasBackgroundPanel( settings ) ||\n\t\t! hasBackgroundSupport( name, 'backgroundImage' )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tconst updatedSettings = {\n\t\t...settings,\n\t\tbackground: {\n\t\t\t...settings.background,\n\t\t\tbackgroundSize:\n\t\t\t\tsettings?.background?.backgroundSize &&\n\t\t\t\thasBackgroundSupport( name, 'backgroundSize' ),\n\t\t},\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport: hasBackgroundSupport,\n};\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Filters registered block settings, extending attributes to include `lock`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.lock ?? {} ) ) {\n\t\treturn settings;\n\t}\n\t// Gracefully handle if settings.attributes is undefined.\n\tsettings.attributes = {\n\t\t...settings.attributes,\n\t\tlock: {\n\t\t\ttype: 'object',\n\t\t},\n\t};\n\n\treturn settings;\n}\n\naddFilter( 'blocks.registerBlockType', 'core/lock/addAttribute', addAttribute );\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { TextControl, ExternalLink } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * Regular expression matching invalid anchor characters for replacement.\n *\n * @type {RegExp}\n */\nconst ANCHOR_REGEX = /[\\s#]/g;\n\nconst ANCHOR_SCHEMA = {\n\ttype: 'string',\n\tsource: 'attribute',\n\tattribute: 'id',\n\tselector: '*',\n};\n\n/**\n * Filters registered block settings, extending attributes with anchor using ID\n * of the first node.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( 'type' in ( settings.attributes?.anchor ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'anchor' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tanchor: ANCHOR_SCHEMA,\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockEditAnchorControlPure( { anchor, setAttributes } ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst isWeb = Platform.OS === 'web';\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Enter a word or two — without spaces — to make a unique web address just for this block, called an “anchor”. Then, you’ll be able to link directly to this section of your page.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ isWeb && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{ ' ' }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ __( 'Learn more about anchors' ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvalue={ anchor || '' }\n\t\t\t\tplaceholder={ ! isWeb ? __( 'Add an anchor' ) : null }\n\t\t\t\tonChange={ ( nextValue ) => {\n\t\t\t\t\tnextValue = nextValue.replace( ANCHOR_REGEX, '-' );\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tanchor: nextValue,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\tautoComplete=\"off\"\n\t\t\t/>\n\t\t\n\t);\n}\n\nexport default {\n\taddSaveProps,\n\tedit: BlockEditAnchorControlPure,\n\tattributeKeys: [ 'anchor' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'anchor' );\n\t},\n};\n\n/**\n * Override props assigned to save component to inject anchor ID, if block\n * supports anchor. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif ( hasBlockSupport( blockType, 'anchor' ) ) {\n\t\textraProps.id = attributes.anchor === '' ? null : attributes.anchor;\n\t}\n\n\treturn extraProps;\n}\n\naddFilter( 'blocks.registerBlockType', 'core/anchor/attribute', addAttribute );\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\nconst ARIA_LABEL_SCHEMA = {\n\ttype: 'string',\n\tsource: 'attribute',\n\tattribute: 'aria-label',\n\tselector: '*',\n};\n\n/**\n * Filters registered block settings, extending attributes with ariaLabel using aria-label\n * of the first node.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( settings?.attributes?.ariaLabel?.type ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, 'ariaLabel' ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tariaLabel: ARIA_LABEL_SCHEMA,\n\t\t};\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject aria-label, if block\n * supports ariaLabel. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif ( hasBlockSupport( blockType, 'ariaLabel' ) ) {\n\t\textraProps[ 'aria-label' ] =\n\t\t\tattributes.ariaLabel === '' ? null : attributes.ariaLabel;\n\t}\n\n\treturn extraProps;\n}\n\nexport default {\n\taddSaveProps,\n\tattributeKeys: [ 'ariaLabel' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'ariaLabel' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/ariaLabel/attribute',\n\taddAttribute\n);\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { TextControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * Filters registered block settings, extending attributes to include `className`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( hasBlockSupport( settings, 'customClassName', true ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tclassName: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction CustomClassNameControlsPure( { className, setAttributes } ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tclassName: nextValue !== '' ? nextValue : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\thelp={ __( 'Separate multiple classes with spaces.' ) }\n\t\t\t/>\n\t\t\n\t);\n}\n\nexport default {\n\tedit: CustomClassNameControlsPure,\n\taddSaveProps,\n\tattributeKeys: [ 'className' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'customClassName', true );\n\t},\n};\n\n/**\n * Override props assigned to save component to inject the className, if block\n * supports customClassName. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif (\n\t\thasBlockSupport( blockType, 'customClassName', true ) &&\n\t\tattributes.className\n\t) {\n\t\textraProps.className = clsx(\n\t\t\textraProps.className,\n\t\t\tattributes.className\n\t\t);\n\t}\n\n\treturn extraProps;\n}\n\nexport function addTransforms( result, source, index, results ) {\n\tif ( ! hasBlockSupport( result.name, 'customClassName', true ) ) {\n\t\treturn result;\n\t}\n\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the class should not be kept.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\n\t// If we are transforming one block to multiple blocks or multiple blocks to one block,\n\t// we ignore the class during the transform.\n\tif (\n\t\t( results.length === 1 && source.length > 1 ) ||\n\t\t( results.length > 1 && source.length === 1 )\n\t) {\n\t\treturn result;\n\t}\n\n\t// If we are in presence of transform between one or more block in the source\n\t// that have one or more blocks in the result\n\t// we apply the class on source N to the result N,\n\t// if source N does not exists we do nothing.\n\tif ( source[ index ] ) {\n\t\tconst originClassName = source[ index ]?.attributes.className;\n\t\tif ( originClassName ) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tattributes: {\n\t\t\t\t\t...result.attributes,\n\t\t\t\t\tclassName: originClassName,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\treturn result;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-class-name/attribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/color/addTransforms',\n\taddTransforms\n);\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport, getBlockDefaultClassName } from '@wordpress/blocks';\n\n/**\n * Override props assigned to save component to inject generated className if\n * block supports it. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addGeneratedClassName( extraProps, blockType ) {\n\t// Adding the generated className.\n\tif ( hasBlockSupport( blockType, 'className', true ) ) {\n\t\tif ( typeof extraProps.className === 'string' ) {\n\t\t\t// We have some extra classes and want to add the default classname\n\t\t\t// We use uniq to prevent duplicate classnames.\n\n\t\t\textraProps.className = [\n\t\t\t\t...new Set( [\n\t\t\t\t\tgetBlockDefaultClassName( blockType.name ),\n\t\t\t\t\t...extraProps.className.split( ' ' ),\n\t\t\t\t] ),\n\t\t\t]\n\t\t\t\t.join( ' ' )\n\t\t\t\t.trim();\n\t\t} else {\n\t\t\t// There is no string in the className variable,\n\t\t\t// so we just dump the default name in there.\n\t\t\textraProps.className = getBlockDefaultClassName( blockType.name );\n\t\t}\n\t}\n\treturn extraProps;\n}\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/generated-class-name/save-props',\n\taddGeneratedClassName\n);\n","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,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)||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 j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","export default function(e,f){var a={white:\"#ffffff\",bisque:\"#ffe4c4\",blue:\"#0000ff\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",azure:\"#f0ffff\",whitesmoke:\"#f5f5f5\",papayawhip:\"#ffefd5\",plum:\"#dda0dd\",blanchedalmond:\"#ffebcd\",black:\"#000000\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",cornsilk:\"#fff8dc\",cornflowerblue:\"#6495ed\",burlywood:\"#deb887\",aquamarine:\"#7fffd4\",beige:\"#f5f5dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkkhaki:\"#bdb76b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",peachpuff:\"#ffdab9\",darkmagenta:\"#8b008b\",darkred:\"#8b0000\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkslateblue:\"#483d8b\",gray:\"#808080\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",wheat:\"#f5deb3\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",ghostwhite:\"#f8f8ff\",darkviolet:\"#9400d3\",magenta:\"#ff00ff\",green:\"#008000\",dodgerblue:\"#1e90ff\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",blueviolet:\"#8a2be2\",forestgreen:\"#228b22\",lawngreen:\"#7cfc00\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",fuchsia:\"#ff00ff\",brown:\"#a52a2a\",maroon:\"#800000\",mediumblue:\"#0000cd\",lightcoral:\"#f08080\",darkturquoise:\"#00ced1\",lightcyan:\"#e0ffff\",ivory:\"#fffff0\",lightyellow:\"#ffffe0\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",linen:\"#faf0e6\",mediumaquamarine:\"#66cdaa\",lemonchiffon:\"#fffacd\",lime:\"#00ff00\",khaki:\"#f0e68c\",mediumseagreen:\"#3cb371\",limegreen:\"#32cd32\",mediumspringgreen:\"#00fa9a\",lightskyblue:\"#87cefa\",lightblue:\"#add8e6\",midnightblue:\"#191970\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",mintcream:\"#f5fffa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",navajowhite:\"#ffdead\",navy:\"#000080\",mediumvioletred:\"#c71585\",powderblue:\"#b0e0e6\",palegoldenrod:\"#eee8aa\",oldlace:\"#fdf5e6\",paleturquoise:\"#afeeee\",mediumturquoise:\"#48d1cc\",mediumorchid:\"#ba55d3\",rebeccapurple:\"#663399\",lightsteelblue:\"#b0c4de\",mediumslateblue:\"#7b68ee\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",orchid:\"#da70d6\",mediumpurple:\"#9370db\",purple:\"#800080\",pink:\"#ffc0cb\",skyblue:\"#87ceeb\",springgreen:\"#00ff7f\",palegreen:\"#98fb98\",red:\"#ff0000\",yellow:\"#ffff00\",slateblue:\"#6a5acd\",lavenderblush:\"#fff0f5\",peru:\"#cd853f\",palevioletred:\"#db7093\",violet:\"#ee82ee\",teal:\"#008080\",slategray:\"#708090\",slategrey:\"#708090\",aliceblue:\"#f0f8ff\",darkseagreen:\"#8fbc8f\",darkolivegreen:\"#556b2f\",greenyellow:\"#adff2f\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",tomato:\"#ff6347\",silver:\"#c0c0c0\",sienna:\"#a0522d\",lavender:\"#e6e6fa\",lightgreen:\"#90ee90\",orange:\"#ffa500\",orangered:\"#ff4500\",steelblue:\"#4682b4\",royalblue:\"#4169e1\",turquoise:\"#40e0d0\",yellowgreen:\"#9acd32\",salmon:\"#fa8072\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",darksalmon:\"#e9967a\",lightgoldenrodyellow:\"#fafad2\",snow:\"#fffafa\",lightgrey:\"#d3d3d3\",lightgray:\"#d3d3d3\",dimgray:\"#696969\",dimgrey:\"#696969\",olivedrab:\"#6b8e23\",olive:\"#808000\"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return\"transparent\";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b=\"black\";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));ud?(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}}\n","/**\n * External dependencies\n */\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\nimport a11yPlugin from 'colord/plugins/a11y';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nextend( [ namesPlugin, a11yPlugin ] );\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Provided an array of color objects as set by the theme or by the editor defaults,\n * and the values of the defined color or custom color returns a color object describing the color.\n *\n * @param {Array} colors Array of color objects as set by the theme or by the editor defaults.\n * @param {?string} definedColor A string containing the color slug.\n * @param {?string} customColor A string containing the customColor value.\n *\n * @return {?Object} If definedColor is passed and the name is found in colors,\n * the color object exactly as set by the theme or editor defaults is returned.\n * Otherwise, an object that just sets the color is defined.\n */\nexport const getColorObjectByAttributeValues = (\n\tcolors,\n\tdefinedColor,\n\tcustomColor\n) => {\n\tif ( definedColor ) {\n\t\tconst colorObj = colors?.find(\n\t\t\t( color ) => color.slug === definedColor\n\t\t);\n\n\t\tif ( colorObj ) {\n\t\t\treturn colorObj;\n\t\t}\n\t}\n\treturn {\n\t\tcolor: customColor,\n\t};\n};\n\n/**\n * Provided an array of color objects as set by the theme or by the editor defaults, and a color value returns the color object matching that value or undefined.\n *\n * @param {Array} colors Array of color objects as set by the theme or by the editor defaults.\n * @param {?string} colorValue A string containing the color value.\n *\n * @return {?Object} Color object included in the colors array whose color property equals colorValue.\n * Returns undefined if no color object matches this requirement.\n */\nexport const getColorObjectByColorValue = ( colors, colorValue ) => {\n\treturn colors?.find( ( color ) => color.color === colorValue );\n};\n\n/**\n * Returns a class based on the context a color is being used and its slug.\n *\n * @param {string} colorContextName Context/place where color is being used e.g: background, text etc...\n * @param {string} colorSlug Slug of the color.\n *\n * @return {?string} String with the class corresponding to the color in the provided context.\n * Returns undefined if either colorContextName or colorSlug are not provided.\n */\nexport function getColorClassName( colorContextName, colorSlug ) {\n\tif ( ! colorContextName || ! colorSlug ) {\n\t\treturn undefined;\n\t}\n\n\treturn `has-${ kebabCase( colorSlug ) }-${ colorContextName }`;\n}\n\n/**\n * Given an array of color objects and a color value returns the color value of the most readable color in the array.\n *\n * @param {Array} colors Array of color objects as set by the theme or by the editor defaults.\n * @param {?string} colorValue A string containing the color value.\n *\n * @return {string} String with the color value of the most readable color.\n */\nexport function getMostReadableColor( colors, colorValue ) {\n\tconst colordColor = colord( colorValue );\n\tconst getColorContrast = ( { color } ) => colordColor.contrast( color );\n\n\tconst maxContrast = Math.max( ...colors.map( getColorContrast ) );\n\treturn colors.find( ( color ) => getColorContrast( color ) === maxContrast )\n\t\t.color;\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\n/**\n * Retrieves color and gradient related settings.\n *\n * The arrays for colors and gradients are made up of color palettes from each\n * origin i.e. \"Core\", \"Theme\", and \"User\".\n *\n * @return {Object} Color and gradient related settings.\n */\nexport default function useMultipleOriginColorsAndGradients() {\n\tconst [\n\t\tenableCustomColors,\n\t\tcustomColors,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tshouldDisplayDefaultColors,\n\t\tenableCustomGradients,\n\t\tcustomGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t\tshouldDisplayDefaultGradients,\n\t] = useSettings(\n\t\t'color.custom',\n\t\t'color.palette.custom',\n\t\t'color.palette.theme',\n\t\t'color.palette.default',\n\t\t'color.defaultPalette',\n\t\t'color.customGradient',\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default',\n\t\t'color.defaultGradients'\n\t);\n\n\tconst colorGradientSettings = {\n\t\tdisableCustomColors: ! enableCustomColors,\n\t\tdisableCustomGradients: ! enableCustomGradients,\n\t};\n\n\tcolorGradientSettings.colors = useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeColors && themeColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: themeColors,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultColors &&\n\t\t\tdefaultColors &&\n\t\t\tdefaultColors.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tcolors: defaultColors,\n\t\t\t} );\n\t\t}\n\t\tif ( customColors && customColors.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tcolors: customColors,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomColors,\n\t\tthemeColors,\n\t\tdefaultColors,\n\t\tshouldDisplayDefaultColors,\n\t] );\n\n\tcolorGradientSettings.gradients = useMemo( () => {\n\t\tconst result = [];\n\t\tif ( themeGradients && themeGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Theme',\n\t\t\t\t\t'Indicates this palette comes from the theme.'\n\t\t\t\t),\n\t\t\t\tgradients: themeGradients,\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tshouldDisplayDefaultGradients &&\n\t\t\tdefaultGradients &&\n\t\t\tdefaultGradients.length\n\t\t) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Default',\n\t\t\t\t\t'Indicates this palette comes from WordPress.'\n\t\t\t\t),\n\t\t\t\tgradients: defaultGradients,\n\t\t\t} );\n\t\t}\n\t\tif ( customGradients && customGradients.length ) {\n\t\t\tresult.push( {\n\t\t\t\tname: _x(\n\t\t\t\t\t'Custom',\n\t\t\t\t\t'Indicates this palette is created by the user.'\n\t\t\t\t),\n\t\t\t\tgradients: customGradients,\n\t\t\t} );\n\t\t}\n\t\treturn result;\n\t}, [\n\t\tcustomGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t\tshouldDisplayDefaultGradients,\n\t] );\n\n\tcolorGradientSettings.hasColorsOrGradients =\n\t\t!! colorGradientSettings.colors.length ||\n\t\t!! colorGradientSettings.gradients.length;\n\n\treturn colorGradientSettings;\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue } from '@wordpress/components';\n\n/**\n * Gets the (non-undefined) item with the highest occurrence within an array\n * Based in part on: https://stackoverflow.com/a/20762713\n *\n * Undefined values are always sorted to the end by `sort`, so this function\n * returns the first element, to always prioritize real values over undefined\n * values.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#description\n *\n * @param {Array} inputArray Array of items to check.\n * @return {any} The item with the most occurrences.\n */\nexport function mode( inputArray ) {\n\tconst arr = [ ...inputArray ];\n\treturn arr\n\t\t.sort(\n\t\t\t( a, b ) =>\n\t\t\t\tinputArray.filter( ( v ) => v === b ).length -\n\t\t\t\tinputArray.filter( ( v ) => v === a ).length\n\t\t)\n\t\t.shift();\n}\n\n/**\n * Returns the most common CSS unit from the current CSS unit selections.\n *\n * - If a single flat border radius is set, its unit will be used\n * - If individual corner selections, the most common of those will be used\n * - Failing any unit selections a default of 'px' is returned.\n *\n * @param {Object} selectedUnits Unit selections for flat radius & each corner.\n * @return {string} Most common CSS unit from current selections. Default: `px`.\n */\nexport function getAllUnit( selectedUnits = {} ) {\n\tconst { flat, ...cornerUnits } = selectedUnits;\n\treturn (\n\t\tflat || mode( Object.values( cornerUnits ).filter( Boolean ) ) || 'px'\n\t);\n}\n\n/**\n * Gets the 'all' input value and unit from values data.\n *\n * @param {Object|string} values Radius values.\n * @return {string} A value + unit for the 'all' input.\n */\nexport function getAllValue( values = {} ) {\n\t/**\n\t * Border radius support was originally a single pixel value.\n\t *\n\t * To maintain backwards compatibility treat this case as the all value.\n\t */\n\tif ( typeof values === 'string' ) {\n\t\treturn values;\n\t}\n\n\tconst parsedQuantitiesAndUnits = Object.values( values ).map( ( value ) =>\n\t\tparseQuantityAndUnitFromRawValue( value )\n\t);\n\n\tconst allValues = parsedQuantitiesAndUnits.map(\n\t\t( value ) => value[ 0 ] ?? ''\n\t);\n\tconst allUnits = parsedQuantitiesAndUnits.map( ( value ) => value[ 1 ] );\n\n\tconst value = allValues.every( ( v ) => v === allValues[ 0 ] )\n\t\t? allValues[ 0 ]\n\t\t: '';\n\tconst unit = mode( allUnits );\n\n\tconst allValue = value === 0 || value ? `${ value }${ unit }` : undefined;\n\n\treturn allValue;\n}\n\n/**\n * Checks to determine if values are mixed.\n *\n * @param {Object} values Radius values.\n * @return {boolean} Whether values are mixed.\n */\nexport function hasMixedValues( values = {} ) {\n\tconst allValue = getAllValue( values );\n\tconst isMixed =\n\t\ttypeof values === 'string' ? false : isNaN( parseFloat( allValue ) );\n\n\treturn isMixed;\n}\n\n/**\n * Checks to determine if values are defined.\n *\n * @param {Object} values Radius values.\n * @return {boolean} Whether values are mixed.\n */\nexport function hasDefinedValues( values ) {\n\tif ( ! values ) {\n\t\treturn false;\n\t}\n\n\t// A string value represents a shorthand value.\n\tif ( typeof values === 'string' ) {\n\t\treturn true;\n\t}\n\n\t// An object represents longhand border radius values, if any are set\n\t// flag values as being defined.\n\tconst filteredValues = Object.values( values ).filter( ( value ) => {\n\t\treturn !! value || value === 0;\n\t} );\n\n\treturn !! filteredValues.length;\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalUnitControl as UnitControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetAllValue,\n\tgetAllUnit,\n\thasMixedValues,\n\thasDefinedValues,\n} from './utils';\n\nexport default function AllInputControl( {\n\tonChange,\n\tselectedUnits,\n\tsetSelectedUnits,\n\tvalues,\n\t...props\n} ) {\n\tlet allValue = getAllValue( values );\n\n\tif ( allValue === undefined ) {\n\t\t// If we don't have any value set the unit to any current selection\n\t\t// or the most common unit from the individual radii values.\n\t\tallValue = getAllUnit( selectedUnits );\n\t}\n\n\tconst hasValues = hasDefinedValues( values );\n\tconst isMixed = hasValues && hasMixedValues( values );\n\tconst allPlaceholder = isMixed ? __( 'Mixed' ) : null;\n\n\t// Filter out CSS-unit-only values to prevent invalid styles.\n\tconst handleOnChange = ( next ) => {\n\t\tconst isNumeric = ! isNaN( parseFloat( next ) );\n\t\tconst nextValue = isNumeric ? next : undefined;\n\t\tonChange( nextValue );\n\t};\n\n\t// Store current unit selection for use as fallback for individual\n\t// radii controls.\n\tconst handleOnUnitChange = ( unit ) => {\n\t\tsetSelectedUnits( {\n\t\t\ttopLeft: unit,\n\t\t\ttopRight: unit,\n\t\t\tbottomLeft: unit,\n\t\t\tbottomRight: unit,\n\t\t} );\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalUnitControl as UnitControl,\n\tTooltip,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nconst CORNERS = {\n\ttopLeft: __( 'Top left' ),\n\ttopRight: __( 'Top right' ),\n\tbottomLeft: __( 'Bottom left' ),\n\tbottomRight: __( 'Bottom right' ),\n};\n\nexport default function BoxInputControls( {\n\tonChange,\n\tselectedUnits,\n\tsetSelectedUnits,\n\tvalues: valuesProp,\n\t...props\n} ) {\n\tconst createHandleOnChange = ( corner ) => ( next ) => {\n\t\tif ( ! onChange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Filter out CSS-unit-only values to prevent invalid styles.\n\t\tconst isNumeric = ! isNaN( parseFloat( next ) );\n\t\tconst nextValue = isNumeric ? next : undefined;\n\n\t\tonChange( {\n\t\t\t...values,\n\t\t\t[ corner ]: nextValue,\n\t\t} );\n\t};\n\n\tconst createHandleOnUnitChange = ( side ) => ( next ) => {\n\t\tconst newUnits = { ...selectedUnits };\n\t\tnewUnits[ side ] = next;\n\t\tsetSelectedUnits( newUnits );\n\t};\n\n\t// For shorthand style & backwards compatibility, handle flat string value.\n\tconst values =\n\t\ttypeof valuesProp !== 'string'\n\t\t\t? valuesProp\n\t\t\t: {\n\t\t\t\t\ttopLeft: valuesProp,\n\t\t\t\t\ttopRight: valuesProp,\n\t\t\t\t\tbottomLeft: valuesProp,\n\t\t\t\t\tbottomRight: valuesProp,\n\t\t\t };\n\n\t// Controls are wrapped in tooltips as visible labels aren't desired here.\n\t// Tooltip rendering also requires the UnitControl to be wrapped. See:\n\t// https://github.com/WordPress/gutenberg/pull/24966#issuecomment-685875026\n\treturn (\n\t\t
    \n\t\t\t{ Object.entries( CORNERS ).map( ( [ corner, label ] ) => {\n\t\t\t\tconst [ parsedQuantity, parsedUnit ] =\n\t\t\t\t\tparseQuantityAndUnitFromRawValue( values[ corner ] );\n\n\t\t\t\tconst computedUnit = values[ corner ]\n\t\t\t\t\t? parsedUnit\n\t\t\t\t\t: selectedUnits[ corner ] || selectedUnits.flat;\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t);\n\t\t\t} ) }\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst link = (\n\t\n\t\t\n\t\n);\n\nexport default link;\n","/**\n * WordPress dependencies\n */\nimport { Button, Tooltip } from '@wordpress/components';\nimport { link, linkOff } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport default function LinkedButton( { isLinked, ...props } ) {\n\tconst label = isLinked ? __( 'Unlink radii' ) : __( 'Link radii' );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tBaseControl,\n\tRangeControl,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport AllInputControl from './all-input-control';\nimport InputControls from './input-controls';\nimport LinkedButton from './linked-button';\nimport { useSettings } from '../use-settings';\nimport {\n\tgetAllValue,\n\tgetAllUnit,\n\thasDefinedValues,\n\thasMixedValues,\n} from './utils';\n\nconst DEFAULT_VALUES = {\n\ttopLeft: undefined,\n\ttopRight: undefined,\n\tbottomLeft: undefined,\n\tbottomRight: undefined,\n};\nconst MIN_BORDER_RADIUS_VALUE = 0;\nconst MAX_BORDER_RADIUS_VALUES = {\n\tpx: 100,\n\tem: 20,\n\trem: 20,\n};\n\n/**\n * Control to display border radius options.\n *\n * @param {Object} props Component props.\n * @param {Function} props.onChange Callback to handle onChange.\n * @param {Object} props.values Border radius values.\n *\n * @return {Element} Custom border radius control.\n */\nexport default function BorderRadiusControl( { onChange, values } ) {\n\tconst [ isLinked, setIsLinked ] = useState(\n\t\t! hasDefinedValues( values ) || ! hasMixedValues( values )\n\t);\n\n\t// Tracking selected units via internal state allows filtering of CSS unit\n\t// only values from being saved while maintaining preexisting unit selection\n\t// behaviour. Filtering CSS unit only values prevents invalid style values.\n\tconst [ selectedUnits, setSelectedUnits ] = useState( {\n\t\tflat:\n\t\t\ttypeof values === 'string'\n\t\t\t\t? parseQuantityAndUnitFromRawValue( values )[ 1 ]\n\t\t\t\t: undefined,\n\t\ttopLeft: parseQuantityAndUnitFromRawValue( values?.topLeft )[ 1 ],\n\t\ttopRight: parseQuantityAndUnitFromRawValue( values?.topRight )[ 1 ],\n\t\tbottomLeft: parseQuantityAndUnitFromRawValue( values?.bottomLeft )[ 1 ],\n\t\tbottomRight: parseQuantityAndUnitFromRawValue(\n\t\t\tvalues?.bottomRight\n\t\t)[ 1 ],\n\t} );\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ 'px', 'em', 'rem' ],\n\t} );\n\n\tconst unit = getAllUnit( selectedUnits );\n\tconst unitConfig = units && units.find( ( item ) => item.value === unit );\n\tconst step = unitConfig?.step || 1;\n\n\tconst [ allValue ] = parseQuantityAndUnitFromRawValue(\n\t\tgetAllValue( values )\n\t);\n\n\tconst toggleLinked = () => setIsLinked( ! isLinked );\n\n\tconst handleSliderChange = ( next ) => {\n\t\tonChange( next !== undefined ? `${ next }${ unit }` : undefined );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Radius' ) }\n\t\t\t\n\t\t\t
    \n\t\t\t\t{ isLinked ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst check = (\n\t\n\t\t\n\t\n);\n\nexport default check;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst shadow = (\n\t\n\t\t\n\t\n);\n\nexport default shadow;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalHStack as HStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n\tFlexItem,\n\tDropdown,\n\tComposite,\n} from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { shadow as shadowIcon, Icon, check } from '@wordpress/icons';\n\n/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nexport function ShadowPopoverContainer( { shadow, onShadowChange, settings } ) {\n\tconst shadows = useShadowPresets( settings );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Drop shadow' ) }\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t onShadowChange( undefined ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Clear' ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n}\n\nexport function ShadowPresets( { presets, activeShadow, onSelect } ) {\n\treturn ! presets ? null : (\n\t\t\n\t\t\t{ presets.map( ( { name, slug, shadow } ) => (\n\t\t\t\t\n\t\t\t\t\t\tonSelect( shadow === activeShadow ? undefined : shadow )\n\t\t\t\t\t}\n\t\t\t\t\tshadow={ shadow }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport function ShadowIndicator( { type, label, isActive, onSelect, shadow } ) {\n\treturn (\n\t\t\n\t\t\t\t\t{ isActive && }\n\t\t\t\t\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport function ShadowPopover( { shadow, onShadowChange, settings } ) {\n\tconst popoverProps = {\n\t\tplacement: 'left-start',\n\t\toffset: 36,\n\t\tshift: true,\n\t};\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction renderShadowToggle() {\n\treturn ( { onToggle, isOpen } ) => {\n\t\tconst toggleProps = {\n\t\t\tonClick: onToggle,\n\t\t\tclassName: clsx( { 'is-open': isOpen } ),\n\t\t\t'aria-expanded': isOpen,\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ __( 'Drop shadow' ) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n}\n\nexport function useShadowPresets( settings ) {\n\treturn useMemo( () => {\n\t\tif ( ! settings?.shadow ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tconst defaultPresetsEnabled = settings?.shadow?.defaultPresets;\n\t\tconst {\n\t\t\tdefault: defaultShadows,\n\t\t\ttheme: themeShadows,\n\t\t\tcustom: customShadows,\n\t\t} = settings?.shadow?.presets ?? {};\n\t\tconst unsetShadow = {\n\t\t\tname: __( 'Unset' ),\n\t\t\tslug: 'unset',\n\t\t\tshadow: 'none',\n\t\t};\n\n\t\tconst shadowPresets = [\n\t\t\t...( ( defaultPresetsEnabled && defaultShadows ) || EMPTY_ARRAY ),\n\t\t\t...( themeShadows || EMPTY_ARRAY ),\n\t\t\t...( customShadows || EMPTY_ARRAY ),\n\t\t];\n\t\tif ( shadowPresets.length ) {\n\t\t\tshadowPresets.unshift( unsetShadow );\n\t\t}\n\n\t\treturn shadowPresets;\n\t}, [ settings ] );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalBorderBoxControl as BorderBoxControl,\n\t__experimentalHasSplitBorders as hasSplitBorders,\n\t__experimentalIsDefinedBorder as isDefinedBorder,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalItemGroup as ItemGroup,\n\tBaseControl,\n} from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BorderRadiusControl from '../border-radius-control';\nimport { useColorsPerOrigin } from './hooks';\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport { useBorderPanelLabel } from '../../hooks/border';\nimport { ShadowPopover, useShadowPresets } from './shadow-panel-components';\n\nexport function useHasBorderPanel( settings ) {\n\tconst controls = Object.values( useHasBorderPanelControls( settings ) );\n\treturn controls.some( Boolean );\n}\n\nexport function useHasBorderPanelControls( settings ) {\n\tconst controls = {\n\t\thasBorderColor: useHasBorderColorControl( settings ),\n\t\thasBorderRadius: useHasBorderRadiusControl( settings ),\n\t\thasBorderStyle: useHasBorderStyleControl( settings ),\n\t\thasBorderWidth: useHasBorderWidthControl( settings ),\n\t\thasShadow: useHasShadowControl( settings ),\n\t};\n\n\treturn controls;\n}\n\nfunction useHasBorderColorControl( settings ) {\n\treturn settings?.border?.color;\n}\n\nfunction useHasBorderRadiusControl( settings ) {\n\treturn settings?.border?.radius;\n}\n\nfunction useHasBorderStyleControl( settings ) {\n\treturn settings?.border?.style;\n}\n\nfunction useHasBorderWidthControl( settings ) {\n\treturn settings?.border?.width;\n}\n\nfunction useHasShadowControl( settings ) {\n\tconst shadows = useShadowPresets( settings );\n\treturn !! settings?.shadow && shadows.length > 0;\n}\n\nfunction BorderToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n\tlabel,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tradius: true,\n\tcolor: true,\n\twidth: true,\n\tshadow: true,\n};\n\nexport default function BorderPanel( {\n\tas: Wrapper = BorderToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tname,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst decodeValue = useCallback(\n\t\t( rawValue ) => getValueFromVariable( { settings }, '', rawValue ),\n\t\t[ settings ]\n\t);\n\tconst encodeColorValue = ( colorValue ) => {\n\t\tconst allColors = colors.flatMap(\n\t\t\t( { colors: originColors } ) => originColors\n\t\t);\n\t\tconst colorObject = allColors.find(\n\t\t\t( { color } ) => color === colorValue\n\t\t);\n\t\treturn colorObject\n\t\t\t? 'var:preset|color|' + colorObject.slug\n\t\t\t: colorValue;\n\t};\n\tconst border = useMemo( () => {\n\t\tif ( hasSplitBorders( inheritedValue?.border ) ) {\n\t\t\tconst borderValue = { ...inheritedValue?.border };\n\t\t\t[ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {\n\t\t\t\tborderValue[ side ] = {\n\t\t\t\t\t...borderValue[ side ],\n\t\t\t\t\tcolor: decodeValue( borderValue[ side ]?.color ),\n\t\t\t\t};\n\t\t\t} );\n\t\t\treturn borderValue;\n\t\t}\n\t\treturn {\n\t\t\t...inheritedValue?.border,\n\t\t\tcolor: inheritedValue?.border?.color\n\t\t\t\t? decodeValue( inheritedValue?.border?.color )\n\t\t\t\t: undefined,\n\t\t};\n\t}, [ inheritedValue?.border, decodeValue ] );\n\tconst setBorder = ( newBorder ) =>\n\t\tonChange( { ...value, border: newBorder } );\n\tconst showBorderColor = useHasBorderColorControl( settings );\n\tconst showBorderStyle = useHasBorderStyleControl( settings );\n\tconst showBorderWidth = useHasBorderWidthControl( settings );\n\n\t// Border radius.\n\tconst showBorderRadius = useHasBorderRadiusControl( settings );\n\tconst borderRadiusValues = decodeValue( border?.radius );\n\tconst setBorderRadius = ( newBorderRadius ) =>\n\t\tsetBorder( { ...border, radius: newBorderRadius } );\n\tconst hasBorderRadius = () => {\n\t\tconst borderValues = value?.border?.radius;\n\t\tif ( typeof borderValues === 'object' ) {\n\t\t\treturn Object.entries( borderValues ).some( Boolean );\n\t\t}\n\t\treturn !! borderValues;\n\t};\n\tconst hasShadowControl = useHasShadowControl( settings );\n\n\t// Shadow\n\tconst shadow = decodeValue( inheritedValue?.shadow );\n\tconst shadowPresets = settings?.shadow?.presets ?? {};\n\tconst mergedShadowPresets =\n\t\tshadowPresets.custom ??\n\t\tshadowPresets.theme ??\n\t\tshadowPresets.default ??\n\t\t[];\n\tconst setShadow = ( newValue ) => {\n\t\tconst slug = mergedShadowPresets?.find(\n\t\t\t( { shadow: shadowName } ) => shadowName === newValue\n\t\t)?.slug;\n\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'shadow' ],\n\t\t\t\tslug ? `var:preset|shadow|${ slug }` : newValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasShadow = () => !! value?.shadow;\n\tconst resetShadow = () => setShadow( undefined );\n\n\tconst resetBorder = () => {\n\t\tif ( hasBorderRadius() ) {\n\t\t\treturn setBorder( { radius: value?.border?.radius } );\n\t\t}\n\n\t\tsetBorder( undefined );\n\t};\n\n\tconst onBorderChange = ( newBorder ) => {\n\t\t// Ensure we have a visible border style when a border width or\n\t\t// color is being selected.\n\t\tconst updatedBorder = { ...newBorder };\n\n\t\tif ( hasSplitBorders( updatedBorder ) ) {\n\t\t\t[ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {\n\t\t\t\tif ( updatedBorder[ side ] ) {\n\t\t\t\t\tupdatedBorder[ side ] = {\n\t\t\t\t\t\t...updatedBorder[ side ],\n\t\t\t\t\t\tcolor: encodeColorValue( updatedBorder[ side ]?.color ),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} );\n\t\t} else if ( updatedBorder ) {\n\t\t\tupdatedBorder.color = encodeColorValue( updatedBorder.color );\n\t\t}\n\n\t\t// As radius is maintained separately to color, style, and width\n\t\t// maintain its value. Undefined values here will be cleaned when\n\t\t// global styles are saved.\n\t\tsetBorder( { radius: border?.radius, ...updatedBorder } );\n\t};\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tborder: undefined,\n\t\t\tshadow: undefined,\n\t\t};\n\t}, [] );\n\n\tconst showBorderByDefault =\n\t\tdefaultControls?.color || defaultControls?.width;\n\n\tconst hasBorderControl =\n\t\tshowBorderColor ||\n\t\tshowBorderStyle ||\n\t\tshowBorderWidth ||\n\t\tshowBorderRadius;\n\n\tconst label = useBorderPanelLabel( {\n\t\tblockName: name,\n\t\thasShadowControl,\n\t\thasBorderControl,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t{ ( showBorderWidth || showBorderColor ) && (\n\t\t\t\t isDefinedBorder( value?.border ) }\n\t\t\t\t\tlabel={ __( 'Border' ) }\n\t\t\t\t\tonDeselect={ () => resetBorder() }\n\t\t\t\t\tisShownByDefault={ showBorderByDefault }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showBorderRadius && (\n\t\t\t\t setBorderRadius( undefined ) }\n\t\t\t\t\tisShownByDefault={ defaultControls.radius }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetBorderRadius( newValue || undefined );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasShadowControl && (\n\t\t\t\t\n\t\t\t\t\t{ hasBorderControl ? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Shadow' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t) : null }\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { hasBlockSupport, getBlockSupport } from '@wordpress/blocks';\nimport { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';\nimport { Platform, useCallback, useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { getColorClassName } from '../components/colors';\nimport InspectorControls from '../components/inspector-controls';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\nimport {\n\tcleanEmptyObject,\n\tshouldSkipSerialization,\n\tuseBlockSettings,\n} from './utils';\nimport {\n\tuseHasBorderPanel,\n\tuseHasBorderPanelControls,\n\tBorderPanel as StylesBorderPanel,\n} from '../components/global-styles';\nimport { store as blockEditorStore } from '../store';\nimport { __ } from '@wordpress/i18n';\n\nexport const BORDER_SUPPORT_KEY = '__experimentalBorder';\nexport const SHADOW_SUPPORT_KEY = 'shadow';\n\nconst getColorByProperty = ( colors, property, value ) => {\n\tlet matchedColor;\n\n\tcolors.some( ( origin ) =>\n\t\torigin.colors.some( ( color ) => {\n\t\t\tif ( color[ property ] === value ) {\n\t\t\t\tmatchedColor = color;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} )\n\t);\n\n\treturn matchedColor;\n};\n\nexport const getMultiOriginColor = ( { colors, namedColor, customColor } ) => {\n\t// Search each origin (default, theme, or user) for matching color by name.\n\tif ( namedColor ) {\n\t\tconst colorObject = getColorByProperty( colors, 'slug', namedColor );\n\t\tif ( colorObject ) {\n\t\t\treturn colorObject;\n\t\t}\n\t}\n\n\t// Skip if no custom color or matching named color.\n\tif ( ! customColor ) {\n\t\treturn { color: undefined };\n\t}\n\n\t// Attempt to find color via custom color value or build new object.\n\tconst colorObject = getColorByProperty( colors, 'color', customColor );\n\treturn colorObject ? colorObject : { color: customColor };\n};\n\nfunction getColorSlugFromVariable( value ) {\n\tconst namedColor = /var:preset\\|color\\|(.+)/.exec( value );\n\tif ( namedColor && namedColor[ 1 ] ) {\n\t\treturn namedColor[ 1 ];\n\t}\n\treturn null;\n}\n\nfunction styleToAttributes( style ) {\n\tif ( hasSplitBorders( style?.border ) ) {\n\t\treturn {\n\t\t\tstyle,\n\t\t\tborderColor: undefined,\n\t\t};\n\t}\n\n\tconst borderColorValue = style?.border?.color;\n\tconst borderColorSlug = borderColorValue?.startsWith( 'var:preset|color|' )\n\t\t? borderColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.border = {\n\t\t...updatedStyle.border,\n\t\tcolor: borderColorSlug ? undefined : borderColorValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tborderColor: borderColorSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\tif ( hasSplitBorders( attributes.style?.border ) ) {\n\t\treturn attributes.style;\n\t}\n\treturn {\n\t\t...attributes.style,\n\t\tborder: {\n\t\t\t...attributes.style?.border,\n\t\t\tcolor: attributes.borderColor\n\t\t\t\t? 'var:preset|color|' + attributes.borderColor\n\t\t\t\t: attributes.style?.border?.color,\n\t\t},\n\t};\n}\n\nfunction BordersInspectorControl( { label, children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function BorderPanel( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasBorderPanel( settings );\n\tfunction selector( select ) {\n\t\tconst { style, borderColor } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, borderColor };\n\t}\n\tconst { style, borderColor } = useSelect( selector, [ clientId ] );\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( { style, borderColor } );\n\t}, [ style, borderColor ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = {\n\t\t...getBlockSupport( name, [\n\t\t\tBORDER_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t\t...getBlockSupport( name, [\n\t\t\tSHADOW_SUPPORT_KEY,\n\t\t\t'__experimentalDefaultControls',\n\t\t] ),\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Determine whether there is block support for shadow properties.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasShadowSupport( blockName ) {\n\treturn hasBlockSupport( blockName, SHADOW_SUPPORT_KEY );\n}\n\nexport function useBorderPanelLabel( {\n\tblockName,\n\thasBorderControl,\n\thasShadowControl,\n} = {} ) {\n\tconst settings = useBlockSettings( blockName );\n\tconst controls = useHasBorderPanelControls( settings );\n\n\tif ( ! hasBorderControl && ! hasShadowControl && blockName ) {\n\t\thasBorderControl =\n\t\t\tcontrols?.hasBorderColor ||\n\t\t\tcontrols?.hasBorderStyle ||\n\t\t\tcontrols?.hasBorderWidth ||\n\t\t\tcontrols?.hasBorderRadius;\n\t\thasShadowControl = controls?.hasShadow;\n\t}\n\n\tif ( hasBorderControl && hasShadowControl ) {\n\t\treturn __( 'Border & Shadow' );\n\t}\n\n\tif ( hasShadowControl ) {\n\t\treturn __( 'Shadow' );\n\t}\n\n\treturn __( 'Border' );\n}\n\n/**\n * Returns a new style object where the specified border attribute has been\n * removed.\n *\n * @param {Object} style Styles from block attributes.\n * @param {string} attribute The border style attribute to clear.\n *\n * @return {Object} Style object with the specified attribute removed.\n */\nexport function removeBorderAttribute( style, attribute ) {\n\treturn cleanEmptyObject( {\n\t\t...style,\n\t\tborder: {\n\t\t\t...style?.border,\n\t\t\t[ attribute ]: undefined,\n\t\t},\n\t} );\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * `borderColor` if needed.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Updated block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBorderSupport( settings, 'color' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify default value if needed.\n\tif ( settings.attributes.borderColor ) {\n\t\treturn settings;\n\t}\n\n\t// Add new borderColor attribute to block settings.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tborderColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Override props assigned to save component to inject border color.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type definition.\n * @param {Object} attributes Block's attributes.\n *\n * @return {Object} Filtered props to apply to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasBorderSupport( blockNameOrType, 'color' ) ||\n\t\tshouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst borderClasses = getBorderClasses( attributes );\n\tconst newClassName = clsx( props.className, borderClasses );\n\n\t// If we are clearing the last of the previous classes in `className`\n\t// set it to `undefined` to avoid rendering empty DOM attributes.\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Generates a CSS class name consisting of all the applicable border color\n * classes given the current block attributes.\n *\n * @param {Object} attributes Block's attributes.\n *\n * @return {string} CSS class name.\n */\nexport function getBorderClasses( attributes ) {\n\tconst { borderColor, style } = attributes;\n\tconst borderColorClass = getColorClassName( 'border-color', borderColor );\n\n\treturn clsx( {\n\t\t'has-border-color': borderColor || style?.border?.color,\n\t\t[ borderColorClass ]: !! borderColorClass,\n\t} );\n}\n\nfunction useBlockProps( { name, borderColor, style } ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\n\tif (\n\t\t! hasBorderSupport( name, 'color' ) ||\n\t\tshouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst { color: borderColorValue } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: borderColor,\n\t} );\n\tconst { color: borderTopColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.top?.color ),\n\t} );\n\tconst { color: borderRightColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.right?.color ),\n\t} );\n\n\tconst { color: borderBottomColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),\n\t} );\n\tconst { color: borderLeftColor } = getMultiOriginColor( {\n\t\tcolors,\n\t\tnamedColor: getColorSlugFromVariable( style?.border?.left?.color ),\n\t} );\n\n\tconst extraStyles = {\n\t\tborderTopColor: borderTopColor || borderColorValue,\n\t\tborderRightColor: borderRightColor || borderColorValue,\n\t\tborderBottomColor: borderBottomColor || borderColorValue,\n\t\tborderLeftColor: borderLeftColor || borderColorValue,\n\t};\n\n\treturn addSaveProps(\n\t\t{ style: cleanEmptyObject( extraStyles ) || {} },\n\t\tname,\n\t\t{ borderColor, style }\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'borderColor', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBorderSupport( name, 'color' );\n\t},\n};\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/border/addAttributes',\n\taddAttributes\n);\n","/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit';\nimport { useSettings } from '../use-settings';\nimport { store as blockEditorStore } from '../../store';\n\nexport function __experimentalGetGradientClass( gradientSlug ) {\n\tif ( ! gradientSlug ) {\n\t\treturn undefined;\n\t}\n\treturn `has-${ gradientSlug }-gradient-background`;\n}\n\n/**\n * Retrieves the gradient value per slug.\n *\n * @param {Array} gradients Gradient Palette\n * @param {string} slug Gradient slug\n *\n * @return {string} Gradient value.\n */\nexport function getGradientValueBySlug( gradients, slug ) {\n\tconst gradient = gradients?.find( ( g ) => g.slug === slug );\n\treturn gradient && gradient.gradient;\n}\n\nexport function __experimentalGetGradientObjectByGradientValue(\n\tgradients,\n\tvalue\n) {\n\tconst gradient = gradients?.find( ( g ) => g.gradient === value );\n\treturn gradient;\n}\n\n/**\n * Retrieves the gradient slug per slug.\n *\n * @param {Array} gradients Gradient Palette\n * @param {string} value Gradient value\n * @return {string} Gradient slug.\n */\nexport function getGradientSlugByValue( gradients, value ) {\n\tconst gradient = __experimentalGetGradientObjectByGradientValue(\n\t\tgradients,\n\t\tvalue\n\t);\n\treturn gradient && gradient.slug;\n}\n\nexport function __experimentalUseGradient( {\n\tgradientAttribute = 'gradient',\n\tcustomGradientAttribute = 'customGradient',\n} = {} ) {\n\tconst { clientId } = useBlockEditContext();\n\n\tconst [\n\t\tuserGradientPalette,\n\t\tthemeGradientPalette,\n\t\tdefaultGradientPalette,\n\t] = useSettings(\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default'\n\t);\n\tconst allGradients = useMemo(\n\t\t() => [\n\t\t\t...( userGradientPalette || [] ),\n\t\t\t...( themeGradientPalette || [] ),\n\t\t\t...( defaultGradientPalette || [] ),\n\t\t],\n\t\t[ userGradientPalette, themeGradientPalette, defaultGradientPalette ]\n\t);\n\tconst { gradient, customGradient } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\t\t\tconst attributes = getBlockAttributes( clientId ) || {};\n\t\t\treturn {\n\t\t\t\tcustomGradient: attributes[ customGradientAttribute ],\n\t\t\t\tgradient: attributes[ gradientAttribute ],\n\t\t\t};\n\t\t},\n\t\t[ clientId, gradientAttribute, customGradientAttribute ]\n\t);\n\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst setGradient = useCallback(\n\t\t( newGradientValue ) => {\n\t\t\tconst slug = getGradientSlugByValue(\n\t\t\t\tallGradients,\n\t\t\t\tnewGradientValue\n\t\t\t);\n\t\t\tif ( slug ) {\n\t\t\t\tupdateBlockAttributes( clientId, {\n\t\t\t\t\t[ gradientAttribute ]: slug,\n\t\t\t\t\t[ customGradientAttribute ]: undefined,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateBlockAttributes( clientId, {\n\t\t\t\t[ gradientAttribute ]: undefined,\n\t\t\t\t[ customGradientAttribute ]: newGradientValue,\n\t\t\t} );\n\t\t},\n\t\t[ allGradients, clientId, updateBlockAttributes ]\n\t);\n\n\tconst gradientClass = __experimentalGetGradientClass( gradient );\n\tlet gradientValue;\n\tif ( gradient ) {\n\t\tgradientValue = getGradientValueBySlug( allGradients, gradient );\n\t} else {\n\t\tgradientValue = customGradient;\n\t}\n\treturn { gradientClass, gradientValue, setGradient };\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBaseControl,\n\t__experimentalVStack as VStack,\n\tColorPalette,\n\tGradientPicker,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\nimport { unlock } from '../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\nconst colorsAndGradientKeys = [\n\t'colors',\n\t'disableCustomColors',\n\t'gradients',\n\t'disableCustomGradients',\n];\n\nconst TAB_IDS = { color: 'color', gradient: 'gradient' };\n\nfunction ColorGradientControlInner( {\n\tcolors,\n\tgradients,\n\tdisableCustomColors,\n\tdisableCustomGradients,\n\t__experimentalIsRenderedInSidebar,\n\tclassName,\n\tlabel,\n\tonColorChange,\n\tonGradientChange,\n\tcolorValue,\n\tgradientValue,\n\tclearable,\n\tshowTitle = true,\n\tenableAlpha,\n\theadingLevel,\n} ) {\n\tconst canChooseAColor =\n\t\tonColorChange &&\n\t\t( ( colors && colors.length > 0 ) || ! disableCustomColors );\n\tconst canChooseAGradient =\n\t\tonGradientChange &&\n\t\t( ( gradients && gradients.length > 0 ) || ! disableCustomGradients );\n\n\tif ( ! canChooseAColor && ! canChooseAGradient ) {\n\t\treturn null;\n\t}\n\n\tconst tabPanels = {\n\t\t[ TAB_IDS.color ]: (\n\t\t\t {\n\t\t\t\t\t\t\t\tonColorChange( newColor );\n\t\t\t\t\t\t\t\tonGradientChange();\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: onColorChange\n\t\t\t\t}\n\t\t\t\t{ ...{ colors, disableCustomColors } }\n\t\t\t\t__experimentalIsRenderedInSidebar={\n\t\t\t\t\t__experimentalIsRenderedInSidebar\n\t\t\t\t}\n\t\t\t\tclearable={ clearable }\n\t\t\t\tenableAlpha={ enableAlpha }\n\t\t\t\theadingLevel={ headingLevel }\n\t\t\t/>\n\t\t),\n\t\t[ TAB_IDS.gradient ]: (\n\t\t\t {\n\t\t\t\t\t\t\t\tonGradientChange( newGradient );\n\t\t\t\t\t\t\t\tonColorChange();\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: onGradientChange\n\t\t\t\t}\n\t\t\t\t{ ...{ gradients, disableCustomGradients } }\n\t\t\t\t__experimentalIsRenderedInSidebar={\n\t\t\t\t\t__experimentalIsRenderedInSidebar\n\t\t\t\t}\n\t\t\t\tclearable={ clearable }\n\t\t\t\theadingLevel={ headingLevel }\n\t\t\t/>\n\t\t),\n\t};\n\n\tconst renderPanelType = ( type ) => (\n\t\t
    \n\t\t\t{ tabPanels[ type ] }\n\t\t
    \n\t);\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{ showTitle && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ label }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t) }\n\t\t\t\t\t{ canChooseAColor && canChooseAGradient && (\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Color' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Gradient' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ tabPanels.color }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ tabPanels.gradient }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! canChooseAGradient && renderPanelType( TAB_IDS.color ) }\n\t\t\t\t\t{ ! canChooseAColor && renderPanelType( TAB_IDS.gradient ) }\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t);\n}\n\nfunction ColorGradientControlSelect( props ) {\n\tconst [ colors, gradients, customColors, customGradients ] = useSettings(\n\t\t'color.palette',\n\t\t'color.gradients',\n\t\t'color.custom',\n\t\t'color.customGradient'\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n\nfunction ColorGradientControl( props ) {\n\tif (\n\t\tcolorsAndGradientKeys.every( ( key ) => props.hasOwnProperty( key ) )\n\t) {\n\t\treturn ;\n\t}\n\treturn ;\n}\n\nexport default ColorGradientControl;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalHStack as HStack,\n\t__experimentalZStack as ZStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tColorIndicator,\n\tFlex,\n\tFlexItem,\n\tDropdown,\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useCallback } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ColorGradientControl from '../colors-gradients/control';\nimport { useColorsPerOrigin, useGradientsPerOrigin } from './hooks';\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport { unlock } from '../../lock-unlock';\n\nexport function useHasColorPanel( settings ) {\n\tconst hasTextPanel = useHasTextPanel( settings );\n\tconst hasBackgroundPanel = useHasBackgroundColorPanel( settings );\n\tconst hasLinkPanel = useHasLinkPanel( settings );\n\tconst hasHeadingPanel = useHasHeadingPanel( settings );\n\tconst hasButtonPanel = useHasButtonPanel( settings );\n\tconst hasCaptionPanel = useHasCaptionPanel( settings );\n\n\treturn (\n\t\thasTextPanel ||\n\t\thasBackgroundPanel ||\n\t\thasLinkPanel ||\n\t\thasHeadingPanel ||\n\t\thasButtonPanel ||\n\t\thasCaptionPanel\n\t);\n}\n\nexport function useHasTextPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.text &&\n\t\t( colors?.length > 0 || settings?.color?.custom )\n\t);\n}\n\nexport function useHasLinkPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.link &&\n\t\t( colors?.length > 0 || settings?.color?.custom )\n\t);\n}\n\nexport function useHasCaptionPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.caption &&\n\t\t( colors?.length > 0 || settings?.color?.custom )\n\t);\n}\n\nexport function useHasHeadingPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.heading &&\n\t\t( colors?.length > 0 ||\n\t\t\tsettings?.color?.custom ||\n\t\t\tgradients?.length > 0 ||\n\t\t\tsettings?.color?.customGradient )\n\t);\n}\n\nexport function useHasButtonPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.button &&\n\t\t( colors?.length > 0 ||\n\t\t\tsettings?.color?.custom ||\n\t\t\tgradients?.length > 0 ||\n\t\t\tsettings?.color?.customGradient )\n\t);\n}\n\nexport function useHasBackgroundColorPanel( settings ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\treturn (\n\t\tsettings?.color?.background &&\n\t\t( colors?.length > 0 ||\n\t\t\tsettings?.color?.custom ||\n\t\t\tgradients?.length > 0 ||\n\t\t\tsettings?.color?.customGradient )\n\t);\n}\n\nfunction ColorToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t{ children }\n\t\t\t
    \n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\ttext: true,\n\tbackground: true,\n\tlink: true,\n\theading: true,\n\tbutton: true,\n\tcaption: true,\n};\n\nconst popoverProps = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n};\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nconst LabeledColorIndicators = ( { indicators, label } ) => (\n\t\n\t\t\n\t\t\t{ indicators.map( ( indicator, index ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t\t\n\t\t\t{ label }\n\t\t\n\t\n);\n\nfunction ColorPanelTab( {\n\tisGradient,\n\tinheritedValue,\n\tuserValue,\n\tsetValue,\n\tcolorGradientControlSettings,\n} ) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction ColorPanelDropdown( {\n\tlabel,\n\thasValue,\n\tresetValue,\n\tisShownByDefault,\n\tindicators,\n\ttabs,\n\tcolorGradientControlSettings,\n\tpanelId,\n} ) {\n\tconst currentTab = tabs.find( ( tab ) => tab.userValue !== undefined );\n\tconst { key: firstTabKey, ...firstTab } = tabs[ 0 ] ?? {};\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tconst toggleProps = {\n\t\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\t\tclassName: clsx(\n\t\t\t\t\t\t\t'block-editor-panel-color-gradient-settings__dropdown',\n\t\t\t\t\t\t\t{ 'is-open': isOpen }\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t\t'aria-label': sprintf(\n\t\t\t\t\t\t\t/* translators: %s is the type of color property, e.g., \"background\" */\n\t\t\t\t\t\t\t__( 'Color %s styles' ),\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\trenderContent={ () => (\n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{ tabs.length === 1 && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ tabs.length > 1 && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{ tab.label }\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t{ tabs.map( ( tab ) => {\n\t\t\t\t\t\t\t\t\t\tconst { key: tabKey, ...restTabProps } =\n\t\t\t\t\t\t\t\t\t\t\ttab;\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t/>\n\t\t\n\t);\n}\n\nexport default function ColorPanel( {\n\tas: Wrapper = ColorToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tchildren,\n} ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst gradients = useGradientsPerOrigin( settings );\n\tconst areCustomSolidsEnabled = settings?.color?.custom;\n\tconst areCustomGradientsEnabled = settings?.color?.customGradient;\n\tconst hasSolidColors = colors.length > 0 || areCustomSolidsEnabled;\n\tconst hasGradientColors = gradients.length > 0 || areCustomGradientsEnabled;\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\tconst encodeColorValue = ( colorValue ) => {\n\t\tconst allColors = colors.flatMap(\n\t\t\t( { colors: originColors } ) => originColors\n\t\t);\n\t\tconst colorObject = allColors.find(\n\t\t\t( { color } ) => color === colorValue\n\t\t);\n\t\treturn colorObject\n\t\t\t? 'var:preset|color|' + colorObject.slug\n\t\t\t: colorValue;\n\t};\n\tconst encodeGradientValue = ( gradientValue ) => {\n\t\tconst allGradients = gradients.flatMap(\n\t\t\t( { gradients: originGradients } ) => originGradients\n\t\t);\n\t\tconst gradientObject = allGradients.find(\n\t\t\t( { gradient } ) => gradient === gradientValue\n\t\t);\n\t\treturn gradientObject\n\t\t\t? 'var:preset|gradient|' + gradientObject.slug\n\t\t\t: gradientValue;\n\t};\n\n\t// BackgroundColor\n\tconst showBackgroundPanel = useHasBackgroundColorPanel( settings );\n\tconst backgroundColor = decodeValue( inheritedValue?.color?.background );\n\tconst userBackgroundColor = decodeValue( value?.color?.background );\n\tconst gradient = decodeValue( inheritedValue?.color?.gradient );\n\tconst userGradient = decodeValue( value?.color?.gradient );\n\tconst hasBackground = () => !! userBackgroundColor || !! userGradient;\n\tconst setBackgroundColor = ( newColor ) => {\n\t\tconst newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'background' ],\n\t\t\tencodeColorValue( newColor )\n\t\t);\n\t\tnewValue.color.gradient = undefined;\n\t\tonChange( newValue );\n\t};\n\tconst setGradient = ( newGradient ) => {\n\t\tconst newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'gradient' ],\n\t\t\tencodeGradientValue( newGradient )\n\t\t);\n\t\tnewValue.color.background = undefined;\n\t\tonChange( newValue );\n\t};\n\tconst resetBackground = () => {\n\t\tconst newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'background' ],\n\t\t\tundefined\n\t\t);\n\t\tnewValue.color.gradient = undefined;\n\t\tonChange( newValue );\n\t};\n\n\t// Links\n\tconst showLinkPanel = useHasLinkPanel( settings );\n\tconst linkColor = decodeValue(\n\t\tinheritedValue?.elements?.link?.color?.text\n\t);\n\tconst userLinkColor = decodeValue( value?.elements?.link?.color?.text );\n\tconst setLinkColor = ( newColor ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', 'link', 'color', 'text' ],\n\t\t\t\tencodeColorValue( newColor )\n\t\t\t)\n\t\t);\n\t};\n\tconst hoverLinkColor = decodeValue(\n\t\tinheritedValue?.elements?.link?.[ ':hover' ]?.color?.text\n\t);\n\tconst userHoverLinkColor = decodeValue(\n\t\tvalue?.elements?.link?.[ ':hover' ]?.color?.text\n\t);\n\tconst setHoverLinkColor = ( newColor ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', 'link', ':hover', 'color', 'text' ],\n\t\t\t\tencodeColorValue( newColor )\n\t\t\t)\n\t\t);\n\t};\n\tconst hasLink = () => !! userLinkColor || !! userHoverLinkColor;\n\tconst resetLink = () => {\n\t\tlet newValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'elements', 'link', ':hover', 'color', 'text' ],\n\t\t\tundefined\n\t\t);\n\t\tnewValue = setImmutably(\n\t\t\tnewValue,\n\t\t\t[ 'elements', 'link', 'color', 'text' ],\n\t\t\tundefined\n\t\t);\n\t\tonChange( newValue );\n\t};\n\n\t// Text Color\n\tconst showTextPanel = useHasTextPanel( settings );\n\tconst textColor = decodeValue( inheritedValue?.color?.text );\n\tconst userTextColor = decodeValue( value?.color?.text );\n\tconst hasTextColor = () => !! userTextColor;\n\tconst setTextColor = ( newColor ) => {\n\t\tlet changedObject = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'color', 'text' ],\n\t\t\tencodeColorValue( newColor )\n\t\t);\n\t\tif ( textColor === linkColor ) {\n\t\t\tchangedObject = setImmutably(\n\t\t\t\tchangedObject,\n\t\t\t\t[ 'elements', 'link', 'color', 'text' ],\n\t\t\t\tencodeColorValue( newColor )\n\t\t\t);\n\t\t}\n\n\t\tonChange( changedObject );\n\t};\n\tconst resetTextColor = () => setTextColor( undefined );\n\n\t// Elements\n\tconst elements = [\n\t\t{\n\t\t\tname: 'caption',\n\t\t\tlabel: __( 'Captions' ),\n\t\t\tshowPanel: useHasCaptionPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'button',\n\t\t\tlabel: __( 'Button' ),\n\t\t\tshowPanel: useHasButtonPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'heading',\n\t\t\tlabel: __( 'Heading' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h1',\n\t\t\tlabel: __( 'H1' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h2',\n\t\t\tlabel: __( 'H2' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h3',\n\t\t\tlabel: __( 'H3' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h4',\n\t\t\tlabel: __( 'H4' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h5',\n\t\t\tlabel: __( 'H5' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t\t{\n\t\t\tname: 'h6',\n\t\t\tlabel: __( 'H6' ),\n\t\t\tshowPanel: useHasHeadingPanel( settings ),\n\t\t},\n\t];\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tcolor: undefined,\n\t\t\telements: {\n\t\t\t\t...previousValue?.elements,\n\t\t\t\tlink: {\n\t\t\t\t\t...previousValue?.elements?.link,\n\t\t\t\t\tcolor: undefined,\n\t\t\t\t\t':hover': {\n\t\t\t\t\t\tcolor: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...elements.reduce( ( acc, element ) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t[ element.name ]: {\n\t\t\t\t\t\t\t...previousValue?.elements?.[ element.name ],\n\t\t\t\t\t\t\tcolor: undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}, {} ),\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\tconst items = [\n\t\tshowTextPanel && {\n\t\t\tkey: 'text',\n\t\t\tlabel: __( 'Text' ),\n\t\t\thasValue: hasTextColor,\n\t\t\tresetValue: resetTextColor,\n\t\t\tisShownByDefault: defaultControls.text,\n\t\t\tindicators: [ textColor ],\n\t\t\ttabs: [\n\t\t\t\t{\n\t\t\t\t\tkey: 'text',\n\t\t\t\t\tlabel: __( 'Text' ),\n\t\t\t\t\tinheritedValue: textColor,\n\t\t\t\t\tsetValue: setTextColor,\n\t\t\t\t\tuserValue: userTextColor,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tshowBackgroundPanel && {\n\t\t\tkey: 'background',\n\t\t\tlabel: __( 'Background' ),\n\t\t\thasValue: hasBackground,\n\t\t\tresetValue: resetBackground,\n\t\t\tisShownByDefault: defaultControls.background,\n\t\t\tindicators: [ gradient ?? backgroundColor ],\n\t\t\ttabs: [\n\t\t\t\thasSolidColors && {\n\t\t\t\t\tkey: 'background',\n\t\t\t\t\tlabel: __( 'Color' ),\n\t\t\t\t\tinheritedValue: backgroundColor,\n\t\t\t\t\tsetValue: setBackgroundColor,\n\t\t\t\t\tuserValue: userBackgroundColor,\n\t\t\t\t},\n\t\t\t\thasGradientColors && {\n\t\t\t\t\tkey: 'gradient',\n\t\t\t\t\tlabel: __( 'Gradient' ),\n\t\t\t\t\tinheritedValue: gradient,\n\t\t\t\t\tsetValue: setGradient,\n\t\t\t\t\tuserValue: userGradient,\n\t\t\t\t\tisGradient: true,\n\t\t\t\t},\n\t\t\t].filter( Boolean ),\n\t\t},\n\t\tshowLinkPanel && {\n\t\t\tkey: 'link',\n\t\t\tlabel: __( 'Link' ),\n\t\t\thasValue: hasLink,\n\t\t\tresetValue: resetLink,\n\t\t\tisShownByDefault: defaultControls.link,\n\t\t\tindicators: [ linkColor, hoverLinkColor ],\n\t\t\ttabs: [\n\t\t\t\t{\n\t\t\t\t\tkey: 'link',\n\t\t\t\t\tlabel: __( 'Default' ),\n\t\t\t\t\tinheritedValue: linkColor,\n\t\t\t\t\tsetValue: setLinkColor,\n\t\t\t\t\tuserValue: userLinkColor,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tkey: 'hover',\n\t\t\t\t\tlabel: __( 'Hover' ),\n\t\t\t\t\tinheritedValue: hoverLinkColor,\n\t\t\t\t\tsetValue: setHoverLinkColor,\n\t\t\t\t\tuserValue: userHoverLinkColor,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t].filter( Boolean );\n\n\telements.forEach( ( { name, label, showPanel } ) => {\n\t\tif ( ! showPanel ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementBackgroundColor = decodeValue(\n\t\t\tinheritedValue?.elements?.[ name ]?.color?.background\n\t\t);\n\t\tconst elementGradient = decodeValue(\n\t\t\tinheritedValue?.elements?.[ name ]?.color?.gradient\n\t\t);\n\t\tconst elementTextColor = decodeValue(\n\t\t\tinheritedValue?.elements?.[ name ]?.color?.text\n\t\t);\n\t\tconst elementBackgroundUserColor = decodeValue(\n\t\t\tvalue?.elements?.[ name ]?.color?.background\n\t\t);\n\t\tconst elementGradientUserColor = decodeValue(\n\t\t\tvalue?.elements?.[ name ]?.color?.gradient\n\t\t);\n\t\tconst elementTextUserColor = decodeValue(\n\t\t\tvalue?.elements?.[ name ]?.color?.text\n\t\t);\n\t\tconst hasElement = () =>\n\t\t\t!! (\n\t\t\t\telementTextUserColor ||\n\t\t\t\telementBackgroundUserColor ||\n\t\t\t\telementGradientUserColor\n\t\t\t);\n\t\tconst resetElement = () => {\n\t\t\tconst newValue = setImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', name, 'color', 'background' ],\n\t\t\t\tundefined\n\t\t\t);\n\t\t\tnewValue.elements[ name ].color.gradient = undefined;\n\t\t\tnewValue.elements[ name ].color.text = undefined;\n\t\t\tonChange( newValue );\n\t\t};\n\n\t\tconst setElementTextColor = ( newTextColor ) => {\n\t\t\tonChange(\n\t\t\t\tsetImmutably(\n\t\t\t\t\tvalue,\n\t\t\t\t\t[ 'elements', name, 'color', 'text' ],\n\t\t\t\t\tencodeColorValue( newTextColor )\n\t\t\t\t)\n\t\t\t);\n\t\t};\n\t\tconst setElementBackgroundColor = ( newBackgroundColor ) => {\n\t\t\tconst newValue = setImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', name, 'color', 'background' ],\n\t\t\t\tencodeColorValue( newBackgroundColor )\n\t\t\t);\n\t\t\tnewValue.elements[ name ].color.gradient = undefined;\n\t\t\tonChange( newValue );\n\t\t};\n\t\tconst setElementGradient = ( newGradient ) => {\n\t\t\tconst newValue = setImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'elements', name, 'color', 'gradient' ],\n\t\t\t\tencodeGradientValue( newGradient )\n\t\t\t);\n\t\t\tnewValue.elements[ name ].color.background = undefined;\n\t\t\tonChange( newValue );\n\t\t};\n\t\tconst supportsTextColor = true;\n\t\t// Background color is not supported for `caption`\n\t\t// as there isn't yet a way to set padding for the element.\n\t\tconst supportsBackground = name !== 'caption';\n\n\t\titems.push( {\n\t\t\tkey: name,\n\t\t\tlabel,\n\t\t\thasValue: hasElement,\n\t\t\tresetValue: resetElement,\n\t\t\tisShownByDefault: defaultControls[ name ],\n\t\t\tindicators:\n\t\t\t\tsupportsTextColor && supportsBackground\n\t\t\t\t\t? [\n\t\t\t\t\t\t\telementTextColor,\n\t\t\t\t\t\t\telementGradient ?? elementBackgroundColor,\n\t\t\t\t\t ]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\tsupportsTextColor\n\t\t\t\t\t\t\t\t? elementTextColor\n\t\t\t\t\t\t\t\t: elementGradient ?? elementBackgroundColor,\n\t\t\t\t\t ],\n\t\t\ttabs: [\n\t\t\t\thasSolidColors &&\n\t\t\t\t\tsupportsTextColor && {\n\t\t\t\t\t\tkey: 'text',\n\t\t\t\t\t\tlabel: __( 'Text' ),\n\t\t\t\t\t\tinheritedValue: elementTextColor,\n\t\t\t\t\t\tsetValue: setElementTextColor,\n\t\t\t\t\t\tuserValue: elementTextUserColor,\n\t\t\t\t\t},\n\t\t\t\thasSolidColors &&\n\t\t\t\t\tsupportsBackground && {\n\t\t\t\t\t\tkey: 'background',\n\t\t\t\t\t\tlabel: __( 'Background' ),\n\t\t\t\t\t\tinheritedValue: elementBackgroundColor,\n\t\t\t\t\t\tsetValue: setElementBackgroundColor,\n\t\t\t\t\t\tuserValue: elementBackgroundUserColor,\n\t\t\t\t\t},\n\t\t\t\thasGradientColors &&\n\t\t\t\t\tsupportsBackground && {\n\t\t\t\t\t\tkey: 'gradient',\n\t\t\t\t\t\tlabel: __( 'Gradient' ),\n\t\t\t\t\t\tinheritedValue: elementGradient,\n\t\t\t\t\t\tsetValue: setElementGradient,\n\t\t\t\t\t\tuserValue: elementGradientUserColor,\n\t\t\t\t\t\tisGradient: true,\n\t\t\t\t\t},\n\t\t\t].filter( Boolean ),\n\t\t} );\n\t} );\n\n\treturn (\n\t\t\n\t\t\t{ items.map( ( item ) => {\n\t\t\t\tconst { key, ...restItem } = item;\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport a11yPlugin from 'colord/plugins/a11y';\nimport namesPlugin from 'colord/plugins/names';\nimport { colord, extend } from 'colord';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { Notice } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\nextend( [ namesPlugin, a11yPlugin ] );\n\nfunction ContrastChecker( {\n\tbackgroundColor,\n\tfallbackBackgroundColor,\n\tfallbackTextColor,\n\tfallbackLinkColor,\n\tfontSize, // Font size value in pixels.\n\tisLargeText,\n\ttextColor,\n\tlinkColor,\n\tenableAlphaChecker = false,\n} ) {\n\tconst currentBackgroundColor = backgroundColor || fallbackBackgroundColor;\n\n\t// Must have a background color.\n\tif ( ! currentBackgroundColor ) {\n\t\treturn null;\n\t}\n\n\tconst currentTextColor = textColor || fallbackTextColor;\n\tconst currentLinkColor = linkColor || fallbackLinkColor;\n\n\t// Must have at least one text color.\n\tif ( ! currentTextColor && ! currentLinkColor ) {\n\t\treturn null;\n\t}\n\n\tconst textColors = [\n\t\t{\n\t\t\tcolor: currentTextColor,\n\t\t\tdescription: __( 'text color' ),\n\t\t},\n\t\t{\n\t\t\tcolor: currentLinkColor,\n\t\t\tdescription: __( 'link color' ),\n\t\t},\n\t];\n\tconst colordBackgroundColor = colord( currentBackgroundColor );\n\tconst backgroundColorHasTransparency = colordBackgroundColor.alpha() < 1;\n\tconst backgroundColorBrightness = colordBackgroundColor.brightness();\n\tconst isReadableOptions = {\n\t\tlevel: 'AA',\n\t\tsize:\n\t\t\tisLargeText || ( isLargeText !== false && fontSize >= 24 )\n\t\t\t\t? 'large'\n\t\t\t\t: 'small',\n\t};\n\n\tlet message = '';\n\tlet speakMessage = '';\n\tfor ( const item of textColors ) {\n\t\t// If there is no color, go no further.\n\t\tif ( ! item.color ) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst colordTextColor = colord( item.color );\n\t\tconst isColordTextReadable = colordTextColor.isReadable(\n\t\t\tcolordBackgroundColor,\n\t\t\tisReadableOptions\n\t\t);\n\t\tconst textHasTransparency = colordTextColor.alpha() < 1;\n\n\t\t// If the contrast is not readable.\n\t\tif ( ! isColordTextReadable ) {\n\t\t\t// Don't show the message if the background or text is transparent.\n\t\t\tif ( backgroundColorHasTransparency || textHasTransparency ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tmessage =\n\t\t\t\tbackgroundColorBrightness < colordTextColor.brightness()\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// translators: %s is a type of text color, e.g., \"text color\" or \"link color\".\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'This color combination may be hard for people to read. Try using a darker background color and/or a brighter %s.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\titem.description\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// translators: %s is a type of text color, e.g., \"text color\" or \"link color\".\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'This color combination may be hard for people to read. Try using a brighter background color and/or a darker %s.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\titem.description\n\t\t\t\t\t );\n\t\t\tspeakMessage = __(\n\t\t\t\t'This color combination may be hard for people to read.'\n\t\t\t);\n\t\t\t// Break from the loop when we have a contrast warning.\n\t\t\t// These messages take priority over the transparency warning.\n\t\t\tbreak;\n\t\t}\n\n\t\t// If there is no contrast warning and the text is transparent,\n\t\t// show the transparent warning if alpha check is enabled.\n\t\tif ( textHasTransparency && enableAlphaChecker ) {\n\t\t\tmessage = __( 'Transparent text may be hard for people to read.' );\n\t\t\tspeakMessage = __(\n\t\t\t\t'Transparent text may be hard for people to read.'\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( ! message ) {\n\t\treturn null;\n\t}\n\n\t// Note: The `Notice` component can speak messages via its `spokenMessage`\n\t// prop, but the contrast checker requires granular control over when the\n\t// announcements are made. Notably, the message will be re-announced if a\n\t// new color combination is selected and the contrast is still insufficient.\n\tspeak( speakMessage );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ message }\n\t\t\t\n\t\t
    \n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/contrast-checker/README.md\n */\nexport default ContrastChecker;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useMemo } from '@wordpress/element';\nimport { observableMap } from '@wordpress/compose';\n\nexport const BlockRefs = createContext( { refsMap: observableMap() } );\n\nexport function BlockRefsProvider( { children } ) {\n\tconst value = useMemo( () => ( { refsMap: observableMap() } ), [] );\n\treturn (\n\t\t{ children }\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useContext, useState, useLayoutEffect } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { BlockRefs } from '../../provider/block-refs-provider';\n\n/** @typedef {import('@wordpress/element').RefCallback} RefCallback */\n/** @typedef {import('@wordpress/element').Ref} Ref */\n\n/**\n * Provides a ref to the BlockRefs context.\n *\n * @param {string} clientId The client ID of the element ref.\n *\n * @return {RefCallback} Ref callback.\n */\nexport function useBlockRefProvider( clientId ) {\n\tconst { refsMap } = useContext( BlockRefs );\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\trefsMap.set( clientId, element );\n\t\t\treturn () => refsMap.delete( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n\nfunction assignRef( ref, value ) {\n\tif ( typeof ref === 'function' ) {\n\t\tref( value );\n\t} else if ( ref ) {\n\t\tref.current = value;\n\t}\n}\n\n/**\n * Tracks the DOM element for the block identified by `clientId` and assigns it to the `ref`\n * whenever it changes.\n *\n * @param {string} clientId The client ID to track.\n * @param {Ref} ref The ref object/callback to assign to.\n */\nexport function useBlockElementRef( clientId, ref ) {\n\tconst { refsMap } = useContext( BlockRefs );\n\tuseLayoutEffect( () => {\n\t\tassignRef( ref, refsMap.get( clientId ) );\n\t\tconst unsubscribe = refsMap.subscribe( clientId, () =>\n\t\t\tassignRef( ref, refsMap.get( clientId ) )\n\t\t);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tassignRef( ref, null );\n\t\t};\n\t}, [ refsMap, clientId, ref ] );\n}\n\n/**\n * Return the element for a given client ID. Updates whenever the element\n * changes, becomes available, or disappears.\n *\n * @param {string} clientId The client ID to an element for.\n *\n * @return {Element|null} The block's wrapper element.\n */\nexport function useBlockElement( clientId ) {\n\tconst [ blockElement, setBlockElement ] = useState( null );\n\tuseBlockElementRef( clientId, setBlockElement );\n\treturn blockElement;\n}\n","/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport ContrastChecker from '../components/contrast-checker';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction getComputedStyle( node ) {\n\treturn node.ownerDocument.defaultView.getComputedStyle( node );\n}\n\nexport default function BlockColorContrastChecker( { clientId } ) {\n\tconst [ detectedBackgroundColor, setDetectedBackgroundColor ] = useState();\n\tconst [ detectedColor, setDetectedColor ] = useState();\n\tconst [ detectedLinkColor, setDetectedLinkColor ] = useState();\n\tconst blockEl = useBlockElement( clientId );\n\n\t// There are so many things that can change the color of a block\n\t// So we perform this check on every render.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => {\n\t\tif ( ! blockEl ) {\n\t\t\treturn;\n\t\t}\n\t\tsetDetectedColor( getComputedStyle( blockEl ).color );\n\n\t\tconst firstLinkElement = blockEl.querySelector( 'a' );\n\t\tif ( firstLinkElement && !! firstLinkElement.innerText ) {\n\t\t\tsetDetectedLinkColor( getComputedStyle( firstLinkElement ).color );\n\t\t}\n\n\t\tlet backgroundColorNode = blockEl;\n\t\tlet backgroundColor =\n\t\t\tgetComputedStyle( backgroundColorNode ).backgroundColor;\n\t\twhile (\n\t\t\tbackgroundColor === 'rgba(0, 0, 0, 0)' &&\n\t\t\tbackgroundColorNode.parentNode &&\n\t\t\tbackgroundColorNode.parentNode.nodeType ===\n\t\t\t\tbackgroundColorNode.parentNode.ELEMENT_NODE\n\t\t) {\n\t\t\tbackgroundColorNode = backgroundColorNode.parentNode;\n\t\t\tbackgroundColor =\n\t\t\t\tgetComputedStyle( backgroundColorNode ).backgroundColor;\n\t\t}\n\n\t\tsetDetectedBackgroundColor( backgroundColor );\n\t}, [ blockEl ] );\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useMemo, Platform, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetColorClassName,\n\tgetColorObjectByAttributeValues,\n} from '../components/colors';\nimport { __experimentalGetGradientClass } from '../components/gradients';\nimport {\n\tcleanEmptyObject,\n\ttransformStyles,\n\tshouldSkipSerialization,\n} from './utils';\nimport { getBackgroundImageClasses } from './background';\nimport { useSettings } from '../components/use-settings';\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tuseHasColorPanel,\n\tdefault as StylesColorPanel,\n} from '../components/global-styles/color-panel';\nimport BlockColorContrastChecker from './contrast-checker';\nimport { store as blockEditorStore } from '../store';\n\nexport const COLOR_SUPPORT_KEY = 'color';\n\nconst hasColorSupport = ( blockNameOrType ) => {\n\tconst colorSupport = getBlockSupport( blockNameOrType, COLOR_SUPPORT_KEY );\n\treturn (\n\t\tcolorSupport &&\n\t\t( colorSupport.link === true ||\n\t\t\tcolorSupport.gradient === true ||\n\t\t\tcolorSupport.background !== false ||\n\t\t\tcolorSupport.text !== false )\n\t);\n};\n\nconst hasLinkColorSupport = ( blockType ) => {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.link\n\t);\n};\n\nconst hasGradientSupport = ( blockNameOrType ) => {\n\tconst colorSupport = getBlockSupport( blockNameOrType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.gradients\n\t);\n};\n\nconst hasBackgroundColorSupport = ( blockType ) => {\n\tconst colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.background !== false;\n};\n\nconst hasTextColorSupport = ( blockType ) => {\n\tconst colorSupport = getBlockSupport( blockType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.text !== false;\n};\n\n/**\n * Filters registered block settings, extending attributes to include\n * `backgroundColor` and `textColor` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasColorSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings.attributes.backgroundColor ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tbackgroundColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\tif ( ! settings.attributes.textColor ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\ttextColor: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\tif ( hasGradientSupport( settings ) && ! settings.attributes.gradient ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tgradient: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject colors classnames.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( props, blockNameOrType, attributes ) {\n\tif (\n\t\t! hasColorSupport( blockNameOrType ) ||\n\t\tshouldSkipSerialization( blockNameOrType, COLOR_SUPPORT_KEY )\n\t) {\n\t\treturn props;\n\t}\n\n\tconst hasGradient = hasGradientSupport( blockNameOrType );\n\n\t// I'd have preferred to avoid the \"style\" attribute usage here\n\tconst { backgroundColor, textColor, gradient, style } = attributes;\n\n\tconst shouldSerialize = ( feature ) =>\n\t\t! shouldSkipSerialization(\n\t\t\tblockNameOrType,\n\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\tfeature\n\t\t);\n\n\t// Primary color classes must come before the `has-text-color`,\n\t// `has-background` and `has-link-color` classes to maintain backwards\n\t// compatibility and avoid block invalidations.\n\tconst textClass = shouldSerialize( 'text' )\n\t\t? getColorClassName( 'color', textColor )\n\t\t: undefined;\n\n\tconst gradientClass = shouldSerialize( 'gradients' )\n\t\t? __experimentalGetGradientClass( gradient )\n\t\t: undefined;\n\n\tconst backgroundClass = shouldSerialize( 'background' )\n\t\t? getColorClassName( 'background-color', backgroundColor )\n\t\t: undefined;\n\n\tconst serializeHasBackground =\n\t\tshouldSerialize( 'background' ) || shouldSerialize( 'gradients' );\n\tconst hasBackground =\n\t\tbackgroundColor ||\n\t\tstyle?.color?.background ||\n\t\t( hasGradient && ( gradient || style?.color?.gradient ) );\n\n\tconst newClassName = clsx( props.className, textClass, gradientClass, {\n\t\t// Don't apply the background class if there's a custom gradient.\n\t\t[ backgroundClass ]:\n\t\t\t( ! hasGradient || ! style?.color?.gradient ) && !! backgroundClass,\n\t\t'has-text-color':\n\t\t\tshouldSerialize( 'text' ) && ( textColor || style?.color?.text ),\n\t\t'has-background': serializeHasBackground && hasBackground,\n\t\t'has-link-color':\n\t\t\tshouldSerialize( 'link' ) && style?.elements?.link?.color,\n\t} );\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\nfunction styleToAttributes( style ) {\n\tconst textColorValue = style?.color?.text;\n\tconst textColorSlug = textColorValue?.startsWith( 'var:preset|color|' )\n\t\t? textColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst backgroundColorValue = style?.color?.background;\n\tconst backgroundColorSlug = backgroundColorValue?.startsWith(\n\t\t'var:preset|color|'\n\t)\n\t\t? backgroundColorValue.substring( 'var:preset|color|'.length )\n\t\t: undefined;\n\tconst gradientValue = style?.color?.gradient;\n\tconst gradientSlug = gradientValue?.startsWith( 'var:preset|gradient|' )\n\t\t? gradientValue.substring( 'var:preset|gradient|'.length )\n\t\t: undefined;\n\tconst updatedStyle = { ...style };\n\tupdatedStyle.color = {\n\t\t...updatedStyle.color,\n\t\ttext: textColorSlug ? undefined : textColorValue,\n\t\tbackground: backgroundColorSlug ? undefined : backgroundColorValue,\n\t\tgradient: gradientSlug ? undefined : gradientValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\ttextColor: textColorSlug,\n\t\tbackgroundColor: backgroundColorSlug,\n\t\tgradient: gradientSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\tcolor: {\n\t\t\t...attributes.style?.color,\n\t\t\ttext: attributes.textColor\n\t\t\t\t? 'var:preset|color|' + attributes.textColor\n\t\t\t\t: attributes.style?.color?.text,\n\t\t\tbackground: attributes.backgroundColor\n\t\t\t\t? 'var:preset|color|' + attributes.backgroundColor\n\t\t\t\t: attributes.style?.color?.background,\n\t\t\tgradient: attributes.gradient\n\t\t\t\t? 'var:preset|gradient|' + attributes.gradient\n\t\t\t\t: attributes.style?.color?.gradient,\n\t\t},\n\t};\n}\n\nfunction ColorInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function ColorEdit( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasColorPanel( settings );\n\tfunction selector( select ) {\n\t\tconst { style, textColor, backgroundColor, gradient } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, textColor, backgroundColor, gradient };\n\t}\n\tconst { style, textColor, backgroundColor, gradient } = useSelect(\n\t\tselector,\n\t\t[ clientId ]\n\t);\n\tconst value = useMemo( () => {\n\t\treturn attributesToStyle( {\n\t\t\tstyle,\n\t\t\ttextColor,\n\t\t\tbackgroundColor,\n\t\t\tgradient,\n\t\t} );\n\t}, [ style, textColor, backgroundColor, gradient ] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tCOLOR_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst enableContrastChecking =\n\t\tPlatform.OS === 'web' &&\n\t\t! value?.color?.gradient &&\n\t\t( settings?.color?.text || settings?.color?.link ) &&\n\t\t// Contrast checking is enabled by default.\n\t\t// Deactivating it requires `enableContrastChecker` to have\n\t\t// an explicit value of `false`.\n\t\tfalse !==\n\t\t\tgetBlockSupport( name, [\n\t\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t\t'enableContrastChecker',\n\t\t\t] );\n\n\treturn (\n\t\t\n\t\t\t{ enableContrastChecking && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction useBlockProps( {\n\tname,\n\tbackgroundColor,\n\ttextColor,\n\tgradient,\n\tstyle,\n} ) {\n\tconst [ userPalette, themePalette, defaultPalette ] = useSettings(\n\t\t'color.palette.custom',\n\t\t'color.palette.theme',\n\t\t'color.palette.default'\n\t);\n\n\tconst colors = useMemo(\n\t\t() => [\n\t\t\t...( userPalette || [] ),\n\t\t\t...( themePalette || [] ),\n\t\t\t...( defaultPalette || [] ),\n\t\t],\n\t\t[ userPalette, themePalette, defaultPalette ]\n\t);\n\tif (\n\t\t! hasColorSupport( name ) ||\n\t\tshouldSkipSerialization( name, COLOR_SUPPORT_KEY )\n\t) {\n\t\treturn {};\n\t}\n\tconst extraStyles = {};\n\n\tif (\n\t\ttextColor &&\n\t\t! shouldSkipSerialization( name, COLOR_SUPPORT_KEY, 'text' )\n\t) {\n\t\textraStyles.color = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\ttextColor\n\t\t)?.color;\n\t}\n\tif (\n\t\tbackgroundColor &&\n\t\t! shouldSkipSerialization( name, COLOR_SUPPORT_KEY, 'background' )\n\t) {\n\t\textraStyles.backgroundColor = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\tbackgroundColor\n\t\t)?.color;\n\t}\n\n\tconst saveProps = addSaveProps( { style: extraStyles }, name, {\n\t\ttextColor,\n\t\tbackgroundColor,\n\t\tgradient,\n\t\tstyle,\n\t} );\n\n\tconst hasBackgroundValue =\n\t\tbackgroundColor ||\n\t\tstyle?.color?.background ||\n\t\tgradient ||\n\t\tstyle?.color?.gradient;\n\n\treturn {\n\t\t...saveProps,\n\t\tclassName: clsx(\n\t\t\tsaveProps.className,\n\t\t\t// Add background image classes in the editor, if not already handled by background color values.\n\t\t\t! hasBackgroundValue && getBackgroundImageClasses( style )\n\t\t),\n\t};\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'backgroundColor', 'textColor', 'gradient', 'style' ],\n\thasSupport: hasColorSupport,\n};\n\nconst MIGRATION_PATHS = {\n\tlinkColor: [ [ 'style', 'elements', 'link', 'color', 'text' ] ],\n\ttextColor: [ [ 'textColor' ], [ 'style', 'color', 'text' ] ],\n\tbackgroundColor: [\n\t\t[ 'backgroundColor' ],\n\t\t[ 'style', 'color', 'background' ],\n\t],\n\tgradient: [ [ 'gradient' ], [ 'style', 'color', 'gradient' ] ],\n};\n\nexport function addTransforms( result, source, index, results ) {\n\tconst destinationBlockType = result.name;\n\tconst activeSupports = {\n\t\tlinkColor: hasLinkColorSupport( destinationBlockType ),\n\t\ttextColor: hasTextColorSupport( destinationBlockType ),\n\t\tbackgroundColor: hasBackgroundColorSupport( destinationBlockType ),\n\t\tgradient: hasGradientSupport( destinationBlockType ),\n\t};\n\treturn transformStyles(\n\t\tactiveSupports,\n\t\tMIGRATION_PATHS,\n\t\tresult,\n\t\tsource,\n\t\tindex,\n\t\tresults\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/color/addAttribute',\n\taddAttributes\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/color/addTransforms',\n\taddTransforms\n);\n","/**\n * WordPress dependencies\n */\nimport { SelectControl } from '@wordpress/components';\nimport deprecated from '@wordpress/deprecated';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nexport default function FontFamilyControl( {\n\t/** Start opting into the larger default height that will become the default size in a future version. */\n\t__next40pxDefaultSize = false,\n\t/** Start opting into the new margin-free styles that will become the default in a future version. */\n\t__nextHasNoMarginBottom = false,\n\tvalue = '',\n\tonChange,\n\tfontFamilies,\n\t...props\n} ) {\n\tconst [ blockLevelFontFamilies ] = useSettings( 'typography.fontFamilies' );\n\tif ( ! fontFamilies ) {\n\t\tfontFamilies = blockLevelFontFamilies;\n\t}\n\n\tif ( ! fontFamilies || fontFamilies.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst options = [\n\t\t{ value: '', label: __( 'Default' ) },\n\t\t...fontFamilies.map( ( { fontFamily, name } ) => {\n\t\t\treturn {\n\t\t\t\tvalue: fontFamily,\n\t\t\t\tlabel: name || fontFamily,\n\t\t\t};\n\t\t} ),\n\t];\n\n\tif ( ! __nextHasNoMarginBottom ) {\n\t\tdeprecated(\n\t\t\t'Bottom margin styles for wp.blockEditor.FontFamilyControl',\n\t\t\t{\n\t\t\t\tsince: '6.7',\n\t\t\t\tversion: '7.0',\n\t\t\t\thint: 'Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version',\n\t\t\t}\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { CustomSelectControl } from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights';\n\n/**\n * Adjusts font appearance field label in case either font styles or weights\n * are disabled.\n *\n * @param {boolean} hasFontStyles Whether font styles are enabled and present.\n * @param {boolean} hasFontWeights Whether font weights are enabled and present.\n * @return {string} A label representing what font appearance is being edited.\n */\nconst getFontAppearanceLabel = ( hasFontStyles, hasFontWeights ) => {\n\tif ( ! hasFontStyles ) {\n\t\treturn __( 'Font weight' );\n\t}\n\n\tif ( ! hasFontWeights ) {\n\t\treturn __( 'Font style' );\n\t}\n\n\treturn __( 'Appearance' );\n};\n\n/**\n * Control to display font style and weight options of the active font.\n *\n * @param {Object} props Component props.\n *\n * @return {Element} Font appearance control.\n */\nexport default function FontAppearanceControl( props ) {\n\tconst {\n\t\t/** Start opting into the larger default height that will become the default size in a future version. */\n\t\t__next40pxDefaultSize = false,\n\t\tonChange,\n\t\thasFontStyles = true,\n\t\thasFontWeights = true,\n\t\tfontFamilyFaces,\n\t\tvalue: { fontStyle, fontWeight },\n\t\t...otherProps\n\t} = props;\n\tconst hasStylesOrWeights = hasFontStyles || hasFontWeights;\n\tconst label = getFontAppearanceLabel( hasFontStyles, hasFontWeights );\n\tconst defaultOption = {\n\t\tkey: 'default',\n\t\tname: __( 'Default' ),\n\t\tstyle: { fontStyle: undefined, fontWeight: undefined },\n\t};\n\tconst { fontStyles, fontWeights, combinedStyleAndWeightOptions } =\n\t\tgetFontStylesAndWeights( fontFamilyFaces );\n\n\t// Generates select options for combined font styles and weights.\n\tconst combineOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tif ( combinedStyleAndWeightOptions ) {\n\t\t\tcombinedOptions.push( ...combinedStyleAndWeightOptions );\n\t\t}\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font styles only.\n\tconst styleOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tfontStyles.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: value, fontWeight: undefined },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font weights only.\n\tconst weightOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tfontWeights.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: undefined, fontWeight: value },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Map font styles and weights to select options.\n\tconst selectOptions = useMemo( () => {\n\t\t// Display combined available font style and weight options.\n\t\tif ( hasFontStyles && hasFontWeights ) {\n\t\t\treturn combineOptions();\n\t\t}\n\n\t\t// Display only font style options or font weight options.\n\t\treturn hasFontStyles ? styleOptions() : weightOptions();\n\t}, [\n\t\tprops.options,\n\t\tfontStyles,\n\t\tfontWeights,\n\t\tcombinedStyleAndWeightOptions,\n\t] );\n\n\t// Find current selection by comparing font style & weight against options,\n\t// and fall back to the Default option if there is no matching option.\n\tconst currentSelection =\n\t\tselectOptions.find(\n\t\t\t( option ) =>\n\t\t\t\toption.style.fontStyle === fontStyle &&\n\t\t\t\toption.style.fontWeight === fontWeight\n\t\t) || selectOptions[ 0 ];\n\n\t// Adjusts screen reader description based on styles or weights.\n\tconst getDescribedBy = () => {\n\t\tif ( ! currentSelection ) {\n\t\t\treturn __( 'No selected font appearance' );\n\t\t}\n\n\t\tif ( ! hasFontStyles ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font weight.\n\t\t\t\t__( 'Currently selected font weight: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasFontWeights ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font style.\n\t\t\t\t__( 'Currently selected font style: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t// translators: %s: Currently selected font appearance.\n\t\t\t__( 'Currently selected font appearance: %s' ),\n\t\t\tcurrentSelection.name\n\t\t);\n\t};\n\n\treturn (\n\t\thasStylesOrWeights && (\n\t\t\t\n\t\t\t\t\tonChange( selectedItem.style )\n\t\t\t\t}\n\t\t\t/>\n\t\t)\n\t);\n}\n","export const BASE_DEFAULT_VALUE = 1.5;\nexport const STEP = 0.01;\n/**\n * A spin factor of 10 allows the spin controls to increment/decrement by 0.1.\n * e.g. A line-height value of 1.55 will increment to 1.65.\n */\nexport const SPIN_FACTOR = 10;\n/**\n * There are varying value types within LineHeightControl:\n *\n * {undefined} Initial value. No changes from the user.\n * {string} Input value. Value consumed/outputted by the input. Empty would be ''.\n * {number} Block attribute type. Input value needs to be converted for attribute setting.\n *\n * Note: If the value is undefined, the input requires it to be an empty string ('')\n * in order to be considered \"controlled\" by props (rather than internal state).\n */\nexport const RESET_VALUE = '';\n\n/**\n * Determines if the lineHeight attribute has been properly defined.\n *\n * @param {any} lineHeight The value to check.\n *\n * @return {boolean} Whether the lineHeight attribute is valid.\n */\nexport function isLineHeightDefined( lineHeight ) {\n\treturn lineHeight !== undefined && lineHeight !== RESET_VALUE;\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { __experimentalNumberControl as NumberControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBASE_DEFAULT_VALUE,\n\tRESET_VALUE,\n\tSTEP,\n\tSPIN_FACTOR,\n\tisLineHeightDefined,\n} from './utils';\n\nconst LineHeightControl = ( {\n\t/** Start opting into the larger default height that will become the default size in a future version. */\n\t__next40pxDefaultSize = false,\n\tvalue: lineHeight,\n\tonChange,\n\t__unstableInputWidth = '60px',\n\t...otherProps\n} ) => {\n\tconst isDefined = isLineHeightDefined( lineHeight );\n\n\tconst adjustNextValue = ( nextValue, wasTypedOrPasted ) => {\n\t\t// Set the next value without modification if lineHeight has been defined.\n\t\tif ( isDefined ) {\n\t\t\treturn nextValue;\n\t\t}\n\n\t\t/**\n\t\t * The following logic handles the initial spin up/down action\n\t\t * (from an undefined value state) so that the next values are better suited for\n\t\t * line-height rendering. For example, the first spin up should immediately\n\t\t * go to 1.6, rather than the normally expected 0.1.\n\t\t *\n\t\t * Spin up/down actions can be triggered by keydowns of the up/down arrow keys,\n\t\t * dragging the input or by clicking the spin buttons.\n\t\t */\n\t\tconst spin = STEP * SPIN_FACTOR;\n\t\tswitch ( `${ nextValue }` ) {\n\t\t\tcase `${ spin }`:\n\t\t\t\t// Increment by spin value.\n\t\t\t\treturn BASE_DEFAULT_VALUE + spin;\n\t\t\tcase '0': {\n\t\t\t\t// This means the user explicitly input '0', rather than using the\n\t\t\t\t// spin down action from an undefined value state.\n\t\t\t\tif ( wasTypedOrPasted ) {\n\t\t\t\t\treturn nextValue;\n\t\t\t\t}\n\t\t\t\t// Decrement by spin value.\n\t\t\t\treturn BASE_DEFAULT_VALUE - spin;\n\t\t\t}\n\t\t\tcase '':\n\t\t\t\treturn BASE_DEFAULT_VALUE;\n\t\t\tdefault:\n\t\t\t\treturn nextValue;\n\t\t}\n\t};\n\n\tconst stateReducer = ( state, action ) => {\n\t\t// Be careful when changing this — cross-browser behavior of the\n\t\t// `inputType` field in `input` events are inconsistent.\n\t\t// For example, Firefox emits an input event with inputType=\"insertReplacementText\"\n\t\t// on spin button clicks, while other browsers do not even emit an input event.\n\t\tconst wasTypedOrPasted = [ 'insertText', 'insertFromPaste' ].includes(\n\t\t\taction.payload.event.nativeEvent?.inputType\n\t\t);\n\t\tconst value = adjustNextValue( state.value, wasTypedOrPasted );\n\t\treturn { ...state, value };\n\t};\n\n\tconst value = isDefined ? lineHeight : RESET_VALUE;\n\n\tconst handleOnChange = ( nextValue, { event } ) => {\n\t\tif ( nextValue === '' ) {\n\t\t\tonChange();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.type === 'click' ) {\n\t\t\tonChange( adjustNextValue( `${ nextValue }`, false ) );\n\t\t\treturn;\n\t\t}\n\n\t\tonChange( `${ nextValue }` );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t
    \n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/line-height-control/README.md\n */\nexport default LineHeightControl;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../../components/use-settings';\n\n/**\n * Control for letter-spacing.\n *\n * @param {Object} props Component props.\n * @param {boolean} props.__next40pxDefaultSize Start opting into the larger default height that will become the default size in a future version.\n * @param {string} props.value Currently selected letter-spacing.\n * @param {Function} props.onChange Handles change in letter-spacing selection.\n * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.\n *\n * @return {Element} Letter-spacing control.\n */\nexport default function LetterSpacingControl( {\n\t__next40pxDefaultSize = false,\n\tvalue,\n\tonChange,\n\t__unstableInputWidth = '60px',\n\t...otherProps\n} ) {\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ 'px', 'em', 'rem' ],\n\t\tdefaultValues: { px: 2, em: 0.2, rem: 0.2 },\n\t} );\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignLeft = (\n\t\n\t\t\n\t\n);\n\nexport default alignLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignCenter = (\n\t\n\t\t\n\t\n);\n\nexport default alignCenter;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignRight = (\n\t\n\t\t\n\t\n);\n\nexport default alignRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst alignJustify = (\n\t\n\t\t\n\t\n);\n\nexport default alignJustify;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\talignLeft,\n\talignCenter,\n\talignRight,\n\talignJustify,\n} from '@wordpress/icons';\nimport { useMemo } from '@wordpress/element';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst TEXT_ALIGNMENT_OPTIONS = [\n\t{\n\t\tlabel: __( 'Align text left' ),\n\t\tvalue: 'left',\n\t\ticon: alignLeft,\n\t},\n\t{\n\t\tlabel: __( 'Align text center' ),\n\t\tvalue: 'center',\n\t\ticon: alignCenter,\n\t},\n\t{\n\t\tlabel: __( 'Align text right' ),\n\t\tvalue: 'right',\n\t\ticon: alignRight,\n\t},\n\t{\n\t\tlabel: __( 'Justify text' ),\n\t\tvalue: 'justify',\n\t\ticon: alignJustify,\n\t},\n];\n\nconst DEFAULT_OPTIONS = [ 'left', 'center', 'right' ];\n\n/**\n * Control to facilitate text alignment selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.className Class name to add to the control.\n * @param {string} props.value Currently selected text alignment.\n * @param {Function} props.onChange Handles change in text alignment selection.\n * @param {string[]} props.options Array of text alignment options to display.\n *\n * @return {Element} Text alignment control.\n */\nexport default function TextAlignmentControl( {\n\tclassName,\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_OPTIONS,\n} ) {\n\tconst validOptions = useMemo(\n\t\t() =>\n\t\t\tTEXT_ALIGNMENT_OPTIONS.filter( ( option ) =>\n\t\t\t\toptions.includes( option.value )\n\t\t\t),\n\t\t[ options ]\n\t);\n\n\tif ( ! validOptions.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ validOptions.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst reset = (\n\t\n\t\t\n\t\n);\n\nexport default reset;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatUppercase = (\n\t\n\t\t\n\t\n);\n\nexport default formatUppercase;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatLowercase = (\n\t\n\t\t\n\t\n);\n\nexport default formatLowercase;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatCapitalize = (\n\t\n\t\t\n\t\n);\n\nexport default formatCapitalize;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\treset,\n\tformatCapitalize,\n\tformatLowercase,\n\tformatUppercase,\n} from '@wordpress/icons';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst TEXT_TRANSFORMS = [\n\t{\n\t\tlabel: __( 'None' ),\n\t\tvalue: 'none',\n\t\ticon: reset,\n\t},\n\t{\n\t\tlabel: __( 'Uppercase' ),\n\t\tvalue: 'uppercase',\n\t\ticon: formatUppercase,\n\t},\n\t{\n\t\tlabel: __( 'Lowercase' ),\n\t\tvalue: 'lowercase',\n\t\ticon: formatLowercase,\n\t},\n\t{\n\t\tlabel: __( 'Capitalize' ),\n\t\tvalue: 'capitalize',\n\t\ticon: formatCapitalize,\n\t},\n];\n\n/**\n * Control to facilitate text transform selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.className Class name to add to the control.\n * @param {string} props.value Currently selected text transform.\n * @param {Function} props.onChange Handles change in text transform selection.\n *\n * @return {Element} Text transform control.\n */\nexport default function TextTransformControl( { className, value, onChange } ) {\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ TEXT_TRANSFORMS.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatUnderline = (\n\t\n\t\t\n\t\n);\n\nexport default formatUnderline;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst formatStrikethrough = (\n\t\n\t\t\n\t\n);\n\nexport default formatStrikethrough;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { reset, formatStrikethrough, formatUnderline } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst TEXT_DECORATIONS = [\n\t{\n\t\tlabel: __( 'None' ),\n\t\tvalue: 'none',\n\t\ticon: reset,\n\t},\n\t{\n\t\tlabel: __( 'Underline' ),\n\t\tvalue: 'underline',\n\t\ticon: formatUnderline,\n\t},\n\t{\n\t\tlabel: __( 'Strikethrough' ),\n\t\tvalue: 'line-through',\n\t\ticon: formatStrikethrough,\n\t},\n];\n\n/**\n * Control to facilitate text decoration selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.value Currently selected text decoration.\n * @param {Function} props.onChange Handles change in text decoration selection.\n * @param {string} props.className Additional class name to apply.\n *\n * @return {Element} Text decoration control.\n */\nexport default function TextDecorationControl( {\n\tvalue,\n\tonChange,\n\tclassName,\n} ) {\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ TEXT_DECORATIONS.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst textHorizontal = (\n\t\n\t\t\n\t\n);\n\nexport default textHorizontal;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst textVertical = (\n\t\n\t\t\n\t\n);\n\nexport default textVertical;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { textHorizontal, textVertical } from '@wordpress/icons';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n} from '@wordpress/components';\n\nconst WRITING_MODES = [\n\t{\n\t\tlabel: __( 'Horizontal' ),\n\t\tvalue: 'horizontal-tb',\n\t\ticon: textHorizontal,\n\t},\n\t{\n\t\tlabel: __( 'Vertical' ),\n\t\tvalue: isRTL() ? 'vertical-lr' : 'vertical-rl',\n\t\ticon: textVertical,\n\t},\n];\n\n/**\n * Control to facilitate writing mode selections.\n *\n * @param {Object} props Component props.\n * @param {string} props.className Class name to add to the control.\n * @param {string} props.value Currently selected writing mode.\n * @param {Function} props.onChange Handles change in the writing mode selection.\n *\n * @return {Element} Writing Mode control.\n */\nexport default function WritingModeControl( { className, value, onChange } ) {\n\treturn (\n\t\t {\n\t\t\t\tonChange( newValue === value ? undefined : newValue );\n\t\t\t} }\n\t\t>\n\t\t\t{ WRITING_MODES.map( ( option ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tFontSizePicker,\n\t__experimentalNumberControl as NumberControl,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useMemo, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport FontFamilyControl from '../font-family';\nimport FontAppearanceControl from '../font-appearance-control';\nimport LineHeightControl from '../line-height-control';\nimport LetterSpacingControl from '../letter-spacing-control';\nimport TextAlignmentControl from '../text-alignment-control';\nimport TextTransformControl from '../text-transform-control';\nimport TextDecorationControl from '../text-decoration-control';\nimport WritingModeControl from '../writing-mode-control';\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport {\n\tgetMergedFontFamiliesAndFontFamilyFaces,\n\tfindNearestStyleAndWeight,\n} from './typography-utils';\n\nconst MIN_TEXT_COLUMNS = 1;\nconst MAX_TEXT_COLUMNS = 6;\n\nexport function useHasTypographyPanel( settings ) {\n\tconst hasFontFamily = useHasFontFamilyControl( settings );\n\tconst hasLineHeight = useHasLineHeightControl( settings );\n\tconst hasFontAppearance = useHasAppearanceControl( settings );\n\tconst hasLetterSpacing = useHasLetterSpacingControl( settings );\n\tconst hasTextAlign = useHasTextAlignmentControl( settings );\n\tconst hasTextTransform = useHasTextTransformControl( settings );\n\tconst hasTextDecoration = useHasTextDecorationControl( settings );\n\tconst hasWritingMode = useHasWritingModeControl( settings );\n\tconst hasTextColumns = useHasTextColumnsControl( settings );\n\tconst hasFontSize = useHasFontSizeControl( settings );\n\n\treturn (\n\t\thasFontFamily ||\n\t\thasLineHeight ||\n\t\thasFontAppearance ||\n\t\thasLetterSpacing ||\n\t\thasTextAlign ||\n\t\thasTextTransform ||\n\t\thasFontSize ||\n\t\thasTextDecoration ||\n\t\thasWritingMode ||\n\t\thasTextColumns\n\t);\n}\n\nfunction useHasFontSizeControl( settings ) {\n\treturn (\n\t\t( settings?.typography?.defaultFontSizes !== false &&\n\t\t\tsettings?.typography?.fontSizes?.default?.length ) ||\n\t\tsettings?.typography?.fontSizes?.theme?.length ||\n\t\tsettings?.typography?.fontSizes?.custom?.length ||\n\t\tsettings?.typography?.customFontSize\n\t);\n}\n\nfunction useHasFontFamilyControl( settings ) {\n\treturn [ 'default', 'theme', 'custom' ].some(\n\t\t( key ) => settings?.typography?.fontFamilies?.[ key ]?.length\n\t);\n}\n\nfunction useHasLineHeightControl( settings ) {\n\treturn settings?.typography?.lineHeight;\n}\n\nfunction useHasAppearanceControl( settings ) {\n\treturn settings?.typography?.fontStyle || settings?.typography?.fontWeight;\n}\n\nfunction useAppearanceControlLabel( settings ) {\n\tif ( ! settings?.typography?.fontStyle ) {\n\t\treturn __( 'Font weight' );\n\t}\n\tif ( ! settings?.typography?.fontWeight ) {\n\t\treturn __( 'Font style' );\n\t}\n\treturn __( 'Appearance' );\n}\n\nfunction useHasLetterSpacingControl( settings ) {\n\treturn settings?.typography?.letterSpacing;\n}\n\nfunction useHasTextTransformControl( settings ) {\n\treturn settings?.typography?.textTransform;\n}\n\nfunction useHasTextAlignmentControl( settings ) {\n\treturn settings?.typography?.textAlign;\n}\n\nfunction useHasTextDecorationControl( settings ) {\n\treturn settings?.typography?.textDecoration;\n}\n\nfunction useHasWritingModeControl( settings ) {\n\treturn settings?.typography?.writingMode;\n}\n\nfunction useHasTextColumnsControl( settings ) {\n\treturn settings?.typography?.textColumns;\n}\n\n/**\n * Concatenate all the font sizes into a single list for the font size picker.\n *\n * @param {Object} settings The global styles settings.\n *\n * @return {Array} The merged font sizes.\n */\nfunction getMergedFontSizes( settings ) {\n\tconst fontSizes = settings?.typography?.fontSizes;\n\tconst defaultFontSizesEnabled = !! settings?.typography?.defaultFontSizes;\n\treturn [\n\t\t...( fontSizes?.custom ?? [] ),\n\t\t...( fontSizes?.theme ?? [] ),\n\t\t...( defaultFontSizesEnabled ? fontSizes?.default ?? [] : [] ),\n\t];\n}\n\nfunction TypographyToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tfontFamily: true,\n\tfontSize: true,\n\tfontAppearance: true,\n\tlineHeight: true,\n\tletterSpacing: true,\n\ttextAlign: true,\n\ttextTransform: true,\n\ttextDecoration: true,\n\twritingMode: true,\n\ttextColumns: true,\n};\n\nexport default function TypographyPanel( {\n\tas: Wrapper = TypographyToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\n\t// Font Family\n\tconst hasFontFamilyEnabled = useHasFontFamilyControl( settings );\n\tconst fontFamily = decodeValue( inheritedValue?.typography?.fontFamily );\n\tconst { fontFamilies, fontFamilyFaces } = useMemo( () => {\n\t\treturn getMergedFontFamiliesAndFontFamilyFaces( settings, fontFamily );\n\t}, [ settings, fontFamily ] );\n\n\tconst setFontFamily = ( newValue ) => {\n\t\tconst slug = fontFamilies?.find(\n\t\t\t( { fontFamily: f } ) => f === newValue\n\t\t)?.slug;\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'fontFamily' ],\n\t\t\t\tslug\n\t\t\t\t\t? `var:preset|font-family|${ slug }`\n\t\t\t\t\t: newValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasFontFamily = () => !! value?.typography?.fontFamily;\n\tconst resetFontFamily = () => setFontFamily( undefined );\n\n\t// Font Size\n\tconst hasFontSizeEnabled = useHasFontSizeControl( settings );\n\tconst disableCustomFontSizes = ! settings?.typography?.customFontSize;\n\tconst mergedFontSizes = getMergedFontSizes( settings );\n\n\tconst fontSize = decodeValue( inheritedValue?.typography?.fontSize );\n\tconst setFontSize = ( newValue, metadata ) => {\n\t\tconst actualValue = !! metadata?.slug\n\t\t\t? `var:preset|font-size|${ metadata?.slug }`\n\t\t\t: newValue;\n\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'fontSize' ],\n\t\t\t\tactualValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasFontSize = () => !! value?.typography?.fontSize;\n\tconst resetFontSize = () => setFontSize( undefined );\n\n\t// Appearance\n\tconst hasAppearanceControl = useHasAppearanceControl( settings );\n\tconst appearanceControlLabel = useAppearanceControlLabel( settings );\n\tconst hasFontStyles = settings?.typography?.fontStyle;\n\tconst hasFontWeights = settings?.typography?.fontWeight;\n\tconst fontStyle = decodeValue( inheritedValue?.typography?.fontStyle );\n\tconst fontWeight = decodeValue( inheritedValue?.typography?.fontWeight );\n\tconst { nearestFontStyle, nearestFontWeight } = findNearestStyleAndWeight(\n\t\tfontFamilyFaces,\n\t\tfontStyle,\n\t\tfontWeight\n\t);\n\tconst setFontAppearance = useCallback(\n\t\t( { fontStyle: newFontStyle, fontWeight: newFontWeight } ) => {\n\t\t\t// Only update the font style and weight if they have changed.\n\t\t\tif ( newFontStyle !== fontStyle || newFontWeight !== fontWeight ) {\n\t\t\t\tonChange( {\n\t\t\t\t\t...value,\n\t\t\t\t\ttypography: {\n\t\t\t\t\t\t...value?.typography,\n\t\t\t\t\t\tfontStyle: newFontStyle || undefined,\n\t\t\t\t\t\tfontWeight: newFontWeight || undefined,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ fontStyle, fontWeight, onChange, value ]\n\t);\n\tconst hasFontAppearance = () =>\n\t\t!! value?.typography?.fontStyle || !! value?.typography?.fontWeight;\n\tconst resetFontAppearance = useCallback( () => {\n\t\tsetFontAppearance( {} );\n\t}, [ setFontAppearance ] );\n\n\t// Check if previous font style and weight values are available in the new font family.\n\tuseEffect( () => {\n\t\tif ( nearestFontStyle && nearestFontWeight ) {\n\t\t\tsetFontAppearance( {\n\t\t\t\tfontStyle: nearestFontStyle,\n\t\t\t\tfontWeight: nearestFontWeight,\n\t\t\t} );\n\t\t} else {\n\t\t\t// Reset font appearance if there are no available styles or weights.\n\t\t\tresetFontAppearance();\n\t\t}\n\t}, [\n\t\tnearestFontStyle,\n\t\tnearestFontWeight,\n\t\tresetFontAppearance,\n\t\tsetFontAppearance,\n\t] );\n\n\t// Line Height\n\tconst hasLineHeightEnabled = useHasLineHeightControl( settings );\n\tconst lineHeight = decodeValue( inheritedValue?.typography?.lineHeight );\n\tconst setLineHeight = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'lineHeight' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasLineHeight = () => value?.typography?.lineHeight !== undefined;\n\tconst resetLineHeight = () => setLineHeight( undefined );\n\n\t// Letter Spacing\n\tconst hasLetterSpacingControl = useHasLetterSpacingControl( settings );\n\tconst letterSpacing = decodeValue(\n\t\tinheritedValue?.typography?.letterSpacing\n\t);\n\tconst setLetterSpacing = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'letterSpacing' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasLetterSpacing = () => !! value?.typography?.letterSpacing;\n\tconst resetLetterSpacing = () => setLetterSpacing( undefined );\n\n\t// Text Columns\n\tconst hasTextColumnsControl = useHasTextColumnsControl( settings );\n\tconst textColumns = decodeValue( inheritedValue?.typography?.textColumns );\n\tconst setTextColumns = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textColumns' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextColumns = () => !! value?.typography?.textColumns;\n\tconst resetTextColumns = () => setTextColumns( undefined );\n\n\t// Text Transform\n\tconst hasTextTransformControl = useHasTextTransformControl( settings );\n\tconst textTransform = decodeValue(\n\t\tinheritedValue?.typography?.textTransform\n\t);\n\tconst setTextTransform = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textTransform' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextTransform = () => !! value?.typography?.textTransform;\n\tconst resetTextTransform = () => setTextTransform( undefined );\n\n\t// Text Decoration\n\tconst hasTextDecorationControl = useHasTextDecorationControl( settings );\n\tconst textDecoration = decodeValue(\n\t\tinheritedValue?.typography?.textDecoration\n\t);\n\tconst setTextDecoration = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textDecoration' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextDecoration = () => !! value?.typography?.textDecoration;\n\tconst resetTextDecoration = () => setTextDecoration( undefined );\n\n\t// Text Orientation\n\tconst hasWritingModeControl = useHasWritingModeControl( settings );\n\tconst writingMode = decodeValue( inheritedValue?.typography?.writingMode );\n\tconst setWritingMode = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'writingMode' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasWritingMode = () => !! value?.typography?.writingMode;\n\tconst resetWritingMode = () => setWritingMode( undefined );\n\n\t// Text Alignment\n\tconst hasTextAlignmentControl = useHasTextAlignmentControl( settings );\n\n\tconst textAlign = decodeValue( inheritedValue?.typography?.textAlign );\n\tconst setTextAlign = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'typography', 'textAlign' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasTextAlign = () => !! value?.typography?.textAlign;\n\tconst resetTextAlign = () => setTextAlign( undefined );\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\ttypography: {},\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t{ hasFontFamilyEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasFontSizeEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasAppearanceControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasLineHeightEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasLetterSpacingControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextColumnsControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextDecorationControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasWritingModeControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextTransformControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ hasTextAlignmentControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport LineHeightControl from '../components/line-height-control';\nimport { cleanEmptyObject } from './utils';\nimport { useSettings } from '../components/use-settings';\n\nexport const LINE_HEIGHT_SUPPORT_KEY = 'typography.lineHeight';\n\n/**\n * Inspector control panel containing the line height related configuration\n *\n * @param {Object} props\n *\n * @return {Element} Line height edit element.\n */\nexport function LineHeightEdit( props ) {\n\tconst {\n\t\tattributes: { style },\n\t\tsetAttributes,\n\t} = props;\n\n\tconst onChange = ( newLineHeightValue ) => {\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\ttypography: {\n\t\t\t\t...style?.typography,\n\t\t\t\tlineHeight: newLineHeightValue,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( { style: cleanEmptyObject( newStyle ) } );\n\t};\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Custom hook that checks if line-height settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether setting is disabled.\n */\nexport function useIsLineHeightDisabled( { name: blockName } = {} ) {\n\tconst [ isEnabled ] = useSettings( 'typography.lineHeight' );\n\n\treturn (\n\t\t! isEnabled || ! hasBlockSupport( blockName, LINE_HEIGHT_SUPPORT_KEY )\n\t);\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"tokenList\"];","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport TokenList from '@wordpress/token-list';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { shouldSkipSerialization } from './utils';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\nimport { unlock } from '../lock-unlock';\n\nexport const FONT_FAMILY_SUPPORT_KEY = 'typography.__experimentalFontFamily';\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `fontFamily` attribute.\n *\n * @param {Object} settings Original block settings\n * @return {Object} Filtered block settings\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FONT_FAMILY_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify a default value if needed.\n\tif ( ! settings.attributes.fontFamily ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tfontFamily: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject font family.\n *\n * @param {Object} props Additional props applied to save element\n * @param {Object} blockType Block type\n * @param {Object} attributes Block attributes\n * @return {Object} Filtered props applied to save element\n */\nfunction addSaveProps( props, blockType, attributes ) {\n\tif ( ! hasBlockSupport( blockType, FONT_FAMILY_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization(\n\t\t\tblockType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'fontFamily'\n\t\t)\n\t) {\n\t\treturn props;\n\t}\n\n\tif ( ! attributes?.fontFamily ) {\n\t\treturn props;\n\t}\n\n\t// Use TokenList to dedupe classes.\n\tconst classes = new TokenList( props.className );\n\tclasses.add( `has-${ kebabCase( attributes?.fontFamily ) }-font-family` );\n\tconst newClassName = classes.value;\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\nfunction useBlockProps( { name, fontFamily } ) {\n\treturn addSaveProps( {}, name, { fontFamily } );\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fontFamily' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, FONT_FAMILY_SUPPORT_KEY );\n\t},\n};\n\n/**\n * Resets the font family block support attribute. This can be used when\n * disabling the font family support controls for a block via a progressive\n * discovery panel.\n *\n * @param {Object} props Block props.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetFontFamily( { setAttributes } ) {\n\tsetAttributes( { fontFamily: undefined } );\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/fontFamily/addAttribute',\n\taddAttributes\n);\n","/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Returns the font size object based on an array of named font sizes and the namedFontSize and customFontSize values.\n * \tIf namedFontSize is undefined or not found in fontSizes an object with just the size value based on customFontSize is returned.\n *\n * @param {Array} fontSizes Array of font size objects containing at least the \"name\" and \"size\" values as properties.\n * @param {?string} fontSizeAttribute Content of the font size attribute (slug).\n * @param {?number} customFontSizeAttribute Contents of the custom font size attribute (value).\n *\n * @return {?Object} If fontSizeAttribute is set and an equal slug is found in fontSizes it returns the font size object for that slug.\n * \t\t\t\t\t Otherwise, an object with just the size value based on customFontSize is returned.\n */\nexport const getFontSize = (\n\tfontSizes,\n\tfontSizeAttribute,\n\tcustomFontSizeAttribute\n) => {\n\tif ( fontSizeAttribute ) {\n\t\tconst fontSizeObject = fontSizes?.find(\n\t\t\t( { slug } ) => slug === fontSizeAttribute\n\t\t);\n\t\tif ( fontSizeObject ) {\n\t\t\treturn fontSizeObject;\n\t\t}\n\t}\n\treturn {\n\t\tsize: customFontSizeAttribute,\n\t};\n};\n\n/**\n * Returns the corresponding font size object for a given value.\n *\n * @param {Array} fontSizes Array of font size objects.\n * @param {number} value Font size value.\n *\n * @return {Object} Font size object.\n */\nexport function getFontSizeObjectByValue( fontSizes, value ) {\n\tconst fontSizeObject = fontSizes?.find( ( { size } ) => size === value );\n\tif ( fontSizeObject ) {\n\t\treturn fontSizeObject;\n\t}\n\n\treturn {\n\t\tsize: value,\n\t};\n}\n\n/**\n * Returns a class based on fontSizeName.\n *\n * @param {string} fontSizeSlug Slug of the fontSize.\n *\n * @return {string | undefined} String with the class corresponding to the fontSize passed.\n * The class is generated by appending 'has-' followed by fontSizeSlug in kebabCase and ending with '-font-size'.\n */\nexport function getFontSizeClass( fontSizeSlug ) {\n\tif ( ! fontSizeSlug ) {\n\t\treturn;\n\t}\n\n\treturn `has-${ kebabCase( fontSizeSlug ) }-font-size`;\n}\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport TokenList from '@wordpress/token-list';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetFontSize,\n\tgetFontSizeClass,\n\tgetFontSizeObjectByValue,\n\tFontSizePicker,\n} from '../components/font-sizes';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\nimport {\n\tcleanEmptyObject,\n\ttransformStyles,\n\tshouldSkipSerialization,\n} from './utils';\nimport { useSettings } from '../components/use-settings';\nimport { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';\n\nexport const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';\n\n/**\n * Filters registered block settings, extending attributes to include\n * `fontSize` and `fontWeight` attributes.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify a default value if needed.\n\tif ( ! settings.attributes.fontSize ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tfontSize: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject font size.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif ( ! hasBlockSupport( blockNameOrType, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization(\n\t\t\tblockNameOrType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'fontSize'\n\t\t)\n\t) {\n\t\treturn props;\n\t}\n\n\t// Use TokenList to dedupe classes.\n\tconst classes = new TokenList( props.className );\n\tclasses.add( getFontSizeClass( attributes.fontSize ) );\n\tconst newClassName = classes.value;\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Inspector control panel containing the font size related configuration\n *\n * @param {Object} props\n *\n * @return {Element} Font size edit element.\n */\nexport function FontSizeEdit( props ) {\n\tconst {\n\t\tattributes: { fontSize, style },\n\t\tsetAttributes,\n\t} = props;\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\n\tconst onChange = ( value ) => {\n\t\tconst fontSizeSlug = getFontSizeObjectByValue( fontSizes, value ).slug;\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\ttypography: {\n\t\t\t\t\t...style?.typography,\n\t\t\t\t\tfontSize: fontSizeSlug ? undefined : value,\n\t\t\t\t},\n\t\t\t} ),\n\t\t\tfontSize: fontSizeSlug,\n\t\t} );\n\t};\n\n\tconst fontSizeObject = getFontSize(\n\t\tfontSizes,\n\t\tfontSize,\n\t\tstyle?.typography?.fontSize\n\t);\n\n\tconst fontSizeValue =\n\t\tfontSizeObject?.size || style?.typography?.fontSize || fontSize;\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Custom hook that checks if font-size settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether setting is disabled.\n */\nexport function useIsFontSizeDisabled( { name: blockName } = {} ) {\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\tconst hasFontSizes = !! fontSizes?.length;\n\n\treturn (\n\t\t! hasBlockSupport( blockName, FONT_SIZE_SUPPORT_KEY ) || ! hasFontSizes\n\t);\n}\n\nfunction useBlockProps( { name, fontSize, style } ) {\n\tconst [ fontSizes, fluidTypographySettings, layoutSettings ] = useSettings(\n\t\t'typography.fontSizes',\n\t\t'typography.fluid',\n\t\t'layout'\n\t);\n\n\t/*\n\t * Only add inline styles if the block supports font sizes,\n\t * doesn't skip serialization of font sizes,\n\t * and has either a custom font size or a preset font size.\n\t */\n\tif (\n\t\t! hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY ) ||\n\t\tshouldSkipSerialization( name, TYPOGRAPHY_SUPPORT_KEY, 'fontSize' ) ||\n\t\t( ! fontSize && ! style?.typography?.fontSize )\n\t) {\n\t\treturn;\n\t}\n\n\tlet props;\n\n\tif ( style?.typography?.fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getTypographyFontSizeValue(\n\t\t\t\t\t{ size: style.typography.fontSize },\n\t\t\t\t\t{\n\t\t\t\t\t\ttypography: {\n\t\t\t\t\t\t\tfluid: fluidTypographySettings,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: layoutSettings,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getFontSize(\n\t\t\t\t\tfontSizes,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tstyle?.typography?.fontSize\n\t\t\t\t).size,\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( ! props ) {\n\t\treturn;\n\t}\n\n\treturn addSaveProps( props, name, { fontSize } );\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fontSize', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY );\n\t},\n};\n\nconst MIGRATION_PATHS = {\n\tfontSize: [ [ 'fontSize' ], [ 'style', 'typography', 'fontSize' ] ],\n};\n\nfunction addTransforms( result, source, index, results ) {\n\tconst destinationBlockType = result.name;\n\tconst activeSupports = {\n\t\tfontSize: hasBlockSupport(\n\t\t\tdestinationBlockType,\n\t\t\tFONT_SIZE_SUPPORT_KEY\n\t\t),\n\t};\n\treturn transformStyles(\n\t\tactiveSupports,\n\t\tMIGRATION_PATHS,\n\t\tresult,\n\t\tsource,\n\t\tindex,\n\t\tresults\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/font/addAttribute',\n\taddAttributes\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/font-size/addTransforms',\n\taddTransforms\n);\n","/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { ToolbarDropdownMenu, ToolbarGroup } from '@wordpress/components';\nimport { alignLeft, alignRight, alignCenter } from '@wordpress/icons';\n\nconst DEFAULT_ALIGNMENT_CONTROLS = [\n\t{\n\t\ticon: alignLeft,\n\t\ttitle: __( 'Align text left' ),\n\t\talign: 'left',\n\t},\n\t{\n\t\ticon: alignCenter,\n\t\ttitle: __( 'Align text center' ),\n\t\talign: 'center',\n\t},\n\t{\n\t\ticon: alignRight,\n\t\ttitle: __( 'Align text right' ),\n\t\talign: 'right',\n\t},\n];\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nfunction AlignmentUI( {\n\tvalue,\n\tonChange,\n\talignmentControls = DEFAULT_ALIGNMENT_CONTROLS,\n\tlabel = __( 'Align text' ),\n\tdescription = __( 'Change text alignment' ),\n\tisCollapsed = true,\n\tisToolbar,\n} ) {\n\tfunction applyOrUnset( align ) {\n\t\treturn () => onChange( value === align ? undefined : align );\n\t}\n\n\tconst activeAlignment = alignmentControls.find(\n\t\t( control ) => control.align === value\n\t);\n\n\tfunction setIcon() {\n\t\tif ( activeAlignment ) {\n\t\t\treturn activeAlignment.icon;\n\t\t}\n\t\treturn isRTL() ? alignRight : alignLeft;\n\t}\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst extraProps = isToolbar\n\t\t? { isCollapsed }\n\t\t: {\n\t\t\t\ttoggleProps: {\n\t\t\t\t\tdescription,\n\t\t\t\t},\n\t\t\t\tpopoverProps: POPOVER_PROPS,\n\t\t };\n\n\treturn (\n\t\t {\n\t\t\t\tconst { align } = control;\n\t\t\t\tconst isActive = value === align;\n\n\t\t\t\treturn {\n\t\t\t\t\t...control,\n\t\t\t\t\tisActive,\n\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\tonClick: applyOrUnset( align ),\n\t\t\t\t};\n\t\t\t} ) }\n\t\t\t{ ...extraProps }\n\t\t/>\n\t);\n}\n\nexport default AlignmentUI;\n","/**\n * Internal dependencies\n */\nimport AlignmentUI from './ui';\n\nconst AlignmentControl = ( props ) => {\n\treturn ;\n};\n\nconst AlignmentToolbar = ( props ) => {\n\treturn ;\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/alignment-control/README.md\n */\nexport { AlignmentControl, AlignmentToolbar };\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { alignLeft, alignRight, alignCenter } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { AlignmentControl, BlockControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport {\n\tcleanEmptyObject,\n\tshouldSkipSerialization,\n\tuseBlockSettings,\n} from './utils';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\n\nexport const TEXT_ALIGN_SUPPORT_KEY = 'typography.textAlign';\n\nconst TEXT_ALIGNMENT_OPTIONS = [\n\t{\n\t\ticon: alignLeft,\n\t\ttitle: __( 'Align text left' ),\n\t\talign: 'left',\n\t},\n\t{\n\t\ticon: alignCenter,\n\t\ttitle: __( 'Align text center' ),\n\t\talign: 'center',\n\t},\n\t{\n\t\ticon: alignRight,\n\t\ttitle: __( 'Align text right' ),\n\t\talign: 'right',\n\t},\n];\n\nconst VALID_TEXT_ALIGNMENTS = [ 'left', 'center', 'right' ];\nconst NO_TEXT_ALIGNMENTS = [];\n\n/**\n * Returns the valid text alignments.\n * Takes into consideration the text aligns supported by a block.\n * Exported just for testing purposes, not exported outside the module.\n *\n * @param {?boolean|string[]} blockTextAlign Text aligns supported by the block.\n *\n * @return {string[]} Valid text alignments.\n */\nexport function getValidTextAlignments( blockTextAlign ) {\n\tif ( Array.isArray( blockTextAlign ) ) {\n\t\treturn VALID_TEXT_ALIGNMENTS.filter( ( textAlign ) =>\n\t\t\tblockTextAlign.includes( textAlign )\n\t\t);\n\t}\n\n\treturn blockTextAlign === true ? VALID_TEXT_ALIGNMENTS : NO_TEXT_ALIGNMENTS;\n}\n\nfunction BlockEditTextAlignmentToolbarControlsPure( {\n\tstyle,\n\tname: blockName,\n\tsetAttributes,\n} ) {\n\tconst settings = useBlockSettings( blockName );\n\tconst hasTextAlignControl = settings?.typography?.textAlign;\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( ! hasTextAlignControl || blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst validTextAlignments = getValidTextAlignments(\n\t\tgetBlockSupport( blockName, TEXT_ALIGN_SUPPORT_KEY )\n\t);\n\tif ( ! validTextAlignments.length ) {\n\t\treturn null;\n\t}\n\n\tconst textAlignmentControls = TEXT_ALIGNMENT_OPTIONS.filter( ( control ) =>\n\t\tvalidTextAlignments.includes( control.align )\n\t);\n\n\tconst onChange = ( newTextAlignValue ) => {\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\ttypography: {\n\t\t\t\t...style?.typography,\n\t\t\t\ttextAlign: newTextAlignValue,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( { style: cleanEmptyObject( newStyle ) } );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tedit: BlockEditTextAlignmentToolbarControlsPure,\n\tuseBlockProps,\n\taddSaveProps: addAssignedTextAlign,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, TEXT_ALIGN_SUPPORT_KEY, false );\n\t},\n};\n\nfunction useBlockProps( { name, style } ) {\n\tif ( ! style?.typography?.textAlign ) {\n\t\treturn null;\n\t}\n\n\tconst validTextAlignments = getValidTextAlignments(\n\t\tgetBlockSupport( name, TEXT_ALIGN_SUPPORT_KEY )\n\t);\n\n\tif ( ! validTextAlignments.length ) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization( name, TYPOGRAPHY_SUPPORT_KEY, 'textAlign' )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst textAlign = style.typography.textAlign;\n\n\tconst className = clsx( {\n\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t} );\n\treturn { className };\n}\n\n/**\n * Override props assigned to save component to inject text alignment class\n * name if block supports it.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addAssignedTextAlign( props, blockType, attributes ) {\n\tif ( ! attributes?.style?.typography?.textAlign ) {\n\t\treturn props;\n\t}\n\n\tconst { textAlign } = attributes.style.typography;\n\tconst blockTextAlign = getBlockSupport( blockType, TEXT_ALIGN_SUPPORT_KEY );\n\tconst isTextAlignValid =\n\t\tgetValidTextAlignments( blockTextAlign ).includes( textAlign );\n\tif (\n\t\tisTextAlignValid &&\n\t\t! shouldSkipSerialization(\n\t\t\tblockType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'textAlign'\n\t\t)\n\t) {\n\t\tprops.className = clsx(\n\t\t\t`has-text-align-${ textAlign }`,\n\t\t\tprops.className\n\t\t);\n\t}\n\treturn props;\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useMemo, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tdefault as StylesTypographyPanel,\n\tuseHasTypographyPanel,\n} from '../components/global-styles/typography-panel';\n\nimport { LINE_HEIGHT_SUPPORT_KEY } from './line-height';\nimport { FONT_FAMILY_SUPPORT_KEY } from './font-family';\nimport { FONT_SIZE_SUPPORT_KEY } from './font-size';\nimport { TEXT_ALIGN_SUPPORT_KEY } from './text-align';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nfunction omit( object, keys ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )\n\t);\n}\n\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\nexport const TYPOGRAPHY_SUPPORT_KEY = 'typography';\nexport const TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_ALIGN_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n];\n\nfunction styleToAttributes( style ) {\n\tconst updatedStyle = { ...omit( style, [ 'fontFamily' ] ) };\n\tconst fontSizeValue = style?.typography?.fontSize;\n\tconst fontFamilyValue = style?.typography?.fontFamily;\n\tconst fontSizeSlug = fontSizeValue?.startsWith( 'var:preset|font-size|' )\n\t\t? fontSizeValue.substring( 'var:preset|font-size|'.length )\n\t\t: undefined;\n\tconst fontFamilySlug = fontFamilyValue?.startsWith(\n\t\t'var:preset|font-family|'\n\t)\n\t\t? fontFamilyValue.substring( 'var:preset|font-family|'.length )\n\t\t: undefined;\n\tupdatedStyle.typography = {\n\t\t...omit( updatedStyle.typography, [ 'fontFamily' ] ),\n\t\tfontSize: fontSizeSlug ? undefined : fontSizeValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tfontFamily: fontFamilySlug,\n\t\tfontSize: fontSizeSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\ttypography: {\n\t\t\t...attributes.style?.typography,\n\t\t\tfontFamily: attributes.fontFamily\n\t\t\t\t? 'var:preset|font-family|' + attributes.fontFamily\n\t\t\t\t: undefined,\n\t\t\tfontSize: attributes.fontSize\n\t\t\t\t? 'var:preset|font-size|' + attributes.fontSize\n\t\t\t\t: attributes.style?.typography?.fontSize,\n\t\t},\n\t};\n}\n\nfunction TypographyInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function TypographyPanel( { clientId, name, setAttributes, settings } ) {\n\tfunction selector( select ) {\n\t\tconst { style, fontFamily, fontSize } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, fontFamily, fontSize };\n\t}\n\tconst { style, fontFamily, fontSize } = useSelect( selector, [ clientId ] );\n\tconst isEnabled = useHasTypographyPanel( settings );\n\tconst value = useMemo(\n\t\t() => attributesToStyle( { style, fontFamily, fontSize } ),\n\t\t[ style, fontSize, fontFamily ]\n\t);\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t\n\t);\n}\n\nexport const hasTypographySupport = ( blockName ) => {\n\treturn TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>\n\t\thasBlockSupport( blockName, key )\n\t);\n};\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst settings = (\n\t\n\t\t\n\t\t\n\t\n);\n\nexport default settings;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tIcon,\n\tRangeControl,\n\t__experimentalHStack as HStack,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\tCustomSelectControl,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { settings } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../../use-settings';\nimport { store as blockEditorStore } from '../../../store';\nimport {\n\tRANGE_CONTROL_MAX_SIZE,\n\tALL_SIDES,\n\tLABELS,\n\tgetSliderValueFromPreset,\n\tgetCustomValueFromPreset,\n\tgetPresetValueFromCustomValue,\n\tisValueSpacingPreset,\n} from '../utils';\n\nconst CUSTOM_VALUE_SETTINGS = {\n\tpx: { max: 300, steps: 1 },\n\t'%': { max: 100, steps: 1 },\n\tvw: { max: 100, steps: 1 },\n\tvh: { max: 100, steps: 1 },\n\tem: { max: 10, steps: 0.1 },\n\trm: { max: 10, steps: 0.1 },\n\tsvw: { max: 100, steps: 1 },\n\tlvw: { max: 100, steps: 1 },\n\tdvw: { max: 100, steps: 1 },\n\tsvh: { max: 100, steps: 1 },\n\tlvh: { max: 100, steps: 1 },\n\tdvh: { max: 100, steps: 1 },\n\tvi: { max: 100, steps: 1 },\n\tsvi: { max: 100, steps: 1 },\n\tlvi: { max: 100, steps: 1 },\n\tdvi: { max: 100, steps: 1 },\n\tvb: { max: 100, steps: 1 },\n\tsvb: { max: 100, steps: 1 },\n\tlvb: { max: 100, steps: 1 },\n\tdvb: { max: 100, steps: 1 },\n\tvmin: { max: 100, steps: 1 },\n\tsvmin: { max: 100, steps: 1 },\n\tlvmin: { max: 100, steps: 1 },\n\tdvmin: { max: 100, steps: 1 },\n\tvmax: { max: 100, steps: 1 },\n\tsvmax: { max: 100, steps: 1 },\n\tlvmax: { max: 100, steps: 1 },\n\tdvmax: { max: 100, steps: 1 },\n};\n\nexport default function SpacingInputControl( {\n\ticon,\n\tisMixed = false,\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel = true,\n\tside,\n\tspacingSizes,\n\ttype,\n\tvalue,\n} ) {\n\t// Treat value as a preset value if the passed in value matches the value of one of the spacingSizes.\n\tvalue = getPresetValueFromCustomValue( value, spacingSizes );\n\n\tlet selectListSizes = spacingSizes;\n\tconst showRangeControl = spacingSizes.length <= RANGE_CONTROL_MAX_SIZE;\n\n\tconst disableCustomSpacingSizes = useSelect( ( select ) => {\n\t\tconst editorSettings = select( blockEditorStore ).getSettings();\n\t\treturn editorSettings?.disableCustomSpacingSizes;\n\t} );\n\n\tconst [ showCustomValueControl, setShowCustomValueControl ] = useState(\n\t\t! disableCustomSpacingSizes &&\n\t\t\tvalue !== undefined &&\n\t\t\t! isValueSpacingPreset( value )\n\t);\n\n\tconst [ minValue, setMinValue ] = useState( minimumCustomValue );\n\n\tconst previousValue = usePrevious( value );\n\tif (\n\t\t!! value &&\n\t\tpreviousValue !== value &&\n\t\t! isValueSpacingPreset( value ) &&\n\t\tshowCustomValueControl !== true\n\t) {\n\t\tsetShowCustomValueControl( true );\n\t}\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ 'px', 'em', 'rem' ],\n\t} );\n\n\tlet currentValue = null;\n\n\tconst showCustomValueInSelectList =\n\t\t! showRangeControl &&\n\t\t! showCustomValueControl &&\n\t\tvalue !== undefined &&\n\t\t( ! isValueSpacingPreset( value ) ||\n\t\t\t( isValueSpacingPreset( value ) && isMixed ) );\n\n\tif ( showCustomValueInSelectList ) {\n\t\tselectListSizes = [\n\t\t\t...spacingSizes,\n\t\t\t{\n\t\t\t\tname: ! isMixed\n\t\t\t\t\t? // translators: A custom measurement, eg. a number followed by a unit like 12px.\n\t\t\t\t\t sprintf( __( 'Custom (%s)' ), value )\n\t\t\t\t\t: __( 'Mixed' ),\n\t\t\t\tslug: 'custom',\n\t\t\t\tsize: value,\n\t\t\t},\n\t\t];\n\t\tcurrentValue = selectListSizes.length - 1;\n\t} else if ( ! isMixed ) {\n\t\tcurrentValue = ! showCustomValueControl\n\t\t\t? getSliderValueFromPreset( value, spacingSizes )\n\t\t\t: getCustomValueFromPreset( value, spacingSizes );\n\t}\n\n\tconst selectedUnit =\n\t\tuseMemo(\n\t\t\t() => parseQuantityAndUnitFromRawValue( currentValue ),\n\t\t\t[ currentValue ]\n\t\t)[ 1 ] || units[ 0 ]?.value;\n\n\tconst setInitialValue = () => {\n\t\tif ( value === undefined ) {\n\t\t\tonChange( '0' );\n\t\t}\n\t};\n\n\tconst customTooltipContent = ( newValue ) =>\n\t\tvalue === undefined ? undefined : spacingSizes[ newValue ]?.name;\n\n\tconst customRangeValue = parseFloat( currentValue, 10 );\n\n\tconst getNewCustomValue = ( newSize ) => {\n\t\tconst isNumeric = ! isNaN( parseFloat( newSize ) );\n\t\tconst nextValue = isNumeric ? newSize : undefined;\n\t\treturn nextValue;\n\t};\n\n\tconst getNewPresetValue = ( newSize, controlType ) => {\n\t\tconst size = parseInt( newSize, 10 );\n\n\t\tif ( controlType === 'selectList' ) {\n\t\t\tif ( size === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif ( size === 1 ) {\n\t\t\t\treturn '0';\n\t\t\t}\n\t\t} else if ( size === 0 ) {\n\t\t\treturn '0';\n\t\t}\n\t\treturn `var:preset|spacing|${ spacingSizes[ newSize ]?.slug }`;\n\t};\n\n\tconst handleCustomValueSliderChange = ( next ) => {\n\t\tonChange( [ next, selectedUnit ].join( '' ) );\n\t};\n\n\tconst allPlaceholder = isMixed ? __( 'Mixed' ) : null;\n\n\tconst options = selectListSizes.map( ( size, index ) => ( {\n\t\tkey: index,\n\t\tname: size.name,\n\t} ) );\n\n\tconst marks = spacingSizes\n\t\t.slice( 1, spacingSizes.length - 1 )\n\t\t.map( ( _newValue, index ) => ( {\n\t\t\tvalue: index + 1,\n\t\t\tlabel: undefined,\n\t\t} ) );\n\n\tconst sideLabel =\n\t\tALL_SIDES.includes( side ) && showSideInLabel ? LABELS[ side ] : '';\n\tconst typeLabel = showSideInLabel ? type?.toLowerCase() : type;\n\n\tconst ariaLabel = sprintf(\n\t\t// translators: 1: The side of the block being modified (top, bottom, left, All sides etc.). 2. Type of spacing being modified (Padding, margin, etc)\n\t\t__( '%1$s %2$s' ),\n\t\tsideLabel,\n\t\ttypeLabel\n\t).trim();\n\n\treturn (\n\t\t\n\t\t\t{ icon && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showCustomValueControl && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\tonChange( getNewCustomValue( newSize ) )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ currentValue }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tmin={ minValue }\n\t\t\t\t\t\tplaceholder={ allPlaceholder }\n\t\t\t\t\t\tdisableUnits={ isMixed }\n\t\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\tclassName=\"spacing-sizes-control__custom-value-input\"\n\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\tonDragStart={ () => {\n\t\t\t\t\t\t\tif ( value?.charAt( 0 ) === '-' ) {\n\t\t\t\t\t\t\t\tsetMinValue( 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonDrag={ () => {\n\t\t\t\t\t\t\tif ( value?.charAt( 0 ) === '-' ) {\n\t\t\t\t\t\t\t\tsetMinValue( 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonDragEnd={ () => {\n\t\t\t\t\t\t\tsetMinValue( minimumCustomValue );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showRangeControl && ! showCustomValueControl && (\n\t\t\t\t\n\t\t\t\t\t\tonChange( getNewPresetValue( newSize ) )\n\t\t\t\t\t}\n\t\t\t\t\tonMouseDown={ ( event ) => {\n\t\t\t\t\t\t// If mouse down is near start of range set initial value to 0, which\n\t\t\t\t\t\t// prevents the user have to drag right then left to get 0 setting.\n\t\t\t\t\t\tif ( event?.nativeEvent?.offsetX < 35 ) {\n\t\t\t\t\t\t\tsetInitialValue();\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\twithInputField={ false }\n\t\t\t\t\taria-valuenow={ currentValue }\n\t\t\t\t\taria-valuetext={ spacingSizes[ currentValue ]?.name }\n\t\t\t\t\trenderTooltipContent={ customTooltipContent }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tmax={ spacingSizes.length - 1 }\n\t\t\t\t\tmarks={ marks }\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tonFocus={ onMouseOver }\n\t\t\t\t\tonBlur={ onMouseOut }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! showRangeControl && ! showCustomValueControl && (\n\t\t\t\t option.key === currentValue\n\t\t\t\t\t\t) || ''\n\t\t\t\t\t}\n\t\t\t\t\tonChange={ ( selection ) => {\n\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\tgetNewPresetValue(\n\t\t\t\t\t\t\t\tselection.selectedItem.key,\n\t\t\t\t\t\t\t\t'selectList'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\toptions={ options }\n\t\t\t\t\tlabel={ ariaLabel }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\tonMouseOver={ onMouseOver }\n\t\t\t\t\tonMouseOut={ onMouseOut }\n\t\t\t\t\tonFocus={ onMouseOver }\n\t\t\t\t\tonBlur={ onMouseOut }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! disableCustomSpacingSizes && (\n\t\t\t\t {\n\t\t\t\t\t\tsetShowCustomValueControl( ! showCustomValueControl );\n\t\t\t\t\t} }\n\t\t\t\t\tisPressed={ showCustomValueControl }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tclassName=\"spacing-sizes-control__custom-toggle\"\n\t\t\t\t\ticonSize={ 24 }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport {\n\tLABELS,\n\tICONS,\n\tgetPresetValueFromCustomValue,\n\thasAxisSupport,\n} from '../utils';\n\nconst groupedSides = [ 'vertical', 'horizontal' ];\n\nexport default function AxialInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\tif ( ! onChange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tif ( side === 'vertical' ) {\n\t\t\tnextValues.top = next;\n\t\t\tnextValues.bottom = next;\n\t\t}\n\n\t\tif ( side === 'horizontal' ) {\n\t\t\tnextValues.left = next;\n\t\t\tnextValues.right = next;\n\t\t}\n\n\t\tonChange( nextValues );\n\t};\n\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? groupedSides.filter( ( side ) => hasAxisSupport( sides, side ) )\n\t\t: groupedSides;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\tconst axisValue =\n\t\t\t\t\tside === 'vertical' ? values.top : values.left;\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport {\n\tALL_SIDES,\n\tLABELS,\n\tICONS,\n\tgetPresetValueFromCustomValue,\n} from '../utils';\n\nexport default function SeparatedInputControls( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tsides,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\t// Filter sides if custom configuration provided, maintaining default order.\n\tconst filteredSides = sides?.length\n\t\t? ALL_SIDES.filter( ( side ) => sides.includes( side ) )\n\t\t: ALL_SIDES;\n\n\tconst createHandleOnChange = ( side ) => ( next ) => {\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tnextValues[ side ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredSides.map( ( side ) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport SpacingInputControl from './spacing-input-control';\nimport { LABELS, getPresetValueFromCustomValue } from '../utils';\n\nexport default function SingleInputControl( {\n\tminimumCustomValue,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel,\n\tside,\n\tspacingSizes,\n\ttype,\n\tvalues,\n} ) {\n\tconst createHandleOnChange = ( currentSide ) => ( next ) => {\n\t\t// Encode the existing value into the preset value if the passed in value matches the value of one of the spacingSizes.\n\t\tconst nextValues = {\n\t\t\t...Object.keys( values ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getPresetValueFromCustomValue(\n\t\t\t\t\tvalues[ key ],\n\t\t\t\t\tspacingSizes\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} ),\n\t\t};\n\n\t\tnextValues[ currentSide ] = next;\n\n\t\tonChange( nextValues );\n\t};\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Button, Tooltip } from '@wordpress/components';\nimport { link, linkOff } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\nexport default function LinkedButton( { isLinked, ...props } ) {\n\tconst label = isLinked\n\t\t? sprintf(\n\t\t\t\t// translators: 1. Type of spacing being modified (padding, margin, etc).\n\t\t\t\t__( 'Unlink %1$s' ),\n\t\t\t\tprops.label.toLowerCase()\n\t\t ).trim()\n\t\t: sprintf(\n\t\t\t\t// translators: 1. Type of spacing being modified (padding, margin, etc).\n\t\t\t\t__( 'Link %1$s' ),\n\t\t\t\tprops.label.toLowerCase()\n\t\t ).trim();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../../use-settings';\nimport { RANGE_CONTROL_MAX_SIZE } from '../utils';\n\nconst EMPTY_ARRAY = [];\n\nconst compare = new Intl.Collator( 'und', { numeric: true } ).compare;\n\nexport default function useSpacingSizes() {\n\tconst [\n\t\tcustomSpacingSizes,\n\t\tthemeSpacingSizes,\n\t\tdefaultSpacingSizes,\n\t\tdefaultSpacingSizesEnabled,\n\t] = useSettings(\n\t\t'spacing.spacingSizes.custom',\n\t\t'spacing.spacingSizes.theme',\n\t\t'spacing.spacingSizes.default',\n\t\t'spacing.defaultSpacingSizes'\n\t);\n\n\tconst customSizes = customSpacingSizes ?? EMPTY_ARRAY;\n\n\tconst themeSizes = themeSpacingSizes ?? EMPTY_ARRAY;\n\n\tconst defaultSizes =\n\t\tdefaultSpacingSizes && defaultSpacingSizesEnabled !== false\n\t\t\t? defaultSpacingSizes\n\t\t\t: EMPTY_ARRAY;\n\n\treturn useMemo( () => {\n\t\tconst sizes = [\n\t\t\t{ name: __( 'None' ), slug: '0', size: 0 },\n\t\t\t...customSizes,\n\t\t\t...themeSizes,\n\t\t\t...defaultSizes,\n\t\t];\n\n\t\t// Using numeric slugs opts-in to sorting by slug.\n\t\tif ( sizes.every( ( { slug } ) => /^[0-9]/.test( slug ) ) ) {\n\t\t\tsizes.sort( ( a, b ) => compare( a.slug, b.slug ) );\n\t\t}\n\n\t\treturn sizes.length > RANGE_CONTROL_MAX_SIZE\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: __( 'Default' ),\n\t\t\t\t\t\tslug: 'default',\n\t\t\t\t\t\tsize: undefined,\n\t\t\t\t\t},\n\t\t\t\t\t...sizes,\n\t\t\t ]\n\t\t\t: sizes;\n\t}, [ customSizes, themeSizes, defaultSizes ] );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tBaseControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport AxialInputControls from './input-controls/axial';\nimport SeparatedInputControls from './input-controls/separated';\nimport SingleInputControl from './input-controls/single';\nimport LinkedButton from './linked-button';\nimport useSpacingSizes from './hooks/use-spacing-sizes';\nimport {\n\tALL_SIDES,\n\tDEFAULT_VALUES,\n\tLABELS,\n\tVIEWS,\n\tgetInitialView,\n} from './utils';\n\nexport default function SpacingSizesControl( {\n\tinputProps,\n\tlabel: labelProp,\n\tminimumCustomValue = 0,\n\tonChange,\n\tonMouseOut,\n\tonMouseOver,\n\tshowSideInLabel = true,\n\tsides = ALL_SIDES,\n\tuseSelect,\n\tvalues,\n} ) {\n\tconst spacingSizes = useSpacingSizes();\n\tconst inputValues = values || DEFAULT_VALUES;\n\tconst hasOneSide = sides?.length === 1;\n\tconst hasOnlyAxialSides =\n\t\tsides?.includes( 'horizontal' ) &&\n\t\tsides?.includes( 'vertical' ) &&\n\t\tsides?.length === 2;\n\n\tconst [ view, setView ] = useState( getInitialView( inputValues, sides ) );\n\n\tconst toggleLinked = () => {\n\t\tsetView( view === VIEWS.axial ? VIEWS.custom : VIEWS.axial );\n\t};\n\n\tconst handleOnChange = ( nextValue ) => {\n\t\tconst newValues = { ...values, ...nextValue };\n\t\tonChange( newValues );\n\t};\n\n\tconst inputControlProps = {\n\t\t...inputProps,\n\t\tminimumCustomValue,\n\t\tonChange: handleOnChange,\n\t\tonMouseOut,\n\t\tonMouseOver,\n\t\tsides,\n\t\tspacingSizes,\n\t\ttype: labelProp,\n\t\tuseSelect,\n\t\tvalues: inputValues,\n\t};\n\n\tconst renderControls = () => {\n\t\tif ( view === VIEWS.axial ) {\n\t\t\treturn ;\n\t\t}\n\t\tif ( view === VIEWS.custom ) {\n\t\t\treturn ;\n\t\t}\n\t\treturn (\n\t\t\t\n\t\t);\n\t};\n\n\tconst sideLabel =\n\t\tALL_SIDES.includes( view ) && showSideInLabel ? LABELS[ view ] : '';\n\n\tconst label = sprintf(\n\t\t// translators: 2. Type of spacing being modified (Padding, margin, etc). 1: The side of the block being modified (top, bottom, left etc.).\n\t\t__( '%1$s %2$s' ),\n\t\tlabelProp,\n\t\tsideLabel\n\t).trim();\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ label }\n\t\t\t\t\n\t\t\t\t{ ! hasOneSide && ! hasOnlyAxialSides && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t{ renderControls() }\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport {\n\tBaseControl,\n\tRangeControl,\n\tFlex,\n\tFlexItem,\n\t__experimentalSpacer as Spacer,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nconst RANGE_CONTROL_CUSTOM_SETTINGS = {\n\tpx: { max: 1000, step: 1 },\n\t'%': { max: 100, step: 1 },\n\tvw: { max: 100, step: 1 },\n\tvh: { max: 100, step: 1 },\n\tem: { max: 50, step: 0.1 },\n\trem: { max: 50, step: 0.1 },\n\tsvw: { max: 100, step: 1 },\n\tlvw: { max: 100, step: 1 },\n\tdvw: { max: 100, step: 1 },\n\tsvh: { max: 100, step: 1 },\n\tlvh: { max: 100, step: 1 },\n\tdvh: { max: 100, step: 1 },\n\tvi: { max: 100, step: 1 },\n\tsvi: { max: 100, step: 1 },\n\tlvi: { max: 100, step: 1 },\n\tdvi: { max: 100, step: 1 },\n\tvb: { max: 100, step: 1 },\n\tsvb: { max: 100, step: 1 },\n\tlvb: { max: 100, step: 1 },\n\tdvb: { max: 100, step: 1 },\n\tvmin: { max: 100, step: 1 },\n\tsvmin: { max: 100, step: 1 },\n\tlvmin: { max: 100, step: 1 },\n\tdvmin: { max: 100, step: 1 },\n\tvmax: { max: 100, step: 1 },\n\tsvmax: { max: 100, step: 1 },\n\tlvmax: { max: 100, step: 1 },\n\tdvmax: { max: 100, step: 1 },\n};\n\n/**\n * HeightControl renders a linked unit control and range control for adjusting the height of a block.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/height-control/README.md\n *\n * @param {Object} props\n * @param {?string} props.label A label for the control.\n * @param {( value: string ) => void } props.onChange Called when the height changes.\n * @param {string} props.value The current height value.\n *\n * @return {Component} The component to be rendered.\n */\nexport default function HeightControl( {\n\tlabel = __( 'Height' ),\n\tonChange,\n\tvalue,\n} ) {\n\tconst customRangeValue = parseFloat( value );\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vh',\n\t\t\t'vw',\n\t\t],\n\t} );\n\n\tconst selectedUnit =\n\t\tuseMemo(\n\t\t\t() => parseQuantityAndUnitFromRawValue( value ),\n\t\t\t[ value ]\n\t\t)[ 1 ] ||\n\t\tunits[ 0 ]?.value ||\n\t\t'px';\n\n\tconst handleSliderChange = ( next ) => {\n\t\tonChange( [ next, selectedUnit ].join( '' ) );\n\t};\n\n\tconst handleUnitChange = ( newUnit ) => {\n\t\t// Attempt to smooth over differences between currentUnit and newUnit.\n\t\t// This should slightly improve the experience of switching between unit types.\n\t\tconst [ currentValue, currentUnit ] =\n\t\t\tparseQuantityAndUnitFromRawValue( value );\n\n\t\tif ( [ 'em', 'rem' ].includes( newUnit ) && currentUnit === 'px' ) {\n\t\t\t// Convert pixel value to an approximate of the new unit, assuming a root size of 16px.\n\t\t\tonChange( ( currentValue / 16 ).toFixed( 2 ) + newUnit );\n\t\t} else if (\n\t\t\t[ 'em', 'rem' ].includes( currentUnit ) &&\n\t\t\tnewUnit === 'px'\n\t\t) {\n\t\t\t// Convert to pixel value assuming a root size of 16px.\n\t\t\tonChange( Math.round( currentValue * 16 ) + newUnit );\n\t\t} else if (\n\t\t\t[\n\t\t\t\t'%',\n\t\t\t\t'vw',\n\t\t\t\t'svw',\n\t\t\t\t'lvw',\n\t\t\t\t'dvw',\n\t\t\t\t'vh',\n\t\t\t\t'svh',\n\t\t\t\t'lvh',\n\t\t\t\t'dvh',\n\t\t\t\t'vi',\n\t\t\t\t'svi',\n\t\t\t\t'lvi',\n\t\t\t\t'dvi',\n\t\t\t\t'vb',\n\t\t\t\t'svb',\n\t\t\t\t'lvb',\n\t\t\t\t'dvb',\n\t\t\t\t'vmin',\n\t\t\t\t'svmin',\n\t\t\t\t'lvmin',\n\t\t\t\t'dvmin',\n\t\t\t\t'vmax',\n\t\t\t\t'svmax',\n\t\t\t\t'lvmax',\n\t\t\t\t'dvmax',\n\t\t\t].includes( newUnit ) &&\n\t\t\tcurrentValue > 100\n\t\t) {\n\t\t\t// When converting to `%` or viewport-relative units, cap the new value at 100.\n\t\t\tonChange( 100 + newUnit );\n\t\t}\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ label }\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function useGetNumberOfBlocksBeforeCell( gridClientId, numColumns ) {\n\tconst { getBlockOrder, getBlockAttributes } = useSelect( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = ( column, row ) => {\n\t\tconst targetIndex = ( row - 1 ) * numColumns + column - 1;\n\n\t\tlet count = 0;\n\t\tfor ( const clientId of getBlockOrder( gridClientId ) ) {\n\t\t\tconst { columnStart, rowStart } =\n\t\t\t\tgetBlockAttributes( clientId ).style?.layout ?? {};\n\t\t\tconst cellIndex = ( rowStart - 1 ) * numColumns + columnStart - 1;\n\t\t\tif ( cellIndex < targetIndex ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t};\n\n\treturn getNumberOfBlocksBeforeCell;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalInputControl as InputControl,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\tFlex,\n\tFlexItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useEffect } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useGetNumberOfBlocksBeforeCell } from '../grid/use-get-number-of-blocks-before-cell';\nimport { store as blockEditorStore } from '../../store';\n\nfunction helpText( selfStretch, parentLayout ) {\n\tconst { orientation = 'horizontal' } = parentLayout;\n\n\tif ( selfStretch === 'fill' ) {\n\t\treturn __( 'Stretch to fill available space.' );\n\t}\n\tif ( selfStretch === 'fixed' && orientation === 'horizontal' ) {\n\t\treturn __( 'Specify a fixed width.' );\n\t} else if ( selfStretch === 'fixed' ) {\n\t\treturn __( 'Specify a fixed height.' );\n\t}\n\treturn __( 'Fit contents.' );\n}\n\n/**\n * Form to edit the child layout value.\n *\n * @param {Object} props Props.\n * @param {Object} props.value The child layout value.\n * @param {Function} props.onChange Function to update the child layout value.\n * @param {Object} props.parentLayout The parent layout value.\n *\n * @param {boolean} props.isShownByDefault\n * @param {string} props.panelId\n * @return {Element} child layout edit element.\n */\nexport default function ChildLayoutControl( {\n\tvalue: childLayout = {},\n\tonChange,\n\tparentLayout,\n\tisShownByDefault,\n\tpanelId,\n} ) {\n\tconst {\n\t\ttype: parentType,\n\t\tdefault: { type: defaultParentType = 'default' } = {},\n\t} = parentLayout ?? {};\n\tconst parentLayoutType = parentType || defaultParentType;\n\n\tif ( parentLayoutType === 'flex' ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t} else if ( parentLayoutType === 'grid' ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn null;\n}\n\nfunction FlexControls( {\n\tchildLayout,\n\tonChange,\n\tparentLayout,\n\tisShownByDefault,\n\tpanelId,\n} ) {\n\tconst { selfStretch, flexSize } = childLayout;\n\tconst { orientation = 'horizontal' } = parentLayout ?? {};\n\tconst hasFlexValue = () => !! selfStretch;\n\tconst flexResetLabel =\n\t\torientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );\n\tconst resetFlex = () => {\n\t\tonChange( {\n\t\t\tselfStretch: undefined,\n\t\t\tflexSize: undefined,\n\t\t} );\n\t};\n\n\tuseEffect( () => {\n\t\tif ( selfStretch === 'fixed' && ! flexSize ) {\n\t\t\tonChange( {\n\t\t\t\t...childLayout,\n\t\t\t\tselfStretch: 'fit',\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tconst newFlexSize = value !== 'fixed' ? null : flexSize;\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\tselfStretch: value,\n\t\t\t\t\t\tflexSize: newFlexSize,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tisBlock\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{ selfStretch === 'fixed' && (\n\t\t\t\t {\n\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\tselfStretch,\n\t\t\t\t\t\t\tflexSize: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ flexSize }\n\t\t\t\t\tlabel={ flexResetLabel }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport function childLayoutOrientation( parentLayout ) {\n\tconst { orientation = 'horizontal' } = parentLayout;\n\treturn orientation === 'horizontal' ? __( 'Width' ) : __( 'Height' );\n}\n\nfunction GridControls( {\n\tchildLayout,\n\tonChange,\n\tparentLayout,\n\tisShownByDefault,\n\tpanelId,\n} ) {\n\tconst { columnStart, rowStart, columnSpan, rowSpan } = childLayout;\n\tconst { columnCount = 3, rowCount } = parentLayout ?? {};\n\tconst rootClientId = useSelect( ( select ) =>\n\t\tselect( blockEditorStore ).getBlockRootClientId( panelId )\n\t);\n\tconst { moveBlocksToPosition, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\trootClientId,\n\t\tcolumnCount\n\t);\n\tconst hasStartValue = () => !! columnStart || !! rowStart;\n\tconst hasSpanValue = () => !! columnSpan || !! rowSpan;\n\tconst resetGridStarts = () => {\n\t\tonChange( {\n\t\t\tcolumnStart: undefined,\n\t\t\trowStart: undefined,\n\t\t} );\n\t};\n\tconst resetGridSpans = () => {\n\t\tonChange( {\n\t\t\tcolumnSpan: undefined,\n\t\t\trowSpan: undefined,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\tconst newColumnSpan =\n\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\trowStart,\n\t\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t\tcolumnSpan: newColumnSpan,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ columnSpan ?? 1 }\n\t\t\t\t\tmin={ 1 }\n\t\t\t\t/>\n\t\t\t\t {\n\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\tconst newRowSpan =\n\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\trowStart,\n\t\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\t\trowSpan: newRowSpan,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ rowSpan ?? 1 }\n\t\t\t\t\tmin={ 1 }\n\t\t\t\t/>\n\t\t\t\n\t\t\t{ window.__experimentalEnableGridInteractivity && columnCount && (\n\t\t\t\t// Use Flex with an explicit width on the FlexItem instead of HStack to\n\t\t\t\t// work around an issue in webkit where inputs with a max attribute are\n\t\t\t\t// sized incorrectly.\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\t\t\tconst newColumnStart =\n\t\t\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\t\t\t\trowStart,\n\t\t\t\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t[ panelId ],\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\t\tnewColumnStart,\n\t\t\t\t\t\t\t\t\t\trowStart\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ columnStart ?? 1 }\n\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\tmax={\n\t\t\t\t\t\t\t\tcolumnCount\n\t\t\t\t\t\t\t\t\t? columnCount - ( columnSpan ?? 1 ) + 1\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t// Don't allow unsetting.\n\t\t\t\t\t\t\t\tconst newRowStart =\n\t\t\t\t\t\t\t\t\tvalue === '' ? 1 : parseInt( value, 10 );\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t[ panelId ],\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\t\tnewRowStart\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ rowStart ?? 1 }\n\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\tmax={\n\t\t\t\t\t\t\t\trowCount\n\t\t\t\t\t\t\t\t\t? rowCount - ( rowSpan ?? 1 ) + 1\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tSelectControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\n/**\n * @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps\n */\n\n/**\n * @callback AspectRatioToolPropsOnChange\n * @param {string} [value] New aspect ratio value.\n * @return {void} No return.\n */\n\n/**\n * @typedef {Object} AspectRatioToolProps\n * @property {string} [panelId] ID of the panel this tool is associated with.\n * @property {string} [value] Current aspect ratio value.\n * @property {AspectRatioToolPropsOnChange} [onChange] Callback to update the aspect ratio value.\n * @property {SelectControlProps[]} [options] Aspect ratio options.\n * @property {string} [defaultValue] Default aspect ratio value.\n * @property {boolean} [isShownByDefault] Whether the tool is shown by default.\n */\n\nexport default function AspectRatioTool( {\n\tpanelId,\n\tvalue,\n\tonChange = () => {},\n\toptions,\n\tdefaultValue = 'auto',\n\thasValue,\n\tisShownByDefault = true,\n} ) {\n\t// Match the CSS default so if the value is used directly in CSS it will look correct in the control.\n\tconst displayValue = value ?? 'auto';\n\n\tconst [ defaultRatios, themeRatios, showDefaultRatios ] = useSettings(\n\t\t'dimensions.aspectRatios.default',\n\t\t'dimensions.aspectRatios.theme',\n\t\t'dimensions.defaultAspectRatios'\n\t);\n\n\tconst themeOptions = themeRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\n\tconst defaultOptions = defaultRatios?.map( ( { name, ratio } ) => ( {\n\t\tlabel: name,\n\t\tvalue: ratio,\n\t} ) );\n\n\tconst aspectRatioOptions = [\n\t\t{\n\t\t\tlabel: _x(\n\t\t\t\t'Original',\n\t\t\t\t'Aspect ratio option for dimensions control'\n\t\t\t),\n\t\t\tvalue: 'auto',\n\t\t},\n\t\t...( showDefaultRatios ? defaultOptions : [] ),\n\t\t...( themeOptions ? themeOptions : [] ),\n\t\t{\n\t\t\tlabel: _x( 'Custom', 'Aspect ratio option for dimensions control' ),\n\t\t\tvalue: 'custom',\n\t\t\tdisabled: true,\n\t\t\thidden: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t displayValue !== defaultValue\n\t\t\t}\n\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\tonDeselect={ () => onChange( undefined ) }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalBoxControl as BoxControl,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n} from '@wordpress/components';\nimport { Icon, alignNone, stretchWide } from '@wordpress/icons';\nimport { useCallback, useState, Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport SpacingSizesControl from '../spacing-sizes-control';\nimport HeightControl from '../height-control';\nimport ChildLayoutControl from '../child-layout-control';\nimport AspectRatioTool from '../dimensions-tool/aspect-ratio-tool';\nimport { cleanEmptyObject } from '../../hooks/utils';\nimport { setImmutably } from '../../utils/object';\n\nconst AXIAL_SIDES = [ 'horizontal', 'vertical' ];\n\nexport function useHasDimensionsPanel( settings ) {\n\tconst hasContentSize = useHasContentSize( settings );\n\tconst hasWideSize = useHasWideSize( settings );\n\tconst hasPadding = useHasPadding( settings );\n\tconst hasMargin = useHasMargin( settings );\n\tconst hasGap = useHasGap( settings );\n\tconst hasMinHeight = useHasMinHeight( settings );\n\tconst hasAspectRatio = useHasAspectRatio( settings );\n\tconst hasChildLayout = useHasChildLayout( settings );\n\n\treturn (\n\t\tPlatform.OS === 'web' &&\n\t\t( hasContentSize ||\n\t\t\thasWideSize ||\n\t\t\thasPadding ||\n\t\t\thasMargin ||\n\t\t\thasGap ||\n\t\t\thasMinHeight ||\n\t\t\thasAspectRatio ||\n\t\t\thasChildLayout )\n\t);\n}\n\nfunction useHasContentSize( settings ) {\n\treturn settings?.layout?.contentSize;\n}\n\nfunction useHasWideSize( settings ) {\n\treturn settings?.layout?.wideSize;\n}\n\nfunction useHasPadding( settings ) {\n\treturn settings?.spacing?.padding;\n}\n\nfunction useHasMargin( settings ) {\n\treturn settings?.spacing?.margin;\n}\n\nfunction useHasGap( settings ) {\n\treturn settings?.spacing?.blockGap;\n}\n\nfunction useHasMinHeight( settings ) {\n\treturn settings?.dimensions?.minHeight;\n}\n\nfunction useHasAspectRatio( settings ) {\n\treturn settings?.dimensions?.aspectRatio;\n}\n\nfunction useHasChildLayout( settings ) {\n\tconst {\n\t\ttype: parentLayoutType = 'default',\n\t\tdefault: { type: defaultParentLayoutType = 'default' } = {},\n\t\tallowSizingOnChildren = false,\n\t} = settings?.parentLayout ?? {};\n\n\tconst support =\n\t\t( defaultParentLayoutType === 'flex' ||\n\t\t\tparentLayoutType === 'flex' ||\n\t\t\tdefaultParentLayoutType === 'grid' ||\n\t\t\tparentLayoutType === 'grid' ) &&\n\t\tallowSizingOnChildren;\n\treturn !! settings?.layout && support;\n}\n\nfunction useHasSpacingPresets( settings ) {\n\tconst { defaultSpacingSizes, spacingSizes } = settings?.spacing || {};\n\treturn (\n\t\t( defaultSpacingSizes !== false &&\n\t\t\tspacingSizes?.default?.length > 0 ) ||\n\t\tspacingSizes?.theme?.length > 0 ||\n\t\tspacingSizes?.custom?.length > 0\n\t);\n}\n\nfunction filterValuesBySides( values, sides ) {\n\t// If no custom side configuration, all sides are opted into by default.\n\t// Without any values, we have nothing to filter either.\n\tif ( ! sides || ! values ) {\n\t\treturn values;\n\t}\n\n\t// Only include sides opted into within filtered values.\n\tconst filteredValues = {};\n\tsides.forEach( ( side ) => {\n\t\tif ( side === 'vertical' ) {\n\t\t\tfilteredValues.top = values.top;\n\t\t\tfilteredValues.bottom = values.bottom;\n\t\t}\n\t\tif ( side === 'horizontal' ) {\n\t\t\tfilteredValues.left = values.left;\n\t\t\tfilteredValues.right = values.right;\n\t\t}\n\t\tfilteredValues[ side ] = values?.[ side ];\n\t} );\n\n\treturn filteredValues;\n}\n\nfunction splitStyleValue( value ) {\n\t// Check for shorthand value (a string value).\n\tif ( value && typeof value === 'string' ) {\n\t\t// Convert to value for individual sides for BoxControl.\n\t\treturn {\n\t\t\ttop: value,\n\t\t\tright: value,\n\t\t\tbottom: value,\n\t\t\tleft: value,\n\t\t};\n\t}\n\n\treturn value;\n}\n\nfunction splitGapValue( value ) {\n\t// Check for shorthand value (a string value).\n\tif ( value && typeof value === 'string' ) {\n\t\t// If the value is a string, treat it as a single side (top) for the spacing controls.\n\t\treturn {\n\t\t\ttop: value,\n\t\t};\n\t}\n\n\tif ( value ) {\n\t\treturn {\n\t\t\t...value,\n\t\t\tright: value?.left,\n\t\t\tbottom: value?.top,\n\t\t};\n\t}\n\n\treturn value;\n}\n\nfunction DimensionsToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tcontentSize: true,\n\twideSize: true,\n\tpadding: true,\n\tmargin: true,\n\tblockGap: true,\n\tminHeight: true,\n\taspectRatio: true,\n\tchildLayout: true,\n};\n\nexport default function DimensionsPanel( {\n\tas: Wrapper = DimensionsToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tonVisualize = () => {},\n\t// Special case because the layout controls are not part of the dimensions panel\n\t// in global styles but not in block inspector.\n\tincludeLayoutControls = false,\n} ) {\n\tconst { dimensions, spacing } = settings;\n\n\tconst decodeValue = ( rawValue ) => {\n\t\tif ( rawValue && typeof rawValue === 'object' ) {\n\t\t\treturn Object.keys( rawValue ).reduce( ( acc, key ) => {\n\t\t\t\tacc[ key ] = getValueFromVariable(\n\t\t\t\t\t{ settings: { dimensions, spacing } },\n\t\t\t\t\t'',\n\t\t\t\t\trawValue[ key ]\n\t\t\t\t);\n\t\t\t\treturn acc;\n\t\t\t}, {} );\n\t\t}\n\t\treturn getValueFromVariable(\n\t\t\t{ settings: { dimensions, spacing } },\n\t\t\t'',\n\t\t\trawValue\n\t\t);\n\t};\n\n\tconst showSpacingPresetsControl = useHasSpacingPresets( settings );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: settings?.spacing?.units || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vw',\n\t\t],\n\t} );\n\n\t//Minimum Margin Value\n\tconst minimumMargin = -Infinity;\n\tconst [ minMarginValue, setMinMarginValue ] = useState( minimumMargin );\n\n\t// Content Width\n\tconst showContentSizeControl =\n\t\tuseHasContentSize( settings ) && includeLayoutControls;\n\tconst contentSizeValue = decodeValue( inheritedValue?.layout?.contentSize );\n\tconst setContentSizeValue = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'layout', 'contentSize' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasUserSetContentSizeValue = () => !! value?.layout?.contentSize;\n\tconst resetContentSizeValue = () => setContentSizeValue( undefined );\n\n\t// Wide Width\n\tconst showWideSizeControl =\n\t\tuseHasWideSize( settings ) && includeLayoutControls;\n\tconst wideSizeValue = decodeValue( inheritedValue?.layout?.wideSize );\n\tconst setWideSizeValue = ( newValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tvalue,\n\t\t\t\t[ 'layout', 'wideSize' ],\n\t\t\t\tnewValue || undefined\n\t\t\t)\n\t\t);\n\t};\n\tconst hasUserSetWideSizeValue = () => !! value?.layout?.wideSize;\n\tconst resetWideSizeValue = () => setWideSizeValue( undefined );\n\n\t// Padding\n\tconst showPaddingControl = useHasPadding( settings );\n\tconst rawPadding = decodeValue( inheritedValue?.spacing?.padding );\n\tconst paddingValues = splitStyleValue( rawPadding );\n\tconst paddingSides = Array.isArray( settings?.spacing?.padding )\n\t\t? settings?.spacing?.padding\n\t\t: settings?.spacing?.padding?.sides;\n\tconst isAxialPadding =\n\t\tpaddingSides &&\n\t\tpaddingSides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\tconst setPaddingValues = ( newPaddingValues ) => {\n\t\tconst padding = filterValuesBySides( newPaddingValues, paddingSides );\n\t\tonChange( setImmutably( value, [ 'spacing', 'padding' ], padding ) );\n\t};\n\tconst hasPaddingValue = () =>\n\t\t!! value?.spacing?.padding &&\n\t\tObject.keys( value?.spacing?.padding ).length;\n\tconst resetPaddingValue = () => setPaddingValues( undefined );\n\tconst onMouseOverPadding = () => onVisualize( 'padding' );\n\n\t// Margin\n\tconst showMarginControl = useHasMargin( settings );\n\tconst rawMargin = decodeValue( inheritedValue?.spacing?.margin );\n\tconst marginValues = splitStyleValue( rawMargin );\n\tconst marginSides = Array.isArray( settings?.spacing?.margin )\n\t\t? settings?.spacing?.margin\n\t\t: settings?.spacing?.margin?.sides;\n\tconst isAxialMargin =\n\t\tmarginSides &&\n\t\tmarginSides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\tconst setMarginValues = ( newMarginValues ) => {\n\t\tconst margin = filterValuesBySides( newMarginValues, marginSides );\n\t\tonChange( setImmutably( value, [ 'spacing', 'margin' ], margin ) );\n\t};\n\tconst hasMarginValue = () =>\n\t\t!! value?.spacing?.margin &&\n\t\tObject.keys( value?.spacing?.margin ).length;\n\tconst resetMarginValue = () => setMarginValues( undefined );\n\tconst onMouseOverMargin = () => onVisualize( 'margin' );\n\n\t// Block Gap\n\tconst showGapControl = useHasGap( settings );\n\tconst gapValue = decodeValue( inheritedValue?.spacing?.blockGap );\n\tconst gapValues = splitGapValue( gapValue );\n\tconst gapSides = Array.isArray( settings?.spacing?.blockGap )\n\t\t? settings?.spacing?.blockGap\n\t\t: settings?.spacing?.blockGap?.sides;\n\tconst isAxialGap =\n\t\tgapSides && gapSides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\tconst setGapValue = ( newGapValue ) => {\n\t\tonChange(\n\t\t\tsetImmutably( value, [ 'spacing', 'blockGap' ], newGapValue )\n\t\t);\n\t};\n\tconst setGapValues = ( nextBoxGapValue ) => {\n\t\tif ( ! nextBoxGapValue ) {\n\t\t\tsetGapValue( null );\n\t\t}\n\t\t// If axial gap is not enabled, treat the 'top' value as the shorthand gap value.\n\t\tif ( ! isAxialGap && nextBoxGapValue?.hasOwnProperty( 'top' ) ) {\n\t\t\tsetGapValue( nextBoxGapValue.top );\n\t\t} else {\n\t\t\tsetGapValue( {\n\t\t\t\ttop: nextBoxGapValue?.top,\n\t\t\t\tleft: nextBoxGapValue?.left,\n\t\t\t} );\n\t\t}\n\t};\n\tconst resetGapValue = () => setGapValue( undefined );\n\tconst hasGapValue = () => !! value?.spacing?.blockGap;\n\n\t// Min Height\n\tconst showMinHeightControl = useHasMinHeight( settings );\n\tconst minHeightValue = decodeValue( inheritedValue?.dimensions?.minHeight );\n\tconst setMinHeightValue = ( newValue ) => {\n\t\tconst tempValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'dimensions', 'minHeight' ],\n\t\t\tnewValue\n\t\t);\n\t\t// Apply min-height, while removing any applied aspect ratio.\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\ttempValue,\n\t\t\t\t[ 'dimensions', 'aspectRatio' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\t};\n\tconst resetMinHeightValue = () => {\n\t\tsetMinHeightValue( undefined );\n\t};\n\tconst hasMinHeightValue = () => !! value?.dimensions?.minHeight;\n\n\t// Aspect Ratio\n\tconst showAspectRatioControl = useHasAspectRatio( settings );\n\tconst aspectRatioValue = decodeValue(\n\t\tinheritedValue?.dimensions?.aspectRatio\n\t);\n\tconst setAspectRatioValue = ( newValue ) => {\n\t\tconst tempValue = setImmutably(\n\t\t\tvalue,\n\t\t\t[ 'dimensions', 'aspectRatio' ],\n\t\t\tnewValue\n\t\t);\n\t\t// Apply aspect-ratio, while removing any applied min-height.\n\t\tonChange(\n\t\t\tsetImmutably( tempValue, [ 'dimensions', 'minHeight' ], undefined )\n\t\t);\n\t};\n\tconst hasAspectRatioValue = () => !! value?.dimensions?.aspectRatio;\n\n\t// Child Layout\n\tconst showChildLayoutControl = useHasChildLayout( settings );\n\tconst childLayout = inheritedValue?.layout;\n\n\tconst setChildLayout = ( newChildLayout ) => {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\tlayout: {\n\t\t\t\t...newChildLayout,\n\t\t\t},\n\t\t} );\n\t};\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tlayout: cleanEmptyObject( {\n\t\t\t\t...previousValue?.layout,\n\t\t\t\tcontentSize: undefined,\n\t\t\t\twideSize: undefined,\n\t\t\t\tselfStretch: undefined,\n\t\t\t\tflexSize: undefined,\n\t\t\t\tcolumnStart: undefined,\n\t\t\t\trowStart: undefined,\n\t\t\t\tcolumnSpan: undefined,\n\t\t\t\trowSpan: undefined,\n\t\t\t} ),\n\t\t\tspacing: {\n\t\t\t\t...previousValue?.spacing,\n\t\t\t\tpadding: undefined,\n\t\t\t\tmargin: undefined,\n\t\t\t\tblockGap: undefined,\n\t\t\t},\n\t\t\tdimensions: {\n\t\t\t\t...previousValue?.dimensions,\n\t\t\t\tminHeight: undefined,\n\t\t\t\taspectRatio: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\tconst onMouseLeaveControls = () => onVisualize( false );\n\n\tconst inputProps = {\n\t\tmin: minMarginValue,\n\t\tonDragStart: () => {\n\t\t\t//Reset to 0 in case the value was negative.\n\t\t\tsetMinMarginValue( 0 );\n\t\t},\n\t\tonDragEnd: () => {\n\t\t\tsetMinMarginValue( minimumMargin );\n\t\t},\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ ( showContentSizeControl || showWideSizeControl ) && (\n\t\t\t\t\n\t\t\t\t\t{ __( 'Set the width of the main content area.' ) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showContentSizeControl && (\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetContentSizeValue( nextContentSize );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showWideSizeControl && (\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetWideSizeValue( nextWideSize );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showPaddingControl && (\n\t\t\t\t\n\t\t\t\t\t{ ! showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showMarginControl && (\n\t\t\t\t\n\t\t\t\t\t{ ! showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showGapControl && (\n\t\t\t\t\n\t\t\t\t\t{ ! showSpacingPresetsControl &&\n\t\t\t\t\t\t( isAxialGap ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t{ showSpacingPresetsControl && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showChildLayoutControl && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showMinHeightControl && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ showAspectRatioControl && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Allow scrolling \"through\" popovers over the canvas. This is only called for\n * as long as the pointer is over a popover. Do not use React events because it\n * will bubble through portals.\n *\n * @param {Object} scrollableRef\n */\nfunction usePopoverScroll( scrollableRef ) {\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! scrollableRef ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onWheel( event ) {\n\t\t\t\tconst { deltaX, deltaY } = event;\n\t\t\t\tscrollableRef.current.scrollBy( deltaX, deltaY );\n\t\t\t}\n\t\t\t// Tell the browser that we do not call event.preventDefault\n\t\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners\n\t\t\tconst options = { passive: true };\n\t\t\tnode.addEventListener( 'wheel', onWheel, options );\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'wheel', onWheel, options );\n\t\t\t};\n\t\t},\n\t\t[ scrollableRef ]\n\t);\n}\n\nexport default usePopoverScroll;\n","const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param {Element} a First element.\n * @param {Element} b Second element.\n *\n * @return {boolean} Whether elements are in the same block.\n */\nexport function isInSameBlock( a, b ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param {Element} blockElement Block container element.\n * @param {Element} element Element.\n *\n * @return {boolean} Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement, element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param {Node?} node DOM node.\n *\n * @return {string|undefined} Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = /** @type {Element} */ ( node );\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param {DOMRect} rect1 First rectangle.\n * @param {DOMRect} rect2 Second rectangle.\n * @return {DOMRect} Union of the two rectangles.\n */\nexport function rectUnion( rect1, rect2 ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param {Element} element Element.\n * @return {boolean} Whether the element is visible.\n */\nfunction isElementVisible( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for component.\n\tif ( element.classList.contains( 'components-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns the rect of the element including all visible nested elements.\n *\n * Visible nested elements, including elements that overflow the parent, are\n * taken into account.\n *\n * This function is useful for calculating the visible area of a block that\n * contains nested elements that overflow the block, e.g. the Navigation block,\n * which can contain overflowing Submenu blocks.\n *\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param {Element} element Element.\n * @return {DOMRect} Bounding client rect of the element and its visible children.\n */\nexport function getVisibleElementBounds( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\n\tconst stack = [ element ];\n\tlet currentElement;\n\n\twhile ( ( currentElement = stack.pop() ) ) {\n\t\tfor ( const child of currentElement.children ) {\n\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\tconst childBounds = child.getBoundingClientRect();\n\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\tstack.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { Popover } from '@wordpress/components';\nimport {\n\tforwardRef,\n\tuseMemo,\n\tuseReducer,\n\tuseLayoutEffect,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport usePopoverScroll from './use-popover-scroll';\nimport { rectUnion, getVisibleElementBounds } from '../../utils/dom';\n\nconst MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;\n\nfunction BlockPopover(\n\t{\n\t\tclientId,\n\t\tbottomClientId,\n\t\tchildren,\n\t\t__unstablePopoverSlot,\n\t\t__unstableContentRef,\n\t\tshift = true,\n\t\t...props\n\t},\n\tref\n) {\n\tconst selectedElement = useBlockElement( clientId );\n\tconst lastSelectedElement = useBlockElement( bottomClientId ?? clientId );\n\tconst mergedRefs = useMergeRefs( [\n\t\tref,\n\t\tusePopoverScroll( __unstableContentRef ),\n\t] );\n\n\tconst [\n\t\tpopoverDimensionsRecomputeCounter,\n\t\tforceRecomputePopoverDimensions,\n\t] = useReducer(\n\t\t// Module is there to make sure that the counter doesn't overflow.\n\t\t( s ) => ( s + 1 ) % MAX_POPOVER_RECOMPUTE_COUNTER,\n\t\t0\n\t);\n\n\t// When blocks are moved up/down, they are animated to their new position by\n\t// updating the `transform` property manually (i.e. without using CSS\n\t// transitions or animations). The animation, which can also scroll the block\n\t// editor, can sometimes cause the position of the Popover to get out of sync.\n\t// A MutationObserver is therefore used to make sure that changes to the\n\t// selectedElement's attribute (i.e. `transform`) can be tracked and used to\n\t// trigger the Popover to rerender.\n\tuseLayoutEffect( () => {\n\t\tif ( ! selectedElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new window.MutationObserver(\n\t\t\tforceRecomputePopoverDimensions\n\t\t);\n\t\tobserver.observe( selectedElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ selectedElement ] );\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tif (\n\t\t\t// popoverDimensionsRecomputeCounter is by definition always equal or greater\n\t\t\t// than 0. This check is only there to satisfy the correctness of the\n\t\t\t// exhaustive-deps rule for the `useMemo` hook.\n\t\t\tpopoverDimensionsRecomputeCounter < 0 ||\n\t\t\t! selectedElement ||\n\t\t\t( bottomClientId && ! lastSelectedElement )\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn lastSelectedElement\n\t\t\t\t\t? rectUnion(\n\t\t\t\t\t\t\tgetVisibleElementBounds( selectedElement ),\n\t\t\t\t\t\t\tgetVisibleElementBounds( lastSelectedElement )\n\t\t\t\t\t )\n\t\t\t\t\t: getVisibleElementBounds( selectedElement );\n\t\t\t},\n\t\t\tcontextElement: selectedElement,\n\t\t};\n\t}, [\n\t\tbottomClientId,\n\t\tlastSelectedElement,\n\t\tselectedElement,\n\t\tpopoverDimensionsRecomputeCounter,\n\t] );\n\n\tif ( ! selectedElement || ( bottomClientId && ! lastSelectedElement ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport const PrivateBlockPopover = forwardRef( BlockPopover );\n\nconst PublicBlockPopover = (\n\t{ clientId, bottomClientId, children, ...props },\n\tref\n) => (\n\t\n\t\t{ children }\n\t\n);\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-popover/README.md\n */\nexport default forwardRef( PublicBlockPopover );\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useMemo, forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport { PrivateBlockPopover } from '.';\n\nfunction BlockPopoverCover(\n\t{\n\t\tclientId,\n\t\tbottomClientId,\n\t\tchildren,\n\t\tshift = false,\n\t\tadditionalStyles,\n\t\t...props\n\t},\n\tref\n) {\n\tbottomClientId ??= clientId;\n\n\tconst selectedElement = useBlockElement( clientId );\n\n\treturn (\n\t\t\n\t\t\t{ selectedElement && clientId === bottomClientId ? (\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction CoverContainer( {\n\tselectedElement,\n\tadditionalStyles = {},\n\tchildren,\n} ) {\n\tconst [ width, setWidth ] = useState( selectedElement.offsetWidth );\n\tconst [ height, setHeight ] = useState( selectedElement.offsetHeight );\n\n\tuseEffect( () => {\n\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\tsetWidth( selectedElement.offsetWidth );\n\t\t\tsetHeight( selectedElement.offsetHeight );\n\t\t} );\n\t\tobserver.observe( selectedElement, { box: 'border-box' } );\n\t\treturn () => observer.disconnect();\n\t}, [ selectedElement ] );\n\n\tconst style = useMemo( () => {\n\t\treturn {\n\t\t\tposition: 'absolute',\n\t\t\twidth,\n\t\t\theight,\n\t\t\t...additionalStyles,\n\t\t};\n\t}, [ width, height, additionalStyles ] );\n\n\treturn
    { children }
    ;\n}\n\nexport default forwardRef( BlockPopoverCover );\n","/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tuseRef,\n\tuseLayoutEffect,\n\tuseEffect,\n\tuseReducer,\n} from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../components/block-popover/cover';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction SpacingVisualizer( { clientId, value, computeStyle, forceShow } ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst [ style, updateStyle ] = useReducer( () =>\n\t\tcomputeStyle( blockElement )\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! blockElement ) {\n\t\t\treturn;\n\t\t}\n\t\t// It's not sufficient to read the computed spacing value when value.spacing changes as\n\t\t// useEffect may run before the browser recomputes CSS. We therefore combine\n\t\t// useLayoutEffect and two rAF calls to ensure that we read the spacing after the current\n\t\t// paint but before the next paint.\n\t\t// See https://github.com/WordPress/gutenberg/pull/59227.\n\t\twindow.requestAnimationFrame( () =>\n\t\t\twindow.requestAnimationFrame( updateStyle )\n\t\t);\n\t}, [ blockElement, value ] );\n\n\tconst previousValueRef = useRef( value );\n\tconst [ isActive, setIsActive ] = useState( false );\n\n\tuseEffect( () => {\n\t\tif ( isShallowEqual( value, previousValueRef.current ) || forceShow ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsActive( true );\n\t\tpreviousValueRef.current = value;\n\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetIsActive( false );\n\t\t}, 400 );\n\n\t\treturn () => {\n\t\t\tsetIsActive( false );\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t}, [ value, forceShow ] );\n\n\tif ( ! isActive && ! forceShow ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\n\t);\n}\n\nfunction getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\nexport function MarginVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t {\n\t\t\t\tconst top = getComputedCSS( blockElement, 'margin-top' );\n\t\t\t\tconst right = getComputedCSS( blockElement, 'margin-right' );\n\t\t\t\tconst bottom = getComputedCSS( blockElement, 'margin-bottom' );\n\t\t\t\tconst left = getComputedCSS( blockElement, 'margin-left' );\n\t\t\t\treturn {\n\t\t\t\t\tborderTopWidth: top,\n\t\t\t\t\tborderRightWidth: right,\n\t\t\t\t\tborderBottomWidth: bottom,\n\t\t\t\t\tborderLeftWidth: left,\n\t\t\t\t\ttop: top ? `-${ top }` : 0,\n\t\t\t\t\tright: right ? `-${ right }` : 0,\n\t\t\t\t\tbottom: bottom ? `-${ bottom }` : 0,\n\t\t\t\t\tleft: left ? `-${ left }` : 0,\n\t\t\t\t};\n\t\t\t} }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n\nexport function PaddingVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t ( {\n\t\t\t\tborderTopWidth: getComputedCSS( blockElement, 'padding-top' ),\n\t\t\t\tborderRightWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-right'\n\t\t\t\t),\n\t\t\t\tborderBottomWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-bottom'\n\t\t\t\t),\n\t\t\t\tborderLeftWidth: getComputedCSS( blockElement, 'padding-left' ),\n\t\t\t} ) }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Platform, useState, useEffect, useCallback } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tDimensionsPanel as StylesDimensionsPanel,\n\tuseHasDimensionsPanel,\n} from '../components/global-styles';\nimport { MarginVisualizer, PaddingVisualizer } from './spacing-visualizer';\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\nimport { cleanEmptyObject, shouldSkipSerialization } from './utils';\n\nexport const DIMENSIONS_SUPPORT_KEY = 'dimensions';\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\nfunction useVisualizer() {\n\tconst [ property, setProperty ] = useState( false );\n\tconst { hideBlockInterface, showBlockInterface } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tuseEffect( () => {\n\t\tif ( ! property ) {\n\t\t\tshowBlockInterface();\n\t\t} else {\n\t\t\thideBlockInterface();\n\t\t}\n\t}, [ property, showBlockInterface, hideBlockInterface ] );\n\n\treturn [ property, setProperty ];\n}\n\nfunction DimensionsInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributes.style;\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\tstyle: updatedStyle,\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport function DimensionsPanel( { clientId, name, setAttributes, settings } ) {\n\tconst isEnabled = useHasDimensionsPanel( settings );\n\tconst value = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId )?.style,\n\t\t[ clientId ]\n\t);\n\tconst [ visualizedProperty, setVisualizedProperty ] = useVisualizer();\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultDimensionsControls = getBlockSupport( name, [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultSpacingControls = getBlockSupport( name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultControls = {\n\t\t...defaultDimensionsControls,\n\t\t...defaultSpacingControls,\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ !! settings?.spacing?.padding && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ !! settings?.spacing?.margin && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\n/**\n * Determine whether there is block support for dimensions.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, DIMENSIONS_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! ( support?.aspectRatio || !! support?.minHeight );\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'minHeight', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasDimensionsSupport( name, 'aspectRatio' );\n\t},\n};\n\nfunction useBlockProps( { name, minHeight, style } ) {\n\tif (\n\t\t! hasDimensionsSupport( name, 'aspectRatio' ) ||\n\t\tshouldSkipSerialization( name, DIMENSIONS_SUPPORT_KEY, 'aspectRatio' )\n\t) {\n\t\treturn {};\n\t}\n\n\tconst className = clsx( {\n\t\t'has-aspect-ratio': !! style?.dimensions?.aspectRatio,\n\t} );\n\n\t// Allow dimensions-based inline style overrides to override any global styles rules that\n\t// might be set for the block, and therefore affect the display of the aspect ratio.\n\tconst inlineStyleOverrides = {};\n\n\t// Apply rules to unset incompatible styles.\n\t// Note that a set `aspectRatio` will win out if both an aspect ratio and a minHeight are set.\n\t// This is because the aspect ratio is a newer block support, so (in theory) any aspect ratio\n\t// that is set should be intentional and should override any existing minHeight. The Cover block\n\t// and dimensions controls have logic that will manually clear the aspect ratio if a minHeight\n\t// is set.\n\tif ( style?.dimensions?.aspectRatio ) {\n\t\t// To ensure the aspect ratio does not get overridden by `minHeight` unset any existing rule.\n\t\tinlineStyleOverrides.minHeight = 'unset';\n\t} else if ( minHeight || style?.dimensions?.minHeight ) {\n\t\t// To ensure the minHeight does not get overridden by `aspectRatio` unset any existing rule.\n\t\tinlineStyleOverrides.aspectRatio = 'unset';\n\t}\n\n\treturn { className, style: inlineStyleOverrides };\n}\n\n/**\n * @deprecated\n */\nexport function useCustomSides() {\n\tdeprecated( 'wp.blockEditor.__experimentalUseCustomSides', {\n\t\tsince: '6.3',\n\t\tversion: '6.4',\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\thasBlockSupport,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { getCSSRules, compileCSS } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport { BACKGROUND_SUPPORT_KEY, BackgroundImagePanel } from './background';\nimport { BORDER_SUPPORT_KEY, BorderPanel, SHADOW_SUPPORT_KEY } from './border';\nimport { COLOR_SUPPORT_KEY, ColorEdit } from './color';\nimport {\n\tTypographyPanel,\n\tTYPOGRAPHY_SUPPORT_KEY,\n\tTYPOGRAPHY_SUPPORT_KEYS,\n} from './typography';\nimport {\n\tDIMENSIONS_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n\tDimensionsPanel,\n} from './dimensions';\nimport {\n\tshouldSkipSerialization,\n\tuseStyleOverride,\n\tuseBlockSettings,\n} from './utils';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\nconst styleSupportKeys = [\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tDIMENSIONS_SUPPORT_KEY,\n\tBACKGROUND_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n\tSHADOW_SUPPORT_KEY,\n];\n\nconst hasStyleSupport = ( nameOrType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( nameOrType, key ) );\n\n/**\n * Returns the inline styles to add depending on the style object\n *\n * @param {Object} styles Styles configuration.\n *\n * @return {Object} Flattened CSS variables declaration.\n */\nexport function getInlineStyles( styles = {} ) {\n\tconst output = {};\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tgetCSSRules( styles ).forEach( ( rule ) => {\n\t\toutput[ rule.key ] = rule.value;\n\t} );\n\n\treturn output;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `style` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttribute( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * @constant\n * @type {Record}\n */\nconst skipSerializationPathsEdit = {\n\t[ `${ BORDER_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [ 'border' ],\n\t[ `${ COLOR_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tCOLOR_SUPPORT_KEY,\n\t],\n\t[ `${ TYPOGRAPHY_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t],\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t],\n\t[ `${ SPACING_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tSPACING_SUPPORT_KEY,\n\t],\n\t[ `${ SHADOW_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tSHADOW_SUPPORT_KEY,\n\t],\n};\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * Extends the Edit skip paths to enable skipping additional paths in just\n * the Save component. This allows a block support to be serialized within the\n * editor, while using an alternate approach, such as server-side rendering, when\n * the support is saved.\n *\n * @constant\n * @type {Record}\n */\nconst skipSerializationPathsSave = {\n\t...skipSerializationPathsEdit,\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.aspectRatio` ]: [\n\t\t`${ DIMENSIONS_SUPPORT_KEY }.aspectRatio`,\n\t], // Skip serialization of aspect ratio in save mode.\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: [ BACKGROUND_SUPPORT_KEY ], // Skip serialization of background support in save mode.\n};\n\nconst skipSerializationPathsSaveChecks = {\n\t[ `${ DIMENSIONS_SUPPORT_KEY }.aspectRatio` ]: true,\n\t[ `${ BACKGROUND_SUPPORT_KEY }` ]: true,\n};\n\n/**\n * A dictionary used to normalize feature names between support flags, style\n * object properties and __experimentSkipSerialization configuration arrays.\n *\n * This allows not having to provide a migration for a support flag and possible\n * backwards compatibility bridges, while still achieving consistency between\n * the support flag and the skip serialization array.\n *\n * @constant\n * @type {Record}\n */\nconst renamedFeatures = { gradients: 'gradient' };\n\n/**\n * A utility function used to remove one or more paths from a style object.\n * Works in a way similar to Lodash's `omit()`. See unit tests and examples below.\n *\n * It supports a single string path:\n *\n * ```\n * omitStyle( { color: 'red' }, 'color' ); // {}\n * ```\n *\n * or an array of paths:\n *\n * ```\n * omitStyle( { color: 'red', background: '#fff' }, [ 'color', 'background' ] ); // {}\n * ```\n *\n * It also allows you to specify paths at multiple levels in a string.\n *\n * ```\n * omitStyle( { typography: { textDecoration: 'underline' } }, 'typography.textDecoration' ); // {}\n * ```\n *\n * You can remove multiple paths at the same time:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t'typography.textDecoration',\n * \t\t\t'typography.textTransform',\n *\t\t]\n * );\n * // {}\n * ```\n *\n * You can also specify nested paths as arrays:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\ttypography: {\n * \t\t\t\ttextDecoration: 'underline',\n * \t\t\t\ttextTransform: 'uppercase',\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'typography', 'textDecoration' ],\n * \t\t\t[ 'typography', 'textTransform' ],\n *\t\t]\n * );\n * // {}\n * ```\n *\n * With regards to nesting of styles, infinite depth is supported:\n *\n * ```\n * omitStyle(\n * \t\t{\n * \t\t\tborder: {\n * \t\t\t\tradius: {\n * \t\t\t\t\ttopLeft: '10px',\n * \t\t\t\t\ttopRight: '0.5rem',\n * \t\t\t\t}\n * \t\t\t}\n *\t\t},\n *\t\t[\n * \t\t\t[ 'border', 'radius', 'topRight' ],\n *\t\t]\n * );\n * // { border: { radius: { topLeft: '10px' } } }\n * ```\n *\n * The third argument, `preserveReference`, defines how to treat the input style object.\n * It is mostly necessary to properly handle mutation when recursively handling the style object.\n * Defaulting to `false`, this will always create a new object, avoiding to mutate `style`.\n * However, when recursing, we change that value to `true` in order to work with a single copy\n * of the original style object.\n *\n * @see https://lodash.com/docs/4.17.15#omit\n *\n * @param {Object} style Styles object.\n * @param {Array|string} paths Paths to remove.\n * @param {boolean} preserveReference True to mutate the `style` object, false otherwise.\n * @return {Object} Styles object with the specified paths removed.\n */\nexport function omitStyle( style, paths, preserveReference = false ) {\n\tif ( ! style ) {\n\t\treturn style;\n\t}\n\n\tlet newStyle = style;\n\tif ( ! preserveReference ) {\n\t\tnewStyle = JSON.parse( JSON.stringify( style ) );\n\t}\n\n\tif ( ! Array.isArray( paths ) ) {\n\t\tpaths = [ paths ];\n\t}\n\n\tpaths.forEach( ( path ) => {\n\t\tif ( ! Array.isArray( path ) ) {\n\t\t\tpath = path.split( '.' );\n\t\t}\n\n\t\tif ( path.length > 1 ) {\n\t\t\tconst [ firstSubpath, ...restPath ] = path;\n\t\t\tomitStyle( newStyle[ firstSubpath ], [ restPath ], true );\n\t\t} else if ( path.length === 1 ) {\n\t\t\tdelete newStyle[ path[ 0 ] ];\n\t\t}\n\t} );\n\n\treturn newStyle;\n}\n\n/**\n * Override props assigned to save component to inject the CSS variables definition.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object|string} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n * @param {?Record} skipPaths An object of keys and paths to skip serialization.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps(\n\tprops,\n\tblockNameOrType,\n\tattributes,\n\tskipPaths = skipSerializationPathsSave\n) {\n\tif ( ! hasStyleSupport( blockNameOrType ) ) {\n\t\treturn props;\n\t}\n\n\tlet { style } = attributes;\n\tObject.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {\n\t\tconst skipSerialization =\n\t\t\tskipSerializationPathsSaveChecks[ indicator ] ||\n\t\t\tgetBlockSupport( blockNameOrType, indicator );\n\n\t\tif ( skipSerialization === true ) {\n\t\t\tstyle = omitStyle( style, path );\n\t\t}\n\n\t\tif ( Array.isArray( skipSerialization ) ) {\n\t\t\tskipSerialization.forEach( ( featureName ) => {\n\t\t\t\tconst feature = renamedFeatures[ featureName ] || featureName;\n\t\t\t\tstyle = omitStyle( style, [ [ ...path, feature ] ] );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tprops.style = {\n\t\t...getInlineStyles( style ),\n\t\t...props.style,\n\t};\n\n\treturn props;\n}\n\nfunction BlockStyleControls( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\t__unstableParentLayout,\n} ) {\n\tconst settings = useBlockSettings( name, __unstableParentLayout );\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst passedProps = {\n\t\tclientId,\n\t\tname,\n\t\tsetAttributes,\n\t\tsettings: {\n\t\t\t...settings,\n\t\t\ttypography: {\n\t\t\t\t...settings.typography,\n\t\t\t\t// The text alignment UI for individual blocks is rendered in\n\t\t\t\t// the block toolbar, so disable it here.\n\t\t\t\ttextAlign: false,\n\t\t\t},\n\t\t},\n\t};\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tedit: BlockStyleControls,\n\thasSupport: hasStyleSupport,\n\taddSaveProps,\n\tattributeKeys: [ 'style' ],\n\tuseBlockProps,\n};\n\n// Defines which element types are supported, including their hover styles or\n// any other elements that have been included under a single element type\n// e.g. heading and h1-h6.\nconst elementTypes = [\n\t{ elementType: 'button' },\n\t{ elementType: 'link', pseudo: [ ':hover' ] },\n\t{\n\t\telementType: 'heading',\n\t\telements: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ],\n\t},\n];\n\nfunction useBlockProps( { name, style } ) {\n\tconst blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(\n\t\tuseBlockProps\n\t) }`;\n\n\tconst baseElementSelector = `.${ blockElementsContainerIdentifier }`;\n\tconst blockElementStyles = style?.elements;\n\n\tconst styles = useMemo( () => {\n\t\tif ( ! blockElementStyles ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementCSSRules = [];\n\n\t\telementTypes.forEach( ( { elementType, pseudo, elements } ) => {\n\t\t\tconst skipSerialization = shouldSkipSerialization(\n\t\t\t\tname,\n\t\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t\telementType\n\t\t\t);\n\n\t\t\tif ( skipSerialization ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst elementStyles = blockElementStyles?.[ elementType ];\n\n\t\t\t// Process primary element type styles.\n\t\t\tif ( elementStyles ) {\n\t\t\t\tconst selector = scopeSelector(\n\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\tELEMENTS[ elementType ]\n\t\t\t\t);\n\n\t\t\t\telementCSSRules.push(\n\t\t\t\t\tcompileCSS( elementStyles, { selector } )\n\t\t\t\t);\n\n\t\t\t\t// Process any interactive states for the element type.\n\t\t\t\tif ( pseudo ) {\n\t\t\t\t\tpseudo.forEach( ( pseudoSelector ) => {\n\t\t\t\t\t\tif ( elementStyles[ pseudoSelector ] ) {\n\t\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\t\tcompileCSS( elementStyles[ pseudoSelector ], {\n\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\t\t`${ ELEMENTS[ elementType ] }${ pseudoSelector }`\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Process related elements e.g. h1-h6 for headings\n\t\t\tif ( elements ) {\n\t\t\t\telements.forEach( ( element ) => {\n\t\t\t\t\tif ( blockElementStyles[ element ] ) {\n\t\t\t\t\t\telementCSSRules.push(\n\t\t\t\t\t\t\tcompileCSS( blockElementStyles[ element ], {\n\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\tbaseElementSelector,\n\t\t\t\t\t\t\t\t\tELEMENTS[ element ]\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn elementCSSRules.length > 0\n\t\t\t? elementCSSRules.join( '' )\n\t\t\t: undefined;\n\t}, [ baseElementSelector, blockElementStyles, name ] );\n\n\tuseStyleOverride( { css: styles } );\n\n\treturn addSaveProps(\n\t\t{ className: blockElementsContainerIdentifier },\n\t\tname,\n\t\t{ style },\n\t\tskipSerializationPathsEdit\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addAttribute',\n\taddAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\nconst hasSettingsSupport = ( blockType ) =>\n\thasBlockSupport( blockType, '__experimentalSettings', false );\n\nfunction addAttribute( settings ) {\n\tif ( ! hasSettingsSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( ! settings?.attributes?.settings ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tsettings: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/settings/addAttribute',\n\taddAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst filter = (\n\t\n\t\t\n\t\n);\n\nexport default filter;\n","/**\n * WordPress dependencies\n */\nimport {\n\tColorIndicator,\n\tDropdown,\n\tDuotonePicker,\n\tDuotoneSwatch,\n\tMenuGroup,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport { Icon, filter } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\n\nfunction DuotoneControl( {\n\tid: idProp,\n\tcolorPalette,\n\tduotonePalette,\n\tdisableCustomColors,\n\tdisableCustomDuotone,\n\tvalue,\n\tonChange,\n} ) {\n\tlet toolbarIcon;\n\tif ( value === 'unset' ) {\n\t\ttoolbarIcon = (\n\t\t\t\n\t\t);\n\t} else if ( value ) {\n\t\ttoolbarIcon = ;\n\t} else {\n\t\ttoolbarIcon = ;\n\t}\n\n\tconst actionLabel = __( 'Apply duotone filter' );\n\tconst id = useInstanceId( DuotoneControl, 'duotone-control', idProp );\n\tconst descriptionId = `${ id }__description`;\n\n\treturn (\n\t\t {\n\t\t\t\tconst openOnArrowDown = ( event ) => {\n\t\t\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonToggle();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t\t\t

    \n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Create a two-tone color effect without losing your original image.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t

    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default DuotoneControl;\n","/**\n * External dependencies\n */\nimport { colord } from 'colord';\n\n/**\n * Convert a list of colors to an object of R, G, and B values.\n *\n * @param {string[]} colors Array of RBG color strings.\n *\n * @return {Object} R, G, and B values.\n */\nexport function getValuesFromColors( colors = [] ) {\n\tconst values = { r: [], g: [], b: [], a: [] };\n\n\tcolors.forEach( ( color ) => {\n\t\tconst rgbColor = colord( color ).toRgb();\n\t\tvalues.r.push( rgbColor.r / 255 );\n\t\tvalues.g.push( rgbColor.g / 255 );\n\t\tvalues.b.push( rgbColor.b / 255 );\n\t\tvalues.a.push( rgbColor.a );\n\t} );\n\n\treturn values;\n}\n\n/**\n * Stylesheet for disabling a global styles duotone filter.\n *\n * @param {string} selector Selector to disable the filter for.\n *\n * @return {string} Filter none style.\n */\nexport function getDuotoneUnsetStylesheet( selector ) {\n\treturn `${ selector }{filter:none}`;\n}\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {string} selector Selector to apply the filter to.\n * @param {string} id Unique id for this duotone filter.\n *\n * @return {string} Duotone filter style.\n */\nexport function getDuotoneStylesheet( selector, id ) {\n\treturn `${ selector }{filter:url(#${ id })}`;\n}\n\n/**\n * The SVG part of the duotone filter.\n *\n * @param {string} id Unique id for this duotone filter.\n * @param {string[]} colors Color strings from dark to light.\n *\n * @return {string} Duotone SVG.\n */\nexport function getDuotoneFilter( id, colors ) {\n\tconst values = getValuesFromColors( colors );\n\treturn `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n`;\n}\n","/**\n * Internal dependencies\n */\nimport { scopeSelector } from './utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/**\n * Determine the CSS selector for the block type and target provided, returning\n * it if available.\n *\n * @param {import('@wordpress/blocks').Block} blockType The block's type.\n * @param {string|string[]} target The desired selector's target e.g. `root`, delimited string, or array path.\n * @param {Object} options Options object.\n * @param {boolean} options.fallback Whether or not to fallback to broader selector.\n *\n * @return {?string} The CSS selector or `null` if no selector available.\n */\nexport function getBlockCSSSelector(\n\tblockType,\n\ttarget = 'root',\n\toptions = {}\n) {\n\tif ( ! target ) {\n\t\treturn null;\n\t}\n\n\tconst { fallback = false } = options;\n\tconst { name, selectors, supports } = blockType;\n\n\tconst hasSelectors = selectors && Object.keys( selectors ).length > 0;\n\tconst path = Array.isArray( target ) ? target.join( '.' ) : target;\n\n\t// Root selector.\n\n\t// Calculated before returning as it can be used as a fallback for feature\n\t// selectors later on.\n\tlet rootSelector = null;\n\n\tif ( hasSelectors && selectors.root ) {\n\t\t// Use the selectors API if available.\n\t\trootSelector = selectors?.root;\n\t} else if ( supports?.__experimentalSelector ) {\n\t\t// Use the old experimental selector supports property if set.\n\t\trootSelector = supports.__experimentalSelector;\n\t} else {\n\t\t// If no root selector found, generate default block class selector.\n\t\trootSelector =\n\t\t\t'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );\n\t}\n\n\t// Return selector if it's the root target we are looking for.\n\tif ( path === 'root' ) {\n\t\treturn rootSelector;\n\t}\n\n\t// If target is not `root` or `duotone` we have a feature or subfeature\n\t// as the target. If the target is a string convert to an array.\n\tconst pathArray = Array.isArray( target ) ? target : target.split( '.' );\n\n\t// Feature selectors ( may fallback to root selector );\n\tif ( pathArray.length === 1 ) {\n\t\tconst fallbackSelector = fallback ? rootSelector : null;\n\n\t\t// Prefer the selectors API if available.\n\t\tif ( hasSelectors ) {\n\t\t\t// Get selector from either `feature.root` or shorthand path.\n\t\t\tconst featureSelector =\n\t\t\t\tgetValueFromObjectPath( selectors, `${ path }.root`, null ) ||\n\t\t\t\tgetValueFromObjectPath( selectors, path, null );\n\n\t\t\t// Return feature selector if found or any available fallback.\n\t\t\treturn featureSelector || fallbackSelector;\n\t\t}\n\n\t\t// Try getting old experimental supports selector value.\n\t\tconst featureSelector = getValueFromObjectPath(\n\t\t\tsupports,\n\t\t\t`${ path }.__experimentalSelector`,\n\t\t\tnull\n\t\t);\n\n\t\t// If nothing to work with, provide fallback selector if available.\n\t\tif ( ! featureSelector ) {\n\t\t\treturn fallbackSelector;\n\t\t}\n\n\t\t// Scope the feature selector by the block's root selector.\n\t\treturn scopeSelector( rootSelector, featureSelector );\n\t}\n\n\t// Subfeature selector.\n\t// This may fallback either to parent feature or root selector.\n\tlet subfeatureSelector;\n\n\t// Use selectors API if available.\n\tif ( hasSelectors ) {\n\t\tsubfeatureSelector = getValueFromObjectPath( selectors, path, null );\n\t}\n\n\t// Only return if we have a subfeature selector.\n\tif ( subfeatureSelector ) {\n\t\treturn subfeatureSelector;\n\t}\n\n\t// To this point we don't have a subfeature selector. If a fallback has been\n\t// requested, remove subfeature from target path and return results of a\n\t// call for the parent feature's selector.\n\tif ( fallback ) {\n\t\treturn getBlockCSSSelector( blockType, pathArray[ 0 ], options );\n\t}\n\n\t// We tried.\n\treturn null;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalZStack as ZStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n\tMenuGroup,\n\tColorIndicator,\n\tDuotonePicker,\n\tDuotoneSwatch,\n\tDropdown,\n\tFlex,\n\tFlexItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getValueFromVariable, useToolsPanelDropdownMenuProps } from './utils';\nimport { setImmutably } from '../../utils/object';\n\nconst EMPTY_ARRAY = [];\nfunction useMultiOriginColorPresets(\n\tsettings,\n\t{ presetSetting, defaultSetting }\n) {\n\tconst disableDefault = ! settings?.color?.[ defaultSetting ];\n\tconst userPresets =\n\t\tsettings?.color?.[ presetSetting ]?.custom || EMPTY_ARRAY;\n\tconst themePresets =\n\t\tsettings?.color?.[ presetSetting ]?.theme || EMPTY_ARRAY;\n\tconst defaultPresets =\n\t\tsettings?.color?.[ presetSetting ]?.default || EMPTY_ARRAY;\n\treturn useMemo(\n\t\t() => [\n\t\t\t...userPresets,\n\t\t\t...themePresets,\n\t\t\t...( disableDefault ? EMPTY_ARRAY : defaultPresets ),\n\t\t],\n\t\t[ disableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function useHasFiltersPanel( settings ) {\n\treturn useHasDuotoneControl( settings );\n}\n\nfunction useHasDuotoneControl( settings ) {\n\treturn (\n\t\tsettings.color.customDuotone ||\n\t\tsettings.color.defaultDuotone ||\n\t\tsettings.color.duotone.length > 0\n\t);\n}\n\nfunction FiltersToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tduotone: true,\n};\n\nconst popoverProps = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-duotone-control__popover',\n\theaderTitle: __( 'Duotone' ),\n};\n\nconst LabeledColorIndicator = ( { indicator, label } ) => (\n\t\n\t\t\n\t\t\t\n\t\t\t\t{ indicator === 'unset' || ! indicator ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t\t{ label }\n\t\n);\n\nexport default function FiltersPanel( {\n\tas: Wrapper = FiltersToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\n\t// Duotone\n\tconst hasDuotoneEnabled = useHasDuotoneControl( settings );\n\tconst duotonePalette = useMultiOriginColorPresets( settings, {\n\t\tpresetSetting: 'duotone',\n\t\tdefaultSetting: 'defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginColorPresets( settings, {\n\t\tpresetSetting: 'palette',\n\t\tdefaultSetting: 'defaultPalette',\n\t} );\n\tconst duotone = decodeValue( inheritedValue?.filter?.duotone );\n\tconst setDuotone = ( newValue ) => {\n\t\tconst duotonePreset = duotonePalette.find( ( { colors } ) => {\n\t\t\treturn colors === newValue;\n\t\t} );\n\t\tconst settedValue = duotonePreset\n\t\t\t? `var:preset|duotone|${ duotonePreset.slug }`\n\t\t\t: newValue;\n\t\tonChange( setImmutably( value, [ 'filter', 'duotone' ], settedValue ) );\n\t};\n\tconst hasDuotone = () => !! value?.filter?.duotone;\n\tconst resetDuotone = () => setDuotone( undefined );\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tfilter: {\n\t\t\t\t...previousValue.filter,\n\t\t\t\tduotone: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t{ hasDuotoneEnabled && (\n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst toggleProps = {\n\t\t\t\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\t\t\t\tclassName: clsx( { 'is-open': isOpen } ),\n\t\t\t\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\trenderContent={ () => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'Create a two-tone color effect without losing your original image.'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\tInspectorControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSettings,\n} from '../components';\nimport {\n\tgetDuotoneFilter,\n\tgetDuotoneStylesheet,\n\tgetDuotoneUnsetStylesheet,\n} from '../components/duotone/utils';\nimport { getBlockCSSSelector } from '../components/global-styles/get-block-css-selector';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport { useBlockSettings, usePrivateStyleOverride } from './utils';\nimport { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nconst EMPTY_ARRAY = [];\n\n// Safari does not always update the duotone filter when the duotone colors\n// are changed. This browser check is later used to force a re-render of the block\n// element to ensure the duotone filter is updated. The check is included at the\n// root of this file as it only needs to be run once per page load.\nconst isSafari =\n\twindow?.navigator.userAgent &&\n\twindow.navigator.userAgent.includes( 'Safari' ) &&\n\t! window.navigator.userAgent.includes( 'Chrome' ) &&\n\t! window.navigator.userAgent.includes( 'Chromium' );\n\nextend( [ namesPlugin ] );\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst [ enableDefault, userPresets, themePresets, defaultPresets ] =\n\t\tuseSettings(\n\t\t\tdefaultSetting,\n\t\t\t`${ presetSetting }.custom`,\n\t\t\t`${ presetSetting }.theme`,\n\t\t\t`${ presetSetting }.default`\n\t\t);\n\treturn useMemo(\n\t\t() => [\n\t\t\t...( userPresets || EMPTY_ARRAY ),\n\t\t\t...( themePresets || EMPTY_ARRAY ),\n\t\t\t...( ( enableDefault && defaultPresets ) || EMPTY_ARRAY ),\n\t\t],\n\t\t[ enableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function getColorsFromDuotonePreset( duotone, duotonePalette ) {\n\tif ( ! duotone ) {\n\t\treturn;\n\t}\n\tconst preset = duotonePalette?.find( ( { slug } ) => {\n\t\treturn duotone === `var:preset|duotone|${ slug }`;\n\t} );\n\n\treturn preset ? preset.colors : undefined;\n}\n\nexport function getDuotonePresetFromColors( colors, duotonePalette ) {\n\tif ( ! colors || ! Array.isArray( colors ) ) {\n\t\treturn;\n\t}\n\n\tconst preset = duotonePalette?.find( ( duotonePreset ) => {\n\t\treturn duotonePreset?.colors?.every(\n\t\t\t( val, index ) => val === colors[ index ]\n\t\t);\n\t} );\n\n\treturn preset ? `var:preset|duotone|${ preset.slug }` : undefined;\n}\n\nfunction DuotonePanelPure( { style, setAttributes, name } ) {\n\tconst duotoneStyle = style?.color?.duotone;\n\tconst settings = useBlockSettings( name );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst [ enableCustomColors, enableCustomDuotone ] = useSettings(\n\t\t'color.custom',\n\t\t'color.customDuotone'\n\t);\n\tconst disableCustomColors = ! enableCustomColors;\n\tconst disableCustomDuotone =\n\t\t! enableCustomDuotone ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst duotonePresetOrColors = ! Array.isArray( duotoneStyle )\n\t\t? getColorsFromDuotonePreset( duotoneStyle, duotonePalette )\n\t\t: duotoneStyle;\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...newDuotone?.filter,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tconst maybePreset = getDuotonePresetFromColors(\n\t\t\t\t\t\t\tnewDuotone,\n\t\t\t\t\t\t\tduotonePalette\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\t\tduotone: maybePreset ?? newDuotone, // use preset or fallback to custom colors.\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t\n\t\t\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: DuotonePanelPure,\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'filter.duotone' );\n\t},\n};\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\t// Previous `color.__experimentalDuotone` support flag is migrated via\n\t// block_type_metadata_settings filter in `lib/block-supports/duotone.php`.\n\tif ( ! hasBlockSupport( settings, 'filter.duotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\nfunction useDuotoneStyles( {\n\tclientId,\n\tid: filterId,\n\tselector: duotoneSelector,\n\tattribute: duotoneAttr,\n} ) {\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\n\t// Possible values for duotone attribute:\n\t// 1. Array of colors - e.g. ['#000000', '#ffffff'].\n\t// 2. Variable for an existing Duotone preset - e.g. 'var:preset|duotone|green-blue' or 'var(--wp--preset--duotone--green-blue)''\n\t// 3. A CSS string - e.g. 'unset' to remove globally applied duotone.\n\tconst isCustom = Array.isArray( duotoneAttr );\n\tconst duotonePreset = isCustom\n\t\t? undefined\n\t\t: getColorsFromDuotonePreset( duotoneAttr, duotonePalette );\n\tconst isPreset = typeof duotoneAttr === 'string' && duotonePreset;\n\tconst isCSS = typeof duotoneAttr === 'string' && ! isPreset;\n\n\t// Match the structure of WP_Duotone_Gutenberg::render_duotone_support() in PHP.\n\tlet colors = null;\n\tif ( isPreset ) {\n\t\t// Array of colors.\n\t\tcolors = duotonePreset;\n\t} else if ( isCSS ) {\n\t\t// CSS filter property string (e.g. 'unset').\n\t\tcolors = duotoneAttr;\n\t} else if ( isCustom ) {\n\t\t// Array of colors.\n\t\tcolors = duotoneAttr;\n\t}\n\n\t// Build the CSS selectors to which the filter will be applied.\n\tconst selectors = duotoneSelector.split( ',' );\n\n\tconst selectorsScoped = selectors.map( ( selectorPart ) => {\n\t\t// Assuming the selector part is a subclass selector (not a tag name)\n\t\t// so we can prepend the filter id class. If we want to support elements\n\t\t// such as `img` or namespaces, we'll need to add a case for that here.\n\t\treturn `.${ filterId }${ selectorPart.trim() }`;\n\t} );\n\n\tconst selector = selectorsScoped.join( ', ' );\n\n\tconst isValidFilter = Array.isArray( colors ) || colors === 'unset';\n\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tcss:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneStylesheet( selector, filterId )\n\t\t\t\t\t\t\t: getDuotoneUnsetStylesheet( selector ),\n\t\t\t\t\t__unstableType: 'presets',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tassets:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneFilter( filterId, colors )\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t__unstableType: 'svgs',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\n\tconst blockElement = useBlockElement( clientId );\n\n\tuseEffect( () => {\n\t\tif ( ! isValidFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Safari does not always update the duotone filter when the duotone\n\t\t// colors are changed. When using Safari, force the block element to be\n\t\t// repainted by the browser to ensure any changes are reflected\n\t\t// visually. This logic matches that used on the site frontend in\n\t\t// `block-supports/duotone.php`.\n\t\tif ( blockElement && isSafari ) {\n\t\t\tconst display = blockElement.style.display;\n\t\t\t// Switch to `inline-block` to force a repaint. In the editor,\n\t\t\t// `inline-block` is used instead of `none` to ensure that scroll\n\t\t\t// position is not affected, as `none` results in the editor\n\t\t\t// scrolling to the top of the block.\n\t\t\tblockElement.style.display = 'inline-block';\n\t\t\t// Simply accessing el.offsetHeight flushes layout and style changes\n\t\t\t// in WebKit without having to wait for setTimeout.\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tblockElement.offsetHeight;\n\t\t\tblockElement.style.display = display;\n\t\t}\n\t\t// `colors` must be a dependency so this effect runs when the colors\n\t\t// change in Safari.\n\t}, [ isValidFilter, blockElement, colors ] );\n}\n\nfunction useBlockProps( { clientId, name, style } ) {\n\tconst id = useInstanceId( useBlockProps );\n\tconst selector = useMemo( () => {\n\t\tconst blockType = getBlockType( name );\n\n\t\tif ( blockType ) {\n\t\t\t// Backwards compatibility for `supports.color.__experimentalDuotone`\n\t\t\t// is provided via the `block_type_metadata_settings` filter. If\n\t\t\t// `supports.filter.duotone` has not been set and the\n\t\t\t// experimental property has been, the experimental property\n\t\t\t// value is copied into `supports.filter.duotone`.\n\t\t\tconst duotoneSupport = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'filter.duotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( ! duotoneSupport ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// If the experimental duotone support was set, that value is\n\t\t\t// to be treated as a selector and requires scoping.\n\t\t\tconst experimentalDuotone = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'color.__experimentalDuotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( experimentalDuotone ) {\n\t\t\t\tconst rootSelector = getBlockCSSSelector( blockType );\n\t\t\t\treturn typeof experimentalDuotone === 'string'\n\t\t\t\t\t? scopeSelector( rootSelector, experimentalDuotone )\n\t\t\t\t\t: rootSelector;\n\t\t\t}\n\n\t\t\t// Regular filter.duotone support uses filter.duotone selectors with fallbacks.\n\t\t\treturn getBlockCSSSelector( blockType, 'filter.duotone', {\n\t\t\t\tfallback: true,\n\t\t\t} );\n\t\t}\n\t}, [ name ] );\n\n\tconst attribute = style?.color?.duotone;\n\n\tconst filterClass = `wp-duotone-${ id }`;\n\n\tconst shouldRender = selector && attribute;\n\n\tuseDuotoneStyles( {\n\t\tclientId,\n\t\tid: filterClass,\n\t\tselector,\n\t\tattribute,\n\t} );\n\n\treturn {\n\t\tclassName: shouldRender ? filterClass : '',\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blocksStore,\n\tisReusableBlock,\n\tisTemplatePart,\n\t__experimentalGetBlockLabel as getBlockLabel,\n} from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('@wordpress/blocks').WPIcon} WPIcon */\n\n/**\n * Contains basic block's information for display reasons.\n *\n * @typedef {Object} WPBlockDisplayInformation\n *\n * @property {boolean} isSynced True if is a reusable block or template part\n * @property {string} title Human-readable block type label.\n * @property {WPIcon} icon Block type icon.\n * @property {string} description A detailed block type description.\n * @property {string} anchor HTML anchor.\n * @property {name} name A custom, human readable name for the block.\n */\n\n/**\n * Get the display label for a block's position type.\n *\n * @param {Object} attributes Block attributes.\n * @return {string} The position type label.\n */\nfunction getPositionTypeLabel( attributes ) {\n\tconst positionType = attributes?.style?.position?.type;\n\n\tif ( positionType === 'sticky' ) {\n\t\treturn __( 'Sticky' );\n\t}\n\n\tif ( positionType === 'fixed' ) {\n\t\treturn __( 'Fixed' );\n\t}\n\n\treturn null;\n}\n\n/**\n * Hook used to try to find a matching block variation and return\n * the appropriate information for display reasons. In order to\n * to try to find a match we need to things:\n * 1. Block's client id to extract it's current attributes.\n * 2. A block variation should have set `isActive` prop to a proper function.\n *\n * If for any reason a block variation match cannot be found,\n * the returned information come from the Block Type.\n * If no blockType is found with the provided clientId, returns null.\n *\n * @param {string} clientId Block's client id.\n * @return {?WPBlockDisplayInformation} Block's display information, or `null` when the block or its type not found.\n */\n\nexport default function useBlockDisplayInformation( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tif ( ! blockType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isSynced =\n\t\t\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\t\t\tconst syncedTitle = isSynced\n\t\t\t\t? getBlockLabel( blockType, attributes )\n\t\t\t\t: undefined;\n\t\t\tconst title = syncedTitle || blockType.title;\n\t\t\tconst positionLabel = getPositionTypeLabel( attributes );\n\t\t\tconst blockTypeInfo = {\n\t\t\t\tisSynced,\n\t\t\t\ttitle,\n\t\t\t\ticon: blockType.icon,\n\t\t\t\tdescription: blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t\tname: attributes?.metadata?.name,\n\t\t\t};\n\t\t\tif ( ! match ) {\n\t\t\t\treturn blockTypeInfo;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisSynced,\n\t\t\t\ttitle: match.title || blockType.title,\n\t\t\t\ticon: match.icon || blockType.icon,\n\t\t\t\tdescription: match.description || blockType.description,\n\t\t\t\tanchor: attributes?.anchor,\n\t\t\t\tpositionLabel,\n\t\t\t\tpositionType: attributes?.style?.position?.type,\n\t\t\t\tname: attributes?.metadata?.name,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { BaseControl, CustomSelectControl } from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo, Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../components/use-settings';\nimport InspectorControls from '../components/inspector-controls';\nimport useBlockDisplayInformation from '../components/use-block-display-information';\nimport { cleanEmptyObject, useStyleOverride } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nconst POSITION_SUPPORT_KEY = 'position';\n\nconst DEFAULT_OPTION = {\n\tkey: 'default',\n\tvalue: '',\n\tname: __( 'Default' ),\n};\n\nconst STICKY_OPTION = {\n\tkey: 'sticky',\n\tvalue: 'sticky',\n\tname: _x( 'Sticky', 'Name for the value of the CSS position property' ),\n\thint: __(\n\t\t'The block will stick to the top of the window instead of scrolling.'\n\t),\n};\n\nconst FIXED_OPTION = {\n\tkey: 'fixed',\n\tvalue: 'fixed',\n\tname: _x( 'Fixed', 'Name for the value of the CSS position property' ),\n\thint: __( 'The block will not move when the page is scrolled.' ),\n};\n\nconst POSITION_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nconst VALID_POSITION_TYPES = [ 'sticky', 'fixed' ];\n\n/**\n * Get calculated position CSS.\n *\n * @param {Object} props Component props.\n * @param {string} props.selector Selector to use.\n * @param {Object} props.style Style object.\n * @return {string} The generated CSS rules.\n */\nexport function getPositionCSS( { selector, style } ) {\n\tlet output = '';\n\n\tconst { type: positionType } = style?.position || {};\n\n\tif ( ! VALID_POSITION_TYPES.includes( positionType ) ) {\n\t\treturn output;\n\t}\n\n\toutput += `${ selector } {`;\n\toutput += `position: ${ positionType };`;\n\n\tPOSITION_SIDES.forEach( ( side ) => {\n\t\tif ( style?.position?.[ side ] !== undefined ) {\n\t\t\toutput += `${ side }: ${ style.position[ side ] };`;\n\t\t}\n\t} );\n\n\tif ( positionType === 'sticky' || positionType === 'fixed' ) {\n\t\t// TODO: Replace hard-coded z-index value with a z-index preset approach in theme.json.\n\t\toutput += `z-index: 10`;\n\t}\n\toutput += `}`;\n\n\treturn output;\n}\n\n/**\n * Determines if there is sticky position support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasStickyPositionSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, POSITION_SUPPORT_KEY );\n\treturn !! ( true === support || support?.sticky );\n}\n\n/**\n * Determines if there is fixed position support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasFixedPositionSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, POSITION_SUPPORT_KEY );\n\treturn !! ( true === support || support?.fixed );\n}\n\n/**\n * Determines if there is position support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasPositionSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, POSITION_SUPPORT_KEY );\n\treturn !! support;\n}\n\n/**\n * Checks if there is a current value in the position block support attributes.\n *\n * @param {Object} props Block props.\n * @return {boolean} Whether or not the block has a position value set.\n */\nexport function hasPositionValue( props ) {\n\treturn props.attributes.style?.position?.type !== undefined;\n}\n\n/**\n * Checks if the block is currently set to a sticky or fixed position.\n * This check is helpful for determining how to position block toolbars or other elements.\n *\n * @param {Object} attributes Block attributes.\n * @return {boolean} Whether or not the block is set to a sticky or fixed position.\n */\nexport function hasStickyOrFixedPositionValue( attributes ) {\n\tconst positionType = attributes?.style?.position?.type;\n\treturn positionType === 'sticky' || positionType === 'fixed';\n}\n\n/**\n * Resets the position block support attributes. This can be used when disabling\n * the position support controls for a block via a `ToolsPanel`.\n *\n * @param {Object} props Block props.\n * @param {Object} props.attributes Block's attributes.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetPosition( { attributes = {}, setAttributes } ) {\n\tconst { style = {} } = attributes;\n\n\tsetAttributes( {\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...style,\n\t\t\tposition: {\n\t\t\t\t...style?.position,\n\t\t\t\ttype: undefined,\n\t\t\t\ttop: undefined,\n\t\t\t\tright: undefined,\n\t\t\t\tbottom: undefined,\n\t\t\t\tleft: undefined,\n\t\t\t},\n\t\t} ),\n\t} );\n}\n\n/**\n * Custom hook that checks if position settings have been disabled.\n *\n * @param {string} name The name of the block.\n *\n * @return {boolean} Whether padding setting is disabled.\n */\nexport function useIsPositionDisabled( { name: blockName } = {} ) {\n\tconst [ allowFixed, allowSticky ] = useSettings(\n\t\t'position.fixed',\n\t\t'position.sticky'\n\t);\n\tconst isDisabled = ! allowFixed && ! allowSticky;\n\n\treturn ! hasPositionSupport( blockName ) || isDisabled;\n}\n\n/*\n * Position controls rendered in an inspector control panel.\n *\n * @param {Object} props\n *\n * @return {Element} Position panel.\n */\nexport function PositionPanelPure( {\n\tstyle = {},\n\tclientId,\n\tname: blockName,\n\tsetAttributes,\n} ) {\n\tconst allowFixed = hasFixedPositionSupport( blockName );\n\tconst allowSticky = hasStickyPositionSupport( blockName );\n\tconst value = style?.position?.type;\n\n\tconst { firstParentClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockParents } = select( blockEditorStore );\n\t\t\tconst parents = getBlockParents( clientId );\n\t\t\treturn { firstParentClientId: parents[ parents.length - 1 ] };\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst blockInformation = useBlockDisplayInformation( firstParentClientId );\n\tconst stickyHelpText =\n\t\tallowSticky && value === STICKY_OPTION.value && blockInformation\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: %s: the name of the parent block. */\n\t\t\t\t\t__(\n\t\t\t\t\t\t'The block will stick to the scrollable area of the parent %s block.'\n\t\t\t\t\t),\n\t\t\t\t\tblockInformation.title\n\t\t\t )\n\t\t\t: null;\n\n\tconst options = useMemo( () => {\n\t\tconst availableOptions = [ DEFAULT_OPTION ];\n\t\t// Display options if they are allowed, or if a block already has a valid value set.\n\t\t// This allows for a block to be switched off from a position type that is not allowed.\n\t\tif ( allowSticky || value === STICKY_OPTION.value ) {\n\t\t\tavailableOptions.push( STICKY_OPTION );\n\t\t}\n\t\tif ( allowFixed || value === FIXED_OPTION.value ) {\n\t\t\tavailableOptions.push( FIXED_OPTION );\n\t\t}\n\t\treturn availableOptions;\n\t}, [ allowFixed, allowSticky, value ] );\n\n\tconst onChangeType = ( next ) => {\n\t\t// For now, use a hard-coded `0px` value for the position.\n\t\t// `0px` is preferred over `0` as it can be used in `calc()` functions.\n\t\t// In the future, it could be useful to allow for an offset value.\n\t\tconst placementValue = '0px';\n\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\tposition: {\n\t\t\t\t...style?.position,\n\t\t\t\ttype: next,\n\t\t\t\ttop:\n\t\t\t\t\tnext === 'sticky' || next === 'fixed'\n\t\t\t\t\t\t? placementValue\n\t\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tconst selectedOption = value\n\t\t? options.find( ( option ) => option.value === value ) || DEFAULT_OPTION\n\t\t: DEFAULT_OPTION;\n\n\t// Only display position controls if there is at least one option to choose from.\n\treturn Platform.select( {\n\t\tweb:\n\t\t\toptions.length > 1 ? (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tonChangeType( selectedItem.value );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : null,\n\t\tnative: null,\n\t} );\n}\n\nexport default {\n\tedit: function Edit( props ) {\n\t\tconst isPositionDisabled = useIsPositionDisabled( props );\n\t\tif ( isPositionDisabled ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn ;\n\t},\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, POSITION_SUPPORT_KEY );\n\t},\n};\n\nfunction useBlockProps( { name, style } ) {\n\tconst hasPositionBlockSupport = hasBlockSupport(\n\t\tname,\n\t\tPOSITION_SUPPORT_KEY\n\t);\n\tconst isPositionDisabled = useIsPositionDisabled( { name } );\n\tconst allowPositionStyles = hasPositionBlockSupport && ! isPositionDisabled;\n\n\tconst id = useInstanceId( useBlockProps );\n\n\t// Higher specificity to override defaults in editor UI.\n\tconst positionSelector = `.wp-container-${ id }.wp-container-${ id }`;\n\n\t// Get CSS string for the current position values.\n\tlet css;\n\tif ( allowPositionStyles ) {\n\t\tcss =\n\t\t\tgetPositionCSS( {\n\t\t\t\tselector: positionSelector,\n\t\t\t\tstyle,\n\t\t\t} ) || '';\n\t}\n\n\t// Attach a `wp-container-` id-based class name.\n\tconst className = clsx( {\n\t\t[ `wp-container-${ id }` ]: allowPositionStyles && !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t[ `is-position-${ style?.position?.type }` ]:\n\t\t\tallowPositionStyles && !! css && !! style?.position?.type,\n\t} );\n\n\tuseStyleOverride( { css } );\n\n\treturn { className };\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n\tgetBlockSupport,\n\tgetBlockTypes,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\nimport { getCSSRules, getCSSValueFromRawStyle } from '@wordpress/style-engine';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tPRESET_METADATA,\n\tROOT_BLOCK_SELECTOR,\n\tROOT_CSS_PROPERTIES_SELECTOR,\n\tscopeSelector,\n\tscopeFeatureSelectors,\n\tappendToSelector,\n\tgetBlockStyleVariationSelector,\n\tgetResolvedValue,\n} from './utils';\nimport { getBlockCSSSelector } from './get-block-css-selector';\nimport { getTypographyFontSizeValue } from './typography-utils';\nimport { GlobalStylesContext } from './context';\nimport { useGlobalSetting } from './hooks';\nimport { getDuotoneFilter } from '../duotone/utils';\nimport { getGapCSSValue } from '../../hooks/gap';\nimport { setBackgroundStyleDefaults } from '../../hooks/background';\nimport { store as blockEditorStore } from '../../store';\nimport { LAYOUT_DEFINITIONS } from '../../layouts/definitions';\nimport { getValueFromObjectPath, setImmutably } from '../../utils/object';\nimport { unlock } from '../../lock-unlock';\n\n// Elements that rely on class names in their selectors.\nconst ELEMENT_CLASS_NAMES = {\n\tbutton: 'wp-element-button',\n\tcaption: 'wp-element-caption',\n};\n\n// List of block support features that can have their related styles\n// generated under their own feature level selector rather than the block's.\nconst BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = {\n\t__experimentalBorder: 'border',\n\tcolor: 'color',\n\tspacing: 'spacing',\n\ttypography: 'typography',\n};\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Transform given preset tree into a set of style declarations.\n *\n * @param {Object} blockPresets\n * @param {Object} mergedSettings Merged theme.json settings.\n *\n * @return {Array} An array of style declarations.\n */\nfunction getPresetsDeclarations( blockPresets = {}, mergedSettings ) {\n\treturn PRESET_METADATA.reduce(\n\t\t( declarations, { path, valueKey, valueFunc, cssVarInfix } ) => {\n\t\t\tconst presetByOrigin = getValueFromObjectPath(\n\t\t\t\tblockPresets,\n\t\t\t\tpath,\n\t\t\t\t[]\n\t\t\t);\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( value ) => {\n\t\t\t\t\t\tif ( valueKey && ! valueFunc ) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ value[ valueKey ] }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tvalueFunc &&\n\t\t\t\t\t\t\ttypeof valueFunc === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t`--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\t\tvalue.slug\n\t\t\t\t\t\t\t\t) }: ${ valueFunc( value, mergedSettings ) }`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n}\n\n/**\n * Transform given preset tree into a set of preset class declarations.\n *\n * @param {?string} blockSelector\n * @param {Object} blockPresets\n * @return {string} CSS declarations for the preset classes.\n */\nfunction getPresetsClasses( blockSelector = '*', blockPresets = {} ) {\n\treturn PRESET_METADATA.reduce(\n\t\t( declarations, { path, cssVarInfix, classes } ) => {\n\t\t\tif ( ! classes ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst presetByOrigin = getValueFromObjectPath(\n\t\t\t\tblockPresets,\n\t\t\t\tpath,\n\t\t\t\t[]\n\t\t\t);\n\t\t\t[ 'default', 'theme', 'custom' ].forEach( ( origin ) => {\n\t\t\t\tif ( presetByOrigin[ origin ] ) {\n\t\t\t\t\tpresetByOrigin[ origin ].forEach( ( { slug } ) => {\n\t\t\t\t\t\tclasses.forEach( ( { classSuffix, propertyName } ) => {\n\t\t\t\t\t\t\tconst classSelectorToUse = `.has-${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) }-${ classSuffix }`;\n\t\t\t\t\t\t\tconst selectorToUse = blockSelector\n\t\t\t\t\t\t\t\t.split( ',' ) // Selector can be \"h1, h2, h3\"\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t( selector ) =>\n\t\t\t\t\t\t\t\t\t\t`${ selector }${ classSelectorToUse }`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join( ',' );\n\t\t\t\t\t\t\tconst value = `var(--wp--preset--${ cssVarInfix }--${ kebabCase(\n\t\t\t\t\t\t\t\tslug\n\t\t\t\t\t\t\t) })`;\n\t\t\t\t\t\t\tdeclarations += `${ selectorToUse }{${ propertyName }: ${ value } !important;}`;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn declarations;\n\t\t},\n\t\t''\n\t);\n}\n\nfunction getPresetsSvgFilters( blockPresets = {} ) {\n\treturn PRESET_METADATA.filter(\n\t\t// Duotone are the only type of filters for now.\n\t\t( metadata ) => metadata.path.at( -1 ) === 'duotone'\n\t).flatMap( ( metadata ) => {\n\t\tconst presetByOrigin = getValueFromObjectPath(\n\t\t\tblockPresets,\n\t\t\tmetadata.path,\n\t\t\t{}\n\t\t);\n\t\treturn [ 'default', 'theme' ]\n\t\t\t.filter( ( origin ) => presetByOrigin[ origin ] )\n\t\t\t.flatMap( ( origin ) =>\n\t\t\t\tpresetByOrigin[ origin ].map( ( preset ) =>\n\t\t\t\t\tgetDuotoneFilter(\n\t\t\t\t\t\t`wp-duotone-${ preset.slug }`,\n\t\t\t\t\t\tpreset.colors\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.join( '' );\n\t} );\n}\n\nfunction flattenTree( input = {}, prefix, token ) {\n\tlet result = [];\n\tObject.keys( input ).forEach( ( key ) => {\n\t\tconst newKey = prefix + kebabCase( key.replace( '/', '-' ) );\n\t\tconst newLeaf = input[ key ];\n\n\t\tif ( newLeaf instanceof Object ) {\n\t\t\tconst newPrefix = newKey + token;\n\t\t\tresult = [ ...result, ...flattenTree( newLeaf, newPrefix, token ) ];\n\t\t} else {\n\t\t\tresult.push( `${ newKey }: ${ newLeaf }` );\n\t\t}\n\t} );\n\treturn result;\n}\n\n/**\n * Gets variation selector string from feature selector.\n *\n * @param {string} featureSelector The feature selector.\n *\n * @param {string} styleVariationSelector The style variation selector.\n * @return {string} Combined selector string.\n */\nfunction concatFeatureVariationSelectorString(\n\tfeatureSelector,\n\tstyleVariationSelector\n) {\n\tconst featureSelectors = featureSelector.split( ',' );\n\tconst combinedSelectors = [];\n\tfeatureSelectors.forEach( ( selector ) => {\n\t\tcombinedSelectors.push(\n\t\t\t`${ styleVariationSelector.trim() }${ selector.trim() }`\n\t\t);\n\t} );\n\treturn combinedSelectors.join( ', ' );\n}\n\n/**\n * Generate style declarations for a block's custom feature and subfeature\n * selectors.\n *\n * NOTE: The passed `styles` object will be mutated by this function.\n *\n * @param {Object} selectors Custom selectors object for a block.\n * @param {Object} styles A block's styles object.\n *\n * @return {Object} Style declarations.\n */\nconst getFeatureDeclarations = ( selectors, styles ) => {\n\tconst declarations = {};\n\n\tObject.entries( selectors ).forEach( ( [ feature, selector ] ) => {\n\t\t// We're only processing features/subfeatures that have styles.\n\t\tif ( feature === 'root' || ! styles?.[ feature ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isShorthand = typeof selector === 'string';\n\n\t\t// If we have a selector object instead of shorthand process it.\n\t\tif ( ! isShorthand ) {\n\t\t\tObject.entries( selector ).forEach(\n\t\t\t\t( [ subfeature, subfeatureSelector ] ) => {\n\t\t\t\t\t// Don't process root feature selector yet or any\n\t\t\t\t\t// subfeature that doesn't have a style.\n\t\t\t\t\tif (\n\t\t\t\t\t\tsubfeature === 'root' ||\n\t\t\t\t\t\t! styles?.[ feature ][ subfeature ]\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create a temporary styles object and build\n\t\t\t\t\t// declarations for subfeature.\n\t\t\t\t\tconst subfeatureStyles = {\n\t\t\t\t\t\t[ feature ]: {\n\t\t\t\t\t\t\t[ subfeature ]: styles[ feature ][ subfeature ],\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tconst newDeclarations =\n\t\t\t\t\t\tgetStylesDeclarations( subfeatureStyles );\n\n\t\t\t\t\t// Merge new declarations in with any others that\n\t\t\t\t\t// share the same selector.\n\t\t\t\t\tdeclarations[ subfeatureSelector ] = [\n\t\t\t\t\t\t...( declarations[ subfeatureSelector ] || [] ),\n\t\t\t\t\t\t...newDeclarations,\n\t\t\t\t\t];\n\n\t\t\t\t\t// Remove the subfeature's style now it will be\n\t\t\t\t\t// included under its own selector not the block's.\n\t\t\t\t\tdelete styles[ feature ][ subfeature ];\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Now subfeatures have been processed and removed, we can\n\t\t// process root, or shorthand, feature selectors.\n\t\tif ( isShorthand || selector.root ) {\n\t\t\tconst featureSelector = isShorthand ? selector : selector.root;\n\n\t\t\t// Create temporary style object and build declarations for feature.\n\t\t\tconst featureStyles = { [ feature ]: styles[ feature ] };\n\t\t\tconst newDeclarations = getStylesDeclarations( featureStyles );\n\n\t\t\t// Merge new declarations with any others that share the selector.\n\t\t\tdeclarations[ featureSelector ] = [\n\t\t\t\t...( declarations[ featureSelector ] || [] ),\n\t\t\t\t...newDeclarations,\n\t\t\t];\n\n\t\t\t// Remove the feature from the block's styles now as it will be\n\t\t\t// included under its own selector not the block's.\n\t\t\tdelete styles[ feature ];\n\t\t}\n\t} );\n\n\treturn declarations;\n};\n\n/**\n * Transform given style tree into a set of style declarations.\n *\n * @param {Object} blockStyles Block styles.\n *\n * @param {string} selector The selector these declarations should attach to.\n *\n * @param {boolean} useRootPaddingAlign Whether to use CSS custom properties in root selector.\n *\n * @param {Object} tree A theme.json tree containing layout definitions.\n *\n * @param {boolean} disableRootPadding Whether to force disable the root padding styles.\n * @return {Array} An array of style declarations.\n */\nexport function getStylesDeclarations(\n\tblockStyles = {},\n\tselector = '',\n\tuseRootPaddingAlign,\n\ttree = {},\n\tdisableRootPadding = false\n) {\n\tconst isRoot = ROOT_BLOCK_SELECTOR === selector;\n\tconst output = Object.entries( STYLE_PROPERTY ).reduce(\n\t\t(\n\t\t\tdeclarations,\n\t\t\t[ key, { value, properties, useEngine, rootOnly } ]\n\t\t) => {\n\t\t\tif ( rootOnly && ! isRoot ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\t\t\tconst pathToValue = value;\n\t\t\tif ( pathToValue[ 0 ] === 'elements' || useEngine ) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tconst styleValue = getValueFromObjectPath(\n\t\t\t\tblockStyles,\n\t\t\t\tpathToValue\n\t\t\t);\n\n\t\t\t// Root-level padding styles don't currently support strings with CSS shorthand values.\n\t\t\t// This may change: https://github.com/WordPress/gutenberg/issues/40132.\n\t\t\tif (\n\t\t\t\tkey === '--wp--style--root--padding' &&\n\t\t\t\t( typeof styleValue === 'string' || ! useRootPaddingAlign )\n\t\t\t) {\n\t\t\t\treturn declarations;\n\t\t\t}\n\n\t\t\tif ( properties && typeof styleValue !== 'string' ) {\n\t\t\t\tObject.entries( properties ).forEach( ( entry ) => {\n\t\t\t\t\tconst [ name, prop ] = entry;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! getValueFromObjectPath( styleValue, [ prop ], false )\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Do not create a declaration\n\t\t\t\t\t\t// for sub-properties that don't have any value.\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cssProperty = name.startsWith( '--' )\n\t\t\t\t\t\t? name\n\t\t\t\t\t\t: kebabCase( name );\n\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t`${ cssProperty }: ${ getCSSValueFromRawStyle(\n\t\t\t\t\t\t\tgetValueFromObjectPath( styleValue, [ prop ] )\n\t\t\t\t\t\t) }`\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else if (\n\t\t\t\tgetValueFromObjectPath( blockStyles, pathToValue, false )\n\t\t\t) {\n\t\t\t\tconst cssProperty = key.startsWith( '--' )\n\t\t\t\t\t? key\n\t\t\t\t\t: kebabCase( key );\n\t\t\t\tdeclarations.push(\n\t\t\t\t\t`${ cssProperty }: ${ getCSSValueFromRawStyle(\n\t\t\t\t\t\tgetValueFromObjectPath( blockStyles, pathToValue )\n\t\t\t\t\t) }`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn declarations;\n\t\t},\n\t\t[]\n\t);\n\n\t/*\n\t * Preprocess background image values.\n\t *\n\t * Note: As we absorb more and more styles into the engine, we could simplify this function.\n\t * A refactor is for the style engine to handle ref resolution (and possibly defaults)\n\t * via a public util used internally and externally. Theme.json tree and defaults could be passed\n\t * as options.\n\t */\n\tif ( !! blockStyles.background ) {\n\t\t/*\n\t\t * Resolve dynamic values before they are compiled by the style engine,\n\t\t * which doesn't (yet) resolve dynamic values.\n\t\t */\n\t\tif ( blockStyles.background?.backgroundImage ) {\n\t\t\tblockStyles.background.backgroundImage = getResolvedValue(\n\t\t\t\tblockStyles.background.backgroundImage,\n\t\t\t\ttree\n\t\t\t);\n\t\t}\n\n\t\t/*\n\t\t * Set default values for block background styles.\n\t\t * Top-level styles are an exception as they are applied to the body.\n\t\t */\n\t\tif ( ! isRoot && !! blockStyles.background?.backgroundImage?.id ) {\n\t\t\tblockStyles = {\n\t\t\t\t...blockStyles,\n\t\t\t\tbackground: {\n\t\t\t\t\t...blockStyles.background,\n\t\t\t\t\t...setBackgroundStyleDefaults( blockStyles.background ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\n\tconst extraRules = getCSSRules( blockStyles );\n\textraRules.forEach( ( rule ) => {\n\t\t// Don't output padding properties if padding variables are set or if we're not editing a full template.\n\t\tif (\n\t\t\tisRoot &&\n\t\t\t( useRootPaddingAlign || disableRootPadding ) &&\n\t\t\trule.key.startsWith( 'padding' )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst cssProperty = rule.key.startsWith( '--' )\n\t\t\t? rule.key\n\t\t\t: kebabCase( rule.key );\n\n\t\tlet ruleValue = getResolvedValue( rule.value, tree, null );\n\n\t\t// Calculate fluid typography rules where available.\n\t\tif ( cssProperty === 'font-size' ) {\n\t\t\t/*\n\t\t\t * getTypographyFontSizeValue() will check\n\t\t\t * if fluid typography has been activated and also\n\t\t\t * whether the incoming value can be converted to a fluid value.\n\t\t\t * Values that already have a \"clamp()\" function will not pass the test,\n\t\t\t * and therefore the original $value will be returned.\n\t\t\t */\n\t\t\truleValue = getTypographyFontSizeValue(\n\t\t\t\t{ size: ruleValue },\n\t\t\t\ttree?.settings\n\t\t\t);\n\t\t}\n\n\t\t// For aspect ratio to work, other dimensions rules (and Cover block defaults) must be unset.\n\t\t// This ensures that a fixed height does not override the aspect ratio.\n\t\tif ( cssProperty === 'aspect-ratio' ) {\n\t\t\toutput.push( 'min-height: unset' );\n\t\t}\n\n\t\toutput.push( `${ cssProperty }: ${ ruleValue }` );\n\t} );\n\n\treturn output;\n}\n\n/**\n * Get generated CSS for layout styles by looking up layout definitions provided\n * in theme.json, and outputting common layout styles, and specific blockGap values.\n *\n * @param {Object} props\n * @param {Object} props.layoutDefinitions Layout definitions, keyed by layout type.\n * @param {Object} props.style A style object containing spacing values.\n * @param {string} props.selector Selector used to group together layout styling rules.\n * @param {boolean} props.hasBlockGapSupport Whether or not the theme opts-in to blockGap support.\n * @param {boolean} props.hasFallbackGapSupport Whether or not the theme allows fallback gap styles.\n * @param {?string} props.fallbackGapValue An optional fallback gap value if no real gap value is available.\n * @return {string} Generated CSS rules for the layout styles.\n */\nexport function getLayoutStyles( {\n\tlayoutDefinitions = LAYOUT_DEFINITIONS,\n\tstyle,\n\tselector,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tfallbackGapValue,\n} ) {\n\tlet ruleset = '';\n\tlet gapValue = hasBlockGapSupport\n\t\t? getGapCSSValue( style?.spacing?.blockGap )\n\t\t: '';\n\n\t// Ensure a fallback gap value for the root layout definitions,\n\t// and use a fallback value if one is provided for the current block.\n\tif ( hasFallbackGapSupport ) {\n\t\tif ( selector === ROOT_BLOCK_SELECTOR ) {\n\t\t\tgapValue = ! gapValue ? '0.5em' : gapValue;\n\t\t} else if ( ! hasBlockGapSupport && fallbackGapValue ) {\n\t\t\tgapValue = fallbackGapValue;\n\t\t}\n\t}\n\n\tif ( gapValue && layoutDefinitions ) {\n\t\tObject.values( layoutDefinitions ).forEach(\n\t\t\t( { className, name, spacingStyles } ) => {\n\t\t\t\t// Allow outputting fallback gap styles for flex layout type when block gap support isn't available.\n\t\t\t\tif (\n\t\t\t\t\t! hasBlockGapSupport &&\n\t\t\t\t\t'flex' !== name &&\n\t\t\t\t\t'grid' !== name\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( spacingStyles?.length ) {\n\t\t\t\t\tspacingStyles.forEach( ( spacingStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( spacingStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( spacingStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${\n\t\t\t\t\t\t\t\t\t\t\tcssValue ? cssValue : gapValue\n\t\t\t\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tlet combinedSelector = '';\n\n\t\t\t\t\t\t\tif ( ! hasBlockGapSupport ) {\n\t\t\t\t\t\t\t\t// For fallback gap styles, use lower specificity, to ensure styles do not unintentionally override theme styles.\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `:where(.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`\n\t\t\t\t\t\t\t\t\t\t: `:where(${ selector }.${ className }${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t })`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcombinedSelector =\n\t\t\t\t\t\t\t\t\tselector === ROOT_BLOCK_SELECTOR\n\t\t\t\t\t\t\t\t\t\t? `:root :where(.${ className })${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`\n\t\t\t\t\t\t\t\t\t\t: `:root :where(${ selector }-${ className })${\n\t\t\t\t\t\t\t\t\t\t\t\tspacingStyle?.selector || ''\n\t\t\t\t\t\t\t\t\t\t }`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\n\t\t\t\t\t\t\t\t'; '\n\t\t\t\t\t\t\t) }; }`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\t// For backwards compatibility, ensure the legacy block gap CSS variable is still available.\n\t\tif ( selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport ) {\n\t\t\truleset += `${ ROOT_CSS_PROPERTIES_SELECTOR } { --wp--style--block-gap: ${ gapValue }; }`;\n\t\t}\n\t}\n\n\t// Output base styles\n\tif ( selector === ROOT_BLOCK_SELECTOR && layoutDefinitions ) {\n\t\tconst validDisplayModes = [ 'block', 'flex', 'grid' ];\n\t\tObject.values( layoutDefinitions ).forEach(\n\t\t\t( { className, displayMode, baseStyles } ) => {\n\t\t\t\tif (\n\t\t\t\t\tdisplayMode &&\n\t\t\t\t\tvalidDisplayModes.includes( displayMode )\n\t\t\t\t) {\n\t\t\t\t\truleset += `${ selector } .${ className } { display:${ displayMode }; }`;\n\t\t\t\t}\n\n\t\t\t\tif ( baseStyles?.length ) {\n\t\t\t\t\tbaseStyles.forEach( ( baseStyle ) => {\n\t\t\t\t\t\tconst declarations = [];\n\n\t\t\t\t\t\tif ( baseStyle.rules ) {\n\t\t\t\t\t\t\tObject.entries( baseStyle.rules ).forEach(\n\t\t\t\t\t\t\t\t( [ cssProperty, cssValue ] ) => {\n\t\t\t\t\t\t\t\t\tdeclarations.push(\n\t\t\t\t\t\t\t\t\t\t`${ cssProperty }: ${ cssValue }`\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\tconst combinedSelector = `.${ className }${\n\t\t\t\t\t\t\t\tbaseStyle?.selector || ''\n\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t\truleset += `${ combinedSelector } { ${ declarations.join(\n\t\t\t\t\t\t\t\t'; '\n\t\t\t\t\t\t\t) }; }`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\treturn ruleset;\n}\n\nconst STYLE_KEYS = [\n\t'border',\n\t'color',\n\t'dimensions',\n\t'spacing',\n\t'typography',\n\t'filter',\n\t'outline',\n\t'shadow',\n\t'background',\n];\n\nfunction pickStyleKeys( treeToPickFrom ) {\n\tif ( ! treeToPickFrom ) {\n\t\treturn {};\n\t}\n\tconst entries = Object.entries( treeToPickFrom );\n\tconst pickedEntries = entries.filter( ( [ key ] ) =>\n\t\tSTYLE_KEYS.includes( key )\n\t);\n\t// clone the style objects so that `getFeatureDeclarations` can remove consumed keys from it\n\tconst clonedEntries = pickedEntries.map( ( [ key, style ] ) => [\n\t\tkey,\n\t\tJSON.parse( JSON.stringify( style ) ),\n\t] );\n\treturn Object.fromEntries( clonedEntries );\n}\n\nexport const getNodesWithStyles = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.styles ) {\n\t\treturn nodes;\n\t}\n\n\t// Top-level.\n\tconst styles = pickStyleKeys( tree.styles );\n\tif ( styles ) {\n\t\tnodes.push( {\n\t\t\tstyles,\n\t\t\tselector: ROOT_BLOCK_SELECTOR,\n\t\t\t// Root selector (body) styles should not be wrapped in `:root where()` to keep\n\t\t\t// specificity at (0,0,1) and maintain backwards compatibility.\n\t\t\tskipSelectorWrapper: true,\n\t\t} );\n\t}\n\n\tObject.entries( ELEMENTS ).forEach( ( [ name, selector ] ) => {\n\t\tif ( tree.styles?.elements?.[ name ] ) {\n\t\t\tnodes.push( {\n\t\t\t\tstyles: tree.styles?.elements?.[ name ],\n\t\t\t\tselector,\n\t\t\t\t// Top level elements that don't use a class name should not receive the\n\t\t\t\t// `:root :where()` wrapper to maintain backwards compatibility.\n\t\t\t\tskipSelectorWrapper: ! ELEMENT_CLASS_NAMES[ name ],\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// Iterate over blocks: they can have styles & elements.\n\tObject.entries( tree.styles?.blocks ?? {} ).forEach(\n\t\t( [ blockName, node ] ) => {\n\t\t\tconst blockStyles = pickStyleKeys( node );\n\n\t\t\tif ( node?.variations ) {\n\t\t\t\tconst variations = {};\n\t\t\t\tObject.entries( node.variations ).forEach(\n\t\t\t\t\t( [ variationName, variation ] ) => {\n\t\t\t\t\t\tvariations[ variationName ] =\n\t\t\t\t\t\t\tpickStyleKeys( variation );\n\t\t\t\t\t\tif ( variation?.css ) {\n\t\t\t\t\t\t\tvariations[ variationName ].css = variation.css;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst variationSelector =\n\t\t\t\t\t\t\tblockSelectors[ blockName ]\n\t\t\t\t\t\t\t\t?.styleVariationSelectors?.[ variationName ];\n\n\t\t\t\t\t\t// Process the variation's inner element styles.\n\t\t\t\t\t\t// This comes before the inner block styles so the\n\t\t\t\t\t\t// element styles within the block type styles take\n\t\t\t\t\t\t// precedence over these.\n\t\t\t\t\t\tObject.entries( variation?.elements ?? {} ).forEach(\n\t\t\t\t\t\t\t( [ element, elementStyles ] ) => {\n\t\t\t\t\t\t\t\tif ( elementStyles && ELEMENTS[ element ] ) {\n\t\t\t\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\t\t\t\tstyles: elementStyles,\n\t\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\t\t\tELEMENTS[ element ]\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Process the variations inner block type styles.\n\t\t\t\t\t\tObject.entries( variation?.blocks ?? {} ).forEach(\n\t\t\t\t\t\t\t( [\n\t\t\t\t\t\t\t\tvariationBlockName,\n\t\t\t\t\t\t\t\tvariationBlockStyles,\n\t\t\t\t\t\t\t] ) => {\n\t\t\t\t\t\t\t\tconst variationBlockSelector = scopeSelector(\n\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t?.selector\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst variationDuotoneSelector = scopeSelector(\n\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t?.duotoneSelector\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst variationFeatureSelectors =\n\t\t\t\t\t\t\t\t\tscopeFeatureSelectors(\n\t\t\t\t\t\t\t\t\t\tvariationSelector,\n\t\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t\t?.featureSelectors\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst variationBlockStyleNodes =\n\t\t\t\t\t\t\t\t\tpickStyleKeys( variationBlockStyles );\n\n\t\t\t\t\t\t\t\tif ( variationBlockStyles?.css ) {\n\t\t\t\t\t\t\t\t\tvariationBlockStyleNodes.css =\n\t\t\t\t\t\t\t\t\t\tvariationBlockStyles.css;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\t\t\tselector: variationBlockSelector,\n\t\t\t\t\t\t\t\t\tduotoneSelector: variationDuotoneSelector,\n\t\t\t\t\t\t\t\t\tfeatureSelectors: variationFeatureSelectors,\n\t\t\t\t\t\t\t\t\tfallbackGapValue:\n\t\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t\t?.fallbackGapValue,\n\t\t\t\t\t\t\t\t\thasLayoutSupport:\n\t\t\t\t\t\t\t\t\t\tblockSelectors[ variationBlockName ]\n\t\t\t\t\t\t\t\t\t\t\t?.hasLayoutSupport,\n\t\t\t\t\t\t\t\t\tstyles: variationBlockStyleNodes,\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t// Process element styles for the inner blocks\n\t\t\t\t\t\t\t\t// of the variation.\n\t\t\t\t\t\t\t\tObject.entries(\n\t\t\t\t\t\t\t\t\tvariationBlockStyles.elements ?? {}\n\t\t\t\t\t\t\t\t).forEach(\n\t\t\t\t\t\t\t\t\t( [\n\t\t\t\t\t\t\t\t\t\tvariationBlockElement,\n\t\t\t\t\t\t\t\t\t\tvariationBlockElementStyles,\n\t\t\t\t\t\t\t\t\t] ) => {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tvariationBlockElementStyles &&\n\t\t\t\t\t\t\t\t\t\t\tELEMENTS[ variationBlockElement ]\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\t\t\t\t\t\tstyles: variationBlockElementStyles,\n\t\t\t\t\t\t\t\t\t\t\t\tselector: scopeSelector(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariationBlockSelector,\n\t\t\t\t\t\t\t\t\t\t\t\t\tELEMENTS[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariationBlockElement\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tblockStyles.variations = variations;\n\t\t\t}\n\n\t\t\tif ( blockSelectors?.[ blockName ]?.selector ) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tduotoneSelector:\n\t\t\t\t\t\tblockSelectors[ blockName ].duotoneSelector,\n\t\t\t\t\tfallbackGapValue:\n\t\t\t\t\t\tblockSelectors[ blockName ].fallbackGapValue,\n\t\t\t\t\thasLayoutSupport:\n\t\t\t\t\t\tblockSelectors[ blockName ].hasLayoutSupport,\n\t\t\t\t\tselector: blockSelectors[ blockName ].selector,\n\t\t\t\t\tstyles: blockStyles,\n\t\t\t\t\tfeatureSelectors:\n\t\t\t\t\t\tblockSelectors[ blockName ].featureSelectors,\n\t\t\t\t\tstyleVariationSelectors:\n\t\t\t\t\t\tblockSelectors[ blockName ].styleVariationSelectors,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tObject.entries( node?.elements ?? {} ).forEach(\n\t\t\t\t( [ elementName, value ] ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tvalue &&\n\t\t\t\t\t\tblockSelectors?.[ blockName ] &&\n\t\t\t\t\t\tELEMENTS[ elementName ]\n\t\t\t\t\t) {\n\t\t\t\t\t\tnodes.push( {\n\t\t\t\t\t\t\tstyles: value,\n\t\t\t\t\t\t\tselector: blockSelectors[ blockName ]?.selector\n\t\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t\t.map( ( sel ) => {\n\t\t\t\t\t\t\t\t\tconst elementSelectors =\n\t\t\t\t\t\t\t\t\t\tELEMENTS[ elementName ].split( ',' );\n\t\t\t\t\t\t\t\t\treturn elementSelectors.map(\n\t\t\t\t\t\t\t\t\t\t( elementSelector ) =>\n\t\t\t\t\t\t\t\t\t\t\tsel + ' ' + elementSelector\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.join( ',' ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\treturn nodes;\n};\n\nexport const getNodesWithSettings = ( tree, blockSelectors ) => {\n\tconst nodes = [];\n\n\tif ( ! tree?.settings ) {\n\t\treturn nodes;\n\t}\n\n\tconst pickPresets = ( treeToPickFrom ) => {\n\t\tlet presets = {};\n\t\tPRESET_METADATA.forEach( ( { path } ) => {\n\t\t\tconst value = getValueFromObjectPath( treeToPickFrom, path, false );\n\t\t\tif ( value !== false ) {\n\t\t\t\tpresets = setImmutably( presets, path, value );\n\t\t\t}\n\t\t} );\n\t\treturn presets;\n\t};\n\n\t// Top-level.\n\tconst presets = pickPresets( tree.settings );\n\tconst custom = tree.settings?.custom;\n\tif ( Object.keys( presets ).length > 0 || custom ) {\n\t\tnodes.push( {\n\t\t\tpresets,\n\t\t\tcustom,\n\t\t\tselector: ROOT_CSS_PROPERTIES_SELECTOR,\n\t\t} );\n\t}\n\n\t// Blocks.\n\tObject.entries( tree.settings?.blocks ?? {} ).forEach(\n\t\t( [ blockName, node ] ) => {\n\t\t\tconst blockPresets = pickPresets( node );\n\t\t\tconst blockCustom = node.custom;\n\t\t\tif ( Object.keys( blockPresets ).length > 0 || blockCustom ) {\n\t\t\t\tnodes.push( {\n\t\t\t\t\tpresets: blockPresets,\n\t\t\t\t\tcustom: blockCustom,\n\t\t\t\t\tselector: blockSelectors[ blockName ]?.selector,\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t);\n\n\treturn nodes;\n};\n\nexport const toCustomProperties = ( tree, blockSelectors ) => {\n\tconst settings = getNodesWithSettings( tree, blockSelectors );\n\tlet ruleset = '';\n\tsettings.forEach( ( { presets, custom, selector } ) => {\n\t\tconst declarations = getPresetsDeclarations( presets, tree?.settings );\n\t\tconst customProps = flattenTree( custom, '--wp--custom--', '--' );\n\t\tif ( customProps.length > 0 ) {\n\t\t\tdeclarations.push( ...customProps );\n\t\t}\n\n\t\tif ( declarations.length > 0 ) {\n\t\t\truleset += `${ selector }{${ declarations.join( ';' ) };}`;\n\t\t}\n\t} );\n\n\treturn ruleset;\n};\n\nexport const toStyles = (\n\ttree,\n\tblockSelectors,\n\thasBlockGapSupport,\n\thasFallbackGapSupport,\n\tdisableLayoutStyles = false,\n\tdisableRootPadding = false,\n\tstyleOptions = undefined\n) => {\n\t// These allow opting out of certain sets of styles.\n\tconst options = {\n\t\tblockGap: true,\n\t\tblockStyles: true,\n\t\tlayoutStyles: true,\n\t\tmarginReset: true,\n\t\tpresets: true,\n\t\trootPadding: true,\n\t\tvariationStyles: false,\n\t\t...styleOptions,\n\t};\n\tconst nodesWithStyles = getNodesWithStyles( tree, blockSelectors );\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\tconst useRootPaddingAlign = tree?.settings?.useRootPaddingAwareAlignments;\n\tconst { contentSize, wideSize } = tree?.settings?.layout || {};\n\tconst hasBodyStyles =\n\t\toptions.marginReset || options.rootPadding || options.layoutStyles;\n\n\tlet ruleset = '';\n\n\tif ( options.presets && ( contentSize || wideSize ) ) {\n\t\truleset += `${ ROOT_CSS_PROPERTIES_SELECTOR } {`;\n\t\truleset = contentSize\n\t\t\t? ruleset + ` --wp--style--global--content-size: ${ contentSize };`\n\t\t\t: ruleset;\n\t\truleset = wideSize\n\t\t\t? ruleset + ` --wp--style--global--wide-size: ${ wideSize };`\n\t\t\t: ruleset;\n\t\truleset += '}';\n\t}\n\n\tif ( hasBodyStyles ) {\n\t\t/*\n\t\t * Reset default browser margin on the body element.\n\t\t * This is set on the body selector **before** generating the ruleset\n\t\t * from the `theme.json`. This is to ensure that if the `theme.json` declares\n\t\t * `margin` in its `spacing` declaration for the `body` element then these\n\t\t * user-generated values take precedence in the CSS cascade.\n\t\t * @link https://github.com/WordPress/gutenberg/issues/36147.\n\t\t */\n\t\truleset += ':where(body) {margin: 0;';\n\n\t\t// Root padding styles should be output for full templates, patterns and template parts.\n\t\tif ( options.rootPadding && useRootPaddingAlign ) {\n\t\t\t/*\n\t\t\t * These rules reproduce the ones from https://github.com/WordPress/gutenberg/blob/79103f124925d1f457f627e154f52a56228ed5ad/lib/class-wp-theme-json-gutenberg.php#L2508\n\t\t\t * almost exactly, but for the selectors that target block wrappers in the front end. This code only runs in the editor, so it doesn't need those selectors.\n\t\t\t */\n\t\t\truleset += `padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) }\n\t\t\t\t.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }\n\t\t\t\t.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }\n\t\t\t\t.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }\n\t\t\t\t.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0;\n\t\t\t\t`;\n\t\t}\n\n\t\truleset += '}';\n\t}\n\n\tif ( options.blockStyles ) {\n\t\tnodesWithStyles.forEach(\n\t\t\t( {\n\t\t\t\tselector,\n\t\t\t\tduotoneSelector,\n\t\t\t\tstyles,\n\t\t\t\tfallbackGapValue,\n\t\t\t\thasLayoutSupport,\n\t\t\t\tfeatureSelectors,\n\t\t\t\tstyleVariationSelectors,\n\t\t\t\tskipSelectorWrapper,\n\t\t\t} ) => {\n\t\t\t\t// Process styles for block support features with custom feature level\n\t\t\t\t// CSS selectors set.\n\t\t\t\tif ( featureSelectors ) {\n\t\t\t\t\tconst featureDeclarations = getFeatureDeclarations(\n\t\t\t\t\t\tfeatureSelectors,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t);\n\n\t\t\t\t\tObject.entries( featureDeclarations ).forEach(\n\t\t\t\t\t\t( [ cssSelector, declarations ] ) => {\n\t\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\t\tconst rules = declarations.join( ';' );\n\t\t\t\t\t\t\t\truleset += `:root :where(${ cssSelector }){${ rules };}`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Process duotone styles.\n\t\t\t\tif ( duotoneSelector ) {\n\t\t\t\t\tconst duotoneStyles = {};\n\t\t\t\t\tif ( styles?.filter ) {\n\t\t\t\t\t\tduotoneStyles.filter = styles.filter;\n\t\t\t\t\t\tdelete styles.filter;\n\t\t\t\t\t}\n\t\t\t\t\tconst duotoneDeclarations =\n\t\t\t\t\t\tgetStylesDeclarations( duotoneStyles );\n\t\t\t\t\tif ( duotoneDeclarations.length ) {\n\t\t\t\t\t\truleset += `${ duotoneSelector }{${ duotoneDeclarations.join(\n\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t) };}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process blockGap and layout styles.\n\t\t\t\tif (\n\t\t\t\t\t! disableLayoutStyles &&\n\t\t\t\t\t( ROOT_BLOCK_SELECTOR === selector || hasLayoutSupport )\n\t\t\t\t) {\n\t\t\t\t\truleset += getLayoutStyles( {\n\t\t\t\t\t\tstyle: styles,\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\t\tfallbackGapValue,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Process the remaining block styles (they use either normal block class or __experimentalSelector).\n\t\t\t\tconst styleDeclarations = getStylesDeclarations(\n\t\t\t\t\tstyles,\n\t\t\t\t\tselector,\n\t\t\t\t\tuseRootPaddingAlign,\n\t\t\t\t\ttree,\n\t\t\t\t\tdisableRootPadding\n\t\t\t\t);\n\t\t\t\tif ( styleDeclarations?.length ) {\n\t\t\t\t\tconst generalSelector = skipSelectorWrapper\n\t\t\t\t\t\t? selector\n\t\t\t\t\t\t: `:root :where(${ selector })`;\n\t\t\t\t\truleset += `${ generalSelector }{${ styleDeclarations.join(\n\t\t\t\t\t\t';'\n\t\t\t\t\t) };}`;\n\t\t\t\t}\n\t\t\t\tif ( styles?.css ) {\n\t\t\t\t\truleset += processCSSNesting(\n\t\t\t\t\t\tstyles.css,\n\t\t\t\t\t\t`:root :where(${ selector })`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( options.variationStyles && styleVariationSelectors ) {\n\t\t\t\t\tObject.entries( styleVariationSelectors ).forEach(\n\t\t\t\t\t\t( [ styleVariationName, styleVariationSelector ] ) => {\n\t\t\t\t\t\t\tconst styleVariations =\n\t\t\t\t\t\t\t\tstyles?.variations?.[ styleVariationName ];\n\t\t\t\t\t\t\tif ( styleVariations ) {\n\t\t\t\t\t\t\t\t// If the block uses any custom selectors for block support, add those first.\n\t\t\t\t\t\t\t\tif ( featureSelectors ) {\n\t\t\t\t\t\t\t\t\tconst featureDeclarations =\n\t\t\t\t\t\t\t\t\t\tgetFeatureDeclarations(\n\t\t\t\t\t\t\t\t\t\t\tfeatureSelectors,\n\t\t\t\t\t\t\t\t\t\t\tstyleVariations\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tObject.entries(\n\t\t\t\t\t\t\t\t\t\tfeatureDeclarations\n\t\t\t\t\t\t\t\t\t).forEach(\n\t\t\t\t\t\t\t\t\t\t( [ baseSelector, declarations ] ) => {\n\t\t\t\t\t\t\t\t\t\t\tif ( declarations.length ) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst cssSelector =\n\t\t\t\t\t\t\t\t\t\t\t\t\tconcatFeatureVariationSelectorString(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbaseSelector,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyleVariationSelector\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tconst rules =\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeclarations.join( ';' );\n\t\t\t\t\t\t\t\t\t\t\t\truleset += `:root :where(${ cssSelector }){${ rules };}`;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Otherwise add regular selectors.\n\t\t\t\t\t\t\t\tconst styleVariationDeclarations =\n\t\t\t\t\t\t\t\t\tgetStylesDeclarations(\n\t\t\t\t\t\t\t\t\t\tstyleVariations,\n\t\t\t\t\t\t\t\t\t\tstyleVariationSelector,\n\t\t\t\t\t\t\t\t\t\tuseRootPaddingAlign,\n\t\t\t\t\t\t\t\t\t\ttree\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif ( styleVariationDeclarations.length ) {\n\t\t\t\t\t\t\t\t\truleset += `:root :where(${ styleVariationSelector }){${ styleVariationDeclarations.join(\n\t\t\t\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t\t\t\t) };}`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( styleVariations?.css ) {\n\t\t\t\t\t\t\t\t\truleset += processCSSNesting(\n\t\t\t\t\t\t\t\t\t\tstyleVariations.css,\n\t\t\t\t\t\t\t\t\t\t`:root :where(${ styleVariationSelector })`\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Check for pseudo selector in `styles` and handle separately.\n\t\t\t\tconst pseudoSelectorStyles = Object.entries( styles ).filter(\n\t\t\t\t\t( [ key ] ) => key.startsWith( ':' )\n\t\t\t\t);\n\n\t\t\t\tif ( pseudoSelectorStyles?.length ) {\n\t\t\t\t\tpseudoSelectorStyles.forEach(\n\t\t\t\t\t\t( [ pseudoKey, pseudoStyle ] ) => {\n\t\t\t\t\t\t\tconst pseudoDeclarations =\n\t\t\t\t\t\t\t\tgetStylesDeclarations( pseudoStyle );\n\n\t\t\t\t\t\t\tif ( ! pseudoDeclarations?.length ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// `selector` may be provided in a form\n\t\t\t\t\t\t\t// where block level selectors have sub element\n\t\t\t\t\t\t\t// selectors appended to them as a comma separated\n\t\t\t\t\t\t\t// string.\n\t\t\t\t\t\t\t// e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;\n\t\t\t\t\t\t\t// Split and append pseudo selector to create\n\t\t\t\t\t\t\t// the proper rules to target the elements.\n\t\t\t\t\t\t\tconst _selector = selector\n\t\t\t\t\t\t\t\t.split( ',' )\n\t\t\t\t\t\t\t\t.map( ( sel ) => sel + pseudoKey )\n\t\t\t\t\t\t\t\t.join( ',' );\n\n\t\t\t\t\t\t\t// As pseudo classes such as :hover, :focus etc. have class-level\n\t\t\t\t\t\t\t// specificity, they must use the `:root :where()` wrapper. This.\n\t\t\t\t\t\t\t// caps the specificity at `0-1-0` to allow proper nesting of variations\n\t\t\t\t\t\t\t// and block type element styles.\n\t\t\t\t\t\t\tconst pseudoRule = `:root :where(${ _selector }){${ pseudoDeclarations.join(\n\t\t\t\t\t\t\t\t';'\n\t\t\t\t\t\t\t) };}`;\n\n\t\t\t\t\t\t\truleset += pseudoRule;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tif ( options.layoutStyles ) {\n\t\t/* Add alignment / layout styles */\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t'.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';\n\t}\n\n\tif ( options.blockGap && hasBlockGapSupport ) {\n\t\t// Use fallback of `0.5em` just in case, however if there is blockGap support, there should nearly always be a real value.\n\t\tconst gapValue =\n\t\t\tgetGapCSSValue( tree?.styles?.spacing?.blockGap ) || '0.5em';\n\t\truleset =\n\t\t\truleset +\n\t\t\t`:root :where(.wp-site-blocks) > * { margin-block-start: ${ gapValue }; margin-block-end: 0; }`;\n\t\truleset =\n\t\t\truleset +\n\t\t\t':root :where(.wp-site-blocks) > :first-child { margin-block-start: 0; }';\n\t\truleset =\n\t\t\truleset +\n\t\t\t':root :where(.wp-site-blocks) > :last-child { margin-block-end: 0; }';\n\t}\n\n\tif ( options.presets ) {\n\t\tnodesWithSettings.forEach( ( { selector, presets } ) => {\n\t\t\tif (\n\t\t\t\tROOT_BLOCK_SELECTOR === selector ||\n\t\t\t\tROOT_CSS_PROPERTIES_SELECTOR === selector\n\t\t\t) {\n\t\t\t\t// Do not add extra specificity for top-level classes.\n\t\t\t\tselector = '';\n\t\t\t}\n\n\t\t\tconst classes = getPresetsClasses( selector, presets );\n\t\t\tif ( classes.length > 0 ) {\n\t\t\t\truleset += classes;\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn ruleset;\n};\n\nexport function toSvgFilters( tree, blockSelectors ) {\n\tconst nodesWithSettings = getNodesWithSettings( tree, blockSelectors );\n\treturn nodesWithSettings.flatMap( ( { presets } ) => {\n\t\treturn getPresetsSvgFilters( presets );\n\t} );\n}\n\nconst getSelectorsConfig = ( blockType, rootSelector ) => {\n\tif (\n\t\tblockType?.selectors &&\n\t\tObject.keys( blockType.selectors ).length > 0\n\t) {\n\t\treturn blockType.selectors;\n\t}\n\n\tconst config = { root: rootSelector };\n\tObject.entries( BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS ).forEach(\n\t\t( [ featureKey, featureName ] ) => {\n\t\t\tconst featureSelector = getBlockCSSSelector(\n\t\t\t\tblockType,\n\t\t\t\tfeatureKey\n\t\t\t);\n\n\t\t\tif ( featureSelector ) {\n\t\t\t\tconfig[ featureName ] = featureSelector;\n\t\t\t}\n\t\t}\n\t);\n\n\treturn config;\n};\n\nexport const getBlockSelectors = (\n\tblockTypes,\n\tgetBlockStyles,\n\tvariationInstanceId\n) => {\n\tconst result = {};\n\tblockTypes.forEach( ( blockType ) => {\n\t\tconst name = blockType.name;\n\t\tconst selector = getBlockCSSSelector( blockType );\n\t\tlet duotoneSelector = getBlockCSSSelector(\n\t\t\tblockType,\n\t\t\t'filter.duotone'\n\t\t);\n\n\t\t// Keep backwards compatibility for support.color.__experimentalDuotone.\n\t\tif ( ! duotoneSelector ) {\n\t\t\tconst rootSelector = getBlockCSSSelector( blockType );\n\t\t\tconst duotoneSupport = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'color.__experimentalDuotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tduotoneSelector =\n\t\t\t\tduotoneSupport && scopeSelector( rootSelector, duotoneSupport );\n\t\t}\n\n\t\tconst hasLayoutSupport =\n\t\t\t!! blockType?.supports?.layout ||\n\t\t\t!! blockType?.supports?.__experimentalLayout;\n\t\tconst fallbackGapValue =\n\t\t\tblockType?.supports?.spacing?.blockGap?.__experimentalDefault;\n\n\t\tconst blockStyleVariations = getBlockStyles( name );\n\t\tconst styleVariationSelectors = {};\n\t\tblockStyleVariations?.forEach( ( variation ) => {\n\t\t\tconst variationSuffix = variationInstanceId\n\t\t\t\t? `-${ variationInstanceId }`\n\t\t\t\t: '';\n\t\t\tconst variationName = `${ variation.name }${ variationSuffix }`;\n\t\t\tconst styleVariationSelector = getBlockStyleVariationSelector(\n\t\t\t\tvariationName,\n\t\t\t\tselector\n\t\t\t);\n\n\t\t\tstyleVariationSelectors[ variationName ] = styleVariationSelector;\n\t\t} );\n\n\t\t// For each block support feature add any custom selectors.\n\t\tconst featureSelectors = getSelectorsConfig( blockType, selector );\n\n\t\tresult[ name ] = {\n\t\t\tduotoneSelector,\n\t\t\tfallbackGapValue,\n\t\t\tfeatureSelectors: Object.keys( featureSelectors ).length\n\t\t\t\t? featureSelectors\n\t\t\t\t: undefined,\n\t\t\thasLayoutSupport,\n\t\t\tname,\n\t\t\tselector,\n\t\t\tstyleVariationSelectors: blockStyleVariations?.length\n\t\t\t\t? styleVariationSelectors\n\t\t\t\t: undefined,\n\t\t};\n\t} );\n\n\treturn result;\n};\n\n/**\n * If there is a separator block whose color is defined in theme.json via background,\n * update the separator color to the same value by using border color.\n *\n * @param {Object} config Theme.json configuration file object.\n * @return {Object} configTheme.json configuration file object updated.\n */\nfunction updateConfigWithSeparator( config ) {\n\tconst needsSeparatorStyleUpdate =\n\t\tconfig.styles?.blocks?.[ 'core/separator' ] &&\n\t\tconfig.styles?.blocks?.[ 'core/separator' ].color?.background &&\n\t\t! config.styles?.blocks?.[ 'core/separator' ].color?.text &&\n\t\t! config.styles?.blocks?.[ 'core/separator' ].border?.color;\n\tif ( needsSeparatorStyleUpdate ) {\n\t\treturn {\n\t\t\t...config,\n\t\t\tstyles: {\n\t\t\t\t...config.styles,\n\t\t\t\tblocks: {\n\t\t\t\t\t...config.styles.blocks,\n\t\t\t\t\t'core/separator': {\n\t\t\t\t\t\t...config.styles.blocks[ 'core/separator' ],\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...config.styles.blocks[ 'core/separator' ].color,\n\t\t\t\t\t\t\ttext: config.styles?.blocks[ 'core/separator' ]\n\t\t\t\t\t\t\t\t.color.background,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\treturn config;\n}\n\nexport function processCSSNesting( css, blockSelector ) {\n\tlet processedCSS = '';\n\n\tif ( ! css || css.trim() === '' ) {\n\t\treturn processedCSS;\n\t}\n\n\t// Split CSS nested rules.\n\tconst parts = css.split( '&' );\n\tparts.forEach( ( part ) => {\n\t\tif ( ! part || part.trim() === '' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isRootCss = ! part.includes( '{' );\n\t\tif ( isRootCss ) {\n\t\t\t// If the part doesn't contain braces, it applies to the root level.\n\t\t\tprocessedCSS += `:root :where(${ blockSelector }){${ part.trim() }}`;\n\t\t} else {\n\t\t\t// If the part contains braces, it's a nested CSS rule.\n\t\t\tconst splittedPart = part.replace( '}', '' ).split( '{' );\n\t\t\tif ( splittedPart.length !== 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [ nestedSelector, cssValue ] = splittedPart;\n\n\t\t\t// Handle pseudo elements such as ::before, ::after, etc. Regex will also\n\t\t\t// capture any leading combinator such as >, +, or ~, as well as spaces.\n\t\t\t// This allows pseudo elements as descendants e.g. `.parent ::before`.\n\t\t\tconst matches = nestedSelector.match( /([>+~\\s]*::[a-zA-Z-]+)/ );\n\t\t\tconst pseudoPart = matches ? matches[ 1 ] : '';\n\t\t\tconst withoutPseudoElement = matches\n\t\t\t\t? nestedSelector.replace( pseudoPart, '' ).trim()\n\t\t\t\t: nestedSelector.trim();\n\n\t\t\tlet combinedSelector;\n\t\t\tif ( withoutPseudoElement === '' ) {\n\t\t\t\t// Only contained a pseudo element to use the block selector to form\n\t\t\t\t// the final `:root :where()` selector.\n\t\t\t\tcombinedSelector = blockSelector;\n\t\t\t} else {\n\t\t\t\t// If the nested selector is a descendant of the block scope it with the\n\t\t\t\t// block selector. Otherwise append it to the block selector.\n\t\t\t\tcombinedSelector = nestedSelector.startsWith( ' ' )\n\t\t\t\t\t? scopeSelector( blockSelector, withoutPseudoElement )\n\t\t\t\t\t: appendToSelector( blockSelector, withoutPseudoElement );\n\t\t\t}\n\n\t\t\t// Build final rule, re-adding any pseudo element outside the `:where()`\n\t\t\t// to maintain valid CSS selector.\n\t\t\tprocessedCSS += `:root :where(${ combinedSelector })${ pseudoPart }{${ cssValue.trim() }}`;\n\t\t}\n\t} );\n\treturn processedCSS;\n}\n\n/**\n * Returns the global styles output using a global styles configuration.\n * If wishing to generate global styles and settings based on the\n * global styles config loaded in the editor context, use `useGlobalStylesOutput()`.\n * The use case for a custom config is to generate bespoke styles\n * and settings for previews, or other out-of-editor experiences.\n *\n * @param {Object} mergedConfig Global styles configuration.\n * @param {boolean} disableRootPadding Disable root padding styles.\n *\n * @return {Array} Array of stylesheets and settings.\n */\nexport function useGlobalStylesOutputWithConfig(\n\tmergedConfig = {},\n\tdisableRootPadding\n) {\n\tconst [ blockGap ] = useGlobalSetting( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGap !== null;\n\tconst hasFallbackGapSupport = ! hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.\n\tconst disableLayoutStyles = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn !! getSettings().disableLayoutStyles;\n\t} );\n\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\treturn useMemo( () => {\n\t\tif ( ! mergedConfig?.styles || ! mergedConfig?.settings ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst updatedConfig = updateConfigWithSeparator( mergedConfig );\n\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles\n\t\t);\n\n\t\tconst customProperties = toCustomProperties(\n\t\t\tupdatedConfig,\n\t\t\tblockSelectors\n\t\t);\n\n\t\tconst globalStyles = toStyles(\n\t\t\tupdatedConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tdisableRootPadding\n\t\t);\n\t\tconst svgs = toSvgFilters( updatedConfig, blockSelectors );\n\n\t\tconst styles = [\n\t\t\t{\n\t\t\t\tcss: customProperties,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcss: globalStyles,\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t// Load custom CSS in own stylesheet so that any invalid CSS entered in the input won't break all the global styles in the editor.\n\t\t\t{\n\t\t\t\tcss: updatedConfig.styles.css ?? '',\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tassets: svgs,\n\t\t\t\t__unstableType: 'svg',\n\t\t\t\tisGlobalStyles: true,\n\t\t\t},\n\t\t];\n\n\t\t// Loop through the blocks to check if there are custom CSS values.\n\t\t// If there are, get the block selector and push the selector together with\n\t\t// the CSS value to the 'stylesheets' array.\n\t\tgetBlockTypes().forEach( ( blockType ) => {\n\t\t\tif ( updatedConfig.styles.blocks[ blockType.name ]?.css ) {\n\t\t\t\tconst selector = blockSelectors[ blockType.name ].selector;\n\t\t\t\tstyles.push( {\n\t\t\t\t\tcss: processCSSNesting(\n\t\t\t\t\t\tupdatedConfig.styles.blocks[ blockType.name ]?.css,\n\t\t\t\t\t\tselector\n\t\t\t\t\t),\n\t\t\t\t\tisGlobalStyles: true,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\treturn [ styles, updatedConfig.settings ];\n\t}, [\n\t\thasBlockGapSupport,\n\t\thasFallbackGapSupport,\n\t\tmergedConfig,\n\t\tdisableLayoutStyles,\n\t\tdisableRootPadding,\n\t\tgetBlockStyles,\n\t] );\n}\n\n/**\n * Returns the global styles output based on the current state of global styles config loaded in the editor context.\n *\n * @param {boolean} disableRootPadding Disable root padding styles.\n *\n * @return {Array} Array of stylesheets and settings.\n */\nexport function useGlobalStylesOutput( disableRootPadding = false ) {\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\treturn useGlobalStylesOutputWithConfig( mergedConfig, disableRootPadding );\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockTypes, store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tGlobalStylesContext,\n\ttoStyles,\n\tgetBlockSelectors,\n} from '../components/global-styles';\nimport { usePrivateStyleOverride } from './utils';\nimport { getValueFromObjectPath } from '../utils/object';\nimport { store as blockEditorStore } from '../store';\nimport { globalStylesDataKey } from '../store/private-keys';\nimport { unlock } from '../lock-unlock';\n\nconst VARIATION_PREFIX = 'is-style-';\n\nfunction getVariationMatches( className ) {\n\tif ( ! className ) {\n\t\treturn [];\n\t}\n\treturn className.split( /\\s+/ ).reduce( ( matches, name ) => {\n\t\tif ( name.startsWith( VARIATION_PREFIX ) ) {\n\t\t\tconst match = name.slice( VARIATION_PREFIX.length );\n\t\t\tif ( match !== 'default' ) {\n\t\t\t\tmatches.push( match );\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}, [] );\n}\n\n/**\n * Get the first block style variation that has been registered from the class string.\n *\n * @param {string} className CSS class string for a block.\n * @param {Array} registeredStyles Currently registered block styles.\n *\n * @return {string|null} The name of the first registered variation.\n */\nfunction getVariationNameFromClass( className, registeredStyles = [] ) {\n\t// The global flag affects how capturing groups work in JS. So the regex\n\t// below will only return full CSS classes not just the variation name.\n\tconst matches = getVariationMatches( className );\n\n\tif ( ! matches ) {\n\t\treturn null;\n\t}\n\n\tfor ( const variation of matches ) {\n\t\tif ( registeredStyles.some( ( style ) => style.name === variation ) ) {\n\t\t\treturn variation;\n\t\t}\n\t}\n\treturn null;\n}\n\n// A helper component to apply a style override using the useStyleOverride hook.\nfunction OverrideStyles( { override } ) {\n\tusePrivateStyleOverride( override );\n}\n\n/**\n * This component is used to generate new block style variation overrides\n * based on an incoming theme config. If a matching style is found in the config,\n * a new override is created and returned. The overrides can be used in conjunction with\n * useStyleOverride to apply the new styles to the editor. Its use is\n * subject to change.\n *\n * @param {Object} props Props.\n * @param {Object} props.config A global styles object, containing settings and styles.\n * @return {JSX.Element|undefined} An array of new block variation overrides.\n */\nexport function __unstableBlockStyleVariationOverridesWithConfig( { config } ) {\n\tconst { getBlockStyles, overrides } = useSelect(\n\t\t( select ) => ( {\n\t\t\tgetBlockStyles: select( blocksStore ).getBlockStyles,\n\t\t\toverrides: unlock( select( blockEditorStore ) ).getStyleOverrides(),\n\t\t} ),\n\t\t[]\n\t);\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\n\tconst overridesWithConfig = useMemo( () => {\n\t\tif ( ! overrides?.length ) {\n\t\t\treturn;\n\t\t}\n\t\tconst newOverrides = [];\n\t\tconst overriddenClientIds = [];\n\t\tfor ( const [ , override ] of overrides ) {\n\t\t\tif (\n\t\t\t\toverride?.variation &&\n\t\t\t\toverride?.clientId &&\n\t\t\t\t/*\n\t\t\t\t * Because this component overwrites existing style overrides,\n\t\t\t\t * filter out any overrides that are already present in the store.\n\t\t\t\t */\n\t\t\t\t! overriddenClientIds.includes( override.clientId )\n\t\t\t) {\n\t\t\t\tconst blockName = getBlockName( override.clientId );\n\t\t\t\tconst configStyles =\n\t\t\t\t\tconfig?.styles?.blocks?.[ blockName ]?.variations?.[\n\t\t\t\t\t\toverride.variation\n\t\t\t\t\t];\n\t\t\t\tif ( configStyles ) {\n\t\t\t\t\tconst variationConfig = {\n\t\t\t\t\t\tsettings: config?.settings,\n\t\t\t\t\t\t// The variation style data is all that is needed to generate\n\t\t\t\t\t\t// the styles for the current application to a block. The variation\n\t\t\t\t\t\t// name is updated to match the instance specific class name.\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\tblocks: {\n\t\t\t\t\t\t\t\t[ blockName ]: {\n\t\t\t\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t\t\t\t[ `${ override.variation }-${ override.clientId }` ]:\n\t\t\t\t\t\t\t\t\t\t\tconfigStyles,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tconst blockSelectors = getBlockSelectors(\n\t\t\t\t\t\tgetBlockTypes(),\n\t\t\t\t\t\tgetBlockStyles,\n\t\t\t\t\t\toverride.clientId\n\t\t\t\t\t);\n\t\t\t\t\tconst hasBlockGapSupport = false;\n\t\t\t\t\tconst hasFallbackGapSupport = true;\n\t\t\t\t\tconst disableLayoutStyles = true;\n\t\t\t\t\tconst disableRootPadding = true;\n\t\t\t\t\tconst variationStyles = toStyles(\n\t\t\t\t\t\tvariationConfig,\n\t\t\t\t\t\tblockSelectors,\n\t\t\t\t\t\thasBlockGapSupport,\n\t\t\t\t\t\thasFallbackGapSupport,\n\t\t\t\t\t\tdisableLayoutStyles,\n\t\t\t\t\t\tdisableRootPadding,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tblockGap: false,\n\t\t\t\t\t\t\tblockStyles: true,\n\t\t\t\t\t\t\tlayoutStyles: false,\n\t\t\t\t\t\t\tmarginReset: false,\n\t\t\t\t\t\t\tpresets: false,\n\t\t\t\t\t\t\trootPadding: false,\n\t\t\t\t\t\t\tvariationStyles: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tnewOverrides.push( {\n\t\t\t\t\t\tid: `${ override.variation }-${ override.clientId }`,\n\t\t\t\t\t\tcss: variationStyles,\n\t\t\t\t\t\t__unstableType: 'variation',\n\t\t\t\t\t\tvariation: override.variation,\n\t\t\t\t\t\t// The clientId will be stored with the override and used to ensure\n\t\t\t\t\t\t// the order of overrides matches the order of blocks so that the\n\t\t\t\t\t\t// correct CSS cascade is maintained.\n\t\t\t\t\t\tclientId: override.clientId,\n\t\t\t\t\t} );\n\t\t\t\t\toverriddenClientIds.push( override.clientId );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn newOverrides;\n\t}, [ config, overrides, getBlockStyles, getBlockName ] );\n\n\tif ( ! overridesWithConfig || ! overridesWithConfig.length ) {\n\t\treturn;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ overridesWithConfig.map( ( override ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\n/**\n * Retrieves any variation styles data and resolves any referenced values.\n *\n * @param {Object} globalStyles A complete global styles object, containing settings and styles.\n * @param {string} name The name of the desired block type.\n * @param {variation} variation The of the block style variation to retrieve data for.\n *\n * @return {Object|undefined} The global styles data for the specified variation.\n */\nexport function getVariationStylesWithRefValues(\n\tglobalStyles,\n\tname,\n\tvariation\n) {\n\tif ( ! globalStyles?.styles?.blocks?.[ name ]?.variations?.[ variation ] ) {\n\t\treturn;\n\t}\n\n\t// Helper to recursively look for `ref` values to resolve.\n\tconst replaceRefs = ( variationStyles ) => {\n\t\tObject.keys( variationStyles ).forEach( ( key ) => {\n\t\t\tconst value = variationStyles[ key ];\n\n\t\t\t// Only process objects.\n\t\t\tif ( typeof value === 'object' && value !== null ) {\n\t\t\t\t// Process `ref` value if present.\n\t\t\t\tif ( value.ref !== undefined ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value.ref !== 'string' ||\n\t\t\t\t\t\tvalue.ref.trim() === ''\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Remove invalid ref.\n\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Resolve `ref` value.\n\t\t\t\t\t\tconst refValue = getValueFromObjectPath(\n\t\t\t\t\t\t\tglobalStyles,\n\t\t\t\t\t\t\tvalue.ref\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( refValue ) {\n\t\t\t\t\t\t\tvariationStyles[ key ] = refValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Recursively resolve `ref` values in nested objects.\n\t\t\t\t\treplaceRefs( value );\n\n\t\t\t\t\t// After recursion, if value is empty due to explicitly\n\t\t\t\t\t// `undefined` ref value, remove it.\n\t\t\t\t\tif ( Object.keys( value ).length === 0 ) {\n\t\t\t\t\t\tdelete variationStyles[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n\t// Deep clone variation node to avoid mutating it within global styles and losing refs.\n\tconst styles = JSON.parse(\n\t\tJSON.stringify(\n\t\t\tglobalStyles.styles.blocks[ name ].variations[ variation ]\n\t\t)\n\t);\n\treplaceRefs( styles );\n\n\treturn styles;\n}\n\nfunction useBlockStyleVariation( name, variation, clientId ) {\n\t// Prefer global styles data in GlobalStylesContext, which are available\n\t// if in the site editor. Otherwise fall back to whatever is in the\n\t// editor settings and available in the post editor.\n\tconst { merged: mergedConfig } = useContext( GlobalStylesContext );\n\tconst { globalSettings, globalStyles } = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tglobalSettings: settings.__experimentalFeatures,\n\t\t\tglobalStyles: settings[ globalStylesDataKey ],\n\t\t};\n\t}, [] );\n\n\treturn useMemo( () => {\n\t\tconst variationStyles = getVariationStylesWithRefValues(\n\t\t\t{\n\t\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t\tstyles: mergedConfig?.styles ?? globalStyles,\n\t\t\t},\n\t\t\tname,\n\t\t\tvariation\n\t\t);\n\n\t\treturn {\n\t\t\tsettings: mergedConfig?.settings ?? globalSettings,\n\t\t\t// The variation style data is all that is needed to generate\n\t\t\t// the styles for the current application to a block. The variation\n\t\t\t// name is updated to match the instance specific class name.\n\t\t\tstyles: {\n\t\t\t\tblocks: {\n\t\t\t\t\t[ name ]: {\n\t\t\t\t\t\tvariations: {\n\t\t\t\t\t\t\t[ `${ variation }-${ clientId }` ]: variationStyles,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}, [\n\t\tmergedConfig,\n\t\tglobalSettings,\n\t\tglobalStyles,\n\t\tvariation,\n\t\tclientId,\n\t\tname,\n\t] );\n}\n\n// Rather than leveraging `useInstanceId` here, the `clientId` is used.\n// This is so that the variation style override's ID is predictable\n// when the order of applied style variations changes.\nfunction useBlockProps( { name, className, clientId } ) {\n\tconst { getBlockStyles } = useSelect( blocksStore );\n\n\tconst registeredStyles = getBlockStyles( name );\n\tconst variation = getVariationNameFromClass( className, registeredStyles );\n\tconst variationClass = `${ VARIATION_PREFIX }${ variation }-${ clientId }`;\n\n\tconst { settings, styles } = useBlockStyleVariation(\n\t\tname,\n\t\tvariation,\n\t\tclientId\n\t);\n\n\tconst variationStyles = useMemo( () => {\n\t\tif ( ! variation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst variationConfig = { settings, styles };\n\t\tconst blockSelectors = getBlockSelectors(\n\t\t\tgetBlockTypes(),\n\t\t\tgetBlockStyles,\n\t\t\tclientId\n\t\t);\n\t\tconst hasBlockGapSupport = false;\n\t\tconst hasFallbackGapSupport = true;\n\t\tconst disableLayoutStyles = true;\n\t\tconst disableRootPadding = true;\n\n\t\treturn toStyles(\n\t\t\tvariationConfig,\n\t\t\tblockSelectors,\n\t\t\thasBlockGapSupport,\n\t\t\thasFallbackGapSupport,\n\t\t\tdisableLayoutStyles,\n\t\t\tdisableRootPadding,\n\t\t\t{\n\t\t\t\tblockGap: false,\n\t\t\t\tblockStyles: true,\n\t\t\t\tlayoutStyles: false,\n\t\t\t\tmarginReset: false,\n\t\t\t\tpresets: false,\n\t\t\t\trootPadding: false,\n\t\t\t\tvariationStyles: true,\n\t\t\t}\n\t\t);\n\t}, [ variation, settings, styles, getBlockStyles, clientId ] );\n\n\tusePrivateStyleOverride( {\n\t\tid: `variation-${ clientId }`,\n\t\tcss: variationStyles,\n\t\t__unstableType: 'variation',\n\t\tvariation,\n\t\t// The clientId will be stored with the override and used to ensure\n\t\t// the order of overrides matches the order of blocks so that the\n\t\t// correct CSS cascade is maintained.\n\t\tclientId,\n\t} );\n\n\treturn variation ? { className: variationClass } : {};\n}\n\nexport default {\n\thasSupport: () => true,\n\tattributeKeys: [ 'className' ],\n\tisMatch: ( { className } ) => getVariationMatches( className ).length > 0,\n\tuseBlockProps,\n};\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tButtonGroup,\n\tToggleControl,\n\tPanelBody,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport { useSettings } from '../components/use-settings';\nimport { getLayoutType, getLayoutTypes } from '../layouts';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { LAYOUT_DEFINITIONS } from '../layouts/definitions';\nimport { useBlockSettings, useStyleOverride } from './utils';\nimport { unlock } from '../lock-unlock';\n\nconst layoutBlockSupportKey = 'layout';\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nfunction hasLayoutBlockSupport( blockName ) {\n\treturn (\n\t\thasBlockSupport( blockName, 'layout' ) ||\n\t\thasBlockSupport( blockName, '__experimentalLayout' )\n\t);\n}\n\n/**\n * Generates the utility classnames for the given block's layout attributes.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n *\n * @return { Array } Array of CSS classname strings.\n */\nexport function useLayoutClasses( blockAttributes = {}, blockName = '' ) {\n\tconst { layout } = blockAttributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( blockName, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst layoutClassnames = [];\n\n\tif ( LAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className ) {\n\t\tconst baseClassName =\n\t\t\tLAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className;\n\t\tconst splitBlockName = blockName.split( '/' );\n\t\tconst fullBlockName =\n\t\t\tsplitBlockName[ 0 ] === 'core'\n\t\t\t\t? splitBlockName.pop()\n\t\t\t\t: splitBlockName.join( '-' );\n\t\tconst compoundClassName = `wp-block-${ fullBlockName }-${ baseClassName }`;\n\t\tlayoutClassnames.push( baseClassName, compoundClassName );\n\t}\n\n\tconst hasGlobalPadding = useSelect(\n\t\t( select ) => {\n\t\t\treturn (\n\t\t\t\t( usedLayout?.inherit ||\n\t\t\t\t\tusedLayout?.contentSize ||\n\t\t\t\t\tusedLayout?.type === 'constrained' ) &&\n\t\t\t\tselect( blockEditorStore ).getSettings().__experimentalFeatures\n\t\t\t\t\t?.useRootPaddingAwareAlignments\n\t\t\t);\n\t\t},\n\t\t[ usedLayout?.contentSize, usedLayout?.inherit, usedLayout?.type ]\n\t);\n\n\tif ( hasGlobalPadding ) {\n\t\tlayoutClassnames.push( 'has-global-padding' );\n\t}\n\n\tif ( usedLayout?.orientation ) {\n\t\tlayoutClassnames.push( `is-${ kebabCase( usedLayout.orientation ) }` );\n\t}\n\n\tif ( usedLayout?.justifyContent ) {\n\t\tlayoutClassnames.push(\n\t\t\t`is-content-justification-${ kebabCase(\n\t\t\t\tusedLayout.justifyContent\n\t\t\t) }`\n\t\t);\n\t}\n\n\tif ( usedLayout?.flexWrap && usedLayout.flexWrap === 'nowrap' ) {\n\t\tlayoutClassnames.push( 'is-nowrap' );\n\t}\n\n\treturn layoutClassnames;\n}\n\n/**\n * Generates a CSS rule with the given block's layout styles.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n * @param { string } selector A selector to use in generating the CSS rule.\n *\n * @return { string } CSS rule.\n */\nexport function useLayoutStyles( blockAttributes = {}, blockName, selector ) {\n\tconst { layout = {}, style = {} } = blockAttributes;\n\t// Update type for blocks using legacy layouts.\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || {};\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst [ blockGapSupport ] = useSettings( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\treturn fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName,\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\thasBlockGapSupport,\n\t} );\n}\n\nfunction LayoutPanelPure( {\n\tlayout,\n\tsetAttributes,\n\tname: blockName,\n\tclientId,\n} ) {\n\tconst settings = useBlockSettings( blockName );\n\t// Block settings come from theme.json under settings.[blockName].\n\tconst { layout: layoutSettings } = settings;\n\tconst { themeSupportsLayout } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tthemeSupportsLayout: getSettings().supportsLayout,\n\t\t};\n\t}, [] );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\t// Layout block support comes from the block's block.json.\n\tconst layoutBlockSupport = getBlockSupport(\n\t\tblockName,\n\t\tlayoutBlockSupportKey,\n\t\t{}\n\t);\n\tconst blockSupportAndThemeSettings = {\n\t\t...layoutSettings,\n\t\t...layoutBlockSupport,\n\t};\n\tconst {\n\t\tallowSwitching,\n\t\tallowEditing = true,\n\t\tallowInheriting = true,\n\t\tdefault: defaultBlockLayout,\n\t} = blockSupportAndThemeSettings;\n\n\tif ( ! allowEditing ) {\n\t\treturn null;\n\t}\n\n\t/*\n\t * Try to find the layout type from either the\n\t * block's layout settings or any saved layout config.\n\t */\n\tconst blockSupportAndLayout = {\n\t\t...layoutBlockSupport,\n\t\t...layout,\n\t};\n\tconst { type, default: { type: defaultType = 'default' } = {} } =\n\t\tblockSupportAndLayout;\n\tconst blockLayoutType = type || defaultType;\n\n\t// Only show the inherit toggle if it's supported,\n\t// and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.\n\tconst showInheritToggle = !! (\n\t\tallowInheriting &&\n\t\t( ! blockLayoutType ||\n\t\t\tblockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ||\n\t\t\tblockSupportAndLayout.inherit )\n\t);\n\n\tconst usedLayout = layout || defaultBlockLayout || {};\n\tconst { inherit = false, contentSize = null } = usedLayout;\n\t/**\n\t * `themeSupportsLayout` is only relevant to the `default/flow` or\n\t * `constrained` layouts and it should not be taken into account when other\n\t * `layout` types are used.\n\t */\n\tif (\n\t\t( blockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ) &&\n\t\t! themeSupportsLayout\n\t) {\n\t\treturn null;\n\t}\n\tconst layoutType = getLayoutType( blockLayoutType );\n\tconst constrainedType = getLayoutType( 'constrained' );\n\tconst displayControlsForLegacyLayouts =\n\t\t! usedLayout.type && ( contentSize || inherit );\n\tconst hasContentSizeOrLegacySettings = !! inherit || !! contentSize;\n\n\tconst onChangeType = ( newType ) =>\n\t\tsetAttributes( { layout: { type: newType } } );\n\tconst onChangeLayout = ( newLayout ) =>\n\t\tsetAttributes( { layout: newLayout } );\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ showInheritToggle && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutType?.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t'constrained' ||\n\t\t\t\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'constrained',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks use content width with options for full and wide widths.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks will fill the width of this container. Toggle to constrain.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && allowSwitching && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ layoutType && layoutType.name !== 'default' && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t{ constrainedType && displayControlsForLegacyLayouts && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: LayoutPanelPure,\n\tattributeKeys: [ 'layout' ],\n\thasSupport( name ) {\n\t\treturn hasLayoutBlockSupport( name );\n\t},\n};\n\nfunction LayoutTypeSwitcher( { type, onChange } ) {\n\treturn (\n\t\t\n\t\t\t{ getLayoutTypes().map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t onChange( name ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( 'type' in ( settings.attributes?.layout ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasLayoutBlockSupport( settings ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockWithLayoutStyles( {\n\tblock: BlockListBlock,\n\tprops,\n\tblockGapSupport,\n\tlayoutClasses,\n} ) {\n\tconst { name, attributes } = props;\n\tconst id = useInstanceId( BlockListBlock );\n\tconst { layout } = attributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( name, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst selectorPrefix = `wp-container-${ kebabCase( name ) }-is-layout-`;\n\t// Higher specificity to override defaults from theme.json.\n\tconst selector = `.${ selectorPrefix }${ id }`;\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\t// Get CSS string for the current layout type.\n\t// The CSS and `style` element is only output if it is not empty.\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst css = fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName: name,\n\t\tselector,\n\t\tlayout: usedLayout,\n\t\tstyle: attributes?.style,\n\t\thasBlockGapSupport,\n\t} );\n\n\t// Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.\n\tconst layoutClassNames = clsx(\n\t\t{\n\t\t\t[ `${ selectorPrefix }${ id }` ]: !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t},\n\t\tlayoutClasses\n\t);\n\n\tuseStyleOverride( { css } );\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { clientId, name, attributes } = props;\n\t\tconst blockSupportsLayout = hasLayoutBlockSupport( name );\n\t\tconst layoutClasses = useLayoutClasses( attributes, name );\n\t\tconst extraProps = useSelect(\n\t\t\t( select ) => {\n\t\t\t\t// The callback returns early to avoid block editor subscription.\n\t\t\t\tif ( ! blockSupportsLayout ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { getSettings, getBlockSettings } = unlock(\n\t\t\t\t\tselect( blockEditorStore )\n\t\t\t\t);\n\t\t\t\tconst { disableLayoutStyles } = getSettings();\n\n\t\t\t\tif ( disableLayoutStyles ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ blockGapSupport ] = getBlockSettings(\n\t\t\t\t\tclientId,\n\t\t\t\t\t'spacing.blockGap'\n\t\t\t\t);\n\n\t\t\t\treturn { blockGapSupport };\n\t\t\t},\n\t\t\t[ blockSupportsLayout, clientId ]\n\t\t);\n\n\t\tif ( ! extraProps ) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t},\n\t'withLayoutStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\n","export function range( start, length ) {\n\treturn Array.from( { length }, ( _, i ) => start + i );\n}\n\nexport class GridRect {\n\tconstructor( {\n\t\tcolumnStart,\n\t\trowStart,\n\t\tcolumnEnd,\n\t\trowEnd,\n\t\tcolumnSpan,\n\t\trowSpan,\n\t} = {} ) {\n\t\tthis.columnStart = columnStart ?? 1;\n\t\tthis.rowStart = rowStart ?? 1;\n\t\tif ( columnSpan !== undefined ) {\n\t\t\tthis.columnEnd = this.columnStart + columnSpan - 1;\n\t\t} else {\n\t\t\tthis.columnEnd = columnEnd ?? this.columnStart;\n\t\t}\n\t\tif ( rowSpan !== undefined ) {\n\t\t\tthis.rowEnd = this.rowStart + rowSpan - 1;\n\t\t} else {\n\t\t\tthis.rowEnd = rowEnd ?? this.rowStart;\n\t\t}\n\t}\n\n\tget columnSpan() {\n\t\treturn this.columnEnd - this.columnStart + 1;\n\t}\n\n\tget rowSpan() {\n\t\treturn this.rowEnd - this.rowStart + 1;\n\t}\n\n\tcontains( column, row ) {\n\t\treturn (\n\t\t\tcolumn >= this.columnStart &&\n\t\t\tcolumn <= this.columnEnd &&\n\t\t\trow >= this.rowStart &&\n\t\t\trow <= this.rowEnd\n\t\t);\n\t}\n\n\tcontainsRect( rect ) {\n\t\treturn (\n\t\t\tthis.contains( rect.columnStart, rect.rowStart ) &&\n\t\t\tthis.contains( rect.columnEnd, rect.rowEnd )\n\t\t);\n\t}\n\n\tintersectsRect( rect ) {\n\t\treturn (\n\t\t\tthis.columnStart <= rect.columnEnd &&\n\t\t\tthis.columnEnd >= rect.columnStart &&\n\t\t\tthis.rowStart <= rect.rowEnd &&\n\t\t\tthis.rowEnd >= rect.rowStart\n\t\t);\n\t}\n}\n\nexport function getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\n/**\n * Given a grid-template-columns or grid-template-rows CSS property value, gets the start and end\n * position in pixels of each grid track.\n *\n * https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track\n *\n * @param {string} template The grid-template-columns or grid-template-rows CSS property value.\n * Only supports fixed sizes in pixels.\n * @param {number} gap The gap between grid tracks in pixels.\n *\n * @return {Array<{start: number, end: number}>} An array of objects with the start and end\n * position in pixels of each grid track.\n */\nexport function getGridTracks( template, gap ) {\n\tconst tracks = [];\n\tfor ( const size of template.split( ' ' ) ) {\n\t\tconst previousTrack = tracks[ tracks.length - 1 ];\n\t\tconst start = previousTrack ? previousTrack.end + gap : 0;\n\t\tconst end = start + parseFloat( size );\n\t\ttracks.push( { start, end } );\n\t}\n\treturn tracks;\n}\n\n/**\n * Given an array of grid tracks and a position in pixels, gets the index of the closest track to\n * that position.\n *\n * https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-track\n *\n * @param {Array<{start: number, end: number}>} tracks An array of objects with the start and end\n * position in pixels of each grid track.\n * @param {number} position The position in pixels.\n * @param {string} edge The edge of the track to compare the\n * position to. Either 'start' or 'end'.\n *\n * @return {number} The index of the closest track to the position. 0-based, unlike CSS grid which\n * is 1-based.\n */\nexport function getClosestTrack( tracks, position, edge = 'start' ) {\n\treturn tracks.reduce(\n\t\t( closest, track, index ) =>\n\t\t\tMath.abs( track[ edge ] - position ) <\n\t\t\tMath.abs( tracks[ closest ][ edge ] - position )\n\t\t\t\t? index\n\t\t\t\t: closest,\n\t\t0\n\t);\n}\n\nexport function getGridRect( gridElement, rect ) {\n\tconst columnGap = parseFloat( getComputedCSS( gridElement, 'column-gap' ) );\n\tconst rowGap = parseFloat( getComputedCSS( gridElement, 'row-gap' ) );\n\tconst gridColumnTracks = getGridTracks(\n\t\tgetComputedCSS( gridElement, 'grid-template-columns' ),\n\t\tcolumnGap\n\t);\n\tconst gridRowTracks = getGridTracks(\n\t\tgetComputedCSS( gridElement, 'grid-template-rows' ),\n\t\trowGap\n\t);\n\tconst columnStart = getClosestTrack( gridColumnTracks, rect.left ) + 1;\n\tconst rowStart = getClosestTrack( gridRowTracks, rect.top ) + 1;\n\tconst columnEnd =\n\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) + 1;\n\tconst rowEnd = getClosestTrack( gridRowTracks, rect.bottom, 'end' ) + 1;\n\treturn new GridRect( {\n\t\tcolumnStart,\n\t\tcolumnEnd,\n\t\trowStart,\n\t\trowEnd,\n\t} );\n}\n\nexport function getGridItemRect( gridItemElement ) {\n\treturn getGridRect(\n\t\tgridItemElement.parentElement,\n\t\tnew window.DOMRect(\n\t\t\tgridItemElement.offsetLeft,\n\t\t\tgridItemElement.offsetTop,\n\t\t\tgridItemElement.offsetWidth,\n\t\t\tgridItemElement.offsetHeight\n\t\t)\n\t);\n}\n\nexport function getGridInfo( gridElement ) {\n\tconst gridTemplateColumns = getComputedCSS(\n\t\tgridElement,\n\t\t'grid-template-columns'\n\t);\n\tconst gridTemplateRows = getComputedCSS(\n\t\tgridElement,\n\t\t'grid-template-rows'\n\t);\n\tconst numColumns = gridTemplateColumns.split( ' ' ).length;\n\tconst numRows = gridTemplateRows.split( ' ' ).length;\n\tconst numItems = numColumns * numRows;\n\treturn {\n\t\tnumColumns,\n\t\tnumRows,\n\t\tnumItems,\n\t\tcurrentColor: getComputedCSS( gridElement, 'color' ),\n\t\tstyle: {\n\t\t\tgridTemplateColumns,\n\t\t\tgridTemplateRows,\n\t\t\tgap: getComputedCSS( gridElement, 'gap' ),\n\t\t\tpadding: getComputedCSS( gridElement, 'padding' ),\n\t\t},\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { createInterpolateElement, useState } from '@wordpress/element';\nimport { Tip } from '@wordpress/components';\n\nconst globalTips = [\n\tcreateInterpolateElement(\n\t\t__(\n\t\t\t'While writing, you can press / to quickly insert new blocks.'\n\t\t),\n\t\t{ kbd: }\n\t),\n\tcreateInterpolateElement(\n\t\t__(\n\t\t\t'Indent a list by pressing space at the beginning of a line.'\n\t\t),\n\t\t{ kbd: }\n\t),\n\tcreateInterpolateElement(\n\t\t__(\n\t\t\t'Outdent a list by pressing backspace at the beginning of a line.'\n\t\t),\n\t\t{ kbd: }\n\t),\n\t__( 'Drag files into the editor to automatically insert media blocks.' ),\n\t__( \"Change a block's type by pressing the block icon on the toolbar.\" ),\n];\n\nfunction Tips() {\n\tconst [ randomIndex ] = useState(\n\t\t// Disable Reason: I'm not generating an HTML id.\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tMath.floor( Math.random() * globalTips.length )\n\t);\n\n\treturn { globalTips[ randomIndex ] };\n}\n\nexport default Tips;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronRight = (\n\t\n\t\t\n\t\n);\n\nexport default chevronRight;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronLeft = (\n\t\n\t\t\n\t\n);\n\nexport default chevronLeft;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst blockDefault = (\n\t\n\t\t\n\t\n);\n\nexport default blockDefault;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Icon } from '@wordpress/components';\nimport { blockDefault } from '@wordpress/icons';\nimport { memo } from '@wordpress/element';\n\nfunction BlockIcon( { icon, showColors = false, className, context } ) {\n\tif ( icon?.src === 'block-default' ) {\n\t\ticon = {\n\t\t\tsrc: blockDefault,\n\t\t};\n\t}\n\n\tconst renderedIcon = (\n\t\t\n\t);\n\tconst style = showColors\n\t\t? {\n\t\t\t\tbackgroundColor: icon && icon.background,\n\t\t\t\tcolor: icon && icon.foreground,\n\t\t }\n\t\t: {};\n\n\treturn (\n\t\t\n\t\t\t{ renderedIcon }\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-icon/README.md\n */\nexport default memo( BlockIcon );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tButton,\n\t__experimentalText as Text,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { chevronLeft, chevronRight } from '@wordpress/icons';\nimport { __, isRTL, sprintf } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockCard( { title, icon, description, blockType, className, name } ) {\n\tif ( blockType ) {\n\t\tdeprecated( '`blockType` property in `BlockCard component`', {\n\t\t\tsince: '5.7',\n\t\t\talternative: '`title, icon and description` properties',\n\t\t} );\n\t\t( { title, icon, description } = blockType );\n\t}\n\n\tconst { parentNavBlockClientId } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\tselect( blockEditorStore );\n\n\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\n\t\treturn {\n\t\t\tparentNavBlockClientId: getBlockParentsByBlockName(\n\t\t\t\t_selectedBlockClientId,\n\t\t\t\t'core/navigation',\n\t\t\t\ttrue\n\t\t\t)[ 0 ],\n\t\t};\n\t}, [] );\n\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\treturn (\n\t\t
    \n\t\t\t{ parentNavBlockClientId && ( // This is only used by the Navigation block for now. It's not ideal having Navigation block specific code here.\n\t\t\t\t selectBlock( parentNavBlockClientId ) }\n\t\t\t\t\tlabel={ __( 'Go to parent Navigation block' ) }\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t// TODO: This style override is also used in ToolsPanelHeader.\n\t\t\t\t\t\t// It should be supported out-of-the-box by Button.\n\t\t\t\t\t\t{ minWidth: 24, padding: 0 }\n\t\t\t\t\t}\n\t\t\t\t\ticon={ isRTL() ? chevronRight : chevronLeft }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t\n\t\t\t\n\t\t\t\t

    \n\t\t\t\t\t{ name?.length\n\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t// translators: %1$s: Custom block name. %2$s: Block title.\n\t\t\t\t\t\t\t\t__( '%1$s (%2$s)' ),\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\ttitle\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: title }\n\t\t\t\t

    \n\t\t\t\t{ description && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ description }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t
    \n\t);\n}\n\nexport default BlockCard;\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { useRegistry, createRegistry, RegistryProvider } from '@wordpress/data';\nimport { createHigherOrderComponent } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { storeConfig } from '../../store';\nimport { STORE_NAME as blockEditorStoreName } from '../../store/constants';\n\nfunction getSubRegistry( subRegistries, registry, useSubRegistry ) {\n\tif ( ! useSubRegistry ) {\n\t\treturn registry;\n\t}\n\tlet subRegistry = subRegistries.get( registry );\n\tif ( ! subRegistry ) {\n\t\tsubRegistry = createRegistry( {}, registry );\n\t\tsubRegistry.registerStore( blockEditorStoreName, storeConfig );\n\t\tsubRegistries.set( registry, subRegistry );\n\t}\n\treturn subRegistry;\n}\n\nconst withRegistryProvider = createHigherOrderComponent(\n\t( WrappedComponent ) =>\n\t\t( { useSubRegistry = true, ...props } ) => {\n\t\t\tconst registry = useRegistry();\n\t\t\tconst [ subRegistries ] = useState( () => new WeakMap() );\n\t\t\tconst subRegistry = getSubRegistry(\n\t\t\t\tsubRegistries,\n\t\t\t\tregistry,\n\t\t\t\tuseSubRegistry\n\t\t\t);\n\n\t\t\tif ( subRegistry === registry ) {\n\t\t\t\treturn ;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t);\n\t\t},\n\t'withRegistryProvider'\n);\n\nexport default withRegistryProvider;\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { cloneBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\n/**\n * A function to call when the block value has been updated in the block-editor\n * store.\n *\n * @callback onBlockUpdate\n * @param {Object[]} blocks The updated blocks.\n * @param {Object} options The updated block options, such as selectionStart\n * and selectionEnd.\n */\n\n/**\n * useBlockSync is a side effect which handles bidirectional sync between the\n * block-editor store and a controlling data source which provides blocks. This\n * is most commonly used by the BlockEditorProvider to synchronize the contents\n * of the block-editor store with the root entity, like a post.\n *\n * Another example would be the template part block, which provides blocks from\n * a separate entity data source than a root entity. This hook syncs edits to\n * the template part in the block editor back to the entity and vice-versa.\n *\n * Here are some of its basic functions:\n * - Initalizes the block-editor store for the given clientID to the blocks\n * given via props.\n * - Adds incoming changes (like undo) to the block-editor store.\n * - Adds outgoing changes (like editing content) to the controlling entity,\n * determining if a change should be considered persistent or not.\n * - Handles edge cases and race conditions which occur in those operations.\n * - Ignores changes which happen to other entities (like nested inner block\n * controllers.\n * - Passes selection state from the block-editor store to the controlling entity.\n *\n * @param {Object} props Props for the block sync hook\n * @param {string} props.clientId The client ID of the inner block controller.\n * If none is passed, then it is assumed to be a\n * root controller rather than an inner block\n * controller.\n * @param {Object[]} props.value The control value for the blocks. This value\n * is used to initalize the block-editor store\n * and for resetting the blocks to incoming\n * changes like undo.\n * @param {Object} props.selection The selection state responsible to restore the selection on undo/redo.\n * @param {onBlockUpdate} props.onChange Function to call when a persistent\n * change has been made in the block-editor blocks\n * for the given clientId. For example, after\n * this function is called, an entity is marked\n * dirty because it has changes to save.\n * @param {onBlockUpdate} props.onInput Function to call when a non-persistent\n * change has been made in the block-editor blocks\n * for the given clientId. When this is called,\n * controlling sources do not become dirty.\n */\nexport default function useBlockSync( {\n\tclientId = null,\n\tvalue: controlledBlocks,\n\tselection: controlledSelection,\n\tonChange = noop,\n\tonInput = noop,\n} ) {\n\tconst registry = useRegistry();\n\n\tconst {\n\t\tresetBlocks,\n\t\tresetSelection,\n\t\treplaceInnerBlocks,\n\t\tsetHasControlledInnerBlocks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = registry.dispatch( blockEditorStore );\n\tconst { getBlockName, getBlocks, getSelectionStart, getSelectionEnd } =\n\t\tregistry.select( blockEditorStore );\n\tconst isControlled = useSelect(\n\t\t( select ) => {\n\t\t\treturn (\n\t\t\t\t! clientId ||\n\t\t\t\tselect( blockEditorStore ).areInnerBlocksControlled( clientId )\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst pendingChangesRef = useRef( { incoming: null, outgoing: [] } );\n\tconst subscribedRef = useRef( false );\n\n\tconst setControlledBlocks = () => {\n\t\tif ( ! controlledBlocks ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't need to persist this change because we only replace\n\t\t// controlled inner blocks when the change was caused by an entity,\n\t\t// and so it would already be persisted.\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tif ( clientId ) {\n\t\t\t// It is important to batch here because otherwise,\n\t\t\t// as soon as `setHasControlledInnerBlocks` is called\n\t\t\t// the effect to restore might be triggered\n\t\t\t// before the actual blocks get set properly in state.\n\t\t\tregistry.batch( () => {\n\t\t\t\tsetHasControlledInnerBlocks( clientId, true );\n\t\t\t\tconst storeBlocks = controlledBlocks.map( ( block ) =>\n\t\t\t\t\tcloneBlock( block )\n\t\t\t\t);\n\t\t\t\tif ( subscribedRef.current ) {\n\t\t\t\t\tpendingChangesRef.current.incoming = storeBlocks;\n\t\t\t\t}\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\treplaceInnerBlocks( clientId, storeBlocks );\n\t\t\t} );\n\t\t} else {\n\t\t\tif ( subscribedRef.current ) {\n\t\t\t\tpendingChangesRef.current.incoming = controlledBlocks;\n\t\t\t}\n\t\t\tresetBlocks( controlledBlocks );\n\t\t}\n\t};\n\n\t// Clean up the changes made by setControlledBlocks() when the component\n\t// containing useBlockSync() unmounts.\n\tconst unsetControlledBlocks = () => {\n\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\tif ( clientId ) {\n\t\t\tsetHasControlledInnerBlocks( clientId, false );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\treplaceInnerBlocks( clientId, [] );\n\t\t} else {\n\t\t\tresetBlocks( [] );\n\t\t}\n\t};\n\n\t// Add a subscription to the block-editor registry to detect when changes\n\t// have been made. This lets us inform the data source of changes. This\n\t// is an effect so that the subscriber can run synchronously without\n\t// waiting for React renders for changes.\n\tconst onInputRef = useRef( onInput );\n\tconst onChangeRef = useRef( onChange );\n\tuseEffect( () => {\n\t\tonInputRef.current = onInput;\n\t\tonChangeRef.current = onChange;\n\t}, [ onInput, onChange ] );\n\n\t// Determine if blocks need to be reset when they change.\n\tuseEffect( () => {\n\t\tif ( pendingChangesRef.current.outgoing.includes( controlledBlocks ) ) {\n\t\t\t// Skip block reset if the value matches expected outbound sync\n\t\t\t// triggered by this component by a preceding change detection.\n\t\t\t// Only skip if the value matches expectation, since a reset should\n\t\t\t// still occur if the value is modified (not equal by reference),\n\t\t\t// to allow that the consumer may apply modifications to reflect\n\t\t\t// back on the editor.\n\t\t\tif (\n\t\t\t\tpendingChangesRef.current.outgoing[\n\t\t\t\t\tpendingChangesRef.current.outgoing.length - 1\n\t\t\t\t] === controlledBlocks\n\t\t\t) {\n\t\t\t\tpendingChangesRef.current.outgoing = [];\n\t\t\t}\n\t\t} else if ( getBlocks( clientId ) !== controlledBlocks ) {\n\t\t\t// Reset changing value in all other cases than the sync described\n\t\t\t// above. Since this can be reached in an update following an out-\n\t\t\t// bound sync, unset the outbound value to avoid considering it in\n\t\t\t// subsequent renders.\n\t\t\tpendingChangesRef.current.outgoing = [];\n\t\t\tsetControlledBlocks();\n\n\t\t\tif ( controlledSelection ) {\n\t\t\t\tresetSelection(\n\t\t\t\t\tcontrolledSelection.selectionStart,\n\t\t\t\t\tcontrolledSelection.selectionEnd,\n\t\t\t\t\tcontrolledSelection.initialPosition\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}, [ controlledBlocks, clientId ] );\n\n\tconst isMountedRef = useRef( false );\n\n\tuseEffect( () => {\n\t\t// On mount, controlled blocks are already set in the effect above.\n\t\tif ( ! isMountedRef.current ) {\n\t\t\tisMountedRef.current = true;\n\t\t\treturn;\n\t\t}\n\n\t\t// When the block becomes uncontrolled, it means its inner state has been reset\n\t\t// we need to take the blocks again from the external value property.\n\t\tif ( ! isControlled ) {\n\t\t\tpendingChangesRef.current.outgoing = [];\n\t\t\tsetControlledBlocks();\n\t\t}\n\t}, [ isControlled ] );\n\n\tuseEffect( () => {\n\t\tconst {\n\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\tisLastBlockChangePersistent,\n\t\t\t__unstableIsLastBlockChangeIgnored,\n\t\t\tareInnerBlocksControlled,\n\t\t} = registry.select( blockEditorStore );\n\n\t\tlet blocks = getBlocks( clientId );\n\t\tlet isPersistent = isLastBlockChangePersistent();\n\t\tlet previousAreBlocksDifferent = false;\n\n\t\tsubscribedRef.current = true;\n\t\tconst unsubscribe = registry.subscribe( () => {\n\t\t\t// Sometimes, when changing block lists, lingering subscriptions\n\t\t\t// might trigger before they are cleaned up. If the block for which\n\t\t\t// the subscription runs is no longer in the store, this would clear\n\t\t\t// its parent entity's block list. To avoid this, we bail out if\n\t\t\t// the subscription is triggering for a block (`clientId !== null`)\n\t\t\t// and its block name can't be found because it's not on the list.\n\t\t\t// (`getBlockName( clientId ) === null`).\n\t\t\tif ( clientId !== null && getBlockName( clientId ) === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// When RESET_BLOCKS on parent blocks get called, the controlled blocks\n\t\t\t// can reset to uncontrolled, in these situations, it means we need to populate\n\t\t\t// the blocks again from the external blocks (the value property here)\n\t\t\t// and we should stop triggering onChange\n\t\t\tconst isStillControlled =\n\t\t\t\t! clientId || areInnerBlocksControlled( clientId );\n\t\t\tif ( ! isStillControlled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newIsPersistent = isLastBlockChangePersistent();\n\t\t\tconst newBlocks = getBlocks( clientId );\n\t\t\tconst areBlocksDifferent = newBlocks !== blocks;\n\t\t\tblocks = newBlocks;\n\t\t\tif (\n\t\t\t\tareBlocksDifferent &&\n\t\t\t\t( pendingChangesRef.current.incoming ||\n\t\t\t\t\t__unstableIsLastBlockChangeIgnored() )\n\t\t\t) {\n\t\t\t\tpendingChangesRef.current.incoming = null;\n\t\t\t\tisPersistent = newIsPersistent;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Since we often dispatch an action to mark the previous action as\n\t\t\t// persistent, we need to make sure that the blocks changed on the\n\t\t\t// previous action before committing the change.\n\t\t\tconst didPersistenceChange =\n\t\t\t\tpreviousAreBlocksDifferent &&\n\t\t\t\t! areBlocksDifferent &&\n\t\t\t\tnewIsPersistent &&\n\t\t\t\t! isPersistent;\n\n\t\t\tif ( areBlocksDifferent || didPersistenceChange ) {\n\t\t\t\tisPersistent = newIsPersistent;\n\t\t\t\t// We know that onChange/onInput will update controlledBlocks.\n\t\t\t\t// We need to be aware that it was caused by an outgoing change\n\t\t\t\t// so that we do not treat it as an incoming change later on,\n\t\t\t\t// which would cause a block reset.\n\t\t\t\tpendingChangesRef.current.outgoing.push( blocks );\n\n\t\t\t\t// Inform the controlling entity that changes have been made to\n\t\t\t\t// the block-editor store they should be aware about.\n\t\t\t\tconst updateParent = isPersistent\n\t\t\t\t\t? onChangeRef.current\n\t\t\t\t\t: onInputRef.current;\n\t\t\t\tupdateParent( blocks, {\n\t\t\t\t\tselection: {\n\t\t\t\t\t\tselectionStart: getSelectionStart(),\n\t\t\t\t\t\tselectionEnd: getSelectionEnd(),\n\t\t\t\t\t\tinitialPosition:\n\t\t\t\t\t\t\tgetSelectedBlocksInitialCaretPosition(),\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t\tpreviousAreBlocksDifferent = areBlocksDifferent;\n\t\t}, blockEditorStore );\n\n\t\treturn () => {\n\t\t\tsubscribedRef.current = false;\n\t\t\tunsubscribe();\n\t\t};\n\t}, [ registry, clientId ] );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tunsetControlledBlocks();\n\t\t};\n\t}, [] );\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"keyboardShortcuts\"];","/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';\nimport { __ } from '@wordpress/i18n';\n\nfunction KeyboardShortcuts() {\n\treturn null;\n}\n\nfunction KeyboardShortcutsRegister() {\n\t// Registering the shortcuts.\n\tconst { registerShortcut } = useDispatch( keyboardShortcutsStore );\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/duplicate',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Duplicate the selected block(s).' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryShift',\n\t\t\t\tcharacter: 'd',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/remove',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Remove the selected block(s).' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'access',\n\t\t\t\tcharacter: 'z',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/insert-before',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __(\n\t\t\t\t'Insert a new block before the selected block(s).'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryAlt',\n\t\t\t\tcharacter: 't',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/insert-after',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __(\n\t\t\t\t'Insert a new block after the selected block(s).'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primaryAlt',\n\t\t\t\tcharacter: 'y',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/delete-multi-selection',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Delete selection.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tcharacter: 'del',\n\t\t\t},\n\t\t\taliases: [\n\t\t\t\t{\n\t\t\t\t\tcharacter: 'backspace',\n\t\t\t\t},\n\t\t\t],\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/select-all',\n\t\t\tcategory: 'selection',\n\t\t\tdescription: __(\n\t\t\t\t'Select all text when typing. Press again to select all blocks.'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'a',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/unselect',\n\t\t\tcategory: 'selection',\n\t\t\tdescription: __( 'Clear selection.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tcharacter: 'escape',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/multi-text-selection',\n\t\t\tcategory: 'selection',\n\t\t\tdescription: __( 'Select text across multiple blocks.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'shift',\n\t\t\t\tcharacter: 'arrow',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/focus-toolbar',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Navigate to the nearest toolbar.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'alt',\n\t\t\t\tcharacter: 'F10',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/move-up',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Move the selected block(s) up.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'secondary',\n\t\t\t\tcharacter: 't',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/move-down',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __( 'Move the selected block(s) down.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'secondary',\n\t\t\t\tcharacter: 'y',\n\t\t\t},\n\t\t} );\n\n\t\t// List view shortcuts.\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/collapse-list-view',\n\t\t\tcategory: 'list-view',\n\t\t\tdescription: __( 'Collapse all other items.' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'alt',\n\t\t\t\tcharacter: 'l',\n\t\t\t},\n\t\t} );\n\n\t\tregisterShortcut( {\n\t\t\tname: 'core/block-editor/group',\n\t\t\tcategory: 'block',\n\t\t\tdescription: __(\n\t\t\t\t'Create a group block from the selected multiple blocks.'\n\t\t\t),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'g',\n\t\t\t},\n\t\t} );\n\t}, [ registerShortcut ] );\n\n\treturn null;\n}\n\nKeyboardShortcuts.Register = KeyboardShortcutsRegister;\n\nexport default KeyboardShortcuts;\n","/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { useEffect } from '@wordpress/element';\nimport { SlotFillProvider } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport withRegistryProvider from './with-registry-provider';\nimport useBlockSync from './use-block-sync';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockRefsProvider } from './block-refs-provider';\nimport { unlock } from '../../lock-unlock';\nimport KeyboardShortcuts from '../keyboard-shortcuts';\n\n/** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */\n\nexport const ExperimentalBlockEditorProvider = withRegistryProvider(\n\t( props ) => {\n\t\tconst { children, settings, stripExperimentalSettings = false } = props;\n\n\t\tconst { __experimentalUpdateSettings } = unlock(\n\t\t\tuseDispatch( blockEditorStore )\n\t\t);\n\t\tuseEffect( () => {\n\t\t\t__experimentalUpdateSettings(\n\t\t\t\t{\n\t\t\t\t\t...settings,\n\t\t\t\t\t__internalIsInitialized: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstripExperimentalSettings,\n\t\t\t\t\treset: true,\n\t\t\t\t}\n\t\t\t);\n\t\t}, [\n\t\t\tsettings,\n\t\t\tstripExperimentalSettings,\n\t\t\t__experimentalUpdateSettings,\n\t\t] );\n\n\t\t// Syncs the entity provider with changes in the block-editor store.\n\t\tuseBlockSync( props );\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ ! settings?.__unstableIsPreviewMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t}\n);\n\nexport const BlockEditorProvider = ( props ) => {\n\treturn (\n\t\t\n\t\t\t{ props.children }\n\t\t\n\t);\n};\n\nexport default BlockEditorProvider;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext, useMemo } from '@wordpress/element';\n\n/** @typedef {import('react').ReactNode} ReactNode */\n\n/**\n * @typedef BlockContextProviderProps\n *\n * @property {Record} value Context value to merge with current\n * value.\n * @property {ReactNode} children Component children.\n */\n\n/** @type {import('react').Context>} */\nconst Context = createContext( {} );\n\n/**\n * Component which merges passed value with current consumed block context.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-context/README.md\n *\n * @param {BlockContextProviderProps} props\n */\nexport function BlockContextProvider( { value, children } ) {\n\tconst context = useContext( Context );\n\tconst nextValue = useMemo(\n\t\t() => ( { ...context, ...value } ),\n\t\t[ context, value ]\n\t);\n\n\treturn ;\n}\n\nexport default Context;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { withFilters } from '@wordpress/components';\nimport {\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tgetBlockType,\n} from '@wordpress/blocks';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\n\n/**\n * Default value used for blocks which do not define their own context needs,\n * used to guarantee that a block's `context` prop will always be an object. It\n * is assigned as a constant since it is always expected to be an empty object,\n * and in order to avoid unnecessary React reconciliations of a changing object.\n *\n * @type {{}}\n */\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nconst Edit = ( props ) => {\n\tconst { name } = props;\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\t// `edit` and `save` are functions or components describing the markup\n\t// with which a block is displayed. If `blockType` is valid, assign\n\t// them preferentially as the render value for the block.\n\tconst Component = blockType.edit || blockType.save;\n\n\treturn ;\n};\n\nconst EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );\n\nconst EditWithGeneratedProps = ( props ) => {\n\tconst { attributes = {}, name } = props;\n\tconst blockType = getBlockType( name );\n\tconst blockContext = useContext( BlockContext );\n\n\t// Assign context values using the block type's declared context needs.\n\tconst context = useMemo( () => {\n\t\treturn blockType && blockType.usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tblockType.usesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t}, [ blockType, blockContext ] );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\tif ( blockType.apiVersion > 1 ) {\n\t\treturn ;\n\t}\n\n\t// Generate a class name for the block's editable form.\n\tconst generatedClassName = hasBlockSupport( blockType, 'className', true )\n\t\t? getBlockDefaultClassName( name )\n\t\t: null;\n\tconst className = clsx(\n\t\tgeneratedClassName,\n\t\tattributes.className,\n\t\tprops.className\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\nexport default EditWithGeneratedProps;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst moreVertical = (\n\t\n\t\t\n\t\n);\n\nexport default moreVertical;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Children } from '@wordpress/element';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { moreVertical } from '@wordpress/icons';\n\nfunction Warning( { className, actions, children, secondaryActions } ) {\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    \n\t\t\t\t\t\t{ children }\n\t\t\t\t\t

    \n\n\t\t\t\t\t{ ( Children.count( actions ) > 0 || secondaryActions ) && (\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{ Children.count( actions ) > 0 &&\n\t\t\t\t\t\t\t\tChildren.map( actions, ( action, i ) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ action }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t{ secondaryActions && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ () => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ secondaryActions.map(\n\t\t\t\t\t\t\t\t\t\t\t\t( item, pos ) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t
    \n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/warning/README.md\n */\nexport default Warning;\n","/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { Button } from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport Warning from '../warning';\n\nexport function MultipleUsageWarning( {\n\toriginalBlockClientId,\n\tname,\n\tonReplace,\n} ) {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst blockType = getBlockType( name );\n\n\treturn (\n\t\t selectBlock( originalBlockClientId ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Find original' ) }\n\t\t\t\t,\n\t\t\t\t onReplace( [] ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t,\n\t\t\t] }\n\t\t>\n\t\t\t{ blockType?.title }: \n\t\t\t{ __( 'This block can only be used once.' ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nexport const PrivateBlockContext = createContext( {} );\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useContext } from '@wordpress/element';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport Edit from './edit';\nimport {\n\tBlockEditContextProvider,\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n\tmayDisplayParentControlsKey,\n\tblockEditingModeKey,\n\tblockBindingsKey,\n\tisPreviewModeKey,\n} from './context';\nimport { MultipleUsageWarning } from './multiple-usage-warning';\nimport { PrivateBlockContext } from '../block-list/private-block-context';\n\n/**\n * The `useBlockEditContext` hook provides information about the block this hook is being used in.\n * It returns an object with the `name`, `isSelected` state, and the `clientId` of the block.\n * It is useful if you want to create custom hooks that need access to the current blocks clientId\n * but don't want to rely on the data getting passed in as a parameter.\n *\n * @return {Object} Block edit context\n */\nexport { useBlockEditContext };\n\nexport default function BlockEdit( {\n\tmayDisplayControls,\n\tmayDisplayParentControls,\n\tblockEditingMode,\n\tisPreviewMode,\n\t// The remaining props are passed through the BlockEdit filters and are thus\n\t// public API!\n\t...props\n} ) {\n\tconst {\n\t\tname,\n\t\tisSelected,\n\t\tclientId,\n\t\tattributes = {},\n\t\t__unstableLayoutClassNames,\n\t} = props;\n\tconst { layout = null, metadata = {} } = attributes;\n\tconst { bindings } = metadata;\n\tconst layoutSupport =\n\t\thasBlockSupport( name, 'layout', false ) ||\n\t\thasBlockSupport( name, '__experimentalLayout', false );\n\tconst { originalBlockClientId } = useContext( PrivateBlockContext );\n\n\treturn (\n\t\t ( {\n\t\t\t\t\tname,\n\t\t\t\t\tisSelected,\n\t\t\t\t\tclientId,\n\t\t\t\t\tlayout: layoutSupport ? layout : null,\n\t\t\t\t\t__unstableLayoutClassNames,\n\t\t\t\t\t// We use symbols in favour of an __unstable prefix to avoid\n\t\t\t\t\t// usage outside of the package (this context is exposed).\n\t\t\t\t\t[ mayDisplayControlsKey ]: mayDisplayControls,\n\t\t\t\t\t[ mayDisplayParentControlsKey ]: mayDisplayParentControls,\n\t\t\t\t\t[ blockEditingModeKey ]: blockEditingMode,\n\t\t\t\t\t[ blockBindingsKey ]: bindings,\n\t\t\t\t\t[ isPreviewModeKey ]: isPreviewMode,\n\t\t\t\t} ),\n\t\t\t\t[\n\t\t\t\t\tname,\n\t\t\t\t\tisSelected,\n\t\t\t\t\tclientId,\n\t\t\t\t\tlayoutSupport,\n\t\t\t\t\tlayout,\n\t\t\t\t\t__unstableLayoutClassNames,\n\t\t\t\t\tmayDisplayControls,\n\t\t\t\t\tmayDisplayParentControls,\n\t\t\t\t\tblockEditingMode,\n\t\t\t\t\tbindings,\n\t\t\t\t\tisPreviewMode,\n\t\t\t\t]\n\t\t\t) }\n\t\t>\n\t\t\t\n\t\t\t{ originalBlockClientId && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { RawHTML } from '@wordpress/element';\nimport { safeHTML } from '@wordpress/dom';\n\nexport default function BlockView( {\n\ttitle,\n\trawContent,\n\trenderedContent,\n\taction,\n\tactionText,\n\tclassName,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{ title }\n\t\t\t\t

    \n\n\t\t\t\t
    \n\t\t\t\t\t{ rawContent }\n\t\t\t\t
    \n\n\t\t\t\t
    \n\t\t\t\t\t{ safeHTML( renderedContent ) }\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{ actionText }\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n// diff doesn't tree-shake correctly, so we import from the individual\n// module here, to avoid including too much of the library\nimport { diffChars } from 'diff/lib/diff/character';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { getSaveContent } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport BlockView from './block-view';\n\nfunction BlockCompare( {\n\tblock,\n\tonKeep,\n\tonConvert,\n\tconvertor,\n\tconvertButtonText,\n} ) {\n\tfunction getDifference( originalContent, newContent ) {\n\t\tconst difference = diffChars( originalContent, newContent );\n\n\t\treturn difference.map( ( item, pos ) => {\n\t\t\tconst classes = clsx( {\n\t\t\t\t'block-editor-block-compare__added': item.added,\n\t\t\t\t'block-editor-block-compare__removed': item.removed,\n\t\t\t} );\n\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{ item.value }\n\t\t\t\t\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction getConvertedContent( convertedBlock ) {\n\t\t// The convertor may return an array of items or a single item.\n\t\tconst newBlocks = Array.isArray( convertedBlock )\n\t\t\t? convertedBlock\n\t\t\t: [ convertedBlock ];\n\n\t\t// Get converted block details.\n\t\tconst newContent = newBlocks.map( ( item ) =>\n\t\t\tgetSaveContent( item.name, item.attributes, item.innerBlocks )\n\t\t);\n\n\t\treturn newContent.join( '' );\n\t}\n\n\tconst converted = getConvertedContent( convertor( block ) );\n\tconst difference = getDifference( block.originalContent, converted );\n\n\treturn (\n\t\t
    \n\t\t\t\n\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default BlockCompare;\n","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { Button, Modal } from '@wordpress/components';\nimport { useState, useCallback, useMemo } from '@wordpress/element';\nimport { createBlock, rawHandler } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport Warning from '../warning';\nimport BlockCompare from '../block-compare';\nimport { store as blockEditorStore } from '../../store';\n\nconst blockToBlocks = ( block ) =>\n\trawHandler( {\n\t\tHTML: block.originalContent,\n\t} );\n\nexport default function BlockInvalidWarning( { clientId } ) {\n\tconst { block, canInsertHTMLBlock, canInsertClassicBlock } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType, getBlock, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( clientId ),\n\t\t\t\tcanInsertHTMLBlock: canInsertBlockType(\n\t\t\t\t\t'core/html',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertClassicBlock: canInsertBlockType(\n\t\t\t\t\t'core/freeform',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\n\tconst [ compare, setCompare ] = useState( false );\n\tconst onCompareClose = useCallback( () => setCompare( false ), [] );\n\n\tconst convert = useMemo(\n\t\t() => ( {\n\t\t\ttoClassic() {\n\t\t\t\tconst classicBlock = createBlock( 'core/freeform', {\n\t\t\t\t\tcontent: block.originalContent,\n\t\t\t\t} );\n\t\t\t\treturn replaceBlock( block.clientId, classicBlock );\n\t\t\t},\n\t\t\ttoHTML() {\n\t\t\t\tconst htmlBlock = createBlock( 'core/html', {\n\t\t\t\t\tcontent: block.originalContent,\n\t\t\t\t} );\n\t\t\t\treturn replaceBlock( block.clientId, htmlBlock );\n\t\t\t},\n\t\t\ttoBlocks() {\n\t\t\t\tconst newBlocks = blockToBlocks( block );\n\t\t\t\treturn replaceBlock( block.clientId, newBlocks );\n\t\t\t},\n\t\t\ttoRecoveredBlock() {\n\t\t\t\tconst recoveredBlock = createBlock(\n\t\t\t\t\tblock.name,\n\t\t\t\t\tblock.attributes,\n\t\t\t\t\tblock.innerBlocks\n\t\t\t\t);\n\t\t\t\treturn replaceBlock( block.clientId, recoveredBlock );\n\t\t\t},\n\t\t} ),\n\t\t[ block, replaceBlock ]\n\t);\n\n\tconst secondaryActions = useMemo(\n\t\t() =>\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\t// translators: Button to fix block content\n\t\t\t\t\ttitle: _x( 'Resolve', 'imperative verb' ),\n\t\t\t\t\tonClick: () => setCompare( true ),\n\t\t\t\t},\n\t\t\t\tcanInsertHTMLBlock && {\n\t\t\t\t\ttitle: __( 'Convert to HTML' ),\n\t\t\t\t\tonClick: convert.toHTML,\n\t\t\t\t},\n\t\t\t\tcanInsertClassicBlock && {\n\t\t\t\t\ttitle: __( 'Convert to Classic Block' ),\n\t\t\t\t\tonClick: convert.toClassic,\n\t\t\t\t},\n\t\t\t].filter( Boolean ),\n\t\t[ canInsertHTMLBlock, canInsertClassicBlock, convert ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\t\t{ __( 'Attempt recovery' ) }\n\t\t\t\t\t,\n\t\t\t\t] }\n\t\t\t\tsecondaryActions={ secondaryActions }\n\t\t\t>\n\t\t\t\t{ __( 'Block contains unexpected or invalid content.' ) }\n\t\t\t\n\t\t\t{ compare && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport Warning from '../warning';\n\nconst warning = (\n\t\n\t\t{ __( 'This block has encountered an error and cannot be previewed.' ) }\n\t\n);\n\nexport default () => warning;\n","/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\n\nclass BlockCrashBoundary extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.state = {\n\t\t\thasError: false,\n\t\t};\n\t}\n\n\tcomponentDidCatch() {\n\t\tthis.setState( {\n\t\t\thasError: true,\n\t\t} );\n\t}\n\n\trender() {\n\t\tif ( this.state.hasError ) {\n\t\t\treturn this.props.fallback;\n\t\t}\n\n\t\treturn this.props.children;\n\t}\n}\n\nexport default BlockCrashBoundary;\n","/**\n * External dependencies\n */\nimport TextareaAutosize from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tgetBlockAttributes,\n\tgetBlockContent,\n\tgetBlockType,\n\tgetSaveContent,\n\tvalidateBlock,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockHTML( { clientId } ) {\n\tconst [ html, setHtml ] = useState( '' );\n\tconst block = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst { updateBlock } = useDispatch( blockEditorStore );\n\tconst onChange = () => {\n\t\tconst blockType = getBlockType( block.name );\n\n\t\tif ( ! blockType ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst attributes = getBlockAttributes(\n\t\t\tblockType,\n\t\t\thtml,\n\t\t\tblock.attributes\n\t\t);\n\n\t\t// If html is empty we reset the block to the default HTML and mark it as valid to avoid triggering an error\n\t\tconst content = html ? html : getSaveContent( blockType, attributes );\n\t\tconst [ isValid ] = html\n\t\t\t? validateBlock( {\n\t\t\t\t\t...block,\n\t\t\t\t\tattributes,\n\t\t\t\t\toriginalContent: content,\n\t\t\t } )\n\t\t\t: [ true ];\n\n\t\tupdateBlock( clientId, {\n\t\t\tattributes,\n\t\t\toriginalContent: content,\n\t\t\tisValid,\n\t\t} );\n\n\t\t// Ensure the state is updated if we reset so it displays the default content.\n\t\tif ( ! html ) {\n\t\t\tsetHtml( content );\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tsetHtml( getBlockContent( block ) );\n\t}, [ block ] );\n\n\treturn (\n\t\t setHtml( event.target.value ) }\n\t\t/>\n\t);\n}\n\nexport default BlockHTML;\n","let updateQueue = makeQueue();\nconst raf = fn => schedule(fn, updateQueue);\nlet writeQueue = makeQueue();\n\nraf.write = fn => schedule(fn, writeQueue);\n\nlet onStartQueue = makeQueue();\n\nraf.onStart = fn => schedule(fn, onStartQueue);\n\nlet onFrameQueue = makeQueue();\n\nraf.onFrame = fn => schedule(fn, onFrameQueue);\n\nlet onFinishQueue = makeQueue();\n\nraf.onFinish = fn => schedule(fn, onFinishQueue);\n\nlet timeouts = [];\n\nraf.setTimeout = (handler, ms) => {\n let time = raf.now() + ms;\n\n let cancel = () => {\n let i = timeouts.findIndex(t => t.cancel == cancel);\n if (~i) timeouts.splice(i, 1);\n pendingCount -= ~i ? 1 : 0;\n };\n\n let timeout = {\n time,\n handler,\n cancel\n };\n timeouts.splice(findTimeout(time), 0, timeout);\n pendingCount += 1;\n start();\n return timeout;\n};\n\nlet findTimeout = time => ~(~timeouts.findIndex(t => t.time > time) || ~timeouts.length);\n\nraf.cancel = fn => {\n onStartQueue.delete(fn);\n onFrameQueue.delete(fn);\n onFinishQueue.delete(fn);\n updateQueue.delete(fn);\n writeQueue.delete(fn);\n};\n\nraf.sync = fn => {\n sync = true;\n raf.batchedUpdates(fn);\n sync = false;\n};\n\nraf.throttle = fn => {\n let lastArgs;\n\n function queuedFn() {\n try {\n fn(...lastArgs);\n } finally {\n lastArgs = null;\n }\n }\n\n function throttled(...args) {\n lastArgs = args;\n raf.onStart(queuedFn);\n }\n\n throttled.handler = fn;\n\n throttled.cancel = () => {\n onStartQueue.delete(queuedFn);\n lastArgs = null;\n };\n\n return throttled;\n};\n\nlet nativeRaf = typeof window != 'undefined' ? window.requestAnimationFrame : () => {};\n\nraf.use = impl => nativeRaf = impl;\n\nraf.now = typeof performance != 'undefined' ? () => performance.now() : Date.now;\n\nraf.batchedUpdates = fn => fn();\n\nraf.catch = console.error;\nraf.frameLoop = 'always';\n\nraf.advance = () => {\n if (raf.frameLoop !== 'demand') {\n console.warn('Cannot call the manual advancement of rafz whilst frameLoop is not set as demand');\n } else {\n update();\n }\n};\n\nlet ts = -1;\nlet pendingCount = 0;\nlet sync = false;\n\nfunction schedule(fn, queue) {\n if (sync) {\n queue.delete(fn);\n fn(0);\n } else {\n queue.add(fn);\n start();\n }\n}\n\nfunction start() {\n if (ts < 0) {\n ts = 0;\n\n if (raf.frameLoop !== 'demand') {\n nativeRaf(loop);\n }\n }\n}\n\nfunction stop() {\n ts = -1;\n}\n\nfunction loop() {\n if (~ts) {\n nativeRaf(loop);\n raf.batchedUpdates(update);\n }\n}\n\nfunction update() {\n let prevTs = ts;\n ts = raf.now();\n let count = findTimeout(ts);\n\n if (count) {\n eachSafely(timeouts.splice(0, count), t => t.handler());\n pendingCount -= count;\n }\n\n if (!pendingCount) {\n stop();\n return;\n }\n\n onStartQueue.flush();\n updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n onFrameQueue.flush();\n writeQueue.flush();\n onFinishQueue.flush();\n}\n\nfunction makeQueue() {\n let next = new Set();\n let current = next;\n return {\n add(fn) {\n pendingCount += current == next && !next.has(fn) ? 1 : 0;\n next.add(fn);\n },\n\n delete(fn) {\n pendingCount -= current == next && next.has(fn) ? 1 : 0;\n return next.delete(fn);\n },\n\n flush(arg) {\n if (current.size) {\n next = new Set();\n pendingCount -= current.size;\n eachSafely(current, fn => fn(arg) && next.add(fn));\n pendingCount += next.size;\n current = next;\n }\n }\n\n };\n}\n\nfunction eachSafely(values, each) {\n values.forEach(value => {\n try {\n each(value);\n } catch (e) {\n raf.catch(e);\n }\n });\n}\n\nconst __raf = {\n count() {\n return pendingCount;\n },\n\n isRunning() {\n return ts >= 0;\n },\n\n clear() {\n ts = -1;\n timeouts = [];\n onStartQueue = makeQueue();\n updateQueue = makeQueue();\n onFrameQueue = makeQueue();\n writeQueue = makeQueue();\n onFinishQueue = makeQueue();\n pendingCount = 0;\n }\n\n};\n\nexport { __raf, raf };\n","import { raf } from '@react-spring/rafz';\nexport { raf } from '@react-spring/rafz';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nfunction noop() {}\nconst defineHidden = (obj, key, value) => Object.defineProperty(obj, key, {\n value,\n writable: true,\n configurable: true\n});\nconst is = {\n arr: Array.isArray,\n obj: a => !!a && a.constructor.name === 'Object',\n fun: a => typeof a === 'function',\n str: a => typeof a === 'string',\n num: a => typeof a === 'number',\n und: a => a === undefined\n};\nfunction isEqual(a, b) {\n if (is.arr(a)) {\n if (!is.arr(b) || a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n return a === b;\n}\nconst each = (obj, fn) => obj.forEach(fn);\nfunction eachProp(obj, fn, ctx) {\n if (is.arr(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn.call(ctx, obj[i], `${i}`);\n }\n\n return;\n }\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(ctx, obj[key], key);\n }\n }\n}\nconst toArray = a => is.und(a) ? [] : is.arr(a) ? a : [a];\nfunction flush(queue, iterator) {\n if (queue.size) {\n const items = Array.from(queue);\n queue.clear();\n each(items, iterator);\n }\n}\nconst flushCalls = (queue, ...args) => flush(queue, fn => fn(...args));\nconst isSSR = () => typeof window === 'undefined' || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\n\nlet createStringInterpolator$1;\nlet to;\nlet colors$1 = null;\nlet skipAnimation = false;\nlet willAdvance = noop;\nconst assign = globals => {\n if (globals.to) to = globals.to;\n if (globals.now) raf.now = globals.now;\n if (globals.colors !== undefined) colors$1 = globals.colors;\n if (globals.skipAnimation != null) skipAnimation = globals.skipAnimation;\n if (globals.createStringInterpolator) createStringInterpolator$1 = globals.createStringInterpolator;\n if (globals.requestAnimationFrame) raf.use(globals.requestAnimationFrame);\n if (globals.batchedUpdates) raf.batchedUpdates = globals.batchedUpdates;\n if (globals.willAdvance) willAdvance = globals.willAdvance;\n if (globals.frameLoop) raf.frameLoop = globals.frameLoop;\n};\n\nvar globals = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get createStringInterpolator () { return createStringInterpolator$1; },\n get to () { return to; },\n get colors () { return colors$1; },\n get skipAnimation () { return skipAnimation; },\n get willAdvance () { return willAdvance; },\n assign: assign\n});\n\nconst startQueue = new Set();\nlet currentFrame = [];\nlet prevFrame = [];\nlet priority = 0;\nconst frameLoop = {\n get idle() {\n return !startQueue.size && !currentFrame.length;\n },\n\n start(animation) {\n if (priority > animation.priority) {\n startQueue.add(animation);\n raf.onStart(flushStartQueue);\n } else {\n startSafely(animation);\n raf(advance);\n }\n },\n\n advance,\n\n sort(animation) {\n if (priority) {\n raf.onFrame(() => frameLoop.sort(animation));\n } else {\n const prevIndex = currentFrame.indexOf(animation);\n\n if (~prevIndex) {\n currentFrame.splice(prevIndex, 1);\n startUnsafely(animation);\n }\n }\n },\n\n clear() {\n currentFrame = [];\n startQueue.clear();\n }\n\n};\n\nfunction flushStartQueue() {\n startQueue.forEach(startSafely);\n startQueue.clear();\n raf(advance);\n}\n\nfunction startSafely(animation) {\n if (!currentFrame.includes(animation)) startUnsafely(animation);\n}\n\nfunction startUnsafely(animation) {\n currentFrame.splice(findIndex(currentFrame, other => other.priority > animation.priority), 0, animation);\n}\n\nfunction advance(dt) {\n const nextFrame = prevFrame;\n\n for (let i = 0; i < currentFrame.length; i++) {\n const animation = currentFrame[i];\n priority = animation.priority;\n\n if (!animation.idle) {\n willAdvance(animation);\n animation.advance(dt);\n\n if (!animation.idle) {\n nextFrame.push(animation);\n }\n }\n }\n\n priority = 0;\n prevFrame = currentFrame;\n prevFrame.length = 0;\n currentFrame = nextFrame;\n return currentFrame.length > 0;\n}\n\nfunction findIndex(arr, test) {\n const index = arr.findIndex(test);\n return index < 0 ? arr.length : index;\n}\n\nconst colors = {\n transparent: 0x00000000,\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff\n};\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...parts) {\n return '\\\\(\\\\s*(' + parts.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nconst rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\nconst rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER));\nconst hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE));\nconst hsla = new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));\nconst hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex6 = /^#([0-9a-fA-F]{6})$/;\nconst hex8 = /^#([0-9a-fA-F]{8})$/;\n\nfunction normalizeColor(color) {\n let match;\n\n if (typeof color === 'number') {\n return color >>> 0 === color && color >= 0 && color <= 0xffffffff ? color : null;\n }\n\n if (match = hex6.exec(color)) return parseInt(match[1] + 'ff', 16) >>> 0;\n\n if (colors$1 && colors$1[color] !== undefined) {\n return colors$1[color];\n }\n\n if (match = rgb.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | 0x000000ff) >>> 0;\n }\n\n if (match = rgba.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | parse1(match[4])) >>> 0;\n }\n\n if (match = hex3.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + 'ff', 16) >>> 0;\n }\n\n if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;\n\n if (match = hex4.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + match[4] + match[4], 16) >>> 0;\n }\n\n if (match = hsl.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | 0x000000ff) >>> 0;\n }\n\n if (match = hsla.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | parse1(match[4])) >>> 0;\n }\n\n return null;\n}\n\nfunction hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nfunction hslToRgb(h, s, l) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;\n}\n\nfunction parse255(str) {\n const int = parseInt(str, 10);\n if (int < 0) return 0;\n if (int > 255) return 255;\n return int;\n}\n\nfunction parse360(str) {\n const int = parseFloat(str);\n return (int % 360 + 360) % 360 / 360;\n}\n\nfunction parse1(str) {\n const num = parseFloat(str);\n if (num < 0) return 0;\n if (num > 1) return 255;\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n const int = parseFloat(str);\n if (int < 0) return 0;\n if (int > 100) return 1;\n return int / 100;\n}\n\nfunction colorToRgba(input) {\n let int32Color = normalizeColor(input);\n if (int32Color === null) return input;\n int32Color = int32Color || 0;\n let r = (int32Color & 0xff000000) >>> 24;\n let g = (int32Color & 0x00ff0000) >>> 16;\n let b = (int32Color & 0x0000ff00) >>> 8;\n let a = (int32Color & 0x000000ff) / 255;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\nconst createInterpolator = (range, output, extrapolate) => {\n if (is.fun(range)) {\n return range;\n }\n\n if (is.arr(range)) {\n return createInterpolator({\n range,\n output: output,\n extrapolate\n });\n }\n\n if (is.str(range.output[0])) {\n return createStringInterpolator$1(range);\n }\n\n const config = range;\n const outputRange = config.output;\n const inputRange = config.range || [0, 1];\n const extrapolateLeft = config.extrapolateLeft || config.extrapolate || 'extend';\n const extrapolateRight = config.extrapolateRight || config.extrapolate || 'extend';\n\n const easing = config.easing || (t => t);\n\n return input => {\n const range = findRange(input, inputRange);\n return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight, config.map);\n };\n};\n\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {\n let result = map ? map(input) : input;\n\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') return result;else if (extrapolateLeft === 'clamp') result = inputMin;\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') return result;else if (extrapolateRight === 'clamp') result = inputMax;\n }\n\n if (outputMin === outputMax) return outputMin;\n if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax;\n if (inputMin === -Infinity) result = -result;else if (inputMax === Infinity) result = result - inputMin;else result = (result - inputMin) / (inputMax - inputMin);\n result = easing(result);\n if (outputMin === -Infinity) result = -result;else if (outputMax === Infinity) result = result + outputMin;else result = result * (outputMax - outputMin) + outputMin;\n return result;\n}\n\nfunction findRange(input, inputRange) {\n for (var i = 1; i < inputRange.length - 1; ++i) if (inputRange[i] >= input) break;\n\n return i - 1;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst $get = Symbol.for('FluidValue.get');\nconst $observers = Symbol.for('FluidValue.observers');\n\nconst hasFluidValue = arg => Boolean(arg && arg[$get]);\n\nconst getFluidValue = arg => arg && arg[$get] ? arg[$get]() : arg;\n\nconst getFluidObservers = target => target[$observers] || null;\n\nfunction callFluidObserver(observer, event) {\n if (observer.eventObserved) {\n observer.eventObserved(event);\n } else {\n observer(event);\n }\n}\n\nfunction callFluidObservers(target, event) {\n let observers = target[$observers];\n\n if (observers) {\n observers.forEach(observer => {\n callFluidObserver(observer, event);\n });\n }\n}\n\nclass FluidValue {\n constructor(get) {\n this[$get] = void 0;\n this[$observers] = void 0;\n\n if (!get && !(get = this.get)) {\n throw Error('Unknown getter');\n }\n\n setFluidGetter(this, get);\n }\n\n}\n\nconst setFluidGetter = (target, get) => setHidden(target, $get, get);\n\nfunction addFluidObserver(target, observer) {\n if (target[$get]) {\n let observers = target[$observers];\n\n if (!observers) {\n setHidden(target, $observers, observers = new Set());\n }\n\n if (!observers.has(observer)) {\n observers.add(observer);\n\n if (target.observerAdded) {\n target.observerAdded(observers.size, observer);\n }\n }\n }\n\n return observer;\n}\n\nfunction removeFluidObserver(target, observer) {\n let observers = target[$observers];\n\n if (observers && observers.has(observer)) {\n const count = observers.size - 1;\n\n if (count) {\n observers.delete(observer);\n } else {\n target[$observers] = null;\n }\n\n if (target.observerRemoved) {\n target.observerRemoved(count, observer);\n }\n }\n}\n\nconst setHidden = (target, key, value) => Object.defineProperty(target, key, {\n value,\n writable: true,\n configurable: true\n});\n\nconst numberRegex = /[+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\nconst colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d\\.]+%?\\))/gi;\nconst unitRegex = new RegExp(`(${numberRegex.source})(%|[a-z]+)`, 'i');\nconst rgbaRegex = /rgba\\(([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+)\\)/gi;\nconst cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nconst variableToRgba = input => {\n const [token, fallback] = parseCSSVariable(input);\n\n if (!token || isSSR()) {\n return input;\n }\n\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(token);\n\n if (value) {\n return value.trim();\n } else if (fallback && fallback.startsWith('--')) {\n const _value = window.getComputedStyle(document.documentElement).getPropertyValue(fallback);\n\n if (_value) {\n return _value;\n } else {\n return input;\n }\n } else if (fallback && cssVariableRegex.test(fallback)) {\n return variableToRgba(fallback);\n } else if (fallback) {\n return fallback;\n }\n\n return input;\n};\n\nconst parseCSSVariable = current => {\n const match = cssVariableRegex.exec(current);\n if (!match) return [,];\n const [, token, fallback] = match;\n return [token, fallback];\n};\n\nlet namedColorRegex;\n\nconst rgbaRound = (_, p1, p2, p3, p4) => `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})`;\n\nconst createStringInterpolator = config => {\n if (!namedColorRegex) namedColorRegex = colors$1 ? new RegExp(`(${Object.keys(colors$1).join('|')})(?!\\\\w)`, 'g') : /^\\b$/;\n const output = config.output.map(value => {\n return getFluidValue(value).replace(cssVariableRegex, variableToRgba).replace(colorRegex, colorToRgba).replace(namedColorRegex, colorToRgba);\n });\n const keyframes = output.map(value => value.match(numberRegex).map(Number));\n const outputRanges = keyframes[0].map((_, i) => keyframes.map(values => {\n if (!(i in values)) {\n throw Error('The arity of each \"output\" value must be equal');\n }\n\n return values[i];\n }));\n const interpolators = outputRanges.map(output => createInterpolator(_extends({}, config, {\n output\n })));\n return input => {\n var _output$find;\n\n const missingUnit = !unitRegex.test(output[0]) && ((_output$find = output.find(value => unitRegex.test(value))) == null ? void 0 : _output$find.replace(numberRegex, ''));\n let i = 0;\n return output[0].replace(numberRegex, () => `${interpolators[i++](input)}${missingUnit || ''}`).replace(rgbaRegex, rgbaRound);\n };\n};\n\nconst prefix = 'react-spring: ';\n\nconst once = fn => {\n const func = fn;\n let called = false;\n\n if (typeof func != 'function') {\n throw new TypeError(`${prefix}once requires a function parameter`);\n }\n\n return (...args) => {\n if (!called) {\n func(...args);\n called = true;\n }\n };\n};\n\nconst warnInterpolate = once(console.warn);\nfunction deprecateInterpolate() {\n warnInterpolate(`${prefix}The \"interpolate\" function is deprecated in v9 (use \"to\" instead)`);\n}\nconst warnDirectCall = once(console.warn);\nfunction deprecateDirectCall() {\n warnDirectCall(`${prefix}Directly calling start instead of using the api object is deprecated in v9 (use \".start\" instead), this will be removed in later 0.X.0 versions`);\n}\n\nfunction isAnimatedString(value) {\n return is.str(value) && (value[0] == '#' || /\\d/.test(value) || !isSSR() && cssVariableRegex.test(value) || value in (colors$1 || {}));\n}\n\nconst useIsomorphicLayoutEffect = isSSR() ? useEffect : useLayoutEffect;\n\nconst useIsMounted = () => {\n const isMounted = useRef(false);\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return isMounted;\n};\n\nfunction useForceUpdate() {\n const update = useState()[1];\n const isMounted = useIsMounted();\n return () => {\n if (isMounted.current) {\n update(Math.random());\n }\n };\n}\n\nfunction useMemoOne(getResult, inputs) {\n const [initial] = useState(() => ({\n inputs,\n result: getResult()\n }));\n const committed = useRef();\n const prevCache = committed.current;\n let cache = prevCache;\n\n if (cache) {\n const useCache = Boolean(inputs && cache.inputs && areInputsEqual(inputs, cache.inputs));\n\n if (!useCache) {\n cache = {\n inputs,\n result: getResult()\n };\n }\n } else {\n cache = initial;\n }\n\n useEffect(() => {\n committed.current = cache;\n\n if (prevCache == initial) {\n initial.inputs = initial.result = undefined;\n }\n }, [cache]);\n return cache.result;\n}\n\nfunction areInputsEqual(next, prev) {\n if (next.length !== prev.length) {\n return false;\n }\n\n for (let i = 0; i < next.length; i++) {\n if (next[i] !== prev[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nconst useOnce = effect => useEffect(effect, emptyDeps);\nconst emptyDeps = [];\n\nfunction usePrev(value) {\n const prevRef = useRef();\n useEffect(() => {\n prevRef.current = value;\n });\n return prevRef.current;\n}\n\nconst useReducedMotion = () => {\n const [reducedMotion, setReducedMotion] = useState(null);\n useIsomorphicLayoutEffect(() => {\n const mql = window.matchMedia('(prefers-reduced-motion)');\n\n const handleMediaChange = e => {\n setReducedMotion(e.matches);\n assign({\n skipAnimation: e.matches\n });\n };\n\n handleMediaChange(mql);\n mql.addEventListener('change', handleMediaChange);\n return () => {\n mql.removeEventListener('change', handleMediaChange);\n };\n }, []);\n return reducedMotion;\n};\n\nexport { FluidValue, globals as Globals, addFluidObserver, callFluidObserver, callFluidObservers, colorToRgba, colors, createInterpolator, createStringInterpolator, defineHidden, deprecateDirectCall, deprecateInterpolate, each, eachProp, flush, flushCalls, frameLoop, getFluidObservers, getFluidValue, hasFluidValue, hex3, hex4, hex6, hex8, hsl, hsla, is, isAnimatedString, isEqual, isSSR, noop, removeFluidObserver, rgb, rgba, setFluidGetter, toArray, useForceUpdate, useIsomorphicLayoutEffect, useMemoOne, useOnce, usePrev, useReducedMotion };\n","import { defineHidden, is, createInterpolator, eachProp, hasFluidValue, getFluidValue, each, isAnimatedString, useForceUpdate, useIsomorphicLayoutEffect, addFluidObserver, removeFluidObserver, raf, useOnce } from '@react-spring/shared';\nimport * as React from 'react';\nimport { forwardRef, useRef, useCallback, useEffect } from 'react';\n\nconst $node = Symbol.for('Animated:node');\nconst isAnimated = value => !!value && value[$node] === value;\nconst getAnimated = owner => owner && owner[$node];\nconst setAnimated = (owner, node) => defineHidden(owner, $node, node);\nconst getPayload = owner => owner && owner[$node] && owner[$node].getPayload();\nclass Animated {\n constructor() {\n this.payload = void 0;\n setAnimated(this, this);\n }\n\n getPayload() {\n return this.payload || [];\n }\n\n}\n\nclass AnimatedValue extends Animated {\n constructor(_value) {\n super();\n this.done = true;\n this.elapsedTime = void 0;\n this.lastPosition = void 0;\n this.lastVelocity = void 0;\n this.v0 = void 0;\n this.durationProgress = 0;\n this._value = _value;\n\n if (is.num(this._value)) {\n this.lastPosition = this._value;\n }\n }\n\n static create(value) {\n return new AnimatedValue(value);\n }\n\n getPayload() {\n return [this];\n }\n\n getValue() {\n return this._value;\n }\n\n setValue(value, step) {\n if (is.num(value)) {\n this.lastPosition = value;\n\n if (step) {\n value = Math.round(value / step) * step;\n\n if (this.done) {\n this.lastPosition = value;\n }\n }\n }\n\n if (this._value === value) {\n return false;\n }\n\n this._value = value;\n return true;\n }\n\n reset() {\n const {\n done\n } = this;\n this.done = false;\n\n if (is.num(this._value)) {\n this.elapsedTime = 0;\n this.durationProgress = 0;\n this.lastPosition = this._value;\n if (done) this.lastVelocity = null;\n this.v0 = null;\n }\n }\n\n}\n\nclass AnimatedString extends AnimatedValue {\n constructor(value) {\n super(0);\n this._string = null;\n this._toString = void 0;\n this._toString = createInterpolator({\n output: [value, value]\n });\n }\n\n static create(value) {\n return new AnimatedString(value);\n }\n\n getValue() {\n let value = this._string;\n return value == null ? this._string = this._toString(this._value) : value;\n }\n\n setValue(value) {\n if (is.str(value)) {\n if (value == this._string) {\n return false;\n }\n\n this._string = value;\n this._value = 1;\n } else if (super.setValue(value)) {\n this._string = null;\n } else {\n return false;\n }\n\n return true;\n }\n\n reset(goal) {\n if (goal) {\n this._toString = createInterpolator({\n output: [this.getValue(), goal]\n });\n }\n\n this._value = 0;\n super.reset();\n }\n\n}\n\nconst TreeContext = {\n dependencies: null\n};\n\nclass AnimatedObject extends Animated {\n constructor(source) {\n super();\n this.source = source;\n this.setValue(source);\n }\n\n getValue(animated) {\n const values = {};\n eachProp(this.source, (source, key) => {\n if (isAnimated(source)) {\n values[key] = source.getValue(animated);\n } else if (hasFluidValue(source)) {\n values[key] = getFluidValue(source);\n } else if (!animated) {\n values[key] = source;\n }\n });\n return values;\n }\n\n setValue(source) {\n this.source = source;\n this.payload = this._makePayload(source);\n }\n\n reset() {\n if (this.payload) {\n each(this.payload, node => node.reset());\n }\n }\n\n _makePayload(source) {\n if (source) {\n const payload = new Set();\n eachProp(source, this._addToPayload, payload);\n return Array.from(payload);\n }\n }\n\n _addToPayload(source) {\n if (TreeContext.dependencies && hasFluidValue(source)) {\n TreeContext.dependencies.add(source);\n }\n\n const payload = getPayload(source);\n\n if (payload) {\n each(payload, node => this.add(node));\n }\n }\n\n}\n\nclass AnimatedArray extends AnimatedObject {\n constructor(source) {\n super(source);\n }\n\n static create(source) {\n return new AnimatedArray(source);\n }\n\n getValue() {\n return this.source.map(node => node.getValue());\n }\n\n setValue(source) {\n const payload = this.getPayload();\n\n if (source.length == payload.length) {\n return payload.map((node, i) => node.setValue(source[i])).some(Boolean);\n }\n\n super.setValue(source.map(makeAnimated));\n return true;\n }\n\n}\n\nfunction makeAnimated(value) {\n const nodeType = isAnimatedString(value) ? AnimatedString : AnimatedValue;\n return nodeType.create(value);\n}\n\nfunction getAnimatedType(value) {\n const parentNode = getAnimated(value);\n return parentNode ? parentNode.constructor : is.arr(value) ? AnimatedArray : isAnimatedString(value) ? AnimatedString : AnimatedValue;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst withAnimated = (Component, host) => {\n const hasInstance = !is.fun(Component) || Component.prototype && Component.prototype.isReactComponent;\n return forwardRef((givenProps, givenRef) => {\n const instanceRef = useRef(null);\n const ref = hasInstance && useCallback(value => {\n instanceRef.current = updateRef(givenRef, value);\n }, [givenRef]);\n const [props, deps] = getAnimatedState(givenProps, host);\n const forceUpdate = useForceUpdate();\n\n const callback = () => {\n const instance = instanceRef.current;\n\n if (hasInstance && !instance) {\n return;\n }\n\n const didUpdate = instance ? host.applyAnimatedValues(instance, props.getValue(true)) : false;\n\n if (didUpdate === false) {\n forceUpdate();\n }\n };\n\n const observer = new PropsObserver(callback, deps);\n const observerRef = useRef();\n useIsomorphicLayoutEffect(() => {\n observerRef.current = observer;\n each(deps, dep => addFluidObserver(dep, observer));\n return () => {\n if (observerRef.current) {\n each(observerRef.current.deps, dep => removeFluidObserver(dep, observerRef.current));\n raf.cancel(observerRef.current.update);\n }\n };\n });\n useEffect(callback, []);\n useOnce(() => () => {\n const observer = observerRef.current;\n each(observer.deps, dep => removeFluidObserver(dep, observer));\n });\n const usedProps = host.getComponentProps(props.getValue());\n return React.createElement(Component, _extends({}, usedProps, {\n ref: ref\n }));\n });\n};\n\nclass PropsObserver {\n constructor(update, deps) {\n this.update = update;\n this.deps = deps;\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n raf.write(this.update);\n }\n }\n\n}\n\nfunction getAnimatedState(props, host) {\n const dependencies = new Set();\n TreeContext.dependencies = dependencies;\n if (props.style) props = _extends({}, props, {\n style: host.createAnimatedStyle(props.style)\n });\n props = new AnimatedObject(props);\n TreeContext.dependencies = null;\n return [props, dependencies];\n}\n\nfunction updateRef(ref, value) {\n if (ref) {\n if (is.fun(ref)) ref(value);else ref.current = value;\n }\n\n return value;\n}\n\nconst cacheKey = Symbol.for('AnimatedComponent');\nconst createHost = (components, {\n applyAnimatedValues: _applyAnimatedValues = () => false,\n createAnimatedStyle: _createAnimatedStyle = style => new AnimatedObject(style),\n getComponentProps: _getComponentProps = props => props\n} = {}) => {\n const hostConfig = {\n applyAnimatedValues: _applyAnimatedValues,\n createAnimatedStyle: _createAnimatedStyle,\n getComponentProps: _getComponentProps\n };\n\n const animated = Component => {\n const displayName = getDisplayName(Component) || 'Anonymous';\n\n if (is.str(Component)) {\n Component = animated[Component] || (animated[Component] = withAnimated(Component, hostConfig));\n } else {\n Component = Component[cacheKey] || (Component[cacheKey] = withAnimated(Component, hostConfig));\n }\n\n Component.displayName = `Animated(${displayName})`;\n return Component;\n };\n\n eachProp(components, (Component, key) => {\n if (is.arr(components)) {\n key = getDisplayName(Component);\n }\n\n animated[key] = animated(Component);\n });\n return {\n animated\n };\n};\n\nconst getDisplayName = arg => is.str(arg) ? arg : arg && is.str(arg.displayName) ? arg.displayName : is.fun(arg) && arg.name || null;\n\nexport { Animated, AnimatedArray, AnimatedObject, AnimatedString, AnimatedValue, createHost, getAnimated, getAnimatedType, getPayload, isAnimated, setAnimated };\n","import { eachProp, is, toArray, getFluidValue, isAnimatedString, Globals, useIsomorphicLayoutEffect, each, raf, flush, FluidValue, deprecateInterpolate, callFluidObservers, frameLoop, hasFluidValue, flushCalls, isEqual, getFluidObservers, addFluidObserver, removeFluidObserver, noop, useMemoOne, deprecateDirectCall, useForceUpdate, usePrev, useOnce, createInterpolator, createStringInterpolator } from '@react-spring/shared';\nexport { Globals, createInterpolator, useIsomorphicLayoutEffect, useReducedMotion } from '@react-spring/shared';\nimport * as React from 'react';\nimport { useContext, useMemo, useRef, useState } from 'react';\nimport { getAnimated, AnimatedValue, getPayload, AnimatedString, getAnimatedType, setAnimated } from '@react-spring/animated';\nexport * from '@react-spring/types/animated';\nexport * from '@react-spring/types/interpolation';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction callProp(value, ...args) {\n return is.fun(value) ? value(...args) : value;\n}\nconst matchProp = (value, key) => value === true || !!(key && value && (is.fun(value) ? value(key) : toArray(value).includes(key)));\nconst resolveProp = (prop, key) => is.obj(prop) ? key && prop[key] : prop;\nconst getDefaultProp = (props, key) => props.default === true ? props[key] : props.default ? props.default[key] : undefined;\n\nconst noopTransform = value => value;\n\nconst getDefaultProps = (props, transform = noopTransform) => {\n let keys = DEFAULT_PROPS;\n\n if (props.default && props.default !== true) {\n props = props.default;\n keys = Object.keys(props);\n }\n\n const defaults = {};\n\n for (const key of keys) {\n const value = transform(props[key], key);\n\n if (!is.und(value)) {\n defaults[key] = value;\n }\n }\n\n return defaults;\n};\nconst DEFAULT_PROPS = ['config', 'onProps', 'onStart', 'onChange', 'onPause', 'onResume', 'onRest'];\nconst RESERVED_PROPS = {\n config: 1,\n from: 1,\n to: 1,\n ref: 1,\n loop: 1,\n reset: 1,\n pause: 1,\n cancel: 1,\n reverse: 1,\n immediate: 1,\n default: 1,\n delay: 1,\n onProps: 1,\n onStart: 1,\n onChange: 1,\n onPause: 1,\n onResume: 1,\n onRest: 1,\n onResolve: 1,\n items: 1,\n trail: 1,\n sort: 1,\n expires: 1,\n initial: 1,\n enter: 1,\n update: 1,\n leave: 1,\n children: 1,\n onDestroyed: 1,\n keys: 1,\n callId: 1,\n parentId: 1\n};\n\nfunction getForwardProps(props) {\n const forward = {};\n let count = 0;\n eachProp(props, (value, prop) => {\n if (!RESERVED_PROPS[prop]) {\n forward[prop] = value;\n count++;\n }\n });\n\n if (count) {\n return forward;\n }\n}\n\nfunction inferTo(props) {\n const to = getForwardProps(props);\n\n if (to) {\n const out = {\n to\n };\n eachProp(props, (val, key) => key in to || (out[key] = val));\n return out;\n }\n\n return _extends({}, props);\n}\nfunction computeGoal(value) {\n value = getFluidValue(value);\n return is.arr(value) ? value.map(computeGoal) : isAnimatedString(value) ? Globals.createStringInterpolator({\n range: [0, 1],\n output: [value, value]\n })(1) : value;\n}\nfunction hasProps(props) {\n for (const _ in props) return true;\n\n return false;\n}\nfunction isAsyncTo(to) {\n return is.fun(to) || is.arr(to) && is.obj(to[0]);\n}\nfunction detachRefs(ctrl, ref) {\n var _ctrl$ref;\n\n (_ctrl$ref = ctrl.ref) == null ? void 0 : _ctrl$ref.delete(ctrl);\n ref == null ? void 0 : ref.delete(ctrl);\n}\nfunction replaceRef(ctrl, ref) {\n if (ref && ctrl.ref !== ref) {\n var _ctrl$ref2;\n\n (_ctrl$ref2 = ctrl.ref) == null ? void 0 : _ctrl$ref2.delete(ctrl);\n ref.add(ctrl);\n ctrl.ref = ref;\n }\n}\n\nfunction useChain(refs, timeSteps, timeFrame = 1000) {\n useIsomorphicLayoutEffect(() => {\n if (timeSteps) {\n let prevDelay = 0;\n each(refs, (ref, i) => {\n const controllers = ref.current;\n\n if (controllers.length) {\n let delay = timeFrame * timeSteps[i];\n if (isNaN(delay)) delay = prevDelay;else prevDelay = delay;\n each(controllers, ctrl => {\n each(ctrl.queue, props => {\n const memoizedDelayProp = props.delay;\n\n props.delay = key => delay + callProp(memoizedDelayProp || 0, key);\n });\n });\n ref.start();\n }\n });\n } else {\n let p = Promise.resolve();\n each(refs, ref => {\n const controllers = ref.current;\n\n if (controllers.length) {\n const queues = controllers.map(ctrl => {\n const q = ctrl.queue;\n ctrl.queue = [];\n return q;\n });\n p = p.then(() => {\n each(controllers, (ctrl, i) => each(queues[i] || [], update => ctrl.queue.push(update)));\n return Promise.all(ref.start());\n });\n }\n });\n }\n });\n}\n\nconst config = {\n default: {\n tension: 170,\n friction: 26\n },\n gentle: {\n tension: 120,\n friction: 14\n },\n wobbly: {\n tension: 180,\n friction: 12\n },\n stiff: {\n tension: 210,\n friction: 20\n },\n slow: {\n tension: 280,\n friction: 60\n },\n molasses: {\n tension: 280,\n friction: 120\n }\n};\nconst c1 = 1.70158;\nconst c2 = c1 * 1.525;\nconst c3 = c1 + 1;\nconst c4 = 2 * Math.PI / 3;\nconst c5 = 2 * Math.PI / 4.5;\n\nconst bounceOut = x => {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1) {\n return n1 * x * x;\n } else if (x < 2 / d1) {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n } else if (x < 2.5 / d1) {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n } else {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n};\n\nconst easings = {\n linear: x => x,\n easeInQuad: x => x * x,\n easeOutQuad: x => 1 - (1 - x) * (1 - x),\n easeInOutQuad: x => x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n easeInCubic: x => x * x * x,\n easeOutCubic: x => 1 - Math.pow(1 - x, 3),\n easeInOutCubic: x => x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2,\n easeInQuart: x => x * x * x * x,\n easeOutQuart: x => 1 - Math.pow(1 - x, 4),\n easeInOutQuart: x => x < 0.5 ? 8 * x * x * x * x : 1 - Math.pow(-2 * x + 2, 4) / 2,\n easeInQuint: x => x * x * x * x * x,\n easeOutQuint: x => 1 - Math.pow(1 - x, 5),\n easeInOutQuint: x => x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2,\n easeInSine: x => 1 - Math.cos(x * Math.PI / 2),\n easeOutSine: x => Math.sin(x * Math.PI / 2),\n easeInOutSine: x => -(Math.cos(Math.PI * x) - 1) / 2,\n easeInExpo: x => x === 0 ? 0 : Math.pow(2, 10 * x - 10),\n easeOutExpo: x => x === 1 ? 1 : 1 - Math.pow(2, -10 * x),\n easeInOutExpo: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2,\n easeInCirc: x => 1 - Math.sqrt(1 - Math.pow(x, 2)),\n easeOutCirc: x => Math.sqrt(1 - Math.pow(x - 1, 2)),\n easeInOutCirc: x => x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2,\n easeInBack: x => c3 * x * x * x - c1 * x * x,\n easeOutBack: x => 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2),\n easeInOutBack: x => x < 0.5 ? Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2,\n easeInElastic: x => x === 0 ? 0 : x === 1 ? 1 : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4),\n easeOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1,\n easeInOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2 : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5) / 2 + 1,\n easeInBounce: x => 1 - bounceOut(1 - x),\n easeOutBounce: bounceOut,\n easeInOutBounce: x => x < 0.5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2\n};\n\nconst defaults = _extends({}, config.default, {\n mass: 1,\n damping: 1,\n easing: easings.linear,\n clamp: false\n});\n\nclass AnimationConfig {\n constructor() {\n this.tension = void 0;\n this.friction = void 0;\n this.frequency = void 0;\n this.damping = void 0;\n this.mass = void 0;\n this.velocity = 0;\n this.restVelocity = void 0;\n this.precision = void 0;\n this.progress = void 0;\n this.duration = void 0;\n this.easing = void 0;\n this.clamp = void 0;\n this.bounce = void 0;\n this.decay = void 0;\n this.round = void 0;\n Object.assign(this, defaults);\n }\n\n}\nfunction mergeConfig(config, newConfig, defaultConfig) {\n if (defaultConfig) {\n defaultConfig = _extends({}, defaultConfig);\n sanitizeConfig(defaultConfig, newConfig);\n newConfig = _extends({}, defaultConfig, newConfig);\n }\n\n sanitizeConfig(config, newConfig);\n Object.assign(config, newConfig);\n\n for (const key in defaults) {\n if (config[key] == null) {\n config[key] = defaults[key];\n }\n }\n\n let {\n mass,\n frequency,\n damping\n } = config;\n\n if (!is.und(frequency)) {\n if (frequency < 0.01) frequency = 0.01;\n if (damping < 0) damping = 0;\n config.tension = Math.pow(2 * Math.PI / frequency, 2) * mass;\n config.friction = 4 * Math.PI * damping * mass / frequency;\n }\n\n return config;\n}\n\nfunction sanitizeConfig(config, props) {\n if (!is.und(props.decay)) {\n config.duration = undefined;\n } else {\n const isTensionConfig = !is.und(props.tension) || !is.und(props.friction);\n\n if (isTensionConfig || !is.und(props.frequency) || !is.und(props.damping) || !is.und(props.mass)) {\n config.duration = undefined;\n config.decay = undefined;\n }\n\n if (isTensionConfig) {\n config.frequency = undefined;\n }\n }\n}\n\nconst emptyArray = [];\nclass Animation {\n constructor() {\n this.changed = false;\n this.values = emptyArray;\n this.toValues = null;\n this.fromValues = emptyArray;\n this.to = void 0;\n this.from = void 0;\n this.config = new AnimationConfig();\n this.immediate = false;\n }\n\n}\n\nfunction scheduleProps(callId, {\n key,\n props,\n defaultProps,\n state,\n actions\n}) {\n return new Promise((resolve, reject) => {\n var _props$cancel;\n\n let delay;\n let timeout;\n let cancel = matchProp((_props$cancel = props.cancel) != null ? _props$cancel : defaultProps == null ? void 0 : defaultProps.cancel, key);\n\n if (cancel) {\n onStart();\n } else {\n if (!is.und(props.pause)) {\n state.paused = matchProp(props.pause, key);\n }\n\n let pause = defaultProps == null ? void 0 : defaultProps.pause;\n\n if (pause !== true) {\n pause = state.paused || matchProp(pause, key);\n }\n\n delay = callProp(props.delay || 0, key);\n\n if (pause) {\n state.resumeQueue.add(onResume);\n actions.pause();\n } else {\n actions.resume();\n onResume();\n }\n }\n\n function onPause() {\n state.resumeQueue.add(onResume);\n state.timeouts.delete(timeout);\n timeout.cancel();\n delay = timeout.time - raf.now();\n }\n\n function onResume() {\n if (delay > 0 && !Globals.skipAnimation) {\n state.delayed = true;\n timeout = raf.setTimeout(onStart, delay);\n state.pauseQueue.add(onPause);\n state.timeouts.add(timeout);\n } else {\n onStart();\n }\n }\n\n function onStart() {\n if (state.delayed) {\n state.delayed = false;\n }\n\n state.pauseQueue.delete(onPause);\n state.timeouts.delete(timeout);\n\n if (callId <= (state.cancelId || 0)) {\n cancel = true;\n }\n\n try {\n actions.start(_extends({}, props, {\n callId,\n cancel\n }), resolve);\n } catch (err) {\n reject(err);\n }\n }\n });\n}\n\nconst getCombinedResult = (target, results) => results.length == 1 ? results[0] : results.some(result => result.cancelled) ? getCancelledResult(target.get()) : results.every(result => result.noop) ? getNoopResult(target.get()) : getFinishedResult(target.get(), results.every(result => result.finished));\nconst getNoopResult = value => ({\n value,\n noop: true,\n finished: true,\n cancelled: false\n});\nconst getFinishedResult = (value, finished, cancelled = false) => ({\n value,\n finished,\n cancelled\n});\nconst getCancelledResult = value => ({\n value,\n cancelled: true,\n finished: false\n});\n\nfunction runAsync(to, props, state, target) {\n const {\n callId,\n parentId,\n onRest\n } = props;\n const {\n asyncTo: prevTo,\n promise: prevPromise\n } = state;\n\n if (!parentId && to === prevTo && !props.reset) {\n return prevPromise;\n }\n\n return state.promise = (async () => {\n state.asyncId = callId;\n state.asyncTo = to;\n const defaultProps = getDefaultProps(props, (value, key) => key === 'onRest' ? undefined : value);\n let preventBail;\n let bail;\n const bailPromise = new Promise((resolve, reject) => (preventBail = resolve, bail = reject));\n\n const bailIfEnded = bailSignal => {\n const bailResult = callId <= (state.cancelId || 0) && getCancelledResult(target) || callId !== state.asyncId && getFinishedResult(target, false);\n\n if (bailResult) {\n bailSignal.result = bailResult;\n bail(bailSignal);\n throw bailSignal;\n }\n };\n\n const animate = (arg1, arg2) => {\n const bailSignal = new BailSignal();\n const skipAnimationSignal = new SkipAniamtionSignal();\n return (async () => {\n if (Globals.skipAnimation) {\n stopAsync(state);\n skipAnimationSignal.result = getFinishedResult(target, false);\n bail(skipAnimationSignal);\n throw skipAnimationSignal;\n }\n\n bailIfEnded(bailSignal);\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n to: arg1\n });\n props.parentId = callId;\n eachProp(defaultProps, (value, key) => {\n if (is.und(props[key])) {\n props[key] = value;\n }\n });\n const result = await target.start(props);\n bailIfEnded(bailSignal);\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n return result;\n })();\n };\n\n let result;\n\n if (Globals.skipAnimation) {\n stopAsync(state);\n return getFinishedResult(target, false);\n }\n\n try {\n let animating;\n\n if (is.arr(to)) {\n animating = (async queue => {\n for (const props of queue) {\n await animate(props);\n }\n })(to);\n } else {\n animating = Promise.resolve(to(animate, target.stop.bind(target)));\n }\n\n await Promise.all([animating.then(preventBail), bailPromise]);\n result = getFinishedResult(target.get(), true, false);\n } catch (err) {\n if (err instanceof BailSignal) {\n result = err.result;\n } else if (err instanceof SkipAniamtionSignal) {\n result = err.result;\n } else {\n throw err;\n }\n } finally {\n if (callId == state.asyncId) {\n state.asyncId = parentId;\n state.asyncTo = parentId ? prevTo : undefined;\n state.promise = parentId ? prevPromise : undefined;\n }\n }\n\n if (is.fun(onRest)) {\n raf.batchedUpdates(() => {\n onRest(result, target, target.item);\n });\n }\n\n return result;\n })();\n}\nfunction stopAsync(state, cancelId) {\n flush(state.timeouts, t => t.cancel());\n state.pauseQueue.clear();\n state.resumeQueue.clear();\n state.asyncId = state.asyncTo = state.promise = undefined;\n if (cancelId) state.cancelId = cancelId;\n}\nclass BailSignal extends Error {\n constructor() {\n super('An async animation has been interrupted. You see this error because you ' + 'forgot to use `await` or `.catch(...)` on its returned promise.');\n this.result = void 0;\n }\n\n}\nclass SkipAniamtionSignal extends Error {\n constructor() {\n super('SkipAnimationSignal');\n this.result = void 0;\n }\n\n}\n\nconst isFrameValue = value => value instanceof FrameValue;\nlet nextId$1 = 1;\nclass FrameValue extends FluidValue {\n constructor(...args) {\n super(...args);\n this.id = nextId$1++;\n this.key = void 0;\n this._priority = 0;\n }\n\n get priority() {\n return this._priority;\n }\n\n set priority(priority) {\n if (this._priority != priority) {\n this._priority = priority;\n\n this._onPriorityChange(priority);\n }\n }\n\n get() {\n const node = getAnimated(this);\n return node && node.getValue();\n }\n\n to(...args) {\n return Globals.to(this, args);\n }\n\n interpolate(...args) {\n deprecateInterpolate();\n return Globals.to(this, args);\n }\n\n toJSON() {\n return this.get();\n }\n\n observerAdded(count) {\n if (count == 1) this._attach();\n }\n\n observerRemoved(count) {\n if (count == 0) this._detach();\n }\n\n _attach() {}\n\n _detach() {}\n\n _onChange(value, idle = false) {\n callFluidObservers(this, {\n type: 'change',\n parent: this,\n value,\n idle\n });\n }\n\n _onPriorityChange(priority) {\n if (!this.idle) {\n frameLoop.sort(this);\n }\n\n callFluidObservers(this, {\n type: 'priority',\n parent: this,\n priority\n });\n }\n\n}\n\nconst $P = Symbol.for('SpringPhase');\nconst HAS_ANIMATED = 1;\nconst IS_ANIMATING = 2;\nconst IS_PAUSED = 4;\nconst hasAnimated = target => (target[$P] & HAS_ANIMATED) > 0;\nconst isAnimating = target => (target[$P] & IS_ANIMATING) > 0;\nconst isPaused = target => (target[$P] & IS_PAUSED) > 0;\nconst setActiveBit = (target, active) => active ? target[$P] |= IS_ANIMATING | HAS_ANIMATED : target[$P] &= ~IS_ANIMATING;\nconst setPausedBit = (target, paused) => paused ? target[$P] |= IS_PAUSED : target[$P] &= ~IS_PAUSED;\n\nclass SpringValue extends FrameValue {\n constructor(arg1, arg2) {\n super();\n this.key = void 0;\n this.animation = new Animation();\n this.queue = void 0;\n this.defaultProps = {};\n this._state = {\n paused: false,\n delayed: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._pendingCalls = new Set();\n this._lastCallId = 0;\n this._lastToId = 0;\n this._memoizedDuration = 0;\n\n if (!is.und(arg1) || !is.und(arg2)) {\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n from: arg1\n });\n\n if (is.und(props.default)) {\n props.default = true;\n }\n\n this.start(props);\n }\n }\n\n get idle() {\n return !(isAnimating(this) || this._state.asyncTo) || isPaused(this);\n }\n\n get goal() {\n return getFluidValue(this.animation.to);\n }\n\n get velocity() {\n const node = getAnimated(this);\n return node instanceof AnimatedValue ? node.lastVelocity || 0 : node.getPayload().map(node => node.lastVelocity || 0);\n }\n\n get hasAnimated() {\n return hasAnimated(this);\n }\n\n get isAnimating() {\n return isAnimating(this);\n }\n\n get isPaused() {\n return isPaused(this);\n }\n\n get isDelayed() {\n return this._state.delayed;\n }\n\n advance(dt) {\n let idle = true;\n let changed = false;\n const anim = this.animation;\n let {\n config,\n toValues\n } = anim;\n const payload = getPayload(anim.to);\n\n if (!payload && hasFluidValue(anim.to)) {\n toValues = toArray(getFluidValue(anim.to));\n }\n\n anim.values.forEach((node, i) => {\n if (node.done) return;\n const to = node.constructor == AnimatedString ? 1 : payload ? payload[i].lastPosition : toValues[i];\n let finished = anim.immediate;\n let position = to;\n\n if (!finished) {\n position = node.lastPosition;\n\n if (config.tension <= 0) {\n node.done = true;\n return;\n }\n\n let elapsed = node.elapsedTime += dt;\n const from = anim.fromValues[i];\n const v0 = node.v0 != null ? node.v0 : node.v0 = is.arr(config.velocity) ? config.velocity[i] : config.velocity;\n let velocity;\n const precision = config.precision || (from == to ? 0.005 : Math.min(1, Math.abs(to - from) * 0.001));\n\n if (!is.und(config.duration)) {\n let p = 1;\n\n if (config.duration > 0) {\n if (this._memoizedDuration !== config.duration) {\n this._memoizedDuration = config.duration;\n\n if (node.durationProgress > 0) {\n node.elapsedTime = config.duration * node.durationProgress;\n elapsed = node.elapsedTime += dt;\n }\n }\n\n p = (config.progress || 0) + elapsed / this._memoizedDuration;\n p = p > 1 ? 1 : p < 0 ? 0 : p;\n node.durationProgress = p;\n }\n\n position = from + config.easing(p) * (to - from);\n velocity = (position - node.lastPosition) / dt;\n finished = p == 1;\n } else if (config.decay) {\n const decay = config.decay === true ? 0.998 : config.decay;\n const e = Math.exp(-(1 - decay) * elapsed);\n position = from + v0 / (1 - decay) * (1 - e);\n finished = Math.abs(node.lastPosition - position) <= precision;\n velocity = v0 * e;\n } else {\n velocity = node.lastVelocity == null ? v0 : node.lastVelocity;\n const restVelocity = config.restVelocity || precision / 10;\n const bounceFactor = config.clamp ? 0 : config.bounce;\n const canBounce = !is.und(bounceFactor);\n const isGrowing = from == to ? node.v0 > 0 : from < to;\n let isMoving;\n let isBouncing = false;\n const step = 1;\n const numSteps = Math.ceil(dt / step);\n\n for (let n = 0; n < numSteps; ++n) {\n isMoving = Math.abs(velocity) > restVelocity;\n\n if (!isMoving) {\n finished = Math.abs(to - position) <= precision;\n\n if (finished) {\n break;\n }\n }\n\n if (canBounce) {\n isBouncing = position == to || position > to == isGrowing;\n\n if (isBouncing) {\n velocity = -velocity * bounceFactor;\n position = to;\n }\n }\n\n const springForce = -config.tension * 0.000001 * (position - to);\n const dampingForce = -config.friction * 0.001 * velocity;\n const acceleration = (springForce + dampingForce) / config.mass;\n velocity = velocity + acceleration * step;\n position = position + velocity * step;\n }\n }\n\n node.lastVelocity = velocity;\n\n if (Number.isNaN(position)) {\n console.warn(`Got NaN while animating:`, this);\n finished = true;\n }\n }\n\n if (payload && !payload[i].done) {\n finished = false;\n }\n\n if (finished) {\n node.done = true;\n } else {\n idle = false;\n }\n\n if (node.setValue(position, config.round)) {\n changed = true;\n }\n });\n const node = getAnimated(this);\n const currVal = node.getValue();\n\n if (idle) {\n const finalVal = getFluidValue(anim.to);\n\n if ((currVal !== finalVal || changed) && !config.decay) {\n node.setValue(finalVal);\n\n this._onChange(finalVal);\n } else if (changed && config.decay) {\n this._onChange(currVal);\n }\n\n this._stop();\n } else if (changed) {\n this._onChange(currVal);\n }\n }\n\n set(value) {\n raf.batchedUpdates(() => {\n this._stop();\n\n this._focus(value);\n\n this._set(value);\n });\n return this;\n }\n\n pause() {\n this._update({\n pause: true\n });\n }\n\n resume() {\n this._update({\n pause: false\n });\n }\n\n finish() {\n if (isAnimating(this)) {\n const {\n to,\n config\n } = this.animation;\n raf.batchedUpdates(() => {\n this._onStart();\n\n if (!config.decay) {\n this._set(to, false);\n }\n\n this._stop();\n });\n }\n\n return this;\n }\n\n update(props) {\n const queue = this.queue || (this.queue = []);\n queue.push(props);\n return this;\n }\n\n start(to, arg2) {\n let queue;\n\n if (!is.und(to)) {\n queue = [is.obj(to) ? to : _extends({}, arg2, {\n to\n })];\n } else {\n queue = this.queue || [];\n this.queue = [];\n }\n\n return Promise.all(queue.map(props => {\n const up = this._update(props);\n\n return up;\n })).then(results => getCombinedResult(this, results));\n }\n\n stop(cancel) {\n const {\n to\n } = this.animation;\n\n this._focus(this.get());\n\n stopAsync(this._state, cancel && this._lastCallId);\n raf.batchedUpdates(() => this._stop(to, cancel));\n return this;\n }\n\n reset() {\n this._update({\n reset: true\n });\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._start();\n } else if (event.type == 'priority') {\n this.priority = event.priority + 1;\n }\n }\n\n _prepareNode(props) {\n const key = this.key || '';\n let {\n to,\n from\n } = props;\n to = is.obj(to) ? to[key] : to;\n\n if (to == null || isAsyncTo(to)) {\n to = undefined;\n }\n\n from = is.obj(from) ? from[key] : from;\n\n if (from == null) {\n from = undefined;\n }\n\n const range = {\n to,\n from\n };\n\n if (!hasAnimated(this)) {\n if (props.reverse) [to, from] = [from, to];\n from = getFluidValue(from);\n\n if (!is.und(from)) {\n this._set(from);\n } else if (!getAnimated(this)) {\n this._set(to);\n }\n }\n\n return range;\n }\n\n _update(_ref, isLoop) {\n let props = _extends({}, _ref);\n\n const {\n key,\n defaultProps\n } = this;\n if (props.default) Object.assign(defaultProps, getDefaultProps(props, (value, prop) => /^on/.test(prop) ? resolveProp(value, key) : value));\n mergeActiveFn(this, props, 'onProps');\n sendEvent(this, 'onProps', props, this);\n\n const range = this._prepareNode(props);\n\n if (Object.isFrozen(this)) {\n throw Error('Cannot animate a `SpringValue` object that is frozen. ' + 'Did you forget to pass your component to `animated(...)` before animating its props?');\n }\n\n const state = this._state;\n return scheduleProps(++this._lastCallId, {\n key,\n props,\n defaultProps,\n state,\n actions: {\n pause: () => {\n if (!isPaused(this)) {\n setPausedBit(this, true);\n flushCalls(state.pauseQueue);\n sendEvent(this, 'onPause', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n resume: () => {\n if (isPaused(this)) {\n setPausedBit(this, false);\n\n if (isAnimating(this)) {\n this._resume();\n }\n\n flushCalls(state.resumeQueue);\n sendEvent(this, 'onResume', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n start: this._merge.bind(this, range)\n }\n }).then(result => {\n if (props.loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props);\n\n if (nextProps) {\n return this._update(nextProps, true);\n }\n }\n\n return result;\n });\n }\n\n _merge(range, props, resolve) {\n if (props.cancel) {\n this.stop(true);\n return resolve(getCancelledResult(this));\n }\n\n const hasToProp = !is.und(range.to);\n const hasFromProp = !is.und(range.from);\n\n if (hasToProp || hasFromProp) {\n if (props.callId > this._lastToId) {\n this._lastToId = props.callId;\n } else {\n return resolve(getCancelledResult(this));\n }\n }\n\n const {\n key,\n defaultProps,\n animation: anim\n } = this;\n const {\n to: prevTo,\n from: prevFrom\n } = anim;\n let {\n to = prevTo,\n from = prevFrom\n } = range;\n\n if (hasFromProp && !hasToProp && (!props.default || is.und(to))) {\n to = from;\n }\n\n if (props.reverse) [to, from] = [from, to];\n const hasFromChanged = !isEqual(from, prevFrom);\n\n if (hasFromChanged) {\n anim.from = from;\n }\n\n from = getFluidValue(from);\n const hasToChanged = !isEqual(to, prevTo);\n\n if (hasToChanged) {\n this._focus(to);\n }\n\n const hasAsyncTo = isAsyncTo(props.to);\n const {\n config\n } = anim;\n const {\n decay,\n velocity\n } = config;\n\n if (hasToProp || hasFromProp) {\n config.velocity = 0;\n }\n\n if (props.config && !hasAsyncTo) {\n mergeConfig(config, callProp(props.config, key), props.config !== defaultProps.config ? callProp(defaultProps.config, key) : void 0);\n }\n\n let node = getAnimated(this);\n\n if (!node || is.und(to)) {\n return resolve(getFinishedResult(this, true));\n }\n\n const reset = is.und(props.reset) ? hasFromProp && !props.default : !is.und(from) && matchProp(props.reset, key);\n const value = reset ? from : this.get();\n const goal = computeGoal(to);\n const isAnimatable = is.num(goal) || is.arr(goal) || isAnimatedString(goal);\n const immediate = !hasAsyncTo && (!isAnimatable || matchProp(defaultProps.immediate || props.immediate, key));\n\n if (hasToChanged) {\n const nodeType = getAnimatedType(to);\n\n if (nodeType !== node.constructor) {\n if (immediate) {\n node = this._set(goal);\n } else throw Error(`Cannot animate between ${node.constructor.name} and ${nodeType.name}, as the \"to\" prop suggests`);\n }\n }\n\n const goalType = node.constructor;\n let started = hasFluidValue(to);\n let finished = false;\n\n if (!started) {\n const hasValueChanged = reset || !hasAnimated(this) && hasFromChanged;\n\n if (hasToChanged || hasValueChanged) {\n finished = isEqual(computeGoal(value), goal);\n started = !finished;\n }\n\n if (!isEqual(anim.immediate, immediate) && !immediate || !isEqual(config.decay, decay) || !isEqual(config.velocity, velocity)) {\n started = true;\n }\n }\n\n if (finished && isAnimating(this)) {\n if (anim.changed && !reset) {\n started = true;\n } else if (!started) {\n this._stop(prevTo);\n }\n }\n\n if (!hasAsyncTo) {\n if (started || hasFluidValue(prevTo)) {\n anim.values = node.getPayload();\n anim.toValues = hasFluidValue(to) ? null : goalType == AnimatedString ? [1] : toArray(goal);\n }\n\n if (anim.immediate != immediate) {\n anim.immediate = immediate;\n\n if (!immediate && !reset) {\n this._set(prevTo);\n }\n }\n\n if (started) {\n const {\n onRest\n } = anim;\n each(ACTIVE_EVENTS, type => mergeActiveFn(this, props, type));\n const result = getFinishedResult(this, checkFinished(this, prevTo));\n flushCalls(this._pendingCalls, result);\n\n this._pendingCalls.add(resolve);\n\n if (anim.changed) raf.batchedUpdates(() => {\n anim.changed = !reset;\n onRest == null ? void 0 : onRest(result, this);\n\n if (reset) {\n callProp(defaultProps.onRest, result);\n } else {\n anim.onStart == null ? void 0 : anim.onStart(result, this);\n }\n });\n }\n }\n\n if (reset) {\n this._set(value);\n }\n\n if (hasAsyncTo) {\n resolve(runAsync(props.to, props, this._state, this));\n } else if (started) {\n this._start();\n } else if (isAnimating(this) && !hasToChanged) {\n this._pendingCalls.add(resolve);\n } else {\n resolve(getNoopResult(value));\n }\n }\n\n _focus(value) {\n const anim = this.animation;\n\n if (value !== anim.to) {\n if (getFluidObservers(this)) {\n this._detach();\n }\n\n anim.to = value;\n\n if (getFluidObservers(this)) {\n this._attach();\n }\n }\n }\n\n _attach() {\n let priority = 0;\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n addFluidObserver(to, this);\n\n if (isFrameValue(to)) {\n priority = to.priority + 1;\n }\n }\n\n this.priority = priority;\n }\n\n _detach() {\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n removeFluidObserver(to, this);\n }\n }\n\n _set(arg, idle = true) {\n const value = getFluidValue(arg);\n\n if (!is.und(value)) {\n const oldNode = getAnimated(this);\n\n if (!oldNode || !isEqual(value, oldNode.getValue())) {\n const nodeType = getAnimatedType(value);\n\n if (!oldNode || oldNode.constructor != nodeType) {\n setAnimated(this, nodeType.create(value));\n } else {\n oldNode.setValue(value);\n }\n\n if (oldNode) {\n raf.batchedUpdates(() => {\n this._onChange(value, idle);\n });\n }\n }\n }\n\n return getAnimated(this);\n }\n\n _onStart() {\n const anim = this.animation;\n\n if (!anim.changed) {\n anim.changed = true;\n sendEvent(this, 'onStart', getFinishedResult(this, checkFinished(this, anim.to)), this);\n }\n }\n\n _onChange(value, idle) {\n if (!idle) {\n this._onStart();\n\n callProp(this.animation.onChange, value, this);\n }\n\n callProp(this.defaultProps.onChange, value, this);\n\n super._onChange(value, idle);\n }\n\n _start() {\n const anim = this.animation;\n getAnimated(this).reset(getFluidValue(anim.to));\n\n if (!anim.immediate) {\n anim.fromValues = anim.values.map(node => node.lastPosition);\n }\n\n if (!isAnimating(this)) {\n setActiveBit(this, true);\n\n if (!isPaused(this)) {\n this._resume();\n }\n }\n }\n\n _resume() {\n if (Globals.skipAnimation) {\n this.finish();\n } else {\n frameLoop.start(this);\n }\n }\n\n _stop(goal, cancel) {\n if (isAnimating(this)) {\n setActiveBit(this, false);\n const anim = this.animation;\n each(anim.values, node => {\n node.done = true;\n });\n\n if (anim.toValues) {\n anim.onChange = anim.onPause = anim.onResume = undefined;\n }\n\n callFluidObservers(this, {\n type: 'idle',\n parent: this\n });\n const result = cancel ? getCancelledResult(this.get()) : getFinishedResult(this.get(), checkFinished(this, goal != null ? goal : anim.to));\n flushCalls(this._pendingCalls, result);\n\n if (anim.changed) {\n anim.changed = false;\n sendEvent(this, 'onRest', result, this);\n }\n }\n }\n\n}\n\nfunction checkFinished(target, to) {\n const goal = computeGoal(to);\n const value = computeGoal(target.get());\n return isEqual(value, goal);\n}\n\nfunction createLoopUpdate(props, loop = props.loop, to = props.to) {\n let loopRet = callProp(loop);\n\n if (loopRet) {\n const overrides = loopRet !== true && inferTo(loopRet);\n const reverse = (overrides || props).reverse;\n const reset = !overrides || overrides.reset;\n return createUpdate(_extends({}, props, {\n loop,\n default: false,\n pause: undefined,\n to: !reverse || isAsyncTo(to) ? to : undefined,\n from: reset ? props.from : undefined,\n reset\n }, overrides));\n }\n}\nfunction createUpdate(props) {\n const {\n to,\n from\n } = props = inferTo(props);\n const keys = new Set();\n if (is.obj(to)) findDefined(to, keys);\n if (is.obj(from)) findDefined(from, keys);\n props.keys = keys.size ? Array.from(keys) : null;\n return props;\n}\nfunction declareUpdate(props) {\n const update = createUpdate(props);\n\n if (is.und(update.default)) {\n update.default = getDefaultProps(update);\n }\n\n return update;\n}\n\nfunction findDefined(values, keys) {\n eachProp(values, (value, key) => value != null && keys.add(key));\n}\n\nconst ACTIVE_EVENTS = ['onStart', 'onRest', 'onChange', 'onPause', 'onResume'];\n\nfunction mergeActiveFn(target, props, type) {\n target.animation[type] = props[type] !== getDefaultProp(props, type) ? resolveProp(props[type], target.key) : undefined;\n}\n\nfunction sendEvent(target, type, ...args) {\n var _target$animation$typ, _target$animation, _target$defaultProps$, _target$defaultProps;\n\n (_target$animation$typ = (_target$animation = target.animation)[type]) == null ? void 0 : _target$animation$typ.call(_target$animation, ...args);\n (_target$defaultProps$ = (_target$defaultProps = target.defaultProps)[type]) == null ? void 0 : _target$defaultProps$.call(_target$defaultProps, ...args);\n}\n\nconst BATCHED_EVENTS = ['onStart', 'onChange', 'onRest'];\nlet nextId = 1;\nclass Controller {\n constructor(props, flush) {\n this.id = nextId++;\n this.springs = {};\n this.queue = [];\n this.ref = void 0;\n this._flush = void 0;\n this._initialProps = void 0;\n this._lastAsyncId = 0;\n this._active = new Set();\n this._changed = new Set();\n this._started = false;\n this._item = void 0;\n this._state = {\n paused: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._events = {\n onStart: new Map(),\n onChange: new Map(),\n onRest: new Map()\n };\n this._onFrame = this._onFrame.bind(this);\n\n if (flush) {\n this._flush = flush;\n }\n\n if (props) {\n this.start(_extends({\n default: true\n }, props));\n }\n }\n\n get idle() {\n return !this._state.asyncTo && Object.values(this.springs).every(spring => {\n return spring.idle && !spring.isDelayed && !spring.isPaused;\n });\n }\n\n get item() {\n return this._item;\n }\n\n set item(item) {\n this._item = item;\n }\n\n get() {\n const values = {};\n this.each((spring, key) => values[key] = spring.get());\n return values;\n }\n\n set(values) {\n for (const key in values) {\n const value = values[key];\n\n if (!is.und(value)) {\n this.springs[key].set(value);\n }\n }\n }\n\n update(props) {\n if (props) {\n this.queue.push(createUpdate(props));\n }\n\n return this;\n }\n\n start(props) {\n let {\n queue\n } = this;\n\n if (props) {\n queue = toArray(props).map(createUpdate);\n } else {\n this.queue = [];\n }\n\n if (this._flush) {\n return this._flush(this, queue);\n }\n\n prepareKeys(this, queue);\n return flushUpdateQueue(this, queue);\n }\n\n stop(arg, keys) {\n if (arg !== !!arg) {\n keys = arg;\n }\n\n if (keys) {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].stop(!!arg));\n } else {\n stopAsync(this._state, this._lastAsyncId);\n this.each(spring => spring.stop(!!arg));\n }\n\n return this;\n }\n\n pause(keys) {\n if (is.und(keys)) {\n this.start({\n pause: true\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].pause());\n }\n\n return this;\n }\n\n resume(keys) {\n if (is.und(keys)) {\n this.start({\n pause: false\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].resume());\n }\n\n return this;\n }\n\n each(iterator) {\n eachProp(this.springs, iterator);\n }\n\n _onFrame() {\n const {\n onStart,\n onChange,\n onRest\n } = this._events;\n const active = this._active.size > 0;\n const changed = this._changed.size > 0;\n\n if (active && !this._started || changed && !this._started) {\n this._started = true;\n flush(onStart, ([onStart, result]) => {\n result.value = this.get();\n onStart(result, this, this._item);\n });\n }\n\n const idle = !active && this._started;\n const values = changed || idle && onRest.size ? this.get() : null;\n\n if (changed && onChange.size) {\n flush(onChange, ([onChange, result]) => {\n result.value = values;\n onChange(result, this, this._item);\n });\n }\n\n if (idle) {\n this._started = false;\n flush(onRest, ([onRest, result]) => {\n result.value = values;\n onRest(result, this, this._item);\n });\n }\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._changed.add(event.parent);\n\n if (!event.idle) {\n this._active.add(event.parent);\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else return;\n\n raf.onFrame(this._onFrame);\n }\n\n}\nfunction flushUpdateQueue(ctrl, queue) {\n return Promise.all(queue.map(props => flushUpdate(ctrl, props))).then(results => getCombinedResult(ctrl, results));\n}\nasync function flushUpdate(ctrl, props, isLoop) {\n const {\n keys,\n to,\n from,\n loop,\n onRest,\n onResolve\n } = props;\n const defaults = is.obj(props.default) && props.default;\n\n if (loop) {\n props.loop = false;\n }\n\n if (to === false) props.to = null;\n if (from === false) props.from = null;\n const asyncTo = is.arr(to) || is.fun(to) ? to : undefined;\n\n if (asyncTo) {\n props.to = undefined;\n props.onRest = undefined;\n\n if (defaults) {\n defaults.onRest = undefined;\n }\n } else {\n each(BATCHED_EVENTS, key => {\n const handler = props[key];\n\n if (is.fun(handler)) {\n const queue = ctrl['_events'][key];\n\n props[key] = ({\n finished,\n cancelled\n }) => {\n const result = queue.get(handler);\n\n if (result) {\n if (!finished) result.finished = false;\n if (cancelled) result.cancelled = true;\n } else {\n queue.set(handler, {\n value: null,\n finished: finished || false,\n cancelled: cancelled || false\n });\n }\n };\n\n if (defaults) {\n defaults[key] = props[key];\n }\n }\n });\n }\n\n const state = ctrl['_state'];\n\n if (props.pause === !state.paused) {\n state.paused = props.pause;\n flushCalls(props.pause ? state.pauseQueue : state.resumeQueue);\n } else if (state.paused) {\n props.pause = true;\n }\n\n const promises = (keys || Object.keys(ctrl.springs)).map(key => ctrl.springs[key].start(props));\n const cancel = props.cancel === true || getDefaultProp(props, 'cancel') === true;\n\n if (asyncTo || cancel && state.asyncId) {\n promises.push(scheduleProps(++ctrl['_lastAsyncId'], {\n props,\n state,\n actions: {\n pause: noop,\n resume: noop,\n\n start(props, resolve) {\n if (cancel) {\n stopAsync(state, ctrl['_lastAsyncId']);\n resolve(getCancelledResult(ctrl));\n } else {\n props.onRest = onRest;\n resolve(runAsync(asyncTo, props, state, ctrl));\n }\n }\n\n }\n }));\n }\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n const result = getCombinedResult(ctrl, await Promise.all(promises));\n\n if (loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props, loop, to);\n\n if (nextProps) {\n prepareKeys(ctrl, [nextProps]);\n return flushUpdate(ctrl, nextProps, true);\n }\n }\n\n if (onResolve) {\n raf.batchedUpdates(() => onResolve(result, ctrl, ctrl.item));\n }\n\n return result;\n}\nfunction getSprings(ctrl, props) {\n const springs = _extends({}, ctrl.springs);\n\n if (props) {\n each(toArray(props), props => {\n if (is.und(props.keys)) {\n props = createUpdate(props);\n }\n\n if (!is.obj(props.to)) {\n props = _extends({}, props, {\n to: undefined\n });\n }\n\n prepareSprings(springs, props, key => {\n return createSpring(key);\n });\n });\n }\n\n setSprings(ctrl, springs);\n return springs;\n}\nfunction setSprings(ctrl, springs) {\n eachProp(springs, (spring, key) => {\n if (!ctrl.springs[key]) {\n ctrl.springs[key] = spring;\n addFluidObserver(spring, ctrl);\n }\n });\n}\n\nfunction createSpring(key, observer) {\n const spring = new SpringValue();\n spring.key = key;\n\n if (observer) {\n addFluidObserver(spring, observer);\n }\n\n return spring;\n}\n\nfunction prepareSprings(springs, props, create) {\n if (props.keys) {\n each(props.keys, key => {\n const spring = springs[key] || (springs[key] = create(key));\n spring['_prepareNode'](props);\n });\n }\n}\n\nfunction prepareKeys(ctrl, queue) {\n each(queue, props => {\n prepareSprings(ctrl.springs, props, key => {\n return createSpring(key, ctrl);\n });\n });\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded$3 = [\"children\"];\nconst SpringContext = _ref => {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$3);\n\n const inherited = useContext(ctx);\n const pause = props.pause || !!inherited.pause,\n immediate = props.immediate || !!inherited.immediate;\n props = useMemoOne(() => ({\n pause,\n immediate\n }), [pause, immediate]);\n const {\n Provider\n } = ctx;\n return React.createElement(Provider, {\n value: props\n }, children);\n};\nconst ctx = makeContext(SpringContext, {});\nSpringContext.Provider = ctx.Provider;\nSpringContext.Consumer = ctx.Consumer;\n\nfunction makeContext(target, init) {\n Object.assign(target, React.createContext(init));\n target.Provider._context = target;\n target.Consumer._context = target;\n return target;\n}\n\nconst SpringRef = () => {\n const current = [];\n\n const SpringRef = function SpringRef(props) {\n deprecateDirectCall();\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = _getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.current = current;\n\n SpringRef.add = function (ctrl) {\n if (!current.includes(ctrl)) {\n current.push(ctrl);\n }\n };\n\n SpringRef.delete = function (ctrl) {\n const i = current.indexOf(ctrl);\n if (~i) current.splice(i, 1);\n };\n\n SpringRef.pause = function () {\n each(current, ctrl => ctrl.pause(...arguments));\n return this;\n };\n\n SpringRef.resume = function () {\n each(current, ctrl => ctrl.resume(...arguments));\n return this;\n };\n\n SpringRef.set = function (values) {\n each(current, ctrl => ctrl.set(values));\n };\n\n SpringRef.start = function (props) {\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = this._getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.stop = function () {\n each(current, ctrl => ctrl.stop(...arguments));\n return this;\n };\n\n SpringRef.update = function (props) {\n each(current, (ctrl, i) => ctrl.update(this._getProps(props, ctrl, i)));\n return this;\n };\n\n const _getProps = function _getProps(arg, ctrl, index) {\n return is.fun(arg) ? arg(index, ctrl) : arg;\n };\n\n SpringRef._getProps = _getProps;\n return SpringRef;\n};\n\nfunction useSprings(length, props, deps) {\n const propsFn = is.fun(props) && props;\n if (propsFn && !deps) deps = [];\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const layoutId = useRef(0);\n const forceUpdate = useForceUpdate();\n const state = useMemo(() => ({\n ctrls: [],\n queue: [],\n\n flush(ctrl, updates) {\n const springs = getSprings(ctrl, updates);\n const canFlushSync = layoutId.current > 0 && !state.queue.length && !Object.keys(springs).some(key => !ctrl.springs[key]);\n return canFlushSync ? flushUpdateQueue(ctrl, updates) : new Promise(resolve => {\n setSprings(ctrl, springs);\n state.queue.push(() => {\n resolve(flushUpdateQueue(ctrl, updates));\n });\n forceUpdate();\n });\n }\n\n }), []);\n const ctrls = useRef([...state.ctrls]);\n const updates = [];\n const prevLength = usePrev(length) || 0;\n useMemo(() => {\n each(ctrls.current.slice(length, prevLength), ctrl => {\n detachRefs(ctrl, ref);\n ctrl.stop(true);\n });\n ctrls.current.length = length;\n declareUpdates(prevLength, length);\n }, [length]);\n useMemo(() => {\n declareUpdates(0, Math.min(prevLength, length));\n }, deps);\n\n function declareUpdates(startIndex, endIndex) {\n for (let i = startIndex; i < endIndex; i++) {\n const ctrl = ctrls.current[i] || (ctrls.current[i] = new Controller(null, state.flush));\n const update = propsFn ? propsFn(i, ctrl) : props[i];\n\n if (update) {\n updates[i] = declareUpdate(update);\n }\n }\n }\n\n const springs = ctrls.current.map((ctrl, i) => getSprings(ctrl, updates[i]));\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useIsomorphicLayoutEffect(() => {\n layoutId.current++;\n state.ctrls = ctrls.current;\n const {\n queue\n } = state;\n\n if (queue.length) {\n state.queue = [];\n each(queue, cb => cb());\n }\n\n each(ctrls.current, (ctrl, i) => {\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext) {\n ctrl.start({\n default: context\n });\n }\n\n const update = updates[i];\n\n if (update) {\n replaceRef(ctrl, update.ref);\n\n if (ctrl.ref) {\n ctrl.queue.push(update);\n } else {\n ctrl.start(update);\n }\n }\n });\n });\n useOnce(() => () => {\n each(state.ctrls, ctrl => ctrl.stop(true));\n });\n const values = springs.map(x => _extends({}, x));\n return ref ? [values, ref] : values;\n}\n\nfunction useSpring(props, deps) {\n const isFn = is.fun(props);\n const [[values], ref] = useSprings(1, isFn ? props : [props], isFn ? deps || [] : deps);\n return isFn || arguments.length == 2 ? [values, ref] : values;\n}\n\nconst initSpringRef = () => SpringRef();\n\nconst useSpringRef = () => useState(initSpringRef)[0];\n\nfunction useTrail(length, propsArg, deps) {\n var _passedRef;\n\n const propsFn = is.fun(propsArg) && propsArg;\n if (propsFn && !deps) deps = [];\n let reverse = true;\n let passedRef = undefined;\n const result = useSprings(length, (i, ctrl) => {\n const props = propsFn ? propsFn(i, ctrl) : propsArg;\n passedRef = props.ref;\n reverse = reverse && props.reverse;\n return props;\n }, deps || [{}]);\n const ref = (_passedRef = passedRef) != null ? _passedRef : result[1];\n useIsomorphicLayoutEffect(() => {\n each(ref.current, (ctrl, i) => {\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n ctrl.start({\n to: parent.springs\n });\n } else {\n ctrl.start();\n }\n });\n }, deps);\n\n if (propsFn || arguments.length == 3) {\n ref['_getProps'] = (propsArg, ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n\n if (props) {\n const parent = ref.current[i + (props.reverse ? 1 : -1)];\n if (parent) props.to = parent.springs;\n return props;\n }\n };\n\n return result;\n }\n\n ref['start'] = propsArg => {\n const results = [];\n each(ref.current, (ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n results.push(ctrl.start(_extends({}, props, {\n to: parent.springs\n })));\n } else {\n results.push(ctrl.start(_extends({}, props)));\n }\n });\n return results;\n };\n\n return result[0];\n}\n\nlet TransitionPhase;\n\n(function (TransitionPhase) {\n TransitionPhase[\"MOUNT\"] = \"mount\";\n TransitionPhase[\"ENTER\"] = \"enter\";\n TransitionPhase[\"UPDATE\"] = \"update\";\n TransitionPhase[\"LEAVE\"] = \"leave\";\n})(TransitionPhase || (TransitionPhase = {}));\n\nfunction useTransition(data, props, deps) {\n const propsFn = is.fun(props) && props;\n const {\n reset,\n sort,\n trail = 0,\n expires = true,\n exitBeforeEnter = false,\n onDestroyed,\n ref: propsRef,\n config: propsConfig\n } = propsFn ? propsFn() : props;\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const items = toArray(data);\n const transitions = [];\n const usedTransitions = useRef(null);\n const prevTransitions = reset ? null : usedTransitions.current;\n useIsomorphicLayoutEffect(() => {\n usedTransitions.current = transitions;\n });\n useOnce(() => {\n each(transitions, t => {\n ref == null ? void 0 : ref.add(t.ctrl);\n t.ctrl.ref = ref;\n });\n return () => {\n each(usedTransitions.current, t => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n }\n\n detachRefs(t.ctrl, ref);\n t.ctrl.stop(true);\n });\n };\n });\n const keys = getKeys(items, propsFn ? propsFn() : props, prevTransitions);\n const expired = reset && usedTransitions.current || [];\n useIsomorphicLayoutEffect(() => each(expired, ({\n ctrl,\n item,\n key\n }) => {\n detachRefs(ctrl, ref);\n callProp(onDestroyed, item, key);\n }));\n const reused = [];\n if (prevTransitions) each(prevTransitions, (t, i) => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n expired.push(t);\n } else {\n i = reused[i] = keys.indexOf(t.key);\n if (~i) transitions[i] = t;\n }\n });\n each(items, (item, i) => {\n if (!transitions[i]) {\n transitions[i] = {\n key: keys[i],\n item,\n phase: TransitionPhase.MOUNT,\n ctrl: new Controller()\n };\n transitions[i].ctrl.item = item;\n }\n });\n\n if (reused.length) {\n let i = -1;\n const {\n leave\n } = propsFn ? propsFn() : props;\n each(reused, (keyIndex, prevIndex) => {\n const t = prevTransitions[prevIndex];\n\n if (~keyIndex) {\n i = transitions.indexOf(t);\n transitions[i] = _extends({}, t, {\n item: items[keyIndex]\n });\n } else if (leave) {\n transitions.splice(++i, 0, t);\n }\n });\n }\n\n if (is.fun(sort)) {\n transitions.sort((a, b) => sort(a.item, b.item));\n }\n\n let delay = -trail;\n const forceUpdate = useForceUpdate();\n const defaultProps = getDefaultProps(props);\n const changes = new Map();\n const exitingTransitions = useRef(new Map());\n const forceChange = useRef(false);\n each(transitions, (t, i) => {\n const key = t.key;\n const prevPhase = t.phase;\n const p = propsFn ? propsFn() : props;\n let to;\n let phase;\n let propsDelay = callProp(p.delay || 0, key);\n\n if (prevPhase == TransitionPhase.MOUNT) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else {\n const isLeave = keys.indexOf(key) < 0;\n\n if (prevPhase != TransitionPhase.LEAVE) {\n if (isLeave) {\n to = p.leave;\n phase = TransitionPhase.LEAVE;\n } else if (to = p.update) {\n phase = TransitionPhase.UPDATE;\n } else return;\n } else if (!isLeave) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else return;\n }\n\n to = callProp(to, t.item, i);\n to = is.obj(to) ? inferTo(to) : {\n to\n };\n\n if (!to.config) {\n const config = propsConfig || defaultProps.config;\n to.config = callProp(config, t.item, i, phase);\n }\n\n delay += trail;\n\n const payload = _extends({}, defaultProps, {\n delay: propsDelay + delay,\n ref: propsRef,\n immediate: p.immediate,\n reset: false\n }, to);\n\n if (phase == TransitionPhase.ENTER && is.und(payload.from)) {\n const _p = propsFn ? propsFn() : props;\n\n const from = is.und(_p.initial) || prevTransitions ? _p.from : _p.initial;\n payload.from = callProp(from, t.item, i);\n }\n\n const {\n onResolve\n } = payload;\n\n payload.onResolve = result => {\n callProp(onResolve, result);\n const transitions = usedTransitions.current;\n const t = transitions.find(t => t.key === key);\n if (!t) return;\n\n if (result.cancelled && t.phase != TransitionPhase.UPDATE) {\n return;\n }\n\n if (t.ctrl.idle) {\n const idle = transitions.every(t => t.ctrl.idle);\n\n if (t.phase == TransitionPhase.LEAVE) {\n const expiry = callProp(expires, t.item);\n\n if (expiry !== false) {\n const expiryMs = expiry === true ? 0 : expiry;\n t.expired = true;\n\n if (!idle && expiryMs > 0) {\n if (expiryMs <= 0x7fffffff) t.expirationId = setTimeout(forceUpdate, expiryMs);\n return;\n }\n }\n }\n\n if (idle && transitions.some(t => t.expired)) {\n exitingTransitions.current.delete(t);\n\n if (exitBeforeEnter) {\n forceChange.current = true;\n }\n\n forceUpdate();\n }\n }\n };\n\n const springs = getSprings(t.ctrl, payload);\n\n if (phase === TransitionPhase.LEAVE && exitBeforeEnter) {\n exitingTransitions.current.set(t, {\n phase,\n springs,\n payload\n });\n } else {\n changes.set(t, {\n phase,\n springs,\n payload\n });\n }\n });\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useIsomorphicLayoutEffect(() => {\n if (hasContext) {\n each(transitions, t => {\n t.ctrl.start({\n default: context\n });\n });\n }\n }, [context]);\n each(changes, (_, t) => {\n if (exitingTransitions.current.size) {\n const ind = transitions.findIndex(state => state.key === t.key);\n transitions.splice(ind, 1);\n }\n });\n useIsomorphicLayoutEffect(() => {\n each(exitingTransitions.current.size ? exitingTransitions.current : changes, ({\n phase,\n payload\n }, t) => {\n const {\n ctrl\n } = t;\n t.phase = phase;\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext && phase == TransitionPhase.ENTER) {\n ctrl.start({\n default: context\n });\n }\n\n if (payload) {\n replaceRef(ctrl, payload.ref);\n\n if ((ctrl.ref || ref) && !forceChange.current) {\n ctrl.update(payload);\n } else {\n ctrl.start(payload);\n\n if (forceChange.current) {\n forceChange.current = false;\n }\n }\n }\n });\n }, reset ? void 0 : deps);\n\n const renderTransitions = render => React.createElement(React.Fragment, null, transitions.map((t, i) => {\n const {\n springs\n } = changes.get(t) || t.ctrl;\n const elem = render(_extends({}, springs), t.item, t, i);\n return elem && elem.type ? React.createElement(elem.type, _extends({}, elem.props, {\n key: is.str(t.key) || is.num(t.key) ? t.key : t.ctrl.id,\n ref: elem.ref\n })) : elem;\n }));\n\n return ref ? [renderTransitions, ref] : renderTransitions;\n}\nlet nextKey = 1;\n\nfunction getKeys(items, {\n key,\n keys = key\n}, prevTransitions) {\n if (keys === null) {\n const reused = new Set();\n return items.map(item => {\n const t = prevTransitions && prevTransitions.find(t => t.item === item && t.phase !== TransitionPhase.LEAVE && !reused.has(t));\n\n if (t) {\n reused.add(t);\n return t.key;\n }\n\n return nextKey++;\n });\n }\n\n return is.und(keys) ? items : is.fun(keys) ? items.map(keys) : toArray(keys);\n}\n\nconst _excluded$2 = [\"children\"];\nfunction Spring(_ref) {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n return children(useSpring(props));\n}\n\nconst _excluded$1 = [\"items\", \"children\"];\nfunction Trail(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const trails = useTrail(items.length, props);\n return items.map((item, index) => {\n const result = children(item, index);\n return is.fun(result) ? result(trails[index]) : result;\n });\n}\n\nconst _excluded = [\"items\", \"children\"];\nfunction Transition(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return useTransition(items, props)(children);\n}\n\nclass Interpolation extends FrameValue {\n constructor(source, args) {\n super();\n this.key = void 0;\n this.idle = true;\n this.calc = void 0;\n this._active = new Set();\n this.source = source;\n this.calc = createInterpolator(...args);\n\n const value = this._get();\n\n const nodeType = getAnimatedType(value);\n setAnimated(this, nodeType.create(value));\n }\n\n advance(_dt) {\n const value = this._get();\n\n const oldValue = this.get();\n\n if (!isEqual(value, oldValue)) {\n getAnimated(this).setValue(value);\n\n this._onChange(value, this.idle);\n }\n\n if (!this.idle && checkIdle(this._active)) {\n becomeIdle(this);\n }\n }\n\n _get() {\n const inputs = is.arr(this.source) ? this.source.map(getFluidValue) : toArray(getFluidValue(this.source));\n return this.calc(...inputs);\n }\n\n _start() {\n if (this.idle && !checkIdle(this._active)) {\n this.idle = false;\n each(getPayload(this), node => {\n node.done = false;\n });\n\n if (Globals.skipAnimation) {\n raf.batchedUpdates(() => this.advance());\n becomeIdle(this);\n } else {\n frameLoop.start(this);\n }\n }\n }\n\n _attach() {\n let priority = 1;\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n addFluidObserver(source, this);\n }\n\n if (isFrameValue(source)) {\n if (!source.idle) {\n this._active.add(source);\n }\n\n priority = Math.max(priority, source.priority + 1);\n }\n });\n this.priority = priority;\n\n this._start();\n }\n\n _detach() {\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n removeFluidObserver(source, this);\n }\n });\n\n this._active.clear();\n\n becomeIdle(this);\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n if (event.idle) {\n this.advance();\n } else {\n this._active.add(event.parent);\n\n this._start();\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else if (event.type == 'priority') {\n this.priority = toArray(this.source).reduce((highest, parent) => Math.max(highest, (isFrameValue(parent) ? parent.priority : 0) + 1), 0);\n }\n }\n\n}\n\nfunction isIdle(source) {\n return source.idle !== false;\n}\n\nfunction checkIdle(active) {\n return !active.size || Array.from(active).every(isIdle);\n}\n\nfunction becomeIdle(self) {\n if (!self.idle) {\n self.idle = true;\n each(getPayload(self), node => {\n node.done = true;\n });\n callFluidObservers(self, {\n type: 'idle',\n parent: self\n });\n }\n}\n\nconst to = (source, ...args) => new Interpolation(source, args);\nconst interpolate = (source, ...args) => (deprecateInterpolate(), new Interpolation(source, args));\n\nGlobals.assign({\n createStringInterpolator,\n to: (source, args) => new Interpolation(source, args)\n});\nconst update = frameLoop.advance;\n\nexport { BailSignal, Controller, FrameValue, Interpolation, Spring, SpringContext, SpringRef, SpringValue, Trail, Transition, config, easings, inferTo, interpolate, to, update, useChain, useSpring, useSpringRef, useSprings, useTrail, useTransition };\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"ReactDOM\"];","import { Globals } from '@react-spring/core';\nexport * from '@react-spring/core';\nimport { unstable_batchedUpdates } from 'react-dom';\nimport { eachProp, is, toArray, FluidValue, each, getFluidValue, hasFluidValue, addFluidObserver, removeFluidObserver, callFluidObservers, createStringInterpolator, colors } from '@react-spring/shared';\nimport { AnimatedObject, createHost } from '@react-spring/animated';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded$2 = [\"style\", \"children\", \"scrollTop\", \"scrollLeft\"];\nconst isCustomPropRE = /^--/;\n\nfunction dangerousStyleValue(name, value) {\n if (value == null || typeof value === 'boolean' || value === '') return '';\n if (typeof value === 'number' && value !== 0 && !isCustomPropRE.test(name) && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) return value + 'px';\n return ('' + value).trim();\n}\n\nconst attributeCache = {};\nfunction applyAnimatedValues(instance, props) {\n if (!instance.nodeType || !instance.setAttribute) {\n return false;\n }\n\n const isFilterElement = instance.nodeName === 'filter' || instance.parentNode && instance.parentNode.nodeName === 'filter';\n\n const _ref = props,\n {\n style,\n children,\n scrollTop,\n scrollLeft\n } = _ref,\n attributes = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n const values = Object.values(attributes);\n const names = Object.keys(attributes).map(name => isFilterElement || instance.hasAttribute(name) ? name : attributeCache[name] || (attributeCache[name] = name.replace(/([A-Z])/g, n => '-' + n.toLowerCase())));\n\n if (children !== void 0) {\n instance.textContent = children;\n }\n\n for (let name in style) {\n if (style.hasOwnProperty(name)) {\n const value = dangerousStyleValue(name, style[name]);\n\n if (isCustomPropRE.test(name)) {\n instance.style.setProperty(name, value);\n } else {\n instance.style[name] = value;\n }\n }\n }\n\n names.forEach((name, i) => {\n instance.setAttribute(name, values[i]);\n });\n\n if (scrollTop !== void 0) {\n instance.scrollTop = scrollTop;\n }\n\n if (scrollLeft !== void 0) {\n instance.scrollLeft = scrollLeft;\n }\n}\nlet isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\nconst prefixKey = (prefix, key) => prefix + key.charAt(0).toUpperCase() + key.substring(1);\n\nconst prefixes = ['Webkit', 'Ms', 'Moz', 'O'];\nisUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => {\n prefixes.forEach(prefix => acc[prefixKey(prefix, prop)] = acc[prop]);\n return acc;\n}, isUnitlessNumber);\n\nconst _excluded$1 = [\"x\", \"y\", \"z\"];\nconst domTransforms = /^(matrix|translate|scale|rotate|skew)/;\nconst pxTransforms = /^(translate)/;\nconst degTransforms = /^(rotate|skew)/;\n\nconst addUnit = (value, unit) => is.num(value) && value !== 0 ? value + unit : value;\n\nconst isValueIdentity = (value, id) => is.arr(value) ? value.every(v => isValueIdentity(v, id)) : is.num(value) ? value === id : parseFloat(value) === id;\n\nclass AnimatedStyle extends AnimatedObject {\n constructor(_ref) {\n let {\n x,\n y,\n z\n } = _ref,\n style = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const inputs = [];\n const transforms = [];\n\n if (x || y || z) {\n inputs.push([x || 0, y || 0, z || 0]);\n transforms.push(xyz => [`translate3d(${xyz.map(v => addUnit(v, 'px')).join(',')})`, isValueIdentity(xyz, 0)]);\n }\n\n eachProp(style, (value, key) => {\n if (key === 'transform') {\n inputs.push([value || '']);\n transforms.push(transform => [transform, transform === '']);\n } else if (domTransforms.test(key)) {\n delete style[key];\n if (is.und(value)) return;\n const unit = pxTransforms.test(key) ? 'px' : degTransforms.test(key) ? 'deg' : '';\n inputs.push(toArray(value));\n transforms.push(key === 'rotate3d' ? ([x, y, z, deg]) => [`rotate3d(${x},${y},${z},${addUnit(deg, unit)})`, isValueIdentity(deg, 0)] : input => [`${key}(${input.map(v => addUnit(v, unit)).join(',')})`, isValueIdentity(input, key.startsWith('scale') ? 1 : 0)]);\n }\n });\n\n if (inputs.length) {\n style.transform = new FluidTransform(inputs, transforms);\n }\n\n super(style);\n }\n\n}\n\nclass FluidTransform extends FluidValue {\n constructor(inputs, transforms) {\n super();\n this._value = null;\n this.inputs = inputs;\n this.transforms = transforms;\n }\n\n get() {\n return this._value || (this._value = this._get());\n }\n\n _get() {\n let transform = '';\n let identity = true;\n each(this.inputs, (input, i) => {\n const arg1 = getFluidValue(input[0]);\n const [t, id] = this.transforms[i](is.arr(arg1) ? arg1 : input.map(getFluidValue));\n transform += ' ' + t;\n identity = identity && id;\n });\n return identity ? 'none' : transform;\n }\n\n observerAdded(count) {\n if (count == 1) each(this.inputs, input => each(input, value => hasFluidValue(value) && addFluidObserver(value, this)));\n }\n\n observerRemoved(count) {\n if (count == 0) each(this.inputs, input => each(input, value => hasFluidValue(value) && removeFluidObserver(value, this)));\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._value = null;\n }\n\n callFluidObservers(this, event);\n }\n\n}\n\nconst primitives = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', 'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nconst _excluded = [\"scrollTop\", \"scrollLeft\"];\nGlobals.assign({\n batchedUpdates: unstable_batchedUpdates,\n createStringInterpolator,\n colors\n});\nconst host = createHost(primitives, {\n applyAnimatedValues,\n createAnimatedStyle: style => new AnimatedStyle(style),\n getComponentProps: _ref => {\n let props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return props;\n }\n});\nconst animated = host.animated;\n\nexport { animated as a, animated };\n","/**\n * External dependencies\n */\nimport { Controller } from '@react-spring/web';\n\n/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useMemo, useRef } from '@wordpress/element';\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * If the block count exceeds the threshold, we disable the reordering animation\n * to avoid laginess.\n */\nconst BLOCK_ANIMATION_THRESHOLD = 200;\n\nfunction getAbsolutePosition( element ) {\n\treturn {\n\t\ttop: element.offsetTop,\n\t\tleft: element.offsetLeft,\n\t};\n}\n\n/**\n * Hook used to compute the styles required to move a div into a new position.\n *\n * The way this animation works is the following:\n * - It first renders the element as if there was no animation.\n * - It takes a snapshot of the position of the block to use it\n * as a destination point for the animation.\n * - It restores the element to the previous position using a CSS transform\n * - It uses the \"resetAnimation\" flag to reset the animation\n * from the beginning in order to animate to the new destination point.\n *\n * @param {Object} $1 Options\n * @param {*} $1.triggerAnimationOnChange Variable used to trigger the animation if it changes.\n * @param {string} $1.clientId\n */\nfunction useMovingAnimation( { triggerAnimationOnChange, clientId } ) {\n\tconst ref = useRef();\n\tconst {\n\t\tisTyping,\n\t\tgetGlobalBlockCount,\n\t\tisBlockSelected,\n\t\tisFirstMultiSelectedBlock,\n\t\tisBlockMultiSelected,\n\t\tisAncestorMultiSelected,\n\t} = useSelect( blockEditorStore );\n\n\t// Whenever the trigger changes, we need to take a snapshot of the current\n\t// position of the block to use it as a destination point for the animation.\n\tconst { previous, prevRect } = useMemo(\n\t\t() => ( {\n\t\t\tprevious: ref.current && getAbsolutePosition( ref.current ),\n\t\t\tprevRect: ref.current && ref.current.getBoundingClientRect(),\n\t\t} ),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[ triggerAnimationOnChange ]\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! previous || ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( ref.current );\n\t\tconst isSelected = isBlockSelected( clientId );\n\t\tconst adjustScrolling =\n\t\t\tisSelected || isFirstMultiSelectedBlock( clientId );\n\n\t\tfunction preserveScrollPosition() {\n\t\t\tif ( adjustScrolling && prevRect ) {\n\t\t\t\tconst blockRect = ref.current.getBoundingClientRect();\n\t\t\t\tconst diff = blockRect.top - prevRect.top;\n\n\t\t\t\tif ( diff ) {\n\t\t\t\t\tscrollContainer.scrollTop += diff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We disable the animation if the user has a preference for reduced\n\t\t// motion, if the user is typing (insertion by Enter), or if the block\n\t\t// count exceeds the threshold (insertion caused all the blocks that\n\t\t// follow to animate).\n\t\t// To do: consider enableing the _moving_ animation even for large\n\t\t// posts, while only disabling the _insertion_ animation?\n\t\tconst disableAnimation =\n\t\t\twindow.matchMedia( '(prefers-reduced-motion: reduce)' ).matches ||\n\t\t\tisTyping() ||\n\t\t\tgetGlobalBlockCount() > BLOCK_ANIMATION_THRESHOLD;\n\n\t\tif ( disableAnimation ) {\n\t\t\t// If the animation is disabled and the scroll needs to be adjusted,\n\t\t\t// just move directly to the final scroll position.\n\t\t\tpreserveScrollPosition();\n\t\t\treturn;\n\t\t}\n\n\t\tconst isPartOfSelection =\n\t\t\tisSelected ||\n\t\t\tisBlockMultiSelected( clientId ) ||\n\t\t\tisAncestorMultiSelected( clientId );\n\t\t// Make sure the other blocks move under the selected block(s).\n\t\tconst zIndex = isPartOfSelection ? '1' : '';\n\n\t\tconst controller = new Controller( {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tconfig: { mass: 5, tension: 2000, friction: 200 },\n\t\t\tonChange( { value } ) {\n\t\t\t\tif ( ! ref.current ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet { x, y } = value;\n\t\t\t\tx = Math.round( x );\n\t\t\t\ty = Math.round( y );\n\t\t\t\tconst finishedMoving = x === 0 && y === 0;\n\t\t\t\tref.current.style.transformOrigin = 'center center';\n\t\t\t\tref.current.style.transform = finishedMoving\n\t\t\t\t\t? null // Set to `null` to explicitly remove the transform.\n\t\t\t\t\t: `translate3d(${ x }px,${ y }px,0)`;\n\t\t\t\tref.current.style.zIndex = zIndex;\n\t\t\t\tpreserveScrollPosition();\n\t\t\t},\n\t\t} );\n\n\t\tref.current.style.transform = undefined;\n\t\tconst destination = getAbsolutePosition( ref.current );\n\n\t\tconst x = Math.round( previous.left - destination.left );\n\t\tconst y = Math.round( previous.top - destination.top );\n\n\t\tcontroller.start( { x: 0, y: 0, from: { x, y } } );\n\n\t\treturn () => {\n\t\t\tcontroller.stop();\n\t\t\tcontroller.set( { x: 0, y: 0 } );\n\t\t};\n\t}, [\n\t\tprevious,\n\t\tprevRect,\n\t\tclientId,\n\t\tisTyping,\n\t\tgetGlobalBlockCount,\n\t\tisBlockSelected,\n\t\tisFirstMultiSelectedBlock,\n\t\tisBlockMultiSelected,\n\t\tisAncestorMultiSelected,\n\t] );\n\n\treturn ref;\n}\n\nexport default useMovingAnimation;\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\nimport {\n\tfocus,\n\tisFormElement,\n\tisTextField,\n\tplaceCaretAtHorizontalEdge,\n} from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { isInsideRootBlock } from '../../../utils/dom';\nimport { store as blockEditorStore } from '../../../store';\n\n/** @typedef {import('@wordpress/element').RefObject} RefObject */\n\n/**\n * Transitions focus to the block or inner tabbable when the block becomes\n * selected and an initial position is set.\n *\n * @param {string} clientId Block client ID.\n *\n * @return {RefObject} React ref with the block element.\n */\nexport function useFocusFirstElement( { clientId, initialPosition } ) {\n\tconst ref = useRef();\n\tconst { isBlockSelected, isMultiSelecting, __unstableGetEditorMode } =\n\t\tuseSelect( blockEditorStore );\n\n\tuseEffect( () => {\n\t\t// Check if the block is still selected at the time this effect runs.\n\t\tif (\n\t\t\t! isBlockSelected( clientId ) ||\n\t\t\tisMultiSelecting() ||\n\t\t\t__unstableGetEditorMode() === 'zoom-out'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( initialPosition === undefined || initialPosition === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { ownerDocument } = ref.current;\n\n\t\t// Do not focus the block if it already contains the active element.\n\t\tif ( isInsideRootBlock( ref.current, ownerDocument.activeElement ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find all tabbables within node.\n\t\tconst textInputs = focus.tabbable\n\t\t\t.find( ref.current )\n\t\t\t.filter( ( node ) => isTextField( node ) );\n\n\t\t// If reversed (e.g. merge via backspace), use the last in the set of\n\t\t// tabbables.\n\t\tconst isReverse = -1 === initialPosition;\n\t\tconst target =\n\t\t\ttextInputs[ isReverse ? textInputs.length - 1 : 0 ] || ref.current;\n\n\t\tif ( ! isInsideRootBlock( ref.current, target ) ) {\n\t\t\tref.current.focus();\n\t\t\treturn;\n\t\t}\n\n\t\t// Check to see if element is focussable before a generic caret insert.\n\t\tif ( ! ref.current.getAttribute( 'contenteditable' ) ) {\n\t\t\tconst focusElement = focus.tabbable.findNext( ref.current );\n\t\t\t// Make sure focusElement is valid, contained in the same block, and a form field.\n\t\t\tif (\n\t\t\t\tfocusElement &&\n\t\t\t\tisInsideRootBlock( ref.current, focusElement ) &&\n\t\t\t\tisFormElement( focusElement )\n\t\t\t) {\n\t\t\t\tfocusElement.focus();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tplaceCaretAtHorizontalEdge( target, isReverse );\n\t}, [ initialPosition, clientId ] );\n\n\treturn ref;\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/*\n * Adds `is-hovered` class when the block is hovered and in navigation or\n * outline mode.\n */\nexport function useIsHovered( { clientId } ) {\n\tconst { hoverBlock } = useDispatch( blockEditorStore );\n\n\tfunction listener( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst action = event.type === 'mouseover' ? 'add' : 'remove';\n\n\t\tevent.preventDefault();\n\t\tevent.currentTarget.classList[ action ]( 'is-hovered' );\n\n\t\tif ( action === 'add' ) {\n\t\t\thoverBlock( clientId );\n\t\t} else {\n\t\t\thoverBlock( null );\n\t\t}\n\t}\n\n\treturn useRefEffect( ( node ) => {\n\t\tnode.addEventListener( 'mouseout', listener );\n\t\tnode.addEventListener( 'mouseover', listener );\n\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'mouseout', listener );\n\t\t\tnode.removeEventListener( 'mouseover', listener );\n\n\t\t\t// Remove class in case it lingers.\n\t\t\tnode.classList.remove( 'is-hovered' );\n\t\t\thoverBlock( null );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { isInsideRootBlock } from '../../../utils/dom';\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Selects the block if it receives focus.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useFocusHandler( clientId ) {\n\tconst { isBlockSelected } = useSelect( blockEditorStore );\n\tconst { selectBlock, selectionChange } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\t/**\n\t\t\t * Marks the block as selected when focused and not already\n\t\t\t * selected. This specifically handles the case where block does not\n\t\t\t * set focus on its own (via `setFocus`), typically if there is no\n\t\t\t * focusable input in the block.\n\t\t\t *\n\t\t\t * @param {FocusEvent} event Focus event.\n\t\t\t */\n\t\t\tfunction onFocus( event ) {\n\t\t\t\t// When the whole editor is editable, let writing flow handle\n\t\t\t\t// selection.\n\t\t\t\tif (\n\t\t\t\t\tnode.parentElement.closest( '[contenteditable=\"true\"]' )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check synchronously because a non-selected block might be\n\t\t\t\t// getting data through `useSelect` asynchronously.\n\t\t\t\tif ( isBlockSelected( clientId ) ) {\n\t\t\t\t\t// Potentially change selection away from rich text.\n\t\t\t\t\tif ( ! event.target.isContentEditable ) {\n\t\t\t\t\t\tselectionChange( clientId );\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If an inner block is focussed, that block is resposible for\n\t\t\t\t// setting the selected block.\n\t\t\t\tif ( ! isInsideRootBlock( node, event.target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselectBlock( clientId );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'focusin', onFocus );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'focusin', onFocus );\n\t\t\t};\n\t\t},\n\t\t[ isBlockSelected, selectBlock ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { isTextField } from '@wordpress/dom';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Adds block behaviour:\n * - Removes the block on BACKSPACE.\n * - Inserts a default block on ENTER.\n * - Disables dragging of block contents.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useEventHandlers( { clientId, isSelected } ) {\n\tconst { getBlockRootClientId, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertAfterBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Interprets keydown event intent to remove or insert after block if\n\t\t\t * key event occurs on wrapper node. This can occur when the block has\n\t\t\t * no text fields of its own, particularly after initial insertion, to\n\t\t\t * allow for easy deletion and continuous writing flow to add additional\n\t\t\t * content.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keydown event.\n\t\t\t */\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, target } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode !== ENTER &&\n\t\t\t\t\tkeyCode !== BACKSPACE &&\n\t\t\t\t\tkeyCode !== DELETE\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( target !== node || isTextField( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( keyCode === ENTER ) {\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t} else {\n\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Prevents default dragging behavior within a block. To do: we must\n\t\t\t * handle this in the future and clean up the drag target.\n\t\t\t *\n\t\t\t * @param {DragEvent} event Drag event.\n\t\t\t */\n\t\t\tfunction onDragStart( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'dragstart', onDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'dragstart', onDragStart );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tisSelected,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockIndex,\n\t\t\tinsertAfterBlock,\n\t\t\tremoveBlock,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Allows navigation mode to be exited by clicking in the selected block.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useNavModeExit( clientId ) {\n\tconst { isNavigationMode, isBlockSelected } = useSelect( blockEditorStore );\n\tconst { setNavigationMode, selectBlock } = useDispatch( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\t// Don't select a block if it's already handled by a child\n\t\t\t\t// block.\n\t\t\t\tif ( isNavigationMode() && ! event.defaultPrevented ) {\n\t\t\t\t\t// Prevent focus from moving to the block.\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// When clicking on a selected block, exit navigation mode.\n\t\t\t\t\tif ( isBlockSelected( clientId ) ) {\n\t\t\t\t\t\tsetNavigationMode( false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectBlock( clientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t};\n\t\t},\n\t\t[ clientId, isNavigationMode, isBlockSelected, setNavigationMode ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\n/**\n * Allows Zoom Out mode to be exited by double clicking in the selected block.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useZoomOutModeExit( { editorMode } ) {\n\tconst { getSettings, isZoomOut } = unlock( useSelect( blockEditorStore ) );\n\tconst { __unstableSetEditorMode, resetZoomLevel } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\t// In \"compose\" mode.\n\t\t\tconst composeMode = editorMode === 'zoom-out' && isZoomOut();\n\n\t\t\tif ( ! composeMode ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onDoubleClick( event ) {\n\t\t\t\tif ( ! event.defaultPrevented ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\tconst { __experimentalSetIsInserterOpened } = getSettings();\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof __experimentalSetIsInserterOpened === 'function'\n\t\t\t\t\t) {\n\t\t\t\t\t\t__experimentalSetIsInserterOpened( false );\n\t\t\t\t\t}\n\t\t\t\t\t__unstableSetEditorMode( 'edit' );\n\t\t\t\t\tresetZoomLevel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'dblclick', onDoubleClick );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'dblclick', onDoubleClick );\n\t\t\t};\n\t\t},\n\t\t[ editorMode, getSettings, __unstableSetEditorMode ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { IntersectionObserver } from '../';\n\nexport function useIntersectionObserver() {\n\tconst observer = useContext( IntersectionObserver );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( observer ) {\n\t\t\t\tobserver.observe( node );\n\t\t\t\treturn () => {\n\t\t\t\t\tobserver.unobserve( node );\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t[ observer ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useReducedMotion, useRefEffect } from '@wordpress/compose';\n\nexport function useScrollIntoView( { isSelected } ) {\n\tconst prefersReducedMotion = useReducedMotion();\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( isSelected ) {\n\t\t\t\tconst { ownerDocument } = node;\n\t\t\t\tconst { defaultView } = ownerDocument;\n\t\t\t\tif ( ! defaultView.IntersectionObserver ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst observer = new defaultView.IntersectionObserver(\n\t\t\t\t\t( entries ) => {\n\t\t\t\t\t\t// Once observing starts, we always get an initial\n\t\t\t\t\t\t// entry with the intersecting state.\n\t\t\t\t\t\tif ( ! entries[ 0 ].isIntersecting ) {\n\t\t\t\t\t\t\tnode.scrollIntoView( {\n\t\t\t\t\t\t\t\tbehavior: prefersReducedMotion\n\t\t\t\t\t\t\t\t\t? 'instant'\n\t\t\t\t\t\t\t\t\t: 'smooth',\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tobserver.observe( node );\n\t\t\t\treturn () => {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t[ isSelected ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function useFlashEditableBlocks( {\n\tclientId = '',\n\tisEnabled = true,\n} = {} ) {\n\tconst { getEnabledClientIdsTree } = unlock( useSelect( blockEditorStore ) );\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst flashEditableBlocks = () => {\n\t\t\t\tgetEnabledClientIdsTree( clientId ).forEach(\n\t\t\t\t\t( { clientId: id } ) => {\n\t\t\t\t\t\tconst block = element.querySelector(\n\t\t\t\t\t\t\t`[data-block=\"${ id }\"]`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( ! block ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock.classList.remove( 'has-editable-outline' );\n\t\t\t\t\t\t// Force reflow to trigger the animation.\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\tblock.offsetWidth;\n\t\t\t\t\t\tblock.classList.add( 'has-editable-outline' );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst handleClick = ( event ) => {\n\t\t\t\tconst shouldFlash =\n\t\t\t\t\tevent.target === element ||\n\t\t\t\t\tevent.target.classList.contains( 'is-root-container' );\n\t\t\t\tif ( ! shouldFlash ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tflashEditableBlocks();\n\t\t\t};\n\n\t\t\telement.addEventListener( 'click', handleClick );\n\t\t\treturn () => element.removeEventListener( 'click', handleClick );\n\t\t},\n\t\t[ isEnabled ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useMemo, useContext } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport isURLLike from '../components/link-control/is-url-like';\nimport { unlock } from '../lock-unlock';\nimport BlockContext from '../components/block-context';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Given a binding of block attributes, returns a higher order component that\n * overrides its `attributes` and `setAttributes` props to sync any changes needed.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\n\nconst BLOCK_BINDINGS_ALLOWED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/image': [ 'id', 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget', 'rel' ],\n};\n\nconst DEFAULT_ATTRIBUTE = '__default';\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param {string} blockName The block name (e.g. 'core/paragraph').\n * @param {Object} bindings A block's bindings from the metadata attribute.\n *\n * @return {Object} The bindings with default replaced for pattern overrides.\n */\nfunction replacePatternOverrideDefaultBindings( blockName, bindings ) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif (\n\t\tbindings?.[ DEFAULT_ATTRIBUTE ]?.source === 'core/pattern-overrides'\n\t) {\n\t\tconst supportedAttributes = BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];\n\t\tconst bindingsWithDefaults = {};\n\t\tfor ( const attributeName of supportedAttributes ) {\n\t\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t\t? bindings[ attributeName ]\n\t\t\t\t: { source: 'core/pattern-overrides' };\n\t\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t\t}\n\n\t\treturn bindingsWithDefaults;\n\t}\n\n\treturn bindings;\n}\n\n/**\n * Based on the given block name,\n * check if it is possible to bind the block.\n *\n * @param {string} blockName - The block name.\n * @return {boolean} Whether it is possible to bind the block to sources.\n */\nexport function canBindBlock( blockName ) {\n\treturn blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;\n}\n\n/**\n * Based on the given block name and attribute name,\n * check if it is possible to bind the block attribute.\n *\n * @param {string} blockName - The block name.\n * @param {string} attributeName - The attribute name.\n * @return {boolean} Whether it is possible to bind the block attribute.\n */\nexport function canBindAttribute( blockName, attributeName ) {\n\treturn (\n\t\tcanBindBlock( blockName ) &&\n\t\tBLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ].includes( attributeName )\n\t);\n}\n\nexport function getBindableAttributes( blockName ) {\n\treturn BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];\n}\n\nexport const withBlockBindingSupport = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst registry = useRegistry();\n\t\tconst blockContext = useContext( BlockContext );\n\t\tconst sources = useSelect( ( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources()\n\t\t);\n\t\tconst { name, clientId, context, setAttributes } = props;\n\t\tconst blockBindings = useMemo(\n\t\t\t() =>\n\t\t\t\treplacePatternOverrideDefaultBindings(\n\t\t\t\t\tname,\n\t\t\t\t\tprops.attributes.metadata?.bindings\n\t\t\t\t),\n\t\t\t[ props.attributes.metadata?.bindings, name ]\n\t\t);\n\n\t\t// While this hook doesn't directly call any selectors, `useSelect` is\n\t\t// used purposely here to ensure `boundAttributes` is updated whenever\n\t\t// there are attribute updates.\n\t\t// `source.getValues` may also call a selector via `registry.select`.\n\t\tconst updatedContext = {};\n\t\tconst boundAttributes = useSelect( () => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst attributes = {};\n\n\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\tfor ( const [ attributeName, binding ] of Object.entries(\n\t\t\t\tblockBindings\n\t\t\t) ) {\n\t\t\t\tconst { source: sourceName, args: sourceArgs } = binding;\n\t\t\t\tconst source = sources[ sourceName ];\n\t\t\t\tif ( ! source || ! canBindAttribute( name, attributeName ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Populate context.\n\t\t\t\tfor ( const key of source.usesContext || [] ) {\n\t\t\t\t\tupdatedContext[ key ] = blockContext[ key ];\n\t\t\t\t}\n\n\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\targs: sourceArgs,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\tfor ( const [ source, bindings ] of blockBindingsBySource ) {\n\t\t\t\t\t// Get values in batch if the source supports it.\n\t\t\t\t\tlet values = {};\n\t\t\t\t\tif ( ! source.getValues ) {\n\t\t\t\t\t\tObject.keys( bindings ).forEach( ( attr ) => {\n\t\t\t\t\t\t\t// Default to the the source label when `getValues` doesn't exist.\n\t\t\t\t\t\t\tvalues[ attr ] = source.label;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = source.getValues( {\n\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\tcontext: updatedContext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\tvalues\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattributeName === 'url' &&\n\t\t\t\t\t\t\t( ! value || ! isURLLike( value ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Return null if value is not a valid URL.\n\t\t\t\t\t\t\tattributes[ attributeName ] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributes[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t}, [\n\t\t\tblockBindings,\n\t\t\tname,\n\t\t\tclientId,\n\t\t\tupdatedContext,\n\t\t\tregistry,\n\t\t\tsources,\n\t\t] );\n\n\t\tconst hasParentPattern = !! updatedContext[ 'pattern/overrides' ];\n\t\tconst hasPatternOverridesDefaultBinding =\n\t\t\tprops.attributes.metadata?.bindings?.[ DEFAULT_ATTRIBUTE ]\n\t\t\t\t?.source === 'core/pattern-overrides';\n\n\t\tconst _setAttributes = useCallback(\n\t\t\t( nextAttributes ) => {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tif ( ! blockBindings ) {\n\t\t\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\t\tkeptAttributes\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! blockBindings[ attributeName ] ||\n\t\t\t\t\t\t\t! canBindAttribute( name, attributeName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst binding = blockBindings[ attributeName ];\n\t\t\t\t\t\tconst source = sources[ binding?.source ];\n\t\t\t\t\t\tif ( ! source?.setValues ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\t\t\tfor ( const [\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t] of blockBindingsBySource ) {\n\t\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\t\tcontext: updatedContext,\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Don't update non-connected attributes if the block is using pattern overrides\n\t\t\t\t\t\t// and the editing is happening while overriding the pattern (not editing the original).\n\t\t\t\t\t\t! (\n\t\t\t\t\t\t\thasPatternOverridesDefaultBinding &&\n\t\t\t\t\t\t\thasParentPattern\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Don't update caption and href until they are supported.\n\t\t\t\t\t\tif ( hasPatternOverridesDefaultBinding ) {\n\t\t\t\t\t\t\tdelete keptAttributes?.caption;\n\t\t\t\t\t\t\tdelete keptAttributes?.href;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tregistry,\n\t\t\t\tblockBindings,\n\t\t\t\tname,\n\t\t\t\tclientId,\n\t\t\t\tupdatedContext,\n\t\t\t\tsetAttributes,\n\t\t\t\tsources,\n\t\t\t\thasPatternOverridesDefaultBinding,\n\t\t\t\thasParentPattern,\n\t\t\t]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\t'withBlockBindingSupport'\n);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade bound attributes.\n *\n * @param {WPBlockSettings} settings - Registered block settings.\n * @param {string} name - Block name.\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings, name ) {\n\tif ( ! canBindBlock( name ) ) {\n\t\treturn settings;\n\t}\n\n\treturn {\n\t\t...settings,\n\t\tedit: withBlockBindingSupport( settings.edit ),\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { __unstableGetBlockProps as getBlockProps } from '@wordpress/blocks';\nimport { useMergeRefs, useDisabled } from '@wordpress/compose';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../../use-moving-animation';\nimport { PrivateBlockContext } from '../private-block-context';\nimport { useFocusFirstElement } from './use-focus-first-element';\nimport { useIsHovered } from './use-is-hovered';\nimport {\n\tblockBindingsKey,\n\tuseBlockEditContext,\n} from '../../block-edit/context';\nimport { useFocusHandler } from './use-focus-handler';\nimport { useEventHandlers } from './use-selected-block-event-handlers';\nimport { useNavModeExit } from './use-nav-mode-exit';\nimport { useZoomOutModeExit } from './use-zoom-out-mode-exit';\nimport { useBlockRefProvider } from './use-block-refs';\nimport { useIntersectionObserver } from './use-intersection-observer';\nimport { useScrollIntoView } from './use-scroll-into-view';\nimport { useFlashEditableBlocks } from '../../use-flash-editable-blocks';\nimport { canBindBlock } from '../../../hooks/use-bindings-attributes';\n\n/**\n * This hook is used to lightly mark an element as a block element. The element\n * should be the outermost element of a block. Call this hook and pass the\n * returned props to the element to mark as a block. If you define a ref for the\n * element, it is important to pass the ref to this hook, which the hook in turn\n * will pass to the component through the props it returns. Optionally, you can\n * also pass any other props through this hook, and they will be merged and\n * returned.\n *\n * Use of this hook on the outermost element of a block is required if using API >= v2.\n *\n * @example\n * ```js\n * import { useBlockProps } from '@wordpress/block-editor';\n *\n * export default function Edit() {\n *\n * const blockProps = useBlockProps( {\n * className: 'my-custom-class',\n * style: {\n * color: '#222222',\n * backgroundColor: '#eeeeee'\n * }\n * } )\n *\n * return (\n *\t
    \n *\n *
    \n * )\n * }\n *\n * ```\n *\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Options for internal use only.\n * @param {boolean} options.__unstableIsHtml\n *\n * @return {Object} Props to pass to the element to mark as a block.\n */\nexport function useBlockProps( props = {}, { __unstableIsHtml } = {} ) {\n\tconst {\n\t\tclientId,\n\t\tclassName,\n\t\twrapperProps = {},\n\t\tisAligned,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\teditorMode,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\ttemplateLock,\n\t} = useContext( PrivateBlockContext );\n\n\t// translators: %s: Type of block (i.e. Text, Image etc)\n\tconst blockLabel = sprintf( __( 'Block: %s' ), blockTitle );\n\tconst htmlSuffix = mode === 'html' && ! __unstableIsHtml ? '-visual' : '';\n\tconst mergedRefs = useMergeRefs( [\n\t\tprops.ref,\n\t\tuseFocusFirstElement( { clientId, initialPosition } ),\n\t\tuseBlockRefProvider( clientId ),\n\t\tuseFocusHandler( clientId ),\n\t\tuseEventHandlers( { clientId, isSelected } ),\n\t\tuseNavModeExit( clientId ),\n\t\tuseZoomOutModeExit( { editorMode } ),\n\t\tuseIsHovered( { clientId } ),\n\t\tuseIntersectionObserver(),\n\t\tuseMovingAnimation( { triggerAnimationOnChange: index, clientId } ),\n\t\tuseDisabled( { isDisabled: ! hasOverlay } ),\n\t\tuseFlashEditableBlocks( {\n\t\t\tclientId,\n\t\t\tisEnabled: name === 'core/block' || templateLock === 'contentOnly',\n\t\t} ),\n\t\tuseScrollIntoView( { isSelected } ),\n\t] );\n\n\tconst blockEditContext = useBlockEditContext();\n\tconst hasBlockBindings = !! blockEditContext[ blockBindingsKey ];\n\tconst bindingsStyle =\n\t\thasBlockBindings && canBindBlock( name )\n\t\t\t? {\n\t\t\t\t\t'--wp-admin-theme-color': 'var(--wp-block-synced-color)',\n\t\t\t\t\t'--wp-admin-theme-color--rgb':\n\t\t\t\t\t\t'var(--wp-block-synced-color--rgb)',\n\t\t\t }\n\t\t\t: {};\n\n\t// Ensures it warns only inside the `edit` implementation for the block.\n\tif ( blockApiVersion < 2 && clientId === blockEditContext.clientId ) {\n\t\twarning(\n\t\t\t`Block type \"${ name }\" must support API version 2 or higher to work correctly with \"useBlockProps\" method.`\n\t\t);\n\t}\n\n\tlet hasNegativeMargin = false;\n\tif (\n\t\twrapperProps?.style?.marginTop?.charAt( 0 ) === '-' ||\n\t\twrapperProps?.style?.marginBottom?.charAt( 0 ) === '-' ||\n\t\twrapperProps?.style?.marginLeft?.charAt( 0 ) === '-' ||\n\t\twrapperProps?.style?.marginRight?.charAt( 0 ) === '-'\n\t) {\n\t\thasNegativeMargin = true;\n\t}\n\n\treturn {\n\t\ttabIndex: blockEditingMode === 'disabled' ? -1 : 0,\n\t\t...wrapperProps,\n\t\t...props,\n\t\tref: mergedRefs,\n\t\tid: `block-${ clientId }${ htmlSuffix }`,\n\t\trole: 'document',\n\t\t'aria-label': blockLabel,\n\t\t'data-block': clientId,\n\t\t'data-type': name,\n\t\t'data-title': blockTitle,\n\t\tinert: isSubtreeDisabled ? 'true' : undefined,\n\t\tclassName: clsx(\n\t\t\t'block-editor-block-list__block',\n\t\t\t{\n\t\t\t\t// The wp-block className is important for editor styles.\n\t\t\t\t'wp-block': ! isAligned,\n\t\t\t\t'has-block-overlay': hasOverlay,\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-highlighted': isHighlighted,\n\t\t\t\t'is-multi-selected': isMultiSelected,\n\t\t\t\t'is-partially-selected': isPartiallySelected,\n\t\t\t\t'is-reusable': isReusable,\n\t\t\t\t'is-dragging': isDragging,\n\t\t\t\t'has-child-selected': hasChildSelected,\n\t\t\t\t'is-block-moving-mode': isBlockMovingMode,\n\t\t\t\t'can-insert-moving-block': canInsertMovingBlock,\n\t\t\t\t'is-editing-disabled': isEditingDisabled,\n\t\t\t\t'has-editable-outline': hasEditableOutline,\n\t\t\t\t'has-negative-margin': hasNegativeMargin,\n\t\t\t\t'is-content-locked-temporarily-editing-as-blocks':\n\t\t\t\t\tisTemporarilyEditingAsBlocks,\n\t\t\t},\n\t\t\tclassName,\n\t\t\tprops.className,\n\t\t\twrapperProps.className,\n\t\t\tdefaultClassName\n\t\t),\n\t\tstyle: { ...wrapperProps.style, ...props.style, ...bindingsStyle },\n\t};\n}\n\n/**\n * Call within a save function to get the props for the block wrapper.\n *\n * @param {Object} props Optional. Props to pass to the element.\n */\nuseBlockProps.save = getBlockProps;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tmemo,\n\tuseCallback,\n\tRawHTML,\n\tuseContext,\n\tuseMemo,\n} from '@wordpress/element';\nimport {\n\tgetBlockType,\n\tgetSaveContent,\n\tisUnmodifiedDefaultBlock,\n\tserializeRawBlock,\n\tswitchToBlockType,\n\tgetDefaultBlockName,\n\tisUnmodifiedBlock,\n\tisReusableBlock,\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { withDispatch, useDispatch, useSelect } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\nimport { safeHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport BlockEdit from '../block-edit';\nimport BlockInvalidWarning from './block-invalid-warning';\nimport BlockCrashWarning from './block-crash-warning';\nimport BlockCrashBoundary from './block-crash-boundary';\nimport BlockHtml from './block-html';\nimport { useBlockProps } from './use-block-props';\nimport { store as blockEditorStore } from '../../store';\nimport { useLayout } from './layout';\nimport { PrivateBlockContext } from './private-block-context';\n\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Merges wrapper props with special handling for classNames and styles.\n *\n * @param {Object} propsA\n * @param {Object} propsB\n *\n * @return {Object} Merged props.\n */\nfunction mergeWrapperProps( propsA, propsB ) {\n\tconst newProps = {\n\t\t...propsA,\n\t\t...propsB,\n\t};\n\n\t// May be set to undefined, so check if the property is set!\n\tif (\n\t\tpropsA?.hasOwnProperty( 'className' ) &&\n\t\tpropsB?.hasOwnProperty( 'className' )\n\t) {\n\t\tnewProps.className = clsx( propsA.className, propsB.className );\n\t}\n\n\tif (\n\t\tpropsA?.hasOwnProperty( 'style' ) &&\n\t\tpropsB?.hasOwnProperty( 'style' )\n\t) {\n\t\tnewProps.style = { ...propsA.style, ...propsB.style };\n\t}\n\n\treturn newProps;\n}\n\nfunction Block( { children, isHtml, ...props } ) {\n\treturn (\n\t\t
    \n\t\t\t{ children }\n\t\t
    \n\t);\n}\n\nfunction BlockListBlock( {\n\tblock: { __unstableBlockSource },\n\tmode,\n\tisLocked,\n\tcanRemove,\n\tclientId,\n\tisSelected,\n\tisSelectionEnabled,\n\tclassName,\n\t__unstableLayoutClassNames: layoutClassNames,\n\tname,\n\tisValid,\n\tattributes,\n\twrapperProps,\n\tsetAttributes,\n\tonReplace,\n\tonInsertBlocksAfter,\n\tonMerge,\n\ttoggleSelection,\n} ) {\n\tconst {\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tthemeSupportsLayout,\n\t\t...context\n\t} = useContext( PrivateBlockContext );\n\tconst { removeBlock } = useDispatch( blockEditorStore );\n\tconst onRemove = useCallback(\n\t\t() => removeBlock( clientId ),\n\t\t[ clientId, removeBlock ]\n\t);\n\n\tconst parentLayout = useLayout() || {};\n\n\t// We wrap the BlockEdit component in a div that hides it when editing in\n\t// HTML mode. This allows us to render all of the ancillary pieces\n\t// (InspectorControls, etc.) which are inside `BlockEdit` but not\n\t// `BlockHTML`, even in HTML mode.\n\tlet blockEdit = (\n\t\t\n\t);\n\n\tconst blockType = getBlockType( name );\n\n\t// Determine whether the block has props to apply to the wrapper.\n\tif ( blockType?.getEditWrapperProps ) {\n\t\twrapperProps = mergeWrapperProps(\n\t\t\twrapperProps,\n\t\t\tblockType.getEditWrapperProps( attributes )\n\t\t);\n\t}\n\n\tconst isAligned =\n\t\twrapperProps &&\n\t\t!! wrapperProps[ 'data-align' ] &&\n\t\t! themeSupportsLayout;\n\n\t// Support for sticky position in classic themes with alignment wrappers.\n\n\tconst isSticky = className?.includes( 'is-position-sticky' );\n\n\t// For aligned blocks, provide a wrapper element so the block can be\n\t// positioned relative to the block column.\n\t// This is only kept for classic themes that don't support layout\n\t// Historically we used to rely on extra divs and data-align to\n\t// provide the alignments styles in the editor.\n\t// Due to the differences between frontend and backend, we migrated\n\t// to the layout feature, and we're now aligning the markup of frontend\n\t// and backend.\n\tif ( isAligned ) {\n\t\tblockEdit = (\n\t\t\t\n\t\t\t\t{ blockEdit }\n\t\t\t\n\t\t);\n\t}\n\n\tlet block;\n\n\tif ( ! isValid ) {\n\t\tconst saveContent = __unstableBlockSource\n\t\t\t? serializeRawBlock( __unstableBlockSource )\n\t\t\t: getSaveContent( blockType, attributes );\n\n\t\tblock = (\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ safeHTML( saveContent ) }\n\t\t\t\n\t\t);\n\t} else if ( mode === 'html' ) {\n\t\t// Render blockEdit so the inspector controls don't disappear.\n\t\t// See #8969.\n\t\tblock = (\n\t\t\t<>\n\t\t\t\t
    { blockEdit }
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t} else if ( blockType?.apiVersion > 1 ) {\n\t\tblock = blockEdit;\n\t} else {\n\t\tblock = { blockEdit };\n\t}\n\n\tconst { 'data-align': dataAlign, ...restWrapperProps } = wrapperProps ?? {};\n\tconst updatedWrapperProps = {\n\t\t...restWrapperProps,\n\t\tclassName: clsx(\n\t\t\trestWrapperProps.className,\n\t\t\tdataAlign && themeSupportsLayout && `align${ dataAlign }`,\n\t\t\t! ( dataAlign && isSticky ) && className\n\t\t),\n\t};\n\n\t// We set a new context with the adjusted and filtered wrapperProps (through\n\t// `editor.BlockListBlock`), which the `BlockListBlockProvider` did not have\n\t// access to.\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ block }\n\t\t\t\n\t\t\n\t);\n}\n\nconst applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tinsertBlocks,\n\t\tmergeBlocks,\n\t\treplaceBlocks,\n\t\ttoggleSelection,\n\t\t__unstableMarkLastChangeAsPersistent,\n\t\tmoveBlocksToPosition,\n\t\tremoveBlock,\n\t\tselectBlock,\n\t} = dispatch( blockEditorStore );\n\n\t// Do not add new properties here, use `useDispatch` instead to avoid\n\t// leaking new props to the public API (editor.BlockListBlock filter).\n\treturn {\n\t\tsetAttributes( newAttributes ) {\n\t\t\tconst { getMultiSelectedBlockClientIds } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst multiSelectedBlockClientIds =\n\t\t\t\tgetMultiSelectedBlockClientIds();\n\t\t\tconst { clientId } = ownProps;\n\t\t\tconst clientIds = multiSelectedBlockClientIds.length\n\t\t\t\t? multiSelectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes );\n\t\t},\n\t\tonInsertBlocks( blocks, index ) {\n\t\t\tconst { rootClientId } = ownProps;\n\t\t\tinsertBlocks( blocks, index, rootClientId );\n\t\t},\n\t\tonInsertBlocksAfter( blocks ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst { getBlockIndex } = registry.select( blockEditorStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tinsertBlocks( blocks, index + 1, rootClientId );\n\t\t},\n\t\tonMerge( forward ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst {\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = registry.select( blockEditorStore );\n\n\t\t\tfunction switchToDefaultOrRemove() {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\tif ( getBlockName( clientId ) !== defaultBlockName ) {\n\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\tblock,\n\t\t\t\t\t\tdefaultBlockName\n\t\t\t\t\t);\n\t\t\t\t\tif ( replacement && replacement.length ) {\n\t\t\t\t\t\treplaceBlocks( clientId, replacement );\n\t\t\t\t\t}\n\t\t\t\t} else if ( isUnmodifiedDefaultBlock( block ) ) {\n\t\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\t\t\t\t\tif ( nextBlockClientId ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t\tselectBlock( nextBlockClientId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Moves the block with clientId up one level. If the block type\n\t\t\t * cannot be inserted at the new location, it will be attempted to\n\t\t\t * convert to the default block type.\n\t\t\t *\n\t\t\t * @param {string} _clientId The block to move.\n\t\t\t * @param {boolean} changeSelection Whether to change the selection\n\t\t\t * to the moved block.\n\t\t\t */\n\t\t\tfunction moveFirstItemUp( _clientId, changeSelection = true ) {\n\t\t\t\tconst targetRootClientId = getBlockRootClientId( _clientId );\n\t\t\t\tconst blockOrder = getBlockOrder( _clientId );\n\t\t\t\tconst [ firstClientId ] = blockOrder;\n\n\t\t\t\tif (\n\t\t\t\t\tblockOrder.length === 1 &&\n\t\t\t\t\tisUnmodifiedBlock( getBlock( firstClientId ) )\n\t\t\t\t) {\n\t\t\t\t\tremoveBlock( _clientId );\n\t\t\t\t} else {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tgetBlockName( firstClientId ),\n\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ firstClientId ],\n\t\t\t\t\t\t\t\t_clientId,\n\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\tgetBlockIndex( _clientId )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\t\t\tgetBlock( firstClientId ),\n\t\t\t\t\t\t\t\tgetDefaultBlockName()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treplacement &&\n\t\t\t\t\t\t\t\treplacement.length &&\n\t\t\t\t\t\t\t\treplacement.every( ( block ) =>\n\t\t\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\treplacement,\n\t\t\t\t\t\t\t\t\tgetBlockIndex( _clientId ),\n\t\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\t\tchangeSelection\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( firstClientId, false );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! getBlockOrder( _clientId ).length &&\n\t\t\t\t\t\t\tisUnmodifiedBlock( getBlock( _clientId ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveBlock( _clientId, false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For `Delete` or forward merge, we should do the exact same thing\n\t\t\t// as `Backspace`, but from the other block.\n\t\t\tif ( forward ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tconst nextRootClientId =\n\t\t\t\t\t\tgetNextBlockClientId( rootClientId );\n\n\t\t\t\t\tif ( nextRootClientId ) {\n\t\t\t\t\t\t// If there is a block that follows with the same parent\n\t\t\t\t\t\t// block name and the same attributes, merge the inner\n\t\t\t\t\t\t// blocks.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( nextRootClientId )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( nextRootClientId );\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t\tgetBlockOrder( nextRootClientId ),\n\t\t\t\t\t\t\t\t\t\tnextRootClientId,\n\t\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tremoveBlock( nextRootClientId, false );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeBlocks( rootClientId, nextRootClientId );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\n\t\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( getBlockOrder( nextBlockClientId ).length ) {\n\t\t\t\t\tmoveFirstItemUp( nextBlockClientId, false );\n\t\t\t\t} else {\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst previousBlockClientId =\n\t\t\t\t\tgetPreviousBlockClientId( clientId );\n\n\t\t\t\tif ( previousBlockClientId ) {\n\t\t\t\t\tmergeBlocks( previousBlockClientId, clientId );\n\t\t\t\t} else if ( rootClientId ) {\n\t\t\t\t\tconst previousRootClientId =\n\t\t\t\t\t\tgetPreviousBlockClientId( rootClientId );\n\n\t\t\t\t\t// If there is a preceding block with the same parent block\n\t\t\t\t\t// name and the same attributes, merge the inner blocks.\n\t\t\t\t\tif (\n\t\t\t\t\t\tpreviousRootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( previousRootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( previousRootClientId );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\tgetBlockOrder( rootClientId ),\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tpreviousRootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( rootClientId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmoveFirstItemUp( rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonReplace( blocks, indexToSelect, initialPosition ) {\n\t\t\tif (\n\t\t\t\tblocks.length &&\n\t\t\t\t! isUnmodifiedDefaultBlock( blocks[ blocks.length - 1 ] )\n\t\t\t) {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}\n\t\t\t//Unsynced patterns are nested in an array so we need to flatten them.\n\t\t\tconst replacementBlocks =\n\t\t\t\tblocks?.length === 1 && Array.isArray( blocks[ 0 ] )\n\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t: blocks;\n\t\t\treplaceBlocks(\n\t\t\t\t[ ownProps.clientId ],\n\t\t\t\treplacementBlocks,\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition\n\t\t\t);\n\t\t},\n\t\ttoggleSelection( selectionEnabled ) {\n\t\t\ttoggleSelection( selectionEnabled );\n\t\t},\n\t};\n} );\n\n// This component is used by the BlockListBlockProvider component below. It will\n// add the props necessary for the `editor.BlockListBlock` filters.\nBlockListBlock = compose(\n\tapplyWithDispatch,\n\twithFilters( 'editor.BlockListBlock' )\n)( BlockListBlock );\n\n// This component provides all the information we need through a single store\n// subscription (useSelect mapping). Only the necessary props are passed down\n// to the BlockListBlock component, which is a filtered component, so these\n// props are public API. To avoid adding to the public API, we use a private\n// context to pass the rest of the information to the filtered BlockListBlock\n// component, and useBlockProps.\nfunction BlockListBlockProvider( props ) {\n\tconst { clientId, rootClientId } = props;\n\tconst selectedProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\tgetBlockMode,\n\t\t\t\tisSelectionEnabled,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockWithoutAttributes,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tisFirstMultiSelectedBlock,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlocksByName,\n\n\t\t\t\tgetBlockIndex,\n\t\t\t\tisBlockMultiSelected,\n\t\t\t\tisBlockSubtreeDisabled,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\t__unstableIsFullySelected,\n\t\t\t\t__unstableSelectionHasUnmergeableBlock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tisDragging,\n\t\t\t\thasBlockMovingClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst blockWithoutAttributes =\n\t\t\t\tgetBlockWithoutAttributes( clientId );\n\n\t\t\t// This is a temporary fix.\n\t\t\t// This function should never be called when a block is not\n\t\t\t// present in the state. It happens now because the order in\n\t\t\t// withSelect rendering is not correct.\n\t\t\tif ( ! blockWithoutAttributes ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\thasBlockSupport: _hasBlockSupport,\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t} = select( blocksStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst { name: blockName, isValid } = blockWithoutAttributes;\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst { supportsLayout, __unstableIsPreviewMode: isPreviewMode } =\n\t\t\t\tgetSettings();\n\t\t\tconst hasLightBlockWrapper = blockType?.apiVersion > 1;\n\t\t\tconst previewContext = {\n\t\t\t\tisPreviewMode,\n\t\t\t\tblockWithoutAttributes,\n\t\t\t\tname: blockName,\n\t\t\t\tattributes,\n\t\t\t\tisValid,\n\t\t\t\tthemeSupportsLayout: supportsLayout,\n\t\t\t\tindex: getBlockIndex( clientId ),\n\t\t\t\tisReusable: isReusableBlock( blockType ),\n\t\t\t\tclassName: hasLightBlockWrapper\n\t\t\t\t\t? attributes.className\n\t\t\t\t\t: undefined,\n\t\t\t\tdefaultClassName: hasLightBlockWrapper\n\t\t\t\t\t? getBlockDefaultClassName( blockName )\n\t\t\t\t\t: undefined,\n\t\t\t\tblockTitle: blockType?.title,\n\t\t\t};\n\n\t\t\t// When in preview mode, we can avoid a lot of selection and\n\t\t\t// editing related selectors.\n\t\t\tif ( isPreviewMode ) {\n\t\t\t\treturn previewContext;\n\t\t\t}\n\n\t\t\tconst _isSelected = isBlockSelected( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isMultiSelected = isBlockMultiSelected( clientId );\n\t\t\tconst checkDeep = true;\n\t\t\tconst isAncestorOfSelectedBlock = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\tcheckDeep\n\t\t\t);\n\t\t\tconst movingClientId = hasBlockMovingClientId();\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\n\t\t\tconst multiple = hasBlockSupport( blockName, 'multiple', true );\n\n\t\t\t// For block types with `multiple` support, there is no \"original\n\t\t\t// block\" to be found in the content, as the block itself is valid.\n\t\t\tconst blocksWithSameName = multiple\n\t\t\t\t? []\n\t\t\t\t: getBlocksByName( blockName );\n\t\t\tconst isInvalid =\n\t\t\t\tblocksWithSameName.length &&\n\t\t\t\tblocksWithSameName[ 0 ] !== clientId;\n\n\t\t\tconst editorMode = __unstableGetEditorMode();\n\n\t\t\treturn {\n\t\t\t\t...previewContext,\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tisSelectionEnabled: isSelectionEnabled(),\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\ttemplateLock: getTemplateLock( clientId ),\n\t\t\t\tcanRemove,\n\t\t\t\tcanMove,\n\t\t\t\tisSelected: _isSelected,\n\t\t\t\tisTemporarilyEditingAsBlocks:\n\t\t\t\t\tgetTemporarilyEditingAsBlocks() === clientId,\n\t\t\t\tblockEditingMode,\n\t\t\t\tmayDisplayControls:\n\t\t\t\t\t_isSelected ||\n\t\t\t\t\t( isFirstMultiSelectedBlock( clientId ) &&\n\t\t\t\t\t\tgetMultiSelectedBlockClientIds().every(\n\t\t\t\t\t\t\t( id ) => getBlockName( id ) === blockName\n\t\t\t\t\t\t) ),\n\t\t\t\tmayDisplayParentControls:\n\t\t\t\t\t_hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( clientId ),\n\t\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) && hasSelectedInnerBlock( clientId ),\n\t\t\t\tblockApiVersion: blockType?.apiVersion || 1,\n\t\t\t\tblockTitle: match?.title || blockType?.title,\n\t\t\t\teditorMode,\n\t\t\t\tisSubtreeDisabled:\n\t\t\t\t\tblockEditingMode === 'disabled' &&\n\t\t\t\t\tisBlockSubtreeDisabled( clientId ),\n\t\t\t\thasOverlay:\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive( clientId ) &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tinitialPosition:\n\t\t\t\t\t_isSelected &&\n\t\t\t\t\t( editorMode === 'edit' || editorMode === 'zoom-out' ) // Don't recalculate the initialPosition when toggling in/out of zoom-out mode\n\t\t\t\t\t\t? getSelectedBlocksInitialCaretPosition()\n\t\t\t\t\t\t: undefined,\n\t\t\t\tisHighlighted: isBlockHighlighted( clientId ),\n\t\t\t\tisMultiSelected,\n\t\t\t\tisPartiallySelected:\n\t\t\t\t\tisMultiSelected &&\n\t\t\t\t\t! __unstableIsFullySelected() &&\n\t\t\t\t\t! __unstableSelectionHasUnmergeableBlock(),\n\t\t\t\tisDragging: isBlockBeingDragged( clientId ),\n\t\t\t\thasChildSelected: isAncestorOfSelectedBlock,\n\t\t\t\tisBlockMovingMode: !! movingClientId,\n\t\t\t\tcanInsertMovingBlock:\n\t\t\t\t\tmovingClientId &&\n\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\tgetBlockName( movingClientId ),\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\tisEditingDisabled: blockEditingMode === 'disabled',\n\t\t\t\thasEditableOutline:\n\t\t\t\t\tblockEditingMode !== 'disabled' &&\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled',\n\t\t\t\toriginalBlockClientId: isInvalid\n\t\t\t\t\t? blocksWithSameName[ 0 ]\n\t\t\t\t\t: false,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\tconst {\n\t\tisPreviewMode,\n\t\t// Fill values that end up as a public API and may not be defined in\n\t\t// preview mode.\n\t\tmode = 'visual',\n\t\tisSelectionEnabled = false,\n\t\tisLocked = false,\n\t\tcanRemove = false,\n\t\tcanMove = false,\n\t\tblockWithoutAttributes,\n\t\tname,\n\t\tattributes,\n\t\tisValid,\n\t\tisSelected = false,\n\t\tthemeSupportsLayout,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tblockEditingMode,\n\t\teditorMode,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tindex,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\ttemplateLock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tclassName,\n\t\tdefaultClassName,\n\t\toriginalBlockClientId,\n\t} = selectedProps;\n\n\t// Users of the editor.BlockListBlock filter used to be able to\n\t// access the block prop.\n\t// Ideally these blocks would rely on the clientId prop only.\n\t// This is kept for backward compatibility reasons.\n\tconst block = useMemo(\n\t\t() => ( { ...blockWithoutAttributes, attributes } ),\n\t\t[ blockWithoutAttributes, attributes ]\n\t);\n\n\t// Block is sometimes not mounted at the right time, causing it be\n\t// undefined see issue for more info\n\t// https://github.com/WordPress/gutenberg/issues/17013\n\tif ( ! selectedProps ) {\n\t\treturn null;\n\t}\n\n\tconst privateContext = {\n\t\tisPreviewMode,\n\t\tclientId,\n\t\tclassName,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\teditorMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisBlockMovingMode,\n\t\tcanInsertMovingBlock,\n\t\ttemplateLock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\toriginalBlockClientId,\n\t\tthemeSupportsLayout,\n\t};\n\n\t// Here we separate between the props passed to BlockListBlock and any other\n\t// information we selected for internal use. BlockListBlock is a filtered\n\t// component and thus ALL the props are PUBLIC API.\n\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default memo( BlockListBlockProvider );\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"htmlEntities\"];","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { ENTER, SPACE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Zero width non-breaking space, used as padding for the paragraph when it is\n * empty.\n */\nexport const ZWNBSP = '\\ufeff';\n\nexport default function DefaultBlockAppender( { rootClientId } ) {\n\tconst { showPrompt, isLocked, placeholder, isManualGrid } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst isEmpty = ! getBlockCount( rootClientId );\n\t\t\tconst { bodyPlaceholder } = getSettings();\n\n\t\t\treturn {\n\t\t\t\tshowPrompt: isEmpty,\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tplaceholder: bodyPlaceholder,\n\t\t\t\tisManualGrid:\n\t\t\t\t\tgetBlockAttributes( rootClientId )?.layout\n\t\t\t\t\t\t?.isManualPlacement,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst { insertDefaultBlock, startTyping } = useDispatch( blockEditorStore );\n\n\tif ( isLocked || isManualGrid ) {\n\t\treturn null;\n\t}\n\n\tconst value =\n\t\tdecodeEntities( placeholder ) || __( 'Type / to choose a block' );\n\n\tconst onAppend = () => {\n\t\tinsertDefaultBlock( undefined, rootClientId );\n\t\tstartTyping();\n\t};\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif ( ENTER === event.keyCode || SPACE === event.keyCode ) {\n\t\t\t\t\t\tonAppend();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tonClick={ () => onAppend() }\n\t\t\t\tonFocus={ () => {\n\t\t\t\t\tif ( showPrompt ) {\n\t\t\t\t\t\tonAppend();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ showPrompt ? value : ZWNBSP }\n\t\t\t

    \n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { getDefaultBlockName } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport DefaultBlockAppender from '../default-block-appender';\nimport ButtonBlockAppender from '../button-block-appender';\nimport { store as blockEditorStore } from '../../store';\n\nfunction DefaultAppender( { rootClientId } ) {\n\tconst canInsertDefaultBlock = useSelect( ( select ) =>\n\t\tselect( blockEditorStore ).canInsertBlockType(\n\t\t\tgetDefaultBlockName(),\n\t\t\trootClientId\n\t\t)\n\t);\n\n\tif ( canInsertDefaultBlock ) {\n\t\t// Render the default block appender if the context supports use\n\t\t// of the default appender.\n\t\treturn ;\n\t}\n\n\t// Fallback in case the default block can't be inserted.\n\treturn (\n\t\t\n\t);\n}\n\nexport default function BlockListAppender( {\n\trootClientId,\n\tCustomAppender,\n\tclassName,\n\ttagName: TagName = 'div',\n} ) {\n\tconst isDragOver = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockInsertionPoint,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t\tgetBlockCount,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\t\t// Ideally we should also check for `isDragging` but currently it\n\t\t\t// requires a lot more setup. We can revisit this once we refactor\n\t\t\t// the DnD utility hooks.\n\t\t\treturn (\n\t\t\t\tisBlockInsertionPointVisible() &&\n\t\t\t\trootClientId === insertionPoint?.rootClientId &&\n\t\t\t\tgetBlockCount( rootClientId ) === 0\n\t\t\t);\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ CustomAppender ? (\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tuseMemo,\n\tcreateContext,\n\tuseReducer,\n\tuseLayoutEffect,\n} from '@wordpress/element';\nimport { Popover } from '@wordpress/components';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport usePopoverScroll from './use-popover-scroll';\n\nconst MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;\n\nexport const InsertionPointOpenRef = createContext();\n\nfunction BlockPopoverInbetween( {\n\tpreviousClientId,\n\tnextClientId,\n\tchildren,\n\t__unstablePopoverSlot,\n\t__unstableContentRef,\n\toperation = 'insert',\n\tnearestSide = 'right',\n\t...props\n} ) {\n\t// This is a temporary hack to get the inbetween inserter to recompute properly.\n\tconst [ popoverRecomputeCounter, forcePopoverRecompute ] = useReducer(\n\t\t// Module is there to make sure that the counter doesn't overflow.\n\t\t( s ) => ( s + 1 ) % MAX_POPOVER_RECOMPUTE_COUNTER,\n\t\t0\n\t);\n\n\tconst { orientation, rootClientId, isVisible } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tisBlockVisible,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst _rootClientId = getBlockRootClientId(\n\t\t\t\tpreviousClientId ?? nextClientId\n\t\t\t);\n\t\t\treturn {\n\t\t\t\torientation:\n\t\t\t\t\tgetBlockListSettings( _rootClientId )?.orientation ||\n\t\t\t\t\t'vertical',\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t\tisVisible:\n\t\t\t\t\tisBlockVisible( previousClientId ) &&\n\t\t\t\t\tisBlockVisible( nextClientId ),\n\t\t\t};\n\t\t},\n\t\t[ previousClientId, nextClientId ]\n\t);\n\tconst previousElement = useBlockElement( previousClientId );\n\tconst nextElement = useBlockElement( nextClientId );\n\tconst isVertical = orientation === 'vertical';\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tif (\n\t\t\t// popoverRecomputeCounter is by definition always equal or greater than 0.\n\t\t\t// This check is only there to satisfy the correctness of the\n\t\t\t// exhaustive-deps rule for the `useMemo` hook.\n\t\t\tpopoverRecomputeCounter < 0 ||\n\t\t\t( ! previousElement && ! nextElement ) ||\n\t\t\t! isVisible\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst contextElement =\n\t\t\toperation === 'group'\n\t\t\t\t? nextElement || previousElement\n\t\t\t\t: previousElement || nextElement;\n\n\t\treturn {\n\t\t\tcontextElement,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\tconst previousRect = previousElement\n\t\t\t\t\t? previousElement.getBoundingClientRect()\n\t\t\t\t\t: null;\n\t\t\t\tconst nextRect = nextElement\n\t\t\t\t\t? nextElement.getBoundingClientRect()\n\t\t\t\t\t: null;\n\n\t\t\t\tlet left = 0;\n\t\t\t\tlet top = 0;\n\t\t\t\tlet width = 0;\n\t\t\t\tlet height = 0;\n\n\t\t\t\tif ( operation === 'group' ) {\n\t\t\t\t\tconst targetRect = nextRect || previousRect;\n\t\t\t\t\ttop = targetRect.top;\n\t\t\t\t\t// No spacing is likely around blocks in this operation.\n\t\t\t\t\t// So width of the inserter containing rect is set to 0.\n\t\t\t\t\twidth = 0;\n\t\t\t\t\theight = targetRect.bottom - targetRect.top;\n\t\t\t\t\t// Popover calculates its distance from mid-block so some\n\t\t\t\t\t// adjustments are needed to make it appear in the right place.\n\t\t\t\t\tleft =\n\t\t\t\t\t\tnearestSide === 'left'\n\t\t\t\t\t\t\t? targetRect.left - 2\n\t\t\t\t\t\t\t: targetRect.right - 2;\n\t\t\t\t} else if ( isVertical ) {\n\t\t\t\t\t// vertical\n\t\t\t\t\ttop = previousRect ? previousRect.bottom : nextRect.top;\n\t\t\t\t\twidth = previousRect ? previousRect.width : nextRect.width;\n\t\t\t\t\theight =\n\t\t\t\t\t\tnextRect && previousRect\n\t\t\t\t\t\t\t? nextRect.top - previousRect.bottom\n\t\t\t\t\t\t\t: 0;\n\t\t\t\t\tleft = previousRect ? previousRect.left : nextRect.left;\n\t\t\t\t} else {\n\t\t\t\t\ttop = previousRect ? previousRect.top : nextRect.top;\n\t\t\t\t\theight = previousRect\n\t\t\t\t\t\t? previousRect.height\n\t\t\t\t\t\t: nextRect.height;\n\n\t\t\t\t\tif ( isRTL() ) {\n\t\t\t\t\t\t// non vertical, rtl\n\t\t\t\t\t\tleft = nextRect ? nextRect.right : previousRect.left;\n\t\t\t\t\t\twidth =\n\t\t\t\t\t\t\tpreviousRect && nextRect\n\t\t\t\t\t\t\t\t? previousRect.left - nextRect.right\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// non vertical, ltr\n\t\t\t\t\t\tleft = previousRect\n\t\t\t\t\t\t\t? previousRect.right\n\t\t\t\t\t\t\t: nextRect.left;\n\t\t\t\t\t\twidth =\n\t\t\t\t\t\t\tpreviousRect && nextRect\n\t\t\t\t\t\t\t\t? nextRect.left - previousRect.right\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn new window.DOMRect( left, top, width, height );\n\t\t\t},\n\t\t};\n\t}, [\n\t\tpreviousElement,\n\t\tnextElement,\n\t\tpopoverRecomputeCounter,\n\t\tisVertical,\n\t\tisVisible,\n\t\toperation,\n\t\tnearestSide,\n\t] );\n\n\tconst popoverScrollRef = usePopoverScroll( __unstableContentRef );\n\n\t// This is only needed for a smooth transition when moving blocks.\n\t// When blocks are moved up/down, their position can be set by\n\t// updating the `transform` property manually (i.e. without using CSS\n\t// transitions or animations). The animation, which can also scroll the block\n\t// editor, can sometimes cause the position of the Popover to get out of sync.\n\t// A MutationObserver is therefore used to make sure that changes to the\n\t// selectedElement's attribute (i.e. `transform`) can be tracked and used to\n\t// trigger the Popover to rerender.\n\tuseLayoutEffect( () => {\n\t\tif ( ! previousElement ) {\n\t\t\treturn;\n\t\t}\n\t\tconst observer = new window.MutationObserver( forcePopoverRecompute );\n\t\tobserver.observe( previousElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ previousElement ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! nextElement ) {\n\t\t\treturn;\n\t\t}\n\t\tconst observer = new window.MutationObserver( forcePopoverRecompute );\n\t\tobserver.observe( nextElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ nextElement ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! previousElement ) {\n\t\t\treturn;\n\t\t}\n\t\tpreviousElement.ownerDocument.defaultView.addEventListener(\n\t\t\t'resize',\n\t\t\tforcePopoverRecompute\n\t\t);\n\t\treturn () => {\n\t\t\tpreviousElement.ownerDocument.defaultView?.removeEventListener(\n\t\t\t\t'resize',\n\t\t\t\tforcePopoverRecompute\n\t\t\t);\n\t\t};\n\t}, [ previousElement ] );\n\n\t// If there's either a previous or a next element, show the inbetween popover.\n\t// Note that drag and drop uses the inbetween popover to show the drop indicator\n\t// before the first block and after the last block.\n\tif ( ( ! previousElement && ! nextElement ) || ! isVisible ) {\n\t\treturn null;\n\t}\n\n\t/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */\n\t// While ideally it would be enough to capture the\n\t// bubbling focus event from the Inserter, due to the\n\t// characteristics of click focusing of `button`s in\n\t// Firefox and Safari, it is not reliable.\n\t//\n\t// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t{ children }\n\t\t\t
    \n\t\t\n\t);\n\t/* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */\n}\n\nexport default BlockPopoverInbetween;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { __unstableMotion as motion } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockPopoverCover from './cover';\n\nconst animateVariants = {\n\thide: { opacity: 0, scaleY: 0.75 },\n\tshow: { opacity: 1, scaleY: 1 },\n\texit: { opacity: 0, scaleY: 0.9 },\n};\n\nfunction BlockDropZonePopover( {\n\t__unstablePopoverSlot,\n\t__unstableContentRef,\n} ) {\n\tconst { clientId } = useSelect( ( select ) => {\n\t\tconst { getBlockOrder, getBlockInsertionPoint } =\n\t\t\tselect( blockEditorStore );\n\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\tconst order = getBlockOrder( insertionPoint.rootClientId );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\treturn {\n\t\t\tclientId: order[ insertionPoint.index ],\n\t\t};\n\t}, [] );\n\tconst reducedMotion = useReducedMotion();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default BlockDropZonePopover;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRef, createContext, useContext } from '@wordpress/element';\nimport { __unstableMotion as motion } from '@wordpress/components';\nimport { useReducedMotion } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { store as blockEditorStore } from '../../store';\nimport BlockPopoverInbetween from '../block-popover/inbetween';\nimport BlockDropZonePopover from '../block-popover/drop-zone';\n\nexport const InsertionPointOpenRef = createContext();\n\nfunction InbetweenInsertionPointPopover( {\n\t__unstablePopoverSlot,\n\t__unstableContentRef,\n\toperation = 'insert',\n\tnearestSide = 'right',\n} ) {\n\tconst { selectBlock, hideInsertionPoint } = useDispatch( blockEditorStore );\n\tconst openRef = useContext( InsertionPointOpenRef );\n\tconst ref = useRef();\n\tconst {\n\t\torientation,\n\t\tpreviousClientId,\n\t\tnextClientId,\n\t\trootClientId,\n\t\tisInserterShown,\n\t\tisDistractionFree,\n\t\tisNavigationMode,\n\t\tisZoomOutMode,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockOrder,\n\t\t\tgetBlockListSettings,\n\t\t\tgetBlockInsertionPoint,\n\t\t\tisBlockBeingDragged,\n\t\t\tgetPreviousBlockClientId,\n\t\t\tgetNextBlockClientId,\n\t\t\tgetSettings,\n\t\t\tisNavigationMode: _isNavigationMode,\n\t\t\t__unstableGetEditorMode,\n\t\t} = select( blockEditorStore );\n\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\tconst order = getBlockOrder( insertionPoint.rootClientId );\n\n\t\tif ( ! order.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet _previousClientId = order[ insertionPoint.index - 1 ];\n\t\tlet _nextClientId = order[ insertionPoint.index ];\n\n\t\twhile ( isBlockBeingDragged( _previousClientId ) ) {\n\t\t\t_previousClientId = getPreviousBlockClientId( _previousClientId );\n\t\t}\n\n\t\twhile ( isBlockBeingDragged( _nextClientId ) ) {\n\t\t\t_nextClientId = getNextBlockClientId( _nextClientId );\n\t\t}\n\n\t\tconst settings = getSettings();\n\n\t\treturn {\n\t\t\tpreviousClientId: _previousClientId,\n\t\t\tnextClientId: _nextClientId,\n\t\t\torientation:\n\t\t\t\tgetBlockListSettings( insertionPoint.rootClientId )\n\t\t\t\t\t?.orientation || 'vertical',\n\t\t\trootClientId: insertionPoint.rootClientId,\n\t\t\tisNavigationMode: _isNavigationMode(),\n\t\t\tisDistractionFree: settings.isDistractionFree,\n\t\t\tisInserterShown: insertionPoint?.__unstableWithInserter,\n\t\t\tisZoomOutMode: __unstableGetEditorMode() === 'zoom-out',\n\t\t};\n\t}, [] );\n\tconst { getBlockEditingMode } = useSelect( blockEditorStore );\n\n\tconst disableMotion = useReducedMotion();\n\n\tfunction onClick( event ) {\n\t\tif (\n\t\t\tevent.target === ref.current &&\n\t\t\tnextClientId &&\n\t\t\tgetBlockEditingMode( nextClientId ) !== 'disabled'\n\t\t) {\n\t\t\tselectBlock( nextClientId, -1 );\n\t\t}\n\t}\n\n\tfunction maybeHideInserterPoint( event ) {\n\t\t// Only hide the inserter if it's triggered on the wrapper,\n\t\t// and the inserter is not open.\n\t\tif ( event.target === ref.current && ! openRef.current ) {\n\t\t\thideInsertionPoint();\n\t\t}\n\t}\n\n\tfunction onFocus( event ) {\n\t\t// Only handle click on the wrapper specifically, and not an event\n\t\t// bubbled from the inserter itself.\n\t\tif ( event.target !== ref.current ) {\n\t\t\topenRef.current = true;\n\t\t}\n\t}\n\n\tconst lineVariants = {\n\t\t// Initial position starts from the center and invisible.\n\t\tstart: {\n\t\t\topacity: 0,\n\t\t\tscale: 0,\n\t\t},\n\t\t// The line expands to fill the container. If the inserter is visible it\n\t\t// is delayed so it appears orchestrated.\n\t\trest: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\ttransition: { delay: isInserterShown ? 0.5 : 0, type: 'tween' },\n\t\t},\n\t\thover: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\ttransition: { delay: 0.5, type: 'tween' },\n\t\t},\n\t};\n\n\tconst inserterVariants = {\n\t\tstart: {\n\t\t\tscale: disableMotion ? 1 : 0,\n\t\t},\n\t\trest: {\n\t\t\tscale: 1,\n\t\t\ttransition: { delay: 0.4, type: 'tween' },\n\t\t},\n\t};\n\n\tif ( isDistractionFree && ! isNavigationMode ) {\n\t\treturn null;\n\t}\n\n\t// Zoom out mode should only show the insertion point for the insert operation.\n\t// Other operations such as \"group\" are when the editor tries to create a row\n\t// block by grouping the block being dragged with the block it's being dropped\n\t// onto.\n\tif ( isZoomOutMode && operation !== 'insert' ) {\n\t\treturn null;\n\t}\n\n\tconst orientationClassname =\n\t\torientation === 'horizontal' || operation === 'group'\n\t\t\t? 'is-horizontal'\n\t\t\t: 'is-vertical';\n\n\tconst className = clsx(\n\t\t'block-editor-block-list__insertion-point',\n\t\torientationClassname\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ isInserterShown && (\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\topenRef.current = isOpen;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonSelectOrClose={ () => {\n\t\t\t\t\t\t\t\topenRef.current = false;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function InsertionPoint( props ) {\n\tconst { insertionPoint, isVisible, isBlockListEmpty } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockInsertionPoint,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t\tgetBlockCount,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst blockInsertionPoint = getBlockInsertionPoint();\n\t\t\treturn {\n\t\t\t\tinsertionPoint: blockInsertionPoint,\n\t\t\t\tisVisible: isBlockInsertionPointVisible(),\n\t\t\t\tisBlockListEmpty:\n\t\t\t\t\tgetBlockCount( blockInsertionPoint?.rootClientId ) === 0,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tif (\n\t\t! isVisible ||\n\t\t// Don't render the insertion point if the block list is empty.\n\t\t// The insertion point will be represented by the appender instead.\n\t\tisBlockListEmpty\n\t) {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Render a popover that overlays the block when the desired operation is to replace it.\n\t * Otherwise, render a popover in between blocks for the indication of inserting between them.\n\t */\n\treturn insertionPoint.operation === 'replace' ? (\n\t\t\n\t) : (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useContext } from '@wordpress/element';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { InsertionPointOpenRef } from '../block-tools/insertion-point';\n\nexport function useInBetweenInserter() {\n\tconst openRef = useContext( InsertionPointOpenRef );\n\tconst isInBetweenInserterDisabled = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree ||\n\t\t\tselect( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',\n\t\t[]\n\t);\n\tconst {\n\t\tgetBlockListSettings,\n\t\tgetBlockIndex,\n\t\tisMultiSelecting,\n\t\tgetSelectedBlockClientIds,\n\t\tgetSettings,\n\t\tgetTemplateLock,\n\t\t__unstableIsWithinBlockOverlay,\n\t\tgetBlockEditingMode,\n\t\tgetBlockName,\n\t\tgetBlockAttributes,\n\t} = useSelect( blockEditorStore );\n\tconst { showInsertionPoint, hideInsertionPoint } =\n\t\tuseDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( isInBetweenInserterDisabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onMouseMove( event ) {\n\t\t\t\t// openRef is the reference to the insertion point between blocks.\n\t\t\t\t// If the reference is not set or the insertion point is already open, return.\n\t\t\t\tif ( openRef === undefined || openRef.current ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ignore text nodes sometimes detected in FireFox.\n\t\t\t\tif ( event.target.nodeType === event.target.TEXT_NODE ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isMultiSelecting() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t! event.target.classList.contains(\n\t\t\t\t\t\t'block-editor-block-list__layout'\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet rootClientId;\n\t\t\t\tif (\n\t\t\t\t\t! event.target.classList.contains( 'is-root-container' )\n\t\t\t\t) {\n\t\t\t\t\tconst blockElement = !! event.target.getAttribute(\n\t\t\t\t\t\t'data-block'\n\t\t\t\t\t)\n\t\t\t\t\t\t? event.target\n\t\t\t\t\t\t: event.target.closest( '[data-block]' );\n\t\t\t\t\trootClientId = blockElement.getAttribute( 'data-block' );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tgetTemplateLock( rootClientId ) ||\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled' ||\n\t\t\t\t\tgetBlockName( rootClientId ) === 'core/block' ||\n\t\t\t\t\t( rootClientId &&\n\t\t\t\t\t\tgetBlockAttributes( rootClientId ).layout\n\t\t\t\t\t\t\t?.isManualPlacement )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blockListSettings = getBlockListSettings( rootClientId );\n\t\t\t\tconst orientation =\n\t\t\t\t\tblockListSettings?.orientation || 'vertical';\n\t\t\t\tconst captureToolbars =\n\t\t\t\t\t!! blockListSettings?.__experimentalCaptureToolbars;\n\t\t\t\tconst offsetTop = event.clientY;\n\t\t\t\tconst offsetLeft = event.clientX;\n\n\t\t\t\tconst children = Array.from( event.target.children );\n\t\t\t\tlet element = children.find( ( blockEl ) => {\n\t\t\t\t\tconst blockElRect = blockEl.getBoundingClientRect();\n\t\t\t\t\treturn (\n\t\t\t\t\t\t( blockEl.classList.contains( 'wp-block' ) &&\n\t\t\t\t\t\t\torientation === 'vertical' &&\n\t\t\t\t\t\t\tblockElRect.top > offsetTop ) ||\n\t\t\t\t\t\t( blockEl.classList.contains( 'wp-block' ) &&\n\t\t\t\t\t\t\torientation === 'horizontal' &&\n\t\t\t\t\t\t\t( isRTL()\n\t\t\t\t\t\t\t\t? blockElRect.right < offsetLeft\n\t\t\t\t\t\t\t\t: blockElRect.left > offsetLeft ) )\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\tif ( ! element ) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// The block may be in an alignment wrapper, so check the first direct\n\t\t\t\t// child if the element has no ID.\n\t\t\t\tif ( ! element.id ) {\n\t\t\t\t\telement = element.firstElementChild;\n\n\t\t\t\t\tif ( ! element ) {\n\t\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Don't show the insertion point if a parent block has an \"overlay\"\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/34012#pullrequestreview-727762337\n\t\t\t\tconst clientId = element.id.slice( 'block-'.length );\n\t\t\t\tif (\n\t\t\t\t\t! clientId ||\n\t\t\t\t\t__unstableIsWithinBlockOverlay( clientId )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Don't show the inserter if the following conditions are met,\n\t\t\t\t// as it conflicts with the block toolbar:\n\t\t\t\t// 1. when hovering above or inside selected block(s)\n\t\t\t\t// 2. when the orientation is vertical\n\t\t\t\t// 3. when the __experimentalCaptureToolbars is not enabled\n\t\t\t\t// 4. when the Top Toolbar is not disabled\n\t\t\t\tif (\n\t\t\t\t\tgetSelectedBlockClientIds().includes( clientId ) &&\n\t\t\t\t\torientation === 'vertical' &&\n\t\t\t\t\t! captureToolbars &&\n\t\t\t\t\t! getSettings().hasFixedToolbar\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst elementRect = element.getBoundingClientRect();\n\n\t\t\t\tif (\n\t\t\t\t\t( orientation === 'horizontal' &&\n\t\t\t\t\t\t( event.clientY > elementRect.bottom ||\n\t\t\t\t\t\t\tevent.clientY < elementRect.top ) ) ||\n\t\t\t\t\t( orientation === 'vertical' &&\n\t\t\t\t\t\t( event.clientX > elementRect.right ||\n\t\t\t\t\t\t\tevent.clientX < elementRect.left ) )\n\t\t\t\t) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst index = getBlockIndex( clientId );\n\n\t\t\t\t// Don't show the in-between inserter before the first block in\n\t\t\t\t// the list (preserves the original behaviour).\n\t\t\t\tif ( index === 0 ) {\n\t\t\t\t\thideInsertionPoint();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tshowInsertionPoint( rootClientId, index, {\n\t\t\t\t\t__unstableWithInserter: true,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousemove', onMouseMove );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousemove', onMouseMove );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\topenRef,\n\t\t\tgetBlockListSettings,\n\t\t\tgetBlockIndex,\n\t\t\tisMultiSelecting,\n\t\t\tshowInsertionPoint,\n\t\t\thideInsertionPoint,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisInBetweenInserterDisabled,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Pass the returned ref callback to an element that should clear block\n * selection. Selection will only be cleared if the element is clicked directly,\n * not if a child element is clicked.\n *\n * @return {import('react').RefCallback} Ref callback.\n */\nexport function useBlockSelectionClearer() {\n\tconst { getSettings, hasSelectedBlock, hasMultiSelection } =\n\t\tuseSelect( blockEditorStore );\n\tconst { clearSelectedBlock } = useDispatch( blockEditorStore );\n\tconst { clearBlockSelection: isEnabled } = getSettings();\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isEnabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\tif ( ! hasSelectedBlock() && ! hasMultiSelection() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only handle clicks on the element, not the children.\n\t\t\t\tif ( event.target !== node ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearSelectedBlock();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t};\n\t\t},\n\t\t[ hasSelectedBlock, hasMultiSelection, clearSelectedBlock, isEnabled ]\n\t);\n}\n\nexport default function BlockSelectionClearer( props ) {\n\treturn
    ;\n}\n","/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useMemo, useState } from '@wordpress/element';\nimport { useRegistry } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getLayoutType } from '../../layouts';\n\n/** @typedef {import('../../selectors').WPDirectInsertBlock } WPDirectInsertBlock */\n\nconst pendingSettingsUpdates = new WeakMap();\n\nfunction useShallowMemo( value ) {\n\tconst [ prevValue, setPrevValue ] = useState( value );\n\tif ( ! isShallowEqual( prevValue, value ) ) {\n\t\tsetPrevValue( value );\n\t}\n\treturn prevValue;\n}\n\n/**\n * This hook is a side effect which updates the block-editor store when changes\n * happen to inner block settings. The given props are transformed into a\n * settings object, and if that is different from the current settings object in\n * the block-editor store, then the store is updated with the new settings which\n * came from props.\n *\n * @param {string} clientId The client ID of the block to update.\n * @param {string} parentLock\n * @param {string[]} allowedBlocks An array of block names which are permitted\n * in inner blocks.\n * @param {string[]} prioritizedInserterBlocks Block names and/or block variations to be prioritized in the inserter, in the format {blockName}/{variationName}.\n * @param {?WPDirectInsertBlock} defaultBlock The default block to insert: [ blockName, { blockAttributes } ].\n * @param {?boolean} directInsert If a default block should be inserted directly by the appender.\n *\n * @param {?WPDirectInsertBlock} __experimentalDefaultBlock A deprecated prop for the default block to insert: [ blockName, { blockAttributes } ]. Use `defaultBlock` instead.\n *\n * @param {?boolean} __experimentalDirectInsert A deprecated prop for whether a default block should be inserted directly by the appender. Use `directInsert` instead.\n *\n * @param {string} [templateLock] The template lock specified for the inner\n * blocks component. (e.g. \"all\")\n * @param {boolean} captureToolbars Whether or children toolbars should be shown\n * in the inner blocks component rather than on\n * the child block.\n * @param {string} orientation The direction in which the block\n * should face.\n * @param {Object} layout The layout object for the block container.\n */\nexport default function useNestedSettingsUpdate(\n\tclientId,\n\tparentLock,\n\tallowedBlocks,\n\tprioritizedInserterBlocks,\n\tdefaultBlock,\n\tdirectInsert,\n\t__experimentalDefaultBlock,\n\t__experimentalDirectInsert,\n\ttemplateLock,\n\tcaptureToolbars,\n\torientation,\n\tlayout\n) {\n\t// Instead of adding a useSelect mapping here, please add to the useSelect\n\t// mapping in InnerBlocks! Every subscription impacts performance.\n\n\tconst registry = useRegistry();\n\n\t// Implementors often pass a new array on every render,\n\t// and the contents of the arrays are just strings, so the entire array\n\t// can be passed as dependencies but We need to include the length of the array,\n\t// otherwise if the arrays change length but the first elements are equal the comparison,\n\t// does not works as expected.\n\tconst _allowedBlocks = useShallowMemo( allowedBlocks );\n\n\tconst _prioritizedInserterBlocks = useMemo(\n\t\t() => prioritizedInserterBlocks,\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\tprioritizedInserterBlocks\n\t);\n\n\tconst _templateLock =\n\t\ttemplateLock === undefined || parentLock === 'contentOnly'\n\t\t\t? parentLock\n\t\t\t: templateLock;\n\n\tuseLayoutEffect( () => {\n\t\tconst newSettings = {\n\t\t\tallowedBlocks: _allowedBlocks,\n\t\t\tprioritizedInserterBlocks: _prioritizedInserterBlocks,\n\t\t\ttemplateLock: _templateLock,\n\t\t};\n\n\t\t// These values are not defined for RN, so only include them if they\n\t\t// are defined.\n\t\tif ( captureToolbars !== undefined ) {\n\t\t\tnewSettings.__experimentalCaptureToolbars = captureToolbars;\n\t\t}\n\n\t\t// Orientation depends on layout,\n\t\t// ideally the separate orientation prop should be deprecated.\n\t\tif ( orientation !== undefined ) {\n\t\t\tnewSettings.orientation = orientation;\n\t\t} else {\n\t\t\tconst layoutType = getLayoutType( layout?.type );\n\t\t\tnewSettings.orientation = layoutType.getOrientation( layout );\n\t\t}\n\n\t\tif ( __experimentalDefaultBlock !== undefined ) {\n\t\t\tdeprecated( '__experimentalDefaultBlock', {\n\t\t\t\talternative: 'defaultBlock',\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.4',\n\t\t\t} );\n\t\t\tnewSettings.defaultBlock = __experimentalDefaultBlock;\n\t\t}\n\n\t\tif ( defaultBlock !== undefined ) {\n\t\t\tnewSettings.defaultBlock = defaultBlock;\n\t\t}\n\n\t\tif ( __experimentalDirectInsert !== undefined ) {\n\t\t\tdeprecated( '__experimentalDirectInsert', {\n\t\t\t\talternative: 'directInsert',\n\t\t\t\tsince: '6.3',\n\t\t\t\tversion: '6.4',\n\t\t\t} );\n\t\t\tnewSettings.directInsert = __experimentalDirectInsert;\n\t\t}\n\n\t\tif ( directInsert !== undefined ) {\n\t\t\tnewSettings.directInsert = directInsert;\n\t\t}\n\n\t\tif (\n\t\t\tnewSettings.directInsert !== undefined &&\n\t\t\ttypeof newSettings.directInsert !== 'boolean'\n\t\t) {\n\t\t\tdeprecated( 'Using `Function` as a `directInsert` argument', {\n\t\t\t\talternative: '`boolean` values',\n\t\t\t\tsince: '6.5',\n\t\t\t} );\n\t\t}\n\n\t\t// Batch updates to block list settings to avoid triggering cascading renders\n\t\t// for each container block included in a tree and optimize initial render.\n\t\t// To avoid triggering updateBlockListSettings for each container block\n\t\t// causing X re-renderings for X container blocks,\n\t\t// we batch all the updatedBlockListSettings in a single \"data\" batch\n\t\t// which results in a single re-render.\n\t\tif ( ! pendingSettingsUpdates.get( registry ) ) {\n\t\t\tpendingSettingsUpdates.set( registry, {} );\n\t\t}\n\t\tpendingSettingsUpdates.get( registry )[ clientId ] = newSettings;\n\t\twindow.queueMicrotask( () => {\n\t\t\tconst settings = pendingSettingsUpdates.get( registry );\n\t\t\tif ( Object.keys( settings ).length ) {\n\t\t\t\tconst { updateBlockListSettings } =\n\t\t\t\t\tregistry.dispatch( blockEditorStore );\n\t\t\t\tupdateBlockListSettings( settings );\n\t\t\t\tpendingSettingsUpdates.set( registry, {} );\n\t\t\t}\n\t\t} );\n\t}, [\n\t\tclientId,\n\t\t_allowedBlocks,\n\t\t_prioritizedInserterBlocks,\n\t\t_templateLock,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\tcaptureToolbars,\n\t\torientation,\n\t\tlayout,\n\t\tregistry,\n\t] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport {\n\tcloneBlock,\n\tcreateBlock,\n\tfindTransform,\n\tgetBlockTransforms,\n\tpasteHandler,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('react').SyntheticEvent} SyntheticEvent */\n/** @typedef {import('./types').WPDropOperation} WPDropOperation */\n\n/**\n * Retrieve the data for a block drop event.\n *\n * @param {SyntheticEvent} event The drop event.\n *\n * @return {Object} An object with block drag and drop data.\n */\nexport function parseDropEvent( event ) {\n\tlet result = {\n\t\tsrcRootClientId: null,\n\t\tsrcClientIds: null,\n\t\tsrcIndex: null,\n\t\ttype: null,\n\t\tblocks: null,\n\t};\n\n\tif ( ! event.dataTransfer ) {\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tresult = Object.assign(\n\t\t\tresult,\n\t\t\tJSON.parse( event.dataTransfer.getData( 'wp-blocks' ) )\n\t\t);\n\t} catch ( err ) {\n\t\treturn result;\n\t}\n\n\treturn result;\n}\n\n/**\n * A function that returns an event handler function for block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} getBlockIndex A function that gets the index of a block.\n * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.\n * @param {Function} moveBlocks A function that moves blocks.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n * @param {Function} clearSelectedBlock A function that clears block selection.\n * @param {string} operation The type of operation to perform on drop. Could be `insert` or `replace` or `group`.\n * @param {Function} getBlock A function that returns a block given its client id.\n * @return {Function} The event handler for a block drop event.\n */\nexport function onBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tgetBlockIndex,\n\tgetClientIdsOfDescendants,\n\tmoveBlocks,\n\tinsertOrReplaceBlocks,\n\tclearSelectedBlock,\n\toperation,\n\tgetBlock\n) {\n\treturn ( event ) => {\n\t\tconst {\n\t\t\tsrcRootClientId: sourceRootClientId,\n\t\t\tsrcClientIds: sourceClientIds,\n\t\t\ttype: dropType,\n\t\t\tblocks,\n\t\t} = parseDropEvent( event );\n\n\t\t// If the user is inserting a block.\n\t\tif ( dropType === 'inserter' ) {\n\t\t\tclearSelectedBlock();\n\t\t\tconst blocksToInsert = blocks.map( ( block ) =>\n\t\t\t\tcloneBlock( block )\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocksToInsert, true, null );\n\t\t}\n\n\t\t// If the user is moving a block.\n\t\tif ( dropType === 'block' ) {\n\t\t\tconst sourceBlockIndex = getBlockIndex( sourceClientIds[ 0 ] );\n\n\t\t\t// If the user is dropping to the same position, return early.\n\t\t\tif (\n\t\t\t\tsourceRootClientId === targetRootClientId &&\n\t\t\t\tsourceBlockIndex === targetBlockIndex\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is attempting to drop a block within its own\n\t\t\t// nested blocks, return early as this would create infinite\n\t\t\t// recursion.\n\t\t\tif (\n\t\t\t\tsourceClientIds.includes( targetRootClientId ) ||\n\t\t\t\tgetClientIdsOfDescendants( sourceClientIds ).some(\n\t\t\t\t\t( id ) => id === targetRootClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is dropping a block over another block, replace both blocks\n\t\t\t// with a group block containing them\n\t\t\tif ( operation === 'group' ) {\n\t\t\t\tconst blocksToInsert = sourceClientIds.map( ( clientId ) =>\n\t\t\t\t\tgetBlock( clientId )\n\t\t\t\t);\n\t\t\t\tinsertOrReplaceBlocks(\n\t\t\t\t\tblocksToInsert,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnull,\n\t\t\t\t\tsourceClientIds\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isAtSameLevel = sourceRootClientId === targetRootClientId;\n\t\t\tconst draggedBlockCount = sourceClientIds.length;\n\n\t\t\t// If the block is kept at the same level and moved downwards,\n\t\t\t// subtract to take into account that the blocks being dragged\n\t\t\t// were removed from the block list above the insertion point.\n\t\t\tconst insertIndex =\n\t\t\t\tisAtSameLevel && sourceBlockIndex < targetBlockIndex\n\t\t\t\t\t? targetBlockIndex - draggedBlockCount\n\t\t\t\t\t: targetBlockIndex;\n\n\t\t\tmoveBlocks( sourceClientIds, sourceRootClientId, insertIndex );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related file drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {Function} getSettings A function that gets the block editor settings.\n * @param {Function} updateBlockAttributes A function that updates a block's attributes.\n * @param {Function} canInsertBlockType A function that returns checks whether a block type can be inserted.\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related file drop event.\n */\nexport function onFilesDrop(\n\ttargetRootClientId,\n\tgetSettings,\n\tupdateBlockAttributes,\n\tcanInsertBlockType,\n\tinsertOrReplaceBlocks\n) {\n\treturn ( files ) => {\n\t\tif ( ! getSettings().mediaUpload ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformation = findTransform(\n\t\t\tgetBlockTransforms( 'from' ),\n\t\t\t( transform ) =>\n\t\t\t\ttransform.type === 'files' &&\n\t\t\t\tcanInsertBlockType( transform.blockName, targetRootClientId ) &&\n\t\t\t\ttransform.isMatch( files )\n\t\t);\n\n\t\tif ( transformation ) {\n\t\t\tconst blocks = transformation.transform(\n\t\t\t\tfiles,\n\t\t\t\tupdateBlockAttributes\n\t\t\t);\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related HTML drop events.\n *\n * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.\n *\n * @return {Function} The event handler for a block-related HTML drop event.\n */\nexport function onHTMLDrop( insertOrReplaceBlocks ) {\n\treturn ( HTML ) => {\n\t\tconst blocks = pasteHandler( { HTML, mode: 'BLOCKS' } );\n\n\t\tif ( blocks.length ) {\n\t\t\tinsertOrReplaceBlocks( blocks );\n\t\t}\n\t};\n}\n\n/**\n * A React hook for handling block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Object} options The optional options.\n * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.\n *\n * @return {Function} A function to be passed to the onDrop handler.\n */\nexport default function useOnBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\toptions = {}\n) {\n\tconst { operation = 'insert', nearestSide = 'right' } = options;\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tgetBlockOrder,\n\t\tgetBlocksByClientId,\n\t\tgetSettings,\n\t\tgetBlock,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\tconst {\n\t\tinsertBlocks,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\tclearSelectedBlock,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst registry = useRegistry();\n\n\tconst insertOrReplaceBlocks = useCallback(\n\t\t(\n\t\t\tblocks,\n\t\t\tupdateSelection = true,\n\t\t\tinitialPosition = 0,\n\t\t\tclientIdsToReplace = []\n\t\t) => {\n\t\t\tif ( ! Array.isArray( blocks ) ) {\n\t\t\t\tblocks = [ blocks ];\n\t\t\t}\n\t\t\tconst clientIds = getBlockOrder( targetRootClientId );\n\t\t\tconst clientId = clientIds[ targetBlockIndex ];\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\treplaceBlocks( clientId, blocks, undefined, initialPosition );\n\t\t\t} else if ( operation === 'group' ) {\n\t\t\t\tconst targetBlock = getBlock( clientId );\n\t\t\t\tif ( nearestSide === 'left' ) {\n\t\t\t\t\tblocks.push( targetBlock );\n\t\t\t\t} else {\n\t\t\t\t\tblocks.unshift( targetBlock );\n\t\t\t\t}\n\n\t\t\t\tconst groupInnerBlocks = blocks.map( ( block ) => {\n\t\t\t\t\treturn createBlock(\n\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\tblock.attributes,\n\t\t\t\t\t\tblock.innerBlocks\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\tconst areAllImages = blocks.every( ( block ) => {\n\t\t\t\t\treturn block.name === 'core/image';\n\t\t\t\t} );\n\n\t\t\t\tconst galleryBlock = canInsertBlockType(\n\t\t\t\t\t'core/gallery',\n\t\t\t\t\ttargetRootClientId\n\t\t\t\t);\n\n\t\t\t\tconst wrappedBlocks = createBlock(\n\t\t\t\t\tareAllImages && galleryBlock\n\t\t\t\t\t\t? 'core/gallery'\n\t\t\t\t\t\t: getGroupingBlockName(),\n\t\t\t\t\t{\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\ttype: 'flex',\n\t\t\t\t\t\t\tflexWrap:\n\t\t\t\t\t\t\t\tareAllImages && galleryBlock ? null : 'nowrap',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgroupInnerBlocks\n\t\t\t\t);\n\t\t\t\t// Need to make sure both the target block and the block being dragged are replaced\n\t\t\t\t// otherwise the dragged block will be duplicated.\n\t\t\t\treplaceBlocks(\n\t\t\t\t\t[ clientId, ...clientIdsToReplace ],\n\t\t\t\t\twrappedBlocks,\n\t\t\t\t\tundefined,\n\t\t\t\t\tinitialPosition\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tblocks,\n\t\t\t\t\ttargetBlockIndex,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tupdateSelection,\n\t\t\t\t\tinitialPosition\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tgetBlockOrder,\n\t\t\ttargetRootClientId,\n\t\t\ttargetBlockIndex,\n\t\t\toperation,\n\t\t\treplaceBlocks,\n\t\t\tgetBlock,\n\t\t\tnearestSide,\n\t\t\tcanInsertBlockType,\n\t\t\tgetGroupingBlockName,\n\t\t\tinsertBlocks,\n\t\t]\n\t);\n\n\tconst moveBlocks = useCallback(\n\t\t( sourceClientIds, sourceRootClientId, insertIndex ) => {\n\t\t\tif ( operation === 'replace' ) {\n\t\t\t\tconst sourceBlocks = getBlocksByClientId( sourceClientIds );\n\t\t\t\tconst targetBlockClientIds =\n\t\t\t\t\tgetBlockOrder( targetRootClientId );\n\t\t\t\tconst targetBlockClientId =\n\t\t\t\t\ttargetBlockClientIds[ targetBlockIndex ];\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t// Remove the source blocks.\n\t\t\t\t\tremoveBlocks( sourceClientIds, false );\n\t\t\t\t\t// Replace the target block with the source blocks.\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\ttargetBlockClientId,\n\t\t\t\t\t\tsourceBlocks,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t0\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\tsourceClientIds,\n\t\t\t\t\tsourceRootClientId,\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\tinsertIndex\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\toperation,\n\t\t\tgetBlockOrder,\n\t\t\tgetBlocksByClientId,\n\t\t\tmoveBlocksToPosition,\n\t\t\tregistry,\n\t\t\tremoveBlocks,\n\t\t\treplaceBlocks,\n\t\t\ttargetBlockIndex,\n\t\t\ttargetRootClientId,\n\t\t]\n\t);\n\n\tconst _onDrop = onBlockDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tmoveBlocks,\n\t\tinsertOrReplaceBlocks,\n\t\tclearSelectedBlock,\n\t\toperation,\n\t\tgetBlock\n\t);\n\tconst _onFilesDrop = onFilesDrop(\n\t\ttargetRootClientId,\n\t\tgetSettings,\n\t\tupdateBlockAttributes,\n\t\tcanInsertBlockType,\n\t\tinsertOrReplaceBlocks\n\t);\n\tconst _onHTMLDrop = onHTMLDrop( insertOrReplaceBlocks );\n\n\treturn ( event ) => {\n\t\tconst files = getFilesFromDataTransfer( event.dataTransfer );\n\t\tconst html = event.dataTransfer.getData( 'text/html' );\n\n\t\t/**\n\t\t * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.\n\t\t * The order of the checks is important to recognise the HTML drop.\n\t\t */\n\t\tif ( html ) {\n\t\t\t_onHTMLDrop( html );\n\t\t} else if ( files.length ) {\n\t\t\t_onFilesDrop( files );\n\t\t} else {\n\t\t\t_onDrop( event );\n\t\t}\n\t};\n}\n","/**\n * A string representing the name of an edge.\n *\n * @typedef {'top'|'right'|'bottom'|'left'} WPEdgeName\n */\n\n/**\n * @typedef {Object} WPPoint\n * @property {number} x The horizontal position.\n * @property {number} y The vertical position.\n */\n\n/**\n * Given a point, a DOMRect and the name of an edge, returns the distance to\n * that edge of the rect.\n *\n * This function works for edges that are horizontal or vertical (e.g. not\n * rotated), the following terms are used so that the function works in both\n * orientations:\n *\n * - Forward, meaning the axis running horizontally when an edge is vertical\n * and vertically when an edge is horizontal.\n * - Lateral, meaning the axis running vertically when an edge is vertical\n * and horizontally when an edge is horizontal.\n *\n * @param {WPPoint} point The point to measure distance from.\n * @param {DOMRect} rect A DOM Rect containing edge positions.\n * @param {WPEdgeName} edge The edge to measure to.\n */\nexport function getDistanceFromPointToEdge( point, rect, edge ) {\n\tconst isHorizontal = edge === 'top' || edge === 'bottom';\n\tconst { x, y } = point;\n\tconst pointLateralPosition = isHorizontal ? x : y;\n\tconst pointForwardPosition = isHorizontal ? y : x;\n\tconst edgeStart = isHorizontal ? rect.left : rect.top;\n\tconst edgeEnd = isHorizontal ? rect.right : rect.bottom;\n\tconst edgeForwardPosition = rect[ edge ];\n\n\t// Measure the straight line distance to the edge of the rect, when the\n\t// point is adjacent to the edge.\n\t// Else, if the point is positioned diagonally to the edge of the rect,\n\t// measure diagonally to the nearest corner that the edge meets.\n\tlet edgeLateralPosition;\n\tif (\n\t\tpointLateralPosition >= edgeStart &&\n\t\tpointLateralPosition <= edgeEnd\n\t) {\n\t\tedgeLateralPosition = pointLateralPosition;\n\t} else if ( pointLateralPosition < edgeEnd ) {\n\t\tedgeLateralPosition = edgeStart;\n\t} else {\n\t\tedgeLateralPosition = edgeEnd;\n\t}\n\n\treturn Math.sqrt(\n\t\t( pointLateralPosition - edgeLateralPosition ) ** 2 +\n\t\t\t( pointForwardPosition - edgeForwardPosition ) ** 2\n\t);\n}\n\n/**\n * Given a point, a DOMRect and a list of allowed edges returns the name of and\n * distance to the nearest edge.\n *\n * @param {WPPoint} point The point to measure distance from.\n * @param {DOMRect} rect A DOM Rect containing edge positions.\n * @param {WPEdgeName[]} allowedEdges A list of the edges included in the\n * calculation. Defaults to all edges.\n *\n * @return {[number, string]} An array where the first value is the distance\n * and a second is the edge name.\n */\nexport function getDistanceToNearestEdge(\n\tpoint,\n\trect,\n\tallowedEdges = [ 'top', 'bottom', 'left', 'right' ]\n) {\n\tlet candidateDistance;\n\tlet candidateEdge;\n\n\tallowedEdges.forEach( ( edge ) => {\n\t\tconst distance = getDistanceFromPointToEdge( point, rect, edge );\n\n\t\tif ( candidateDistance === undefined || distance < candidateDistance ) {\n\t\t\tcandidateDistance = distance;\n\t\t\tcandidateEdge = edge;\n\t\t}\n\t} );\n\n\treturn [ candidateDistance, candidateEdge ];\n}\n\n/**\n * Is the point contained by the rectangle.\n *\n * @param {WPPoint} point The point.\n * @param {DOMRect} rect The rectangle.\n *\n * @return {boolean} True if the point is contained by the rectangle, false otherwise.\n */\nexport function isPointContainedByRect( point, rect ) {\n\treturn (\n\t\trect.left <= point.x &&\n\t\trect.right >= point.x &&\n\t\trect.top <= point.y &&\n\t\trect.bottom >= point.y\n\t);\n}\n\n/**\n * Is the point within the top and bottom boundaries of the rectangle.\n *\n * @param {WPPoint} point The point.\n * @param {DOMRect} rect The rectangle.\n *\n * @return {boolean} True if the point is within top and bottom of rectangle, false otherwise.\n */\nexport function isPointWithinTopAndBottomBoundariesOfRect( point, rect ) {\n\treturn rect.top <= point.y && rect.bottom >= point.y;\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { useCallback, useState } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport {\n\tisUnmodifiedDefaultBlock as getIsUnmodifiedDefaultBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useOnBlockDrop from '../use-on-block-drop';\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n\tisPointWithinTopAndBottomBoundariesOfRect,\n} from '../../utils/math';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst THRESHOLD_DISTANCE = 30;\nconst MINIMUM_HEIGHT_FOR_THRESHOLD = 120;\nconst MINIMUM_WIDTH_FOR_THRESHOLD = 120;\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */\n\n/**\n * The orientation of a block list.\n *\n * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation\n */\n\n/**\n * The insert position when dropping a block.\n *\n * @typedef {'before'|'after'} WPInsertPosition\n */\n\n/**\n * @typedef {Object} WPBlockData\n * @property {boolean} isUnmodifiedDefaultBlock Is the block unmodified default block.\n * @property {() => DOMRect} getBoundingClientRect Get the bounding client rect of the block.\n * @property {number} blockIndex The index of the block.\n */\n\n/**\n * Get the drop target position from a given drop point and the orientation.\n *\n * @param {WPBlockData[]} blocksData The block data list.\n * @param {WPPoint} position The position of the item being dragged.\n * @param {WPBlockListOrientation} orientation The orientation of the block list.\n * @param {Object} options Additional options.\n * @return {[number, WPDropOperation]} The drop target position.\n */\nexport function getDropTargetPosition(\n\tblocksData,\n\tposition,\n\torientation = 'vertical',\n\toptions = {}\n) {\n\tconst allowedEdges =\n\t\torientation === 'horizontal'\n\t\t\t? [ 'left', 'right' ]\n\t\t\t: [ 'top', 'bottom' ];\n\n\tlet nearestIndex = 0;\n\tlet insertPosition = 'before';\n\tlet minDistance = Infinity;\n\tlet targetBlockIndex = null;\n\tlet nearestSide = 'right';\n\n\tconst {\n\t\tdropZoneElement,\n\t\tparentBlockOrientation,\n\t\trootBlockIndex = 0,\n\t} = options;\n\n\t// Allow before/after when dragging over the top/bottom edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation !== 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'top',\n\t\t\t'bottom',\n\t\t] );\n\n\t\t// If dragging over the top or bottom of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group or Cover.\n\t\tif (\n\t\t\trect.height > MINIMUM_HEIGHT_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif ( edge === 'top' ) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif ( edge === 'bottom' ) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst isRightToLeft = isRTL();\n\n\t// Allow before/after when dragging over the left/right edges of the drop zone.\n\tif ( dropZoneElement && parentBlockOrientation === 'horizontal' ) {\n\t\tconst rect = dropZoneElement.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge( position, rect, [\n\t\t\t'left',\n\t\t\t'right',\n\t\t] );\n\n\t\t// If dragging over the left or right of the drop zone, insert the block\n\t\t// before or after the parent block. This only applies to blocks that use\n\t\t// a drop zone element, typically container blocks such as Group.\n\t\tif (\n\t\t\trect.width > MINIMUM_WIDTH_FOR_THRESHOLD &&\n\t\t\tdistance < THRESHOLD_DISTANCE\n\t\t) {\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'right' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'left' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex, 'before' ];\n\t\t\t}\n\t\t\tif (\n\t\t\t\t( isRightToLeft && edge === 'left' ) ||\n\t\t\t\t( ! isRightToLeft && edge === 'right' )\n\t\t\t) {\n\t\t\t\treturn [ rootBlockIndex + 1, 'after' ];\n\t\t\t}\n\t\t}\n\t}\n\n\tblocksData.forEach(\n\t\t( {\n\t\t\tisUnmodifiedDefaultBlock,\n\t\t\tgetBoundingClientRect,\n\t\t\tblockIndex,\n\t\t\tblockOrientation,\n\t\t} ) => {\n\t\t\tconst rect = getBoundingClientRect();\n\n\t\t\tlet [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\tallowedEdges\n\t\t\t);\n\t\t\t// If the the point is close to a side, prioritize that side.\n\t\t\tconst [ sideDistance, sideEdge ] = getDistanceToNearestEdge(\n\t\t\t\tposition,\n\t\t\t\trect,\n\t\t\t\t[ 'left', 'right' ]\n\t\t\t);\n\n\t\t\tconst isPointInsideRect = isPointContainedByRect( position, rect );\n\n\t\t\t// Prioritize the element if the point is inside of an unmodified default block.\n\t\t\tif ( isUnmodifiedDefaultBlock && isPointInsideRect ) {\n\t\t\t\tdistance = 0;\n\t\t\t} else if (\n\t\t\t\torientation === 'vertical' &&\n\t\t\t\tblockOrientation !== 'horizontal' &&\n\t\t\t\t( ( isPointInsideRect && sideDistance < THRESHOLD_DISTANCE ) ||\n\t\t\t\t\t( ! isPointInsideRect &&\n\t\t\t\t\t\tisPointWithinTopAndBottomBoundariesOfRect(\n\t\t\t\t\t\t\tposition,\n\t\t\t\t\t\t\trect\n\t\t\t\t\t\t) ) )\n\t\t\t) {\n\t\t\t\t/**\n\t\t\t\t * This condition should only apply when the layout is vertical (otherwise there's\n\t\t\t\t * no need to create a Row) and dropzones should only activate when the block is\n\t\t\t\t * either within and close to the sides of the target block or on its outer sides.\n\t\t\t\t */\n\t\t\t\ttargetBlockIndex = blockIndex;\n\t\t\t\tnearestSide = sideEdge;\n\t\t\t}\n\n\t\t\tif ( distance < minDistance ) {\n\t\t\t\t// Where the dropped block will be inserted on the nearest block.\n\t\t\t\tinsertPosition =\n\t\t\t\t\tedge === 'bottom' ||\n\t\t\t\t\t( ! isRightToLeft && edge === 'right' ) ||\n\t\t\t\t\t( isRightToLeft && edge === 'left' )\n\t\t\t\t\t\t? 'after'\n\t\t\t\t\t\t: 'before';\n\n\t\t\t\t// Update the currently known best candidate.\n\t\t\t\tminDistance = distance;\n\t\t\t\tnearestIndex = blockIndex;\n\t\t\t}\n\t\t}\n\t);\n\n\tconst adjacentIndex =\n\t\tnearestIndex + ( insertPosition === 'after' ? 1 : -1 );\n\tconst isNearestBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ nearestIndex ]?.isUnmodifiedDefaultBlock;\n\tconst isAdjacentBlockUnmodifiedDefaultBlock =\n\t\t!! blocksData[ adjacentIndex ]?.isUnmodifiedDefaultBlock;\n\n\t// If the target index is set then group with the block at that index.\n\tif ( targetBlockIndex !== null ) {\n\t\treturn [ targetBlockIndex, 'group', nearestSide ];\n\t}\n\t// If both blocks are not unmodified default blocks then just insert between them.\n\tif (\n\t\t! isNearestBlockUnmodifiedDefaultBlock &&\n\t\t! isAdjacentBlockUnmodifiedDefaultBlock\n\t) {\n\t\t// If the user is dropping to the trailing edge of the block\n\t\t// add 1 to the index to represent dragging after.\n\t\tconst insertionIndex =\n\t\t\tinsertPosition === 'after' ? nearestIndex + 1 : nearestIndex;\n\t\treturn [ insertionIndex, 'insert' ];\n\t}\n\n\t// Otherwise, replace the nearest unmodified default block.\n\treturn [\n\t\tisNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex,\n\t\t'replace',\n\t];\n}\n\n/**\n * Check if the dragged blocks can be dropped on the target.\n * @param {Function} getBlockType\n * @param {Object[]} allowedBlocks\n * @param {string[]} draggedBlockNames\n * @param {string} targetBlockName\n * @return {boolean} Whether the dragged blocks can be dropped on the target.\n */\nexport function isDropTargetValid(\n\tgetBlockType,\n\tallowedBlocks,\n\tdraggedBlockNames,\n\ttargetBlockName\n) {\n\t// At root level allowedBlocks is undefined and all blocks are allowed.\n\t// Otherwise, check if all dragged blocks are allowed.\n\tlet areBlocksAllowed = true;\n\tif ( allowedBlocks ) {\n\t\tconst allowedBlockNames = allowedBlocks?.map( ( { name } ) => name );\n\n\t\tareBlocksAllowed = draggedBlockNames.every( ( name ) =>\n\t\t\tallowedBlockNames?.includes( name )\n\t\t);\n\t}\n\n\t// Work out if dragged blocks have an allowed parent and if so\n\t// check target block matches the allowed parent.\n\tconst draggedBlockTypes = draggedBlockNames.map( ( name ) =>\n\t\tgetBlockType( name )\n\t);\n\tconst targetMatchesDraggedBlockParents = draggedBlockTypes.every(\n\t\t( block ) => {\n\t\t\tconst [ allowedParentName ] = block?.parent || [];\n\t\t\tif ( ! allowedParentName ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn allowedParentName === targetBlockName;\n\t\t}\n\t);\n\n\treturn areBlocksAllowed && targetMatchesDraggedBlockParents;\n}\n\n/**\n * Checks if the given element is an insertion point.\n *\n * @param {EventTarget|null} targetToCheck - The element to check.\n * @param {Document} ownerDocument - The owner document of the element.\n * @return {boolean} True if the element is a insertion point, false otherwise.\n */\nfunction isInsertionPoint( targetToCheck, ownerDocument ) {\n\tconst { defaultView } = ownerDocument;\n\n\treturn !! (\n\t\tdefaultView &&\n\t\ttargetToCheck instanceof defaultView.HTMLElement &&\n\t\ttargetToCheck.dataset.isInsertionPoint\n\t);\n}\n\n/**\n * @typedef {Object} WPBlockDropZoneConfig\n * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.\n * @property {string} rootClientId The root client id for the block list.\n */\n\n/**\n * A React hook that can be used to make a block list handle drag and drop.\n *\n * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.\n */\nexport default function useBlockDropZone( {\n\tdropZoneElement,\n\t// An undefined value represents a top-level block. Default to an empty\n\t// string for this so that `targetRootClientId` can be easily compared to\n\t// values returned by the `getRootBlockClientId` selector, which also uses\n\t// an empty string to represent top-level blocks.\n\trootClientId: targetRootClientId = '',\n\tparentClientId: parentBlockClientId = '',\n\tisDisabled = false,\n} = {} ) {\n\tconst registry = useRegistry();\n\tconst [ dropTarget, setDropTarget ] = useState( {\n\t\tindex: null,\n\t\toperation: 'insert',\n\t} );\n\n\tconst { getBlockType, getBlockVariations, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockListSettings,\n\t\tgetBlocks,\n\t\tgetBlockIndex,\n\t\tgetDraggedBlockClientIds,\n\t\tgetBlockNamesByClientId,\n\t\tgetAllowedBlocks,\n\t\tisDragging,\n\t\tisGroupable,\n\t\tisZoomOutMode,\n\t\tgetSectionRootClientId,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst {\n\t\tshowInsertionPoint,\n\t\thideInsertionPoint,\n\t\tstartDragging,\n\t\tstopDragging,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst onBlockDrop = useOnBlockDrop(\n\t\tdropTarget.operation === 'before' || dropTarget.operation === 'after'\n\t\t\t? parentBlockClientId\n\t\t\t: targetRootClientId,\n\t\tdropTarget.index,\n\t\t{\n\t\t\toperation: dropTarget.operation,\n\t\t\tnearestSide: dropTarget.nearestSide,\n\t\t}\n\t);\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, ownerDocument ) => {\n\t\t\t\tif ( ! isDragging() ) {\n\t\t\t\t\t// When dragging from the desktop, no drag start event is fired.\n\t\t\t\t\t// So, ensure that the drag state is set when the user drags over a drop zone.\n\t\t\t\t\tstartDragging();\n\t\t\t\t}\n\t\t\t\tconst allowedBlocks = getAllowedBlocks( targetRootClientId );\n\t\t\t\tconst targetBlockName = getBlockNamesByClientId( [\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t] )[ 0 ];\n\n\t\t\t\tconst draggedBlockNames = getBlockNamesByClientId(\n\t\t\t\t\tgetDraggedBlockClientIds()\n\t\t\t\t);\n\t\t\t\tconst isBlockDroppingAllowed = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\tallowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetBlockName\n\t\t\t\t);\n\n\t\t\t\tif ( ! isBlockDroppingAllowed ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\n\t\t\t\t// In Zoom Out mode, if the target is not the section root provided by settings then\n\t\t\t\t// do not allow dropping as the drop target is not within the root (that which is\n\t\t\t\t// treated as \"the content\" by Zoom Out Mode).\n\t\t\t\tif (\n\t\t\t\t\tisZoomOutMode() &&\n\t\t\t\t\tsectionRootClientId !== targetRootClientId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocks = getBlocks( targetRootClientId );\n\n\t\t\t\t// The block list is empty, don't show the insertion point but still allow dropping.\n\t\t\t\tif ( blocks.length === 0 ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tshowInsertionPoint( targetRootClientId, 0, {\n\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst blocksData = blocks.map( ( block ) => {\n\t\t\t\t\tconst clientId = block.clientId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisUnmodifiedDefaultBlock:\n\t\t\t\t\t\t\tgetIsUnmodifiedDefaultBlock( block ),\n\t\t\t\t\t\tgetBoundingClientRect: () =>\n\t\t\t\t\t\t\townerDocument\n\t\t\t\t\t\t\t\t.getElementById( `block-${ clientId }` )\n\t\t\t\t\t\t\t\t.getBoundingClientRect(),\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t\tblockOrientation:\n\t\t\t\t\t\t\tgetBlockListSettings( clientId )?.orientation,\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst dropTargetPosition = getDropTargetPosition(\n\t\t\t\t\tblocksData,\n\t\t\t\t\t{ x: event.clientX, y: event.clientY },\n\t\t\t\t\tgetBlockListSettings( targetRootClientId )?.orientation,\n\t\t\t\t\t{\n\t\t\t\t\t\tdropZoneElement,\n\t\t\t\t\t\tparentBlockClientId,\n\t\t\t\t\t\tparentBlockOrientation: parentBlockClientId\n\t\t\t\t\t\t\t? getBlockListSettings( parentBlockClientId )\n\t\t\t\t\t\t\t\t\t?.orientation\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\trootBlockIndex: getBlockIndex( targetRootClientId ),\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst [ targetIndex, operation, nearestSide ] =\n\t\t\t\t\tdropTargetPosition;\n\n\t\t\t\tif ( isZoomOutMode() && operation !== 'insert' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( operation === 'group' ) {\n\t\t\t\t\tconst targetBlock = blocks[ targetIndex ];\n\t\t\t\t\tconst areAllImages = [\n\t\t\t\t\t\ttargetBlock.name,\n\t\t\t\t\t\t...draggedBlockNames,\n\t\t\t\t\t].every( ( name ) => name === 'core/image' );\n\t\t\t\t\tconst canInsertGalleryBlock = canInsertBlockType(\n\t\t\t\t\t\t'core/gallery',\n\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t);\n\t\t\t\t\tconst areGroupableBlocks = isGroupable( [\n\t\t\t\t\t\ttargetBlock.clientId,\n\t\t\t\t\t\tgetDraggedBlockClientIds(),\n\t\t\t\t\t] );\n\t\t\t\t\tconst groupBlockVariations = getBlockVariations(\n\t\t\t\t\t\tgetGroupingBlockName(),\n\t\t\t\t\t\t'block'\n\t\t\t\t\t);\n\t\t\t\t\tconst canInsertRow =\n\t\t\t\t\t\tgroupBlockVariations &&\n\t\t\t\t\t\tgroupBlockVariations.find(\n\t\t\t\t\t\t\t( { name } ) => name === 'group-row'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t// If the dragged blocks and the target block are all images,\n\t\t\t\t\t// check if it is creatable either a Row variation or a Gallery block.\n\t\t\t\t\tif (\n\t\t\t\t\t\tareAllImages &&\n\t\t\t\t\t\t! canInsertGalleryBlock &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// If the dragged blocks and the target block are not all images,\n\t\t\t\t\t// check if it is creatable a Row variation.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! areAllImages &&\n\t\t\t\t\t\t( ! areGroupableBlocks || ! canInsertRow )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tsetDropTarget( {\n\t\t\t\t\t\tindex: targetIndex,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst insertionPointClientId = [\n\t\t\t\t\t\t'before',\n\t\t\t\t\t\t'after',\n\t\t\t\t\t].includes( operation )\n\t\t\t\t\t\t? parentBlockClientId\n\t\t\t\t\t\t: targetRootClientId;\n\n\t\t\t\t\tshowInsertionPoint( insertionPointClientId, targetIndex, {\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tnearestSide,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t\t[\n\t\t\t\tisDragging,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetBlockType,\n\t\t\t\tgetSectionRootClientId,\n\t\t\t\tisZoomOutMode,\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tdropZoneElement,\n\t\t\t\tparentBlockClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tregistry,\n\t\t\t\tstartDragging,\n\t\t\t\tshowInsertionPoint,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tisGroupable,\n\t\t\t\tgetBlockVariations,\n\t\t\t\tgetGroupingBlockName,\n\t\t\t]\n\t\t),\n\t\t200\n\t);\n\n\treturn useDropZone( {\n\t\tdropZoneElement,\n\t\tisDisabled,\n\t\tonDrop: onBlockDrop,\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget.ownerDocument );\n\t\t},\n\t\tonDragLeave( event ) {\n\t\t\tconst { ownerDocument } = event.currentTarget;\n\n\t\t\t// If the drag event is leaving the drop zone and entering an insertion point,\n\t\t\t// do not hide the insertion point as it is conceptually within the dropzone.\n\t\t\tif (\n\t\t\t\tisInsertionPoint( event.relatedTarget, ownerDocument ) ||\n\t\t\t\tisInsertionPoint( event.target, ownerDocument )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrottled.cancel();\n\t\t\thideInsertionPoint();\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\tstopDragging();\n\t\t\thideInsertionPoint();\n\t\t},\n\t} );\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef, useMemo, memo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tgetBlockSupport,\n\tstore as blocksStore,\n\t__unstableGetInnerBlocksProps as getInnerBlocksProps,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport ButtonBlockAppender from './button-block-appender';\nimport DefaultBlockAppender from './default-block-appender';\nimport useNestedSettingsUpdate from './use-nested-settings-update';\nimport useInnerBlockTemplateSync from './use-inner-block-template-sync';\nimport useBlockContext from './use-block-context';\nimport { BlockListItems } from '../block-list';\nimport { BlockContextProvider } from '../block-context';\nimport { useBlockEditContext } from '../block-edit/context';\nimport useBlockSync from '../provider/use-block-sync';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDropZone from '../use-block-drop-zone';\nimport { unlock } from '../../lock-unlock';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockContext( { children, clientId } ) {\n\tconst context = useBlockContext( clientId );\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nconst BlockListItemsMemo = memo( BlockListItems );\n\n/**\n * InnerBlocks is a component which allows a single block to have multiple blocks\n * as children. The UncontrolledInnerBlocks component is used whenever the inner\n * blocks are not controlled by another entity. In other words, it is normally\n * used for inner blocks in the post editor\n *\n * @param {Object} props The component props.\n */\nfunction UncontrolledInnerBlocks( props ) {\n\tconst {\n\t\tclientId,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\twrapperRef,\n\t\ttemplateInsertUpdatesSelection,\n\t\t__experimentalCaptureToolbars: captureToolbars,\n\t\t__experimentalAppenderTagName,\n\t\trenderAppender,\n\t\torientation,\n\t\tplaceholder,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t} = props;\n\n\tuseNestedSettingsUpdate(\n\t\tclientId,\n\t\tparentLock,\n\t\tallowedBlocks,\n\t\tprioritizedInserterBlocks,\n\t\tdefaultBlock,\n\t\tdirectInsert,\n\t\t__experimentalDefaultBlock,\n\t\t__experimentalDirectInsert,\n\t\ttemplateLock,\n\t\tcaptureToolbars,\n\t\torientation,\n\t\tlayout\n\t);\n\n\tuseInnerBlockTemplateSync(\n\t\tclientId,\n\t\ttemplate,\n\t\ttemplateLock,\n\t\ttemplateInsertUpdatesSelection\n\t);\n\n\tconst defaultLayoutBlockSupport =\n\t\tgetBlockSupport( name, 'layout' ) ||\n\t\tgetBlockSupport( name, '__experimentalLayout' ) ||\n\t\tEMPTY_OBJECT;\n\n\tconst { allowSizingOnChildren = false } = defaultLayoutBlockSupport;\n\tconst usedLayout = layout || defaultLayoutBlockSupport;\n\n\tconst memoedLayout = useMemo(\n\t\t() => ( {\n\t\t\t// Default layout will know about any content/wide size defined by the theme.\n\t\t\t...defaultLayout,\n\t\t\t...usedLayout,\n\t\t\t...( allowSizingOnChildren && {\n\t\t\t\tallowSizingOnChildren: true,\n\t\t\t} ),\n\t\t} ),\n\t\t[ defaultLayout, usedLayout, allowSizingOnChildren ]\n\t);\n\n\t// For controlled inner blocks, we don't want a change in blocks to\n\t// re-render the blocks list.\n\tconst items = (\n\t\t\n\t);\n\n\tif (\n\t\t! blockType?.providesContext ||\n\t\tObject.keys( blockType.providesContext ).length === 0\n\t) {\n\t\treturn items;\n\t}\n\n\treturn { items };\n}\n\n/**\n * The controlled inner blocks component wraps the uncontrolled inner blocks\n * component with the blockSync hook. This keeps the innerBlocks of the block in\n * the block-editor store in sync with the blocks of the controlling entity. An\n * example of an inner block controller is a template part block, which provides\n * its own blocks from the template part entity data source.\n *\n * @param {Object} props The component props.\n */\nfunction ControlledInnerBlocks( props ) {\n\tuseBlockSync( props );\n\treturn ;\n}\n\nconst ForwardedInnerBlocks = forwardRef( ( props, ref ) => {\n\tconst innerBlocksProps = useInnerBlocksProps( { ref }, props );\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n} );\n\n/**\n * This hook is used to lightly mark an element as an inner blocks wrapper\n * element. Call this hook and pass the returned props to the element to mark as\n * an inner blocks wrapper, automatically rendering inner blocks as children. If\n * you define a ref for the element, it is important to pass the ref to this\n * hook, which the hook in turn will pass to the component through the props it\n * returns. Optionally, you can also pass any other props through this hook, and\n * they will be merged and returned.\n *\n * @param {Object} props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options Optional. Inner blocks options.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport function useInnerBlocksProps( props = {}, options = {} ) {\n\tconst {\n\t\t__unstableDisableLayoutClassNames,\n\t\t__unstableDisableDropZone,\n\t\tdropZoneElement,\n\t} = options;\n\tconst {\n\t\tclientId,\n\t\tlayout = null,\n\t\t__unstableLayoutClassNames: layoutClassNames = '',\n\t} = useBlockEditContext();\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockSettings,\n\t\t\t\tisDragging,\n\t\t\t\tgetSectionRootClientId,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tlet _isDropZoneDisabled;\n\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn { isDropZoneDisabled: _isDropZoneDisabled };\n\t\t\t}\n\n\t\t\tconst { hasBlockSupport, getBlockType } = select( blocksStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst enableClickThrough =\n\t\t\t\t__unstableGetEditorMode() === 'navigation';\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\t\t\tconst parentClientId = getBlockRootClientId( clientId );\n\t\t\tconst [ defaultLayout ] = getBlockSettings( clientId, 'layout' );\n\n\t\t\t_isDropZoneDisabled = blockEditingMode === 'disabled';\n\n\t\t\tif ( __unstableGetEditorMode() === 'zoom-out' ) {\n\t\t\t\t// In zoom out mode, we want to disable the drop zone for the sections.\n\t\t\t\t// The inner blocks belonging to the section drop zone is\n\t\t\t\t// already disabled by the blocks themselves being disabled.\n\t\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\n\t\t\t\t_isDropZoneDisabled = clientId !== sectionRootClientId;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t__experimentalCaptureToolbars: hasBlockSupport(\n\t\t\t\t\tblockName,\n\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\thasOverlay:\n\t\t\t\t\tblockName !== 'core/template' &&\n\t\t\t\t\t! isBlockSelected( clientId ) &&\n\t\t\t\t\t! hasSelectedInnerBlock( clientId, true ) &&\n\t\t\t\t\tenableClickThrough &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tname: blockName,\n\t\t\t\tblockType: getBlockType( blockName ),\n\t\t\t\tparentLock: getTemplateLock( parentClientId ),\n\t\t\t\tparentClientId,\n\t\t\t\tisDropZoneDisabled: _isDropZoneDisabled,\n\t\t\t\tdefaultLayout,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst {\n\t\t__experimentalCaptureToolbars,\n\t\thasOverlay,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tparentClientId,\n\t\tisDropZoneDisabled,\n\t\tdefaultLayout,\n\t} = selected;\n\n\tconst blockDropZoneRef = useBlockDropZone( {\n\t\tdropZoneElement,\n\t\trootClientId: clientId,\n\t\tparentClientId,\n\t} );\n\n\tconst ref = useMergeRefs( [\n\t\tprops.ref,\n\t\t__unstableDisableDropZone ||\n\t\tisDropZoneDisabled ||\n\t\t( layout?.isManualPlacement &&\n\t\t\twindow.__experimentalEnableGridInteractivity )\n\t\t\t? null\n\t\t\t: blockDropZoneRef,\n\t] );\n\n\tconst innerBlocksProps = {\n\t\t__experimentalCaptureToolbars,\n\t\tlayout,\n\t\tname,\n\t\tblockType,\n\t\tparentLock,\n\t\tdefaultLayout,\n\t\t...options,\n\t};\n\tconst InnerBlocks =\n\t\tinnerBlocksProps.value && innerBlocksProps.onChange\n\t\t\t? ControlledInnerBlocks\n\t\t\t: UncontrolledInnerBlocks;\n\n\treturn {\n\t\t...props,\n\t\tref,\n\t\tclassName: clsx(\n\t\t\tprops.className,\n\t\t\t'block-editor-block-list__layout',\n\t\t\t__unstableDisableLayoutClassNames ? '' : layoutClassNames,\n\t\t\t{\n\t\t\t\t'has-overlay': hasOverlay,\n\t\t\t}\n\t\t),\n\t\tchildren: clientId ? (\n\t\t\t\n\t\t) : (\n\t\t\t\n\t\t),\n\t};\n}\n\nuseInnerBlocksProps.save = getInnerBlocksProps;\n\n// Expose default appender placeholders as components.\nForwardedInnerBlocks.DefaultBlockAppender = DefaultBlockAppender;\nForwardedInnerBlocks.ButtonBlockAppender = ButtonBlockAppender;\n\nForwardedInnerBlocks.Content = () => useInnerBlocksProps.save().children;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md\n */\nexport default ForwardedInnerBlocks;\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns a context object for a given block.\n *\n * @param {string} clientId The block client ID.\n *\n * @return {Record} Context value.\n */\nexport default function useBlockContext( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst block = select( blockEditorStore ).getBlock( clientId );\n\t\t\tif ( ! block ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst blockType = select( blocksStore ).getBlockType( block.name );\n\t\t\tif ( ! blockType ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif ( Object.keys( blockType.providesContext ).length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( blockType.providesContext ).map(\n\t\t\t\t\t( [ contextName, attributeName ] ) => [\n\t\t\t\t\t\tcontextName,\n\t\t\t\t\t\tblock.attributes[ attributeName ],\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useRef, useLayoutEffect } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { synchronizeBlocksWithTemplate } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * This hook makes sure that a block's inner blocks stay in sync with the given\n * block \"template\". The template is a block hierarchy to which inner blocks must\n * conform. If the blocks get \"out of sync\" with the template and the template\n * is meant to be locked (e.g. templateLock = \"all\" or templateLock = \"contentOnly\"),\n * then we replace the inner blocks with the correct value after synchronizing it with the template.\n *\n * @param {string} clientId The block client ID.\n * @param {Object} template The template to match.\n * @param {string} templateLock The template lock state for the inner blocks. For\n * example, if the template lock is set to \"all\",\n * then the inner blocks will stay in sync with the\n * template. If not defined or set to false, then\n * the inner blocks will not be synchronized with\n * the given template.\n * @param {boolean} templateInsertUpdatesSelection Whether or not to update the\n * block-editor selection state when inner blocks\n * are replaced after template synchronization.\n */\nexport default function useInnerBlockTemplateSync(\n\tclientId,\n\ttemplate,\n\ttemplateLock,\n\ttemplateInsertUpdatesSelection\n) {\n\t// Instead of adding a useSelect mapping here, please add to the useSelect\n\t// mapping in InnerBlocks! Every subscription impacts performance.\n\n\tconst {\n\t\tgetBlocks,\n\t\tgetSelectedBlocksInitialCaretPosition,\n\t\tisBlockSelected,\n\t} = useSelect( blockEditorStore );\n\tconst { replaceInnerBlocks, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Maintain a reference to the previous value so we can do a deep equality check.\n\tconst existingTemplateRef = useRef( null );\n\n\tuseLayoutEffect( () => {\n\t\tlet isCancelled = false;\n\n\t\t// There's an implicit dependency between useInnerBlockTemplateSync and useNestedSettingsUpdate\n\t\t// The former needs to happen after the latter and since the latter is using microtasks to batch updates (performance optimization),\n\t\t// we need to schedule this one in a microtask as well.\n\t\t// Example: If you remove queueMicrotask here, ctrl + click to insert quote block won't close the inserter.\n\t\twindow.queueMicrotask( () => {\n\t\t\tif ( isCancelled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only synchronize innerBlocks with template if innerBlocks are empty\n\t\t\t// or a locking \"all\" or \"contentOnly\" exists directly on the block.\n\t\t\tconst currentInnerBlocks = getBlocks( clientId );\n\t\t\tconst shouldApplyTemplate =\n\t\t\t\tcurrentInnerBlocks.length === 0 ||\n\t\t\t\ttemplateLock === 'all' ||\n\t\t\t\ttemplateLock === 'contentOnly';\n\n\t\t\tconst hasTemplateChanged = ! fastDeepEqual(\n\t\t\t\ttemplate,\n\t\t\t\texistingTemplateRef.current\n\t\t\t);\n\n\t\t\tif ( ! shouldApplyTemplate || ! hasTemplateChanged ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\texistingTemplateRef.current = template;\n\t\t\tconst nextBlocks = synchronizeBlocksWithTemplate(\n\t\t\t\tcurrentInnerBlocks,\n\t\t\t\ttemplate\n\t\t\t);\n\n\t\t\tif ( ! fastDeepEqual( nextBlocks, currentInnerBlocks ) ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\treplaceInnerBlocks(\n\t\t\t\t\tclientId,\n\t\t\t\t\tnextBlocks,\n\t\t\t\t\tcurrentInnerBlocks.length === 0 &&\n\t\t\t\t\t\ttemplateInsertUpdatesSelection &&\n\t\t\t\t\t\tnextBlocks.length !== 0 &&\n\t\t\t\t\t\tisBlockSelected( clientId ),\n\t\t\t\t\t// This ensures the \"initialPosition\" doesn't change when applying the template\n\t\t\t\t\t// If we're supposed to focus the block, we'll focus the first inner block\n\t\t\t\t\t// otherwise, we won't apply any auto-focus.\n\t\t\t\t\t// This ensures for instance that the focus stays in the inserter when inserting the \"buttons\" block.\n\t\t\t\t\tgetSelectedBlocksInitialCaretPosition()\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn () => {\n\t\t\tisCancelled = true;\n\t\t};\n\t}, [ template, templateLock, clientId ] );\n}\n","/**\n * Internal dependencies\n */\nimport BaseDefaultBlockAppender from '../default-block-appender';\nimport { useBlockEditContext } from '../block-edit/context';\n\nexport default function DefaultBlockAppender() {\n\tconst { clientId } = useBlockEditContext();\n\treturn ;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Internal dependencies\n */\nimport BaseButtonBlockAppender from '../button-block-appender';\nimport { useBlockEditContext } from '../block-edit/context';\n\nexport default function ButtonBlockAppender( {\n\tshowSeparator,\n\tisFloating,\n\tonAddBlock,\n\tisToggle,\n} ) {\n\tconst { clientId } = useBlockEditContext();\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { isTextField } from '@wordpress/dom';\nimport {\n\tUP,\n\tRIGHT,\n\tDOWN,\n\tLEFT,\n\tENTER,\n\tBACKSPACE,\n\tESCAPE,\n\tTAB,\n} from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Set of key codes upon which typing is to be initiated on a keydown event.\n *\n * @type {Set}\n */\nconst KEY_DOWN_ELIGIBLE_KEY_CODES = new Set( [\n\tUP,\n\tRIGHT,\n\tDOWN,\n\tLEFT,\n\tENTER,\n\tBACKSPACE,\n] );\n\n/**\n * Returns true if a given keydown event can be inferred as intent to start\n * typing, or false otherwise. A keydown is considered eligible if it is a\n * text navigation without shift active.\n *\n * @param {KeyboardEvent} event Keydown event to test.\n *\n * @return {boolean} Whether event is eligible to start typing.\n */\nfunction isKeyDownEligibleForStartTyping( event ) {\n\tconst { keyCode, shiftKey } = event;\n\treturn ! shiftKey && KEY_DOWN_ELIGIBLE_KEY_CODES.has( keyCode );\n}\n\n/**\n * Removes the `isTyping` flag when the mouse moves in the document of the given\n * element.\n */\nexport function useMouseMoveTypingReset() {\n\tconst isTyping = useSelect(\n\t\t( select ) => select( blockEditorStore ).isTyping(),\n\t\t[]\n\t);\n\tconst { stopTyping } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isTyping ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { ownerDocument } = node;\n\t\t\tlet lastClientX;\n\t\t\tlet lastClientY;\n\n\t\t\t/**\n\t\t\t * On mouse move, unset typing flag if user has moved cursor.\n\t\t\t *\n\t\t\t * @param {MouseEvent} event Mousemove event.\n\t\t\t */\n\t\t\tfunction stopTypingOnMouseMove( event ) {\n\t\t\t\tconst { clientX, clientY } = event;\n\n\t\t\t\t// We need to check that the mouse really moved because Safari\n\t\t\t\t// triggers mousemove events when shift or ctrl are pressed.\n\t\t\t\tif (\n\t\t\t\t\tlastClientX &&\n\t\t\t\t\tlastClientY &&\n\t\t\t\t\t( lastClientX !== clientX || lastClientY !== clientY )\n\t\t\t\t) {\n\t\t\t\t\tstopTyping();\n\t\t\t\t}\n\n\t\t\t\tlastClientX = clientX;\n\t\t\t\tlastClientY = clientY;\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'mousemove',\n\t\t\t\tstopTypingOnMouseMove\n\t\t\t);\n\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tstopTypingOnMouseMove\n\t\t\t\t);\n\t\t\t};\n\t\t},\n\t\t[ isTyping, stopTyping ]\n\t);\n}\n\n/**\n * Sets and removes the `isTyping` flag based on user actions:\n *\n * - Sets the flag if the user types within the given element.\n * - Removes the flag when the user selects some text, focusses a non-text\n * field, presses ESC or TAB, or moves the mouse in the document.\n */\nexport function useTypingObserver() {\n\tconst { isTyping } = useSelect( ( select ) => {\n\t\tconst { isTyping: _isTyping } = select( blockEditorStore );\n\t\treturn {\n\t\t\tisTyping: _isTyping(),\n\t\t};\n\t}, [] );\n\tconst { startTyping, stopTyping } = useDispatch( blockEditorStore );\n\n\tconst ref1 = useMouseMoveTypingReset();\n\tconst ref2 = useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t// Listeners to stop typing should only be added when typing.\n\t\t\t// Listeners to start typing should only be added when not typing.\n\t\t\tif ( isTyping ) {\n\t\t\t\tlet timerId;\n\n\t\t\t\t/**\n\t\t\t\t * Stops typing when focus transitions to a non-text field element.\n\t\t\t\t *\n\t\t\t\t * @param {FocusEvent} event Focus event.\n\t\t\t\t */\n\t\t\t\tfunction stopTypingOnNonTextField( event ) {\n\t\t\t\t\tconst { target } = event;\n\n\t\t\t\t\t// Since focus to a non-text field via arrow key will trigger\n\t\t\t\t\t// before the keydown event, wait until after current stack\n\t\t\t\t\t// before evaluating whether typing is to be stopped. Otherwise,\n\t\t\t\t\t// typing will re-start.\n\t\t\t\t\ttimerId = defaultView.setTimeout( () => {\n\t\t\t\t\t\tif ( ! isTextField( target ) ) {\n\t\t\t\t\t\t\tstopTyping();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Unsets typing flag if user presses Escape while typing flag is\n\t\t\t\t * active.\n\t\t\t\t *\n\t\t\t\t * @param {KeyboardEvent} event Keypress or keydown event to\n\t\t\t\t * interpret.\n\t\t\t\t */\n\t\t\t\tfunction stopTypingOnEscapeKey( event ) {\n\t\t\t\t\tconst { keyCode } = event;\n\n\t\t\t\t\tif ( keyCode === ESCAPE || keyCode === TAB ) {\n\t\t\t\t\t\tstopTyping();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * On selection change, unset typing flag if user has made an\n\t\t\t\t * uncollapsed (shift) selection.\n\t\t\t\t */\n\t\t\t\tfunction stopTypingOnSelectionUncollapse() {\n\t\t\t\t\tif ( ! selection.isCollapsed ) {\n\t\t\t\t\t\tstopTyping();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnode.addEventListener( 'focus', stopTypingOnNonTextField );\n\t\t\t\tnode.addEventListener( 'keydown', stopTypingOnEscapeKey );\n\n\t\t\t\townerDocument.addEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tstopTypingOnSelectionUncollapse\n\t\t\t\t);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tdefaultView.clearTimeout( timerId );\n\t\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t\t'focus',\n\t\t\t\t\t\tstopTypingOnNonTextField\n\t\t\t\t\t);\n\t\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t\t'keydown',\n\t\t\t\t\t\tstopTypingOnEscapeKey\n\t\t\t\t\t);\n\t\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t\t'selectionchange',\n\t\t\t\t\t\tstopTypingOnSelectionUncollapse\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Handles a keypress or keydown event to infer intention to start\n\t\t\t * typing.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keypress or keydown event to interpret.\n\t\t\t */\n\t\t\tfunction startTypingInTextField( event ) {\n\t\t\t\tconst { type, target } = event;\n\n\t\t\t\t// Abort early if already typing, or key press is incurred outside a\n\t\t\t\t// text field (e.g. arrow-ing through toolbar buttons).\n\t\t\t\t// Ignore typing if outside the current DOM container\n\t\t\t\tif ( ! isTextField( target ) || ! node.contains( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Special-case keydown because certain keys do not emit a keypress\n\t\t\t\t// event. Conversely avoid keydown as the canonical event since\n\t\t\t\t// there are many keydown which are explicitly not targeted for\n\t\t\t\t// typing.\n\t\t\t\tif (\n\t\t\t\t\ttype === 'keydown' &&\n\t\t\t\t\t! isKeyDownEligibleForStartTyping( event )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tstartTyping();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keypress', startTypingInTextField );\n\t\t\tnode.addEventListener( 'keydown', startTypingInTextField );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keypress', startTypingInTextField );\n\t\t\t\tnode.removeEventListener( 'keydown', startTypingInTextField );\n\t\t\t};\n\t\t},\n\t\t[ isTyping, startTyping, stopTyping ]\n\t);\n\n\treturn useMergeRefs( [ ref1, ref2 ] );\n}\n\nfunction ObserveTyping( { children } ) {\n\treturn
    { children }
    ;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/observe-typing/README.md\n */\nexport default ObserveTyping;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function ZoomOutSeparator( {\n\tclientId,\n\trootClientId = '',\n\tposition = 'top',\n} ) {\n\tconst [ isDraggedOver, setIsDraggedOver ] = useState( false );\n\tconst {\n\t\tsectionRootClientId,\n\t\tsectionClientIds,\n\t\tblockInsertionPoint,\n\t\tblockInsertionPointVisible,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockInsertionPoint,\n\t\t\tgetBlockOrder,\n\t\t\tisBlockInsertionPointVisible,\n\t\t\tgetSectionRootClientId,\n\t\t} = unlock( select( blockEditorStore ) );\n\n\t\tconst root = getSectionRootClientId();\n\t\tconst sectionRootClientIds = getBlockOrder( root );\n\t\treturn {\n\t\t\tsectionRootClientId: root,\n\t\t\tsectionClientIds: sectionRootClientIds,\n\t\t\tblockOrder: getBlockOrder( root ),\n\t\t\tblockInsertionPoint: getBlockInsertionPoint(),\n\t\t\tblockInsertionPointVisible: isBlockInsertionPointVisible(),\n\t\t};\n\t}, [] );\n\n\tconst isReducedMotion = useReducedMotion();\n\n\tif ( ! clientId ) {\n\t\treturn;\n\t}\n\n\tlet isVisible = false;\n\n\tconst isSectionBlock =\n\t\trootClientId === sectionRootClientId &&\n\t\tsectionClientIds &&\n\t\tsectionClientIds.includes( clientId );\n\n\tif ( ! isSectionBlock ) {\n\t\treturn null;\n\t}\n\n\tif ( position === 'top' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tblockInsertionPoint.index === 0 &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index ];\n\t}\n\n\tif ( position === 'bottom' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index - 1 ];\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ isVisible && (\n\t\t\t\t setIsDraggedOver( true ) }\n\t\t\t\t\tonDragLeave={ () => setIsDraggedOver( false ) }\n\t\t\t\t>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tAsyncModeProvider,\n\tuseSelect,\n\tuseDispatch,\n\tuseRegistry,\n} from '@wordpress/data';\nimport {\n\tuseViewportMatch,\n\tuseMergeRefs,\n\tuseDebounce,\n} from '@wordpress/compose';\nimport {\n\tcreateContext,\n\tuseMemo,\n\tuseCallback,\n\tuseEffect,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockListBlock from './block';\nimport BlockListAppender from '../block-list-appender';\nimport { useInBetweenInserter } from './use-in-between-inserter';\nimport { store as blockEditorStore } from '../../store';\nimport { LayoutProvider, defaultLayout } from './layout';\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useInnerBlocksProps } from '../inner-blocks';\nimport {\n\tBlockEditContextProvider,\n\tDEFAULT_BLOCK_EDIT_CONTEXT,\n} from '../block-edit/context';\nimport { useTypingObserver } from '../observe-typing';\nimport { ZoomOutSeparator } from './zoom-out-separator';\nimport { unlock } from '../../lock-unlock';\n\nexport const IntersectionObserver = createContext();\nconst pendingBlockVisibilityUpdatesPerRegistry = new WeakMap();\n\nfunction Root( { className, ...settings } ) {\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst {\n\t\tisOutlineMode,\n\t\tisFocusMode,\n\t\teditorMode,\n\t\ttemporarilyEditingAsBlocks,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSettings,\n\t\t\t__unstableGetEditorMode,\n\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\tisTyping,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst { outlineMode, focusMode } = getSettings();\n\t\treturn {\n\t\t\tisOutlineMode: outlineMode && ! isTyping(),\n\t\t\tisFocusMode: focusMode,\n\t\t\teditorMode: __unstableGetEditorMode(),\n\t\t\ttemporarilyEditingAsBlocks: getTemporarilyEditingAsBlocks(),\n\t\t};\n\t}, [] );\n\tconst registry = useRegistry();\n\tconst { setBlockVisibility } = useDispatch( blockEditorStore );\n\n\tconst delayedBlockVisibilityUpdates = useDebounce(\n\t\tuseCallback( () => {\n\t\t\tconst updates = {};\n\t\t\tpendingBlockVisibilityUpdatesPerRegistry\n\t\t\t\t.get( registry )\n\t\t\t\t.forEach( ( [ id, isIntersecting ] ) => {\n\t\t\t\t\tupdates[ id ] = isIntersecting;\n\t\t\t\t} );\n\t\t\tsetBlockVisibility( updates );\n\t\t}, [ registry ] ),\n\t\t300,\n\t\t{\n\t\t\ttrailing: true,\n\t\t}\n\t);\n\tconst intersectionObserver = useMemo( () => {\n\t\tconst { IntersectionObserver: Observer } = window;\n\n\t\tif ( ! Observer ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn new Observer( ( entries ) => {\n\t\t\tif ( ! pendingBlockVisibilityUpdatesPerRegistry.get( registry ) ) {\n\t\t\t\tpendingBlockVisibilityUpdatesPerRegistry.set( registry, [] );\n\t\t\t}\n\t\t\tfor ( const entry of entries ) {\n\t\t\t\tconst clientId = entry.target.getAttribute( 'data-block' );\n\t\t\t\tpendingBlockVisibilityUpdatesPerRegistry\n\t\t\t\t\t.get( registry )\n\t\t\t\t\t.push( [ clientId, entry.isIntersecting ] );\n\t\t\t}\n\t\t\tdelayedBlockVisibilityUpdates();\n\t\t} );\n\t}, [] );\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\t{\n\t\t\tref: useMergeRefs( [\n\t\t\t\tuseBlockSelectionClearer(),\n\t\t\t\tuseInBetweenInserter(),\n\t\t\t\tuseTypingObserver(),\n\t\t\t] ),\n\t\t\tclassName: clsx( 'is-root-container', className, {\n\t\t\t\t'is-outline-mode': isOutlineMode,\n\t\t\t\t'is-focus-mode': isFocusMode && isLargeViewport,\n\t\t\t\t'is-navigate-mode': editorMode === 'navigation',\n\t\t\t} ),\n\t\t},\n\t\tsettings\n\t);\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t{ !! temporarilyEditingAsBlocks && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction StopEditingAsBlocksOnOutsideSelect( { clientId } ) {\n\tconst { stopEditingAsBlocks } = unlock( useDispatch( blockEditorStore ) );\n\tconst isBlockOrDescendantSelected = useSelect(\n\t\t( select ) => {\n\t\t\tconst { isBlockSelected, hasSelectedInnerBlock } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn (\n\t\t\t\tisBlockSelected( clientId ) ||\n\t\t\t\thasSelectedInnerBlock( clientId, true )\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n\tuseEffect( () => {\n\t\tif ( ! isBlockOrDescendantSelected ) {\n\t\t\tstopEditingAsBlocks( clientId );\n\t\t}\n\t}, [ isBlockOrDescendantSelected, clientId, stopEditingAsBlocks ] );\n\treturn null;\n}\n\nexport default function BlockList( settings ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nconst EMPTY_ARRAY = [];\nconst EMPTY_SET = new Set();\n\nfunction Items( {\n\tplaceholder,\n\trootClientId,\n\trenderAppender: CustomAppender,\n\t__experimentalAppenderTagName,\n\tlayout = defaultLayout,\n} ) {\n\t// Avoid passing CustomAppender to useSelect because it could be a new\n\t// function on every render.\n\tconst hasAppender = CustomAppender !== false;\n\tconst hasCustomAppender = !! CustomAppender;\n\tconst {\n\t\torder,\n\t\tisZoomOut,\n\t\tselectedBlocks,\n\t\tvisibleBlocks,\n\t\tshouldRenderAppender,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetSettings,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\t__unstableGetVisibleBlocks,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst _order = getBlockOrder( rootClientId );\n\n\t\t\tif ( getSettings().__unstableIsPreviewMode ) {\n\t\t\t\treturn {\n\t\t\t\t\torder: _order,\n\t\t\t\t\tselectedBlocks: EMPTY_ARRAY,\n\t\t\t\t\tvisibleBlocks: EMPTY_SET,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\t\treturn {\n\t\t\t\torder: _order,\n\t\t\t\tselectedBlocks: getSelectedBlockClientIds(),\n\t\t\t\tvisibleBlocks: __unstableGetVisibleBlocks(),\n\t\t\t\tisZoomOut: __unstableGetEditorMode() === 'zoom-out',\n\t\t\t\tshouldRenderAppender:\n\t\t\t\t\thasAppender &&\n\t\t\t\t\t__unstableGetEditorMode() !== 'zoom-out' &&\n\t\t\t\t\t( hasCustomAppender\n\t\t\t\t\t\t? ! getTemplateLock( rootClientId ) &&\n\t\t\t\t\t\t getBlockEditingMode( rootClientId ) !== 'disabled'\n\t\t\t\t\t\t: rootClientId === selectedBlockClientId ||\n\t\t\t\t\t\t ( ! rootClientId &&\n\t\t\t\t\t\t\t\t! selectedBlockClientId &&\n\t\t\t\t\t\t\t\t! _order.length ) ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId, hasAppender, hasCustomAppender ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ order.map( ( clientId ) => (\n\t\t\t\t\n\t\t\t\t\t{ isZoomOut && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t{ isZoomOut && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\t{ order.length < 1 && placeholder }\n\t\t\t{ shouldRenderAppender && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport function BlockListItems( props ) {\n\t// This component needs to always be synchronous as it's the one changing\n\t// the async mode depending on the block selection.\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction selector( select ) {\n\tconst {\n\t\tisMultiSelecting,\n\t\tgetMultiSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSelectedBlockClientId,\n\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t__unstableIsFullySelected,\n\t} = select( blockEditorStore );\n\n\treturn {\n\t\tisMultiSelecting: isMultiSelecting(),\n\t\tmultiSelectedBlockClientIds: getMultiSelectedBlockClientIds(),\n\t\thasMultiSelection: hasMultiSelection(),\n\t\tselectedBlockClientId: getSelectedBlockClientId(),\n\t\tinitialPosition: getSelectedBlocksInitialCaretPosition(),\n\t\tisFullSelection: __unstableIsFullySelected(),\n\t};\n}\n\nexport default function useMultiSelection() {\n\tconst {\n\t\tinitialPosition,\n\t\tisMultiSelecting,\n\t\tmultiSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tselectedBlockClientId,\n\t\tisFullSelection,\n\t} = useSelect( selector, [] );\n\n\t/**\n\t * When the component updates, and there is multi selection, we need to\n\t * select the entire block contents.\n\t */\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\t// Allow initialPosition to bypass focus behavior. This is useful\n\t\t\t// for the list view or other areas where we don't want to transfer\n\t\t\t// focus to the editor canvas.\n\t\t\tif ( initialPosition === undefined || initialPosition === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! hasMultiSelection || isMultiSelecting ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { length } = multiSelectedBlockClientIds;\n\n\t\t\tif ( length < 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! isFullSelection ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow cross contentEditable selection by temporarily making\n\t\t\t// all content editable. We can't rely on using the store and\n\t\t\t// React because re-rending happens too slowly. We need to be\n\t\t\t// able to select across instances immediately.\n\t\t\tnode.contentEditable = true;\n\n\t\t\t// For some browsers, like Safari, it is important that focus\n\t\t\t// happens BEFORE selection removal.\n\t\t\tnode.focus();\n\n\t\t\tdefaultView.getSelection().removeAllRanges();\n\t\t},\n\t\t[\n\t\t\thasMultiSelection,\n\t\t\tisMultiSelecting,\n\t\t\tmultiSelectedBlockClientIds,\n\t\t\tselectedBlockClientId,\n\t\t\tinitialPosition,\n\t\t\tisFullSelection,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tcomputeCaretRect,\n\tfocus,\n\tisHorizontalEdge,\n\tisVerticalEdge,\n\tplaceCaretAtHorizontalEdge,\n\tplaceCaretAtVerticalEdge,\n\tisRTL,\n} from '@wordpress/dom';\nimport { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getBlockClientId, isInSameBlock } from '../../utils/dom';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns true if the element should consider edge navigation upon a keyboard\n * event of the given directional key code, or false otherwise.\n *\n * @param {Element} element HTML element to test.\n * @param {number} keyCode KeyboardEvent keyCode to test.\n * @param {boolean} hasModifier Whether a modifier is pressed.\n *\n * @return {boolean} Whether element should consider edge navigation.\n */\nexport function isNavigationCandidate( element, keyCode, hasModifier ) {\n\tconst isVertical = keyCode === UP || keyCode === DOWN;\n\tconst { tagName } = element;\n\tconst elementType = element.getAttribute( 'type' );\n\n\t// Native inputs should not navigate vertically, unless they are simple types that don't need up/down arrow keys.\n\tif ( isVertical && ! hasModifier ) {\n\t\tif ( tagName === 'INPUT' ) {\n\t\t\tconst verticalInputTypes = [\n\t\t\t\t'date',\n\t\t\t\t'datetime-local',\n\t\t\t\t'month',\n\t\t\t\t'number',\n\t\t\t\t'range',\n\t\t\t\t'time',\n\t\t\t\t'week',\n\t\t\t];\n\t\t\treturn ! verticalInputTypes.includes( elementType );\n\t\t}\n\t\treturn true;\n\t}\n\n\t// Native inputs should not navigate horizontally, unless they are simple types that don't need left/right arrow keys.\n\tif ( tagName === 'INPUT' ) {\n\t\tconst simpleInputTypes = [\n\t\t\t'button',\n\t\t\t'checkbox',\n\t\t\t'number',\n\t\t\t'color',\n\t\t\t'file',\n\t\t\t'image',\n\t\t\t'radio',\n\t\t\t'reset',\n\t\t\t'submit',\n\t\t];\n\t\treturn simpleInputTypes.includes( elementType );\n\t}\n\n\t// Native textareas should not navigate horizontally.\n\treturn tagName !== 'TEXTAREA';\n}\n\n/**\n * Returns the optimal tab target from the given focused element in the desired\n * direction. A preference is made toward text fields, falling back to the block\n * focus stop if no other candidates exist for the block.\n *\n * @param {Element} target Currently focused text field.\n * @param {boolean} isReverse True if considering as the first field.\n * @param {Element} containerElement Element containing all blocks.\n * @param {boolean} onlyVertical Whether to only consider tabbable elements\n * that are visually above or under the\n * target.\n *\n * @return {?Element} Optimal tab target, if one exists.\n */\nexport function getClosestTabbable(\n\ttarget,\n\tisReverse,\n\tcontainerElement,\n\tonlyVertical\n) {\n\t// Since the current focus target is not guaranteed to be a text field, find\n\t// all focusables. Tabbability is considered later.\n\tlet focusableNodes = focus.focusable.find( containerElement );\n\n\tif ( isReverse ) {\n\t\tfocusableNodes.reverse();\n\t}\n\n\t// Consider as candidates those focusables after the current target. It's\n\t// assumed this can only be reached if the target is focusable (on its\n\t// keydown event), so no need to verify it exists in the set.\n\tfocusableNodes = focusableNodes.slice(\n\t\tfocusableNodes.indexOf( target ) + 1\n\t);\n\n\tlet targetRect;\n\n\tif ( onlyVertical ) {\n\t\ttargetRect = target.getBoundingClientRect();\n\t}\n\n\tfunction isTabCandidate( node ) {\n\t\tif ( node.closest( '[inert]' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if there's only one child that is content editable (and thus a\n\t\t// better candidate).\n\t\tif (\n\t\t\tnode.children.length === 1 &&\n\t\t\tisInSameBlock( node, node.firstElementChild ) &&\n\t\t\tnode.firstElementChild.getAttribute( 'contenteditable' ) === 'true'\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Not a candidate if the node is not tabbable.\n\t\tif ( ! focus.tabbable.isTabbableIndex( node ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Skip focusable elements such as links within content editable nodes.\n\t\tif ( node.isContentEditable && node.contentEditable !== 'true' ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( onlyVertical ) {\n\t\t\tconst nodeRect = node.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tnodeRect.left >= targetRect.right ||\n\t\t\t\tnodeRect.right <= targetRect.left\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn focusableNodes.find( isTabCandidate );\n}\n\nexport default function useArrowNav() {\n\tconst {\n\t\tgetMultiSelectedBlocksStartClientId,\n\t\tgetMultiSelectedBlocksEndClientId,\n\t\tgetSettings,\n\t\thasMultiSelection,\n\t\t__unstableIsFullySelected,\n\t} = useSelect( blockEditorStore );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\treturn useRefEffect( ( node ) => {\n\t\t// Here a DOMRect is stored while moving the caret vertically so\n\t\t// vertical position of the start position can be restored. This is to\n\t\t// recreate browser behaviour across blocks.\n\t\tlet verticalRect;\n\n\t\tfunction onMouseDown() {\n\t\t\tverticalRect = null;\n\t\t}\n\n\t\tfunction isClosestTabbableABlock( target, isReverse ) {\n\t\t\tconst closestTabbable = getClosestTabbable(\n\t\t\t\ttarget,\n\t\t\t\tisReverse,\n\t\t\t\tnode\n\t\t\t);\n\t\t\treturn closestTabbable && getBlockClientId( closestTabbable );\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\t\t\t// Abort if navigation has already been handled (e.g. RichText\n\t\t\t// inline boundaries).\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { keyCode, target, shiftKey, ctrlKey, altKey, metaKey } =\n\t\t\t\tevent;\n\t\t\tconst isUp = keyCode === UP;\n\t\t\tconst isDown = keyCode === DOWN;\n\t\t\tconst isLeft = keyCode === LEFT;\n\t\t\tconst isRight = keyCode === RIGHT;\n\t\t\tconst isReverse = isUp || isLeft;\n\t\t\tconst isHorizontal = isLeft || isRight;\n\t\t\tconst isVertical = isUp || isDown;\n\t\t\tconst isNav = isHorizontal || isVertical;\n\t\t\tconst hasModifier = shiftKey || ctrlKey || altKey || metaKey;\n\t\t\tconst isNavEdge = isVertical ? isVerticalEdge : isHorizontalEdge;\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tif ( ! isNav ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there is a multi-selection, the arrow keys should collapse the\n\t\t\t// selection to the start or end of the selection.\n\t\t\tif ( hasMultiSelection() ) {\n\t\t\t\tif ( shiftKey ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only handle if we have a full selection (not a native partial\n\t\t\t\t// selection).\n\t\t\t\tif ( ! __unstableIsFullySelected() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( isReverse ) {\n\t\t\t\t\tselectBlock( getMultiSelectedBlocksStartClientId() );\n\t\t\t\t} else {\n\t\t\t\t\tselectBlock( getMultiSelectedBlocksEndClientId(), -1 );\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Abort if our current target is not a candidate for navigation\n\t\t\t// (e.g. preserve native input behaviors).\n\t\t\tif ( ! isNavigationCandidate( target, keyCode, hasModifier ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// When presing any key other than up or down, the initial vertical\n\t\t\t// position must ALWAYS be reset. The vertical position is saved so\n\t\t\t// it can be restored as well as possible on sebsequent vertical\n\t\t\t// arrow key presses. It may not always be possible to restore the\n\t\t\t// exact same position (such as at an empty line), so it wouldn't be\n\t\t\t// good to compute the position right before any vertical arrow key\n\t\t\t// press.\n\t\t\tif ( ! isVertical ) {\n\t\t\t\tverticalRect = null;\n\t\t\t} else if ( ! verticalRect ) {\n\t\t\t\tverticalRect = computeCaretRect( defaultView );\n\t\t\t}\n\n\t\t\t// In the case of RTL scripts, right means previous and left means\n\t\t\t// next, which is the exact reverse of LTR.\n\t\t\tconst isReverseDir = isRTL( target ) ? ! isReverse : isReverse;\n\t\t\tconst { keepCaretInsideBlock } = getSettings();\n\n\t\t\tif ( shiftKey ) {\n\t\t\t\tif (\n\t\t\t\t\tisClosestTabbableABlock( target, isReverse ) &&\n\t\t\t\t\tisNavEdge( target, isReverse )\n\t\t\t\t) {\n\t\t\t\t\tnode.contentEditable = true;\n\t\t\t\t\t// Firefox doesn't automatically move focus.\n\t\t\t\t\tnode.focus();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tisVertical &&\n\t\t\t\tisVerticalEdge( target, isReverse ) &&\n\t\t\t\t// When Alt is pressed, only intercept if the caret is also at\n\t\t\t\t// the horizontal edge.\n\t\t\t\t( altKey ? isHorizontalEdge( target, isReverseDir ) : true ) &&\n\t\t\t\t! keepCaretInsideBlock\n\t\t\t) {\n\t\t\t\tconst closestTabbable = getClosestTabbable(\n\t\t\t\t\ttarget,\n\t\t\t\t\tisReverse,\n\t\t\t\t\tnode,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\tif ( closestTabbable ) {\n\t\t\t\t\tplaceCaretAtVerticalEdge(\n\t\t\t\t\t\tclosestTabbable,\n\t\t\t\t\t\t// When Alt is pressed, place the caret at the furthest\n\t\t\t\t\t\t// horizontal edge and the furthest vertical edge.\n\t\t\t\t\t\taltKey ? ! isReverse : isReverse,\n\t\t\t\t\t\taltKey ? undefined : verticalRect\n\t\t\t\t\t);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tisHorizontal &&\n\t\t\t\tdefaultView.getSelection().isCollapsed &&\n\t\t\t\tisHorizontalEdge( target, isReverseDir ) &&\n\t\t\t\t! keepCaretInsideBlock\n\t\t\t) {\n\t\t\t\tconst closestTabbable = getClosestTabbable(\n\t\t\t\t\ttarget,\n\t\t\t\t\tisReverseDir,\n\t\t\t\t\tnode\n\t\t\t\t);\n\t\t\t\tplaceCaretAtHorizontalEdge( closestTabbable, isReverse );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { isEntirelySelected } from '@wordpress/dom';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useSelectAll() {\n\tconst { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { multiSelect, selectBlock } = useDispatch( blockEditorStore );\n\tconst isMatch = useShortcutEventMatch();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( ! isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedClientIds = getSelectedBlockClientIds();\n\n\t\t\tif (\n\t\t\t\tselectedClientIds.length < 2 &&\n\t\t\t\t! isEntirelySelected( event.target )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconst [ firstSelectedClientId ] = selectedClientIds;\n\t\t\tconst rootClientId = getBlockRootClientId( firstSelectedClientId );\n\t\t\tconst blockClientIds = getBlockOrder( rootClientId );\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a\n\t\t\t// level. See: https://github.com/WordPress/gutenberg/pull/31859/\n\t\t\tif ( selectedClientIds.length === blockClientIds.length ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tnode.ownerDocument.defaultView\n\t\t\t\t\t\t.getSelection()\n\t\t\t\t\t\t.removeAllRanges();\n\t\t\t\t\tselectBlock( rootClientId );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmultiSelect(\n\t\t\t\tblockClientIds[ 0 ],\n\t\t\t\tblockClientIds[ blockClientIds.length - 1 ]\n\t\t\t);\n\t\t}\n\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Sets the `contenteditable` wrapper element to `value`.\n *\n * @param {HTMLElement} node Block element.\n * @param {boolean} value `contentEditable` value (true or false)\n */\nfunction setContentEditableWrapper( node, value ) {\n\tnode.contentEditable = value;\n\t// Firefox doesn't automatically move focus.\n\tif ( value ) {\n\t\tnode.focus();\n\t}\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useDragSelection() {\n\tconst { startMultiSelect, stopMultiSelect } =\n\t\tuseDispatch( blockEditorStore );\n\tconst {\n\t\tisSelectionEnabled,\n\t\thasSelectedBlock,\n\t\tisDraggingBlocks,\n\t\tisMultiSelecting,\n\t} = useSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tlet anchorElement;\n\t\t\tlet rafId;\n\n\t\t\tfunction onMouseUp() {\n\t\t\t\tstopMultiSelect();\n\t\t\t\t// Equivalent to attaching the listener once.\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onMouseUp );\n\t\t\t\t// The browser selection won't have updated yet at this point,\n\t\t\t\t// so wait until the next animation frame to get the browser\n\t\t\t\t// selection.\n\t\t\t\trafId = defaultView.requestAnimationFrame( () => {\n\t\t\t\t\tif ( ! hasSelectedBlock() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the selection is complete (on mouse up), and no\n\t\t\t\t\t// multiple blocks have been selected, set focus back to the\n\t\t\t\t\t// anchor element. if the anchor element contains the\n\t\t\t\t\t// selection. Additionally, the contentEditable wrapper can\n\t\t\t\t\t// now be disabled again.\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\n\t\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst { commonAncestorContainer } = range;\n\t\t\t\t\t\tconst clonedRange = range.cloneRange();\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tanchorElement.contains( commonAncestorContainer )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tanchorElement.focus();\n\t\t\t\t\t\t\tselection.removeAllRanges();\n\t\t\t\t\t\t\tselection.addRange( clonedRange );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfunction onMouseLeave( { buttons, target, relatedTarget } ) {\n\t\t\t\t// If we're moving into a child element, ignore. We're tracking\n\t\t\t\t// the mouse leaving the element to a parent, no a child.\n\t\t\t\tif ( target.contains( relatedTarget ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Avoid triggering a multi-selection if the user is already\n\t\t\t\t// dragging blocks.\n\t\t\t\tif ( isDraggingBlocks() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// The primary button must be pressed to initiate selection.\n\t\t\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n\t\t\t\tif ( buttons !== 1 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Abort if we are already multi-selecting.\n\t\t\t\tif ( isMultiSelecting() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Abort if selection is leaving writing flow.\n\t\t\t\tif ( node === target ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check the attribute, not the contentEditable attribute. All\n\t\t\t\t// child elements of the content editable wrapper are editable\n\t\t\t\t// and return true for this property. We only want to start\n\t\t\t\t// multi selecting when the mouse leaves the wrapper.\n\t\t\t\tif ( target.getAttribute( 'contenteditable' ) !== 'true' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( ! isSelectionEnabled() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Do not rely on the active element because it may change after\n\t\t\t\t// the mouse leaves for the first time. See\n\t\t\t\t// https://github.com/WordPress/gutenberg/issues/48747.\n\t\t\t\tanchorElement = target;\n\n\t\t\t\tstartMultiSelect();\n\n\t\t\t\t// `onSelectionStart` is called after `mousedown` and\n\t\t\t\t// `mouseleave` (from a block). The selection ends when\n\t\t\t\t// `mouseup` happens anywhere in the window.\n\t\t\t\tdefaultView.addEventListener( 'mouseup', onMouseUp );\n\n\t\t\t\t// Allow cross contentEditable selection by temporarily making\n\t\t\t\t// all content editable. We can't rely on using the store and\n\t\t\t\t// React because re-rending happens too slowly. We need to be\n\t\t\t\t// able to select across instances immediately.\n\t\t\t\tsetContentEditableWrapper( node, true );\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mouseout', onMouseLeave );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mouseout', onMouseLeave );\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onMouseUp );\n\t\t\t\tdefaultView.cancelAnimationFrame( rafId );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tstartMultiSelect,\n\t\t\tstopMultiSelect,\n\t\t\tisSelectionEnabled,\n\t\t\thasSelectedBlock,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport { create } from '@wordpress/rich-text';\nimport { isSelectionForward } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\n\n/**\n * Extract the selection start node from the selection. When the anchor node is\n * not a text node, the selection offset is the index of a child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionStartNode( selection ) {\n\tconst { anchorNode, anchorOffset } = selection;\n\n\tif ( anchorNode.nodeType === anchorNode.TEXT_NODE ) {\n\t\treturn anchorNode;\n\t}\n\n\tif ( anchorOffset === 0 ) {\n\t\treturn anchorNode;\n\t}\n\n\treturn anchorNode.childNodes[ anchorOffset - 1 ];\n}\n\n/**\n * Extract the selection end node from the selection. When the focus node is not\n * a text node, the selection offset is the index of a child node. The selection\n * reaches up to but excluding that child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionEndNode( selection ) {\n\tconst { focusNode, focusOffset } = selection;\n\n\tif ( focusNode.nodeType === focusNode.TEXT_NODE ) {\n\t\treturn focusNode;\n\t}\n\n\tif ( focusOffset === focusNode.childNodes.length ) {\n\t\treturn focusNode;\n\t}\n\n\t// When the selection is forward (the selection ends with the focus node),\n\t// the selection may extend into the next element with an offset of 0. This\n\t// may trigger multi selection even though the selection does not visually\n\t// end in the next block.\n\tif ( focusOffset === 0 && isSelectionForward( selection ) ) {\n\t\treturn focusNode.previousSibling ?? focusNode.parentElement;\n\t}\n\n\treturn focusNode.childNodes[ focusOffset ];\n}\n\nfunction findDepth( a, b ) {\n\tlet depth = 0;\n\n\twhile ( a[ depth ] === b[ depth ] ) {\n\t\tdepth++;\n\t}\n\n\treturn depth;\n}\n\n/**\n * Sets the `contenteditable` wrapper element to `value`.\n *\n * @param {HTMLElement} node Block element.\n * @param {boolean} value `contentEditable` value (true or false)\n */\nfunction setContentEditableWrapper( node, value ) {\n\t// Since we are calling this on every selection change, check if the value\n\t// needs to be updated first because it trigger the browser to recalculate\n\t// style.\n\tif ( node.contentEditable !== String( value ) ) {\n\t\tnode.contentEditable = value;\n\n\t\t// Firefox doesn't automatically move focus.\n\t\tif ( value ) {\n\t\t\tnode.focus();\n\t\t}\n\t}\n}\n\nfunction getRichTextElement( node ) {\n\tconst element =\n\t\tnode.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n\treturn element?.closest( '[data-wp-block-attribute-key]' );\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useSelectionObserver() {\n\tconst { multiSelect, selectBlock, selectionChange } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { getBlockParents, getBlockSelectionStart, isMultiSelecting } =\n\t\tuseSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tfunction onSelectionChange( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startNode = extractSelectionStartNode( selection );\n\t\t\t\tconst endNode = extractSelectionEndNode( selection );\n\n\t\t\t\tif (\n\t\t\t\t\t! node.contains( startNode ) ||\n\t\t\t\t\t! node.contains( endNode )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If selection is collapsed and we haven't used `shift+click`,\n\t\t\t\t// end multi selection and disable the contentEditable wrapper.\n\t\t\t\t// We have to check about `shift+click` case because elements\n\t\t\t\t// that don't support text selection might be involved, and we might\n\t\t\t\t// update the clientIds to multi-select blocks.\n\t\t\t\t// For now we check if the event is a `mouse` event.\n\t\t\t\tconst isClickShift = event.shiftKey && event.type === 'mouseup';\n\t\t\t\tif ( selection.isCollapsed && ! isClickShift ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.contentEditable === 'true' &&\n\t\t\t\t\t\t! isMultiSelecting()\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\t\tlet element =\n\t\t\t\t\t\t\tstartNode.nodeType === startNode.ELEMENT_NODE\n\t\t\t\t\t\t\t\t? startNode\n\t\t\t\t\t\t\t\t: startNode.parentElement;\n\t\t\t\t\t\telement = element?.closest( '[contenteditable]' );\n\t\t\t\t\t\telement?.focus();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet startClientId = getBlockClientId( startNode );\n\t\t\t\tlet endClientId = getBlockClientId( endNode );\n\n\t\t\t\t// If the selection has changed and we had pressed `shift+click`,\n\t\t\t\t// we need to check if in an element that doesn't support\n\t\t\t\t// text selection has been clicked.\n\t\t\t\tif ( isClickShift ) {\n\t\t\t\t\tconst selectedClientId = getBlockSelectionStart();\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\t// `endClientId` is not defined if we end the selection by clicking a non-selectable block.\n\t\t\t\t\t// We need to check if there was already a selection with a non-selectable focusNode.\n\t\t\t\t\tconst focusNodeIsNonSelectable =\n\t\t\t\t\t\tclickedClientId !== endClientId;\n\t\t\t\t\tif (\n\t\t\t\t\t\t( startClientId === endClientId &&\n\t\t\t\t\t\t\tselection.isCollapsed ) ||\n\t\t\t\t\t\t! endClientId ||\n\t\t\t\t\t\tfocusNodeIsNonSelectable\n\t\t\t\t\t) {\n\t\t\t\t\t\tendClientId = clickedClientId;\n\t\t\t\t\t}\n\t\t\t\t\t// Handle the case when we have a non-selectable block\n\t\t\t\t\t// selected and click another one.\n\t\t\t\t\tif ( startClientId !== selectedClientId ) {\n\t\t\t\t\t\tstartClientId = selectedClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the selection did not involve a block, return.\n\t\t\t\tif (\n\t\t\t\t\tstartClientId === undefined &&\n\t\t\t\t\tendClientId === undefined\n\t\t\t\t) {\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst isSingularSelection = startClientId === endClientId;\n\t\t\t\tif ( isSingularSelection ) {\n\t\t\t\t\tif ( ! isMultiSelecting() ) {\n\t\t\t\t\t\tselectBlock( startClientId );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, startClientId );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst startPath = [\n\t\t\t\t\t\t...getBlockParents( startClientId ),\n\t\t\t\t\t\tstartClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst endPath = [\n\t\t\t\t\t\t...getBlockParents( endClientId ),\n\t\t\t\t\t\tendClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst depth = findDepth( startPath, endPath );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartPath[ depth ] !== startClientId ||\n\t\t\t\t\t\tendPath[ depth ] !== endClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\tmultiSelect( startPath[ depth ], endPath[ depth ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst richTextElementStart =\n\t\t\t\t\t\tgetRichTextElement( startNode );\n\t\t\t\t\tconst richTextElementEnd = getRichTextElement( endNode );\n\n\t\t\t\t\tif ( richTextElementStart && richTextElementEnd ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst richTextDataStart = create( {\n\t\t\t\t\t\t\telement: richTextElementStart,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tconst richTextDataEnd = create( {\n\t\t\t\t\t\t\telement: richTextElementEnd,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst startOffset =\n\t\t\t\t\t\t\trichTextDataStart.start ?? richTextDataStart.end;\n\t\t\t\t\t\tconst endOffset =\n\t\t\t\t\t\t\trichTextDataEnd.start ?? richTextDataEnd.end;\n\t\t\t\t\t\tselectionChange( {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementStart.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tclientId: endClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementEnd.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: endOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, endClientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'selectionchange',\n\t\t\t\tonSelectionChange\n\t\t\t);\n\t\t\tdefaultView.addEventListener( 'mouseup', onSelectionChange );\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tonSelectionChange\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onSelectionChange );\n\t\t\t};\n\t\t},\n\t\t[ multiSelect, selectBlock, selectionChange, getBlockParents ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\n\nexport default function useClickSelection() {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst { isSelectionEnabled, getBlockSelectionStart, hasMultiSelection } =\n\t\tuseSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tfunction onMouseDown( event ) {\n\t\t\t\t// The main button.\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n\t\t\t\tif ( ! isSelectionEnabled() || event.button !== 0 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startClientId = getBlockSelectionStart();\n\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tif ( startClientId !== clickedClientId ) {\n\t\t\t\t\t\tnode.contentEditable = true;\n\t\t\t\t\t\t// Firefox doesn't automatically move focus.\n\t\t\t\t\t\tnode.focus();\n\t\t\t\t\t}\n\t\t\t\t} else if ( hasMultiSelection() ) {\n\t\t\t\t\t// Allow user to escape out of a multi-selection to a\n\t\t\t\t\t// singular selection of a block via click. This is handled\n\t\t\t\t\t// here since focus handling excludes blocks when there is\n\t\t\t\t\t// multiselection, as focus can be incurred by starting a\n\t\t\t\t\t// multiselection (focus moved to first block's multi-\n\t\t\t\t\t// controls).\n\t\t\t\t\tselectBlock( clickedClientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'mousedown', onMouseDown );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'mousedown', onMouseDown );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tselectBlock,\n\t\t\tisSelectionEnabled,\n\t\t\tgetBlockSelectionStart,\n\t\t\thasMultiSelection,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\thasBlockSupport,\n\tgetBlockTransforms,\n\tfindTransform,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Handles input for selections across blocks.\n */\nexport default function useInput() {\n\tconst {\n\t\t__unstableIsFullySelected,\n\t\tgetSelectedBlockClientIds,\n\t\tgetSelectedBlockClientId,\n\t\t__unstableIsSelectionMergeable,\n\t\thasMultiSelection,\n\t\tgetBlockName,\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t\tgetSelectionStart,\n\t\tgetSelectionEnd,\n\t\tgetBlockAttributes,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\treplaceBlocks,\n\t\t__unstableSplitSelection,\n\t\tremoveBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t\t__unstableMarkAutomaticChange,\n\t} = useDispatch( blockEditorStore );\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction onBeforeInput( event ) {\n\t\t\t// If writing flow is editable, NEVER allow the browser to alter the\n\t\t\t// DOM. This will cause React errors (and the DOM should only be\n\t\t\t// altered in a controlled fashion).\n\t\t\tif ( node.contentEditable === 'true' ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tif ( event.keyCode === ENTER ) {\n\t\t\t\t\tif ( event.shiftKey || __unstableIsFullySelected() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst clientId = getSelectedBlockClientId();\n\t\t\t\t\tconst blockName = getBlockName( clientId );\n\t\t\t\t\tconst selectionStart = getSelectionStart();\n\t\t\t\t\tconst selectionEnd = getSelectionEnd();\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectionStart.attributeKey ===\n\t\t\t\t\t\tselectionEnd.attributeKey\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst selectedAttributeValue =\n\t\t\t\t\t\t\tgetBlockAttributes( clientId )[\n\t\t\t\t\t\t\t\tselectionStart.attributeKey\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\tconst transforms = getBlockTransforms( 'from' ).filter(\n\t\t\t\t\t\t\t( { type } ) => type === 'enter'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\t\t\ttransforms,\n\t\t\t\t\t\t\t( item ) => {\n\t\t\t\t\t\t\t\treturn item.regExp.test(\n\t\t\t\t\t\t\t\t\tselectedAttributeValue\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( transformation ) {\n\t\t\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\ttransformation.transform( {\n\t\t\t\t\t\t\t\t\tcontent: selectedAttributeValue,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t__unstableMarkAutomaticChange();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! hasBlockSupport( blockName, 'splitting', false ) &&\n\t\t\t\t\t\t! event.__deprecatedOnSplit\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ensure template is not locked.\n\t\t\t\t\tif (\n\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\tblockName,\n\t\t\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\t__unstableSplitSelection();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.keyCode === ENTER ) {\n\t\t\t\tnode.contentEditable = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( __unstableIsFullySelected() ) {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tgetSelectedBlockClientIds(),\n\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t__unstableSplitSelection();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tevent.keyCode === BACKSPACE ||\n\t\t\t\tevent.keyCode === DELETE\n\t\t\t) {\n\t\t\t\tnode.contentEditable = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( __unstableIsFullySelected() ) {\n\t\t\t\t\tremoveBlocks( getSelectedBlockClientIds() );\n\t\t\t\t} else if ( __unstableIsSelectionMergeable() ) {\n\t\t\t\t\t__unstableDeleteSelection( event.keyCode === DELETE );\n\t\t\t\t} else {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\t// If key.length is longer than 1, it's a control key that doesn't\n\t\t\t\t// input anything.\n\t\t\t\tevent.key.length === 1 &&\n\t\t\t\t! ( event.metaKey || event.ctrlKey )\n\t\t\t) {\n\t\t\t\tnode.contentEditable = false;\n\t\t\t\tif ( __unstableIsSelectionMergeable() ) {\n\t\t\t\t\t__unstableDeleteSelection( event.keyCode === DELETE );\n\t\t\t\t} else {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t// Safari does not stop default behaviour with either\n\t\t\t\t\t// event.preventDefault() or node.contentEditable = false, so\n\t\t\t\t\t// remove the selection to stop browser manipulation.\n\t\t\t\t\tnode.ownerDocument.defaultView\n\t\t\t\t\t\t.getSelection()\n\t\t\t\t\t\t.removeAllRanges();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onCompositionStart( event ) {\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnode.contentEditable = false;\n\n\t\t\tif ( __unstableIsSelectionMergeable() ) {\n\t\t\t\t__unstableDeleteSelection();\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// Safari does not stop default behaviour with either\n\t\t\t\t// event.preventDefault() or node.contentEditable = false, so\n\t\t\t\t// remove the selection to stop browser manipulation.\n\t\t\t\tnode.ownerDocument.defaultView.getSelection().removeAllRanges();\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'beforeinput', onBeforeInput );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'compositionstart', onCompositionStart );\n\t\treturn () => {\n\t\t\tnode.removeEventListener( 'beforeinput', onBeforeInput );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'compositionstart', onCompositionStart );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\n\nexport function useNotifyCopy() {\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\tconst { getBlockType } = useSelect( blocksStore );\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\treturn useCallback( ( eventType, selectedBlockClientIds ) => {\n\t\tlet notice = '';\n\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\tconst clientId = selectedBlockClientIds[ 0 ];\n\t\t\tconst title = getBlockType( getBlockName( clientId ) )?.title;\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being copied, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Copied \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being cut, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Moved \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t );\n\t\t} else {\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being copied.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Copied %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Copied %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being cut.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Moved %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Moved %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t );\n\t\t}\n\t\tcreateSuccessNotice( notice, {\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Normalizes a given string of HTML to remove the Windows-specific \"Fragment\"\n * comments and any preceding and trailing content.\n *\n * @param {string} html the html to be normalized\n * @return {string} the normalized html\n */\nfunction removeWindowsFragments( html ) {\n\tconst startStr = '';\n\tconst startIdx = html.indexOf( startStr );\n\tif ( startIdx > -1 ) {\n\t\thtml = html.substring( startIdx + startStr.length );\n\t} else {\n\t\t// No point looking for EndFragment\n\t\treturn html;\n\t}\n\n\tconst endStr = '';\n\tconst endIdx = html.indexOf( endStr );\n\tif ( endIdx > -1 ) {\n\t\thtml = html.substring( 0, endIdx );\n\t}\n\n\treturn html;\n}\n\n/**\n * Removes the charset meta tag inserted by Chromium.\n * See:\n * - https://github.com/WordPress/gutenberg/issues/33585\n * - https://bugs.chromium.org/p/chromium/issues/detail?id=1264616#c4\n *\n * @param {string} html the html to be stripped of the meta tag.\n * @return {string} the cleaned html\n */\nfunction removeCharsetMetaTag( html ) {\n\tconst metaTag = ``;\n\n\tif ( html.startsWith( metaTag ) ) {\n\t\treturn html.slice( metaTag.length );\n\t}\n\n\treturn html;\n}\n\nexport function getPasteEventData( { clipboardData } ) {\n\tlet plainText = '';\n\tlet html = '';\n\n\ttry {\n\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\thtml = clipboardData.getData( 'text/html' );\n\t} catch ( error ) {\n\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t// don't support clipboardData at all, so allow default\n\t\t// behaviour.\n\t\treturn;\n\t}\n\n\t// Remove Windows-specific metadata appended within copied HTML text.\n\thtml = removeWindowsFragments( html );\n\n\t// Strip meta tag.\n\thtml = removeCharsetMetaTag( html );\n\n\tconst files = getFilesFromDataTransfer( clipboardData );\n\n\tif ( files.length && ! shouldDismissPastedFiles( files, html ) ) {\n\t\treturn { files };\n\t}\n\n\treturn { html, plainText, files: [] };\n}\n\n/**\n * Given a collection of DataTransfer files and HTML and plain text strings,\n * determine whether the files are to be dismissed in favor of the HTML.\n *\n * Certain office-type programs, like Microsoft Word or Apple Numbers,\n * will, upon copy, generate a screenshot of the content being copied and\n * attach it to the clipboard alongside the actual rich text that the user\n * sought to copy. In those cases, we should let Gutenberg handle the rich text\n * content and not the screenshot, since this allows Gutenberg to insert\n * meaningful blocks, like paragraphs, lists or even tables.\n *\n * @param {File[]} files File objects obtained from a paste event\n * @param {string} html HTML content obtained from a paste event\n * @return {boolean} True if the files should be dismissed\n */\nexport function shouldDismissPastedFiles( files, html /*, plainText */ ) {\n\t// The question is only relevant when there is actual HTML content and when\n\t// there is exactly one image file.\n\tif (\n\t\thtml &&\n\t\tfiles?.length === 1 &&\n\t\tfiles[ 0 ].type.indexOf( 'image/' ) === 0\n\t) {\n\t\t// A single tag found in the HTML source suggests that the\n\t\t// content being pasted revolves around an image. Sometimes there are\n\t\t// other elements found, like
    , but we assume that the user's\n\t\t// intention is to paste the actual image file.\n\t\tconst IMAGE_TAG = /<\\s*img\\b/gi;\n\t\tif ( html.match( IMAGE_TAG )?.length !== 1 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Even when there is exactly one tag in the HTML payload, we\n\t\t// choose to weed out local images, i.e. those whose source starts with\n\t\t// \"file://\". These payloads occur in specific configurations, such as\n\t\t// when copying an entire document from Microsoft Word, that contains\n\t\t// text and exactly one image, and pasting that content using Google\n\t\t// Chrome.\n\t\tconst IMG_WITH_LOCAL_SRC = /<\\s*img\\b[^>]*\\bsrc=\"file:\\/\\//i;\n\t\tif ( html.match( IMG_WITH_LOCAL_SRC ) ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tserialize,\n\tcreateBlock,\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport const requiresWrapperOnCopy = Symbol( 'requiresWrapperOnCopy' );\n\n/**\n * Sets the clipboard data for the provided blocks, with both HTML and plain\n * text representations.\n *\n * @param {ClipboardEvent} event Clipboard event.\n * @param {WPBlock[]} blocks Blocks to set as clipboard data.\n * @param {Object} registry The registry to select from.\n */\nexport function setClipboardBlocks( event, blocks, registry ) {\n\tlet _blocks = blocks;\n\n\tconst [ firstBlock ] = blocks;\n\n\tif ( firstBlock ) {\n\t\tconst firstBlockType = registry\n\t\t\t.select( blocksStore )\n\t\t\t.getBlockType( firstBlock.name );\n\n\t\tif ( firstBlockType[ requiresWrapperOnCopy ] ) {\n\t\t\tconst { getBlockRootClientId, getBlockName, getBlockAttributes } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst wrapperBlockClientId = getBlockRootClientId(\n\t\t\t\tfirstBlock.clientId\n\t\t\t);\n\t\t\tconst wrapperBlockName = getBlockName( wrapperBlockClientId );\n\n\t\t\tif ( wrapperBlockName ) {\n\t\t\t\t_blocks = createBlock(\n\t\t\t\t\twrapperBlockName,\n\t\t\t\t\tgetBlockAttributes( wrapperBlockClientId ),\n\t\t\t\t\t_blocks\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst serialized = serialize( _blocks );\n\n\tevent.clipboardData.setData( 'text/plain', toPlainText( serialized ) );\n\tevent.clipboardData.setData( 'text/html', serialized );\n}\n\n/**\n * Returns the blocks to be pasted from the clipboard event.\n *\n * @param {ClipboardEvent} event The clipboard event.\n * @param {boolean} canUserUseUnfilteredHTML Whether the user can or can't post unfiltered HTML.\n * @return {Array|string} A list of blocks or a string, depending on `handlerMode`.\n */\nexport function getPasteBlocks( event, canUserUseUnfilteredHTML ) {\n\tconst { plainText, html, files } = getPasteEventData( event );\n\tlet blocks = [];\n\n\tif ( files.length ) {\n\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\tblocks = files\n\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\tfromTransforms,\n\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t);\n\t\t\t\tif ( transformation ) {\n\t\t\t\t\taccumulator.push( transformation.transform( [ file ] ) );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] )\n\t\t\t.flat();\n\t} else {\n\t\tblocks = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode: 'BLOCKS',\n\t\t\tcanUserUseUnfilteredHTML,\n\t\t} );\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Given a string of HTML representing serialized blocks, returns the plain\n * text extracted after stripping the HTML of any tags and fixing line breaks.\n *\n * @param {string} html Serialized blocks.\n * @return {string} The plain-text content with any html removed.\n */\nfunction toPlainText( html ) {\n\t// Manually handle BR tags as line breaks prior to `stripHTML` call\n\thtml = html.replace( /
    /g, '\\n' );\n\n\tconst plainText = stripHTML( html ).trim();\n\n\t// Merge any consecutive line breaks\n\treturn plainText.replace( /\\n\\n+/g, '\\n\\n' );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\thasBlockSupport,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tdocumentHasSelection,\n\tdocumentHasUncollapsedSelection,\n} from '@wordpress/dom';\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport { setClipboardBlocks } from './utils';\nimport { getPasteEventData } from '../../utils/pasting';\n\nexport default function useClipboardHandler() {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSettings,\n\t\tgetBlockName,\n\t\t__unstableIsFullySelected,\n\t\t__unstableIsSelectionCollapsed,\n\t\t__unstableIsSelectionMergeable,\n\t\t__unstableGetSelectedBlocksWithPartialSelection,\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tflashBlock,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t\t__unstableSplitSelection,\n\t} = useDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction handler( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t// This was likely already handled in rich-text/use-paste-handler.js.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Let native copy/paste behaviour take over in input fields.\n\t\t\t// But always handle multiple selected blocks.\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tconst { target } = event;\n\t\t\t\tconst { ownerDocument } = target;\n\t\t\t\t// If copying, only consider actual text selection as selection.\n\t\t\t\t// Otherwise, any focus on an input field is considered.\n\t\t\t\tconst hasSelection =\n\t\t\t\t\tevent.type === 'copy' || event.type === 'cut'\n\t\t\t\t\t\t? documentHasUncollapsedSelection( ownerDocument )\n\t\t\t\t\t\t: documentHasSelection( ownerDocument ) &&\n\t\t\t\t\t\t ! ownerDocument.activeElement.isContentEditable;\n\n\t\t\t\t// Let native copy behaviour take over in input fields.\n\t\t\t\tif ( hasSelection ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { activeElement } = event.target.ownerDocument;\n\n\t\t\tif ( ! node.contains( activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isSelectionMergeable = __unstableIsSelectionMergeable();\n\t\t\tconst shouldHandleWholeBlocks =\n\t\t\t\t__unstableIsSelectionCollapsed() || __unstableIsFullySelected();\n\t\t\tconst expandSelectionIsNeeded =\n\t\t\t\t! shouldHandleWholeBlocks && ! isSelectionMergeable;\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t\t// If we have a partial selection that is not mergeable, just\n\t\t\t\t// expand the selection to the whole blocks.\n\t\t\t\tif ( expandSelectionIsNeeded ) {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t} else {\n\t\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\t\tlet blocks;\n\t\t\t\t\t// Check if we have partial selection.\n\t\t\t\t\tif ( shouldHandleWholeBlocks ) {\n\t\t\t\t\t\tblocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [ head, tail ] =\n\t\t\t\t\t\t\t__unstableGetSelectedBlocksWithPartialSelection();\n\t\t\t\t\t\tconst inBetweenBlocks = getBlocksByClientId(\n\t\t\t\t\t\t\tselectedBlockClientIds.slice(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length - 1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tblocks = [ head, ...inBetweenBlocks, tail ];\n\t\t\t\t\t}\n\n\t\t\t\t\tsetClipboardBlocks( event, blocks, registry );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// We need to also check if at the start we needed to\n\t\t\t\t// expand the selection, as in this point we might have\n\t\t\t\t// programmatically fully selected the blocks above.\n\t\t\t\tif ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {\n\t\t\t\t\tremoveBlocks( selectedBlockClientIds );\n\t\t\t\t} else {\n\t\t\t\t\tevent.target.ownerDocument.activeElement.contentEditable = false;\n\t\t\t\t\t__unstableDeleteSelection();\n\t\t\t\t}\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML:\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst isInternal =\n\t\t\t\t\tevent.clipboardData.getData( 'rich-text' ) === 'true';\n\t\t\t\tif ( isInternal ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { plainText, html, files } = getPasteEventData( event );\n\t\t\t\tconst isFullySelected = __unstableIsFullySelected();\n\t\t\t\tlet blocks = [];\n\n\t\t\t\tif ( files.length ) {\n\t\t\t\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\t\t\t\tblocks = files\n\t\t\t\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\t\t\t\tfromTransforms,\n\t\t\t\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif ( transformation ) {\n\t\t\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\t\t\ttransformation.transform( [ file ] )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t\t}, [] )\n\t\t\t\t\t\t.flat();\n\t\t\t\t} else {\n\t\t\t\t\tblocks = pasteHandler( {\n\t\t\t\t\t\tHTML: html,\n\t\t\t\t\t\tplainText,\n\t\t\t\t\t\tmode: isFullySelected ? 'BLOCKS' : 'AUTO',\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Inline paste: let rich text handle it.\n\t\t\t\tif ( typeof blocks === 'string' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( isFullySelected ) {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t\t-1\n\t\t\t\t\t);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a block doesn't support splitting, let rich text paste\n\t\t\t\t// inline.\n\t\t\t\tif (\n\t\t\t\t\t! hasMultiSelection() &&\n\t\t\t\t\t! hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( selectedBlockClientIds[ 0 ] ),\n\t\t\t\t\t\t'splitting',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) &&\n\t\t\t\t\t! event.__deprecatedOnSplit\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ firstSelectedClientId ] = selectedBlockClientIds;\n\t\t\t\tconst rootClientId = getBlockRootClientId(\n\t\t\t\t\tfirstSelectedClientId\n\t\t\t\t);\n\n\t\t\t\tconst newBlocks = [];\n\n\t\t\t\tfor ( const block of blocks ) {\n\t\t\t\t\tif ( canInsertBlockType( block.name, rootClientId ) ) {\n\t\t\t\t\t\tnewBlocks.push( block );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If a block cannot be inserted in a root block, try\n\t\t\t\t\t\t// converting it to that root block type and insert the\n\t\t\t\t\t\t// inner blocks.\n\t\t\t\t\t\t// Example: paragraphs cannot be inserted into a list,\n\t\t\t\t\t\t// so convert the paragraphs to a list for list items.\n\t\t\t\t\t\tconst rootBlockName = getBlockName( rootClientId );\n\t\t\t\t\t\tconst switchedBlocks =\n\t\t\t\t\t\t\tblock.name !== rootBlockName\n\t\t\t\t\t\t\t\t? switchToBlockType( block, rootBlockName )\n\t\t\t\t\t\t\t\t: [ block ];\n\n\t\t\t\t\t\tif ( ! switchedBlocks ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( const switchedBlock of switchedBlocks ) {\n\t\t\t\t\t\t\tfor ( const innerBlock of switchedBlock.innerBlocks ) {\n\t\t\t\t\t\t\t\tnewBlocks.push( innerBlock );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t__unstableSplitSelection( newBlocks );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useMergeRefs, useRefEffect } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMultiSelection from './use-multi-selection';\nimport useTabNav from './use-tab-nav';\nimport useArrowNav from './use-arrow-nav';\nimport useSelectAll from './use-select-all';\nimport useDragSelection from './use-drag-selection';\nimport useSelectionObserver from './use-selection-observer';\nimport useClickSelection from './use-click-selection';\nimport useInput from './use-input';\nimport useClipboardHandler from './use-clipboard-handler';\nimport { store as blockEditorStore } from '../../store';\n\nexport function useWritingFlow() {\n\tconst [ before, ref, after ] = useTabNav();\n\tconst hasMultiSelection = useSelect(\n\t\t( select ) => select( blockEditorStore ).hasMultiSelection(),\n\t\t[]\n\t);\n\n\treturn [\n\t\tbefore,\n\t\tuseMergeRefs( [\n\t\t\tref,\n\t\t\tuseClipboardHandler(),\n\t\t\tuseInput(),\n\t\t\tuseDragSelection(),\n\t\t\tuseSelectionObserver(),\n\t\t\tuseClickSelection(),\n\t\t\tuseMultiSelection(),\n\t\t\tuseSelectAll(),\n\t\t\tuseArrowNav(),\n\t\t\tuseRefEffect(\n\t\t\t\t( node ) => {\n\t\t\t\t\tnode.tabIndex = 0;\n\n\t\t\t\t\tif ( ! hasMultiSelection ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.classList.add( 'has-multi-selection' );\n\t\t\t\t\tnode.setAttribute(\n\t\t\t\t\t\t'aria-label',\n\t\t\t\t\t\t__( 'Multiple selected blocks' )\n\t\t\t\t\t);\n\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tnode.classList.remove( 'has-multi-selection' );\n\t\t\t\t\t\tnode.removeAttribute( 'aria-label' );\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\t[ hasMultiSelection ]\n\t\t\t),\n\t\t] ),\n\t\tafter,\n\t];\n}\n\nfunction WritingFlow( { children, ...props }, forwardedRef ) {\n\tconst [ before, ref, after ] = useWritingFlow();\n\treturn (\n\t\t<>\n\t\t\t{ before }\n\t\t\t\n\t\t\t\t{ children }\n\t\t\t
    \n\t\t\t{ after }\n\t\t\n\t);\n}\n\n/**\n * Handles selection and navigation across blocks. This component should be\n * wrapped around BlockList.\n *\n * @param {Object} props Component properties.\n * @param {Element} props.children Children to be rendered.\n */\nexport default forwardRef( WritingFlow );\n","/**\n * WordPress dependencies\n */\nimport { focus, isFormElement } from '@wordpress/dom';\nimport { TAB, ESCAPE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { isInSameBlock, isInsideRootBlock } from '../../utils/dom';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\n\tconst { hasMultiSelection, getSelectedBlockClientId, getBlockCount } =\n\t\tuseSelect( blockEditorStore );\n\tconst { setNavigationMode, setLastFocus } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst isNavigationMode = useSelect(\n\t\t( select ) => select( blockEditorStore ).isNavigationMode(),\n\t\t[]\n\t);\n\n\tconst { getLastFocus } = unlock( useSelect( blockEditorStore ) );\n\n\t// Don't allow tabbing to this element in Navigation mode.\n\tconst focusCaptureTabIndex = ! isNavigationMode ? '0' : undefined;\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCaptureRef = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCaptureRef.current ) {\n\t\t\tnoCaptureRef.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tif ( getLastFocus()?.current ) {\n\t\t\t\tgetLastFocus().current.focus();\n\t\t\t} else {\n\t\t\t\t// Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.\n\t\t\t\tcontainer.current\n\t\t\t\t\t.querySelector(\n\t\t\t\t\t\t`[data-block=\"${ getSelectedBlockClientId() }\"]`\n\t\t\t\t\t)\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t} else {\n\t\t\tsetNavigationMode( true );\n\n\t\t\tconst canvasElement =\n\t\t\t\tcontainer.current.ownerDocument === event.target.ownerDocument\n\t\t\t\t\t? container.current\n\t\t\t\t\t: container.current.ownerDocument.defaultView.frameElement;\n\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( canvasElement ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst tabbables = focus.tabbable.find( container.current );\n\n\t\t\tif ( tabbables.length ) {\n\t\t\t\tconst next = isBefore\n\t\t\t\t\t? tabbables[ 0 ]\n\t\t\t\t\t: tabbables[ tabbables.length - 1 ];\n\n\t\t\t\tnext.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst before = (\n\t\t\n\t);\n\n\tconst after = (\n\t\t\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.keyCode === ESCAPE && ! hasMultiSelection() ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\t// Preserve the behaviour of entering navigation mode when\n\t\t\t\t// tabbing into the content without a block selection.\n\t\t\t\t// `onFocusCapture` already did this previously, but we need to\n\t\t\t\t// do it again here because after clearing block selection,\n\t\t\t\t// focus land on the writing flow container and pressing Tab\n\t\t\t\t// will no longer send focus through the focus capture element.\n\t\t\t\tif ( event.target === node ) {\n\t\t\t\t\tsetNavigationMode( true );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextTabbable = focus.tabbable[ direction ]( event.target );\n\n\t\t\t// We want to constrain the tabbing to the block and its child blocks.\n\t\t\t// If the preceding form element is within a different block,\n\t\t\t// such as two sibling image blocks in the placeholder state,\n\t\t\t// we want shift + tab from the first form element to move to the image\n\t\t\t// block toolbar and not the previous image block's form element.\n\t\t\tconst currentBlock = event.target.closest( '[data-block]' );\n\t\t\tconst isElementPartOfSelectedBlock =\n\t\t\t\tcurrentBlock &&\n\t\t\t\tnextTabbable &&\n\t\t\t\t( isInSameBlock( currentBlock, nextTabbable ) ||\n\t\t\t\t\tisInsideRootBlock( currentBlock, nextTabbable ) );\n\n\t\t\t// Allow tabbing from the block wrapper to a form element,\n\t\t\t// and between form elements rendered in a block and its child blocks,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( nextTabbable ) &&\n\t\t\t\tisElementPartOfSelectedBlock\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCaptureRef.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tsetLastFocus( { ...getLastFocus(), current: event.target } );\n\n\t\t\tconst { ownerDocument } = node;\n\n\t\t\t// If focus disappears due to there being no blocks, move focus to\n\t\t\t// the writing flow wrapper.\n\t\t\tif (\n\t\t\t\t! event.relatedTarget &&\n\t\t\t\townerDocument.activeElement === ownerDocument.body &&\n\t\t\t\tgetBlockCount() === 0\n\t\t\t) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// Only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tconst { ownerDocument } = node;\n\t\tconst { defaultView } = ownerDocument;\n\t\tdefaultView.addEventListener( 'keydown', preventScrollOnTab );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tdefaultView.removeEventListener( 'keydown', preventScrollOnTab );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n","let compatibilityStyles = null;\n\n/**\n * Returns a list of stylesheets that target the editor canvas. A stylesheet is\n * considered targetting the editor a canvas if it contains the\n * `editor-styles-wrapper`, `wp-block`, or `wp-block-*` class selectors.\n *\n * Ideally, this hook should be removed in the future and styles should be added\n * explicitly as editor styles.\n */\nexport function getCompatibilityStyles() {\n\tif ( compatibilityStyles ) {\n\t\treturn compatibilityStyles;\n\t}\n\n\t// Only memoize the result once on load, since these stylesheets should not\n\t// change.\n\tcompatibilityStyles = Array.from( document.styleSheets ).reduce(\n\t\t( accumulator, styleSheet ) => {\n\t\t\ttry {\n\t\t\t\t// May fail for external styles.\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tstyleSheet.cssRules;\n\t\t\t} catch ( e ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tconst { ownerNode, cssRules } = styleSheet;\n\n\t\t\t// Stylesheet is added by another stylesheet. See\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet/ownerNode#notes.\n\t\t\tif ( ownerNode === null ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tif ( ! cssRules ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Don't try to add the reset styles, which were removed as a dependency\n\t\t\t// from `edit-blocks` for the iframe since we don't need to reset admin\n\t\t\t// styles.\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\t'wp-reset-editor-styles-css',\n\t\t\t\t\t'wp-reset-editor-styles-rtl-css',\n\t\t\t\t].includes( ownerNode.id )\n\t\t\t) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Don't try to add styles without ID. Styles enqueued via the WP dependency system will always have IDs.\n\t\t\tif ( ! ownerNode.id ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tfunction matchFromRules( _cssRules ) {\n\t\t\t\treturn Array.from( _cssRules ).find(\n\t\t\t\t\t( {\n\t\t\t\t\t\tselectorText,\n\t\t\t\t\t\tconditionText,\n\t\t\t\t\t\tcssRules: __cssRules,\n\t\t\t\t\t} ) => {\n\t\t\t\t\t\t// If the rule is conditional then it will not have selector text.\n\t\t\t\t\t\t// Recurse into child CSS ruleset to determine selector eligibility.\n\t\t\t\t\t\tif ( conditionText ) {\n\t\t\t\t\t\t\treturn matchFromRules( __cssRules );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tselectorText &&\n\t\t\t\t\t\t\t( selectorText.includes(\n\t\t\t\t\t\t\t\t'.editor-styles-wrapper'\n\t\t\t\t\t\t\t) ||\n\t\t\t\t\t\t\t\tselectorText.includes( '.wp-block' ) )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif ( matchFromRules( cssRules ) ) {\n\t\t\t\tconst isInline = ownerNode.tagName === 'STYLE';\n\n\t\t\t\tif ( isInline ) {\n\t\t\t\t\t// If the current target is inline,\n\t\t\t\t\t// it could be a dependency of an existing stylesheet.\n\t\t\t\t\t// Look for that dependency and add it BEFORE the current target.\n\t\t\t\t\tconst mainStylesCssId = ownerNode.id.replace(\n\t\t\t\t\t\t'-inline-css',\n\t\t\t\t\t\t'-css'\n\t\t\t\t\t);\n\t\t\t\t\tconst mainStylesElement =\n\t\t\t\t\t\tdocument.getElementById( mainStylesCssId );\n\t\t\t\t\tif ( mainStylesElement ) {\n\t\t\t\t\t\taccumulator.push( mainStylesElement.cloneNode( true ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taccumulator.push( ownerNode.cloneNode( true ) );\n\n\t\t\t\tif ( ! isInline ) {\n\t\t\t\t\t// If the current target is not inline,\n\t\t\t\t\t// we still look for inline styles that could be relevant for the current target.\n\t\t\t\t\t// If they exist, add them AFTER the current target.\n\t\t\t\t\tconst inlineStylesCssId = ownerNode.id.replace(\n\t\t\t\t\t\t'-css',\n\t\t\t\t\t\t'-inline-css'\n\t\t\t\t\t);\n\t\t\t\t\tconst inlineStylesElement =\n\t\t\t\t\t\tdocument.getElementById( inlineStylesCssId );\n\t\t\t\t\tif ( inlineStylesElement ) {\n\t\t\t\t\t\taccumulator.push(\n\t\t\t\t\t\t\tinlineStylesElement.cloneNode( true )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\n\treturn compatibilityStyles;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tcreatePortal,\n\tforwardRef,\n\tuseMemo,\n\tuseEffect,\n\tuseRef,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseResizeObserver,\n\tuseMergeRefs,\n\tuseRefEffect,\n\tuseDisabled,\n} from '@wordpress/compose';\nimport { __experimentalStyleProvider as StyleProvider } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useWritingFlow } from '../writing-flow';\nimport { getCompatibilityStyles } from './get-compatibility-styles';\nimport { store as blockEditorStore } from '../../store';\n\nfunction bubbleEvent( event, Constructor, frame ) {\n\tconst init = {};\n\n\tfor ( const key in event ) {\n\t\tinit[ key ] = event[ key ];\n\t}\n\n\t// Check if the event is a MouseEvent generated within the iframe.\n\t// If so, adjust the coordinates to be relative to the position of\n\t// the iframe. This ensures that components such as Draggable\n\t// receive coordinates relative to the window, instead of relative\n\t// to the iframe. Without this, the Draggable event handler would\n\t// result in components \"jumping\" position as soon as the user\n\t// drags over the iframe.\n\tif ( event instanceof frame.contentDocument.defaultView.MouseEvent ) {\n\t\tconst rect = frame.getBoundingClientRect();\n\t\tinit.clientX += rect.left;\n\t\tinit.clientY += rect.top;\n\t}\n\n\tconst newEvent = new Constructor( event.type, init );\n\tif ( init.defaultPrevented ) {\n\t\tnewEvent.preventDefault();\n\t}\n\tconst cancelled = ! frame.dispatchEvent( newEvent );\n\n\tif ( cancelled ) {\n\t\tevent.preventDefault();\n\t}\n}\n\n/**\n * Bubbles some event types (keydown, keypress, and dragover) to parent document\n * document to ensure that the keyboard shortcuts and drag and drop work.\n *\n * Ideally, we should remove event bubbling in the future. Keyboard shortcuts\n * should be context dependent, e.g. actions on blocks like Cmd+A should not\n * work globally outside the block editor.\n *\n * @param {Document} iframeDocument Document to attach listeners to.\n */\nfunction useBubbleEvents( iframeDocument ) {\n\treturn useRefEffect( () => {\n\t\tconst { defaultView } = iframeDocument;\n\t\tif ( ! defaultView ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { frameElement } = defaultView;\n\t\tconst html = iframeDocument.documentElement;\n\t\tconst eventTypes = [ 'dragover', 'mousemove' ];\n\t\tconst handlers = {};\n\t\tfor ( const name of eventTypes ) {\n\t\t\thandlers[ name ] = ( event ) => {\n\t\t\t\tconst prototype = Object.getPrototypeOf( event );\n\t\t\t\tconst constructorName = prototype.constructor.name;\n\t\t\t\tconst Constructor = window[ constructorName ];\n\t\t\t\tbubbleEvent( event, Constructor, frameElement );\n\t\t\t};\n\t\t\thtml.addEventListener( name, handlers[ name ] );\n\t\t}\n\n\t\treturn () => {\n\t\t\tfor ( const name of eventTypes ) {\n\t\t\t\thtml.removeEventListener( name, handlers[ name ] );\n\t\t\t}\n\t\t};\n\t} );\n}\n\nfunction Iframe( {\n\tcontentRef,\n\tchildren,\n\ttabIndex = 0,\n\tscale = 1,\n\tframeSize = 0,\n\treadonly,\n\tforwardedRef: ref,\n\ttitle = __( 'Editor canvas' ),\n\t...props\n} ) {\n\tconst { resolvedAssets, isPreviewMode } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\t\treturn {\n\t\t\tresolvedAssets: settings.__unstableResolvedAssets,\n\t\t\tisPreviewMode: settings.__unstableIsPreviewMode,\n\t\t};\n\t}, [] );\n\tconst { styles = '', scripts = '' } = resolvedAssets;\n\tconst [ iframeDocument, setIframeDocument ] = useState();\n\tconst prevContainerWidthRef = useRef();\n\tconst [ bodyClasses, setBodyClasses ] = useState( [] );\n\tconst clearerRef = useBlockSelectionClearer();\n\tconst [ before, writingFlowRef, after ] = useWritingFlow();\n\tconst [ contentResizeListener, { height: contentHeight } ] =\n\t\tuseResizeObserver();\n\tconst [ containerResizeListener, { width: containerWidth } ] =\n\t\tuseResizeObserver();\n\n\tconst setRef = useRefEffect( ( node ) => {\n\t\tnode._load = () => {\n\t\t\tsetIframeDocument( node.contentDocument );\n\t\t};\n\t\tlet iFrameDocument;\n\t\t// Prevent the default browser action for files dropped outside of dropzones.\n\t\tfunction preventFileDropDefault( event ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tfunction onLoad() {\n\t\t\tconst { contentDocument, ownerDocument } = node;\n\t\t\tconst { documentElement } = contentDocument;\n\t\t\tiFrameDocument = contentDocument;\n\n\t\t\tdocumentElement.classList.add( 'block-editor-iframe__html' );\n\n\t\t\tclearerRef( documentElement );\n\n\t\t\t// Ideally ALL classes that are added through get_body_class should\n\t\t\t// be added in the editor too, which we'll somehow have to get from\n\t\t\t// the server in the future (which will run the PHP filters).\n\t\t\tsetBodyClasses(\n\t\t\t\tArray.from( ownerDocument.body.classList ).filter(\n\t\t\t\t\t( name ) =>\n\t\t\t\t\t\tname.startsWith( 'admin-color-' ) ||\n\t\t\t\t\t\tname.startsWith( 'post-type-' ) ||\n\t\t\t\t\t\tname === 'wp-embed-responsive'\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tcontentDocument.dir = ownerDocument.dir;\n\n\t\t\tfor ( const compatStyle of getCompatibilityStyles() ) {\n\t\t\t\tif ( contentDocument.getElementById( compatStyle.id ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcontentDocument.head.appendChild(\n\t\t\t\t\tcompatStyle.cloneNode( true )\n\t\t\t\t);\n\n\t\t\t\tif ( ! isPreviewMode ) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`${ compatStyle.id } was added to the iframe incorrectly. Please use block.json or enqueue_block_assets to add styles to the iframe.`,\n\t\t\t\t\t\tcompatStyle\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tiFrameDocument.addEventListener(\n\t\t\t\t'dragover',\n\t\t\t\tpreventFileDropDefault,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tiFrameDocument.addEventListener(\n\t\t\t\t'drop',\n\t\t\t\tpreventFileDropDefault,\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\n\t\tnode.addEventListener( 'load', onLoad );\n\n\t\treturn () => {\n\t\t\tdelete node._load;\n\t\t\tnode.removeEventListener( 'load', onLoad );\n\t\t\tiFrameDocument?.removeEventListener(\n\t\t\t\t'dragover',\n\t\t\t\tpreventFileDropDefault\n\t\t\t);\n\t\t\tiFrameDocument?.removeEventListener(\n\t\t\t\t'drop',\n\t\t\t\tpreventFileDropDefault\n\t\t\t);\n\t\t};\n\t}, [] );\n\n\tconst [ iframeWindowInnerHeight, setIframeWindowInnerHeight ] = useState();\n\n\tconst iframeResizeRef = useRefEffect( ( node ) => {\n\t\tconst nodeWindow = node.ownerDocument.defaultView;\n\n\t\tsetIframeWindowInnerHeight( nodeWindow.innerHeight );\n\t\tconst onResize = () => {\n\t\t\tsetIframeWindowInnerHeight( nodeWindow.innerHeight );\n\t\t};\n\t\tnodeWindow.addEventListener( 'resize', onResize );\n\t\treturn () => {\n\t\t\tnodeWindow.removeEventListener( 'resize', onResize );\n\t\t};\n\t}, [] );\n\n\tconst [ windowInnerWidth, setWindowInnerWidth ] = useState();\n\n\tconst windowResizeRef = useRefEffect( ( node ) => {\n\t\tconst nodeWindow = node.ownerDocument.defaultView;\n\n\t\tsetWindowInnerWidth( nodeWindow.innerWidth );\n\t\tconst onResize = () => {\n\t\t\tsetWindowInnerWidth( nodeWindow.innerWidth );\n\t\t};\n\t\tnodeWindow.addEventListener( 'resize', onResize );\n\t\treturn () => {\n\t\t\tnodeWindow.removeEventListener( 'resize', onResize );\n\t\t};\n\t}, [] );\n\n\tconst isZoomedOut = scale !== 1;\n\n\tuseEffect( () => {\n\t\tif ( ! isZoomedOut ) {\n\t\t\tprevContainerWidthRef.current = containerWidth;\n\t\t}\n\t}, [ containerWidth, isZoomedOut ] );\n\n\tconst disabledRef = useDisabled( { isDisabled: ! readonly } );\n\tconst bodyRef = useMergeRefs( [\n\t\tuseBubbleEvents( iframeDocument ),\n\t\tcontentRef,\n\t\tclearerRef,\n\t\twritingFlowRef,\n\t\tdisabledRef,\n\t\t// Avoid resize listeners when not needed, these will trigger\n\t\t// unnecessary re-renders when animating the iframe width, or when\n\t\t// expanding preview iframes.\n\t\tisZoomedOut ? iframeResizeRef : null,\n\t] );\n\n\t// Correct doctype is required to enable rendering in standards\n\t// mode. Also preload the styles to avoid a flash of unstyled\n\t// content.\n\tconst html = `\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t${ styles }\n\t\t${ scripts }\n\t\n\t\n\t\t\n\t\n`;\n\n\tconst [ src, cleanup ] = useMemo( () => {\n\t\tconst _src = URL.createObjectURL(\n\t\t\tnew window.Blob( [ html ], { type: 'text/html' } )\n\t\t);\n\t\treturn [ _src, () => URL.revokeObjectURL( _src ) ];\n\t}, [ html ] );\n\n\tuseEffect( () => cleanup, [ cleanup ] );\n\n\tuseEffect( () => {\n\t\tif ( ! iframeDocument || ! isZoomedOut ) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframeDocument.documentElement.classList.add( 'is-zoomed-out' );\n\n\t\tconst maxWidth = 750;\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-scale',\n\t\t\tscale === 'default'\n\t\t\t\t? Math.min( containerWidth, maxWidth ) /\n\t\t\t\t\t\tprevContainerWidthRef.current\n\t\t\t\t: scale\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-frame-size',\n\t\t\ttypeof frameSize === 'number' ? `${ frameSize }px` : frameSize\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-content-height',\n\t\t\t`${ contentHeight }px`\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-inner-height',\n\t\t\t`${ iframeWindowInnerHeight }px`\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-container-width',\n\t\t\t`${ containerWidth }px`\n\t\t);\n\t\tiframeDocument.documentElement.style.setProperty(\n\t\t\t'--wp-block-editor-iframe-zoom-out-prev-container-width',\n\t\t\t`${ prevContainerWidthRef.current }px`\n\t\t);\n\n\t\treturn () => {\n\t\t\tiframeDocument.documentElement.classList.remove( 'is-zoomed-out' );\n\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-scale'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-frame-size'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-content-height'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-inner-height'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-container-width'\n\t\t\t);\n\t\t\tiframeDocument.documentElement.style.removeProperty(\n\t\t\t\t'--wp-block-editor-iframe-zoom-out-prev-container-width'\n\t\t\t);\n\t\t};\n\t}, [\n\t\tscale,\n\t\tframeSize,\n\t\tiframeDocument,\n\t\tiframeWindowInnerHeight,\n\t\tcontentHeight,\n\t\tcontainerWidth,\n\t\twindowInnerWidth,\n\t\tisZoomedOut,\n\t] );\n\n\t// Make sure to not render the before and after focusable div elements in view\n\t// mode. They're only needed to capture focus in edit mode.\n\tconst shouldRenderFocusCaptureElements = tabIndex >= 0 && ! isPreviewMode;\n\n\tconst iframe = (\n\t\t<>\n\t\t\t{ shouldRenderFocusCaptureElements && before }\n\t\t\t{ /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */ }\n\t\t\t {\n\t\t\t\t\tif ( props.onKeyDown ) {\n\t\t\t\t\t\tprops.onKeyDown( event );\n\t\t\t\t\t}\n\t\t\t\t\t// If the event originates from inside the iframe, it means\n\t\t\t\t\t// it bubbled through the portal, but only with React\n\t\t\t\t\t// events. We need to to bubble native events as well,\n\t\t\t\t\t// though by doing so we also trigger another React event,\n\t\t\t\t\t// so we need to stop the propagation of this event to avoid\n\t\t\t\t\t// duplication.\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.currentTarget.ownerDocument !==\n\t\t\t\t\t\tevent.target.ownerDocument\n\t\t\t\t\t) {\n\t\t\t\t\t\t// We should only stop propagation of the React event,\n\t\t\t\t\t\t// the native event should further bubble inside the\n\t\t\t\t\t\t// iframe to the document and window.\n\t\t\t\t\t\t// Alternatively, we could consider redispatching the\n\t\t\t\t\t\t// native event in the iframe.\n\t\t\t\t\t\tconst { stopPropagation } = event.nativeEvent;\n\t\t\t\t\t\tevent.nativeEvent.stopPropagation = () => {};\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.nativeEvent.stopPropagation = stopPropagation;\n\t\t\t\t\t\tbubbleEvent(\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\twindow.KeyboardEvent,\n\t\t\t\t\t\t\tevent.currentTarget\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ iframeDocument &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t// We want to prevent React events from bubbling throught the iframe\n\t\t\t\t\t\t// we bubble these manually.\n\t\t\t\t\t\t/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ contentResizeListener }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t,\n\t\t\t\t\t\tiframeDocument.documentElement\n\t\t\t\t\t) }\n\t\t\t\n\t\t\t{ shouldRenderFocusCaptureElements && after }\n\t\t\n\t);\n\n\treturn (\n\t\t
    \n\t\t\t{ containerResizeListener }\n\t\t\t\n\t\t\t\t{ iframe }\n\t\t\t
    \n\t\t
    \n\t);\n}\n\nfunction IframeIfReady( props, ref ) {\n\tconst isInitialised = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().__internalIsInitialized,\n\t\t[]\n\t);\n\n\t// We shouldn't render the iframe until the editor settings are initialised.\n\t// The initial settings are needed to get the styles for the srcDoc, which\n\t// cannot be changed after the iframe is mounted. srcDoc is used to to set\n\t// the initial iframe HTML, which is required to avoid a flash of unstyled\n\t// content.\n\tif ( ! isInitialised ) {\n\t\treturn null;\n\t}\n\n\treturn \n\t\t\n\t);\n}\n\nexport default function AutoBlockPreview( props ) {\n\tconst [ containerResizeListener, { width: containerWidth } ] =\n\t\tuseResizeObserver();\n\n\treturn (\n\t\t<>\n\t\t\t
    \n\t\t\t\t{ containerResizeListener }\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t{ !! containerWidth && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useDisabled, useMergeRefs } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { memo, useMemo } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { ExperimentalBlockEditorProvider } from '../provider';\nimport AutoHeightBlockPreview from './auto';\nimport EditorStyles from '../editor-styles';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockListItems } from '../block-list';\n\nconst EMPTY_ADDITIONAL_STYLES = [];\n\nexport function BlockPreview( {\n\tblocks,\n\tviewportWidth = 1200,\n\tminHeight,\n\tadditionalStyles = EMPTY_ADDITIONAL_STYLES,\n\t// Deprecated props:\n\t__experimentalMinHeight,\n\t__experimentalPadding,\n} ) {\n\tif ( __experimentalMinHeight ) {\n\t\tminHeight = __experimentalMinHeight;\n\t\tdeprecated( 'The __experimentalMinHeight prop', {\n\t\t\tsince: '6.2',\n\t\t\tversion: '6.4',\n\t\t\talternative: 'minHeight',\n\t\t} );\n\t}\n\tif ( __experimentalPadding ) {\n\t\tadditionalStyles = [\n\t\t\t...additionalStyles,\n\t\t\t{ css: `body { padding: ${ __experimentalPadding }px; }` },\n\t\t];\n\t\tdeprecated( 'The __experimentalPadding prop of BlockPreview', {\n\t\t\tsince: '6.2',\n\t\t\tversion: '6.4',\n\t\t\talternative: 'additionalStyles',\n\t\t} );\n\t}\n\n\tconst originalSettings = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings(),\n\t\t[]\n\t);\n\tconst settings = useMemo(\n\t\t() => ( {\n\t\t\t...originalSettings,\n\t\t\tfocusMode: false, // Disable \"Spotlight mode\".\n\t\t\t__unstableIsPreviewMode: true,\n\t\t} ),\n\t\t[ originalSettings ]\n\t);\n\tconst renderedBlocks = useMemo(\n\t\t() => ( Array.isArray( blocks ) ? blocks : [ blocks ] ),\n\t\t[ blocks ]\n\t);\n\n\tif ( ! blocks || blocks.length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\n/**\n * BlockPreview renders a preview of a block or array of blocks.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-preview/README.md\n *\n * @param {Object} preview options for how the preview should be shown\n * @param {Array|Object} preview.blocks A block instance (object) or an array of blocks to be previewed.\n * @param {number} preview.viewportWidth Width of the preview container in pixels. Controls at what size the blocks will be rendered inside the preview. Default: 700.\n *\n * @return {Component} The component to be rendered.\n */\nexport default memo( BlockPreview );\n\n/**\n * This hook is used to lightly mark an element as a block preview wrapper\n * element. Call this hook and pass the returned props to the element to mark as\n * a block preview wrapper, automatically rendering inner blocks as children. If\n * you define a ref for the element, it is important to pass the ref to this\n * hook, which the hook in turn will pass to the component through the props it\n * returns. Optionally, you can also pass any other props through this hook, and\n * they will be merged and returned.\n *\n * @param {Object} options Preview options.\n * @param {WPBlock[]} options.blocks Block objects.\n * @param {Object} options.props Optional. Props to pass to the element. Must contain\n * the ref if one is defined.\n * @param {Object} options.layout Layout settings to be used in the preview.\n */\nexport function useBlockPreview( { blocks, props = {}, layout } ) {\n\tconst originalSettings = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings(),\n\t\t[]\n\t);\n\tconst settings = useMemo(\n\t\t() => ( {\n\t\t\t...originalSettings,\n\t\t\tstyles: undefined, // Clear styles included by the parent settings, as they are already output by the parent's EditorStyles.\n\t\t\tfocusMode: false, // Disable \"Spotlight mode\".\n\t\t\t__unstableIsPreviewMode: true,\n\t\t} ),\n\t\t[ originalSettings ]\n\t);\n\tconst disabledRef = useDisabled();\n\tconst ref = useMergeRefs( [ props.ref, disabledRef ] );\n\tconst renderedBlocks = useMemo(\n\t\t() => ( Array.isArray( blocks ) ? blocks : [ blocks ] ),\n\t\t[ blocks ]\n\t);\n\n\tconst children = (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n\n\treturn {\n\t\t...props,\n\t\tref,\n\t\tclassName: clsx(\n\t\t\tprops.className,\n\t\t\t'block-editor-block-preview__live-content',\n\t\t\t'components-disabled'\n\t\t),\n\t\tchildren: blocks?.length ? children : null,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tisReusableBlock,\n\tcreateBlock,\n\tgetBlockFromExample,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockCard from '../block-card';\nimport BlockPreview from '../block-preview';\n\nfunction InserterPreviewPanel( { item } ) {\n\tconst { name, title, icon, description, initialAttributes, example } = item;\n\tconst isReusable = isReusableBlock( item );\n\tconst blocks = useMemo( () => {\n\t\tif ( ! example ) {\n\t\t\treturn createBlock( name, initialAttributes );\n\t\t}\n\t\treturn getBlockFromExample( name, {\n\t\t\tattributes: {\n\t\t\t\t...example.attributes,\n\t\t\t\t...initialAttributes,\n\t\t\t},\n\t\t\tinnerBlocks: example.innerBlocks,\n\t\t} );\n\t}, [ name, example, initialAttributes ] );\n\t// Same as height of BlockPreviewPanel.\n\tconst previewHeight = 144;\n\tconst sidebarWidth = 280;\n\tconst viewportWidth = example?.viewportWidth ?? 500;\n\tconst scale = sidebarWidth / viewportWidth;\n\tconst minHeight =\n\t\tscale !== 0 && scale < 1 && previewHeight\n\t\t\t? previewHeight / scale\n\t\t\t: previewHeight;\n\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t{ isReusable || example ? (\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t) : (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ __( 'No preview available.' ) }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t
    \n\t\t\t{ ! isReusable && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nexport default InserterPreviewPanel;\n","/**\n * WordPress dependencies\n */\nimport { Button, Composite } from '@wordpress/components';\nimport { forwardRef } from '@wordpress/element';\n\nfunction InserterListboxItem(\n\t{ isFirst, as: Component, children, ...props },\n\tref\n) {\n\treturn (\n\t\t {\n\t\t\t\tconst propsWithTabIndex = {\n\t\t\t\t\t...htmlProps,\n\t\t\t\t\ttabIndex: isFirst ? 0 : htmlProps.tabIndex,\n\t\t\t\t};\n\t\t\t\tif ( Component ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif ( typeof children === 'function' ) {\n\t\t\t\t\treturn children( propsWithTabIndex );\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( InserterListboxItem );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst dragHandle = (\n\t\n\t\t\n\t\n);\n\nexport default dragHandle;\n","/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { Flex, FlexItem } from '@wordpress/components';\nimport { dragHandle } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\n\nexport default function BlockDraggableChip( {\n\tcount,\n\ticon,\n\tisPattern,\n\tfadeWhenDisabled,\n} ) {\n\tconst patternLabel = isPattern && __( 'Pattern' );\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ icon ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpatternLabel ||\n\t\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t\t/* translators: %d: Number of blocks. */\n\t\t\t\t\t\t\t\t_n( '%d block', '%d blocks', count ),\n\t\t\t\t\t\t\t\tcount\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ fadeWhenDisabled && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Draggable } from '@wordpress/components';\nimport {\n\tcreateBlock,\n\tserialize,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggableChip from '../block-draggable/draggable-chip';\nimport { INSERTER_PATTERN_TYPES } from '../inserter/block-patterns-tab/utils';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst InserterDraggableBlocks = ( {\n\tisEnabled,\n\tblocks,\n\ticon,\n\tchildren,\n\tpattern,\n} ) => {\n\tconst transferData = {\n\t\ttype: 'inserter',\n\t\tblocks,\n\t};\n\n\tconst blockTypeIcon = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockType } = select( blocksStore );\n\t\t\treturn (\n\t\t\t\tblocks.length === 1 && getBlockType( blocks[ 0 ].name )?.icon\n\t\t\t);\n\t\t},\n\t\t[ blocks ]\n\t);\n\n\tconst { startDragging, stopDragging } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tif ( ! isEnabled ) {\n\t\treturn children( {\n\t\t\tdraggable: false,\n\t\t\tonDragStart: undefined,\n\t\t\tonDragEnd: undefined,\n\t\t} );\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tstartDragging();\n\t\t\t\tconst parsedBlocks =\n\t\t\t\t\tpattern?.type === INSERTER_PATTERN_TYPES.user &&\n\t\t\t\t\tpattern?.syncStatus !== 'unsynced'\n\t\t\t\t\t\t? [ createBlock( 'core/block', { ref: pattern.id } ) ]\n\t\t\t\t\t\t: blocks;\n\t\t\t\tevent.dataTransfer.setData(\n\t\t\t\t\t'text/html',\n\t\t\t\t\tserialize( parsedBlocks )\n\t\t\t\t);\n\t\t\t} }\n\t\t\tonDragEnd={ () => {\n\t\t\t\tstopDragging();\n\t\t\t} }\n\t\t\t__experimentalDragComponent={\n\t\t\t\t\n\t\t\t}\n\t\t>\n\t\t\t{ ( { onDraggableStart, onDraggableEnd } ) => {\n\t\t\t\treturn children( {\n\t\t\t\t\tdraggable: true,\n\t\t\t\t\tonDragStart: onDraggableStart,\n\t\t\t\t\tonDragEnd: onDraggableEnd,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\n\t);\n};\n\nexport default InserterDraggableBlocks;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMemo, useRef, memo } from '@wordpress/element';\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { __experimentalTruncate as Truncate } from '@wordpress/components';\nimport { ENTER, isAppleOS } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { InserterListboxItem } from '../inserter-listbox';\nimport InserterDraggableBlocks from '../inserter-draggable-blocks';\n\nfunction InserterListItem( {\n\tclassName,\n\tisFirst,\n\titem,\n\tonSelect,\n\tonHover,\n\tisDraggable,\n\t...props\n} ) {\n\tconst isDraggingRef = useRef( false );\n\tconst itemIconStyle = item.icon\n\t\t? {\n\t\t\t\tbackgroundColor: item.icon.background,\n\t\t\t\tcolor: item.icon.foreground,\n\t\t }\n\t\t: {};\n\tconst blocks = useMemo(\n\t\t() => [\n\t\t\tcreateBlock(\n\t\t\t\titem.name,\n\t\t\t\titem.initialAttributes,\n\t\t\t\tcreateBlocksFromInnerBlocksTemplate( item.innerBlocks )\n\t\t\t),\n\t\t],\n\t\t[ item.name, item.initialAttributes, item.innerBlocks ]\n\t);\n\n\tconst isSynced =\n\t\t( isReusableBlock( item ) && item.syncStatus !== 'unsynced' ) ||\n\t\tisTemplatePart( item );\n\n\treturn (\n\t\t\n\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t {\n\t\t\t\t\t\tisDraggingRef.current = true;\n\t\t\t\t\t\tif ( onDragStart ) {\n\t\t\t\t\t\t\tonHover( null );\n\t\t\t\t\t\t\tonDragStart( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tonDragEnd={ ( event ) => {\n\t\t\t\t\t\tisDraggingRef.current = false;\n\t\t\t\t\t\tif ( onDragEnd ) {\n\t\t\t\t\t\t\tonDragEnd( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tonSelect(\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tisAppleOS() ? event.metaKey : event.ctrlKey\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tonHover( null );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\t\t\t\tconst { keyCode } = event;\n\t\t\t\t\t\t\tif ( keyCode === ENTER ) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tonSelect(\n\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\tisAppleOS() ? event.metaKey : event.ctrlKey\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tonHover( null );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonMouseEnter={ () => {\n\t\t\t\t\t\t\tif ( isDraggingRef.current ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonHover( item );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonMouseLeave={ () => onHover( null ) }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default memo( InserterListItem );\n","/**\n * WordPress dependencies\n */\nimport { forwardRef, useEffect, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\n\nfunction InserterListboxGroup( props, ref ) {\n\tconst [ shouldSpeak, setShouldSpeak ] = useState( false );\n\n\tuseEffect( () => {\n\t\tif ( shouldSpeak ) {\n\t\t\tspeak(\n\t\t\t\t__( 'Use left and right arrow keys to move through blocks' )\n\t\t\t);\n\t\t}\n\t}, [ shouldSpeak ] );\n\n\treturn (\n\t\t {\n\t\t\t\tsetShouldSpeak( true );\n\t\t\t} }\n\t\t\tonBlur={ ( event ) => {\n\t\t\t\tconst focusingOutsideGroup = ! event.currentTarget.contains(\n\t\t\t\t\tevent.relatedTarget\n\t\t\t\t);\n\t\t\t\tif ( focusingOutsideGroup ) {\n\t\t\t\t\tsetShouldSpeak( false );\n\t\t\t\t}\n\t\t\t} }\n\t\t\t{ ...props }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( InserterListboxGroup );\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport { Composite } from '@wordpress/components';\n\nfunction InserterListboxRow( props, ref ) {\n\treturn ;\n}\n\nexport default forwardRef( InserterListboxRow );\n","/**\n * WordPress dependencies\n */\nimport { getBlockMenuDefaultClassName } from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport InserterListItem from '../inserter-list-item';\nimport { InserterListboxGroup, InserterListboxRow } from '../inserter-listbox';\n\nfunction chunk( array, size ) {\n\tconst chunks = [];\n\tfor ( let i = 0, j = array.length; i < j; i += size ) {\n\t\tchunks.push( array.slice( i, i + size ) );\n\t}\n\treturn chunks;\n}\n\nfunction BlockTypesList( {\n\titems = [],\n\tonSelect,\n\tonHover = () => {},\n\tchildren,\n\tlabel,\n\tisDraggable = true,\n} ) {\n\tconst className = 'block-editor-block-types-list';\n\tconst listId = useInstanceId( BlockTypesList, className );\n\treturn (\n\t\t\n\t\t\t{ chunk( items, 3 ).map( ( row, i ) => (\n\t\t\t\t\n\t\t\t\t\t{ row.map( ( item, j ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default BlockTypesList;\n","/**\n * WordPress dependencies\n */\nimport { Icon } from '@wordpress/components';\n\nfunction InserterPanel( { title, icon, children } ) {\n\treturn (\n\t\t<>\n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{ title }\n\t\t\t\t

    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t{ children }\n\t\t\t
    \n\t\t\n\t);\n}\n\nexport default InserterPanel;\n","/**\n * WordPress dependencies\n */\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n\tparse,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { withRootClientIdOptionKey } from '../../../store/utils';\n\n/**\n * Retrieves the block types inserter state.\n *\n * @param {string=} rootClientId Insertion's root client ID.\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {boolean} isQuick\n * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)\n */\nconst useBlockTypesState = ( rootClientId, onInsert, isQuick ) => {\n\tconst options = useMemo(\n\t\t() => ( { [ withRootClientIdOptionKey ]: ! isQuick } ),\n\t\t[ isQuick ]\n\t);\n\tconst [ items ] = useSelect(\n\t\t( select ) => [\n\t\t\tselect( blockEditorStore ).getInserterItems(\n\t\t\t\trootClientId,\n\t\t\t\toptions\n\t\t\t),\n\t\t],\n\t\t[ rootClientId, options ]\n\t);\n\n\tconst [ categories, collections ] = useSelect( ( select ) => {\n\t\tconst { getCategories, getCollections } = select( blocksStore );\n\t\treturn [ getCategories(), getCollections() ];\n\t}, [] );\n\n\tconst onSelectItem = useCallback(\n\t\t(\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tinnerBlocks,\n\t\t\t\tsyncStatus,\n\t\t\t\tcontent,\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t},\n\t\t\tshouldFocusBlock\n\t\t) => {\n\t\t\tconst insertedBlock =\n\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t? parse( content, {\n\t\t\t\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t\t\t } )\n\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tinitialAttributes,\n\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate( innerBlocks )\n\t\t\t\t\t );\n\n\t\t\tonInsert(\n\t\t\t\tinsertedBlock,\n\t\t\t\tundefined,\n\t\t\t\tshouldFocusBlock,\n\t\t\t\t_rootClientId\n\t\t\t);\n\t\t},\n\t\t[ onInsert ]\n\t);\n\n\treturn [ items, categories, collections, onSelectItem ];\n};\n\nexport default useBlockTypesState;\n","/**\n * WordPress dependencies\n */\nimport { Composite } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\n\nexport { default as InserterListboxGroup } from './group';\nexport { default as InserterListboxRow } from './row';\nexport { default as InserterListboxItem } from './item';\n\nfunction InserterListbox( { children } ) {\n\treturn (\n\t\t }>\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default InserterListbox;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Icon, blockDefault } from '@wordpress/icons';\n\nfunction InserterNoResults() {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t

    { __( 'No results found.' ) }

    \n\t\t
    \n\t);\n}\n\nexport default InserterNoResults;\n","/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { useMemo, useEffect, forwardRef } from '@wordpress/element';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport InserterListbox from '../inserter-listbox';\nimport { orderBy } from '../../utils/sorting';\nimport InserterNoResults from './no-results';\n\nconst getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];\n\nconst MAX_SUGGESTED_ITEMS = 6;\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation and rerendering the component.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nexport function BlockTypesTabPanel( {\n\titems,\n\tcollections,\n\tcategories,\n\tonSelectItem,\n\tonHover,\n\tshowMostUsedBlocks,\n\tclassName,\n} ) {\n\tconst suggestedItems = useMemo( () => {\n\t\treturn orderBy( items, 'frecency', 'desc' ).slice(\n\t\t\t0,\n\t\t\tMAX_SUGGESTED_ITEMS\n\t\t);\n\t}, [ items ] );\n\n\tconst uncategorizedItems = useMemo( () => {\n\t\treturn items.filter( ( item ) => ! item.category );\n\t}, [ items ] );\n\n\tconst itemsPerCollection = useMemo( () => {\n\t\t// Create a new Object to avoid mutating collection.\n\t\tconst result = { ...collections };\n\t\tObject.keys( collections ).forEach( ( namespace ) => {\n\t\t\tresult[ namespace ] = items.filter(\n\t\t\t\t( item ) => getBlockNamespace( item ) === namespace\n\t\t\t);\n\t\t\tif ( result[ namespace ].length === 0 ) {\n\t\t\t\tdelete result[ namespace ];\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ items, collections ] );\n\n\t// Hide block preview on unmount.\n\tuseEffect( () => () => onHover( null ), [] );\n\n\t/**\n\t * The inserter contains a big number of blocks and opening it is a costful operation.\n\t * The rendering is the most costful part of it, in order to improve the responsiveness\n\t * of the \"opening\" action, these lazy lists allow us to render the inserter category per category,\n\t * once all the categories are rendered, we start rendering the collections and the uncategorized block types.\n\t */\n\tconst currentlyRenderedCategories = useAsyncList( categories );\n\tconst didRenderAllCategories =\n\t\tcategories.length === currentlyRenderedCategories.length;\n\n\t// Async List requires an array.\n\tconst collectionEntries = useMemo( () => {\n\t\treturn Object.entries( collections );\n\t}, [ collections ] );\n\tconst currentlyRenderedCollections = useAsyncList(\n\t\tdidRenderAllCategories ? collectionEntries : EMPTY_ARRAY\n\t);\n\n\treturn (\n\t\t
    \n\t\t\t{ showMostUsedBlocks &&\n\t\t\t\t// Only show the most used blocks if the total amount of block\n\t\t\t\t// is larger than 1 row, otherwise it is not so useful.\n\t\t\t\titems.length > 3 &&\n\t\t\t\t!! suggestedItems.length && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t{ currentlyRenderedCategories.map( ( category ) => {\n\t\t\t\tconst categoryItems = items.filter(\n\t\t\t\t\t( item ) => item.category === category.slug\n\t\t\t\t);\n\t\t\t\tif ( ! categoryItems || ! categoryItems.length ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\n\t\t\t{ didRenderAllCategories && uncategorizedItems.length > 0 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ currentlyRenderedCollections.map(\n\t\t\t\t( [ namespace, collection ] ) => {\n\t\t\t\t\tconst collectionItems = itemsPerCollection[ namespace ];\n\t\t\t\t\tif ( ! collectionItems || ! collectionItems.length ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nexport function BlockTypesTab(\n\t{ rootClientId, onInsert, onHover, showMostUsedBlocks },\n\tref\n) {\n\tconst [ items, categories, collections, onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tif ( ! items.length ) {\n\t\treturn ;\n\t}\n\n\tconst itemsForCurrentRoot = [];\n\tconst itemsRemaining = [];\n\n\tfor ( const item of items ) {\n\t\t// Skip reusable blocks, they moved to the patterns tab.\n\t\tif ( item.category === 'reusable' ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( rootClientId && item.rootClientId === rootClientId ) {\n\t\t\titemsForCurrentRoot.push( item );\n\t\t} else {\n\t\t\titemsRemaining.push( item );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t{ !! itemsForCurrentRoot.length && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t);\n}\n\nexport default forwardRef( BlockTypesTab );\n","/**\n * WordPress dependencies\n */\nimport { Button, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nfunction PatternCategoriesList( {\n\tselectedCategory,\n\tpatternCategories,\n\tonClickCategory,\n} ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__sidebar';\n\treturn (\n\t\t
    \n\t\t\t{ patternCategories.map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonClickCategory( name );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t
    \n\t);\n}\n\nfunction PatternsExplorerSearch( { searchValue, setSearchValue } ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__search';\n\treturn (\n\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction PatternExplorerSidebar( {\n\tselectedCategory,\n\tpatternCategories,\n\tonClickCategory,\n\tsearchValue,\n\tsetSearchValue,\n} ) {\n\tconst baseClassName = 'block-editor-block-patterns-explorer__sidebar';\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t{ ! searchValue && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nexport default PatternExplorerSidebar;\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n\t__experimentalText as Text,\n\tButton,\n} from '@wordpress/components';\nimport { __, _x, _n, sprintf } from '@wordpress/i18n';\n\nexport default function Pagination( {\n\tcurrentPage,\n\tnumPages,\n\tchangePage,\n\ttotalItems,\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ sprintf(\n\t\t\t\t\t// translators: %s: Total number of patterns.\n\t\t\t\t\t_n( '%s item', '%s items', totalItems ),\n\t\t\t\t\ttotalItems\n\t\t\t\t) }\n\t\t\t\n\n\t\t\t{ numPages > 1 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t changePage( 1 ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === 1 }\n\t\t\t\t\t\t\taria-label={ __( 'First page' ) }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t«\n\t\t\t\t\t\t\n\t\t\t\t\t\t changePage( currentPage - 1 ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === 1 }\n\t\t\t\t\t\t\taria-label={ __( 'Previous page' ) }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %1$s: Current page number, %2$s: Total number of pages.\n\t\t\t\t\t\t\t_x( '%1$s of %2$s', 'paging' ),\n\t\t\t\t\t\t\tcurrentPage,\n\t\t\t\t\t\t\tnumPages\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t changePage( currentPage + 1 ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === numPages }\n\t\t\t\t\t\t\taria-label={ __( 'Next page' ) }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t changePage( numPages ) }\n\t\t\t\t\t\t\tdisabled={ currentPage === numPages }\n\t\t\t\t\t\t\taria-label={ __( 'Last page' ) }\n\t\t\t\t\t\t\tsize=\"default\"\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t»\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { cloneBlock } from '@wordpress/blocks';\nimport { useEffect, useState, forwardRef, useMemo } from '@wordpress/element';\nimport {\n\tComposite,\n\tVisuallyHidden,\n\tTooltip,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport { Icon, symbol } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockPreview from '../block-preview';\nimport InserterDraggableBlocks from '../inserter-draggable-blocks';\nimport BlockPatternsPaging from '../block-patterns-paging';\nimport { INSERTER_PATTERN_TYPES } from '../inserter/block-patterns-tab/utils';\n\nconst WithToolTip = ( { showTooltip, title, children } ) => {\n\tif ( showTooltip ) {\n\t\treturn { children };\n\t}\n\treturn <>{ children };\n};\n\nfunction BlockPattern( {\n\tid,\n\tisDraggable,\n\tpattern,\n\tonClick,\n\tonHover,\n\tshowTitle = true,\n\tshowTooltip,\n\tcategory,\n} ) {\n\tconst [ isDragging, setIsDragging ] = useState( false );\n\tconst { blocks, viewportWidth } = pattern;\n\tconst instanceId = useInstanceId( BlockPattern );\n\tconst descriptionId = `block-editor-block-patterns-list__item-description-${ instanceId }`;\n\n\t// When we have a selected category and the pattern is draggable, we need to update the\n\t// pattern's categories in metadata to only contain the selected category, and pass this to\n\t// InserterDraggableBlocks component. We do that because we use this information for pattern\n\t// shuffling and it makes more sense to show only the ones from the initially selected category during insertion.\n\tconst patternBlocks = useMemo( () => {\n\t\tif ( ! category || ! isDraggable ) {\n\t\t\treturn blocks;\n\t\t}\n\t\treturn ( blocks ?? [] ).map( ( block ) => {\n\t\t\tconst clonedBlock = cloneBlock( block );\n\t\t\tif (\n\t\t\t\tclonedBlock.attributes.metadata?.categories?.includes(\n\t\t\t\t\tcategory\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tclonedBlock.attributes.metadata.categories = [ category ];\n\t\t\t}\n\t\t\treturn clonedBlock;\n\t\t} );\n\t}, [ blocks, isDraggable, category ] );\n\n\treturn (\n\t\t\n\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t {\n\t\t\t\t\t\tsetIsDragging( true );\n\t\t\t\t\t\tif ( onDragStart ) {\n\t\t\t\t\t\t\tonHover?.( null );\n\t\t\t\t\t\t\tonDragStart( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tonDragEnd={ ( event ) => {\n\t\t\t\t\t\tsetIsDragging( false );\n\t\t\t\t\t\tif ( onDragEnd ) {\n\t\t\t\t\t\t\tonDragEnd( event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tonClick( pattern, blocks );\n\t\t\t\t\t\t\t\tonHover?.( null );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonMouseEnter={ () => {\n\t\t\t\t\t\t\t\tif ( isDragging ) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonHover?.( pattern );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonMouseLeave={ () => onHover?.( null ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{ showTitle && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ pattern.type ===\n\t\t\t\t\t\t\t\t\t\tINSERTER_PATTERN_TYPES.user &&\n\t\t\t\t\t\t\t\t\t\t! pattern.syncStatus && (\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ ( ! showTooltip ||\n\t\t\t\t\t\t\t\t\t\tpattern.type ===\n\t\t\t\t\t\t\t\t\t\t\tINSERTER_PATTERN_TYPES.user ) && (\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{ pattern.title }\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t\t{ !! pattern.description && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ pattern.description }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction BlockPatternPlaceholder() {\n\treturn (\n\t\t
    \n\t);\n}\n\nfunction BlockPatternsList(\n\t{\n\t\tisDraggable,\n\t\tblockPatterns,\n\t\tshownPatterns,\n\t\tonHover,\n\t\tonClickPattern,\n\t\torientation,\n\t\tlabel = __( 'Block patterns' ),\n\t\tcategory,\n\t\tshowTitle = true,\n\t\tshowTitlesAsTooltip,\n\t\tpagingProps,\n\t},\n\tref\n) {\n\tconst [ activeCompositeId, setActiveCompositeId ] = useState( undefined );\n\n\tuseEffect( () => {\n\t\t// Reset the active composite item whenever the available patterns change,\n\t\t// to make sure that Composite widget can receive focus correctly when its\n\t\t// composite items change. The first composite item will receive focus.\n\t\tconst firstCompositeItemId = blockPatterns.find( ( pattern ) =>\n\t\t\tshownPatterns.includes( pattern )\n\t\t)?.name;\n\t\tsetActiveCompositeId( firstCompositeItemId );\n\t}, [ shownPatterns, blockPatterns ] );\n\n\treturn (\n\t\t\n\t\t\t{ blockPatterns.map( ( pattern ) => {\n\t\t\t\tconst isShown = shownPatterns.includes( pattern );\n\t\t\t\treturn isShown ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ pagingProps && }\n\t\t\n\t);\n}\n\nexport default forwardRef( BlockPatternsList );\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { isUnmodifiedDefaultBlock } from '@wordpress/blocks';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\nfunction getIndex( {\n\tdestinationRootClientId,\n\tdestinationIndex,\n\trootClientId,\n\tregistry,\n} ) {\n\tif ( rootClientId === destinationRootClientId ) {\n\t\treturn destinationIndex;\n\t}\n\tconst parents = [\n\t\t'',\n\t\t...registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockParents( destinationRootClientId ),\n\t\tdestinationRootClientId,\n\t];\n\tconst parentIndex = parents.indexOf( rootClientId );\n\tif ( parentIndex !== -1 ) {\n\t\treturn (\n\t\t\tregistry\n\t\t\t\t.select( blockEditorStore )\n\t\t\t\t.getBlockIndex( parents[ parentIndex + 1 ] ) + 1\n\t\t);\n\t}\n\treturn registry.select( blockEditorStore ).getBlockOrder( rootClientId )\n\t\t.length;\n}\n\n/**\n * @typedef WPInserterConfig\n *\n * @property {string=} rootClientId If set, insertion will be into the\n * block with this ID.\n * @property {number=} insertionIndex If set, insertion will be into this\n * explicit position.\n * @property {string=} clientId If set, insertion will be after the\n * block with this ID.\n * @property {boolean=} isAppender Whether the inserter is an appender\n * or not.\n * @property {Function=} onSelect Called after insertion.\n */\n\n/**\n * Returns the insertion point state given the inserter config.\n *\n * @param {WPInserterConfig} config Inserter Config.\n * @return {Array} Insertion Point State (rootClientID, onInsertBlocks and onToggle).\n */\nfunction useInsertionPoint( {\n\trootClientId = '',\n\tinsertionIndex,\n\tclientId,\n\tisAppender,\n\tonSelect,\n\tshouldFocusBlock = true,\n\tselectBlockOnInsert = true,\n} ) {\n\tconst registry = useRegistry();\n\tconst { getSelectedBlock } = useSelect( blockEditorStore );\n\tconst { destinationRootClientId, destinationIndex } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockOrder,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\n\t\t\tlet _destinationRootClientId = rootClientId;\n\t\t\tlet _destinationIndex;\n\n\t\t\tif ( insertionIndex !== undefined ) {\n\t\t\t\t// Insert into a specific index.\n\t\t\t\t_destinationIndex = insertionIndex;\n\t\t\t} else if ( clientId ) {\n\t\t\t\t// Insert after a specific client ID.\n\t\t\t\t_destinationIndex = getBlockIndex( clientId );\n\t\t\t} else if ( ! isAppender && selectedBlockClientId ) {\n\t\t\t\t_destinationRootClientId = getBlockRootClientId(\n\t\t\t\t\tselectedBlockClientId\n\t\t\t\t);\n\t\t\t\t_destinationIndex = getBlockIndex( selectedBlockClientId ) + 1;\n\t\t\t} else {\n\t\t\t\t// Insert at the end of the list.\n\t\t\t\t_destinationIndex = getBlockOrder(\n\t\t\t\t\t_destinationRootClientId\n\t\t\t\t).length;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdestinationRootClientId: _destinationRootClientId,\n\t\t\t\tdestinationIndex: _destinationIndex,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId, insertionIndex, clientId, isAppender ]\n\t);\n\n\tconst {\n\t\treplaceBlocks,\n\t\tinsertBlocks,\n\t\tshowInsertionPoint,\n\t\thideInsertionPoint,\n\t\tsetLastFocus,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst onInsertBlocks = useCallback(\n\t\t( blocks, meta, shouldForceFocusBlock = false, _rootClientId ) => {\n\t\t\t// When we are trying to move focus or select a new block on insert, we also\n\t\t\t// need to clear the last focus to avoid the focus being set to the wrong block\n\t\t\t// when tabbing back into the canvas if the block was added from outside the\n\t\t\t// editor canvas.\n\t\t\tif (\n\t\t\t\tshouldForceFocusBlock ||\n\t\t\t\tshouldFocusBlock ||\n\t\t\t\tselectBlockOnInsert\n\t\t\t) {\n\t\t\t\tsetLastFocus( null );\n\t\t\t}\n\n\t\t\tconst selectedBlock = getSelectedBlock();\n\n\t\t\tif (\n\t\t\t\t! isAppender &&\n\t\t\t\tselectedBlock &&\n\t\t\t\tisUnmodifiedDefaultBlock( selectedBlock )\n\t\t\t) {\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tselectedBlock.clientId,\n\t\t\t\t\tblocks,\n\t\t\t\t\tnull,\n\t\t\t\t\tshouldFocusBlock || shouldForceFocusBlock ? 0 : null,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tinsertBlocks(\n\t\t\t\t\tblocks,\n\t\t\t\t\tisAppender || _rootClientId === undefined\n\t\t\t\t\t\t? destinationIndex\n\t\t\t\t\t\t: getIndex( {\n\t\t\t\t\t\t\t\tdestinationRootClientId,\n\t\t\t\t\t\t\t\tdestinationIndex,\n\t\t\t\t\t\t\t\trootClientId: _rootClientId,\n\t\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t } ),\n\t\t\t\t\tisAppender || _rootClientId === undefined\n\t\t\t\t\t\t? destinationRootClientId\n\t\t\t\t\t\t: _rootClientId,\n\t\t\t\t\tselectBlockOnInsert,\n\t\t\t\t\tshouldFocusBlock || shouldForceFocusBlock ? 0 : null,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst blockLength = Array.isArray( blocks ) ? blocks.length : 1;\n\t\t\tconst message = sprintf(\n\t\t\t\t// translators: %d: the name of the block that has been added\n\t\t\t\t_n( '%d block added.', '%d blocks added.', blockLength ),\n\t\t\t\tblockLength\n\t\t\t);\n\t\t\tspeak( message );\n\n\t\t\tif ( onSelect ) {\n\t\t\t\tonSelect( blocks );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tisAppender,\n\t\t\tgetSelectedBlock,\n\t\t\treplaceBlocks,\n\t\t\tinsertBlocks,\n\t\t\tdestinationRootClientId,\n\t\t\tdestinationIndex,\n\t\t\tonSelect,\n\t\t\tshouldFocusBlock,\n\t\t\tselectBlockOnInsert,\n\t\t]\n\t);\n\n\tconst onToggleInsertionPoint = useCallback(\n\t\t( item ) => {\n\t\t\tif ( item?.hasOwnProperty( 'rootClientId' ) ) {\n\t\t\t\tshowInsertionPoint(\n\t\t\t\t\titem.rootClientId,\n\t\t\t\t\tgetIndex( {\n\t\t\t\t\t\tdestinationRootClientId,\n\t\t\t\t\t\tdestinationIndex,\n\t\t\t\t\t\trootClientId: item.rootClientId,\n\t\t\t\t\t\tregistry,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\thideInsertionPoint();\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tshowInsertionPoint,\n\t\t\thideInsertionPoint,\n\t\t\tdestinationRootClientId,\n\t\t\tdestinationIndex,\n\t\t]\n\t);\n\n\treturn [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ];\n}\n\nexport default useInsertionPoint;\n","/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { cloneBlock, createBlock } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { INSERTER_PATTERN_TYPES } from '../block-patterns-tab/utils';\n\n/**\n * Retrieves the block patterns inserter state.\n *\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {string=} rootClientId Insertion's root client ID.\n *\n * @param {string} selectedCategory The selected pattern category.\n * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)\n */\nconst usePatternsState = ( onInsert, rootClientId, selectedCategory ) => {\n\tconst { patternCategories, patterns, userPatternCategories } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst {\n\t\t\t\t__experimentalUserPatternCategories,\n\t\t\t\t__experimentalBlockPatternCategories,\n\t\t\t} = getSettings();\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tuserPatternCategories: __experimentalUserPatternCategories,\n\t\t\t\tpatternCategories: __experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst allCategories = useMemo( () => {\n\t\tconst categories = [ ...patternCategories ];\n\t\tuserPatternCategories?.forEach( ( userCategory ) => {\n\t\t\tif (\n\t\t\t\t! categories.find(\n\t\t\t\t\t( existingCategory ) =>\n\t\t\t\t\t\texistingCategory.name === userCategory.name\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcategories.push( userCategory );\n\t\t\t}\n\t\t} );\n\t\treturn categories;\n\t}, [ patternCategories, userPatternCategories ] );\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback(\n\t\t( pattern, blocks ) => {\n\t\t\tconst patternBlocks =\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user &&\n\t\t\t\tpattern.syncStatus !== 'unsynced'\n\t\t\t\t\t? [ createBlock( 'core/block', { ref: pattern.id } ) ]\n\t\t\t\t\t: blocks;\n\t\t\tonInsert(\n\t\t\t\t( patternBlocks ?? [] ).map( ( block ) => {\n\t\t\t\t\tconst clonedBlock = cloneBlock( block );\n\t\t\t\t\tif (\n\t\t\t\t\t\tclonedBlock.attributes.metadata?.categories?.includes(\n\t\t\t\t\t\t\tselectedCategory\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tclonedBlock.attributes.metadata.categories = [\n\t\t\t\t\t\t\tselectedCategory,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn clonedBlock;\n\t\t\t\t} ),\n\t\t\t\tpattern.name\n\t\t\t);\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: block pattern title. */\n\t\t\t\t\t__( 'Block pattern \"%s\" inserted.' ),\n\t\t\t\t\tpattern.title\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'block-pattern-inserted-notice',\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t[ createSuccessNotice, onInsert, selectedCategory ]\n\t);\n\n\treturn [ patterns, allCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n","/**\n * Locale character mapping rules.\n */\ninterface Locale {\n regexp: RegExp;\n map: Record;\n}\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nconst SUPPORTED_LOCALE: Record = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n az: {\n regexp: /\\u0130/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n lt: {\n regexp: /\\u0049|\\u004A|\\u012E|\\u00CC|\\u00CD|\\u0128/g,\n map: {\n I: \"\\u0069\\u0307\",\n J: \"\\u006A\\u0307\",\n Į: \"\\u012F\\u0307\",\n Ì: \"\\u0069\\u0307\\u0300\",\n Í: \"\\u0069\\u0307\\u0301\",\n Ĩ: \"\\u0069\\u0307\\u0303\",\n },\n },\n};\n\n/**\n * Localized lower case.\n */\nexport function localeLowerCase(str: string, locale: string) {\n const lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang) return lowerCase(str.replace(lang.regexp, (m) => lang.map[m]));\n return lowerCase(str);\n}\n\n/**\n * Lower case as a function.\n */\nexport function lowerCase(str: string) {\n return str.toLowerCase();\n}\n","import { lowerCase } from \"lower-case\";\n\nexport interface Options {\n splitRegexp?: RegExp | RegExp[];\n stripRegexp?: RegExp | RegExp[];\n delimiter?: string;\n transform?: (part: string, index: number, parts: string[]) => string;\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nconst DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n\n// Remove all non-word characters.\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nexport function noCase(input: string, options: Options = {}) {\n const {\n splitRegexp = DEFAULT_SPLIT_REGEXP,\n stripRegexp = DEFAULT_STRIP_REGEXP,\n transform = lowerCase,\n delimiter = \" \",\n } = options;\n\n let result = replace(\n replace(input, splitRegexp, \"$1\\0$2\"),\n stripRegexp,\n \"\\0\"\n );\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input: string, re: RegExp | RegExp[], value: string) {\n if (re instanceof RegExp) return input.replace(re, value);\n return re.reduce((input, re) => input.replace(re, value), input);\n}\n","/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\nimport { noCase } from 'change-case';\n\n// Default search helpers.\nconst defaultGetName = ( item ) => item.name || '';\nconst defaultGetTitle = ( item ) => item.title;\nconst defaultGetDescription = ( item ) => item.description || '';\nconst defaultGetKeywords = ( item ) => item.keywords || [];\nconst defaultGetCategory = ( item ) => item.category;\nconst defaultGetCollection = () => null;\n\n// Normalization regexes\nconst splitRegexp = [\n\t/([\\p{Ll}\\p{Lo}\\p{N}])([\\p{Lu}\\p{Lt}])/gu, // One lowercase or digit, followed by one uppercase.\n\t/([\\p{Lu}\\p{Lt}])([\\p{Lu}\\p{Lt}][\\p{Ll}\\p{Lo}])/gu, // One uppercase followed by one uppercase and one lowercase.\n];\nconst stripRegexp = /(\\p{C}|\\p{P}|\\p{S})+/giu; // Anything that's not a punctuation, symbol or control/format character.\n\n// Normalization cache\nconst extractedWords = new Map();\nconst normalizedStrings = new Map();\n\n/**\n * Extracts words from an input string.\n *\n * @param {string} input The input string.\n *\n * @return {Array} Words, extracted from the input string.\n */\nexport function extractWords( input = '' ) {\n\tif ( extractedWords.has( input ) ) {\n\t\treturn extractedWords.get( input );\n\t}\n\n\tconst result = noCase( input, {\n\t\tsplitRegexp,\n\t\tstripRegexp,\n\t} )\n\t\t.split( ' ' )\n\t\t.filter( Boolean );\n\n\textractedWords.set( input, result );\n\n\treturn result;\n}\n\n/**\n * Sanitizes the search input string.\n *\n * @param {string} input The search input to normalize.\n *\n * @return {string} The normalized search input.\n */\nexport function normalizeString( input = '' ) {\n\tif ( normalizedStrings.has( input ) ) {\n\t\treturn normalizedStrings.get( input );\n\t}\n\n\t// Disregard diacritics.\n\t// Input: \"média\"\n\tlet result = removeAccents( input );\n\n\t// Accommodate leading slash, matching autocomplete expectations.\n\t// Input: \"/media\"\n\tresult = result.replace( /^\\//, '' );\n\n\t// Lowercase.\n\t// Input: \"MEDIA\"\n\tresult = result.toLowerCase();\n\n\tnormalizedStrings.set( input, result );\n\n\treturn result;\n}\n\n/**\n * Converts the search term into a list of normalized terms.\n *\n * @param {string} input The search term to normalize.\n *\n * @return {string[]} The normalized list of search terms.\n */\nexport const getNormalizedSearchTerms = ( input = '' ) => {\n\treturn extractWords( normalizeString( input ) );\n};\n\nconst removeMatchingTerms = ( unmatchedTerms, unprocessedTerms ) => {\n\treturn unmatchedTerms.filter(\n\t\t( term ) =>\n\t\t\t! getNormalizedSearchTerms( unprocessedTerms ).some(\n\t\t\t\t( unprocessedTerm ) => unprocessedTerm.includes( term )\n\t\t\t)\n\t);\n};\n\nexport const searchBlockItems = (\n\titems,\n\tcategories,\n\tcollections,\n\tsearchInput\n) => {\n\tconst normalizedSearchTerms = getNormalizedSearchTerms( searchInput );\n\tif ( normalizedSearchTerms.length === 0 ) {\n\t\treturn items;\n\t}\n\n\tconst config = {\n\t\tgetCategory: ( item ) =>\n\t\t\tcategories.find( ( { slug } ) => slug === item.category )?.title,\n\t\tgetCollection: ( item ) =>\n\t\t\tcollections[ item.name.split( '/' )[ 0 ] ]?.title,\n\t};\n\n\treturn searchItems( items, searchInput, config );\n};\n\n/**\n * Filters an item list given a search term.\n *\n * @param {Array} items Item list\n * @param {string} searchInput Search input.\n * @param {Object} config Search Config.\n *\n * @return {Array} Filtered item list.\n */\nexport const searchItems = ( items = [], searchInput = '', config = {} ) => {\n\tconst normalizedSearchTerms = getNormalizedSearchTerms( searchInput );\n\tif ( normalizedSearchTerms.length === 0 ) {\n\t\treturn items;\n\t}\n\n\tconst rankedItems = items\n\t\t.map( ( item ) => {\n\t\t\treturn [ item, getItemSearchRank( item, searchInput, config ) ];\n\t\t} )\n\t\t.filter( ( [ , rank ] ) => rank > 0 );\n\n\trankedItems.sort( ( [ , rank1 ], [ , rank2 ] ) => rank2 - rank1 );\n\treturn rankedItems.map( ( [ item ] ) => item );\n};\n\n/**\n * Get the search rank for a given item and a specific search term.\n * The better the match, the higher the rank.\n * If the rank equals 0, it should be excluded from the results.\n *\n * @param {Object} item Item to filter.\n * @param {string} searchTerm Search term.\n * @param {Object} config Search Config.\n *\n * @return {number} Search Rank.\n */\nexport function getItemSearchRank( item, searchTerm, config = {} ) {\n\tconst {\n\t\tgetName = defaultGetName,\n\t\tgetTitle = defaultGetTitle,\n\t\tgetDescription = defaultGetDescription,\n\t\tgetKeywords = defaultGetKeywords,\n\t\tgetCategory = defaultGetCategory,\n\t\tgetCollection = defaultGetCollection,\n\t} = config;\n\n\tconst name = getName( item );\n\tconst title = getTitle( item );\n\tconst description = getDescription( item );\n\tconst keywords = getKeywords( item );\n\tconst category = getCategory( item );\n\tconst collection = getCollection( item );\n\n\tconst normalizedSearchInput = normalizeString( searchTerm );\n\tconst normalizedTitle = normalizeString( title );\n\n\tlet rank = 0;\n\n\t// Prefers exact matches\n\t// Then prefers if the beginning of the title matches the search term\n\t// name, keywords, categories, collection, variations match come later.\n\tif ( normalizedSearchInput === normalizedTitle ) {\n\t\trank += 30;\n\t} else if ( normalizedTitle.startsWith( normalizedSearchInput ) ) {\n\t\trank += 20;\n\t} else {\n\t\tconst terms = [\n\t\t\tname,\n\t\t\ttitle,\n\t\t\tdescription,\n\t\t\t...keywords,\n\t\t\tcategory,\n\t\t\tcollection,\n\t\t].join( ' ' );\n\t\tconst normalizedSearchTerms = extractWords( normalizedSearchInput );\n\t\tconst unmatchedTerms = removeMatchingTerms(\n\t\t\tnormalizedSearchTerms,\n\t\t\tterms\n\t\t);\n\n\t\tif ( unmatchedTerms.length === 0 ) {\n\t\t\trank += 10;\n\t\t}\n\t}\n\n\t// Give a better rank to \"core\" namespaced items.\n\tif ( rank !== 0 && name.startsWith( 'core/' ) ) {\n\t\tconst isCoreBlockVariation = name !== item.id;\n\t\t// Give a bit better rank to \"core\" blocks over \"core\" block variations.\n\t\trank += isCoreBlockVariation ? 1 : 2;\n\t}\n\n\treturn rank;\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useEffect } from '@wordpress/element';\nimport { useAsyncList, usePrevious } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\nconst PAGE_SIZE = 20;\nconst INITIAL_INSERTER_RESULTS = 5;\n\n/**\n * Supplies values needed to page the patterns list client side.\n *\n * @param {Array} currentCategoryPatterns An array of the current patterns to display.\n * @param {string} currentCategory The currently selected category.\n * @param {Object} scrollContainerRef Ref of container to to find scroll container for when moving between pages.\n * @param {string} currentFilter The currently search filter.\n *\n * @return {Object} Returns the relevant paging values. (totalItems, categoryPatternsList, numPages, changePage, currentPage)\n */\nexport default function usePatternsPaging(\n\tcurrentCategoryPatterns,\n\tcurrentCategory,\n\tscrollContainerRef,\n\tcurrentFilter = ''\n) {\n\tconst [ currentPage, setCurrentPage ] = useState( 1 );\n\tconst previousCategory = usePrevious( currentCategory );\n\tconst previousFilter = usePrevious( currentFilter );\n\tif (\n\t\t( previousCategory !== currentCategory ||\n\t\t\tpreviousFilter !== currentFilter ) &&\n\t\tcurrentPage !== 1\n\t) {\n\t\tsetCurrentPage( 1 );\n\t}\n\tconst totalItems = currentCategoryPatterns.length;\n\tconst pageIndex = currentPage - 1;\n\tconst categoryPatterns = useMemo( () => {\n\t\treturn currentCategoryPatterns.slice(\n\t\t\tpageIndex * PAGE_SIZE,\n\t\t\tpageIndex * PAGE_SIZE + PAGE_SIZE\n\t\t);\n\t}, [ pageIndex, currentCategoryPatterns ] );\n\tconst categoryPatternsAsyncList = useAsyncList( categoryPatterns, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst numPages = Math.ceil( currentCategoryPatterns.length / PAGE_SIZE );\n\tconst changePage = ( page ) => {\n\t\tconst scrollContainer = getScrollContainer(\n\t\t\tscrollContainerRef?.current\n\t\t);\n\t\tscrollContainer?.scrollTo( 0, 0 );\n\n\t\tsetCurrentPage( page );\n\t};\n\n\tuseEffect(\n\t\tfunction scrollToTopOnCategoryChange() {\n\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\tscrollContainerRef?.current\n\t\t\t);\n\t\t\tscrollContainer?.scrollTo( 0, 0 );\n\t\t},\n\t\t[ currentCategory, scrollContainerRef ]\n\t);\n\n\treturn {\n\t\ttotalItems,\n\t\tcategoryPatterns,\n\t\tcategoryPatternsAsyncList,\n\t\tnumPages,\n\t\tchangePage,\n\t\tcurrentPage,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect, useRef, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce } from '@wordpress/compose';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockPatternsList from '../../block-patterns-list';\nimport useInsertionPoint from '../hooks/use-insertion-point';\nimport usePatternsState from '../hooks/use-patterns-state';\nimport InserterListbox from '../../inserter-listbox';\nimport { searchItems } from '../search-items';\nimport BlockPatternsPaging from '../../block-patterns-paging';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport {\n\tINSERTER_PATTERN_TYPES,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n} from '../block-patterns-tab/utils';\n\nfunction PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {\n\tif ( ! filterValue ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %d: number of patterns. */\n\t\t\t\t_n(\n\t\t\t\t\t'%d pattern found',\n\t\t\t\t\t'%d patterns found',\n\t\t\t\t\tfilteredBlockPatternsLength\n\t\t\t\t),\n\t\t\t\tfilteredBlockPatternsLength\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction PatternList( {\n\tsearchValue,\n\tselectedCategory,\n\tpatternCategories,\n\trootClientId,\n} ) {\n\tconst container = useRef();\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\trootClientId,\n\t\tshouldFocusBlock: true,\n\t} );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tselectedCategory\n\t);\n\n\tconst registeredPatternCategories = useMemo(\n\t\t() =>\n\t\t\tpatternCategories.map(\n\t\t\t\t( patternCategory ) => patternCategory.name\n\t\t\t),\n\t\t[ patternCategories ]\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tconst filteredPatterns = patterns.filter( ( pattern ) => {\n\t\t\tif ( selectedCategory === allPatternsCategory.name ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === myPatternsCategory.name &&\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( selectedCategory === 'uncategorized' ) {\n\t\t\t\tconst hasKnownCategory = pattern.categories.some(\n\t\t\t\t\t( category ) =>\n\t\t\t\t\t\tregisteredPatternCategories.includes( category )\n\t\t\t\t);\n\n\t\t\t\treturn ! pattern.categories?.length || ! hasKnownCategory;\n\t\t\t}\n\n\t\t\treturn pattern.categories?.includes( selectedCategory );\n\t\t} );\n\n\t\tif ( ! searchValue ) {\n\t\t\treturn filteredPatterns;\n\t\t}\n\n\t\treturn searchItems( filteredPatterns, searchValue );\n\t}, [\n\t\tsearchValue,\n\t\tpatterns,\n\t\tselectedCategory,\n\t\tregisteredPatternCategories,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! searchValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [ searchValue, debouncedSpeak, filteredBlockPatterns.length ] );\n\n\tconst pagingProps = usePatternsPaging(\n\t\tfilteredBlockPatterns,\n\t\tselectedCategory,\n\t\tcontainer\n\t);\n\n\t// Reset page when search value changes.\n\tconst [ previousSearchValue, setPreviousSearchValue ] =\n\t\tuseState( searchValue );\n\tif ( searchValue !== previousSearchValue ) {\n\t\tsetPreviousSearchValue( searchValue );\n\t\tpagingProps.changePage( 1 );\n\t}\n\n\tconst hasItems = !! filteredBlockPatterns?.length;\n\treturn (\n\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{ hasItems && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default PatternList;\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { _x, _n, sprintf } from '@wordpress/i18n';\n\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from '../hooks/use-patterns-state';\nimport {\n\tisPatternFiltered,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tINSERTER_PATTERN_TYPES,\n} from './utils';\n\nfunction hasRegisteredCategory( pattern, allCategories ) {\n\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\treturn false;\n\t}\n\n\treturn pattern.categories.some( ( cat ) =>\n\t\tallCategories.some( ( category ) => category.name === cat )\n\t);\n}\n\nexport function usePatternCategories( rootClientId, sourceFilter = 'all' ) {\n\tconst [ patterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst filteredPatterns = useMemo(\n\t\t() =>\n\t\t\tsourceFilter === 'all'\n\t\t\t\t? patterns\n\t\t\t\t: patterns.filter(\n\t\t\t\t\t\t( pattern ) =>\n\t\t\t\t\t\t\t! isPatternFiltered( pattern, sourceFilter )\n\t\t\t\t ),\n\t\t[ sourceFilter, patterns ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tfilteredPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( a, b ) => a.label.localeCompare( b.label ) );\n\n\t\tif (\n\t\t\tfilteredPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern, allCategories )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\t\tif (\n\t\t\tfilteredPatterns.some(\n\t\t\t\t( pattern ) => pattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t)\n\t\t) {\n\t\t\tcategories.unshift( myPatternsCategory );\n\t\t}\n\t\tif ( filteredPatterns.length > 0 ) {\n\t\t\tcategories.unshift( {\n\t\t\t\tname: allPatternsCategory.name,\n\t\t\t\tlabel: allPatternsCategory.label,\n\t\t\t} );\n\t\t}\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of categories . */\n\t\t\t\t_n(\n\t\t\t\t\t'%d category button displayed.',\n\t\t\t\t\t'%d category buttons displayed.',\n\t\t\t\t\tcategories.length\n\t\t\t\t),\n\t\t\t\tcategories.length\n\t\t\t)\n\t\t);\n\t\treturn categories;\n\t}, [ allCategories, filteredPatterns ] );\n\n\treturn populatedCategories;\n}\n","/**\n * WordPress dependencies\n */\nimport { Modal } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport PatternExplorerSidebar from './pattern-explorer-sidebar';\nimport PatternList from './pattern-list';\nimport { usePatternCategories } from '../block-patterns-tab/use-pattern-categories';\n\nfunction PatternsExplorer( { initialCategory, rootClientId } ) {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst [ selectedCategory, setSelectedCategory ] = useState(\n\t\tinitialCategory?.name\n\t);\n\n\tconst patternCategories = usePatternCategories( rootClientId );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction PatternsExplorerModal( { onModalClose, ...restProps } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default PatternsExplorerModal;\n","/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalSpacer as Spacer,\n\t__experimentalHeading as Heading,\n\t__experimentalView as View,\n\t__experimentalNavigatorProvider as NavigatorProvider,\n\t__experimentalNavigatorScreen as NavigatorScreen,\n\t__experimentalNavigatorButton as NavigatorButton,\n\t__experimentalNavigatorBackButton as NavigatorBackButton,\n\tFlexBlock,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\n\nfunction ScreenHeader( { title } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function MobileTabNavigation( { categories, children } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t\n\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ children( category ) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tSVG,\n\tPath,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItemsChoice,\n\tExternalLink,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { Icon } from '@wordpress/icons';\nimport { useMemo, createInterpolateElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tmyPatternsCategory,\n\tINSERTER_SYNC_TYPES,\n\tINSERTER_PATTERN_TYPES,\n} from './utils';\n\nconst getShouldDisableSyncFilter = ( sourceFilter ) =>\n\tsourceFilter !== 'all' && sourceFilter !== 'user';\nconst getShouldHideSourcesFilter = ( category ) => {\n\treturn category.name === myPatternsCategory.name;\n};\n\nconst PATTERN_SOURCE_MENU_OPTIONS = [\n\t{\n\t\tvalue: 'all',\n\t\tlabel: _x( 'All', 'patterns' ),\n\t},\n\t{\n\t\tvalue: INSERTER_PATTERN_TYPES.directory,\n\t\tlabel: __( 'Pattern Directory' ),\n\t},\n\t{\n\t\tvalue: INSERTER_PATTERN_TYPES.theme,\n\t\tlabel: __( 'Theme & Plugins' ),\n\t},\n\t{\n\t\tvalue: INSERTER_PATTERN_TYPES.user,\n\t\tlabel: __( 'User' ),\n\t},\n];\n\nexport function PatternsFilter( {\n\tsetPatternSyncFilter,\n\tsetPatternSourceFilter,\n\tpatternSyncFilter,\n\tpatternSourceFilter,\n\tscrollContainerRef,\n\tcategory,\n} ) {\n\t// If the category is `myPatterns` then we need to set the source filter to `user`, but\n\t// we do this by deriving from props rather than calling setPatternSourceFilter otherwise\n\t// the user may be confused when switching to another category if the haven't explicity set\n\t// this filter themselves.\n\tconst currentPatternSourceFilter =\n\t\tcategory.name === myPatternsCategory.name\n\t\t\t? INSERTER_PATTERN_TYPES.user\n\t\t\t: patternSourceFilter;\n\n\t// We need to disable the sync filter option if the source filter is not 'all' or 'user'\n\t// otherwise applying them will just result in no patterns being shown.\n\tconst shouldDisableSyncFilter = getShouldDisableSyncFilter(\n\t\tcurrentPatternSourceFilter\n\t);\n\n\t// We also hide the directory and theme source filter if the category is `myPatterns`\n\t// otherwise there will only be one option available.\n\tconst shouldHideSourcesFilter = getShouldHideSourcesFilter( category );\n\n\tconst patternSyncMenuOptions = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tvalue: 'all',\n\t\t\t\tlabel: _x( 'All', 'patterns' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: INSERTER_SYNC_TYPES.full,\n\t\t\t\tlabel: _x( 'Synced', 'patterns' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: INSERTER_SYNC_TYPES.unsynced,\n\t\t\t\tlabel: _x( 'Not synced', 'patterns' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t],\n\t\t[ shouldDisableSyncFilter ]\n\t);\n\n\tfunction handleSetSourceFilterChange( newSourceFilter ) {\n\t\tsetPatternSourceFilter( newSourceFilter );\n\t\tif ( getShouldDisableSyncFilter( newSourceFilter ) ) {\n\t\t\tsetPatternSyncFilter( 'all' );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ () => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ ! shouldHideSourcesFilter && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\thandleSetSourceFilterChange( value );\n\t\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tvalue={ currentPatternSourceFilter }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tsetPatternSyncFilter( value );\n\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tvalue={ patternSyncFilter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t\t'Patterns are available from the WordPress.org Pattern Directory, bundled in the active theme, or created by users on this site. Only patterns created on this site can be synced.'\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tLink: (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalText as Text,\n\tFlexBlock,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from '../hooks/use-patterns-state';\nimport BlockPatternsList from '../../block-patterns-list';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport { PatternsFilter } from './patterns-filter';\nimport { usePatternCategories } from './use-pattern-categories';\nimport {\n\tisPatternFiltered,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tINSERTER_PATTERN_TYPES,\n} from './utils';\nimport { store as blockEditorStore } from '../../../store';\n\nconst noop = () => {};\n\nexport function PatternCategoryPreviews( {\n\trootClientId,\n\tonInsert,\n\tonHover = noop,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst isZoomOutMode = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',\n\t\t[]\n\t);\n\tconst [ allPatterns, , onClickPattern ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId,\n\t\tcategory?.name\n\t);\n\tconst [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' );\n\tconst [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );\n\n\tconst availableCategories = usePatternCategories(\n\t\trootClientId,\n\t\tpatternSourceFilter\n\t);\n\tconst scrollContainerRef = useRef();\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif (\n\t\t\t\t\tisPatternFiltered(\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tpatternSourceFilter,\n\t\t\t\t\t\tpatternSyncFilter\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === allPatternsCategory.name ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tcategory.name === myPatternsCategory.name &&\n\t\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === 'uncategorized' ) {\n\t\t\t\t\t// The uncategorized category should show all the patterns without any category...\n\t\t\t\t\tif ( ! pattern.categories ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// ...or with no available category.\n\t\t\t\t\treturn ! pattern.categories.some( ( catName ) =>\n\t\t\t\t\t\tavailableCategories.some( ( c ) => c.name === catName )\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t} ),\n\t\t[\n\t\t\tallPatterns,\n\t\t\tavailableCategories,\n\t\t\tcategory.name,\n\t\t\tpatternSourceFilter,\n\t\t\tpatternSyncFilter,\n\t\t]\n\t);\n\n\tconst pagingProps = usePatternsPaging(\n\t\tcurrentCategoryPatterns,\n\t\tcategory,\n\t\tscrollContainerRef\n\t);\n\tconst { changePage } = pagingProps;\n\n\t// Hide block pattern preview on unmount.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tconst onSetPatternSyncFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSyncFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSyncFilter, changePage ]\n\t);\n\tconst onSetPatternSourceFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSourceFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSourceFilter, changePage ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ ! currentCategoryPatterns.length && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'No results found' ) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t{ currentCategoryPatterns.length > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t{ isZoomOutMode && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Drag and drop patterns into the canvas.' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { usePrevious, useReducedMotion } from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\nimport {\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tprivateApis as componentsPrivateApis,\n\t__unstableMotion as motion,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nfunction CategoryTabs( {\n\tcategories,\n\tselectedCategory,\n\tonSelectCategory,\n\tchildren,\n} ) {\n\t// Copied from InterfaceSkeleton.\n\tconst ANIMATION_DURATION = 0.25;\n\tconst disableMotion = useReducedMotion();\n\tconst defaultTransition = {\n\t\ttype: 'tween',\n\t\tduration: disableMotion ? 0 : ANIMATION_DURATION,\n\t\tease: [ 0.6, 0, 0.4, 1 ],\n\t};\n\n\tconst previousSelectedCategory = usePrevious( selectedCategory );\n\n\treturn (\n\t\t {\n\t\t\t\t// Pass the full category object\n\t\t\t\tonSelectCategory(\n\t\t\t\t\tcategories.find(\n\t\t\t\t\t\t( category ) => category.name === categoryId\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} }\n\t\t>\n\t\t\t\n\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport default CategoryTabs;\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { Button, Spinner } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport PatternsExplorerModal from '../block-patterns-explorer';\nimport MobileTabNavigation from '../mobile-tab-navigation';\nimport { PatternCategoryPreviews } from './pattern-category-previews';\nimport { usePatternCategories } from './use-pattern-categories';\nimport CategoryTabs from '../category-tabs';\nimport InserterNoResults from '../no-results';\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\nfunction BlockPatternsTab( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n\tchildren,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\n\tconst categories = usePatternCategories( rootClientId );\n\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\tconst isResolvingPatterns = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).isResolvingPatterns(),\n\t\t[]\n\t);\n\n\tif ( isResolvingPatterns ) {\n\t\treturn (\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t);\n\t}\n\n\tif ( ! categories.length ) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\n\t\t\t\t\t setShowPatternsExplorer( true ) }\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t setShowPatternsExplorer( false ) }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockPatternsTab;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst external = (\n\t\n\t\t\n\t\n);\n\nexport default external;\n","/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\n\nconst mediaTypeTag = { image: 'img', video: 'video', audio: 'audio' };\n\n/** @typedef {import('./hooks').InserterMediaItem} InserterMediaItem */\n\n/**\n * Creates a block and a preview element from a media object.\n *\n * @param {InserterMediaItem} media The media object to create the block from.\n * @param {('image'|'audio'|'video')} mediaType The media type to create the block for.\n * @return {[WPBlock, JSX.Element]} An array containing the block and the preview element.\n */\nexport function getBlockAndPreviewFromMedia( media, mediaType ) {\n\t// Add the common attributes between the different media types.\n\tconst attributes = {\n\t\tid: media.id || undefined,\n\t\tcaption: media.caption || undefined,\n\t};\n\tconst mediaSrc = media.url;\n\tconst alt = media.alt || undefined;\n\tif ( mediaType === 'image' ) {\n\t\tattributes.url = mediaSrc;\n\t\tattributes.alt = alt;\n\t} else if ( [ 'video', 'audio' ].includes( mediaType ) ) {\n\t\tattributes.src = mediaSrc;\n\t}\n\tconst PreviewTag = mediaTypeTag[ mediaType ];\n\tconst preview = (\n\t\t {\n\t\t\t\t// Fall back to the media source if the preview cannot be loaded.\n\t\t\t\tif ( currentTarget.src === media.previewUrl ) {\n\t\t\t\t\tcurrentTarget.src = mediaSrc;\n\t\t\t\t}\n\t\t\t} }\n\t\t/>\n\t);\n\treturn [ createBlock( `core/${ mediaType }`, attributes ), preview ];\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tTooltip,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tSpinner,\n\tModal,\n\tFlex,\n\tFlexItem,\n\tButton,\n\tComposite,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useCallback, useState } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { moreVertical, external } from '@wordpress/icons';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport InserterDraggableBlocks from '../../inserter-draggable-blocks';\nimport { getBlockAndPreviewFromMedia } from './utils';\nimport { store as blockEditorStore } from '../../../store';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst MAXIMUM_TITLE_LENGTH = 25;\nconst MEDIA_OPTIONS_POPOVER_PROPS = {\n\tposition: 'bottom left',\n\tclassName:\n\t\t'block-editor-inserter__media-list__item-preview-options__popover',\n};\n\nfunction MediaPreviewOptions( { category, media } ) {\n\tif ( ! category.getReportUrl ) {\n\t\treturn null;\n\t}\n\tconst reportUrl = category.getReportUrl( media );\n\treturn (\n\t\t\n\t\t\t{ () => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\twindow.open( reportUrl, '_blank' ).focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: The media type to report e.g: \"image\", \"video\", \"audio\" */\n\t\t\t\t\t\t\t__( 'Report %s' ),\n\t\t\t\t\t\t\tcategory.mediaType\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction InsertExternalImageModal( { onClose, onSubmit } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t

    \n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'This image cannot be uploaded to your Media Library, but it can still be inserted as an external image.'\n\t\t\t\t\t) }\n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'External images can be removed by the external provider without warning and could even have legal compliance issues related to privacy legislation.'\n\t\t\t\t\t) }\n\t\t\t\t

    \n\t\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Insert' ) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport function MediaPreview( { media, onClick, category } ) {\n\tconst [ showExternalUploadModal, setShowExternalUploadModal ] =\n\t\tuseState( false );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ isInserting, setIsInserting ] = useState( false );\n\tconst [ block, preview ] = useMemo(\n\t\t() => getBlockAndPreviewFromMedia( media, category.mediaType ),\n\t\t[ media, category.mediaType ]\n\t);\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst onMediaInsert = useCallback(\n\t\t( previewBlock ) => {\n\t\t\t// Prevent multiple uploads when we're in the process of inserting.\n\t\t\tif ( isInserting ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst settings = getSettings();\n\t\t\tconst clonedBlock = cloneBlock( previewBlock );\n\t\t\tconst { id, url, caption } = clonedBlock.attributes;\n\n\t\t\t// User has no permission to upload media.\n\t\t\tif ( ! id && ! settings.mediaUpload ) {\n\t\t\t\tsetShowExternalUploadModal( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Media item already exists in library, so just insert it.\n\t\t\tif ( !! id ) {\n\t\t\t\tonClick( clonedBlock );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetIsInserting( true );\n\t\t\t// Media item does not exist in library, so try to upload it.\n\t\t\t// Fist fetch the image data. This may fail if the image host\n\t\t\t// doesn't allow CORS with the domain.\n\t\t\t// If this happens, we insert the image block using the external\n\t\t\t// URL and let the user know about the possible implications.\n\t\t\twindow\n\t\t\t\t.fetch( url )\n\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t.then( ( blob ) => {\n\t\t\t\t\tsettings.mediaUpload( {\n\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\tadditionalData: { caption },\n\t\t\t\t\t\tonFileChange( [ img ] ) {\n\t\t\t\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick( {\n\t\t\t\t\t\t\t\t...clonedBlock,\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t...clonedBlock.attributes,\n\t\t\t\t\t\t\t\t\tid: img.id,\n\t\t\t\t\t\t\t\t\turl: img.url,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t\t\t\t__( 'Image uploaded and inserted.' ),\n\t\t\t\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\t\t\tonError( message ) {\n\t\t\t\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\tsetShowExternalUploadModal( true );\n\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tisInserting,\n\t\t\tgetSettings,\n\t\t\tonClick,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n\n\tconst title =\n\t\ttypeof media.title === 'string'\n\t\t\t? media.title\n\t\t\t: media.title?.rendered || __( 'no title' );\n\n\tlet truncatedTitle;\n\tif ( title.length > MAXIMUM_TITLE_LENGTH ) {\n\t\tconst omission = '...';\n\t\ttruncatedTitle =\n\t\t\ttitle.slice( 0, MAXIMUM_TITLE_LENGTH - omission.length ) + omission;\n\t}\n\tconst onMouseEnter = useCallback( () => setIsHovered( true ), [] );\n\tconst onMouseLeave = useCallback( () => setIsHovered( false ), [] );\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{ /* Adding `is-hovered` class to the wrapper element is needed\n\t\t\t\t\t\tbecause the options Popover is rendered outside of this node. */ }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={ () => onMediaInsert( block ) }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t{ preview }\n\t\t\t\t\t\t\t\t\t\t{ isInserting && (\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{ ! isInserting && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t\t{ showExternalUploadModal && (\n\t\t\t\t setShowExternalUploadModal( false ) }\n\t\t\t\t\tonSubmit={ () => {\n\t\t\t\t\t\tonClick( cloneBlock( block ) );\n\t\t\t\t\t\tcreateSuccessNotice( __( 'Image inserted.' ), {\n\t\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tsetShowExternalUploadModal( false );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Composite } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { MediaPreview } from './media-preview';\n\nfunction MediaList( {\n\tmediaList,\n\tcategory,\n\tonClick,\n\tlabel = __( 'Media List' ),\n} ) {\n\treturn (\n\t\t\n\t\t\t{ mediaList.map( ( media, index ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport default MediaList;\n","/**\n * WordPress dependencies\n */\nimport { Spinner, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useDebouncedInput } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport MediaList from './media-list';\nimport { useMediaResults } from './hooks';\nimport InserterNoResults from '../no-results';\n\nconst INITIAL_MEDIA_ITEMS_PER_PAGE = 10;\n\nexport function MediaCategoryPanel( { rootClientId, onInsert, category } ) {\n\tconst [ search, setSearch, debouncedSearch ] = useDebouncedInput();\n\tconst { mediaList, isLoading } = useMediaResults( category, {\n\t\tper_page: !! debouncedSearch ? 20 : INITIAL_MEDIA_ITEMS_PER_PAGE,\n\t\tsearch: debouncedSearch,\n\t} );\n\tconst baseCssClass = 'block-editor-inserter__media-panel';\n\tconst searchLabel = category.labels.search_items || __( 'Search' );\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t{ isLoading && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\t{ ! isLoading && ! mediaList?.length && }\n\t\t\t{ ! isLoading && !! mediaList?.length && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\n/** @typedef {import('../../../store/actions').InserterMediaRequest} InserterMediaRequest */\n/** @typedef {import('../../../store/actions').InserterMediaItem} InserterMediaItem */\n\n/**\n * Fetches media items based on the provided category.\n * Each media category is responsible for providing a `fetch` function.\n *\n * @param {Object} category The media category to fetch results for.\n * @param {InserterMediaRequest} query The query args to use for the request.\n * @return {InserterMediaItem[]} The media results.\n */\nexport function useMediaResults( category, query = {} ) {\n\tconst [ mediaList, setMediaList ] = useState();\n\tconst [ isLoading, setIsLoading ] = useState( false );\n\t// We need to keep track of the last request made because\n\t// multiple request can be fired without knowing the order\n\t// of resolution, and we need to ensure we are showing\n\t// the results of the last request.\n\t// In the future we could use AbortController to cancel previous\n\t// requests, but we don't for now as it involves adding support\n\t// for this to `core-data` package.\n\tconst lastRequestRef = useRef();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst key = JSON.stringify( {\n\t\t\t\tcategory: category.name,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tlastRequestRef.current = key;\n\t\t\tsetIsLoading( true );\n\t\t\tsetMediaList( [] ); // Empty the previous results.\n\t\t\tconst _media = await category.fetch?.( query );\n\t\t\tif ( key === lastRequestRef.current ) {\n\t\t\t\tsetMediaList( _media );\n\t\t\t\tsetIsLoading( false );\n\t\t\t}\n\t\t} )();\n\t}, [ category.name, ...Object.values( query ) ] );\n\treturn { mediaList, isLoading };\n}\n\nexport function useMediaCategories( rootClientId ) {\n\tconst [ categories, setCategories ] = useState( [] );\n\n\tconst inserterMediaCategories = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getInserterMediaCategories(),\n\t\t[]\n\t);\n\tconst { canInsertImage, canInsertVideo, canInsertAudio } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanInsertImage: canInsertBlockType(\n\t\t\t\t\t'core/image',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertVideo: canInsertBlockType(\n\t\t\t\t\t'core/video',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertAudio: canInsertBlockType(\n\t\t\t\t\t'core/audio',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst _categories = [];\n\t\t\t// If `inserterMediaCategories` is not defined in\n\t\t\t// block editor settings, do not show any media categories.\n\t\t\tif ( ! inserterMediaCategories ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Loop through categories to check if they have at least one media item.\n\t\t\tconst categoriesHaveMedia = new Map(\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tinserterMediaCategories.map( async ( category ) => {\n\t\t\t\t\t\t// Some sources are external and we don't need to make a request.\n\t\t\t\t\t\tif ( category.isExternalResource ) {\n\t\t\t\t\t\t\treturn [ category.name, true ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet results = [];\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresults = await category.fetch( {\n\t\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t// If the request fails, we shallow the error and just don't show\n\t\t\t\t\t\t\t// the category, in order to not break the media tab.\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ category.name, !! results.length ];\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t);\n\t\t\t// We need to filter out categories that don't have any media items or\n\t\t\t// whose corresponding block type is not allowed to be inserted, based\n\t\t\t// on the category's `mediaType`.\n\t\t\tconst canInsertMediaType = {\n\t\t\t\timage: canInsertImage,\n\t\t\t\tvideo: canInsertVideo,\n\t\t\t\taudio: canInsertAudio,\n\t\t\t};\n\t\t\tinserterMediaCategories.forEach( ( category ) => {\n\t\t\t\tif (\n\t\t\t\t\tcanInsertMediaType[ category.mediaType ] &&\n\t\t\t\t\tcategoriesHaveMedia.get( category.name )\n\t\t\t\t) {\n\t\t\t\t\t_categories.push( category );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !! _categories.length ) {\n\t\t\t\tsetCategories( _categories );\n\t\t\t}\n\t\t} )();\n\t}, [\n\t\tcanInsertImage,\n\t\tcanInsertVideo,\n\t\tcanInsertAudio,\n\t\tinserterMediaCategories,\n\t] );\n\treturn categories;\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { Button } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { MediaCategoryPanel } from './media-panel';\nimport MediaUploadCheck from '../../media-upload/check';\nimport MediaUpload from '../../media-upload';\nimport { useMediaCategories } from './hooks';\nimport { getBlockAndPreviewFromMedia } from './utils';\nimport MobileTabNavigation from '../mobile-tab-navigation';\nimport CategoryTabs from '../category-tabs';\nimport InserterNoResults from '../no-results';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image', 'video', 'audio' ];\n\nfunction MediaTab( {\n\trootClientId,\n\tselectedCategory,\n\tonSelectCategory,\n\tonInsert,\n\tchildren,\n} ) {\n\tconst mediaCategories = useMediaCategories( rootClientId );\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\tconst baseCssClass = 'block-editor-inserter__media-tabs';\n\tconst onSelectMedia = useCallback(\n\t\t( media ) => {\n\t\t\tif ( ! media?.url ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [ block ] = getBlockAndPreviewFromMedia( media, media.type );\n\t\t\tonInsert( block );\n\t\t},\n\t\t[ onInsert ]\n\t);\n\tconst categories = useMemo(\n\t\t() =>\n\t\t\tmediaCategories.map( ( mediaCategory ) => ( {\n\t\t\t\t...mediaCategory,\n\t\t\t\tlabel: mediaCategory.labels.name,\n\t\t\t} ) ),\n\t\t[ mediaCategories ]\n\t);\n\n\tif ( ! categories.length ) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t// Safari doesn't emit a focus event on button elements when\n\t\t\t\t\t\t\t\t\t\t// clicked and we need to manually focus the button here.\n\t\t\t\t\t\t\t\t\t\t// The reason is that core's Media Library modal explicitly triggers a\n\t\t\t\t\t\t\t\t\t\t// focus event and therefore a `blur` event is triggered on a different\n\t\t\t\t\t\t\t\t\t\t// element, which doesn't contain the `data-unstable-ignore-focus-outside-for-relatedtarget`\n\t\t\t\t\t\t\t\t\t\t// attribute making the Inserter dialog to close.\n\t\t\t\t\t\t\t\t\t\tevent.target.focus();\n\t\t\t\t\t\t\t\t\t\topen();\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__media-library-button\"\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tdata-unstable-ignore-focus-outside-for-relatedtarget=\".media-modal\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Open Media Library' ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default MediaTab;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Fill: __unstableInserterMenuExtension, Slot } = createSlotFill(\n\t'__unstableInserterMenuExtension'\n);\n\n__unstableInserterMenuExtension.Slot = Slot;\n\nexport default __unstableInserterMenuExtension;\n","/** @typedef {import('../store/selectors').WPEditorInserterItem} WPEditorInserterItem */\n\n/**\n * Helper function to order inserter block items according to a provided array of prioritized blocks.\n *\n * @param {WPEditorInserterItem[]} items The array of editor inserter block items to be sorted.\n * @param {string[]} priority The array of block names to be prioritized.\n * @return {WPEditorInserterItem[]} The sorted array of editor inserter block items.\n */\nexport const orderInserterBlockItems = ( items, priority ) => {\n\tif ( ! priority ) {\n\t\treturn items;\n\t}\n\n\titems.sort( ( { id: aName }, { id: bName } ) => {\n\t\t// Sort block items according to `priority`.\n\t\tlet aIndex = priority.indexOf( aName );\n\t\tlet bIndex = priority.indexOf( bName );\n\t\t// All other block items should come after that.\n\t\tif ( aIndex < 0 ) {\n\t\t\taIndex = priority.length;\n\t\t}\n\t\tif ( bIndex < 0 ) {\n\t\t\tbIndex = priority.length;\n\t\t}\n\t\treturn aIndex - bIndex;\n\t} );\n\n\treturn items;\n};\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect } from '@wordpress/element';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { VisuallyHidden } from '@wordpress/components';\nimport { useDebounce, useAsyncList } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport BlockPatternsList from '../block-patterns-list';\nimport __unstableInserterMenuExtension from '../inserter-menu-extension';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport usePatternsState from './hooks/use-patterns-state';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport { searchBlockItems, searchItems } from './search-items';\nimport InserterListbox from '../inserter-listbox';\nimport { orderBy } from '../../utils/sorting';\nimport { orderInserterBlockItems } from '../../utils/order-inserter-block-items';\nimport { store as blockEditorStore } from '../../store';\n\nconst INITIAL_INSERTER_RESULTS = 9;\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation and rerendering the component.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nfunction InserterSearchResults( {\n\tfilterValue,\n\tonSelect,\n\tonHover,\n\tonHoverPattern,\n\trootClientId,\n\tclientId,\n\tisAppender,\n\t__experimentalInsertionIndex,\n\tmaxBlockPatterns,\n\tmaxBlockTypes,\n\tshowBlockDirectory = false,\n\tisDraggable = true,\n\tshouldFocusBlock = true,\n\tprioritizePatterns,\n\tselectBlockOnInsert,\n\tisQuick,\n} ) {\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\n\tconst { prioritizedBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst blockListSettings =\n\t\t\t\tselect( blockEditorStore ).getBlockListSettings( rootClientId );\n\n\t\t\treturn {\n\t\t\t\tprioritizedBlocks:\n\t\t\t\t\tblockListSettings?.prioritizedInserterBlocks || EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\tonSelect,\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\tshouldFocusBlock,\n\t\tselectBlockOnInsert,\n\t} );\n\tconst [\n\t\tblockTypes,\n\t\tblockTypeCategories,\n\t\tblockTypeCollections,\n\t\tonSelectBlockType,\n\t] = useBlockTypesState( destinationRootClientId, onInsertBlocks, isQuick );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tif ( maxBlockPatterns === 0 ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst results = searchItems( patterns, filterValue );\n\t\treturn maxBlockPatterns !== undefined\n\t\t\t? results.slice( 0, maxBlockPatterns )\n\t\t\t: results;\n\t}, [ filterValue, patterns, maxBlockPatterns ] );\n\n\tlet maxBlockTypesToShow = maxBlockTypes;\n\tif ( prioritizePatterns && filteredBlockPatterns.length > 2 ) {\n\t\tmaxBlockTypesToShow = 0;\n\t}\n\n\tconst filteredBlockTypes = useMemo( () => {\n\t\tif ( maxBlockTypesToShow === 0 ) {\n\t\t\treturn [];\n\t\t}\n\t\tconst nonPatternBlockTypes = blockTypes.filter(\n\t\t\t( blockType ) => blockType.name !== 'core/block'\n\t\t);\n\t\tlet orderedItems = orderBy( nonPatternBlockTypes, 'frecency', 'desc' );\n\n\t\tif ( ! filterValue && prioritizedBlocks.length ) {\n\t\t\torderedItems = orderInserterBlockItems(\n\t\t\t\torderedItems,\n\t\t\t\tprioritizedBlocks\n\t\t\t);\n\t\t}\n\n\t\tconst results = searchBlockItems(\n\t\t\torderedItems,\n\t\t\tblockTypeCategories,\n\t\t\tblockTypeCollections,\n\t\t\tfilterValue\n\t\t);\n\n\t\treturn maxBlockTypesToShow !== undefined\n\t\t\t? results.slice( 0, maxBlockTypesToShow )\n\t\t\t: results;\n\t}, [\n\t\tfilterValue,\n\t\tblockTypes,\n\t\tblockTypeCategories,\n\t\tblockTypeCollections,\n\t\tmaxBlockTypesToShow,\n\t\tprioritizedBlocks,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! filterValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockTypes.length + filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [\n\t\tfilterValue,\n\t\tdebouncedSpeak,\n\t\tfilteredBlockTypes,\n\t\tfilteredBlockPatterns,\n\t] );\n\n\tconst currentShownBlockTypes = useAsyncList( filteredBlockTypes, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst currentShownPatterns = useAsyncList(\n\t\tcurrentShownBlockTypes.length === filteredBlockTypes.length\n\t\t\t? filteredBlockPatterns\n\t\t\t: EMPTY_ARRAY\n\t);\n\n\tconst hasItems =\n\t\tfilteredBlockTypes.length > 0 || filteredBlockPatterns.length > 0;\n\n\tconst blocksUI = !! filteredBlockTypes.length && (\n\t\t{ __( 'Blocks' ) } }\n\t\t>\n\t\t\t\n\t\t\n\t);\n\n\tconst patternsUI = !! filteredBlockPatterns.length && (\n\t\t{ __( 'Block patterns' ) }\n\t\t\t}\n\t\t>\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ ! showBlockDirectory && ! hasItems && }\n\n\t\t\t{ prioritizePatterns ? patternsUI : blocksUI }\n\n\t\t\t{ !! filteredBlockTypes.length &&\n\t\t\t\t!! filteredBlockPatterns.length && (\n\t\t\t\t\t
    \n\t\t\t\t) }\n\n\t\t\t{ prioritizePatterns ? blocksUI : patternsUI }\n\n\t\t\t{ showBlockDirectory && (\n\t\t\t\t<__unstableInserterMenuExtension.Slot\n\t\t\t\t\tfillProps={ {\n\t\t\t\t\t\tonSelect: onSelectBlockType,\n\t\t\t\t\t\tonHover,\n\t\t\t\t\t\tfilterValue,\n\t\t\t\t\t\thasItems,\n\t\t\t\t\t\trootClientId: destinationRootClientId,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ ( fills ) => {\n\t\t\t\t\t\tif ( fills.length ) {\n\t\t\t\t\t\t\treturn fills;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( ! hasItems ) {\n\t\t\t\t\t\t\treturn ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default InserterSearchResults;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst closeSmall = (\n\t\n\t\t\n\t\n);\n\nexport default closeSmall;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { forwardRef } from '@wordpress/element';\nimport { closeSmall } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nfunction TabbedSidebar(\n\t{ defaultTabId, onClose, onSelect, selectedTab, tabs, closeButtonLabel },\n\tref\n) {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t onClose() }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t\n\t\t\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ tab.title }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{ tab.panel }\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default forwardRef( TabbedSidebar );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tforwardRef,\n\tuseState,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseLayoutEffect,\n} from '@wordpress/element';\nimport { VisuallyHidden, SearchControl, Popover } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useDebouncedInput } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport Tips from './tips';\nimport InserterPreviewPanel from './preview-panel';\nimport BlockTypesTab from './block-types-tab';\nimport BlockPatternsTab from './block-patterns-tab';\nimport { PatternCategoryPreviews } from './block-patterns-tab/pattern-category-previews';\nimport { MediaTab, MediaCategoryPanel } from './media-tab';\nimport InserterSearchResults from './search-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport { store as blockEditorStore } from '../../store';\nimport TabbedSidebar from '../tabbed-sidebar';\n\nconst NOOP = () => {};\nfunction InserterMenu(\n\t{\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\t__experimentalInsertionIndex,\n\t\tonSelect,\n\t\tshowInserterHelpPanel,\n\t\tshowMostUsedBlocks,\n\t\t__experimentalFilterValue = '',\n\t\tshouldFocusBlock = true,\n\t\tonPatternCategorySelection,\n\t\tonClose,\n\t\t__experimentalInitialTab,\n\t\t__experimentalInitialCategory,\n\t},\n\tref\n) {\n\tconst isZoomOutMode = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).__unstableGetEditorMode() === 'zoom-out',\n\t\t[]\n\t);\n\tconst [ filterValue, setFilterValue, delayedFilterValue ] =\n\t\tuseDebouncedInput( __experimentalFilterValue );\n\tconst [ hoveredItem, setHoveredItem ] = useState( null );\n\tconst [ selectedPatternCategory, setSelectedPatternCategory ] = useState(\n\t\t__experimentalInitialCategory\n\t);\n\tconst [ patternFilter, setPatternFilter ] = useState( 'all' );\n\tconst [ selectedMediaCategory, setSelectedMediaCategory ] =\n\t\tuseState( null );\n\tfunction getInitialTab() {\n\t\tif ( __experimentalInitialTab ) {\n\t\t\treturn __experimentalInitialTab;\n\t\t}\n\n\t\tif ( isZoomOutMode ) {\n\t\t\treturn 'patterns';\n\t\t}\n\t}\n\tconst [ selectedTab, setSelectedTab ] = useState( getInitialTab() );\n\n\tconst [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ] =\n\t\tuseInsertionPoint( {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\t\tshouldFocusBlock,\n\t\t} );\n\tconst blockTypesTabRef = useRef();\n\n\tconst onInsert = useCallback(\n\t\t( blocks, meta, shouldForceFocusBlock, _rootClientId ) => {\n\t\t\tonInsertBlocks(\n\t\t\t\tblocks,\n\t\t\t\tmeta,\n\t\t\t\tshouldForceFocusBlock,\n\t\t\t\t_rootClientId\n\t\t\t);\n\t\t\tonSelect( blocks );\n\n\t\t\t// Check for focus loss due to filtering blocks by selected block type\n\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\tif (\n\t\t\t\t\t! shouldFocusBlock &&\n\t\t\t\t\t! blockTypesTabRef.current?.contains(\n\t\t\t\t\t\tref.current.ownerDocument.activeElement\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// There has been a focus loss, so focus the first button in the block types tab\n\t\t\t\t\tblockTypesTabRef.current?.querySelector( 'button' ).focus();\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t[ onInsertBlocks, onSelect, shouldFocusBlock ]\n\t);\n\n\tconst onInsertPattern = useCallback(\n\t\t( blocks, patternName ) => {\n\t\t\tonToggleInsertionPoint( false );\n\t\t\tonInsertBlocks( blocks, { patternName } );\n\t\t\tonSelect();\n\t\t},\n\t\t[ onInsertBlocks, onSelect ]\n\t);\n\n\tconst onHover = useCallback(\n\t\t( item ) => {\n\t\t\tonToggleInsertionPoint( item );\n\t\t\tsetHoveredItem( item );\n\t\t},\n\t\t[ onToggleInsertionPoint, setHoveredItem ]\n\t);\n\n\tconst onClickPatternCategory = useCallback(\n\t\t( patternCategory, filter ) => {\n\t\t\tsetSelectedPatternCategory( patternCategory );\n\t\t\tsetPatternFilter( filter );\n\t\t\tonPatternCategorySelection?.();\n\t\t},\n\t\t[ setSelectedPatternCategory, onPatternCategorySelection ]\n\t);\n\n\tconst showPatternPanel =\n\t\tselectedTab === 'patterns' &&\n\t\t! delayedFilterValue &&\n\t\t!! selectedPatternCategory;\n\n\tconst showMediaPanel = selectedTab === 'media' && !! selectedMediaCategory;\n\n\tconst inserterSearch = useMemo( () => {\n\t\tif ( selectedTab === 'media' ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t {\n\t\t\t\t\t\tif ( hoveredItem ) {\n\t\t\t\t\t\t\tsetHoveredItem( null );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetFilterValue( value );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ filterValue }\n\t\t\t\t\tlabel={ __( 'Search for blocks and patterns' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t/>\n\t\t\t\t{ !! delayedFilterValue && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tselectedTab,\n\t\thoveredItem,\n\t\tsetHoveredItem,\n\t\tsetFilterValue,\n\t\tfilterValue,\n\t\tdelayedFilterValue,\n\t\tonSelect,\n\t\tonHover,\n\t\tshouldFocusBlock,\n\t\tclientId,\n\t\trootClientId,\n\t\t__experimentalInsertionIndex,\n\t\tisAppender,\n\t] );\n\n\tconst blocksTab = useMemo( () => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t{ showInserterHelpPanel && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'A tip for using the block editor' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tdestinationRootClientId,\n\t\tonInsert,\n\t\tonHover,\n\t\tshowMostUsedBlocks,\n\t\tshowInserterHelpPanel,\n\t] );\n\n\tconst patternsTab = useMemo( () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ showPatternPanel && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tdestinationRootClientId,\n\t\tonInsertPattern,\n\t\tonClickPatternCategory,\n\t\tpatternFilter,\n\t\tselectedPatternCategory,\n\t\tshowPatternPanel,\n\t] );\n\n\tconst mediaTab = useMemo( () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ showMediaPanel && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}, [\n\t\tdestinationRootClientId,\n\t\tonInsert,\n\t\tselectedMediaCategory,\n\t\tsetSelectedMediaCategory,\n\t\tshowMediaPanel,\n\t] );\n\n\tconst handleSetSelectedTab = ( value ) => {\n\t\t// If no longer on patterns tab remove the category setting.\n\t\tif ( value !== 'patterns' ) {\n\t\t\tsetSelectedPatternCategory( null );\n\t\t}\n\t\tsetSelectedTab( value );\n\t};\n\n\t// Focus first active tab, if any\n\tconst tabsRef = useRef();\n\tuseLayoutEffect( () => {\n\t\tif ( tabsRef.current ) {\n\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\ttabsRef.current\n\t\t\t\t\t.querySelector( '[role=\"tab\"][aria-selected=\"true\"]' )\n\t\t\t\t\t?.focus();\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ inserterSearch }\n\t\t\t\t\t\t\t\t\t{ selectedTab === 'blocks' &&\n\t\t\t\t\t\t\t\t\t\t! delayedFilterValue &&\n\t\t\t\t\t\t\t\t\t\tblocksTab }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'patterns',\n\t\t\t\t\t\t\ttitle: __( 'Patterns' ),\n\t\t\t\t\t\t\tpanel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{ inserterSearch }\n\t\t\t\t\t\t\t\t\t{ selectedTab === 'patterns' &&\n\t\t\t\t\t\t\t\t\t\t! delayedFilterValue &&\n\t\t\t\t\t\t\t\t\t\tpatternsTab }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'media',\n\t\t\t\t\t\t\ttitle: __( 'Media' ),\n\t\t\t\t\t\t\tpanel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{ inserterSearch }\n\t\t\t\t\t\t\t\t\t{ mediaTab }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t] }\n\t\t\t\t/>\n\t\t\t
    \n\t\t\t{ showInserterHelpPanel && hoveredItem && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nexport const PrivateInserterMenu = forwardRef( InserterMenu );\n\nfunction PublicInserterMenu( props, ref ) {\n\treturn (\n\t\t\n\t);\n}\n\nexport default forwardRef( PublicInserterMenu );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { Button, SearchControl } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InserterSearchResults from './search-results';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport usePatternsState from './hooks/use-patterns-state';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport { store as blockEditorStore } from '../../store';\n\nconst SEARCH_THRESHOLD = 6;\nconst SHOWN_BLOCK_TYPES = 6;\nconst SHOWN_BLOCK_PATTERNS = 2;\nconst SHOWN_BLOCK_PATTERNS_WITH_PRIORITIZATION = 4;\n\nexport default function QuickInserter( {\n\tonSelect,\n\trootClientId,\n\tclientId,\n\tisAppender,\n\tprioritizePatterns,\n\tselectBlockOnInsert,\n\thasSearch = true,\n} ) {\n\tconst [ filterValue, setFilterValue ] = useState( '' );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\tonSelect,\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tselectBlockOnInsert,\n\t} );\n\tconst [ blockTypes ] = useBlockTypesState(\n\t\tdestinationRootClientId,\n\t\tonInsertBlocks,\n\t\ttrue\n\t);\n\n\tconst [ patterns ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId\n\t);\n\n\tconst { setInserterIsOpened, insertionIndex } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings, getBlockIndex, getBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst settings = getSettings();\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tconst blockCount = getBlockCount();\n\n\t\t\treturn {\n\t\t\t\tsetInserterIsOpened: settings.__experimentalSetIsInserterOpened,\n\t\t\t\tinsertionIndex: index === -1 ? blockCount : index,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst showPatterns =\n\t\tpatterns.length && ( !! filterValue || prioritizePatterns );\n\tconst showSearch =\n\t\thasSearch &&\n\t\t( ( showPatterns && patterns.length > SEARCH_THRESHOLD ) ||\n\t\t\tblockTypes.length > SEARCH_THRESHOLD );\n\n\tuseEffect( () => {\n\t\tif ( setInserterIsOpened ) {\n\t\t\tsetInserterIsOpened( false );\n\t\t}\n\t}, [ setInserterIsOpened ] );\n\n\t// When clicking Browse All select the appropriate block so as\n\t// the insertion point can work as expected.\n\tconst onBrowseAll = () => {\n\t\tsetInserterIsOpened( {\n\t\t\trootClientId,\n\t\t\tinsertionIndex,\n\t\t\tfilterValue,\n\t\t\tonSelect,\n\t\t} );\n\t};\n\n\tlet maxBlockPatterns = 0;\n\tif ( showPatterns ) {\n\t\tmaxBlockPatterns = prioritizePatterns\n\t\t\t? SHOWN_BLOCK_PATTERNS_WITH_PRIORITIZATION\n\t\t\t: SHOWN_BLOCK_PATTERNS;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ showSearch && (\n\t\t\t\t {\n\t\t\t\t\t\tsetFilterValue( value );\n\t\t\t\t\t} }\n\t\t\t\t\tlabel={ __( 'Search for blocks and patterns' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t{ setInserterIsOpened && (\n\t\t\t\t\n\t\t\t\t\t{ __( 'Browse all' ) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { speak } from '@wordpress/a11y';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Dropdown, Button } from '@wordpress/components';\nimport { Component } from '@wordpress/element';\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport InserterMenu from './menu';\nimport QuickInserter from './quick-inserter';\nimport { store as blockEditorStore } from '../../store';\n\nconst defaultRenderToggle = ( {\n\tonToggle,\n\tdisabled,\n\tisOpen,\n\tblockTitle,\n\thasSingleBlockType,\n\ttoggleProps = {},\n\tprioritizePatterns,\n} ) => {\n\tconst {\n\t\tas: Wrapper = Button,\n\t\tlabel: labelProp,\n\t\tonClick,\n\t\t...rest\n\t} = toggleProps;\n\n\tlet label = labelProp;\n\tif ( ! label && hasSingleBlockType ) {\n\t\tlabel = sprintf(\n\t\t\t// translators: %s: the name of the block when there is only one\n\t\t\t_x( 'Add %s', 'directly add the only allowed block' ),\n\t\t\tblockTitle\n\t\t);\n\t} else if ( ! label && prioritizePatterns ) {\n\t\tlabel = __( 'Add pattern' );\n\t} else if ( ! label ) {\n\t\tlabel = _x( 'Add block', 'Generic label for block inserter button' );\n\t}\n\n\t// Handle both onClick functions from the toggle and the parent component.\n\tfunction handleClick( event ) {\n\t\tif ( onToggle ) {\n\t\t\tonToggle( event );\n\t\t}\n\t\tif ( onClick ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t);\n};\n\nclass Inserter extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.onToggle = this.onToggle.bind( this );\n\t\tthis.renderToggle = this.renderToggle.bind( this );\n\t\tthis.renderContent = this.renderContent.bind( this );\n\t}\n\n\tonToggle( isOpen ) {\n\t\tconst { onToggle } = this.props;\n\n\t\t// Surface toggle callback to parent component.\n\t\tif ( onToggle ) {\n\t\t\tonToggle( isOpen );\n\t\t}\n\t}\n\n\t/**\n\t * Render callback to display Dropdown toggle element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onToggle Callback to invoke when toggle is\n\t * pressed.\n\t * @param {boolean} options.isOpen Whether dropdown is currently open.\n\t *\n\t * @return {Element} Dropdown toggle element.\n\t */\n\trenderToggle( { onToggle, isOpen } ) {\n\t\tconst {\n\t\t\tdisabled,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\thasItems,\n\t\t\trenderToggle = defaultRenderToggle,\n\t\t\tprioritizePatterns,\n\t\t} = this.props;\n\n\t\treturn renderToggle( {\n\t\t\tonToggle,\n\t\t\tisOpen,\n\t\t\tdisabled: disabled || ! hasItems,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\tprioritizePatterns,\n\t\t} );\n\t}\n\n\t/**\n\t * Render callback to display Dropdown content element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onClose Callback to invoke when dropdown is\n\t * closed.\n\t *\n\t * @return {Element} Dropdown content element.\n\t */\n\trenderContent( { onClose } ) {\n\t\tconst {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tshowInserterHelpPanel,\n\n\t\t\t// This prop is experimental to give some time for the quick inserter to mature\n\t\t\t// Feel free to make them stable after a few releases.\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tprioritizePatterns,\n\t\t\tonSelectOrClose,\n\t\t\tselectBlockOnInsert,\n\t\t} = this.props;\n\n\t\tif ( isQuick ) {\n\t\t\treturn (\n\t\t\t\t {\n\t\t\t\t\t\tconst firstBlock =\n\t\t\t\t\t\t\tArray.isArray( blocks ) && blocks?.length\n\t\t\t\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t\t\t\t: blocks;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonSelectOrClose &&\n\t\t\t\t\t\t\ttypeof onSelectOrClose === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tonSelectOrClose( firstBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisAppender={ isAppender }\n\t\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t\t\tselectBlockOnInsert={ selectBlockOnInsert }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t {\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ isAppender }\n\t\t\t\tshowInserterHelpPanel={ showInserterHelpPanel }\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tposition,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\tinsertOnlyAllowedBlock,\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tonSelectOrClose,\n\t\t} = this.props;\n\n\t\tif ( hasSingleBlockType || directInsertBlock ) {\n\t\t\treturn this.renderToggle( { onToggle: insertOnlyAllowedBlock } );\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default compose( [\n\twithSelect(\n\t\t( select, { clientId, rootClientId, shouldDirectInsert = true } ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasInserterItems,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\tgetDirectInsertBlock,\n\t\t\t\tgetSettings,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { getBlockVariations } = select( blocksStore );\n\n\t\t\trootClientId =\n\t\t\t\trootClientId || getBlockRootClientId( clientId ) || undefined;\n\n\t\t\tconst allowedBlocks = getAllowedBlocks( rootClientId );\n\n\t\t\tconst directInsertBlock =\n\t\t\t\tshouldDirectInsert && getDirectInsertBlock( rootClientId );\n\n\t\t\tconst settings = getSettings();\n\n\t\t\tconst hasSingleBlockType =\n\t\t\t\tallowedBlocks?.length === 1 &&\n\t\t\t\tgetBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )\n\t\t\t\t\t?.length === 0;\n\n\t\t\tlet allowedBlockType = false;\n\t\t\tif ( hasSingleBlockType ) {\n\t\t\t\tallowedBlockType = allowedBlocks[ 0 ];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thasItems: hasInserterItems( rootClientId ),\n\t\t\t\thasSingleBlockType,\n\t\t\t\tblockTitle: allowedBlockType ? allowedBlockType.title : '',\n\t\t\t\tallowedBlockType,\n\t\t\t\tdirectInsertBlock,\n\t\t\t\trootClientId,\n\t\t\t\tprioritizePatterns:\n\t\t\t\t\tsettings.__experimentalPreferPatternsOnRoot &&\n\t\t\t\t\t! rootClientId,\n\t\t\t};\n\t\t}\n\t),\n\twithDispatch( ( dispatch, ownProps, { select } ) => {\n\t\treturn {\n\t\t\tinsertOnlyAllowedBlock() {\n\t\t\t\tconst {\n\t\t\t\t\trootClientId,\n\t\t\t\t\tclientId,\n\t\t\t\t\tisAppender,\n\t\t\t\t\thasSingleBlockType,\n\t\t\t\t\tallowedBlockType,\n\t\t\t\t\tdirectInsertBlock,\n\t\t\t\t\tonSelectOrClose,\n\t\t\t\t\tselectBlockOnInsert,\n\t\t\t\t} = ownProps;\n\n\t\t\t\tif ( ! hasSingleBlockType && ! directInsertBlock ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfunction getAdjacentBlockAttributes( attributesToCopy ) {\n\t\t\t\t\tconst { getBlock, getPreviousBlockClientId } =\n\t\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! attributesToCopy ||\n\t\t\t\t\t\t( ! clientId && ! rootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = {};\n\t\t\t\t\tlet adjacentAttributes = {};\n\n\t\t\t\t\t// If there is no clientId, then attempt to get attributes\n\t\t\t\t\t// from the last block within innerBlocks of the root block.\n\t\t\t\t\tif ( ! clientId ) {\n\t\t\t\t\t\tconst parentBlock = getBlock( rootClientId );\n\n\t\t\t\t\t\tif ( parentBlock?.innerBlocks?.length ) {\n\t\t\t\t\t\t\tconst lastInnerBlock =\n\t\t\t\t\t\t\t\tparentBlock.innerBlocks[\n\t\t\t\t\t\t\t\t\tparentBlock.innerBlocks.length - 1\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tdirectInsertBlock &&\n\t\t\t\t\t\t\t\tdirectInsertBlock?.name === lastInnerBlock.name\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tadjacentAttributes = lastInnerBlock.attributes;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Otherwise, attempt to get attributes from the\n\t\t\t\t\t\t// previous block relative to the current clientId.\n\t\t\t\t\t\tconst currentBlock = getBlock( clientId );\n\t\t\t\t\t\tconst previousBlock = getBlock(\n\t\t\t\t\t\t\tgetPreviousBlockClientId( clientId )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( currentBlock?.name === previousBlock?.name ) {\n\t\t\t\t\t\t\tadjacentAttributes =\n\t\t\t\t\t\t\t\tpreviousBlock?.attributes || {};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy over only those attributes flagged to be copied.\n\t\t\t\t\tattributesToCopy.forEach( ( attribute ) => {\n\t\t\t\t\t\tif ( adjacentAttributes.hasOwnProperty( attribute ) ) {\n\t\t\t\t\t\t\tresult[ attribute ] =\n\t\t\t\t\t\t\t\tadjacentAttributes[ attribute ];\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tfunction getInsertionIndex() {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetBlockIndex,\n\t\t\t\t\t\tgetBlockSelectionEnd,\n\t\t\t\t\t\tgetBlockOrder,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\t\t// If the clientId is defined, we insert at the position of the block.\n\t\t\t\t\tif ( clientId ) {\n\t\t\t\t\t\treturn getBlockIndex( clientId );\n\t\t\t\t\t}\n\n\t\t\t\t\t// If there a selected block, we insert after the selected block.\n\t\t\t\t\tconst end = getBlockSelectionEnd();\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isAppender &&\n\t\t\t\t\t\tend &&\n\t\t\t\t\t\tgetBlockRootClientId( end ) === rootClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn getBlockIndex( end ) + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise, we insert at the end of the current rootClientId.\n\t\t\t\t\treturn getBlockOrder( rootClientId ).length;\n\t\t\t\t}\n\n\t\t\t\tconst { insertBlock } = dispatch( blockEditorStore );\n\n\t\t\t\tlet blockToInsert;\n\n\t\t\t\t// Attempt to augment the directInsertBlock with attributes from an adjacent block.\n\t\t\t\t// This ensures styling from nearby blocks is preserved in the newly inserted block.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/37904\n\t\t\t\tif ( directInsertBlock ) {\n\t\t\t\t\tconst newAttributes = getAdjacentBlockAttributes(\n\t\t\t\t\t\tdirectInsertBlock.attributesToCopy\n\t\t\t\t\t);\n\n\t\t\t\t\tblockToInsert = createBlock( directInsertBlock.name, {\n\t\t\t\t\t\t...( directInsertBlock.attributes || {} ),\n\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tblockToInsert = createBlock( allowedBlockType.name );\n\t\t\t\t}\n\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblockToInsert,\n\t\t\t\t\tgetInsertionIndex(),\n\t\t\t\t\trootClientId,\n\t\t\t\t\tselectBlockOnInsert\n\t\t\t\t);\n\n\t\t\t\tif ( onSelectOrClose ) {\n\t\t\t\t\tonSelectOrClose( {\n\t\t\t\t\t\tclientId: blockToInsert?.clientId,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tconst message = sprintf(\n\t\t\t\t\t// translators: %s: the name of the block that has been added\n\t\t\t\t\t__( '%s block added' ),\n\t\t\t\t\tallowedBlockType.title\n\t\t\t\t);\n\t\t\t\tspeak( message );\n\t\t\t},\n\t\t};\n\t} ),\n\t// The global inserter should always be visible, we are using ( ! isAppender && ! rootClientId && ! clientId ) as\n\t// a way to detect the global Inserter.\n\tifCondition(\n\t\t( { hasItems, isAppender, rootClientId, clientId } ) =>\n\t\t\thasItems || ( ! isAppender && ! rootClientId && ! clientId )\n\t),\n] )( Inserter );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { forwardRef, useRef } from '@wordpress/element';\nimport { _x, sprintf } from '@wordpress/i18n';\nimport { Icon, plus } from '@wordpress/icons';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { useMergeRefs } from '@wordpress/compose';\n\nfunction ButtonBlockAppender(\n\t{ rootClientId, className, onFocus, tabIndex, onSelect },\n\tref\n) {\n\tconst inserterButtonRef = useRef();\n\n\tconst mergedInserterButtonRef = useMergeRefs( [ inserterButtonRef, ref ] );\n\treturn (\n\t\t {\n\t\t\t\tif ( onSelect && typeof onSelect === 'function' ) {\n\t\t\t\t\tonSelect( ...args );\n\t\t\t\t}\n\t\t\t\tinserterButtonRef.current?.focus();\n\t\t\t} }\n\t\t\trenderToggle={ ( {\n\t\t\t\tonToggle,\n\t\t\t\tdisabled,\n\t\t\t\tisOpen,\n\t\t\t\tblockTitle,\n\t\t\t\thasSingleBlockType,\n\t\t\t} ) => {\n\t\t\t\tconst isToggleButton = ! hasSingleBlockType;\n\t\t\t\tconst label = hasSingleBlockType\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// translators: %s: the name of the block when there is only one\n\t\t\t\t\t\t\t_x(\n\t\t\t\t\t\t\t\t'Add %s',\n\t\t\t\t\t\t\t\t'directly add the only allowed block'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tblockTitle\n\t\t\t\t\t )\n\t\t\t\t\t: _x(\n\t\t\t\t\t\t\t'Add block',\n\t\t\t\t\t\t\t'Generic label for block inserter button'\n\t\t\t\t\t );\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\tisAppender\n\t\t/>\n\t);\n}\n\n/**\n * Use `ButtonBlockAppender` instead.\n *\n * @deprecated\n */\nexport const ButtonBlockerAppender = forwardRef( ( props, ref ) => {\n\tdeprecated( `wp.blockEditor.ButtonBlockerAppender`, {\n\t\talternative: 'wp.blockEditor.ButtonBlockAppender',\n\t\tsince: '5.9',\n\t} );\n\n\treturn ButtonBlockAppender( props, ref );\n} );\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/button-block-appender/README.md\n */\nexport default forwardRef( ButtonBlockAppender );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, forwardRef, useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { range, GridRect, getGridInfo } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';\nimport ButtonBlockAppender from '../button-block-appender';\nimport { unlock } from '../../lock-unlock';\n\nexport function GridVisualizer( { clientId, contentRef, parentLayout } ) {\n\tconst isDistractionFree = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree,\n\t\t[]\n\t);\n\tconst gridElement = useBlockElement( clientId );\n\n\tif ( isDistractionFree || ! gridElement ) {\n\t\treturn null;\n\t}\n\n\tconst isManualGrid =\n\t\tparentLayout?.isManualPlacement &&\n\t\twindow.__experimentalEnableGridInteractivity;\n\treturn (\n\t\t\n\t);\n}\n\nconst GridVisualizerGrid = forwardRef(\n\t( { gridClientId, gridElement, isManualGrid }, ref ) => {\n\t\tconst [ gridInfo, setGridInfo ] = useState( () =>\n\t\t\tgetGridInfo( gridElement )\n\t\t);\n\t\tconst [ isDroppingAllowed, setIsDroppingAllowed ] = useState( false );\n\n\t\tuseEffect( () => {\n\t\t\tconst observers = [];\n\t\t\tfor ( const element of [ gridElement, ...gridElement.children ] ) {\n\t\t\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\t\t\tsetGridInfo( getGridInfo( gridElement ) );\n\t\t\t\t} );\n\t\t\t\tobserver.observe( element );\n\t\t\t\tobservers.push( observer );\n\t\t\t}\n\t\t\treturn () => {\n\t\t\t\tfor ( const observer of observers ) {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t};\n\t\t}, [ gridElement ] );\n\n\t\tuseEffect( () => {\n\t\t\tfunction onGlobalDrag() {\n\t\t\t\tsetIsDroppingAllowed( true );\n\t\t\t}\n\t\t\tfunction onGlobalDragEnd() {\n\t\t\t\tsetIsDroppingAllowed( false );\n\t\t\t}\n\t\t\tdocument.addEventListener( 'drag', onGlobalDrag );\n\t\t\tdocument.addEventListener( 'dragend', onGlobalDragEnd );\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener( 'drag', onGlobalDrag );\n\t\t\t\tdocument.removeEventListener( 'dragend', onGlobalDragEnd );\n\t\t\t};\n\t\t}, [] );\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ isManualGrid ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\tArray.from( { length: gridInfo.numItems }, ( _, i ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) )\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n);\n\nfunction ManualGridVisualizer( { gridClientId, gridInfo } ) {\n\tconst [ highlightedRect, setHighlightedRect ] = useState( null );\n\n\tconst gridItemStyles = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockOrder, getBlockStyles } = unlock(\n\t\t\t\tselect( blockEditorStore )\n\t\t\t);\n\t\t\tconst blockOrder = getBlockOrder( gridClientId );\n\t\t\treturn getBlockStyles( blockOrder );\n\t\t},\n\t\t[ gridClientId ]\n\t);\n\tconst occupiedRects = useMemo( () => {\n\t\tconst rects = [];\n\t\tfor ( const style of Object.values( gridItemStyles ) ) {\n\t\t\tconst {\n\t\t\t\tcolumnStart,\n\t\t\t\trowStart,\n\t\t\t\tcolumnSpan = 1,\n\t\t\t\trowSpan = 1,\n\t\t\t} = style?.layout ?? {};\n\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trects.push(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\t\treturn rects;\n\t}, [ gridItemStyles ] );\n\n\treturn range( 1, gridInfo.numRows ).map( ( row ) =>\n\t\trange( 1, gridInfo.numColumns ).map( ( column ) => {\n\t\t\tconst isCellOccupied = occupiedRects.some( ( rect ) =>\n\t\t\t\trect.contains( column, row )\n\t\t\t);\n\t\t\tconst isHighlighted =\n\t\t\t\thighlightedRect?.contains( column, row ) ?? false;\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{ isCellOccupied ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t);\n\t\t} )\n\t);\n}\n\nfunction GridVisualizerCell( { color, children, className } ) {\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nfunction useGridVisualizerDropZone(\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect\n) {\n\tconst {\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tcanInsertBlockType,\n\t\tgetBlockName,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\treturn useDropZoneWithValidation( {\n\t\tvalidateDrag( srcClientId ) {\n\t\t\tconst blockName = getBlockName( srcClientId );\n\t\t\tif ( ! canInsertBlockType( blockName, gridClientId ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tconst rect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t} );\n\t\t\tconst isInBounds = new GridRect( {\n\t\t\t\tcolumnSpan: gridInfo.numColumns,\n\t\t\t\trowSpan: gridInfo.numRows,\n\t\t\t} ).containsRect( rect );\n\t\t\treturn isInBounds;\n\t\t},\n\t\tonDragEnter( srcClientId ) {\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tsetHighlightedRect(\n\t\t\t\tnew GridRect( {\n\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\trowStart: row,\n\t\t\t\t\tcolumnSpan: attributes.style?.layout?.columnSpan,\n\t\t\t\t\trowSpan: attributes.style?.layout?.rowSpan,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tonDragLeave() {\n\t\t\t// onDragEnter can be called before onDragLeave if the user moves\n\t\t\t// their mouse quickly, so only clear the highlight if it was set\n\t\t\t// by this cell.\n\t\t\tsetHighlightedRect( ( prevHighlightedRect ) =>\n\t\t\t\tprevHighlightedRect?.columnStart === column &&\n\t\t\t\tprevHighlightedRect?.rowStart === row\n\t\t\t\t\t? null\n\t\t\t\t\t: prevHighlightedRect\n\t\t\t);\n\t\t},\n\t\tonDrop( srcClientId ) {\n\t\t\tsetHighlightedRect( null );\n\t\t\tconst attributes = getBlockAttributes( srcClientId );\n\t\t\tupdateBlockAttributes( srcClientId, {\n\t\t\t\tstyle: {\n\t\t\t\t\t...attributes.style,\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t} );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tmoveBlocksToPosition(\n\t\t\t\t[ srcClientId ],\n\t\t\t\tgetBlockRootClientId( srcClientId ),\n\t\t\t\tgridClientId,\n\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t);\n\t\t},\n\t} );\n}\n\nfunction GridVisualizerDropZone( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect,\n} ) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction GridVisualizerAppender( {\n\tcolumn,\n\trow,\n\tgridClientId,\n\tgridInfo,\n\tsetHighlightedRect,\n} ) {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tmoveBlocksToPosition,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tgridInfo.numColumns\n\t);\n\n\treturn (\n\t\t {\n\t\t\t\tif ( ! block ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tupdateBlockAttributes( block.clientId, {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\tcolumnStart: column,\n\t\t\t\t\t\t\trowStart: row,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t[ block.clientId ],\n\t\t\t\t\tgridClientId,\n\t\t\t\t\tgridClientId,\n\t\t\t\t\tgetNumberOfBlocksBeforeCell( column, row )\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nfunction useDropZoneWithValidation( {\n\tvalidateDrag,\n\tonDragEnter,\n\tonDragLeave,\n\tonDrop,\n} ) {\n\tconst { getDraggedBlockClientIds } = useSelect( blockEditorStore );\n\treturn useDropZone( {\n\t\tonDragEnter() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDragEnter( srcClientId );\n\t\t\t}\n\t\t},\n\t\tonDragLeave() {\n\t\t\tonDragLeave();\n\t\t},\n\t\tonDrop() {\n\t\t\tconst [ srcClientId ] = getDraggedBlockClientIds();\n\t\t\tif ( srcClientId && validateDrag( srcClientId ) ) {\n\t\t\t\tonDrop( srcClientId );\n\t\t\t}\n\t\t},\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { ResizableBox } from '@wordpress/components';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport BlockPopoverCover from '../block-popover/cover';\nimport { getComputedCSS, getGridTracks, getClosestTrack } from './utils';\n\nexport function GridItemResizer( {\n\tclientId,\n\tbounds,\n\tonChange,\n\tparentLayout,\n} ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst rootBlockElement = blockElement?.parentElement;\n\tconst { isManualPlacement } = parentLayout;\n\n\tif ( ! blockElement || ! rootBlockElement ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t);\n}\n\nfunction GridItemResizerInner( {\n\tclientId,\n\tbounds,\n\tblockElement,\n\trootBlockElement,\n\tonChange,\n\tisManualGrid,\n} ) {\n\tconst [ resizeDirection, setResizeDirection ] = useState( null );\n\tconst [ enableSide, setEnableSide ] = useState( {\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t} );\n\n\tuseEffect( () => {\n\t\tconst observer = new window.ResizeObserver( () => {\n\t\t\tconst blockClientRect = blockElement.getBoundingClientRect();\n\t\t\tconst rootBlockClientRect =\n\t\t\t\trootBlockElement.getBoundingClientRect();\n\t\t\tsetEnableSide( {\n\t\t\t\ttop: blockClientRect.top > rootBlockClientRect.top,\n\t\t\t\tbottom: blockClientRect.bottom < rootBlockClientRect.bottom,\n\t\t\t\tleft: blockClientRect.left > rootBlockClientRect.left,\n\t\t\t\tright: blockClientRect.right < rootBlockClientRect.right,\n\t\t\t} );\n\t\t} );\n\t\tobserver.observe( blockElement );\n\t\treturn () => observer.disconnect();\n\t}, [ blockElement, rootBlockElement ] );\n\n\tconst justification = {\n\t\tright: 'left',\n\t\tleft: 'right',\n\t};\n\n\tconst alignment = {\n\t\ttop: 'flex-end',\n\t\tbottom: 'flex-start',\n\t};\n\n\tconst styles = {\n\t\tdisplay: 'flex',\n\t\tjustifyContent: 'center',\n\t\talignItems: 'center',\n\t\t...( justification[ resizeDirection ] && {\n\t\t\tjustifyContent: justification[ resizeDirection ],\n\t\t} ),\n\t\t...( alignment[ resizeDirection ] && {\n\t\t\talignItems: alignment[ resizeDirection ],\n\t\t} ),\n\t};\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\t/*\n\t\t\t\t\t * Captures the pointer to avoid hiccups while dragging over objects\n\t\t\t\t\t * like iframes and ensures that the event to end the drag is\n\t\t\t\t\t * captured by the target (resize handle) whether or not it’s under\n\t\t\t\t\t * the pointer.\n\t\t\t\t\t */\n\t\t\t\t\ttarget.setPointerCapture( pointerId );\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ ( event, direction ) => {\n\t\t\t\t\t/*\n\t\t\t\t\t * The container justification and alignment need to be set\n\t\t\t\t\t * according to the direction the resizer is being dragged in,\n\t\t\t\t\t * so that it resizes in the right direction.\n\t\t\t\t\t */\n\t\t\t\t\tsetResizeDirection( direction );\n\t\t\t\t} }\n\t\t\t\tonResizeStop={ ( event, direction, boxElement ) => {\n\t\t\t\t\tconst columnGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'column-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst rowGap = parseFloat(\n\t\t\t\t\t\tgetComputedCSS( rootBlockElement, 'row-gap' )\n\t\t\t\t\t);\n\t\t\t\t\tconst gridColumnTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-columns'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcolumnGap\n\t\t\t\t\t);\n\t\t\t\t\tconst gridRowTracks = getGridTracks(\n\t\t\t\t\t\tgetComputedCSS(\n\t\t\t\t\t\t\trootBlockElement,\n\t\t\t\t\t\t\t'grid-template-rows'\n\t\t\t\t\t\t),\n\t\t\t\t\t\trowGap\n\t\t\t\t\t);\n\t\t\t\t\tconst rect = new window.DOMRect(\n\t\t\t\t\t\tblockElement.offsetLeft + boxElement.offsetLeft,\n\t\t\t\t\t\tblockElement.offsetTop + boxElement.offsetTop,\n\t\t\t\t\t\tboxElement.offsetWidth,\n\t\t\t\t\t\tboxElement.offsetHeight\n\t\t\t\t\t);\n\t\t\t\t\tconst columnStart =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.left ) + 1;\n\t\t\t\t\tconst rowStart =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.top ) + 1;\n\t\t\t\t\tconst columnEnd =\n\t\t\t\t\t\tgetClosestTrack( gridColumnTracks, rect.right, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tconst rowEnd =\n\t\t\t\t\t\tgetClosestTrack( gridRowTracks, rect.bottom, 'end' ) +\n\t\t\t\t\t\t1;\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\tcolumnSpan: columnEnd - columnStart + 1,\n\t\t\t\t\t\trowSpan: rowEnd - rowStart + 1,\n\t\t\t\t\t\tcolumnStart: isManualGrid ? columnStart : undefined,\n\t\t\t\t\t\trowStart: isManualGrid ? rowStart : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronUp = (\n\t\n\t\t\n\t\n);\n\nexport default chevronUp;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst chevronDown = (\n\t\n\t\t\n\t\n);\n\nexport default chevronDown;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tVisuallyHidden,\n\tToolbarButton,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport {\n\tchevronLeft,\n\tchevronUp,\n\tchevronDown,\n\tchevronRight,\n} from '@wordpress/icons';\nimport { useDispatch } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockControls from '../block-controls';\nimport { useGetNumberOfBlocksBeforeCell } from './use-get-number-of-blocks-before-cell';\nimport { store as blockEditorStore } from '../../store';\n\nexport function GridItemMovers( {\n\tlayout,\n\tparentLayout,\n\tonChange,\n\tgridClientId,\n\tblockClientId,\n} ) {\n\tconst { moveBlocksToPosition, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst columnStart = layout?.columnStart ?? 1;\n\tconst rowStart = layout?.rowStart ?? 1;\n\tconst columnSpan = layout?.columnSpan ?? 1;\n\tconst rowSpan = layout?.rowSpan ?? 1;\n\tconst columnEnd = columnStart + columnSpan - 1;\n\tconst rowEnd = rowStart + rowSpan - 1;\n\tconst columnCount = parentLayout?.columnCount;\n\tconst rowCount = parentLayout?.rowCount;\n\n\tconst getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(\n\t\tgridClientId,\n\t\tcolumnCount\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\tcolumnStart: columnStart - 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart - 1,\n\t\t\t\t\t\t\t\t\trowStart\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\trowStart: rowStart - 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\trowStart - 1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t= rowCount }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\trowStart: rowStart + 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\t\t\t\trowStart + 1\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t= columnCount }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\tcolumnStart: columnStart + 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ blockClientId ],\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgridClientId,\n\t\t\t\t\t\t\t\tgetNumberOfBlocksBeforeCell(\n\t\t\t\t\t\t\t\t\tcolumnStart + 1,\n\t\t\t\t\t\t\t\t\trowStart\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n}\n\nfunction GridItemMover( {\n\tclassName,\n\ticon,\n\tlabel,\n\tisDisabled,\n\tonClick,\n\tdescription,\n} ) {\n\tconst instanceId = useInstanceId( GridItemMover );\n\tconst descriptionId = `block-editor-grid-item-mover-button__description-${ instanceId }`;\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\t{ description }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useStyleOverride } from './utils';\nimport { useLayout } from '../components/block-list/layout';\nimport {\n\tGridVisualizer,\n\tGridItemResizer,\n\tGridItemMovers,\n} from '../components/grid';\n\nfunction useBlockPropsChildLayoutStyles( { style } ) {\n\tconst shouldRenderChildLayoutStyles = useSelect( ( select ) => {\n\t\treturn ! select( blockEditorStore ).getSettings().disableLayoutStyles;\n\t} );\n\tconst layout = style?.layout ?? {};\n\tconst {\n\t\tselfStretch,\n\t\tflexSize,\n\t\tcolumnStart,\n\t\trowStart,\n\t\tcolumnSpan,\n\t\trowSpan,\n\t} = layout;\n\tconst parentLayout = useLayout() || {};\n\tconst { columnCount, minimumColumnWidth } = parentLayout;\n\tconst id = useInstanceId( useBlockPropsChildLayoutStyles );\n\tconst selector = `.wp-container-content-${ id }`;\n\n\t// Check that the grid layout attributes are of the correct type, so that we don't accidentally\n\t// write code that stores a string attribute instead of a number.\n\tif ( process.env.NODE_ENV === 'development' ) {\n\t\tif ( columnStart && typeof columnStart !== 'number' ) {\n\t\t\tthrow new Error( 'columnStart must be a number' );\n\t\t}\n\t\tif ( rowStart && typeof rowStart !== 'number' ) {\n\t\t\tthrow new Error( 'rowStart must be a number' );\n\t\t}\n\t\tif ( columnSpan && typeof columnSpan !== 'number' ) {\n\t\t\tthrow new Error( 'columnSpan must be a number' );\n\t\t}\n\t\tif ( rowSpan && typeof rowSpan !== 'number' ) {\n\t\t\tthrow new Error( 'rowSpan must be a number' );\n\t\t}\n\t}\n\n\tlet css = '';\n\tif ( shouldRenderChildLayoutStyles ) {\n\t\tif ( selfStretch === 'fixed' && flexSize ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tflex-basis: ${ flexSize };\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}`;\n\t\t} else if ( selfStretch === 'fill' ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tflex-grow: 1;\n\t\t\t}`;\n\t\t} else if ( columnStart && columnSpan ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tgrid-column: ${ columnStart } / span ${ columnSpan };\n\t\t\t}`;\n\t\t} else if ( columnStart ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tgrid-column: ${ columnStart };\n\t\t\t}`;\n\t\t} else if ( columnSpan ) {\n\t\t\tcss = `${ selector } {\n\t\t\t\tgrid-column: span ${ columnSpan };\n\t\t\t}`;\n\t\t}\n\t\tif ( rowStart && rowSpan ) {\n\t\t\tcss += `${ selector } {\n\t\t\t\tgrid-row: ${ rowStart } / span ${ rowSpan };\n\t\t\t}`;\n\t\t} else if ( rowStart ) {\n\t\t\tcss += `${ selector } {\n\t\t\t\tgrid-row: ${ rowStart };\n\t\t\t}`;\n\t\t} else if ( rowSpan ) {\n\t\t\tcss += `${ selector } {\n\t\t\t\tgrid-row: span ${ rowSpan };\n\t\t\t}`;\n\t\t}\n\t\t/**\n\t\t * If minimumColumnWidth is set on the parent, or if no\n\t\t * columnCount is set, the grid is responsive so a\n\t\t * container query is needed for the span to resize.\n\t\t */\n\t\tif (\n\t\t\t( columnSpan || columnStart ) &&\n\t\t\t( minimumColumnWidth || ! columnCount )\n\t\t) {\n\t\t\tlet parentColumnValue = parseFloat( minimumColumnWidth );\n\t\t\t/**\n\t\t\t * 12rem is the default minimumColumnWidth value.\n\t\t\t * If parentColumnValue is not a number, default to 12.\n\t\t\t */\n\t\t\tif ( isNaN( parentColumnValue ) ) {\n\t\t\t\tparentColumnValue = 12;\n\t\t\t}\n\n\t\t\tlet parentColumnUnit = minimumColumnWidth?.replace(\n\t\t\t\tparentColumnValue,\n\t\t\t\t''\n\t\t\t);\n\t\t\t/**\n\t\t\t * Check that parent column unit is either 'px', 'rem' or 'em'.\n\t\t\t * If not, default to 'rem'.\n\t\t\t */\n\t\t\tif ( ! [ 'px', 'rem', 'em' ].includes( parentColumnUnit ) ) {\n\t\t\t\tparentColumnUnit = 'rem';\n\t\t\t}\n\n\t\t\tlet numColsToBreakAt = 2;\n\n\t\t\tif ( columnSpan && columnStart ) {\n\t\t\t\tnumColsToBreakAt = columnSpan + columnStart - 1;\n\t\t\t} else if ( columnSpan ) {\n\t\t\t\tnumColsToBreakAt = columnSpan;\n\t\t\t} else {\n\t\t\t\tnumColsToBreakAt = columnStart;\n\t\t\t}\n\n\t\t\tconst defaultGapValue = parentColumnUnit === 'px' ? 24 : 1.5;\n\t\t\tconst containerQueryValue =\n\t\t\t\tnumColsToBreakAt * parentColumnValue +\n\t\t\t\t( numColsToBreakAt - 1 ) * defaultGapValue;\n\t\t\t// For blocks that only span one column, we want to remove any rowStart values as\n\t\t\t// the container reduces in size, so that blocks are still arranged in markup order.\n\t\t\tconst minimumContainerQueryValue =\n\t\t\t\tparentColumnValue * 2 + defaultGapValue - 1;\n\t\t\t// If a span is set we want to preserve it as long as possible, otherwise we just reset the value.\n\t\t\tconst gridColumnValue =\n\t\t\t\tcolumnSpan && columnSpan > 1 ? '1/-1' : 'auto';\n\n\t\t\tcss += `@container (max-width: ${ Math.max(\n\t\t\t\tcontainerQueryValue,\n\t\t\t\tminimumContainerQueryValue\n\t\t\t) }${ parentColumnUnit }) {\n\t\t\t\t${ selector } {\n\t\t\t\t\tgrid-column: ${ gridColumnValue };\n\t\t\t\t\tgrid-row: auto;\n\t\t\t\t}\n\t\t\t}`;\n\t\t}\n\t}\n\n\tuseStyleOverride( { css } );\n\n\t// Only attach a container class if there is generated CSS to be attached.\n\tif ( ! css ) {\n\t\treturn;\n\t}\n\n\t// Attach a `wp-container-content` id-based classname.\n\treturn { className: `wp-container-content-${ id }` };\n}\n\nfunction ChildLayoutControlsPure( { clientId, style, setAttributes } ) {\n\tconst parentLayout = useLayout() || {};\n\tconst {\n\t\ttype: parentLayoutType = 'default',\n\t\tallowSizingOnChildren = false,\n\t\tisManualPlacement,\n\t} = parentLayout;\n\n\tconst rootClientId = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( blockEditorStore ).getBlockRootClientId( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Use useState() instead of useRef() so that GridItemResizer updates when ref is set.\n\tconst [ resizerBounds, setResizerBounds ] = useState();\n\n\tif ( parentLayoutType !== 'grid' ) {\n\t\treturn null;\n\t}\n\n\tfunction updateLayout( layout ) {\n\t\tsetAttributes( {\n\t\t\tstyle: {\n\t\t\t\t...style,\n\t\t\t\tlayout: {\n\t\t\t\t\t...style?.layout,\n\t\t\t\t\t...layout,\n\t\t\t\t},\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ allowSizingOnChildren && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isManualPlacement &&\n\t\t\t\twindow.__experimentalEnableGridInteractivity && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\n\t);\n}\n\nexport default {\n\tuseBlockProps: useBlockPropsChildLayoutStyles,\n\tedit: ChildLayoutControlsPure,\n\tattributeKeys: [ 'style' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { ToolbarButton } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { BlockControls } from '../components';\nimport { unlock } from '../lock-unlock';\n\n// The implementation of content locking is mainly in this file, although the mechanism\n// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect\n// at block-editor/src/components/block-list/index.js.\n// Besides the components on this file and the file referenced above the implementation\n// also includes artifacts on the store (actions, reducers, and selector).\n\nfunction ContentLockControlsPure( { clientId } ) {\n\tconst { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetContentLockingParent,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\treturn {\n\t\t\t\ttemplateLock: getTemplateLock( clientId ),\n\t\t\t\tisLockedByParent: !! getContentLockingParent( clientId ),\n\t\t\t\tisEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { stopEditingAsBlocks } = unlock( useDispatch( blockEditorStore ) );\n\tconst isContentLocked =\n\t\t! isLockedByParent && templateLock === 'contentOnly';\n\n\tconst stopEditingAsBlockCallback = useCallback( () => {\n\t\tstopEditingAsBlocks( clientId );\n\t}, [ clientId, stopEditingAsBlocks ] );\n\n\tif ( ! isContentLocked && ! isEditingAsBlocks ) {\n\t\treturn null;\n\t}\n\n\tconst showStopEditingAsBlocks = isEditingAsBlocks && ! isContentLocked;\n\n\treturn (\n\t\tshowStopEditingAsBlocks && (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ __( 'Done' ) }\n\t\t\t\t\n\t\t\t\n\t\t)\n\t);\n}\n\nexport default {\n\tedit: ContentLockControlsPure,\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nconst META_ATTRIBUTE_NAME = 'metadata';\n\n/**\n * Filters registered block settings, extending attributes to include `metadata`.\n *\n * see: https://github.com/WordPress/gutenberg/pull/40393/files#r864632012\n *\n * @param {Object} blockTypeSettings Original block settings.\n * @return {Object} Filtered block settings.\n */\nexport function addMetaAttribute( blockTypeSettings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( blockTypeSettings?.attributes?.[ META_ATTRIBUTE_NAME ]?.type ) {\n\t\treturn blockTypeSettings;\n\t}\n\n\tblockTypeSettings.attributes = {\n\t\t...blockTypeSettings.attributes,\n\t\t[ META_ATTRIBUTE_NAME ]: {\n\t\t\ttype: 'object',\n\t\t},\n\t};\n\n\treturn blockTypeSettings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/metadata/addMetaAttribute',\n\taddMetaAttribute\n);\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport { PanelBody, ToggleControl } from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( {\n\tname,\n\tclientId,\n\tmetadata: { ignoredHookedBlocks = [] } = {},\n} ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\t// A hooked block added via a filter will not be exposed through a block\n\t// type's `blockHooks` property; however, if the containing layout has been\n\t// modified, it will be present in the anchor block's `ignoredHookedBlocks`\n\t// metadata.\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { name: blockName, blockHooks } ) =>\n\t\t\t\t\t( blockHooks && name in blockHooks ) ||\n\t\t\t\t\tignoredHookedBlocks.includes( blockName )\n\t\t\t),\n\t\t[ blockTypes, name, ignoredHookedBlocks ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockRootClientId, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\t// If we haven't found a blockHooks field with a relative position for the hooked\n\t\t\t\t\t\t\t// block, it means that it was added by a filter. In this case, we look for the block\n\t\t\t\t\t\t\t// both among the current block's siblings and its children.\n\t\t\t\t\t\t\tcandidates = [\n\t\t\t\t\t\t\t\t...getBlocks( rootClientId ),\n\t\t\t\t\t\t\t\t...getBlocks( clientId ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId ]\n\t);\n\n\tconst { getBlockIndex, getBlockCount, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tconst blockIndex = getBlockIndex( clientId );\n\t\tconst innerBlocksLength = getBlockCount( clientId );\n\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase undefined:\n\t\t\t\t// If we do not know the relative position, it is because the block was\n\t\t\t\t// added via a filter. In this case, we default to inserting it after the\n\t\t\t\t// current block.\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\tblockIndex + 1,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t

    \n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t

    \n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

    { vendor }

    \n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t
    \n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useBlockEditContext } from '../components/block-edit';\n\nfunction isObjectEmpty( object ) {\n\treturn ! object || Object.keys( object ).length === 0;\n}\n\nexport function useBlockBindingsUtils() {\n\tconst { clientId } = useBlockEditContext();\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { getBlockAttributes } = useRegistry().select( blockEditorStore );\n\n\t/**\n\t * Updates the value of the bindings connected to block attributes.\n\t * It removes the binding when the new value is `undefined`.\n\t *\n\t * @param {Object} bindings Bindings including the attributes to update and the new object.\n\t * @param {string} bindings.source The source name to connect to.\n\t * @param {Object} [bindings.args] Object containing the arguments needed by the source.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { updateBlockBindings } = useBlockBindingsUtils();\n\t * updateBlockBindings( {\n\t * url: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'url_custom_field',\n\t * },\n\t * \t },\n\t * alt: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'text_custom_field',\n\t * },\n\t * \t }\n\t * } );\n\t * ```\n\t */\n\tconst updateBlockBindings = ( bindings ) => {\n\t\tconst { metadata: { bindings: currentBindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( clientId );\n\t\tconst newBindings = { ...currentBindings };\n\n\t\tObject.entries( bindings ).forEach( ( [ attribute, binding ] ) => {\n\t\t\tif ( ! binding && newBindings[ attribute ] ) {\n\t\t\t\tdelete newBindings[ attribute ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnewBindings[ attribute ] = binding;\n\t\t} );\n\n\t\tconst newMetadata = {\n\t\t\t...metadata,\n\t\t\tbindings: newBindings,\n\t\t};\n\n\t\tif ( isObjectEmpty( newMetadata.bindings ) ) {\n\t\t\tdelete newMetadata.bindings;\n\t\t}\n\n\t\tupdateBlockAttributes( clientId, {\n\t\t\tmetadata: isObjectEmpty( newMetadata ) ? undefined : newMetadata,\n\t\t} );\n\t};\n\n\t/**\n\t * Removes the bindings property of the `metadata` attribute.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { removeAllBlockBindings } = useBlockBindingsUtils();\n\t * removeAllBlockBindings();\n\t * ```\n\t */\n\tconst removeAllBlockBindings = () => {\n\t\tconst { metadata: { bindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( clientId );\n\t\tupdateBlockAttributes( clientId, {\n\t\t\tmetadata: isObjectEmpty( metadata ) ? undefined : metadata,\n\t\t} );\n\t};\n\n\treturn { updateBlockBindings, removeAllBlockBindings };\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { privateApis as blocksPrivateApis } from '@wordpress/blocks';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalText as Text,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useContext, Fragment } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tcanBindAttribute,\n\tgetBindableAttributes,\n} from '../hooks/use-bindings-attributes';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\nimport BlockContext from '../components/block-context';\nimport { useBlockBindingsUtils } from '../utils/block-bindings';\nimport { store as blockEditorStore } from '../store';\n\nconst { DropdownMenuV2 } = unlock( componentsPrivateApis );\n\nconst EMPTY_OBJECT = {};\n\nconst useToolsPanelDropdownMenuProps = () => {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n};\n\nfunction BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {\n\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\tconst registeredSources = getBlockBindingsSources();\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst currentKey = binding?.args?.key;\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( fieldsList ).map( ( [ name, fields ], i ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ Object.keys( fieldsList ).length > 1 && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ registeredSources[ name ].label }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ Object.entries( fields ).map( ( [ key, args ] ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t\t\t[ attribute ]: {\n\t\t\t\t\t\t\t\t\t\t\tsource: name,\n\t\t\t\t\t\t\t\t\t\t\targs: { key },\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tname={ attribute + '-binding' }\n\t\t\t\t\t\t\t\tvalue={ key }\n\t\t\t\t\t\t\t\tchecked={ key === currentKey }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ args?.label }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ args?.value }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t\n\t\t\t\t\t{ i !== Object.keys( fieldsList ).length - 1 && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction BlockBindingsAttribute( { attribute, binding, fieldsList } ) {\n\tconst { source: sourceName, args } = binding || {};\n\tconst sourceProps =\n\t\tunlock( blocksPrivateApis ).getBlockBindingsSource( sourceName );\n\tconst isSourceInvalid = ! sourceProps;\n\treturn (\n\t\t\n\t\t\t{ attribute }\n\t\t\t{ !! binding && (\n\t\t\t\t\n\t\t\t\t\t{ isSourceInvalid\n\t\t\t\t\t\t? __( 'Invalid source' )\n\t\t\t\t\t\t: fieldsList?.[ sourceName ]?.[ args?.key ]?.label ||\n\t\t\t\t\t\t sourceProps?.label ||\n\t\t\t\t\t\t sourceName }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction ReadOnlyBlockBindingsPanelItems( { bindings, fieldsList } ) {\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( bindings ).map( ( [ attribute, binding ] ) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction EditableBlockBindingsPanelItems( {\n\tattributes,\n\tbindings,\n\tfieldsList,\n} ) {\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ attributes.map( ( attribute ) => {\n\t\t\t\tconst binding = bindings[ attribute ];\n\t\t\t\treturn (\n\t\t\t\t\t !! binding }\n\t\t\t\t\t\tlabel={ attribute }\n\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t[ attribute ]: undefined,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\nexport const BlockBindingsPanel = ( { name: blockName, metadata } ) => {\n\tconst registry = useRegistry();\n\tconst blockContext = useContext( BlockContext );\n\tconst { removeAllBlockBindings } = useBlockBindingsUtils();\n\tconst bindableAttributes = getBindableAttributes( blockName );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\t// `useSelect` is used purposely here to ensure `getFieldsList`\n\t// is updated whenever there are updates in block context.\n\t// `source.getFieldsList` may also call a selector via `registry.select`.\n\tconst _fieldsList = {};\n\tconst { fieldsList, canUpdateBlockBindings } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\t\t\tconst registeredSources = getBlockBindingsSources();\n\t\t\tObject.entries( registeredSources ).forEach(\n\t\t\t\t( [ sourceName, { getFieldsList, usesContext } ] ) => {\n\t\t\t\t\tif ( getFieldsList ) {\n\t\t\t\t\t\t// Populate context.\n\t\t\t\t\t\tconst context = {};\n\t\t\t\t\t\tif ( usesContext?.length ) {\n\t\t\t\t\t\t\tfor ( const key of usesContext ) {\n\t\t\t\t\t\t\t\tcontext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst sourceList = getFieldsList( {\n\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t// Only add source if the list is not empty.\n\t\t\t\t\t\tif ( Object.keys( sourceList || {} ).length ) {\n\t\t\t\t\t\t\t_fieldsList[ sourceName ] = { ...sourceList };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tfieldsList:\n\t\t\t\t\tObject.values( _fieldsList ).length > 0\n\t\t\t\t\t\t? _fieldsList\n\t\t\t\t\t\t: EMPTY_OBJECT,\n\t\t\t\tcanUpdateBlockBindings:\n\t\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t\t.canUpdateBlockBindings,\n\t\t\t};\n\t\t},\n\t\t[ blockContext, bindableAttributes, registry ]\n\t);\n\t// Return early if there are no bindable attributes.\n\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\treturn null;\n\t}\n\t// Filter bindings to only show bindable attributes and remove pattern overrides.\n\tconst { bindings } = metadata || {};\n\tconst filteredBindings = { ...bindings };\n\tObject.keys( filteredBindings ).forEach( ( key ) => {\n\t\tif (\n\t\t\t! canBindAttribute( blockName, key ) ||\n\t\t\tfilteredBindings[ key ].source === 'core/pattern-overrides'\n\t\t) {\n\t\t\tdelete filteredBindings[ key ];\n\t\t}\n\t} );\n\n\t// Lock the UI when the user can't update bindings or there are no fields to connect to.\n\tconst readOnly =\n\t\t! canUpdateBlockBindings || ! Object.keys( fieldsList ).length;\n\n\tif ( readOnly && Object.keys( filteredBindings ).length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tremoveAllBlockBindings();\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\tclassName=\"block-editor-bindings__panel\"\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t{ readOnly ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Attributes connected to custom fields or other dynamic data.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useEffect, useMemo } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { GridRect } from './utils';\nimport { setImmutably } from '../../utils/object';\n\nexport function useGridLayoutSync( { clientId: gridClientId } ) {\n\tconst { gridLayout, blockOrder, selectedBlockLayout } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getBlockOrder } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst selectedBlock = select( blockEditorStore ).getSelectedBlock();\n\t\t\treturn {\n\t\t\t\tgridLayout: getBlockAttributes( gridClientId ).layout ?? {},\n\t\t\t\tblockOrder: getBlockOrder( gridClientId ),\n\t\t\t\tselectedBlockLayout: selectedBlock?.attributes.style?.layout,\n\t\t\t};\n\t\t},\n\t\t[ gridClientId ]\n\t);\n\n\tconst { getBlockAttributes, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst selectedBlockRect = useMemo(\n\t\t() =>\n\t\t\tselectedBlockLayout ? new GridRect( selectedBlockLayout ) : null,\n\t\t[ selectedBlockLayout ]\n\t);\n\n\tconst previouslySelectedBlockRect = usePrevious( selectedBlockRect );\n\tconst previousIsManualPlacement = usePrevious(\n\t\tgridLayout.isManualPlacement\n\t);\n\tconst previousBlockOrder = usePrevious( blockOrder );\n\n\tuseEffect( () => {\n\t\tconst updates = {};\n\n\t\tif ( gridLayout.isManualPlacement ) {\n\t\t\tconst occupiedRects = [];\n\n\t\t\t// Respect the position of blocks that already have a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = getBlockAttributes( clientId ).style?.layout ?? {};\n\t\t\t\tif ( ! columnStart || ! rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\toccupiedRects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\trowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// When in manual mode, ensure that every block has a columnStart and rowStart value.\n\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\tconst {\n\t\t\t\t\tcolumnStart,\n\t\t\t\t\trowStart,\n\t\t\t\t\tcolumnSpan = 1,\n\t\t\t\t\trowSpan = 1,\n\t\t\t\t} = attributes.style?.layout ?? {};\n\t\t\t\tif ( columnStart && rowStart ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst [ newColumnStart, newRowStart ] = placeBlock(\n\t\t\t\t\toccupiedRects,\n\t\t\t\t\tgridLayout.columnCount,\n\t\t\t\t\tcolumnSpan,\n\t\t\t\t\trowSpan,\n\t\t\t\t\tpreviouslySelectedBlockRect?.columnEnd,\n\t\t\t\t\tpreviouslySelectedBlockRect?.rowEnd\n\t\t\t\t);\n\t\t\t\toccupiedRects.push(\n\t\t\t\t\tnew GridRect( {\n\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t\tupdates[ clientId ] = {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...attributes.style,\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t...attributes.style?.layout,\n\t\t\t\t\t\t\tcolumnStart: newColumnStart,\n\t\t\t\t\t\t\trowStart: newRowStart,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Ensure there's enough rows to fit all blocks.\n\t\t\tconst bottomMostRow = Math.max(\n\t\t\t\t...occupiedRects.map( ( r ) => r.rowEnd )\n\t\t\t);\n\t\t\tif (\n\t\t\t\t! gridLayout.rowCount ||\n\t\t\t\tgridLayout.rowCount < bottomMostRow\n\t\t\t) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: bottomMostRow,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Unset grid layout attributes for blocks removed from the grid.\n\t\t\tfor ( const clientId of previousBlockOrder ?? [] ) {\n\t\t\t\tif ( ! blockOrder.includes( clientId ) ) {\n\t\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\t\t\t// Block was removed from the editor, so nothing to do.\n\t\t\t\t\tif ( rootClientId === null ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if the block is being moved to another grid.\n\t\t\t\t\t// If so, do nothing and let the new grid parent handle\n\t\t\t\t\t// the attributes.\n\t\t\t\t\tconst rootAttributes = getBlockAttributes( rootClientId );\n\t\t\t\t\tif ( rootAttributes?.layout?.type === 'grid' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\t\tconst {\n\t\t\t\t\t\tcolumnStart,\n\t\t\t\t\t\trowStart,\n\t\t\t\t\t\tcolumnSpan,\n\t\t\t\t\t\trowSpan,\n\t\t\t\t\t\t...layout\n\t\t\t\t\t} = attributes.style?.layout ?? {};\n\n\t\t\t\t\tif ( columnStart || rowStart || columnSpan || rowSpan ) {\n\t\t\t\t\t\tconst hasEmptyLayoutAttribute =\n\t\t\t\t\t\t\tObject.keys( layout ).length === 0;\n\n\t\t\t\t\t\tupdates[ clientId ] = setImmutably(\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\t[ 'style', 'layout' ],\n\t\t\t\t\t\t\thasEmptyLayoutAttribute ? undefined : layout\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Remove all of the columnStart and rowStart values\n\t\t\t// when switching from manual to auto mode,\n\t\t\tif ( previousIsManualPlacement === true ) {\n\t\t\t\tfor ( const clientId of blockOrder ) {\n\t\t\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\t\t\tconst { columnStart, rowStart, ...layout } =\n\t\t\t\t\t\tattributes.style?.layout ?? {};\n\t\t\t\t\t// Only update attributes if columnStart or rowStart are set.\n\t\t\t\t\tif ( columnStart || rowStart ) {\n\t\t\t\t\t\tconst hasEmptyLayoutAttribute =\n\t\t\t\t\t\t\tObject.keys( layout ).length === 0;\n\n\t\t\t\t\t\tupdates[ clientId ] = setImmutably(\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\t[ 'style', 'layout' ],\n\t\t\t\t\t\t\thasEmptyLayoutAttribute ? undefined : layout\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove row styles in auto mode\n\t\t\tif ( gridLayout.rowCount ) {\n\t\t\t\tupdates[ gridClientId ] = {\n\t\t\t\t\tlayout: {\n\t\t\t\t\t\t...gridLayout,\n\t\t\t\t\t\trowCount: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( Object.keys( updates ).length ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes(\n\t\t\t\tObject.keys( updates ),\n\t\t\t\tupdates,\n\t\t\t\t/* uniqueByBlock: */ true\n\t\t\t);\n\t\t}\n\t}, [\n\t\t// Actual deps to sync:\n\t\tgridClientId,\n\t\tgridLayout,\n\t\tpreviousBlockOrder,\n\t\tblockOrder,\n\t\tpreviouslySelectedBlockRect,\n\t\tpreviousIsManualPlacement,\n\t\t// These won't change, but the linter thinks they might:\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tgetBlockAttributes,\n\t\tgetBlockRootClientId,\n\t\tupdateBlockAttributes,\n\t] );\n}\n\n/**\n * @param {GridRect[]} occupiedRects\n * @param {number} gridColumnCount\n * @param {number} blockColumnSpan\n * @param {number} blockRowSpan\n * @param {number?} startColumn\n * @param {number?} startRow\n */\nfunction placeBlock(\n\toccupiedRects,\n\tgridColumnCount,\n\tblockColumnSpan,\n\tblockRowSpan,\n\tstartColumn = 1,\n\tstartRow = 1\n) {\n\tfor ( let row = startRow; ; row++ ) {\n\t\tfor (\n\t\t\tlet column = row === startRow ? startColumn : 1;\n\t\t\tcolumn <= gridColumnCount;\n\t\t\tcolumn++\n\t\t) {\n\t\t\tconst candidateRect = new GridRect( {\n\t\t\t\tcolumnStart: column,\n\t\t\t\trowStart: row,\n\t\t\t\tcolumnSpan: blockColumnSpan,\n\t\t\t\trowSpan: blockRowSpan,\n\t\t\t} );\n\t\t\tif (\n\t\t\t\t! occupiedRects.some( ( r ) =>\n\t\t\t\t\tr.intersectsRect( candidateRect )\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn [ column, row ];\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { GridVisualizer, useGridLayoutSync } from '../components/grid';\nimport { store as blockEditorStore } from '../store';\n\nfunction GridLayoutSync( props ) {\n\tuseGridLayoutSync( props );\n}\n\nfunction GridTools( { clientId, layout } ) {\n\tconst { isSelected, isDragging } = useSelect( ( select ) => {\n\t\tconst { isBlockSelected, isDraggingBlocks } =\n\t\t\tselect( blockEditorStore );\n\n\t\treturn {\n\t\t\tisSelected: isBlockSelected( clientId ),\n\t\t\tisDragging: isDraggingBlocks(),\n\t\t};\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ ( isSelected || isDragging ) && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nconst addGridVisualizerToBlockEdit = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tif ( props.attributes.layout?.type !== 'grid' ) {\n\t\t\treturn ;\n\t\t}\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\t'addGridVisualizerToBlockEdit'\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/grid-visualizer',\n\taddGridVisualizerToBlockEdit\n);\n","/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Filters registered block settings, adding an `__experimentalLabel` callback if one does not already exist.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addLabelCallback( settings ) {\n\t// If blocks provide their own label callback, do not override it.\n\tif ( settings.__experimentalLabel ) {\n\t\treturn settings;\n\t}\n\n\tconst supportsBlockNaming = hasBlockSupport(\n\t\tsettings,\n\t\t'renaming',\n\t\ttrue // default value\n\t);\n\n\t// Check whether block metadata is supported before using it.\n\tif ( supportsBlockNaming ) {\n\t\tsettings.__experimentalLabel = ( attributes, { context } ) => {\n\t\t\tconst { metadata } = attributes;\n\n\t\t\t// In the list view, use the block's name attribute as the label.\n\t\t\tif ( context === 'list-view' && metadata?.name ) {\n\t\t\t\treturn metadata.name;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/metadata/addLabelCallback',\n\taddLabelCallback\n);\n","/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\nimport { getBorderClasses, getMultiOriginColor } from './border';\nimport useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';\n\n// This utility is intended to assist where the serialization of the border\n// block support is being skipped for a block but the border related CSS classes\n// & styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's border support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n * @return {Object} Border block support derived CSS classes & styles.\n */\nexport function getBorderClassesAndStyles( attributes ) {\n\tconst border = attributes.style?.border || {};\n\tconst className = getBorderClasses( attributes );\n\n\treturn {\n\t\tclassName: className || undefined,\n\t\tstyle: getInlineStyles( { border } ),\n\t};\n}\n\n/**\n * Derives the border related props for a block from its border block support\n * attributes.\n *\n * Inline styles are forced for named colors to ensure these selections are\n * reflected when themes do not load their color stylesheets in the editor.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} ClassName & style props from border block support.\n */\nexport function useBorderProps( attributes ) {\n\tconst { colors } = useMultipleOriginColorsAndGradients();\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\tconst { borderColor } = attributes;\n\n\t// Force inline styles to apply named border colors when themes do not load\n\t// their color stylesheets in the editor.\n\tif ( borderColor ) {\n\t\tconst borderColorObject = getMultiOriginColor( {\n\t\t\tcolors,\n\t\t\tnamedColor: borderColor,\n\t\t} );\n\n\t\tborderProps.style.borderColor = borderColorObject.color;\n\t}\n\n\treturn borderProps;\n}\n","/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\n\n// This utility is intended to assist where the serialization of the shadow\n// block support is being skipped for a block but the shadow related CSS classes\n// & styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's shadow support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n * @return {Object} Shadow block support derived CSS classes & styles.\n */\nexport function getShadowClassesAndStyles( attributes ) {\n\tconst shadow = attributes.style?.shadow || '';\n\n\treturn {\n\t\tstyle: getInlineStyles( { shadow } ),\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\nimport {\n\tgetColorClassName,\n\tgetColorObjectByAttributeValues,\n} from '../components/colors';\nimport {\n\t__experimentalGetGradientClass,\n\tgetGradientValueBySlug,\n} from '../components/gradients';\nimport { useSettings } from '../components/use-settings';\n\n// The code in this file has largely been lifted from the color block support\n// hook.\n//\n// This utility is intended to assist where the serialization of the colors\n// block support is being skipped for a block but the color related CSS classes\n// & styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's color support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Color block support derived CSS classes & styles.\n */\nexport function getColorClassesAndStyles( attributes ) {\n\tconst { backgroundColor, textColor, gradient, style } = attributes;\n\n\t// Collect color CSS classes.\n\tconst backgroundClass = getColorClassName(\n\t\t'background-color',\n\t\tbackgroundColor\n\t);\n\tconst textClass = getColorClassName( 'color', textColor );\n\n\tconst gradientClass = __experimentalGetGradientClass( gradient );\n\tconst hasGradient = gradientClass || style?.color?.gradient;\n\n\t// Determine color CSS class name list.\n\tconst className = clsx( textClass, gradientClass, {\n\t\t// Don't apply the background class if there's a gradient.\n\t\t[ backgroundClass ]: ! hasGradient && !! backgroundClass,\n\t\t'has-text-color': textColor || style?.color?.text,\n\t\t'has-background':\n\t\t\tbackgroundColor ||\n\t\t\tstyle?.color?.background ||\n\t\t\tgradient ||\n\t\t\tstyle?.color?.gradient,\n\t\t'has-link-color': style?.elements?.link?.color,\n\t} );\n\n\t// Collect inline styles for colors.\n\tconst colorStyles = style?.color || {};\n\tconst styleProp = getInlineStyles( { color: colorStyles } );\n\n\treturn {\n\t\tclassName: className || undefined,\n\t\tstyle: styleProp,\n\t};\n}\n\n/**\n * Determines the color related props for a block derived from its color block\n * support attributes.\n *\n * Inline styles are forced for named colors to ensure these selections are\n * reflected when themes do not load their color stylesheets in the editor.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} ClassName & style props from colors block support.\n */\nexport function useColorProps( attributes ) {\n\tconst { backgroundColor, textColor, gradient } = attributes;\n\n\tconst [\n\t\tuserPalette,\n\t\tthemePalette,\n\t\tdefaultPalette,\n\t\tuserGradients,\n\t\tthemeGradients,\n\t\tdefaultGradients,\n\t] = useSettings(\n\t\t'color.palette.custom',\n\t\t'color.palette.theme',\n\t\t'color.palette.default',\n\t\t'color.gradients.custom',\n\t\t'color.gradients.theme',\n\t\t'color.gradients.default'\n\t);\n\n\tconst colors = useMemo(\n\t\t() => [\n\t\t\t...( userPalette || [] ),\n\t\t\t...( themePalette || [] ),\n\t\t\t...( defaultPalette || [] ),\n\t\t],\n\t\t[ userPalette, themePalette, defaultPalette ]\n\t);\n\tconst gradients = useMemo(\n\t\t() => [\n\t\t\t...( userGradients || [] ),\n\t\t\t...( themeGradients || [] ),\n\t\t\t...( defaultGradients || [] ),\n\t\t],\n\t\t[ userGradients, themeGradients, defaultGradients ]\n\t);\n\n\tconst colorProps = getColorClassesAndStyles( attributes );\n\n\t// Force inline styles to apply colors when themes do not load their color\n\t// stylesheets in the editor.\n\tif ( backgroundColor ) {\n\t\tconst backgroundColorObject = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\tbackgroundColor\n\t\t);\n\n\t\tcolorProps.style.backgroundColor = backgroundColorObject.color;\n\t}\n\n\tif ( gradient ) {\n\t\tcolorProps.style.background = getGradientValueBySlug(\n\t\t\tgradients,\n\t\t\tgradient\n\t\t);\n\t}\n\n\tif ( textColor ) {\n\t\tconst textColorObject = getColorObjectByAttributeValues(\n\t\t\tcolors,\n\t\t\ttextColor\n\t\t);\n\n\t\tcolorProps.style.color = textColorObject.color;\n\t}\n\n\treturn colorProps;\n}\n","/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\n\n// This utility is intended to assist where the serialization of the spacing\n// block support is being skipped for a block but the spacing related CSS\n// styles still need to be generated so they can be applied to inner elements.\n\n/**\n * Provides the CSS class names and inline styles for a block's spacing support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Spacing block support derived CSS classes & styles.\n */\nexport function getSpacingClassesAndStyles( attributes ) {\n\tconst { style } = attributes;\n\n\t// Collect inline styles for spacing.\n\tconst spacingStyles = style?.spacing || {};\n\tconst styleProp = getInlineStyles( { spacing: spacingStyles } );\n\n\treturn {\n\t\tstyle: styleProp,\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { getInlineStyles } from './style';\nimport { getFontSizeClass } from '../components/font-sizes';\nimport { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';\nimport { unlock } from '../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/*\n * This utility is intended to assist where the serialization of the typography\n * block support is being skipped for a block but the typography related CSS\n * styles still need to be generated so they can be applied to inner elements.\n */\n/**\n * Provides the CSS class names and inline styles for a block's typography support\n * attributes.\n *\n * @param {Object} attributes Block attributes.\n * @param {Object|boolean} settings Merged theme.json settings\n *\n * @return {Object} Typography block support derived CSS classes & styles.\n */\nexport function getTypographyClassesAndStyles( attributes, settings ) {\n\tlet typographyStyles = attributes?.style?.typography || {};\n\ttypographyStyles = {\n\t\t...typographyStyles,\n\t\tfontSize: getTypographyFontSizeValue(\n\t\t\t{ size: attributes?.style?.typography?.fontSize },\n\t\t\tsettings\n\t\t),\n\t};\n\n\tconst style = getInlineStyles( { typography: typographyStyles } );\n\tconst fontFamilyClassName = !! attributes?.fontFamily\n\t\t? `has-${ kebabCase( attributes.fontFamily ) }-font-family`\n\t\t: '';\n\tconst textAlignClassName = !! attributes?.style?.typography?.textAlign\n\t\t? `has-text-align-${ attributes?.style?.typography?.textAlign }`\n\t\t: '';\n\tconst className = clsx(\n\t\tfontFamilyClassName,\n\t\ttextAlignClassName,\n\t\tgetFontSizeClass( attributes?.fontSize )\n\t);\n\n\treturn {\n\t\tclassName,\n\t\tstyle,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Keeps an up-to-date copy of the passed value and returns it. If value becomes falsy, it will return the last truthy copy.\n *\n * @param {any} value\n * @return {any} value\n */\nexport function useCachedTruthy( value ) {\n\tconst [ cachedValue, setCachedValue ] = useState( value );\n\tuseEffect( () => {\n\t\tif ( value ) {\n\t\t\tsetCachedValue( value );\n\t\t}\n\t}, [ value ] );\n\treturn cachedValue;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\n/**\n * A hook used to set the zoomed out view, invoking the hook sets the mode.\n *\n * @param {boolean} zoomOut If we should zoom out or not.\n */\nexport function useZoomOut( zoomOut = true ) {\n\tconst { setZoomLevel } = unlock( useDispatch( blockEditorStore ) );\n\tconst { isZoomOut } = unlock( useSelect( blockEditorStore ) );\n\n\tconst originalIsZoomOutRef = useRef( null );\n\n\tuseEffect( () => {\n\t\t// Only set this on mount so we know what to return to when we unmount.\n\t\tif ( ! originalIsZoomOutRef.current ) {\n\t\t\toriginalIsZoomOutRef.current = isZoomOut();\n\t\t}\n\n\t\t// The effect opens the zoom-out view if we want it open and the canvas is not currently zoomed-out.\n\t\tif ( zoomOut && isZoomOut() === false ) {\n\t\t\tsetZoomLevel( 50 );\n\t\t} else if (\n\t\t\t! zoomOut &&\n\t\t\tisZoomOut() &&\n\t\t\toriginalIsZoomOutRef.current !== isZoomOut()\n\t\t) {\n\t\t\tsetZoomLevel( originalIsZoomOutRef.current ? 50 : 100 );\n\t\t}\n\n\t\treturn () => {\n\t\t\tif ( isZoomOut() && isZoomOut() !== originalIsZoomOutRef.current ) {\n\t\t\t\tsetZoomLevel( originalIsZoomOutRef.current ? 50 : 100 );\n\t\t\t}\n\t\t};\n\t}, [ isZoomOut, setZoomLevel, zoomOut ] );\n}\n","/**\n * Internal dependencies\n */\nimport {\n\tcreateBlockEditFilter,\n\tcreateBlockListBlockFilter,\n\tcreateBlockSaveFilter,\n} from './utils';\nimport './compat';\nimport align from './align';\nimport background from './background';\nimport './lock';\nimport anchor from './anchor';\nimport ariaLabel from './aria-label';\nimport customClassName from './custom-class-name';\nimport './generated-class-name';\nimport style from './style';\nimport './settings';\nimport color from './color';\nimport dimensions from './dimensions';\nimport duotone from './duotone';\nimport fontFamily from './font-family';\nimport fontSize from './font-size';\nimport textAlign from './text-align';\nimport border from './border';\nimport position from './position';\nimport blockStyleVariation from './block-style-variation';\nimport layout from './layout';\nimport childLayout from './layout-child';\nimport contentLockUI from './content-lock-ui';\nimport './metadata';\nimport blockHooks from './block-hooks';\nimport blockBindingsPanel from './block-bindings';\nimport './block-renaming';\nimport './use-bindings-attributes';\nimport './grid-visualizer';\n\ncreateBlockEditFilter(\n\t[\n\t\talign,\n\t\ttextAlign,\n\t\tanchor,\n\t\tcustomClassName,\n\t\tstyle,\n\t\tduotone,\n\t\tposition,\n\t\tlayout,\n\t\tcontentLockUI,\n\t\tblockHooks,\n\t\tblockBindingsPanel,\n\t\tchildLayout,\n\t].filter( Boolean )\n);\ncreateBlockListBlockFilter( [\n\talign,\n\ttextAlign,\n\tbackground,\n\tstyle,\n\tcolor,\n\tdimensions,\n\tduotone,\n\tfontFamily,\n\tfontSize,\n\tborder,\n\tposition,\n\tblockStyleVariation,\n\tchildLayout,\n] );\ncreateBlockSaveFilter( [\n\talign,\n\ttextAlign,\n\tanchor,\n\tariaLabel,\n\tcustomClassName,\n\tborder,\n\tcolor,\n\tstyle,\n\tfontFamily,\n\tfontSize,\n] );\n\nexport { useCustomSides } from './dimensions';\nexport { useLayoutClasses, useLayoutStyles } from './layout';\nexport { getBorderClassesAndStyles, useBorderProps } from './use-border-props';\nexport { getShadowClassesAndStyles } from './use-shadow-props';\nexport { getColorClassesAndStyles, useColorProps } from './use-color-props';\nexport { getSpacingClassesAndStyles } from './use-spacing-props';\nexport { getTypographyClassesAndStyles } from './use-typography-props';\nexport { getGapCSSValue } from './gap';\nexport { useCachedTruthy } from './use-cached-truthy';\nexport { setBackgroundStyleDefaults } from './background';\nexport { useZoomOut } from './use-zoom-out';\nexport { __unstableBlockStyleVariationOverridesWithConfig } from './block-style-variation';\nexport { useStyleOverride } from './utils';\n","/**\n * WordPress dependencies\n */\nimport { useMemo, Component } from '@wordpress/element';\nimport { compose, createHigherOrderComponent } from '@wordpress/compose';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetColorClassName,\n\tgetColorObjectByColorValue,\n\tgetColorObjectByAttributeValues,\n\tgetMostReadableColor,\n} from './utils';\nimport { useSettings } from '../use-settings';\nimport { unlock } from '../../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\n/**\n * Capitalizes the first letter in a string.\n *\n * @param {string} str The string whose first letter the function will capitalize.\n *\n * @return {string} Capitalized string.\n */\nconst upperFirst = ( [ firstLetter, ...rest ] ) =>\n\tfirstLetter.toUpperCase() + rest.join( '' );\n\n/**\n * Higher order component factory for injecting the `colorsArray` argument as\n * the colors prop in the `withCustomColors` HOC.\n *\n * @param {Array} colorsArray An array of color objects.\n *\n * @return {Function} The higher order component.\n */\nconst withCustomColorPalette = ( colorsArray ) =>\n\tcreateHigherOrderComponent(\n\t\t( WrappedComponent ) => ( props ) => (\n\t\t\t\n\t\t),\n\t\t'withCustomColorPalette'\n\t);\n\n/**\n * Higher order component factory for injecting the editor colors as the\n * `colors` prop in the `withColors` HOC.\n *\n * @return {Function} The higher order component.\n */\nconst withEditorColorPalette = () =>\n\tcreateHigherOrderComponent(\n\t\t( WrappedComponent ) => ( props ) => {\n\t\t\tconst [ userPalette, themePalette, defaultPalette ] = useSettings(\n\t\t\t\t'color.palette.custom',\n\t\t\t\t'color.palette.theme',\n\t\t\t\t'color.palette.default'\n\t\t\t);\n\t\t\tconst allColors = useMemo(\n\t\t\t\t() => [\n\t\t\t\t\t...( userPalette || [] ),\n\t\t\t\t\t...( themePalette || [] ),\n\t\t\t\t\t...( defaultPalette || [] ),\n\t\t\t\t],\n\t\t\t\t[ userPalette, themePalette, defaultPalette ]\n\t\t\t);\n\t\t\treturn ;\n\t\t},\n\t\t'withEditorColorPalette'\n\t);\n\n/**\n * Helper function used with `createHigherOrderComponent` to create\n * higher order components for managing color logic.\n *\n * @param {Array} colorTypes An array of color types (e.g. 'backgroundColor, borderColor).\n * @param {Function} withColorPalette A HOC for injecting the 'colors' prop into the WrappedComponent.\n *\n * @return {Component} The component that can be used as a HOC.\n */\nfunction createColorHOC( colorTypes, withColorPalette ) {\n\tconst colorMap = colorTypes.reduce( ( colorObject, colorType ) => {\n\t\treturn {\n\t\t\t...colorObject,\n\t\t\t...( typeof colorType === 'string'\n\t\t\t\t? { [ colorType ]: kebabCase( colorType ) }\n\t\t\t\t: colorType ),\n\t\t};\n\t}, {} );\n\n\treturn compose( [\n\t\twithColorPalette,\n\t\t( WrappedComponent ) => {\n\t\t\treturn class extends Component {\n\t\t\t\tconstructor( props ) {\n\t\t\t\t\tsuper( props );\n\n\t\t\t\t\tthis.setters = this.createSetters();\n\t\t\t\t\tthis.colorUtils = {\n\t\t\t\t\t\tgetMostReadableColor:\n\t\t\t\t\t\t\tthis.getMostReadableColor.bind( this ),\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.state = {};\n\t\t\t\t}\n\n\t\t\t\tgetMostReadableColor( colorValue ) {\n\t\t\t\t\tconst { colors } = this.props;\n\t\t\t\t\treturn getMostReadableColor( colors, colorValue );\n\t\t\t\t}\n\n\t\t\t\tcreateSetters() {\n\t\t\t\t\treturn Object.keys( colorMap ).reduce(\n\t\t\t\t\t\t( settersAccumulator, colorAttributeName ) => {\n\t\t\t\t\t\t\tconst upperFirstColorAttributeName =\n\t\t\t\t\t\t\t\tupperFirst( colorAttributeName );\n\t\t\t\t\t\t\tconst customColorAttributeName = `custom${ upperFirstColorAttributeName }`;\n\t\t\t\t\t\t\tsettersAccumulator[\n\t\t\t\t\t\t\t\t`set${ upperFirstColorAttributeName }`\n\t\t\t\t\t\t\t] = this.createSetColor(\n\t\t\t\t\t\t\t\tcolorAttributeName,\n\t\t\t\t\t\t\t\tcustomColorAttributeName\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn settersAccumulator;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tcreateSetColor( colorAttributeName, customColorAttributeName ) {\n\t\t\t\t\treturn ( colorValue ) => {\n\t\t\t\t\t\tconst colorObject = getColorObjectByColorValue(\n\t\t\t\t\t\t\tthis.props.colors,\n\t\t\t\t\t\t\tcolorValue\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.props.setAttributes( {\n\t\t\t\t\t\t\t[ colorAttributeName ]:\n\t\t\t\t\t\t\t\tcolorObject && colorObject.slug\n\t\t\t\t\t\t\t\t\t? colorObject.slug\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t[ customColorAttributeName ]:\n\t\t\t\t\t\t\t\tcolorObject && colorObject.slug\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: colorValue,\n\t\t\t\t\t\t} );\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tstatic getDerivedStateFromProps(\n\t\t\t\t\t{ attributes, colors },\n\t\t\t\t\tpreviousState\n\t\t\t\t) {\n\t\t\t\t\treturn Object.entries( colorMap ).reduce(\n\t\t\t\t\t\t( newState, [ colorAttributeName, colorContext ] ) => {\n\t\t\t\t\t\t\tconst colorObject = getColorObjectByAttributeValues(\n\t\t\t\t\t\t\t\tcolors,\n\t\t\t\t\t\t\t\tattributes[ colorAttributeName ],\n\t\t\t\t\t\t\t\tattributes[\n\t\t\t\t\t\t\t\t\t`custom${ upperFirst(\n\t\t\t\t\t\t\t\t\t\tcolorAttributeName\n\t\t\t\t\t\t\t\t\t) }`\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst previousColorObject =\n\t\t\t\t\t\t\t\tpreviousState[ colorAttributeName ];\n\t\t\t\t\t\t\tconst previousColor = previousColorObject?.color;\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * The \"and previousColorObject\" condition checks that a previous color object was already computed.\n\t\t\t\t\t\t\t * At the start previousColorObject and colorValue are both equal to undefined\n\t\t\t\t\t\t\t * bus as previousColorObject does not exist we should compute the object.\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tpreviousColor === colorObject.color &&\n\t\t\t\t\t\t\t\tpreviousColorObject\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnewState[ colorAttributeName ] =\n\t\t\t\t\t\t\t\t\tpreviousColorObject;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnewState[ colorAttributeName ] = {\n\t\t\t\t\t\t\t\t\t...colorObject,\n\t\t\t\t\t\t\t\t\tclass: getColorClassName(\n\t\t\t\t\t\t\t\t\t\tcolorContext,\n\t\t\t\t\t\t\t\t\t\tcolorObject.slug\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn newState;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\trender() {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t] );\n}\n\n/**\n * A higher-order component factory for creating a 'withCustomColors' HOC, which handles color logic\n * for class generation color value, retrieval and color attribute setting.\n *\n * Use this higher-order component to work with a custom set of colors.\n *\n * @example\n *\n * ```jsx\n * const CUSTOM_COLORS = [ { name: 'Red', slug: 'red', color: '#ff0000' }, { name: 'Blue', slug: 'blue', color: '#0000ff' } ];\n * const withCustomColors = createCustomColorsHOC( CUSTOM_COLORS );\n * // ...\n * export default compose(\n * withCustomColors( 'backgroundColor', 'borderColor' ),\n * MyColorfulComponent,\n * );\n * ```\n *\n * @param {Array} colorsArray The array of color objects (name, slug, color, etc... ).\n *\n * @return {Function} Higher-order component.\n */\nexport function createCustomColorsHOC( colorsArray ) {\n\treturn ( ...colorTypes ) => {\n\t\tconst withColorPalette = withCustomColorPalette( colorsArray );\n\t\treturn createHigherOrderComponent(\n\t\t\tcreateColorHOC( colorTypes, withColorPalette ),\n\t\t\t'withCustomColors'\n\t\t);\n\t};\n}\n\n/**\n * A higher-order component, which handles color logic for class generation color value, retrieval and color attribute setting.\n *\n * For use with the default editor/theme color palette.\n *\n * @example\n *\n * ```jsx\n * export default compose(\n * withColors( 'backgroundColor', { textColor: 'color' } ),\n * MyColorfulComponent,\n * );\n * ```\n *\n * @param {...(Object|string)} colorTypes The arguments can be strings or objects. If the argument is an object,\n * it should contain the color attribute name as key and the color context as value.\n * If the argument is a string the value should be the color attribute name,\n * the color context is computed by applying a kebab case transform to the value.\n * Color context represents the context/place where the color is going to be used.\n * The class name of the color is generated using 'has' followed by the color name\n * and ending with the color context all in kebab case e.g: has-green-background-color.\n *\n * @return {Function} Higher-order component.\n */\nexport default function withColors( ...colorTypes ) {\n\tconst withColorPalette = withEditorColorPalette();\n\treturn createHigherOrderComponent(\n\t\tcreateColorHOC( colorTypes, withColorPalette ),\n\t\t'withColors'\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { FontSizePicker as BaseFontSizePicker } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nfunction FontSizePicker( props ) {\n\tconst [ fontSizes, customFontSize ] = useSettings(\n\t\t'typography.fontSizes',\n\t\t'typography.customFontSize'\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/font-sizes/README.md\n */\nexport default FontSizePicker;\n","/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, compose } from '@wordpress/compose';\nimport { Component } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getFontSize, getFontSizeClass } from './utils';\nimport { useSettings } from '../use-settings';\n\nconst DEFAULT_FONT_SIZES = [];\n\n/**\n * Capitalizes the first letter in a string.\n *\n * @param {string} str The string whose first letter the function will capitalize.\n *\n * @return {string} Capitalized string.\n */\nconst upperFirst = ( [ firstLetter, ...rest ] ) =>\n\tfirstLetter.toUpperCase() + rest.join( '' );\n\n/**\n * Higher-order component, which handles font size logic for class generation,\n * font size value retrieval, and font size change handling.\n *\n * @param {...(Object|string)} fontSizeNames The arguments should all be strings.\n * Each string contains the font size\n * attribute name e.g: 'fontSize'.\n *\n * @return {Function} Higher-order component.\n */\nexport default ( ...fontSizeNames ) => {\n\t/*\n\t * Computes an object whose key is the font size attribute name as passed in the array,\n\t * and the value is the custom font size attribute name.\n\t * Custom font size is automatically compted by appending custom followed by the font size attribute name in with the first letter capitalized.\n\t */\n\tconst fontSizeAttributeNames = fontSizeNames.reduce(\n\t\t( fontSizeAttributeNamesAccumulator, fontSizeAttributeName ) => {\n\t\t\tfontSizeAttributeNamesAccumulator[\n\t\t\t\tfontSizeAttributeName\n\t\t\t] = `custom${ upperFirst( fontSizeAttributeName ) }`;\n\t\t\treturn fontSizeAttributeNamesAccumulator;\n\t\t},\n\t\t{}\n\t);\n\n\treturn createHigherOrderComponent(\n\t\tcompose( [\n\t\t\tcreateHigherOrderComponent(\n\t\t\t\t( WrappedComponent ) => ( props ) => {\n\t\t\t\t\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t'withFontSizes'\n\t\t\t),\n\t\t\t( WrappedComponent ) => {\n\t\t\t\treturn class extends Component {\n\t\t\t\t\tconstructor( props ) {\n\t\t\t\t\t\tsuper( props );\n\n\t\t\t\t\t\tthis.setters = this.createSetters();\n\n\t\t\t\t\t\tthis.state = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tcreateSetters() {\n\t\t\t\t\t\treturn Object.entries( fontSizeAttributeNames ).reduce(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tsettersAccumulator,\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName,\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\tconst upperFirstFontSizeAttributeName =\n\t\t\t\t\t\t\t\t\tupperFirst( fontSizeAttributeName );\n\t\t\t\t\t\t\t\tsettersAccumulator[\n\t\t\t\t\t\t\t\t\t`set${ upperFirstFontSizeAttributeName }`\n\t\t\t\t\t\t\t\t] = this.createSetFontSize(\n\t\t\t\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn settersAccumulator;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tcreateSetFontSize(\n\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\tcustomFontSizeAttributeName\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ( fontSizeValue ) => {\n\t\t\t\t\t\t\tconst fontSizeObject = this.props.fontSizes?.find(\n\t\t\t\t\t\t\t\t( { size } ) => size === Number( fontSizeValue )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.props.setAttributes( {\n\t\t\t\t\t\t\t\t[ fontSizeAttributeName ]:\n\t\t\t\t\t\t\t\t\tfontSizeObject && fontSizeObject.slug\n\t\t\t\t\t\t\t\t\t\t? fontSizeObject.slug\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t[ customFontSizeAttributeName ]:\n\t\t\t\t\t\t\t\t\tfontSizeObject && fontSizeObject.slug\n\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t: fontSizeValue,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tstatic getDerivedStateFromProps(\n\t\t\t\t\t\t{ attributes, fontSizes },\n\t\t\t\t\t\tpreviousState\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst didAttributesChange = (\n\t\t\t\t\t\t\tcustomFontSizeAttributeName,\n\t\t\t\t\t\t\tfontSizeAttributeName\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tif ( previousState[ fontSizeAttributeName ] ) {\n\t\t\t\t\t\t\t\t// If new font size is name compare with the previous slug.\n\t\t\t\t\t\t\t\tif ( attributes[ fontSizeAttributeName ] ) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tattributes[ fontSizeAttributeName ] !==\n\t\t\t\t\t\t\t\t\t\tpreviousState[ fontSizeAttributeName ]\n\t\t\t\t\t\t\t\t\t\t\t.slug\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// If font size is not named, update when the font size value changes.\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpreviousState[ fontSizeAttributeName ]\n\t\t\t\t\t\t\t\t\t\t.size !==\n\t\t\t\t\t\t\t\t\tattributes[ customFontSizeAttributeName ]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// In this case we need to build the font size object.\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! Object.values( fontSizeAttributeNames ).some(\n\t\t\t\t\t\t\t\tdidAttributesChange\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst newState = Object.entries(\n\t\t\t\t\t\t\tfontSizeAttributeNames\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter( ( [ key, value ] ) =>\n\t\t\t\t\t\t\t\tdidAttributesChange( value, key )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tnewStateAccumulator,\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\tfontSizeAttributeName,\n\t\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName,\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst fontSizeAttributeValue =\n\t\t\t\t\t\t\t\t\t\tattributes[ fontSizeAttributeName ];\n\t\t\t\t\t\t\t\t\tconst fontSizeObject = getFontSize(\n\t\t\t\t\t\t\t\t\t\tfontSizes,\n\t\t\t\t\t\t\t\t\t\tfontSizeAttributeValue,\n\t\t\t\t\t\t\t\t\t\tattributes[\n\t\t\t\t\t\t\t\t\t\t\tcustomFontSizeAttributeName\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewStateAccumulator[\n\t\t\t\t\t\t\t\t\t\tfontSizeAttributeName\n\t\t\t\t\t\t\t\t\t] = {\n\t\t\t\t\t\t\t\t\t\t...fontSizeObject,\n\t\t\t\t\t\t\t\t\t\tclass: getFontSizeClass(\n\t\t\t\t\t\t\t\t\t\t\tfontSizeAttributeValue\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\treturn newStateAccumulator;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...previousState,\n\t\t\t\t\t\t\t...newState,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trender() {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t] ),\n\t\t'withFontSizes'\n\t);\n};\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tparse,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { searchBlockItems } from '../components/inserter/search-items';\nimport useBlockTypesState from '../components/inserter/hooks/use-block-types-state';\nimport BlockIcon from '../components/block-icon';\nimport { store as blockEditorStore } from '../store';\nimport { orderBy } from '../utils/sorting';\nimport { orderInserterBlockItems } from '../utils/order-inserter-block-items';\n\nconst noop = () => {};\nconst SHOWN_BLOCK_TYPES = 9;\n\n/** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {WPCompleter} A blocks completer.\n */\nfunction createBlockCompleter() {\n\treturn {\n\t\tname: 'blocks',\n\t\tclassName: 'block-editor-autocompleters__block',\n\t\ttriggerPrefix: '/',\n\n\t\tuseItems( filterValue ) {\n\t\t\tconst { rootClientId, selectedBlockName, prioritizedBlocks } =\n\t\t\t\tuseSelect( ( select ) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\t\t\tgetBlockName,\n\t\t\t\t\t\tgetBlockListSettings,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\t\t\t\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\t\t\t\tconst _rootClientId = getBlockRootClientId(\n\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tselectedBlockName: selectedBlockClientId\n\t\t\t\t\t\t\t? getBlockName( selectedBlockClientId )\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\trootClientId: _rootClientId,\n\t\t\t\t\t\tprioritizedBlocks:\n\t\t\t\t\t\t\tgetBlockListSettings( _rootClientId )\n\t\t\t\t\t\t\t\t?.prioritizedInserterBlocks,\n\t\t\t\t\t};\n\t\t\t\t}, [] );\n\t\t\tconst [ items, categories, collections ] = useBlockTypesState(\n\t\t\t\trootClientId,\n\t\t\t\tnoop,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tconst filteredItems = useMemo( () => {\n\t\t\t\tconst initialFilteredItems = !! filterValue.trim()\n\t\t\t\t\t? searchBlockItems(\n\t\t\t\t\t\t\titems,\n\t\t\t\t\t\t\tcategories,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tfilterValue\n\t\t\t\t\t )\n\t\t\t\t\t: orderInserterBlockItems(\n\t\t\t\t\t\t\torderBy( items, 'frecency', 'desc' ),\n\t\t\t\t\t\t\tprioritizedBlocks\n\t\t\t\t\t );\n\n\t\t\t\treturn initialFilteredItems\n\t\t\t\t\t.filter( ( item ) => item.name !== selectedBlockName )\n\t\t\t\t\t.slice( 0, SHOWN_BLOCK_TYPES );\n\t\t\t}, [\n\t\t\t\tfilterValue,\n\t\t\t\tselectedBlockName,\n\t\t\t\titems,\n\t\t\t\tcategories,\n\t\t\t\tcollections,\n\t\t\t\tprioritizedBlocks,\n\t\t\t] );\n\n\t\t\tconst options = useMemo(\n\t\t\t\t() =>\n\t\t\t\t\tfilteredItems.map( ( blockItem ) => {\n\t\t\t\t\t\tconst { title, icon, isDisabled } = blockItem;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkey: `block-${ blockItem.id }`,\n\t\t\t\t\t\t\tvalue: blockItem,\n\t\t\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisDisabled,\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t[ filteredItems ]\n\t\t\t);\n\n\t\t\treturn [ options ];\n\t\t},\n\t\tallowContext( before, after ) {\n\t\t\treturn ! ( /\\S/.test( before ) || /\\S/.test( after ) );\n\t\t},\n\t\tgetOptionCompletion( inserterItem ) {\n\t\t\tconst {\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tinnerBlocks,\n\t\t\t\tsyncStatus,\n\t\t\t\tcontent,\n\t\t\t} = inserterItem;\n\n\t\t\treturn {\n\t\t\t\taction: 'replace',\n\t\t\t\tvalue:\n\t\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t\t? parse( content, {\n\t\t\t\t\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t: createBlock(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tinitialAttributes,\n\t\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate(\n\t\t\t\t\t\t\t\t\tinnerBlocks\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t ),\n\t\t\t};\n\t\t},\n\t};\n}\n\n/**\n * Creates a blocks repeater for replacing the current block with a selected block type.\n *\n * @return {WPCompleter} A blocks completer.\n */\nexport default createBlockCompleter();\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"apiFetch\"];","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst post = (\n\t\n\t\t\n\t\n);\n\nexport default post;\n","/**\n * WordPress dependencies\n */\n// Disable Reason: Needs to be refactored.\n// eslint-disable-next-line no-restricted-imports\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Icon, page, post } from '@wordpress/icons';\n\nconst SHOWN_SUGGESTIONS = 10;\n\n/** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */\n\n/**\n * Creates a suggestion list for links to posts or pages.\n *\n * @return {WPCompleter} A links completer.\n */\nfunction createLinkCompleter() {\n\treturn {\n\t\tname: 'links',\n\t\tclassName: 'block-editor-autocompleters__link',\n\t\ttriggerPrefix: '[[',\n\t\toptions: async ( letters ) => {\n\t\t\tlet options = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/wp/v2/search', {\n\t\t\t\t\tper_page: SHOWN_SUGGESTIONS,\n\t\t\t\t\tsearch: letters,\n\t\t\t\t\ttype: 'post',\n\t\t\t\t\torder_by: 'menu_order',\n\t\t\t\t} ),\n\t\t\t} );\n\n\t\t\toptions = options.filter( ( option ) => option.title !== '' );\n\n\t\t\treturn options;\n\t\t},\n\t\tgetOptionKeywords( item ) {\n\t\t\tconst expansionWords = item.title.split( /\\s+/ );\n\t\t\treturn [ ...expansionWords ];\n\t\t},\n\t\tgetOptionLabel( item ) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t{ item.title }\n\t\t\t\t\n\t\t\t);\n\t\t},\n\t\tgetOptionCompletion( item ) {\n\t\t\treturn { item.title };\n\t\t},\n\t};\n}\n\n/**\n * Creates a suggestion list for links to posts or pages..\n *\n * @return {WPCompleter} A link completer.\n */\nexport default createLinkCompleter();\n","/**\n * WordPress dependencies\n */\nimport { applyFilters, hasFilter } from '@wordpress/hooks';\nimport {\n\tAutocomplete,\n\t__unstableUseAutocompleteProps as useAutocompleteProps,\n} from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { getDefaultBlockName, getBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\nimport blockAutocompleter from '../../autocompleters/block';\nimport linkAutocompleter from '../../autocompleters/link';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nfunction useCompleters( { completers = EMPTY_ARRAY } ) {\n\tconst { name } = useBlockEditContext();\n\treturn useMemo( () => {\n\t\tlet filteredCompleters = [ ...completers, linkAutocompleter ];\n\n\t\tif (\n\t\t\tname === getDefaultBlockName() ||\n\t\t\tgetBlockSupport( name, '__experimentalSlashInserter', false )\n\t\t) {\n\t\t\tfilteredCompleters = [ ...filteredCompleters, blockAutocompleter ];\n\t\t}\n\n\t\tif ( hasFilter( 'editor.Autocomplete.completers' ) ) {\n\t\t\t// Provide copies so filters may directly modify them.\n\t\t\tif ( filteredCompleters === completers ) {\n\t\t\t\tfilteredCompleters = filteredCompleters.map(\n\t\t\t\t\t( completer ) => ( { ...completer } )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfilteredCompleters = applyFilters(\n\t\t\t\t'editor.Autocomplete.completers',\n\t\t\t\tfilteredCompleters,\n\t\t\t\tname\n\t\t\t);\n\t\t}\n\n\t\treturn filteredCompleters;\n\t}, [ completers, name ] );\n}\n\nexport function useBlockEditorAutocompleteProps( props ) {\n\treturn useAutocompleteProps( {\n\t\t...props,\n\t\tcompleters: useCompleters( props ),\n\t} );\n}\n\n/**\n * Wrap the default Autocomplete component with one that supports a filter hook\n * for customizing its list of autocompleters.\n *\n * @type {import('react').FC}\n */\nfunction BlockEditorAutocomplete( props ) {\n\treturn ;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/autocomplete/README.md\n */\nexport default BlockEditorAutocomplete;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst fullscreen = (\n\t\n\t\t\n\t\n);\n\nexport default fullscreen;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport { fullscreen } from '@wordpress/icons';\n\nfunction BlockFullHeightAlignmentControl( {\n\tisActive,\n\tlabel = __( 'Toggle full height' ),\n\tonToggle,\n\tisDisabled,\n} ) {\n\treturn (\n\t\t onToggle( ! isActive ) }\n\t\t\tdisabled={ isDisabled }\n\t\t/>\n\t);\n}\n\nexport default BlockFullHeightAlignmentControl;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport {\n\tToolbarButton,\n\tDropdown,\n\tAlignmentMatrixControl,\n} from '@wordpress/components';\n\nconst noop = () => {};\n\nfunction BlockAlignmentMatrixControl( props ) {\n\tconst {\n\t\tlabel = __( 'Change matrix alignment' ),\n\t\tonChange = noop,\n\t\tvalue = 'center',\n\t\tisDisabled,\n\t} = props;\n\n\tconst icon = ;\n\n\treturn (\n\t\t {\n\t\t\t\tconst openOnArrowDown = ( event ) => {\n\t\t\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonToggle();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default BlockAlignmentMatrixControl;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\t__experimentalGetBlockLabel as getBlockLabel,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns the block's configured title as a string, or empty if the title\n * cannot be determined.\n *\n * @example\n *\n * ```js\n * useBlockDisplayTitle( { clientId: 'afd1cb17-2c08-4e7a-91be-007ba7ddc3a1', maximumLength: 17 } );\n * ```\n *\n * @param {Object} props\n * @param {string} props.clientId Client ID of block.\n * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.\n * @param {string|undefined} props.context The context to pass to `getBlockLabel`.\n * @return {?string} Block title.\n */\nexport default function useBlockDisplayTitle( {\n\tclientId,\n\tmaximumLength,\n\tcontext,\n} ) {\n\tconst blockTitle = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tif ( ! blockType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst label = getBlockLabel( blockType, attributes, context );\n\t\t\t// If the label is defined we prioritize it over a possible block variation title match.\n\t\t\tif ( label !== blockType.title ) {\n\t\t\t\treturn label;\n\t\t\t}\n\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\t// Label will fallback to the title if no label is defined for the current label context.\n\t\t\treturn match?.title || blockType.title;\n\t\t},\n\t\t[ clientId, context ]\n\t);\n\n\tif ( ! blockTitle ) {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tmaximumLength &&\n\t\tmaximumLength > 0 &&\n\t\tblockTitle.length > maximumLength\n\t) {\n\t\tconst omission = '...';\n\t\treturn (\n\t\t\tblockTitle.slice( 0, maximumLength - omission.length ) + omission\n\t\t);\n\t}\n\n\treturn blockTitle;\n}\n","/**\n * Internal dependencies\n */\n\nimport useBlockDisplayTitle from './use-block-display-title';\n\n/**\n * Renders the block's configured title as a string, or empty if the title\n * cannot be determined.\n *\n * @example\n *\n * ```jsx\n * \n * ```\n *\n * @param {Object} props\n * @param {string} props.clientId Client ID of block.\n * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.\n * @param {string|undefined} props.context The context to pass to `getBlockLabel`.\n *\n * @return {JSX.Element} Block title.\n */\nexport default function BlockTitle( { clientId, maximumLength, context } ) {\n\treturn useBlockDisplayTitle( { clientId, maximumLength, context } );\n}\n","/**\n * Gets the editor region for a given editor canvas element or\n * returns the passed element if no region is found\n *\n * @param { Object } editor The editor canvas element.\n * @return { Object } The editor region or given editor element\n */\nexport default function getEditorRegion( editor ) {\n\tif ( ! editor ) {\n\t\treturn null;\n\t}\n\n\t// If there are multiple editors, we need to find the iframe that contains our contentRef to make sure\n\t// we're focusing the region that contains this editor.\n\tconst editorCanvas =\n\t\tArray.from(\n\t\t\tdocument.querySelectorAll( 'iframe[name=\"editor-canvas\"]' ).values()\n\t\t).find( ( iframe ) => {\n\t\t\t// Find the iframe that contains our contentRef\n\t\t\tconst iframeDocument =\n\t\t\t\tiframe.contentDocument || iframe.contentWindow.document;\n\n\t\t\treturn iframeDocument === editor.ownerDocument;\n\t\t} ) ?? editor;\n\n\t// The region is provided by the editor, not the block-editor.\n\t// We should send focus to the region if one is available to reuse the\n\t// same interface for navigating landmarks. If no region is available,\n\t// use the canvas instead.\n\treturn editorCanvas?.closest( '[role=\"region\"]' ) ?? editorCanvas;\n}\n","/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { chevronRightSmall, Icon } from '@wordpress/icons';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockTitle from '../block-title';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { useBlockElementRef } from '../block-list/use-block-props/use-block-refs';\nimport getEditorRegion from '../../utils/get-editor-region';\n\n/**\n * Block breadcrumb component, displaying the hierarchy of the current block selection as a breadcrumb.\n *\n * @param {Object} props Component props.\n * @param {string} props.rootLabelText Translated label for the root element of the breadcrumb trail.\n * @return {Element} Block Breadcrumb.\n */\nfunction BlockBreadcrumb( { rootLabelText } ) {\n\tconst { selectBlock, clearSelectedBlock } = useDispatch( blockEditorStore );\n\tconst { clientId, parents, hasSelection } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectionStart,\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetEnabledBlockParents,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\treturn {\n\t\t\tparents: getEnabledBlockParents( selectedBlockClientId ),\n\t\t\tclientId: selectedBlockClientId,\n\t\t\thasSelection: !! getSelectionStart().clientId,\n\t\t};\n\t}, [] );\n\tconst rootLabel = rootLabelText || __( 'Document' );\n\n\t// We don't care about this specific ref, but this is a way\n\t// to get a ref within the editor canvas so we can focus it later.\n\tconst blockRef = useRef();\n\tuseBlockElementRef( clientId, blockRef );\n\n\t/*\n\t * Disable reason: The `list` ARIA role is redundant but\n\t * Safari+VoiceOver won't announce the list otherwise.\n\t */\n\t/* eslint-disable jsx-a11y/no-redundant-roles */\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ hasSelection && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\t// Find the block editor wrapper for the selected block\n\t\t\t\t\t\t\tconst blockEditor = blockRef.current?.closest(\n\t\t\t\t\t\t\t\t'.editor-styles-wrapper'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tclearSelectedBlock();\n\n\t\t\t\t\t\t\tgetEditorRegion( blockEditor )?.focus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ rootLabel }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ ! hasSelection && rootLabel }\n\t\t\t\t{ !! clientId && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\n\t\t\t{ parents.map( ( parentClientId ) => (\n\t\t\t\t
  • \n\t\t\t\t\t selectBlock( parentClientId ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t) ) }\n\t\t\t{ !! clientId && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t\t/* eslint-enable jsx-a11y/no-redundant-roles */\n\t);\n}\n\nexport default BlockBreadcrumb;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useBlockOverlayActive( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst { __unstableHasActiveBlockOverlayActive } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn __unstableHasActiveBlockOverlayActive( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { getScrollContainer } from '@wordpress/dom';\nimport {\n\tuseCallback,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseState,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport { hasStickyOrFixedPositionValue } from '../../hooks/position';\nimport { getVisibleElementBounds } from '../../utils/dom';\n\nconst COMMON_PROPS = {\n\tplacement: 'top-start',\n};\n\n// By default the toolbar sets the `shift` prop. If the user scrolls the page\n// down the toolbar will stay on screen by adopting a sticky position at the\n// top of the viewport.\nconst DEFAULT_PROPS = {\n\t...COMMON_PROPS,\n\tflip: false,\n\tshift: true,\n};\n\n// When there isn't enough height between the top of the block and the editor\n// canvas, the `shift` prop is set to `false`, as it will cause the block to be\n// obscured. The `flip` behavior is enabled, which positions the toolbar below\n// the block. This only happens if the block is smaller than the viewport, as\n// otherwise the toolbar will be off-screen.\nconst RESTRICTED_HEIGHT_PROPS = {\n\t...COMMON_PROPS,\n\tflip: true,\n\tshift: false,\n};\n\n/**\n * Get the popover props for the block toolbar, determined by the space at the top of the canvas and the toolbar height.\n *\n * @param {Element} contentElement The DOM element that represents the editor content or canvas.\n * @param {Element} selectedBlockElement The outer DOM element of the first selected block.\n * @param {Element} scrollContainer The scrollable container for the contentElement.\n * @param {number} toolbarHeight The height of the toolbar in pixels.\n * @param {boolean} isSticky Whether or not the selected block is sticky or fixed.\n *\n * @return {Object} The popover props used to determine the position of the toolbar.\n */\nfunction getProps(\n\tcontentElement,\n\tselectedBlockElement,\n\tscrollContainer,\n\ttoolbarHeight,\n\tisSticky\n) {\n\tif ( ! contentElement || ! selectedBlockElement ) {\n\t\treturn DEFAULT_PROPS;\n\t}\n\n\t// Get how far the content area has been scrolled.\n\tconst scrollTop = scrollContainer?.scrollTop || 0;\n\n\tconst blockRect = getVisibleElementBounds( selectedBlockElement );\n\tconst contentRect = contentElement.getBoundingClientRect();\n\n\t// Get the vertical position of top of the visible content area.\n\tconst topOfContentElementInViewport = scrollTop + contentRect.top;\n\n\t// The document element's clientHeight represents the viewport height.\n\tconst viewportHeight =\n\t\tcontentElement.ownerDocument.documentElement.clientHeight;\n\n\t// The restricted height area is calculated as the sum of the\n\t// vertical position of the visible content area, plus the height\n\t// of the block toolbar.\n\tconst restrictedTopArea = topOfContentElementInViewport + toolbarHeight;\n\tconst hasSpaceForToolbarAbove = blockRect.top > restrictedTopArea;\n\n\tconst isBlockTallerThanViewport =\n\t\tblockRect.height > viewportHeight - toolbarHeight;\n\n\t// Sticky blocks are treated as if they will never have enough space for the toolbar above.\n\tif (\n\t\t! isSticky &&\n\t\t( hasSpaceForToolbarAbove || isBlockTallerThanViewport )\n\t) {\n\t\treturn DEFAULT_PROPS;\n\t}\n\n\treturn RESTRICTED_HEIGHT_PROPS;\n}\n\n/**\n * Determines the desired popover positioning behavior, returning a set of appropriate props.\n *\n * @param {Object} elements\n * @param {Element} elements.contentElement The DOM element that represents the editor content or canvas.\n * @param {string} elements.clientId The clientId of the first selected block.\n *\n * @return {Object} The popover props used to determine the position of the toolbar.\n */\nexport default function useBlockToolbarPopoverProps( {\n\tcontentElement,\n\tclientId,\n} ) {\n\tconst selectedBlockElement = useBlockElement( clientId );\n\tconst [ toolbarHeight, setToolbarHeight ] = useState( 0 );\n\tconst { blockIndex, isSticky } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockIndex, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\tisSticky: hasStickyOrFixedPositionValue(\n\t\t\t\t\tgetBlockAttributes( clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst scrollContainer = useMemo( () => {\n\t\tif ( ! contentElement ) {\n\t\t\treturn;\n\t\t}\n\t\treturn getScrollContainer( contentElement );\n\t}, [ contentElement ] );\n\tconst [ props, setProps ] = useState( () =>\n\t\tgetProps(\n\t\t\tcontentElement,\n\t\t\tselectedBlockElement,\n\t\t\tscrollContainer,\n\t\t\ttoolbarHeight,\n\t\t\tisSticky\n\t\t)\n\t);\n\n\tconst popoverRef = useRefEffect( ( popoverNode ) => {\n\t\tsetToolbarHeight( popoverNode.offsetHeight );\n\t}, [] );\n\n\tconst updateProps = useCallback(\n\t\t() =>\n\t\t\tsetProps(\n\t\t\t\tgetProps(\n\t\t\t\t\tcontentElement,\n\t\t\t\t\tselectedBlockElement,\n\t\t\t\t\tscrollContainer,\n\t\t\t\t\ttoolbarHeight,\n\t\t\t\t\tisSticky\n\t\t\t\t)\n\t\t\t),\n\t\t[ contentElement, selectedBlockElement, scrollContainer, toolbarHeight ]\n\t);\n\n\t// Update props when the block is moved. This also ensures the props are\n\t// correct on initial mount, and when the selected block or content element\n\t// changes (since the callback ref will update).\n\tuseLayoutEffect( updateProps, [ blockIndex, updateProps ] );\n\n\t// Update props when the viewport is resized or the block is resized.\n\tuseLayoutEffect( () => {\n\t\tif ( ! contentElement || ! selectedBlockElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update the toolbar props on viewport resize.\n\t\tconst contentView = contentElement?.ownerDocument?.defaultView;\n\t\tcontentView?.addEventHandler?.( 'resize', updateProps );\n\n\t\t// Update the toolbar props on block resize.\n\t\tlet resizeObserver;\n\t\tconst blockView = selectedBlockElement?.ownerDocument?.defaultView;\n\t\tif ( blockView.ResizeObserver ) {\n\t\t\tresizeObserver = new blockView.ResizeObserver( updateProps );\n\t\t\tresizeObserver.observe( selectedBlockElement );\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontentView?.removeEventHandler?.( 'resize', updateProps );\n\n\t\t\tif ( resizeObserver ) {\n\t\t\t\tresizeObserver.disconnect();\n\t\t\t}\n\t\t};\n\t}, [ updateProps, contentElement, selectedBlockElement ] );\n\n\treturn {\n\t\t...props,\n\t\tref: popoverRef,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Returns props for the selected block tools and empty block inserter.\n *\n * @param {string} clientId Selected block client ID.\n */\nexport default function useSelectedBlockToolProps( clientId ) {\n\tconst selectedBlockProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockParents,\n\t\t\t\t__experimentalGetBlockListSettingsForBlocks,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t\tgetBlockInsertionPoint,\n\t\t\t\tgetBlockOrder,\n\t\t\t\thasMultiSelection,\n\t\t\t\tgetLastMultiSelectedBlockClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst blockParentsClientIds = getBlockParents( clientId );\n\n\t\t\t// Get Block List Settings for all ancestors of the current Block clientId.\n\t\t\tconst parentBlockListSettings =\n\t\t\t\t__experimentalGetBlockListSettingsForBlocks(\n\t\t\t\t\tblockParentsClientIds\n\t\t\t\t);\n\n\t\t\t// Get the clientId of the topmost parent with the capture toolbars setting.\n\t\t\tconst capturingClientId = blockParentsClientIds.find(\n\t\t\t\t( parentClientId ) =>\n\t\t\t\t\tparentBlockListSettings[ parentClientId ]\n\t\t\t\t\t\t?.__experimentalCaptureToolbars\n\t\t\t);\n\n\t\t\tlet isInsertionPointVisible = false;\n\t\t\tif ( isBlockInsertionPointVisible() ) {\n\t\t\t\tconst insertionPoint = getBlockInsertionPoint();\n\t\t\t\tconst order = getBlockOrder( insertionPoint.rootClientId );\n\t\t\t\tisInsertionPointVisible =\n\t\t\t\t\torder[ insertionPoint.index ] === clientId;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcapturingClientId,\n\t\t\t\tisInsertionPointVisible,\n\t\t\t\tlastClientId: hasMultiSelection()\n\t\t\t\t\t? getLastMultiSelectedBlockClientId()\n\t\t\t\t\t: null,\n\t\t\t\trootClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn selectedBlockProps;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../block-popover/cover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport Inserter from '../inserter';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\n\nexport default function EmptyBlockInserter( {\n\tclientId,\n\t__unstableContentRef,\n} ) {\n\tconst {\n\t\tcapturingClientId,\n\t\tisInsertionPointVisible,\n\t\tlastClientId,\n\t\trootClientId,\n\t} = useSelectedBlockToolProps( clientId );\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { Draggable } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\nimport { throttle } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggableChip from './draggable-chip';\nimport useScrollWhenDragging from './use-scroll-when-dragging';\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport { isDropTargetValid } from '../use-block-drop-zone';\n\nconst BlockDraggable = ( {\n\tappendToOwnerDocument,\n\tchildren,\n\tclientIds,\n\tcloneClassname,\n\telementId,\n\tonDragStart,\n\tonDragEnd,\n\tfadeWhenDisabled = false,\n\tdragComponent,\n} ) => {\n\tconst {\n\t\tsrcRootClientId,\n\t\tisDraggable,\n\t\ticon,\n\t\tvisibleInserter,\n\t\tgetBlockType,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tisBlockInsertionPointVisible,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getBlockType: _getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\tconst blockName = getBlockName( clientIds[ 0 ] );\n\t\t\tconst variation = getActiveBlockVariation(\n\t\t\t\tblockName,\n\t\t\t\tgetBlockAttributes( clientIds[ 0 ] )\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tsrcRootClientId: rootClientId,\n\t\t\t\tisDraggable: canMoveBlocks( clientIds ),\n\t\t\t\ticon: variation?.icon || _getBlockType( blockName )?.icon,\n\t\t\t\tvisibleInserter: isBlockInsertionPointVisible(),\n\t\t\t\tgetBlockType: _getBlockType,\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst isDraggingRef = useRef( false );\n\tconst [ startScrolling, scrollOnDragOver, stopScrolling ] =\n\t\tuseScrollWhenDragging();\n\n\tconst { getAllowedBlocks, getBlockNamesByClientId, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { startDraggingBlocks, stopDraggingBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Stop dragging blocks if the block draggable is unmounted.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( isDraggingRef.current ) {\n\t\t\t\tstopDraggingBlocks();\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\t// Find the root of the editor iframe.\n\tconst blockEl = useBlockElement( clientIds[ 0 ] );\n\tconst editorRoot = blockEl?.closest( 'body' );\n\n\t/*\n\t * Add a dragover event listener to the editor root to track the blocks being dragged over.\n\t * The listener has to be inside the editor iframe otherwise the target isn't accessible.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! editorRoot || ! fadeWhenDisabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst onDragOver = ( event ) => {\n\t\t\tif ( ! event.target.closest( '[data-block]' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst draggedBlockNames = getBlockNamesByClientId( clientIds );\n\t\t\tconst targetClientId = event.target\n\t\t\t\t.closest( '[data-block]' )\n\t\t\t\t.getAttribute( 'data-block' );\n\n\t\t\tconst allowedBlocks = getAllowedBlocks( targetClientId );\n\t\t\tconst targetBlockName = getBlockNamesByClientId( [\n\t\t\t\ttargetClientId,\n\t\t\t] )[ 0 ];\n\n\t\t\t/*\n\t\t\t * Check if the target is valid to drop in.\n\t\t\t * If the target's allowedBlocks is an empty array,\n\t\t\t * it isn't a container block, in which case we check\n\t\t\t * its parent's validity instead.\n\t\t\t */\n\t\t\tlet dropTargetValid;\n\t\t\tif ( allowedBlocks?.length === 0 ) {\n\t\t\t\tconst targetRootClientId =\n\t\t\t\t\tgetBlockRootClientId( targetClientId );\n\t\t\t\tconst targetRootBlockName = getBlockNamesByClientId( [\n\t\t\t\t\ttargetRootClientId,\n\t\t\t\t] )[ 0 ];\n\t\t\t\tconst rootAllowedBlocks =\n\t\t\t\t\tgetAllowedBlocks( targetRootClientId );\n\t\t\t\tdropTargetValid = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\trootAllowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetRootBlockName\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdropTargetValid = isDropTargetValid(\n\t\t\t\t\tgetBlockType,\n\t\t\t\t\tallowedBlocks,\n\t\t\t\t\tdraggedBlockNames,\n\t\t\t\t\ttargetBlockName\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Update the body class to reflect if drop target is valid.\n\t\t\t * This has to be done on the document body because the draggable\n\t\t\t * chip is rendered outside of the editor iframe.\n\t\t\t */\n\t\t\tif ( ! dropTargetValid && ! visibleInserter ) {\n\t\t\t\twindow?.document?.body?.classList?.add(\n\t\t\t\t\t'block-draggable-invalid-drag-token'\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\twindow?.document?.body?.classList?.remove(\n\t\t\t\t\t'block-draggable-invalid-drag-token'\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst throttledOnDragOver = throttle( onDragOver, 200 );\n\n\t\teditorRoot.addEventListener( 'dragover', throttledOnDragOver );\n\n\t\treturn () => {\n\t\t\teditorRoot.removeEventListener( 'dragover', throttledOnDragOver );\n\t\t};\n\t}, [\n\t\tclientIds,\n\t\teditorRoot,\n\t\tfadeWhenDisabled,\n\t\tgetAllowedBlocks,\n\t\tgetBlockNamesByClientId,\n\t\tgetBlockRootClientId,\n\t\tgetBlockType,\n\t\tvisibleInserter,\n\t] );\n\n\tif ( ! isDraggable ) {\n\t\treturn children( { draggable: false } );\n\t}\n\n\tconst transferData = {\n\t\ttype: 'block',\n\t\tsrcClientIds: clientIds,\n\t\tsrcRootClientId,\n\t};\n\n\treturn (\n\t\t {\n\t\t\t\t// Defer hiding the dragged source element to the next\n\t\t\t\t// frame to enable dragging.\n\t\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\t\tstartDraggingBlocks( clientIds );\n\t\t\t\t\tisDraggingRef.current = true;\n\n\t\t\t\t\tstartScrolling( event );\n\n\t\t\t\t\tif ( onDragStart ) {\n\t\t\t\t\t\tonDragStart();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tonDragOver={ scrollOnDragOver }\n\t\t\tonDragEnd={ () => {\n\t\t\t\tstopDraggingBlocks();\n\t\t\t\tisDraggingRef.current = false;\n\n\t\t\t\tstopScrolling();\n\n\t\t\t\tif ( onDragEnd ) {\n\t\t\t\t\tonDragEnd();\n\t\t\t\t}\n\t\t\t} }\n\t\t\t__experimentalDragComponent={\n\t\t\t\t// Check against `undefined` so that `null` can be used to disable\n\t\t\t\t// the default drag component.\n\t\t\t\tdragComponent !== undefined ? (\n\t\t\t\t\tdragComponent\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\t\t\telementId={ elementId }\n\t\t>\n\t\t\t{ ( { onDraggableStart, onDraggableEnd } ) => {\n\t\t\t\treturn children( {\n\t\t\t\t\tdraggable: true,\n\t\t\t\t\tonDragStart: onDraggableStart,\n\t\t\t\t\tonDragEnd: onDraggableEnd,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\n\t);\n};\n\nexport default BlockDraggable;\n","/**\n * WordPress dependencies\n */\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useCallback, useEffect, useRef } from '@wordpress/element';\n\nconst SCROLL_INACTIVE_DISTANCE_PX = 50;\nconst SCROLL_INTERVAL_MS = 25;\nconst PIXELS_PER_SECOND_PER_PERCENTAGE = 1000;\nconst VELOCITY_MULTIPLIER =\n\tPIXELS_PER_SECOND_PER_PERCENTAGE * ( SCROLL_INTERVAL_MS / 1000 );\n\n/**\n * React hook that scrolls the scroll container when a block is being dragged.\n *\n * @return {Function[]} `startScrolling`, `scrollOnDragOver`, `stopScrolling`\n * functions to be called in `onDragStart`, `onDragOver`\n * and `onDragEnd` events respectively.\n */\nexport default function useScrollWhenDragging() {\n\tconst dragStartYRef = useRef( null );\n\tconst velocityYRef = useRef( null );\n\tconst scrollParentYRef = useRef( null );\n\tconst scrollEditorIntervalRef = useRef( null );\n\n\t// Clear interval when unmounting.\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif ( scrollEditorIntervalRef.current ) {\n\t\t\t\tclearInterval( scrollEditorIntervalRef.current );\n\t\t\t\tscrollEditorIntervalRef.current = null;\n\t\t\t}\n\t\t},\n\t\t[]\n\t);\n\n\tconst startScrolling = useCallback( ( event ) => {\n\t\tdragStartYRef.current = event.clientY;\n\n\t\t// Find nearest parent(s) to scroll.\n\t\tscrollParentYRef.current = getScrollContainer( event.target );\n\n\t\tscrollEditorIntervalRef.current = setInterval( () => {\n\t\t\tif ( scrollParentYRef.current && velocityYRef.current ) {\n\t\t\t\tconst newTop =\n\t\t\t\t\tscrollParentYRef.current.scrollTop + velocityYRef.current;\n\n\t\t\t\t// Setting `behavior: 'smooth'` as a scroll property seems to hurt performance.\n\t\t\t\t// Better to use a small scroll interval.\n\t\t\t\tscrollParentYRef.current.scroll( {\n\t\t\t\t\ttop: newTop,\n\t\t\t\t} );\n\t\t\t}\n\t\t}, SCROLL_INTERVAL_MS );\n\t}, [] );\n\n\tconst scrollOnDragOver = useCallback( ( event ) => {\n\t\tif ( ! scrollParentYRef.current ) {\n\t\t\treturn;\n\t\t}\n\t\tconst scrollParentHeight = scrollParentYRef.current.offsetHeight;\n\t\tconst offsetDragStartPosition =\n\t\t\tdragStartYRef.current - scrollParentYRef.current.offsetTop;\n\t\tconst offsetDragPosition =\n\t\t\tevent.clientY - scrollParentYRef.current.offsetTop;\n\n\t\tif ( event.clientY > offsetDragStartPosition ) {\n\t\t\t// User is dragging downwards.\n\t\t\tconst moveableDistance = Math.max(\n\t\t\t\tscrollParentHeight -\n\t\t\t\t\toffsetDragStartPosition -\n\t\t\t\t\tSCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst dragDistance = Math.max(\n\t\t\t\toffsetDragPosition -\n\t\t\t\t\toffsetDragStartPosition -\n\t\t\t\t\tSCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst distancePercentage =\n\t\t\t\tmoveableDistance === 0 || dragDistance === 0\n\t\t\t\t\t? 0\n\t\t\t\t\t: dragDistance / moveableDistance;\n\t\t\tvelocityYRef.current = VELOCITY_MULTIPLIER * distancePercentage;\n\t\t} else if ( event.clientY < offsetDragStartPosition ) {\n\t\t\t// User is dragging upwards.\n\t\t\tconst moveableDistance = Math.max(\n\t\t\t\toffsetDragStartPosition - SCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst dragDistance = Math.max(\n\t\t\t\toffsetDragStartPosition -\n\t\t\t\t\toffsetDragPosition -\n\t\t\t\t\tSCROLL_INACTIVE_DISTANCE_PX,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst distancePercentage =\n\t\t\t\tmoveableDistance === 0 || dragDistance === 0\n\t\t\t\t\t? 0\n\t\t\t\t\t: dragDistance / moveableDistance;\n\t\t\tvelocityYRef.current = -VELOCITY_MULTIPLIER * distancePercentage;\n\t\t} else {\n\t\t\tvelocityYRef.current = 0;\n\t\t}\n\t}, [] );\n\n\tconst stopScrolling = () => {\n\t\tdragStartYRef.current = null;\n\t\tscrollParentYRef.current = null;\n\n\t\tif ( scrollEditorIntervalRef.current ) {\n\t\t\tclearInterval( scrollEditorIntervalRef.current );\n\t\t\tscrollEditorIntervalRef.current = null;\n\t\t}\n\t};\n\n\treturn [ startScrolling, scrollOnDragOver, stopScrolling ];\n}\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\n\nconst getMovementDirection = ( moveDirection, orientation ) => {\n\tif ( moveDirection === 'up' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? 'right' : 'left';\n\t\t}\n\t\treturn 'up';\n\t} else if ( moveDirection === 'down' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? 'left' : 'right';\n\t\t}\n\t\treturn 'down';\n\t}\n\treturn null;\n};\n\n/**\n * Return a label for the block movement controls depending on block position.\n *\n * @param {number} selectedCount Number of blocks selected.\n * @param {string} type Block type - in the case of a single block, should\n * define its 'type'. I.e. 'Text', 'Heading', 'Image' etc.\n * @param {number} firstIndex The index (position - 1) of the first block selected.\n * @param {boolean} isFirst This is the first block.\n * @param {boolean} isLast This is the last block.\n * @param {number} dir Direction of movement (> 0 is considered to be going\n * down, < 0 is up).\n * @param {string} orientation The orientation of the block movers, vertical or\n * horizontal.\n *\n * @return {string | undefined} Label for the block movement controls.\n */\nexport function getBlockMoverDescription(\n\tselectedCount,\n\ttype,\n\tfirstIndex,\n\tisFirst,\n\tisLast,\n\tdir,\n\torientation\n) {\n\tconst position = firstIndex + 1;\n\n\tif ( selectedCount > 1 ) {\n\t\treturn getMultiBlockMoverDescription(\n\t\t\tselectedCount,\n\t\t\tfirstIndex,\n\t\t\tisFirst,\n\t\t\tisLast,\n\t\t\tdir,\n\t\t\torientation\n\t\t);\n\t}\n\n\tif ( isFirst && isLast ) {\n\t\treturn sprintf(\n\t\t\t// translators: %s: Type of block (i.e. Text, Image etc)\n\t\t\t__( 'Block %s is the only block, and cannot be moved' ),\n\t\t\ttype\n\t\t);\n\t}\n\n\tif ( dir > 0 && ! isLast ) {\n\t\t// Moving down.\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d down to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition + 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d left to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition + 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d right to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition + 1\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir > 0 && isLast ) {\n\t\t// Moving down, and is the last item.\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the end of the content and can’t be moved down'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the end of the content and can’t be moved left'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the end of the content and can’t be moved right'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && ! isFirst ) {\n\t\t// Moving up.\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__( 'Move %1$s block from position %2$d up to position %3$d' ),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition - 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d left to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition - 1\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position\n\t\t\t\t__(\n\t\t\t\t\t'Move %1$s block from position %2$d right to position %3$d'\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tposition,\n\t\t\t\tposition - 1\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && isFirst ) {\n\t\t// Moving up, and is the first item.\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the beginning of the content and can’t be moved up'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the beginning of the content and can’t be moved left'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Type of block (i.e. Text, Image etc)\n\t\t\t\t__(\n\t\t\t\t\t'Block %1$s is at the beginning of the content and can’t be moved right'\n\t\t\t\t),\n\t\t\t\ttype\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Return a label for the block movement controls depending on block position.\n *\n * @param {number} selectedCount Number of blocks selected.\n * @param {number} firstIndex The index (position - 1) of the first block selected.\n * @param {boolean} isFirst This is the first block.\n * @param {boolean} isLast This is the last block.\n * @param {number} dir Direction of movement (> 0 is considered to be going\n * down, < 0 is up).\n * @param {string} orientation The orientation of the block movers, vertical or\n * horizontal.\n *\n * @return {string | undefined} Label for the block movement controls.\n */\nexport function getMultiBlockMoverDescription(\n\tselectedCount,\n\tfirstIndex,\n\tisFirst,\n\tisLast,\n\tdir,\n\torientation\n) {\n\tconst position = firstIndex + 1;\n\n\tif ( isFirst && isLast ) {\n\t\t// All blocks are selected\n\t\treturn __( 'All blocks are selected, and cannot be moved' );\n\t}\n\n\tif ( dir > 0 && ! isLast ) {\n\t\t// moving down\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d down by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d left by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d right by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir > 0 && isLast ) {\n\t\t// moving down, and the selected blocks are the last item\n\t\tconst movementDirection = getMovementDirection( 'down', orientation );\n\n\t\tif ( movementDirection === 'down' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved down as they are already at the bottom'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved left as they are already are at the leftmost position'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved right as they are already are at the rightmost position'\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && ! isFirst ) {\n\t\t// moving up\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d up by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d left by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: 1: Number of selected blocks, 2: Position of selected blocks\n\t\t\t\t__( 'Move %1$d blocks from position %2$d right by one place' ),\n\t\t\t\tselectedCount,\n\t\t\t\tposition\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( dir < 0 && isFirst ) {\n\t\t// moving up, and the selected blocks are the first item\n\t\tconst movementDirection = getMovementDirection( 'up', orientation );\n\n\t\tif ( movementDirection === 'up' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved up as they are already at the top'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'left' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved left as they are already are at the leftmost position'\n\t\t\t);\n\t\t}\n\n\t\tif ( movementDirection === 'right' ) {\n\t\t\treturn __(\n\t\t\t\t'Blocks cannot be moved right as they are already are at the rightmost position'\n\t\t\t);\n\t\t}\n\t}\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { Button, VisuallyHidden } from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tchevronLeft,\n\tchevronRight,\n\tchevronUp,\n\tchevronDown,\n} from '@wordpress/icons';\nimport { getBlockMoverDescription } from './mover-description';\nimport { store as blockEditorStore } from '../../store';\n\nconst getArrowIcon = ( direction, orientation ) => {\n\tif ( direction === 'up' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? chevronRight : chevronLeft;\n\t\t}\n\t\treturn chevronUp;\n\t} else if ( direction === 'down' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? chevronLeft : chevronRight;\n\t\t}\n\t\treturn chevronDown;\n\t}\n\treturn null;\n};\n\nconst getMovementDirectionLabel = ( moveDirection, orientation ) => {\n\tif ( moveDirection === 'up' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? __( 'Move right' ) : __( 'Move left' );\n\t\t}\n\t\treturn __( 'Move up' );\n\t} else if ( moveDirection === 'down' ) {\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\treturn isRTL() ? __( 'Move left' ) : __( 'Move right' );\n\t\t}\n\t\treturn __( 'Move down' );\n\t}\n\treturn null;\n};\n\nconst BlockMoverButton = forwardRef(\n\t(\n\t\t{ clientIds, direction, orientation: moverOrientation, ...props },\n\t\tref\n\t) => {\n\t\tconst instanceId = useInstanceId( BlockMoverButton );\n\t\tconst normalizedClientIds = Array.isArray( clientIds )\n\t\t\t? clientIds\n\t\t\t: [ clientIds ];\n\t\tconst blocksCount = normalizedClientIds.length;\n\t\tconst { disabled } = props;\n\n\t\tconst {\n\t\t\tblockType,\n\t\t\tisDisabled,\n\t\t\trootClientId,\n\t\t\tisFirst,\n\t\t\tisLast,\n\t\t\tfirstIndex,\n\t\t\torientation = 'vertical',\n\t\t} = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockIndex,\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetBlockOrder,\n\t\t\t\t\tgetBlock,\n\t\t\t\t\tgetBlockListSettings,\n\t\t\t\t} = select( blockEditorStore );\n\t\t\t\tconst firstClientId = normalizedClientIds[ 0 ];\n\t\t\t\tconst blockRootClientId = getBlockRootClientId( firstClientId );\n\t\t\t\tconst firstBlockIndex = getBlockIndex( firstClientId );\n\t\t\t\tconst lastBlockIndex = getBlockIndex(\n\t\t\t\t\tnormalizedClientIds[ normalizedClientIds.length - 1 ]\n\t\t\t\t);\n\t\t\t\tconst blockOrder = getBlockOrder( blockRootClientId );\n\t\t\t\tconst block = getBlock( firstClientId );\n\t\t\t\tconst isFirstBlock = firstBlockIndex === 0;\n\t\t\t\tconst isLastBlock = lastBlockIndex === blockOrder.length - 1;\n\t\t\t\tconst { orientation: blockListOrientation } =\n\t\t\t\t\tgetBlockListSettings( blockRootClientId ) || {};\n\n\t\t\t\treturn {\n\t\t\t\t\tblockType: block ? getBlockType( block.name ) : null,\n\t\t\t\t\tisDisabled:\n\t\t\t\t\t\tdisabled ||\n\t\t\t\t\t\t( direction === 'up' ? isFirstBlock : isLastBlock ),\n\t\t\t\t\trootClientId: blockRootClientId,\n\t\t\t\t\tfirstIndex: firstBlockIndex,\n\t\t\t\t\tisFirst: isFirstBlock,\n\t\t\t\t\tisLast: isLastBlock,\n\t\t\t\t\torientation: moverOrientation || blockListOrientation,\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientIds, direction ]\n\t\t);\n\n\t\tconst { moveBlocksDown, moveBlocksUp } =\n\t\t\tuseDispatch( blockEditorStore );\n\t\tconst moverFunction =\n\t\t\tdirection === 'up' ? moveBlocksUp : moveBlocksDown;\n\n\t\tconst onClick = ( event ) => {\n\t\t\tmoverFunction( clientIds, rootClientId );\n\t\t\tif ( props.onClick ) {\n\t\t\t\tprops.onClick( event );\n\t\t\t}\n\t\t};\n\n\t\tconst descriptionId = `block-editor-block-mover-button__description-${ instanceId }`;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ getBlockMoverDescription(\n\t\t\t\t\t\tblocksCount,\n\t\t\t\t\t\tblockType && blockType.title,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tisFirst,\n\t\t\t\t\t\tisLast,\n\t\t\t\t\t\tdirection === 'up' ? -1 : 1,\n\t\t\t\t\t\torientation\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n);\n\nexport const BlockMoverUpButton = forwardRef( ( props, ref ) => {\n\treturn ;\n} );\n\nexport const BlockMoverDownButton = forwardRef( ( props, ref ) => {\n\treturn ;\n} );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\n\nimport { dragHandle } from '@wordpress/icons';\nimport { ToolbarGroup, ToolbarItem, Button } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockDraggable from '../block-draggable';\nimport { BlockMoverUpButton, BlockMoverDownButton } from './button';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockMover( {\n\tclientIds,\n\thideDragHandle,\n\tisBlockMoverUpButtonDisabled,\n\tisBlockMoverDownButtonDisabled,\n} ) {\n\tconst {\n\t\tcanMove,\n\t\trootClientId,\n\t\tisFirst,\n\t\tisLast,\n\t\torientation,\n\t\tisManualGrid,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst normalizedClientIds = Array.isArray( clientIds )\n\t\t\t\t? clientIds\n\t\t\t\t: [ clientIds ];\n\t\t\tconst firstClientId = normalizedClientIds[ 0 ];\n\t\t\tconst _rootClientId = getBlockRootClientId( firstClientId );\n\t\t\tconst firstIndex = getBlockIndex( firstClientId );\n\t\t\tconst lastIndex = getBlockIndex(\n\t\t\t\tnormalizedClientIds[ normalizedClientIds.length - 1 ]\n\t\t\t);\n\t\t\tconst blockOrder = getBlockOrder( _rootClientId );\n\t\t\tconst { layout = {} } = getBlockAttributes( _rootClientId ) ?? {};\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlocks( clientIds ),\n\t\t\t\trootClientId: _rootClientId,\n\t\t\t\tisFirst: firstIndex === 0,\n\t\t\t\tisLast: lastIndex === blockOrder.length - 1,\n\t\t\t\torientation: getBlockListSettings( _rootClientId )?.orientation,\n\t\t\t\tisManualGrid:\n\t\t\t\t\tlayout.type === 'grid' &&\n\t\t\t\t\tlayout.isManualPlacement &&\n\t\t\t\t\twindow.__experimentalEnableGridInteractivity,\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tif (\n\t\t! canMove ||\n\t\t( isFirst && isLast && ! rootClientId ) ||\n\t\t( hideDragHandle && isManualGrid )\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ ! hideDragHandle && (\n\t\t\t\t\n\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ ! isManualGrid && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-mover/README.md\n */\nexport default BlockMover;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState, useRef, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst { clearTimeout, setTimeout } = window;\nconst DEBOUNCE_TIMEOUT = 200;\n\n/**\n * Hook that creates debounced callbacks when the node is hovered or focused.\n *\n * @param {Object} props Component props.\n * @param {Object} props.ref Element reference.\n * @param {boolean} props.isFocused Whether the component has current focus.\n * @param {number} props.highlightParent Whether to highlight the parent block. It defaults in highlighting the selected block.\n * @param {number} [props.debounceTimeout=250] Debounce timeout in milliseconds.\n */\nfunction useDebouncedShowGestures( {\n\tref,\n\tisFocused,\n\thighlightParent,\n\tdebounceTimeout = DEBOUNCE_TIMEOUT,\n} ) {\n\tconst { getSelectedBlockClientId, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\tconst timeoutRef = useRef();\n\tconst isDistractionFree = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().isDistractionFree,\n\t\t[]\n\t);\n\tconst handleOnChange = ( nextIsFocused ) => {\n\t\tif ( nextIsFocused && isDistractionFree ) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst clientId = highlightParent\n\t\t\t? getBlockRootClientId( selectedBlockClientId )\n\t\t\t: selectedBlockClientId;\n\t\ttoggleBlockHighlight( clientId, nextIsFocused );\n\t};\n\n\tconst getIsHovered = () => {\n\t\treturn ref?.current && ref.current.matches( ':hover' );\n\t};\n\n\tconst shouldHideGestures = () => {\n\t\tconst isHovered = getIsHovered();\n\t\treturn ! isFocused && ! isHovered;\n\t};\n\n\tconst clearTimeoutRef = () => {\n\t\tconst timeout = timeoutRef.current;\n\n\t\tif ( timeout && clearTimeout ) {\n\t\t\tclearTimeout( timeout );\n\t\t}\n\t};\n\n\tconst debouncedShowGestures = ( event ) => {\n\t\tif ( event ) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\tclearTimeoutRef();\n\t\thandleOnChange( true );\n\t};\n\n\tconst debouncedHideGestures = ( event ) => {\n\t\tif ( event ) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\tclearTimeoutRef();\n\n\t\ttimeoutRef.current = setTimeout( () => {\n\t\t\tif ( shouldHideGestures() ) {\n\t\t\t\thandleOnChange( false );\n\t\t\t}\n\t\t}, debounceTimeout );\n\t};\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\t/**\n\t\t\t * We need to call the change handler with `isFocused`\n\t\t\t * set to false on unmount because we also clear the\n\t\t\t * timeout that would handle that.\n\t\t\t */\n\t\t\thandleOnChange( false );\n\t\t\tclearTimeoutRef();\n\t\t},\n\t\t[]\n\t);\n\n\treturn {\n\t\tdebouncedShowGestures,\n\t\tdebouncedHideGestures,\n\t};\n}\n\n/**\n * Hook that provides gesture events for DOM elements\n * that interact with the isFocused state.\n *\n * @param {Object} props Component props.\n * @param {Object} props.ref Element reference.\n * @param {number} [props.highlightParent=false] Whether to highlight the parent block. It defaults to highlighting the selected block.\n * @param {number} [props.debounceTimeout=250] Debounce timeout in milliseconds.\n */\nexport function useShowHoveredOrFocusedGestures( {\n\tref,\n\thighlightParent = false,\n\tdebounceTimeout = DEBOUNCE_TIMEOUT,\n} ) {\n\tconst [ isFocused, setIsFocused ] = useState( false );\n\tconst { debouncedShowGestures, debouncedHideGestures } =\n\t\tuseDebouncedShowGestures( {\n\t\t\tref,\n\t\t\tdebounceTimeout,\n\t\t\tisFocused,\n\t\t\thighlightParent,\n\t\t} );\n\n\tconst registerRef = useRef( false );\n\n\tconst isFocusedWithin = () => {\n\t\treturn (\n\t\t\tref?.current &&\n\t\t\tref.current.contains( ref.current.ownerDocument.activeElement )\n\t\t);\n\t};\n\n\tuseEffect( () => {\n\t\tconst node = ref.current;\n\n\t\tconst handleOnFocus = () => {\n\t\t\tif ( isFocusedWithin() ) {\n\t\t\t\tsetIsFocused( true );\n\t\t\t\tdebouncedShowGestures();\n\t\t\t}\n\t\t};\n\n\t\tconst handleOnBlur = () => {\n\t\t\tif ( ! isFocusedWithin() ) {\n\t\t\t\tsetIsFocused( false );\n\t\t\t\tdebouncedHideGestures();\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Events are added via DOM events (vs. React synthetic events),\n\t\t * as the child React components swallow mouse events.\n\t\t */\n\t\tif ( node && ! registerRef.current ) {\n\t\t\tnode.addEventListener( 'focus', handleOnFocus, true );\n\t\t\tnode.addEventListener( 'blur', handleOnBlur, true );\n\t\t\tregisterRef.current = true;\n\t\t}\n\n\t\treturn () => {\n\t\t\tif ( node ) {\n\t\t\t\tnode.removeEventListener( 'focus', handleOnFocus );\n\t\t\t\tnode.removeEventListener( 'blur', handleOnBlur );\n\t\t\t}\n\t\t};\n\t}, [\n\t\tref,\n\t\tregisterRef,\n\t\tsetIsFocused,\n\t\tdebouncedShowGestures,\n\t\tdebouncedHideGestures,\n\t] );\n\n\treturn {\n\t\tonMouseMove: debouncedShowGestures,\n\t\tonMouseLeave: debouncedHideGestures,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport BlockIcon from '../block-icon';\nimport { useShowHoveredOrFocusedGestures } from '../block-toolbar/utils';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Block parent selector component, displaying the hierarchy of the\n * current block selection as a single icon to \"go up\" a level.\n *\n * @return {Component} Parent block selector.\n */\nexport default function BlockParentSelector() {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst { firstParentClientId, isVisible } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockName,\n\t\t\tgetBlockParents,\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetBlockEditingMode,\n\t\t} = select( blockEditorStore );\n\t\tconst { hasBlockSupport } = select( blocksStore );\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst parents = getBlockParents( selectedBlockClientId );\n\t\tconst _firstParentClientId = parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( _firstParentClientId );\n\t\tconst _parentBlockType = getBlockType( parentBlockName );\n\t\treturn {\n\t\t\tfirstParentClientId: _firstParentClientId,\n\t\t\tisVisible:\n\t\t\t\t_firstParentClientId &&\n\t\t\t\tgetBlockEditingMode( _firstParentClientId ) === 'default' &&\n\t\t\t\thasBlockSupport(\n\t\t\t\t\t_parentBlockType,\n\t\t\t\t\t'__experimentalParentSelector',\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t};\n\t}, [] );\n\tconst blockInformation = useBlockDisplayInformation( firstParentClientId );\n\n\t// Allows highlighting the parent block outline when focusing or hovering\n\t// the parent block selector within the child.\n\tconst nodeRef = useRef();\n\tconst showHoveredOrFocusedGestures = useShowHoveredOrFocusedGestures( {\n\t\tref: nodeRef,\n\t\thighlightParent: true,\n\t} );\n\n\tif ( ! isVisible ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t selectBlock( firstParentClientId ) }\n\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t/* translators: %s: Name of the block's parent. */\n\t\t\t\t\t__( 'Select parent block: %s' ),\n\t\t\t\t\tblockInformation?.title\n\t\t\t\t) }\n\t\t\t\tshowTooltip\n\t\t\t\ticon={ }\n\t\t\t/>\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst copy = (\n\t\n\t\t\n\t\n);\n\nexport default copy;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Popover } from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockPreview from '../block-preview';\n\nexport default function PreviewBlockPopover( { blocks } ) {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\n\tif ( isMobile ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{ __( 'Preview' ) }\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tcloneBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\n\nconst EMPTY_OBJECT = {};\n\nexport function useBlockVariationTransforms( { clientIds, blocks } ) {\n\tconst { activeBlockVariation, blockVariationTransformations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, canRemoveBlocks } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getActiveBlockVariation, getBlockVariations } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst canRemove = canRemoveBlocks( clientIds );\n\t\t\t// Only handle single selected blocks for now.\n\t\t\tif ( blocks.length !== 1 || ! canRemove ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst [ firstBlock ] = blocks;\n\t\t\treturn {\n\t\t\t\tblockVariationTransformations: getBlockVariations(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\tgetBlockAttributes( firstBlock.clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, blocks ]\n\t);\n\tconst transformations = useMemo( () => {\n\t\treturn blockVariationTransformations?.filter(\n\t\t\t( { name } ) => name !== activeBlockVariation?.name\n\t\t);\n\t}, [ blockVariationTransformations, activeBlockVariation ] );\n\treturn transformations;\n}\n\nconst BlockVariationTransformations = ( {\n\ttransformations,\n\tonSelect,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\treturn (\n\t\t<>\n\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t name === hoveredTransformItemName\n\t\t\t\t\t\t).attributes\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ transformations?.map( ( item ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n};\n\nfunction BlockVariationTranformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title } = item;\n\treturn (\n\t\t {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t\n\t\t\t{ title }\n\t\t\n\t);\n}\n\nexport default BlockVariationTransformations;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup, MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\nimport BlockVariationTransformations from './block-variation-transformations';\n\n/**\n * Helper hook to group transformations to display them in a specific order in the UI.\n * For now we group only priority content driven transformations(ex. paragraph -> heading).\n *\n * Later on we could also group 'layout' transformations(ex. paragraph -> group) and\n * display them in different sections.\n *\n * @param {Object[]} possibleBlockTransformations The available block transformations.\n * @return {Record} The grouped block transformations.\n */\nfunction useGroupedTransforms( possibleBlockTransformations ) {\n\tconst priorityContentTranformationBlocks = {\n\t\t'core/paragraph': 1,\n\t\t'core/heading': 2,\n\t\t'core/list': 3,\n\t\t'core/quote': 4,\n\t};\n\tconst transformations = useMemo( () => {\n\t\tconst priorityTextTranformsNames = Object.keys(\n\t\t\tpriorityContentTranformationBlocks\n\t\t);\n\t\tconst groupedPossibleTransforms = possibleBlockTransformations.reduce(\n\t\t\t( accumulator, item ) => {\n\t\t\t\tconst { name } = item;\n\t\t\t\tif ( priorityTextTranformsNames.includes( name ) ) {\n\t\t\t\t\taccumulator.priorityTextTransformations.push( item );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.restTransformations.push( item );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ priorityTextTransformations: [], restTransformations: [] }\n\t\t);\n\t\t/**\n\t\t * If there is only one priority text transformation and it's a Quote,\n\t\t * is should move to the rest transformations. This is because Quote can\n\t\t * be a container for any block type, so in multi-block selection it will\n\t\t * always be suggested, even for non-text blocks.\n\t\t */\n\t\tif (\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations.length ===\n\t\t\t\t1 &&\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations[ 0 ].name ===\n\t\t\t\t'core/quote'\n\t\t) {\n\t\t\tconst singleQuote =\n\t\t\t\tgroupedPossibleTransforms.priorityTextTransformations.pop();\n\t\t\tgroupedPossibleTransforms.restTransformations.push( singleQuote );\n\t\t}\n\t\treturn groupedPossibleTransforms;\n\t}, [ possibleBlockTransformations ] );\n\n\t// Order the priority text transformations.\n\ttransformations.priorityTextTransformations.sort(\n\t\t( { name: currentName }, { name: nextName } ) => {\n\t\t\treturn priorityContentTranformationBlocks[ currentName ] <\n\t\t\t\tpriorityContentTranformationBlocks[ nextName ]\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t}\n\t);\n\treturn transformations;\n}\n\nconst BlockTransformationsMenu = ( {\n\tclassName,\n\tpossibleBlockTransformations,\n\tpossibleBlockVariationTransformations,\n\tonSelect,\n\tonSelectVariation,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\n\tconst { priorityTextTransformations, restTransformations } =\n\t\tuseGroupedTransforms( possibleBlockTransformations );\n\t// We have to check if both content transformations(priority and rest) are set\n\t// in order to create a separate MenuGroup for them.\n\tconst hasBothContentTransformations =\n\t\tpriorityTextTransformations.length && restTransformations.length;\n\tconst restTransformItems = !! restTransformations.length && (\n\t\t\n\t);\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ !! possibleBlockVariationTransformations?.length && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ priorityTextTransformations.map( ( item ) => (\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\t{ ! hasBothContentTransformations && restTransformItems }\n\t\t\t\n\t\t\t{ !! hasBothContentTransformations && (\n\t\t\t\t\n\t\t\t\t\t{ restTransformItems }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n};\n\nfunction RestTransformationItems( {\n\trestTransformations,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\treturn restTransformations.map( ( item ) => (\n\t\t\n\t) );\n}\n\nfunction BlockTranformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title, isDisabled } = item;\n\treturn (\n\t\t {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t\n\t\t\t{ title }\n\t\t\n\t);\n}\n\nexport default BlockTransformationsMenu;\n","/**\n * WordPress dependencies\n */\nimport TokenList from '@wordpress/token-list';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Returns the active style from the given className.\n *\n * @param {Array} styles Block styles.\n * @param {string} className Class name\n *\n * @return {Object?} The active style.\n */\nexport function getActiveStyle( styles, className ) {\n\tfor ( const style of new TokenList( className ).values() ) {\n\t\tif ( style.indexOf( 'is-style-' ) === -1 ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst potentialStyleName = style.substring( 9 );\n\t\tconst activeStyle = styles?.find(\n\t\t\t( { name } ) => name === potentialStyleName\n\t\t);\n\t\tif ( activeStyle ) {\n\t\t\treturn activeStyle;\n\t\t}\n\t}\n\n\treturn getDefaultStyle( styles );\n}\n\n/**\n * Replaces the active style in the block's className.\n *\n * @param {string} className Class name.\n * @param {Object?} activeStyle The replaced style.\n * @param {Object} newStyle The replacing style.\n *\n * @return {string} The updated className.\n */\nexport function replaceActiveStyle( className, activeStyle, newStyle ) {\n\tconst list = new TokenList( className );\n\n\tif ( activeStyle ) {\n\t\tlist.remove( 'is-style-' + activeStyle.name );\n\t}\n\n\tlist.add( 'is-style-' + newStyle.name );\n\n\treturn list.value;\n}\n\n/**\n * Returns a collection of styles that can be represented on the frontend.\n * The function checks a style collection for a default style. If none is found, it adds one to\n * act as a fallback for when there is no active style applied to a block. The default item also serves\n * as a switch on the frontend to deactivate non-default styles.\n *\n * @param {Array} styles Block styles.\n *\n * @return {Array} The style collection.\n */\nexport function getRenderedStyles( styles ) {\n\tif ( ! styles || styles.length === 0 ) {\n\t\treturn [];\n\t}\n\n\treturn getDefaultStyle( styles )\n\t\t? styles\n\t\t: [\n\t\t\t\t{\n\t\t\t\t\tname: 'default',\n\t\t\t\t\tlabel: _x( 'Default', 'block style' ),\n\t\t\t\t\tisDefault: true,\n\t\t\t\t},\n\t\t\t\t...styles,\n\t\t ];\n}\n\n/**\n * Returns a style object from a collection of styles where that style object is the default block style.\n *\n * @param {Array} styles Block styles.\n *\n * @return {Object?} The default style object, if found.\n */\nexport function getDefaultStyle( styles ) {\n\treturn styles?.find( ( style ) => style.isDefault );\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tcloneBlock,\n\tgetBlockType,\n\tgetBlockFromExample,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { getActiveStyle, getRenderedStyles, replaceActiveStyle } from './utils';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n *\n * @param {WPBlock} block Block object.\n * @param {WPBlockType} type Block type settings.\n * @return {WPBlock} A generic block ready for styles preview.\n */\nfunction useGenericPreviewBlock( block, type ) {\n\treturn useMemo( () => {\n\t\tconst example = type?.example;\n\t\tconst blockName = type?.name;\n\n\t\tif ( example && blockName ) {\n\t\t\treturn getBlockFromExample( blockName, {\n\t\t\t\tattributes: example.attributes,\n\t\t\t\tinnerBlocks: example.innerBlocks,\n\t\t\t} );\n\t\t}\n\n\t\tif ( block ) {\n\t\t\treturn cloneBlock( block );\n\t\t}\n\t}, [ type?.example ? block?.name : block, type ] );\n}\n\n/**\n * @typedef useStylesForBlocksArguments\n * @property {string} clientId Block client ID.\n * @property {() => void} onSwitch Block style switch callback function.\n */\n\n/**\n *\n * @param {useStylesForBlocksArguments} useStylesForBlocks arguments.\n * @return {Object} Results of the select methods.\n */\nexport default function useStylesForBlocks( { clientId, onSwitch } ) {\n\tconst selector = ( select ) => {\n\t\tconst { getBlock } = select( blockEditorStore );\n\t\tconst block = getBlock( clientId );\n\n\t\tif ( ! block ) {\n\t\t\treturn {};\n\t\t}\n\t\tconst blockType = getBlockType( block.name );\n\t\tconst { getBlockStyles } = select( blocksStore );\n\n\t\treturn {\n\t\t\tblock,\n\t\t\tblockType,\n\t\t\tstyles: getBlockStyles( block.name ),\n\t\t\tclassName: block.attributes.className || '',\n\t\t};\n\t};\n\tconst { styles, block, blockType, className } = useSelect( selector, [\n\t\tclientId,\n\t] );\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst stylesToRender = getRenderedStyles( styles );\n\tconst activeStyle = getActiveStyle( stylesToRender, className );\n\tconst genericPreviewBlock = useGenericPreviewBlock( block, blockType );\n\n\tconst onSelect = ( style ) => {\n\t\tconst styleClassName = replaceActiveStyle(\n\t\t\tclassName,\n\t\t\tactiveStyle,\n\t\t\tstyle\n\t\t);\n\t\tupdateBlockAttributes( clientId, {\n\t\t\tclassName: styleClassName,\n\t\t} );\n\t\tonSwitch();\n\t};\n\n\treturn {\n\t\tonSelect,\n\t\tstylesToRender,\n\t\tactiveStyle,\n\t\tgenericPreviewBlock,\n\t\tclassName,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem, __experimentalText as Text } from '@wordpress/components';\nimport { check } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useStylesForBlocks from './use-styles-for-block';\n\nconst noop = () => {};\n\nexport default function BlockStylesMenuItems( { clientId, onSwitch = noop } ) {\n\tconst { onSelect, stylesToRender, activeStyle } = useStylesForBlocks( {\n\t\tclientId,\n\t\tonSwitch,\n\t} );\n\n\tif ( ! stylesToRender || stylesToRender.length === 0 ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<>\n\t\t\t{ stylesToRender.map( ( style ) => {\n\t\t\t\tconst menuItemText = style.label || style.name;\n\t\t\t\treturn (\n\t\t\t\t\t onSelect( style ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ menuItemText }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockStylesMenuItems from '../block-styles/menu-items';\n\nexport default function BlockStylesMenu( { hoveredBlock, onSwitch } ) {\n\tconst { clientId } = hoveredBlock;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalGetBlockAttributesNamesByRole as getBlockAttributesNamesByRole } from '@wordpress/blocks';\n\n/**\n * Try to find a matching block by a block's name in a provided\n * block. We recurse through InnerBlocks and return the reference\n * of the matched block (it could be an InnerBlock).\n * If no match is found return nothing.\n *\n * @param {WPBlock} block The block to try to find a match.\n * @param {string} selectedBlockName The block's name to use for matching condition.\n * @param {Set} consumedBlocks A set holding the previously matched/consumed blocks.\n *\n * @return {WPBlock | undefined} The matched block if found or nothing(`undefined`).\n */\nexport const getMatchingBlockByName = (\n\tblock,\n\tselectedBlockName,\n\tconsumedBlocks = new Set()\n) => {\n\tconst { clientId, name, innerBlocks = [] } = block;\n\t// Check if block has been consumed already.\n\tif ( consumedBlocks.has( clientId ) ) {\n\t\treturn;\n\t}\n\tif ( name === selectedBlockName ) {\n\t\treturn block;\n\t}\n\t// Try to find a matching block from InnerBlocks recursively.\n\tfor ( const innerBlock of innerBlocks ) {\n\t\tconst match = getMatchingBlockByName(\n\t\t\tinnerBlock,\n\t\t\tselectedBlockName,\n\t\t\tconsumedBlocks\n\t\t);\n\t\tif ( match ) {\n\t\t\treturn match;\n\t\t}\n\t}\n};\n\n/**\n * Find and return the block attributes to retain through\n * the transformation, based on Block Type's `role:content`\n * attributes. If no `role:content` attributes exist,\n * return selected block's attributes.\n *\n * @param {string} name Block type's namespaced name.\n * @param {Object} attributes Selected block's attributes.\n * @return {Object} The block's attributes to retain.\n */\nexport const getRetainedBlockAttributes = ( name, attributes ) => {\n\tconst contentAttributes = getBlockAttributesNamesByRole( name, 'content' );\n\tif ( ! contentAttributes?.length ) {\n\t\treturn attributes;\n\t}\n\n\treturn contentAttributes.reduce( ( _accumulator, attribute ) => {\n\t\tif ( attributes[ attribute ] ) {\n\t\t\t_accumulator[ attribute ] = attributes[ attribute ];\n\t\t}\n\t\treturn _accumulator;\n\t}, {} );\n};\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getMatchingBlockByName, getRetainedBlockAttributes } from './utils';\n\n/**\n * Mutate the matched block's attributes by getting\n * which block type's attributes to retain and prioritize\n * them in the merging of the attributes.\n *\n * @param {WPBlock} match The matched block.\n * @param {WPBlock} selectedBlock The selected block.\n * @return {void}\n */\nexport const transformMatchingBlock = ( match, selectedBlock ) => {\n\t// Get the block attributes to retain through the transformation.\n\tconst retainedBlockAttributes = getRetainedBlockAttributes(\n\t\tselectedBlock.name,\n\t\tselectedBlock.attributes\n\t);\n\tmatch.attributes = {\n\t\t...match.attributes,\n\t\t...retainedBlockAttributes,\n\t};\n};\n\n/**\n * By providing the selected blocks and pattern's blocks\n * find the matching blocks, transform them and return them.\n * If not all selected blocks are matched, return nothing.\n *\n * @param {WPBlock[]} selectedBlocks The selected blocks.\n * @param {WPBlock[]} patternBlocks The pattern's blocks.\n * @return {WPBlock[]|void} The transformed pattern's blocks or undefined if not all selected blocks have been matched.\n */\nexport const getPatternTransformedBlocks = (\n\tselectedBlocks,\n\tpatternBlocks\n) => {\n\t// Clone Pattern's blocks to produce new clientIds and be able to mutate the matches.\n\tconst _patternBlocks = patternBlocks.map( ( block ) =>\n\t\tcloneBlock( block )\n\t);\n\t/**\n\t * Keep track of the consumed pattern blocks.\n\t * This is needed because we loop the selected blocks\n\t * and for example we may have selected two paragraphs and\n\t * the pattern's blocks could have more `paragraphs`.\n\t */\n\tconst consumedBlocks = new Set();\n\tfor ( const selectedBlock of selectedBlocks ) {\n\t\tlet isMatch = false;\n\t\tfor ( const patternBlock of _patternBlocks ) {\n\t\t\tconst match = getMatchingBlockByName(\n\t\t\t\tpatternBlock,\n\t\t\t\tselectedBlock.name,\n\t\t\t\tconsumedBlocks\n\t\t\t);\n\t\t\tif ( ! match ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tisMatch = true;\n\t\t\tconsumedBlocks.add( match.clientId );\n\t\t\t// We update (mutate) the matching pattern block.\n\t\t\ttransformMatchingBlock( match, selectedBlock );\n\t\t\t// No need to loop through other pattern's blocks.\n\t\t\tbreak;\n\t\t}\n\t\t// Bail eary if a selected block has not been matched.\n\t\tif ( ! isMatch ) {\n\t\t\treturn;\n\t\t}\n\t}\n\treturn _patternBlocks;\n};\n\n/**\n * @typedef {WPBlockPattern & {transformedBlocks: WPBlock[]}} TransformedBlockPattern\n */\n\n/**\n * Custom hook that accepts patterns from state and the selected\n * blocks and tries to match these with the pattern's blocks.\n * If all selected blocks are matched with a Pattern's block,\n * we transform them by retaining block's attributes with `role:content`.\n * The transformed pattern's blocks are set to a new pattern\n * property `transformedBlocks`.\n *\n * @param {WPBlockPattern[]} patterns Patterns from state.\n * @param {WPBlock[]} selectedBlocks The currently selected blocks.\n * @return {TransformedBlockPattern[]} Returns the eligible matched patterns with all the selected blocks.\n */\nconst useTransformedPatterns = ( patterns, selectedBlocks ) => {\n\treturn useMemo(\n\t\t() =>\n\t\t\tpatterns.reduce( ( accumulator, _pattern ) => {\n\t\t\t\tconst transformedBlocks = getPatternTransformedBlocks(\n\t\t\t\t\tselectedBlocks,\n\t\t\t\t\t_pattern.blocks\n\t\t\t\t);\n\t\t\t\tif ( transformedBlocks ) {\n\t\t\t\t\taccumulator.push( {\n\t\t\t\t\t\t..._pattern,\n\t\t\t\t\t\ttransformedBlocks,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] ),\n\t\t[ patterns, selectedBlocks ]\n\t);\n};\n\nexport default useTransformedPatterns;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { useInstanceId, useViewportMatch } from '@wordpress/compose';\nimport { chevronRight } from '@wordpress/icons';\n\nimport {\n\tComposite,\n\tMenuGroup,\n\tMenuItem,\n\tPopover,\n\tVisuallyHidden,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockPreview from '../block-preview';\nimport useTransformedPatterns from './use-transformed-patterns';\n\nfunction PatternTransformationsMenu( {\n\tblocks,\n\tpatterns: statePatterns,\n\tonSelect,\n} ) {\n\tconst [ showTransforms, setShowTransforms ] = useState( false );\n\tconst patterns = useTransformedPatterns( statePatterns, blocks );\n\n\tif ( ! patterns.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ showTransforms && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetShowTransforms( ! showTransforms );\n\t\t\t\t} }\n\t\t\t\ticon={ chevronRight }\n\t\t\t>\n\t\t\t\t{ __( 'Patterns' ) }\n\t\t\t\n\t\t\n\t);\n}\n\nfunction PreviewPatternsPopover( { patterns, onSelect } ) {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction BlockPatternsList( { patterns, onSelect } ) {\n\treturn (\n\t\t\n\t\t\t{ patterns.map( ( pattern ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction BlockPattern( { pattern, onSelect } ) {\n\t// TODO check pattern/preview width...\n\tconst baseClassName =\n\t\t'block-editor-block-switcher__preview-patterns-container';\n\tconst descriptionId = useInstanceId(\n\t\tBlockPattern,\n\t\t`${ baseClassName }-list__item-description`\n\t);\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t}\n\t\t\t\tonClick={ () => onSelect( pattern.transformedBlocks ) }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{ pattern.title }\n\t\t\t\t
    \n\t\t\t\n\t\t\t{ !! pattern.description && (\n\t\t\t\t\n\t\t\t\t\t{ pattern.description }\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nexport default PatternTransformationsMenu;\n","/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf, _x } from '@wordpress/i18n';\nimport {\n\tDropdownMenu,\n\tToolbarButton,\n\tToolbarGroup,\n\tToolbarItem,\n\t__experimentalText as Text,\n\tMenuGroup,\n} from '@wordpress/components';\nimport {\n\tswitchToBlockType,\n\tstore as blocksStore,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { copy } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport BlockTransformationsMenu from './block-transformations-menu';\nimport { useBlockVariationTransforms } from './block-variation-transformations';\nimport BlockStylesMenu from './block-styles-menu';\nimport PatternTransformationsMenu from './pattern-transformations-menu';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\n\nfunction BlockSwitcherDropdownMenuContents( {\n\tonClose,\n\tclientIds,\n\thasBlockStyles,\n\tcanRemove,\n\tisUsingBindings,\n} ) {\n\tconst { replaceBlocks, multiSelect, updateBlockAttributes } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { possibleBlockTransformations, patterns, blocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockTransformItems,\n\t\t\t\t__experimentalGetPatternTransformItems,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId(\n\t\t\t\tArray.isArray( clientIds ) ? clientIds[ 0 ] : clientIds\n\t\t\t);\n\t\t\tconst _blocks = getBlocksByClientId( clientIds );\n\t\t\treturn {\n\t\t\t\tblocks: _blocks,\n\t\t\t\tpossibleBlockTransformations: getBlockTransformItems(\n\t\t\t\t\t_blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tpatterns: __experimentalGetPatternTransformItems(\n\t\t\t\t\t_blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\tconst blockVariationTransformations = useBlockVariationTransforms( {\n\t\tclientIds,\n\t\tblocks,\n\t} );\n\tfunction selectForMultipleBlocks( insertedBlocks ) {\n\t\tif ( insertedBlocks.length > 1 ) {\n\t\t\tmultiSelect(\n\t\t\t\tinsertedBlocks[ 0 ].clientId,\n\t\t\t\tinsertedBlocks[ insertedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t}\n\t// Simple block tranformation based on the `Block Transforms` API.\n\tfunction onBlockTransform( name ) {\n\t\tconst newBlocks = switchToBlockType( blocks, name );\n\t\treplaceBlocks( clientIds, newBlocks );\n\t\tselectForMultipleBlocks( newBlocks );\n\t}\n\tfunction onBlockVariationTransform( name ) {\n\t\tupdateBlockAttributes( blocks[ 0 ].clientId, {\n\t\t\t...blockVariationTransformations.find(\n\t\t\t\t( { name: variationName } ) => variationName === name\n\t\t\t).attributes,\n\t\t} );\n\t}\n\t// Pattern transformation through the `Patterns` API.\n\tfunction onPatternTransform( transformedBlocks ) {\n\t\treplaceBlocks( clientIds, transformedBlocks );\n\t\tselectForMultipleBlocks( transformedBlocks );\n\t}\n\t/**\n\t * The `isTemplate` check is a stopgap solution here.\n\t * Ideally, the Transforms API should handle this\n\t * by allowing to exclude blocks from wildcard transformations.\n\t */\n\tconst isSingleBlock = blocks.length === 1;\n\tconst isTemplate = isSingleBlock && isTemplatePart( blocks[ 0 ] );\n\tconst hasPossibleBlockTransformations =\n\t\t!! possibleBlockTransformations.length && canRemove && ! isTemplate;\n\tconst hasPossibleBlockVariationTransformations =\n\t\t!! blockVariationTransformations?.length;\n\tconst hasPatternTransformation = !! patterns?.length && canRemove;\n\tconst hasBlockOrBlockVariationTransforms =\n\t\thasPossibleBlockTransformations ||\n\t\thasPossibleBlockVariationTransformations;\n\tconst hasContents =\n\t\thasBlockStyles ||\n\t\thasBlockOrBlockVariationTransforms ||\n\t\thasPatternTransformation;\n\tif ( ! hasContents ) {\n\t\treturn (\n\t\t\t

    \n\t\t\t\t{ __( 'No transforms.' ) }\n\t\t\t

    \n\t\t);\n\t}\n\n\tconst connectedBlockDescription = isSingleBlock\n\t\t? _x(\n\t\t\t\t'This block is connected.',\n\t\t\t\t'block toolbar button label and description'\n\t\t )\n\t\t: _x(\n\t\t\t\t'These blocks are connected.',\n\t\t\t\t'block toolbar button label and description'\n\t\t );\n\n\treturn (\n\t\t
    \n\t\t\t{ hasPatternTransformation && (\n\t\t\t\t {\n\t\t\t\t\t\tonPatternTransform( transformedBlocks );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ hasBlockOrBlockVariationTransforms && (\n\t\t\t\t {\n\t\t\t\t\t\tonBlockTransform( name );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\tonSelectVariation={ ( name ) => {\n\t\t\t\t\t\tonBlockVariationTransform( name );\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ hasBlockStyles && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isUsingBindings && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ connectedBlockDescription }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nconst BlockIndicator = ( { icon, showTitle, blockTitle } ) => (\n\t<>\n\t\t\n\t\t{ showTitle && blockTitle && (\n\t\t\t\n\t\t\t\t{ blockTitle }\n\t\t\t\n\t\t) }\n\t\n);\n\nexport const BlockSwitcher = ( { clientIds, disabled, isUsingBindings } ) => {\n\tconst {\n\t\thasContentOnlyLocking,\n\t\tcanRemove,\n\t\thasBlockStyles,\n\t\ticon,\n\t\tinvalidBlocks,\n\t\tisReusable,\n\t\tisTemplate,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getBlockStyles, getBlockType, getActiveBlockVariation } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst _blocks = getBlocksByClientId( clientIds );\n\t\t\tif ( ! _blocks.length || _blocks.some( ( block ) => ! block ) ) {\n\t\t\t\treturn { invalidBlocks: true };\n\t\t\t}\n\t\t\tconst [ { name: firstBlockName } ] = _blocks;\n\t\t\tconst _isSingleBlockSelected = _blocks.length === 1;\n\t\t\tconst blockType = getBlockType( firstBlockName );\n\n\t\t\tlet _icon;\n\t\t\tlet _hasTemplateLock;\n\t\t\tif ( _isSingleBlockSelected ) {\n\t\t\t\tconst match = getActiveBlockVariation(\n\t\t\t\t\tfirstBlockName,\n\t\t\t\t\tgetBlockAttributes( clientIds[ 0 ] )\n\t\t\t\t);\n\t\t\t\t// Take into account active block variations.\n\t\t\t\t_icon = match?.icon || blockType.icon;\n\t\t\t\t_hasTemplateLock =\n\t\t\t\t\tgetTemplateLock( clientIds[ 0 ] ) === 'contentOnly';\n\t\t\t} else {\n\t\t\t\tconst isSelectionOfSameType =\n\t\t\t\t\tnew Set( _blocks.map( ( { name } ) => name ) ).size === 1;\n\t\t\t\t_hasTemplateLock = clientIds.some(\n\t\t\t\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t\t\t\t);\n\t\t\t\t// When selection consists of blocks of multiple types, display an\n\t\t\t\t// appropriate icon to communicate the non-uniformity.\n\t\t\t\t_icon = isSelectionOfSameType ? blockType.icon : copy;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds ),\n\t\t\t\thasBlockStyles:\n\t\t\t\t\t_isSingleBlockSelected &&\n\t\t\t\t\t!! getBlockStyles( firstBlockName )?.length,\n\t\t\t\ticon: _icon,\n\t\t\t\tisReusable:\n\t\t\t\t\t_isSingleBlockSelected && isReusableBlock( _blocks[ 0 ] ),\n\t\t\t\tisTemplate:\n\t\t\t\t\t_isSingleBlockSelected && isTemplatePart( _blocks[ 0 ] ),\n\t\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId: clientIds?.[ 0 ],\n\t\tmaximumLength: 35,\n\t} );\n\n\tif ( invalidBlocks ) {\n\t\treturn null;\n\t}\n\n\tconst isSingleBlock = clientIds.length === 1;\n\tconst blockSwitcherLabel = isSingleBlock\n\t\t? blockTitle\n\t\t: __( 'Multiple blocks selected' );\n\n\tconst hideDropdown =\n\t\tdisabled ||\n\t\t( ! hasBlockStyles && ! canRemove ) ||\n\t\thasContentOnlyLocking;\n\n\tif ( hideDropdown ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\n\t\t);\n\t}\n\n\tconst blockSwitcherDescription = isSingleBlock\n\t\t? __( 'Change block type or style' )\n\t\t: sprintf(\n\t\t\t\t/* translators: %d: number of blocks. */\n\t\t\t\t_n(\n\t\t\t\t\t'Change type of %d block',\n\t\t\t\t\t'Change type of %d blocks',\n\t\t\t\t\tclientIds.length\n\t\t\t\t),\n\t\t\t\tclientIds.length\n\t\t );\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\tdescription: blockSwitcherDescription,\n\t\t\t\t\t\t\t...toggleProps,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tmenuProps={ { orientation: 'both' } }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n};\n\nexport default BlockSwitcher;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Fill: __unstableBlockToolbarLastItem, Slot } = createSlotFill(\n\t'__unstableBlockToolbarLastItem'\n);\n\n__unstableBlockToolbarLastItem.Slot = Slot;\n\nexport default __unstableBlockToolbarLastItem;\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { Platform } from '@wordpress/element';\n\nconst ALIGN_SUPPORT_KEY = 'align';\nconst ALIGN_WIDE_SUPPORT_KEY = 'alignWide';\nconst BORDER_SUPPORT_KEY = '__experimentalBorder';\nconst COLOR_SUPPORT_KEY = 'color';\nconst CUSTOM_CLASS_NAME_SUPPORT_KEY = 'customClassName';\nconst FONT_FAMILY_SUPPORT_KEY = 'typography.__experimentalFontFamily';\nconst FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';\nconst LINE_HEIGHT_SUPPORT_KEY = 'typography.lineHeight';\n/**\n * Key within block settings' support array indicating support for font style.\n */\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\n/**\n * Key within block settings' support array indicating support for font weight.\n */\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\n/**\n * Key within block settings' supports array indicating support for text\n * align e.g. settings found in `block.json`.\n */\nconst TEXT_ALIGN_SUPPORT_KEY = 'typography.textAlign';\n/**\n * Key within block settings' supports array indicating support for text\n * columns e.g. settings found in `block.json`.\n */\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\n/**\n * Key within block settings' supports array indicating support for text\n * decorations e.g. settings found in `block.json`.\n */\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\n/**\n * Key within block settings' supports array indicating support for writing mode\n * e.g. settings found in `block.json`.\n */\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\n/**\n * Key within block settings' supports array indicating support for text\n * transforms e.g. settings found in `block.json`.\n */\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\n\n/**\n * Key within block settings' supports array indicating support for letter-spacing\n * e.g. settings found in `block.json`.\n */\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst LAYOUT_SUPPORT_KEY = 'layout';\nconst TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_ALIGN_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n];\nconst EFFECTS_SUPPORT_KEYS = [ 'shadow' ];\nconst SPACING_SUPPORT_KEY = 'spacing';\nconst styleSupportKeys = [\n\t...EFFECTS_SUPPORT_KEYS,\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n];\n\n/**\n * Returns true if the block defines support for align.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasAlignSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, ALIGN_SUPPORT_KEY );\n\n/**\n * Returns the block support value for align, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getAlignSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, ALIGN_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for align wide.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasAlignWideSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, ALIGN_WIDE_SUPPORT_KEY );\n\n/**\n * Returns the block support value for align wide, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getAlignWideSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, ALIGN_WIDE_SUPPORT_KEY );\n\n/**\n * Determine whether there is block support for border properties.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @param {string} feature Border feature to check support for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBorderSupport( nameOrType, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( nameOrType, BORDER_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn !! (\n\t\t\tsupport?.color ||\n\t\t\tsupport?.radius ||\n\t\t\tsupport?.width ||\n\t\t\tsupport?.style\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\n/**\n * Get block support for border properties.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @param {string} feature Border feature to get.\n *\n * @return {unknown} The block support.\n */\nexport const getBorderSupport = ( nameOrType, feature ) =>\n\tgetBlockSupport( nameOrType, [ BORDER_SUPPORT_KEY, feature ] );\n\n/**\n * Returns true if the block defines support for color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasColorSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\treturn (\n\t\tcolorSupport &&\n\t\t( colorSupport.link === true ||\n\t\t\tcolorSupport.gradient === true ||\n\t\t\tcolorSupport.background !== false ||\n\t\t\tcolorSupport.text !== false )\n\t);\n};\n\n/**\n * Returns true if the block defines support for link color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasLinkColorSupport = ( nameOrType ) => {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.link\n\t);\n};\n\n/**\n * Returns true if the block defines support for gradient color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasGradientSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn (\n\t\tcolorSupport !== null &&\n\t\ttypeof colorSupport === 'object' &&\n\t\t!! colorSupport.gradients\n\t);\n};\n\n/**\n * Returns true if the block defines support for background color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasBackgroundColorSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.background !== false;\n};\n\n/**\n * Returns true if the block defines support for text-align.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasTextAlignSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, TEXT_ALIGN_SUPPORT_KEY );\n\n/**\n * Returns the block support value for text-align, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getTextAlignSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, TEXT_ALIGN_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for background color.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasTextColorSupport = ( nameOrType ) => {\n\tconst colorSupport = getBlockSupport( nameOrType, COLOR_SUPPORT_KEY );\n\n\treturn colorSupport && colorSupport.text !== false;\n};\n\n/**\n * Get block support for color properties.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @param {string} feature Color feature to get.\n *\n * @return {unknown} The block support.\n */\nexport const getColorSupport = ( nameOrType, feature ) =>\n\tgetBlockSupport( nameOrType, [ COLOR_SUPPORT_KEY, feature ] );\n\n/**\n * Returns true if the block defines support for custom class name.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasCustomClassNameSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, CUSTOM_CLASS_NAME_SUPPORT_KEY, true );\n\n/**\n * Returns the block support value for custom class name, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getCustomClassNameSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, CUSTOM_CLASS_NAME_SUPPORT_KEY, true );\n\n/**\n * Returns true if the block defines support for font family.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasFontFamilySupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, FONT_FAMILY_SUPPORT_KEY );\n\n/**\n * Returns the block support value for font family, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getFontFamilySupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, FONT_FAMILY_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for font size.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasFontSizeSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, FONT_SIZE_SUPPORT_KEY );\n\n/**\n * Returns the block support value for font size, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getFontSizeSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, FONT_SIZE_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for layout.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasLayoutSupport = ( nameOrType ) =>\n\thasBlockSupport( nameOrType, LAYOUT_SUPPORT_KEY );\n\n/**\n * Returns the block support value for layout, if defined.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {unknown} The block support value.\n */\nexport const getLayoutSupport = ( nameOrType ) =>\n\tgetBlockSupport( nameOrType, LAYOUT_SUPPORT_KEY );\n\n/**\n * Returns true if the block defines support for style.\n *\n * @param {string|Object} nameOrType Block name or type object.\n * @return {boolean} Whether the block supports the feature.\n */\nexport const hasStyleSupport = ( nameOrType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( nameOrType, key ) );\n","/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { getBlockType, parse } from '@wordpress/blocks';\nimport { useDispatch, useRegistry } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport {\n\thasAlignSupport,\n\thasBorderSupport,\n\thasBackgroundColorSupport,\n\thasTextAlignSupport,\n\thasTextColorSupport,\n\thasGradientSupport,\n\thasCustomClassNameSupport,\n\thasFontFamilySupport,\n\thasFontSizeSupport,\n\thasLayoutSupport,\n\thasStyleSupport,\n} from '../../hooks/supports';\n\n/**\n * Determine if the copied text looks like serialized blocks or not.\n * Since plain text will always get parsed into a freeform block,\n * we check that if the parsed blocks is anything other than that.\n *\n * @param {string} text The copied text.\n * @return {boolean} True if the text looks like serialized blocks, false otherwise.\n */\nfunction hasSerializedBlocks( text ) {\n\ttry {\n\t\tconst blocks = parse( text, {\n\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tif ( blocks.length === 1 && blocks[ 0 ].name === 'core/freeform' ) {\n\t\t\t// It's likely that the text is just plain text and not serialized blocks.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t} catch ( err ) {\n\t\t// Parsing error, the text is not serialized blocks.\n\t\t// (Even though that it technically won't happen)\n\t\treturn false;\n\t}\n}\n\n/**\n * Style attributes are attributes being added in `block-editor/src/hooks/*`.\n * (Except for some unrelated to style like `anchor` or `settings`.)\n * They generally represent the default block supports.\n */\nconst STYLE_ATTRIBUTES = {\n\talign: hasAlignSupport,\n\tborderColor: ( nameOrType ) => hasBorderSupport( nameOrType, 'color' ),\n\tbackgroundColor: hasBackgroundColorSupport,\n\ttextAlign: hasTextAlignSupport,\n\ttextColor: hasTextColorSupport,\n\tgradient: hasGradientSupport,\n\tclassName: hasCustomClassNameSupport,\n\tfontFamily: hasFontFamilySupport,\n\tfontSize: hasFontSizeSupport,\n\tlayout: hasLayoutSupport,\n\tstyle: hasStyleSupport,\n};\n\n/**\n * Get the \"style attributes\" from a given block to a target block.\n *\n * @param {WPBlock} sourceBlock The source block.\n * @param {WPBlock} targetBlock The target block.\n * @return {Object} the filtered attributes object.\n */\nfunction getStyleAttributes( sourceBlock, targetBlock ) {\n\treturn Object.entries( STYLE_ATTRIBUTES ).reduce(\n\t\t( attributes, [ attributeKey, hasSupport ] ) => {\n\t\t\t// Only apply the attribute if both blocks support it.\n\t\t\tif (\n\t\t\t\thasSupport( sourceBlock.name ) &&\n\t\t\t\thasSupport( targetBlock.name )\n\t\t\t) {\n\t\t\t\t// Override attributes that are not present in the block to their defaults.\n\t\t\t\tattributes[ attributeKey ] =\n\t\t\t\t\tsourceBlock.attributes[ attributeKey ];\n\t\t\t}\n\t\t\treturn attributes;\n\t\t},\n\t\t{}\n\t);\n}\n\n/**\n * Update the target blocks with style attributes recursively.\n *\n * @param {WPBlock[]} targetBlocks The target blocks to be updated.\n * @param {WPBlock[]} sourceBlocks The source blocks to get th style attributes from.\n * @param {Function} updateBlockAttributes The function to update the attributes.\n */\nfunction recursivelyUpdateBlockAttributes(\n\ttargetBlocks,\n\tsourceBlocks,\n\tupdateBlockAttributes\n) {\n\tfor (\n\t\tlet index = 0;\n\t\tindex < Math.min( sourceBlocks.length, targetBlocks.length );\n\t\tindex += 1\n\t) {\n\t\tupdateBlockAttributes(\n\t\t\ttargetBlocks[ index ].clientId,\n\t\t\tgetStyleAttributes( sourceBlocks[ index ], targetBlocks[ index ] )\n\t\t);\n\n\t\trecursivelyUpdateBlockAttributes(\n\t\t\ttargetBlocks[ index ].innerBlocks,\n\t\t\tsourceBlocks[ index ].innerBlocks,\n\t\t\tupdateBlockAttributes\n\t\t);\n\t}\n}\n\n/**\n * A hook to return a pasteStyles event function for handling pasting styles to blocks.\n *\n * @return {Function} A function to update the styles to the blocks.\n */\nexport default function usePasteStyles() {\n\tconst registry = useRegistry();\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { createSuccessNotice, createWarningNotice, createErrorNotice } =\n\t\tuseDispatch( noticesStore );\n\n\treturn useCallback(\n\t\tasync ( targetBlocks ) => {\n\t\t\tlet html = '';\n\t\t\ttry {\n\t\t\t\t// `http:` sites won't have the clipboard property on navigator.\n\t\t\t\t// (with the exception of localhost.)\n\t\t\t\tif ( ! window.navigator.clipboard ) {\n\t\t\t\t\tcreateErrorNotice(\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Unable to paste styles. This feature is only available on secure (https) sites in supporting browsers.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\thtml = await window.navigator.clipboard.readText();\n\t\t\t} catch ( error ) {\n\t\t\t\t// Possibly the permission is denied.\n\t\t\t\tcreateErrorNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Unable to paste styles. Please allow browser clipboard permissions before continuing.'\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Abort if the copied text is empty or doesn't look like serialized blocks.\n\t\t\tif ( ! html || ! hasSerializedBlocks( html ) ) {\n\t\t\t\tcreateWarningNotice(\n\t\t\t\t\t__(\n\t\t\t\t\t\t\"Unable to paste styles. Block styles couldn't be found within the copied content.\"\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst copiedBlocks = parse( html );\n\n\t\t\tif ( copiedBlocks.length === 1 ) {\n\t\t\t\t// Apply styles of the block to all the target blocks.\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\trecursivelyUpdateBlockAttributes(\n\t\t\t\t\t\ttargetBlocks,\n\t\t\t\t\t\ttargetBlocks.map( () => copiedBlocks[ 0 ] ),\n\t\t\t\t\t\tupdateBlockAttributes\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\trecursivelyUpdateBlockAttributes(\n\t\t\t\t\t\ttargetBlocks,\n\t\t\t\t\t\tcopiedBlocks,\n\t\t\t\t\t\tupdateBlockAttributes\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( targetBlocks.length === 1 ) {\n\t\t\t\tconst title = getBlockType( targetBlocks[ 0 ].name )?.title;\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t// Translators: Name of the block being pasted, e.g. \"Paragraph\".\n\t\t\t\t\t\t__( 'Pasted styles to %s.' ),\n\t\t\t\t\t\ttitle\n\t\t\t\t\t),\n\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t// Translators: The number of the blocks.\n\t\t\t\t\t\t__( 'Pasted styles to %d blocks.' ),\n\t\t\t\t\t\ttargetBlocks.length\n\t\t\t\t\t),\n\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tregistry.batch,\n\t\t\tupdateBlockAttributes,\n\t\t\tcreateSuccessNotice,\n\t\t\tcreateWarningNotice,\n\t\t\tcreateErrorNotice,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport usePasteStyles from '../use-paste-styles';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockActions( {\n\tclientIds,\n\tchildren,\n\t__experimentalUpdateSelection: updateSelection,\n} ) {\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetDirectInsertBlock,\n\t\t\t\tcanMoveBlocks,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\t\t\tgetDefaultBlockName(),\n\t\t\t\trootClientId\n\t\t\t);\n\t\t\tconst directInsertBlock = rootClientId\n\t\t\t\t? getDirectInsertBlock( rootClientId )\n\t\t\t\t: null;\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlocks( clientIds ),\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds ),\n\t\t\t\tcanInsertBlock: canInsertDefaultBlock || !! directInsertBlock,\n\t\t\t\tcanCopyStyles: blocks.every( ( block ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t( hasBlockSupport( block.name, 'color' ) ||\n\t\t\t\t\t\t\thasBlockSupport( block.name, 'typography' ) )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t\tcanDuplicate: blocks.every( ( block ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\t\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t\t\t\t);\n\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, getDefaultBlockName ]\n\t);\n\tconst { getBlocksByClientId, getBlocks } = useSelect( blockEditorStore );\n\n\tconst { canMove, canRemove, canInsertBlock, canCopyStyles, canDuplicate } =\n\t\tselected;\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tflashBlock,\n\t\tsetBlockMovingClientId,\n\t\tsetNavigationMode,\n\t\tselectBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst notifyCopy = useNotifyCopy();\n\tconst pasteStyles = usePasteStyles();\n\n\treturn children( {\n\t\tcanCopyStyles,\n\t\tcanDuplicate,\n\t\tcanInsertBlock,\n\t\tcanMove,\n\t\tcanRemove,\n\t\tonDuplicate() {\n\t\t\treturn duplicateBlocks( clientIds, updateSelection );\n\t\t},\n\t\tonRemove() {\n\t\t\treturn removeBlocks( clientIds, updateSelection );\n\t\t},\n\t\tonInsertBefore() {\n\t\t\tinsertBeforeBlock( clientIds[ 0 ] );\n\t\t},\n\t\tonInsertAfter() {\n\t\t\tinsertAfterBlock( clientIds[ clientIds.length - 1 ] );\n\t\t},\n\t\tonMoveTo() {\n\t\t\tsetNavigationMode( true );\n\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t},\n\t\tonGroup() {\n\t\t\tif ( ! clientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\tgetBlocksByClientId( clientIds ),\n\t\t\t\tgroupingBlockName\n\t\t\t);\n\n\t\t\tif ( ! newBlocks ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t},\n\t\tonUngroup() {\n\t\t\tif ( ! clientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst innerBlocks = getBlocks( clientIds[ 0 ] );\n\t\t\tif ( ! innerBlocks.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treplaceBlocks( clientIds, innerBlocks );\n\t\t},\n\t\tonCopy() {\n\t\t\tif ( clientIds.length === 1 ) {\n\t\t\t\tflashBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t\tnotifyCopy( 'copy', clientIds );\n\t\t},\n\t\tasync onPasteStyles() {\n\t\t\tawait pasteStyles( getBlocksByClientId( clientIds ) );\n\t\t},\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem } from '@wordpress/components';\nimport { rawHandler, getBlockContent } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockHTMLConvertButton( { clientId } ) {\n\tconst block = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\n\tif ( ! block || block.name !== 'core/html' ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tclientId,\n\t\t\t\t\trawHandler( { HTML: getBlockContent( block ) } )\n\t\t\t\t)\n\t\t\t}\n\t\t>\n\t\t\t{ __( 'Convert to Blocks' ) }\n\t\t\n\t);\n}\n\nexport default BlockHTMLConvertButton;\n","/**\n * WordPress dependencies\n */\nimport { createSlotFill } from '@wordpress/components';\n\nconst { Fill: __unstableBlockSettingsMenuFirstItem, Slot } = createSlotFill(\n\t'__unstableBlockSettingsMenuFirstItem'\n);\n\n__unstableBlockSettingsMenuFirstItem.Slot = Slot;\n\nexport default __unstableBlockSettingsMenuFirstItem;\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Contains the properties `ConvertToGroupButton` component needs.\n *\n * @typedef {Object} ConvertToGroupButtonProps\n * @property {string[]} clientIds An array of the selected client ids.\n * @property {boolean} isGroupable Indicates if the selected blocks can be grouped.\n * @property {boolean} isUngroupable Indicates if the selected blocks can be ungrouped.\n * @property {WPBlock[]} blocksSelection An array of the selected blocks.\n * @property {string} groupingBlockName The name of block used for handling grouping interactions.\n */\n\n/**\n * Returns the properties `ConvertToGroupButton` component needs to work properly.\n * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`\n * should be rendered, to avoid ending up with an empty MenuGroup.\n *\n * @param {?string[]} selectedClientIds An optional array of clientIds to group. The selected blocks\n * from the block editor store are used if this is not provided.\n *\n * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.\n */\nexport default function useConvertToGroupButtonProps( selectedClientIds ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tisUngroupable,\n\t\t\t\tisGroupable,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getGroupingBlockName, getBlockType } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst clientIds = selectedClientIds?.length\n\t\t\t\t? selectedClientIds\n\t\t\t\t: getSelectedBlockClientIds();\n\t\t\tconst blocksSelection = getBlocksByClientId( clientIds );\n\t\t\tconst [ firstSelectedBlock ] = blocksSelection;\n\t\t\tconst _isUngroupable =\n\t\t\t\tclientIds.length === 1 && isUngroupable( clientIds[ 0 ] );\n\t\t\treturn {\n\t\t\t\tclientIds,\n\t\t\t\tisGroupable: isGroupable( clientIds ),\n\t\t\t\tisUngroupable: _isUngroupable,\n\t\t\t\tblocksSelection,\n\t\t\t\tgroupingBlockName: getGroupingBlockName(),\n\t\t\t\tonUngroup:\n\t\t\t\t\t_isUngroupable &&\n\t\t\t\t\tgetBlockType( firstSelectedBlock.name )?.transforms\n\t\t\t\t\t\t?.ungroup,\n\t\t\t};\n\t\t},\n\t\t[ selectedClientIds ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { _x } from '@wordpress/i18n';\nimport { switchToBlockType } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { displayShortcut } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport useConvertToGroupButtonProps from './use-convert-to-group-button-props';\nimport BlockGroupToolbar from './toolbar';\n\nfunction ConvertToGroupButton( {\n\tclientIds,\n\tisGroupable,\n\tisUngroupable,\n\tonUngroup,\n\tblocksSelection,\n\tgroupingBlockName,\n\tonClose = () => {},\n} ) {\n\tconst { getSelectedBlockClientIds } = useSelect( blockEditorStore );\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst onConvertToGroup = () => {\n\t\t// Activate the `transform` on the Grouping Block which does the conversion.\n\t\tconst newBlocks = switchToBlockType(\n\t\t\tblocksSelection,\n\t\t\tgroupingBlockName\n\t\t);\n\t\tif ( newBlocks ) {\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t}\n\t};\n\n\tconst onConvertFromGroup = () => {\n\t\tlet innerBlocks = blocksSelection[ 0 ].innerBlocks;\n\t\tif ( ! innerBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( onUngroup ) {\n\t\t\tinnerBlocks = onUngroup(\n\t\t\t\tblocksSelection[ 0 ].attributes,\n\t\t\t\tblocksSelection[ 0 ].innerBlocks\n\t\t\t);\n\t\t}\n\t\treplaceBlocks( clientIds, innerBlocks );\n\t};\n\n\tif ( ! isGroupable && ! isUngroupable ) {\n\t\treturn null;\n\t}\n\n\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\treturn (\n\t\t<>\n\t\t\t{ isGroupable && (\n\t\t\t\t 1\n\t\t\t\t\t\t\t? displayShortcut.primary( 'g' )\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tonConvertToGroup();\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ _x( 'Group', 'verb' ) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isUngroupable && (\n\t\t\t\t {\n\t\t\t\t\t\tonConvertFromGroup();\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ _x(\n\t\t\t\t\t\t'Ungroup',\n\t\t\t\t\t\t'Ungrouping blocks from within a grouping block back into individual blocks within the Editor'\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport {\n\tBlockGroupToolbar,\n\tConvertToGroupButton,\n\tuseConvertToGroupButtonProps,\n};\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Return details about the block lock status.\n *\n * @param {string} clientId The block client Id.\n *\n * @return {Object} Block lock status\n */\nexport default function useBlockLock( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanEditBlock,\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetTemplateLock,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst canEdit = canEditBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\n\t\t\treturn {\n\t\t\t\tcanEdit,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tcanLock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t\tisContentLocked: getTemplateLock( clientId ) === 'contentOnly',\n\t\t\t\tisLocked: ! canEdit || ! canMove || ! canRemove,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst unlock = (\n\t\n\t\t\n\t\n);\n\nexport default unlock;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst lockOutline = (\n\t\n\t\t\n\t\n);\n\nexport default lockOutline;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst lock = (\n\t\n\t\t\n\t\n);\n\nexport default lock;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n\tToggleControl,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getBlockType } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\n// Entity based blocks which allow edit locking\nconst ALLOWS_EDIT_LOCKING = [ 'core/block', 'core/navigation' ];\n\nfunction getTemplateLockValue( lock ) {\n\t// Prevents all operations.\n\tif ( lock.remove && lock.move ) {\n\t\treturn 'all';\n\t}\n\n\t// Prevents inserting or removing blocks, but allows moving existing blocks.\n\tif ( lock.remove && ! lock.move ) {\n\t\treturn 'insert';\n\t}\n\n\treturn false;\n}\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canEdit, canMove, canRemove } = useBlockLock( clientId );\n\tconst { allowsEditLocking, templateLock, hasTemplateLock } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\t\t\tconst blockType = getBlockType( blockName );\n\n\t\t\treturn {\n\t\t\t\tallowsEditLocking: ALLOWS_EDIT_LOCKING.includes( blockName ),\n\t\t\t\ttemplateLock: getBlockAttributes( clientId )?.templateLock,\n\t\t\t\thasTemplateLock: !! blockType?.attributes?.templateLock,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst [ applyTemplateLock, setApplyTemplateLock ] = useState(\n\t\t!! templateLock\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t\t...( allowsEditLocking ? { edit: ! canEdit } : {} ),\n\t\t} );\n\t}, [ canEdit, canMove, canRemove, allowsEditLocking ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isMixed = Object.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], {\n\t\t\t\t\t\tlock,\n\t\t\t\t\t\ttemplateLock: applyTemplateLock\n\t\t\t\t\t\t\t? getTemplateLockValue( lock )\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t} );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t{ /*\n\t\t\t\t\t * Disable reason: The `list` ARIA role is redundant but\n\t\t\t\t\t * Safari+VoiceOver won't announce the list otherwise.\n\t\t\t\t\t */\n\t\t\t\t\t/* eslint-disable jsx-a11y/no-redundant-roles */ }\n\t\t\t\t\t\n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\t\t\tremove: newValue,\n\t\t\t\t\t\t\t\t\t\t...( allowsEditLocking\n\t\t\t\t\t\t\t\t\t\t\t? { edit: newValue }\n\t\t\t\t\t\t\t\t\t\t\t: {} ),\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ allowsEditLocking && (\n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\t\t\tedit,\n\t\t\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\t\tmove,\n\t\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\t\tremove,\n\t\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{ /* eslint-enable jsx-a11y/no-redundant-roles */ }\n\t\t\t\t\t{ hasTemplateLock && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tsetApplyTemplateLock( ! applyTemplateLock )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useReducer } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { lockOutline, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport BlockLockModal from './modal';\n\nexport default function BlockLockMenuItem( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tconst label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ label }\n\t\t\t\n\t\t\t{ isModalOpen && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem } from '@wordpress/components';\nimport { getBlockType, hasBlockSupport } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\nexport default function BlockModeToggle( { clientId, onToggle = noop } ) {\n\tconst { blockType, mode, isCodeEditingEnabled } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockMode, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst block = getBlock( clientId );\n\n\t\t\treturn {\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tblockType: block ? getBlockType( block.name ) : null,\n\t\t\t\tisCodeEditingEnabled: getSettings().codeEditingEnabled,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { toggleBlockMode } = useDispatch( blockEditorStore );\n\n\tif (\n\t\t! blockType ||\n\t\t! hasBlockSupport( blockType, 'html', true ) ||\n\t\t! isCodeEditingEnabled\n\t) {\n\t\treturn null;\n\t}\n\n\tconst label =\n\t\tmode === 'visual' ? __( 'Edit as HTML' ) : __( 'Edit visually' );\n\n\treturn (\n\t\t {\n\t\t\t\ttoggleBlockMode( clientId );\n\t\t\t\tonToggle();\n\t\t\t} }\n\t\t>\n\t\t\t{ label }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n// The implementation of content locking is mainly in this file, although the mechanism\n// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect\n// at block-editor/src/components/block-list/index.js.\n// Besides the components on this file and the file referenced above the implementation\n// also includes artifacts on the store (actions, reducers, and selector).\n\nexport function ModifyContentLockMenuItem( { clientId, onClose } ) {\n\tconst { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetContentLockingParent,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\treturn {\n\t\t\t\ttemplateLock: getTemplateLock( clientId ),\n\t\t\t\tisLockedByParent: !! getContentLockingParent( clientId ),\n\t\t\t\tisEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst blockEditorActions = useDispatch( blockEditorStore );\n\tconst isContentLocked =\n\t\t! isLockedByParent && templateLock === 'contentOnly';\n\tif ( ! isContentLocked && ! isEditingAsBlocks ) {\n\t\treturn null;\n\t}\n\n\tconst { modifyContentLockBlock } = unlock( blockEditorActions );\n\tconst showStartEditingAsBlocks = ! isEditingAsBlocks && isContentLocked;\n\n\treturn (\n\t\tshowStartEditingAsBlocks && (\n\t\t\t {\n\t\t\t\t\tmodifyContentLockBlock( clientId );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ _x( 'Modify', 'Unlock content locked blocks' ) }\n\t\t\t\n\t\t)\n\t);\n}\n","export default function isEmptyString( testString ) {\n\treturn testString?.trim()?.length === 0;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n\tTextControl,\n\tModal,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport isEmptyString from './is-empty-string';\n\nexport default function BlockRenameModal( {\n\tblockName,\n\toriginalBlockName,\n\tonClose,\n\tonSave,\n\t// Pattern Overrides is a WordPress-only feature but it also uses the Block Binding API.\n\t// Ideally this should not be inside the block editor package, but we keep it here for simplicity.\n\thasOverridesWarning,\n} ) {\n\tconst [ editedBlockName, setEditedBlockName ] = useState( blockName );\n\n\tconst nameHasChanged = editedBlockName !== blockName;\n\tconst nameIsOriginal = editedBlockName === originalBlockName;\n\tconst nameIsEmpty = isEmptyString( editedBlockName );\n\n\tconst isNameValid = nameHasChanged || nameIsOriginal;\n\n\tconst autoSelectInputText = ( event ) => event.target.select();\n\n\tconst handleSubmit = () => {\n\t\tconst message =\n\t\t\tnameIsOriginal || nameIsEmpty\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name reset to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name changed to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t );\n\n\t\t// Must be assertive to immediately announce change.\n\t\tspeak( message, 'assertive' );\n\t\tonSave( editedBlockName );\n\n\t\t// Immediate close avoids ability to hit save multiple times.\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif ( ! isNameValid ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thandleSubmit();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockDisplayInformation } from '..';\nimport isEmptyString from './is-empty-string';\nimport BlockRenameModal from './modal';\n\nexport default function BlockRenameControl( { clientId } ) {\n\tconst [ renamingBlock, setRenamingBlock ] = useState( false );\n\n\tconst { metadata } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\n\t\t\tconst _metadata = getBlockAttributes( clientId )?.metadata;\n\t\t\treturn {\n\t\t\t\tmetadata: _metadata,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\tconst customName = metadata?.name;\n\tconst hasPatternOverrides =\n\t\t!! customName &&\n\t\t!! metadata?.bindings &&\n\t\tObject.values( metadata.bindings ).some(\n\t\t\t( binding ) => binding.source === 'core/pattern-overrides'\n\t\t);\n\n\tfunction onChange( newName ) {\n\t\tupdateBlockAttributes( [ clientId ], {\n\t\t\tmetadata: {\n\t\t\t\t...metadata,\n\t\t\t\tname: newName,\n\t\t\t},\n\t\t} );\n\t}\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\treturn (\n\t\t<>\n\t\t\t {\n\t\t\t\t\tsetRenamingBlock( true );\n\t\t\t\t} }\n\t\t\t\taria-expanded={ renamingBlock }\n\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t>\n\t\t\t\t{ __( 'Rename' ) }\n\t\t\t\n\t\t\t{ renamingBlock && (\n\t\t\t\t setRenamingBlock( false ) }\n\t\t\t\t\tonSave={ ( newName ) => {\n\t\t\t\t\t\t// If the new value is the block's original name (e.g. `Group`)\n\t\t\t\t\t\t// or it is an empty string then assume the intent is to reset\n\t\t\t\t\t\t// the value. Therefore reset the metadata.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnewName === blockInformation?.title ||\n\t\t\t\t\t\t\tisEmptyString( newName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewName = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( newName );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tcreateSlotFill,\n\tMenuGroup,\n\tMenuItem,\n\t__experimentalStyleProvider as StyleProvider,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { pipe } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseConvertToGroupButtonProps,\n\tConvertToGroupButton,\n} from '../convert-to-group-buttons';\nimport { BlockLockMenuItem, useBlockLock } from '../block-lock';\nimport { store as blockEditorStore } from '../../store';\nimport BlockModeToggle from '../block-settings-menu/block-mode-toggle';\nimport { ModifyContentLockMenuItem } from '../content-lock';\nimport { BlockRenameControl, useBlockRename } from '../block-rename';\n\nconst { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );\n\nconst BlockSettingsMenuControlsSlot = ( { fillProps, clientIds = null } ) => {\n\tconst { selectedBlocks, selectedClientIds, isContentOnly } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst ids =\n\t\t\t\tclientIds !== null ? clientIds : getSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\tselectedBlocks: getBlockNamesByClientId( ids ),\n\t\t\t\tselectedClientIds: ids,\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( ids[ 0 ] ) === 'contentOnly',\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst { canLock } = useBlockLock( selectedClientIds[ 0 ] );\n\tconst { canRename } = useBlockRename( selectedBlocks[ 0 ] );\n\tconst showLockButton =\n\t\tselectedClientIds.length === 1 && canLock && ! isContentOnly;\n\tconst showRenameButton =\n\t\tselectedClientIds.length === 1 && canRename && ! isContentOnly;\n\n\t// Check if current selection of blocks is Groupable or Ungroupable\n\t// and pass this props down to ConvertToGroupButton.\n\tconst convertToGroupButtonProps =\n\t\tuseConvertToGroupButtonProps( selectedClientIds );\n\tconst { isGroupable, isUngroupable } = convertToGroupButtonProps;\n\tconst showConvertToGroupButton = isGroupable || isUngroupable;\n\n\treturn (\n\t\t\n\t\t\t{ ( fills ) => {\n\t\t\t\tif (\n\t\t\t\t\t! fills?.length > 0 &&\n\t\t\t\t\t! showConvertToGroupButton &&\n\t\t\t\t\t! showLockButton\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{ showConvertToGroupButton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ showLockButton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ showRenameButton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ fills }\n\t\t\t\t\t\t{ fillProps?.canMove &&\n\t\t\t\t\t\t\t! fillProps?.onlyBlock &&\n\t\t\t\t\t\t\t! isContentOnly && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ __( 'Move to' ) }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ selectedClientIds.length === 1 && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ fillProps?.count === 1 && ! isContentOnly && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} }\n\t\t\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md\n *\n * @param {Object} props Fill props.\n * @return {Element} Element.\n */\nfunction BlockSettingsMenuControls( { ...props } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nBlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;\n\nexport default BlockSettingsMenuControls;\n","/**\n * WordPress dependencies\n */\nimport { getBlockSupport } from '@wordpress/blocks';\n\nexport default function useBlockRename( name ) {\n\treturn {\n\t\tcanRename: getBlockSupport( name, 'renaming', true ),\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport { useDispatch } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { useShowHoveredOrFocusedGestures } from '../block-toolbar/utils';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockParentSelectorMenuItem( {\n\tparentClientId,\n\tparentBlockType,\n} ) {\n\tconst isSmallViewport = useViewportMatch( 'medium', '<' );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\t// Allows highlighting the parent block outline when focusing or hovering\n\t// the parent block selector within the child.\n\tconst menuItemRef = useRef();\n\tconst gesturesProps = useShowHoveredOrFocusedGestures( {\n\t\tref: menuItemRef,\n\t\thighlightParent: true,\n\t} );\n\n\tif ( ! isSmallViewport ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t }\n\t\t\tonClick={ () => selectBlock( parentClientId ) }\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %s: Name of the block's parent. */\n\t\t\t\t__( 'Select parent block (%s)' ),\n\t\t\t\tparentBlockType.title\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockType,\n\tserialize,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { moreVertical } from '@wordpress/icons';\nimport { Children, cloneElement } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { displayShortcut } from '@wordpress/keycodes';\nimport { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';\nimport { pipe, useCopyToClipboard } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockActions from '../block-actions';\nimport BlockHTMLConvertButton from './block-html-convert-button';\nimport __unstableBlockSettingsMenuFirstItem from './block-settings-menu-first-item';\nimport BlockSettingsMenuControls from '../block-settings-menu-controls';\nimport BlockParentSelectorMenuItem from './block-parent-selector-menu-item';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-editor-block-settings-menu__popover',\n\tplacement: 'bottom-start',\n};\n\nfunction CopyMenuItem( { clientIds, onCopy, label, shortcut } ) {\n\tconst { getBlocksByClientId } = useSelect( blockEditorStore );\n\tconst ref = useCopyToClipboard(\n\t\t() => serialize( getBlocksByClientId( clientIds ) ),\n\t\tonCopy\n\t);\n\tconst copyMenuItemLabel = label ? label : __( 'Copy' );\n\treturn (\n\t\t\n\t\t\t{ copyMenuItemLabel }\n\t\t\n\t);\n}\n\nexport function BlockSettingsDropdown( {\n\tblock,\n\tclientIds,\n\tchildren,\n\t__experimentalSelectBlock,\n\t...props\n} ) {\n\t// Get the client id of the current block for this menu, if one is set.\n\tconst currentClientId = block?.clientId;\n\tconst count = clientIds.length;\n\tconst firstBlockClientId = clientIds[ 0 ];\n\tconst {\n\t\tfirstParentClientId,\n\t\tonlyBlock,\n\t\tparentBlockType,\n\t\tpreviousBlockClientId,\n\t\tselectedBlockClientIds,\n\t\topenedBlockSettingsMenu,\n\t\tisContentOnly,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetOpenedBlockSettingsMenu,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\n\t\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\n\t\t\tconst _firstParentClientId =\n\t\t\t\tgetBlockRootClientId( firstBlockClientId );\n\t\t\tconst parentBlockName =\n\t\t\t\t_firstParentClientId && getBlockName( _firstParentClientId );\n\n\t\t\treturn {\n\t\t\t\tfirstParentClientId: _firstParentClientId,\n\t\t\t\tonlyBlock: 1 === getBlockCount( _firstParentClientId ),\n\t\t\t\tparentBlockType:\n\t\t\t\t\t_firstParentClientId &&\n\t\t\t\t\t( getActiveBlockVariation(\n\t\t\t\t\t\tparentBlockName,\n\t\t\t\t\t\tgetBlockAttributes( _firstParentClientId )\n\t\t\t\t\t) ||\n\t\t\t\t\t\tgetBlockType( parentBlockName ) ),\n\t\t\t\tpreviousBlockClientId:\n\t\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ),\n\t\t\t\tselectedBlockClientIds: getSelectedBlockClientIds(),\n\t\t\t\topenedBlockSettingsMenu: getOpenedBlockSettingsMenu(),\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( firstBlockClientId ) === 'contentOnly',\n\t\t\t};\n\t\t},\n\t\t[ firstBlockClientId ]\n\t);\n\tconst { getBlockOrder, getSelectedBlockClientIds } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { setOpenedBlockSettingsMenu } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tconst shortcuts = useSelect( ( select ) => {\n\t\tconst { getShortcutRepresentation } = select( keyboardShortcutsStore );\n\t\treturn {\n\t\t\tduplicate: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/duplicate'\n\t\t\t),\n\t\t\tremove: getShortcutRepresentation( 'core/block-editor/remove' ),\n\t\t\tinsertAfter: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-after'\n\t\t\t),\n\t\t\tinsertBefore: getShortcutRepresentation(\n\t\t\t\t'core/block-editor/insert-before'\n\t\t\t),\n\t\t};\n\t}, [] );\n\tconst hasSelectedBlocks = selectedBlockClientIds.length > 0;\n\n\tasync function updateSelectionAfterDuplicate( clientIdsPromise ) {\n\t\tif ( ! __experimentalSelectBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ids = await clientIdsPromise;\n\t\tif ( ids && ids[ 0 ] ) {\n\t\t\t__experimentalSelectBlock( ids[ 0 ], false );\n\t\t}\n\t}\n\n\tfunction updateSelectionAfterRemove() {\n\t\tif ( ! __experimentalSelectBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet blockToFocus = previousBlockClientId || firstParentClientId;\n\n\t\t// Focus the first block if there's no previous block nor parent block.\n\t\tif ( ! blockToFocus ) {\n\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t}\n\n\t\t// Only update the selection if the original selection is removed.\n\t\tconst shouldUpdateSelection =\n\t\t\thasSelectedBlocks && getSelectedBlockClientIds().length === 0;\n\n\t\t__experimentalSelectBlock( blockToFocus, shouldUpdateSelection );\n\t}\n\n\t// This can occur when the selected block (the parent)\n\t// displays child blocks within a List View.\n\tconst parentBlockIsSelected =\n\t\tselectedBlockClientIds?.includes( firstParentClientId );\n\n\t// When a currentClientId is in use, treat the menu as a controlled component.\n\t// This ensures that only one block settings menu is open at a time.\n\t// This is a temporary solution to work around an issue with `onFocusOutside`\n\t// where it does not allow a dropdown to be closed if focus was never within\n\t// the dropdown to begin with. Examples include a user either CMD+Clicking or\n\t// right clicking into an inactive window.\n\t// See: https://github.com/WordPress/gutenberg/pull/54083\n\tconst open = ! currentClientId\n\t\t? undefined\n\t\t: openedBlockSettingsMenu === currentClientId || false;\n\n\tfunction onToggle( localOpen ) {\n\t\tif ( localOpen && openedBlockSettingsMenu !== currentClientId ) {\n\t\t\tsetOpenedBlockSettingsMenu( currentClientId );\n\t\t} else if (\n\t\t\t! localOpen &&\n\t\t\topenedBlockSettingsMenu &&\n\t\t\topenedBlockSettingsMenu === currentClientId\n\t\t) {\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ ( {\n\t\t\t\tcanCopyStyles,\n\t\t\t\tcanDuplicate,\n\t\t\t\tcanInsertBlock,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tonDuplicate,\n\t\t\t\tonInsertAfter,\n\t\t\t\tonInsertBefore,\n\t\t\t\tonRemove,\n\t\t\t\tonCopy,\n\t\t\t\tonPasteStyles,\n\t\t\t\tonMoveTo,\n\t\t\t} ) => (\n\t\t\t\t\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<__unstableBlockSettingsMenuFirstItem.Slot\n\t\t\t\t\t\t\t\t\tfillProps={ { onClose } }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ ! parentBlockIsSelected &&\n\t\t\t\t\t\t\t\t\t!! firstParentClientId && (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ count === 1 && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ ! isContentOnly && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ canDuplicate && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Duplicate' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ canInsertBlock && ! isContentOnly && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add before' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Add after' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ canCopyStyles && ! isContentOnly && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Paste styles' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ typeof children === 'function'\n\t\t\t\t\t\t\t\t? children( { onClose } )\n\t\t\t\t\t\t\t\t: Children.map( ( child ) =>\n\t\t\t\t\t\t\t\t\t\tcloneElement( child, { onClose } )\n\t\t\t\t\t\t\t\t ) }\n\t\t\t\t\t\t\t{ canRemove && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockSettingsDropdown;\n","/**\n * WordPress dependencies\n */\nimport { ToolbarGroup, ToolbarItem } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockSettingsDropdown from './block-settings-dropdown';\n\nexport function BlockSettingsMenu( { clientIds, ...props } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\nexport default BlockSettingsMenu;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useReducer, useRef, useEffect } from '@wordpress/element';\nimport { lock, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport useBlockLock from './use-block-lock';\n\nexport default function BlockLockToolbar( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tconst hasLockButtonShownRef = useRef( false );\n\n\t// If the block lock button has been shown, we don't want to remove it\n\t// from the toolbar until the toolbar is rendered again without it.\n\t// Removing it beforehand can cause focus loss issues, such as when\n\t// unlocking the block from the modal. It needs to return focus from\n\t// whence it came, and to do that, we need to leave the button in the toolbar.\n\tuseEffect( () => {\n\t\tif ( isLocked ) {\n\t\t\thasLockButtonShownRef.current = true;\n\t\t}\n\t}, [ isLocked ] );\n\n\tif ( ! isLocked && ! hasLockButtonShownRef.current ) {\n\t\treturn null;\n\t}\n\n\tlet label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\tif ( ! canLock && isLocked ) {\n\t\tlabel = __( 'Locked' );\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{ isModalOpen && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst group = (\n\t\n\t\t\n\t\n);\n\nexport default group;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst row = (\n\t\n\t\t\n\t\n);\n\nexport default row;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst stack = (\n\t\n\t\t\n\t\n);\n\nexport default stack;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst grid = (\n\t\n\t\t\n\t\n);\n\nexport default grid;\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { switchToBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { group, row, stack, grid } from '@wordpress/icons';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useConvertToGroupButtonProps } from '../convert-to-group-buttons';\nimport { store as blockEditorStore } from '../../store';\n\nconst layouts = {\n\tgroup: { type: 'constrained' },\n\trow: { type: 'flex', flexWrap: 'nowrap' },\n\tstack: { type: 'flex', orientation: 'vertical' },\n\tgrid: { type: 'grid' },\n};\n\nfunction BlockGroupToolbar() {\n\tconst { blocksSelection, clientIds, groupingBlockName, isGroupable } =\n\t\tuseConvertToGroupButtonProps();\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\n\tconst { canRemove, variations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canRemoveBlocks } = select( blockEditorStore );\n\t\t\tconst { getBlockVariations } = select( blocksStore );\n\n\t\t\treturn {\n\t\t\t\tcanRemove: canRemoveBlocks( clientIds ),\n\t\t\t\tvariations: getBlockVariations(\n\t\t\t\t\tgroupingBlockName,\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, groupingBlockName ]\n\t);\n\n\tconst onConvertToGroup = ( layout ) => {\n\t\tconst newBlocks = switchToBlockType(\n\t\t\tblocksSelection,\n\t\t\tgroupingBlockName\n\t\t);\n\n\t\tif ( typeof layout !== 'string' ) {\n\t\t\tlayout = 'group';\n\t\t}\n\n\t\tif ( newBlocks && newBlocks.length > 0 ) {\n\t\t\t// Because the block is not in the store yet we can't use\n\t\t\t// updateBlockAttributes so need to manually update attributes.\n\t\t\tnewBlocks[ 0 ].attributes.layout = layouts[ layout ];\n\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t}\n\t};\n\n\tconst onConvertToRow = () => onConvertToGroup( 'row' );\n\tconst onConvertToStack = () => onConvertToGroup( 'stack' );\n\tconst onConvertToGrid = () => onConvertToGroup( 'grid' );\n\n\t// Don't render the button if the current selection cannot be grouped.\n\t// A good example is selecting multiple button blocks within a Buttons block:\n\t// The group block is not a valid child of Buttons, so we should not show the button.\n\t// Any blocks that are locked against removal also cannot be grouped.\n\tif ( ! isGroupable || ! canRemove ) {\n\t\treturn null;\n\t}\n\n\tconst canInsertRow = !! variations.find(\n\t\t( { name } ) => name === 'group-row'\n\t);\n\tconst canInsertStack = !! variations.find(\n\t\t( { name } ) => name === 'group-stack'\n\t);\n\tconst canInsertGrid = !! variations.find(\n\t\t( { name } ) => name === 'group-grid'\n\t);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ canInsertRow && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ canInsertStack && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ canInsertGrid && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockGroupToolbar;\n","/**\n * WordPress dependencies\n */\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockEditVisuallyButton( { clientIds } ) {\n\t// Edit visually only works for single block selection.\n\tconst clientId = clientIds.length === 1 ? clientIds[ 0 ] : undefined;\n\tconst canEditVisually = useSelect(\n\t\t( select ) =>\n\t\t\t!! clientId &&\n\t\t\tselect( blockEditorStore ).getBlockMode( clientId ) === 'html',\n\t\t[ clientId ]\n\t);\n\tconst { toggleBlockMode } = useDispatch( blockEditorStore );\n\n\tif ( ! canEditVisually ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\ttoggleBlockMode( clientId );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Edit visually' ) }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nconst __unstableBlockNameContext = createContext( '' );\n\nexport default __unstableBlockNameContext;\n","/**\n * WordPress dependencies\n */\nimport { NavigableMenu, Toolbar } from '@wordpress/components';\nimport {\n\tuseState,\n\tuseRef,\n\tuseLayoutEffect,\n\tuseEffect,\n\tuseCallback,\n} from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport { focus } from '@wordpress/dom';\nimport { useShortcut } from '@wordpress/keyboard-shortcuts';\nimport { ESCAPE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nfunction hasOnlyToolbarItem( elements ) {\n\tconst dataProp = 'toolbarItem';\n\treturn ! elements.some( ( element ) => ! ( dataProp in element.dataset ) );\n}\n\nfunction getAllFocusableToolbarItemsIn( container ) {\n\treturn Array.from(\n\t\tcontainer.querySelectorAll( '[data-toolbar-item]:not([disabled])' )\n\t);\n}\n\nfunction hasFocusWithin( container ) {\n\treturn container.contains( container.ownerDocument.activeElement );\n}\n\nfunction focusFirstTabbableIn( container ) {\n\tconst [ firstTabbable ] = focus.tabbable.find( container );\n\n\tif ( firstTabbable ) {\n\t\tfirstTabbable.focus( {\n\t\t\t// When focusing newly mounted toolbars,\n\t\t\t// the position of the popover is often not right on the first render\n\t\t\t// This prevents the layout shifts when focusing the dialogs.\n\t\t\tpreventScroll: true,\n\t\t} );\n\t}\n}\n\nfunction useIsAccessibleToolbar( toolbarRef ) {\n\t/*\n\t * By default, we'll assume the starting accessible state of the Toolbar\n\t * is true, as it seems to be the most common case.\n\t *\n\t * Transitioning from an (initial) false to true state causes the\n\t * component to mount twice, which is causing undesired\n\t * side-effects. These side-effects appear to only affect certain\n\t * E2E tests.\n\t *\n\t * This was initial discovered in this pull-request:\n\t * https://github.com/WordPress/gutenberg/pull/23425\n\t */\n\tconst initialAccessibleToolbarState = true;\n\n\t// By default, it's gonna render NavigableMenu. If all the tabbable elements\n\t// inside the toolbar are ToolbarItem components (or derived components like\n\t// ToolbarButton), then we can wrap them with the accessible Toolbar\n\t// component.\n\tconst [ isAccessibleToolbar, setIsAccessibleToolbar ] = useState(\n\t\tinitialAccessibleToolbarState\n\t);\n\n\tconst determineIsAccessibleToolbar = useCallback( () => {\n\t\tconst tabbables = focus.tabbable.find( toolbarRef.current );\n\t\tconst onlyToolbarItem = hasOnlyToolbarItem( tabbables );\n\t\tif ( ! onlyToolbarItem ) {\n\t\t\tdeprecated( 'Using custom components as toolbar controls', {\n\t\t\t\tsince: '5.6',\n\t\t\t\talternative:\n\t\t\t\t\t'ToolbarItem, ToolbarButton or ToolbarDropdownMenu components',\n\t\t\t\tlink: 'https://developer.wordpress.org/block-editor/components/toolbar-button/#inside-blockcontrols',\n\t\t\t} );\n\t\t}\n\t\tsetIsAccessibleToolbar( onlyToolbarItem );\n\t}, [ toolbarRef ] );\n\n\tuseLayoutEffect( () => {\n\t\t// Toolbar buttons may be rendered asynchronously, so we use\n\t\t// MutationObserver to check if the toolbar subtree has been modified.\n\t\tconst observer = new window.MutationObserver(\n\t\t\tdetermineIsAccessibleToolbar\n\t\t);\n\t\tobserver.observe( toolbarRef.current, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t} );\n\t\treturn () => observer.disconnect();\n\t}, [ determineIsAccessibleToolbar, isAccessibleToolbar, toolbarRef ] );\n\n\treturn isAccessibleToolbar;\n}\n\nfunction useToolbarFocus( {\n\ttoolbarRef,\n\tfocusOnMount,\n\tisAccessibleToolbar,\n\tdefaultIndex,\n\tonIndexChange,\n\tshouldUseKeyboardFocusShortcut,\n\tfocusEditorOnEscape,\n} ) {\n\t// Make sure we don't use modified versions of this prop.\n\tconst [ initialFocusOnMount ] = useState( focusOnMount );\n\tconst [ initialIndex ] = useState( defaultIndex );\n\n\tconst focusToolbar = useCallback( () => {\n\t\tfocusFirstTabbableIn( toolbarRef.current );\n\t}, [ toolbarRef ] );\n\n\tconst focusToolbarViaShortcut = () => {\n\t\tif ( shouldUseKeyboardFocusShortcut ) {\n\t\t\tfocusToolbar();\n\t\t}\n\t};\n\n\t// Focus on toolbar when pressing alt+F10 when the toolbar is visible.\n\tuseShortcut( 'core/block-editor/focus-toolbar', focusToolbarViaShortcut );\n\n\tuseEffect( () => {\n\t\tif ( initialFocusOnMount ) {\n\t\t\tfocusToolbar();\n\t\t}\n\t}, [ isAccessibleToolbar, initialFocusOnMount, focusToolbar ] );\n\n\tuseEffect( () => {\n\t\t// Store ref so we have access on useEffect cleanup: https://legacy.reactjs.org/blog/2020/08/10/react-v17-rc.html#effect-cleanup-timing\n\t\tconst navigableToolbarRef = toolbarRef.current;\n\t\t// If initialIndex is passed, we focus on that toolbar item when the\n\t\t// toolbar gets mounted and initial focus is not forced.\n\t\t// We have to wait for the next browser paint because block controls aren't\n\t\t// rendered right away when the toolbar gets mounted.\n\t\tlet raf = 0;\n\n\t\t// If the toolbar already had focus before the render, we don't want to move it.\n\t\t// https://github.com/WordPress/gutenberg/issues/58511\n\t\tif (\n\t\t\t! initialFocusOnMount &&\n\t\t\t! hasFocusWithin( navigableToolbarRef )\n\t\t) {\n\t\t\traf = window.requestAnimationFrame( () => {\n\t\t\t\tconst items =\n\t\t\t\t\tgetAllFocusableToolbarItemsIn( navigableToolbarRef );\n\t\t\t\tconst index = initialIndex || 0;\n\t\t\t\tif ( items[ index ] && hasFocusWithin( navigableToolbarRef ) ) {\n\t\t\t\t\titems[ index ].focus( {\n\t\t\t\t\t\t// When focusing newly mounted toolbars,\n\t\t\t\t\t\t// the position of the popover is often not right on the first render\n\t\t\t\t\t\t// This prevents the layout shifts when focusing the dialogs.\n\t\t\t\t\t\tpreventScroll: true,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn () => {\n\t\t\twindow.cancelAnimationFrame( raf );\n\t\t\tif ( ! onIndexChange || ! navigableToolbarRef ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// When the toolbar element is unmounted and onIndexChange is passed, we\n\t\t\t// pass the focused toolbar item index so it can be hydrated later.\n\t\t\tconst items = getAllFocusableToolbarItemsIn( navigableToolbarRef );\n\t\t\tconst index = items.findIndex( ( item ) => item.tabIndex === 0 );\n\t\t\tonIndexChange( index );\n\t\t};\n\t}, [ initialIndex, initialFocusOnMount, onIndexChange, toolbarRef ] );\n\n\tconst { getLastFocus } = unlock( useSelect( blockEditorStore ) );\n\t/**\n\t * Handles returning focus to the block editor canvas when pressing escape.\n\t */\n\tuseEffect( () => {\n\t\tconst navigableToolbarRef = toolbarRef.current;\n\n\t\tif ( focusEditorOnEscape ) {\n\t\t\tconst handleKeyDown = ( event ) => {\n\t\t\t\tconst lastFocus = getLastFocus();\n\t\t\t\tif ( event.keyCode === ESCAPE && lastFocus?.current ) {\n\t\t\t\t\t// Focus the last focused element when pressing escape.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tlastFocus.current.focus();\n\t\t\t\t}\n\t\t\t};\n\t\t\tnavigableToolbarRef.addEventListener( 'keydown', handleKeyDown );\n\t\t\treturn () => {\n\t\t\t\tnavigableToolbarRef.removeEventListener(\n\t\t\t\t\t'keydown',\n\t\t\t\t\thandleKeyDown\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\t}, [ focusEditorOnEscape, getLastFocus, toolbarRef ] );\n}\n\nexport default function NavigableToolbar( {\n\tchildren,\n\tfocusOnMount,\n\tfocusEditorOnEscape = false,\n\tshouldUseKeyboardFocusShortcut = true,\n\t__experimentalInitialIndex: initialIndex,\n\t__experimentalOnIndexChange: onIndexChange,\n\torientation = 'horizontal',\n\t...props\n} ) {\n\tconst toolbarRef = useRef();\n\tconst isAccessibleToolbar = useIsAccessibleToolbar( toolbarRef );\n\n\tuseToolbarFocus( {\n\t\ttoolbarRef,\n\t\tfocusOnMount,\n\t\tdefaultIndex: initialIndex,\n\t\tonIndexChange,\n\t\tisAccessibleToolbar,\n\t\tshouldUseKeyboardFocusShortcut,\n\t\tfocusEditorOnEscape,\n\t} );\n\n\tif ( isAccessibleToolbar ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalUseSlotFills as useSlotFills } from '@wordpress/components';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport groups from './groups';\n\nexport function useHasAnyBlockControls() {\n\tlet hasAnyBlockControls = false;\n\tfor ( const group in groups ) {\n\t\t// It is safe to violate the rules of hooks here as the `groups` object\n\t\t// is static and will not change length between renders. Do not return\n\t\t// early as that will cause the hook to be called a different number of\n\t\t// times between renders.\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tif ( useHasBlockControls( group ) ) {\n\t\t\thasAnyBlockControls = true;\n\t\t}\n\t}\n\treturn hasAnyBlockControls;\n}\n\nexport function useHasBlockControls( group = 'default' ) {\n\tconst Slot = groups[ group ]?.Slot;\n\tconst fills = useSlotFills( Slot?.__unstableName );\n\tif ( ! Slot ) {\n\t\twarning( `Unknown BlockControls group \"${ group }\" provided.` );\n\t\treturn null;\n\t}\n\treturn !! fills?.length;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { getBlockType, hasBlockSupport } from '@wordpress/blocks';\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';\n\n/**\n * Returns true if the block toolbar should be shown.\n *\n * @return {boolean} Whether the block toolbar component will be rendered.\n */\nexport function useHasBlockToolbar() {\n\tconst { isToolbarEnabled, isDefaultEditingMode } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockSelectionStart,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\t// we only care about the 1st selected block\n\t\t\t// for the toolbar, so we use getBlockSelectionStart\n\t\t\t// instead of getSelectedBlockClientIds\n\t\t\tconst selectedBlockClientId = getBlockSelectionStart();\n\n\t\t\tconst blockType =\n\t\t\t\tselectedBlockClientId &&\n\t\t\t\tgetBlockType( getBlockName( selectedBlockClientId ) );\n\n\t\t\treturn {\n\t\t\t\tisToolbarEnabled:\n\t\t\t\t\tblockType &&\n\t\t\t\t\thasBlockSupport( blockType, '__experimentalToolbar', true ),\n\t\t\t\tisDefaultEditingMode:\n\t\t\t\t\tgetBlockEditingMode( selectedBlockClientId ) === 'default',\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst hasAnyBlockControls = useHasAnyBlockControls();\n\n\tif (\n\t\t! isToolbarEnabled ||\n\t\t( ! isDefaultEditingMode && ! hasAnyBlockControls )\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { useRef } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tgetBlockType,\n\thasBlockSupport,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { ToolbarGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockMover from '../block-mover';\nimport BlockParentSelector from '../block-parent-selector';\nimport BlockSwitcher from '../block-switcher';\nimport BlockControls from '../block-controls';\nimport __unstableBlockToolbarLastItem from './block-toolbar-last-item';\nimport BlockSettingsMenu from '../block-settings-menu';\nimport { BlockLockToolbar } from '../block-lock';\nimport { BlockGroupToolbar } from '../convert-to-group-buttons';\nimport BlockEditVisuallyButton from '../block-edit-visually-button';\nimport { useShowHoveredOrFocusedGestures } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport __unstableBlockNameContext from './block-name-context';\nimport NavigableToolbar from '../navigable-toolbar';\nimport { useHasBlockToolbar } from './use-has-block-toolbar';\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {boolean} props.focusOnMount Focus the toolbar when mounted.\n * @param {number} props.__experimentalInitialIndex The initial index of the toolbar item to focus.\n * @param {Function} props.__experimentalOnIndexChange Callback function to be called when the index of the focused toolbar item changes.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport function PrivateBlockToolbar( {\n\thideDragHandle,\n\tfocusOnMount,\n\t__experimentalInitialIndex,\n\t__experimentalOnIndexChange,\n\tvariant = 'unstyled',\n} ) {\n\tconst {\n\t\tblockClientId,\n\t\tblockClientIds,\n\t\tisContentOnlyEditingMode,\n\t\tisDefaultEditingMode,\n\t\tblockType,\n\t\ttoolbarKey,\n\t\tshouldShowVisualToolbar,\n\t\tshowParentSelector,\n\t\tisUsingBindings,\n\t\thasParentPattern,\n\t\thasContentOnlyLocking,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockName,\n\t\t\tgetBlockMode,\n\t\t\tgetBlockParents,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisBlockValid,\n\t\t\tgetBlockEditingMode,\n\t\t\tgetBlockAttributes,\n\t\t\tgetBlockParentsByBlockName,\n\t\t\tgetTemplateLock,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlockClientId = selectedBlockClientIds[ 0 ];\n\t\tconst parents = getBlockParents( selectedBlockClientId );\n\t\tconst firstParentClientId = parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( firstParentClientId );\n\t\tconst parentBlockType = getBlockType( parentBlockName );\n\t\tconst editingMode = getBlockEditingMode( selectedBlockClientId );\n\t\tconst _isDefaultEditingMode = editingMode === 'default';\n\t\tconst _blockName = getBlockName( selectedBlockClientId );\n\t\tconst isValid = selectedBlockClientIds.every( ( id ) =>\n\t\t\tisBlockValid( id )\n\t\t);\n\t\tconst isVisual = selectedBlockClientIds.every(\n\t\t\t( id ) => getBlockMode( id ) === 'visual'\n\t\t);\n\t\tconst _isUsingBindings = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\t!! getBlockAttributes( clientId )?.metadata?.bindings\n\t\t);\n\n\t\tconst _hasParentPattern = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\tgetBlockParentsByBlockName( clientId, 'core/block', true )\n\t\t\t\t\t.length > 0\n\t\t);\n\n\t\t// If one or more selected blocks are locked, do not show the BlockGroupToolbar.\n\t\tconst _hasTemplateLock = selectedBlockClientIds.some(\n\t\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t\t);\n\t\treturn {\n\t\t\tblockClientId: selectedBlockClientId,\n\t\t\tblockClientIds: selectedBlockClientIds,\n\t\t\tisContentOnlyEditingMode: editingMode === 'contentOnly',\n\t\t\tisDefaultEditingMode: _isDefaultEditingMode,\n\t\t\tblockType: selectedBlockClientId && getBlockType( _blockName ),\n\t\t\tshouldShowVisualToolbar: isValid && isVisual,\n\t\t\ttoolbarKey: `${ selectedBlockClientId }${ firstParentClientId }`,\n\t\t\tshowParentSelector:\n\t\t\t\tparentBlockType &&\n\t\t\t\tgetBlockEditingMode( firstParentClientId ) === 'default' &&\n\t\t\t\thasBlockSupport(\n\t\t\t\t\tparentBlockType,\n\t\t\t\t\t'__experimentalParentSelector',\n\t\t\t\t\ttrue\n\t\t\t\t) &&\n\t\t\t\tselectedBlockClientIds.length === 1 &&\n\t\t\t\t_isDefaultEditingMode,\n\t\t\tisUsingBindings: _isUsingBindings,\n\t\t\thasParentPattern: _hasParentPattern,\n\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t};\n\t}, [] );\n\n\tconst toolbarWrapperRef = useRef( null );\n\n\t// Handles highlighting the current block outline on hover or focus of the\n\t// block type toolbar area.\n\tconst nodeRef = useRef();\n\tconst showHoveredOrFocusedGestures = useShowHoveredOrFocusedGestures( {\n\t\tref: nodeRef,\n\t} );\n\n\tconst isLargeViewport = ! useViewportMatch( 'medium', '<' );\n\n\tconst hasBlockToolbar = useHasBlockToolbar();\n\tif ( ! hasBlockToolbar ) {\n\t\treturn null;\n\t}\n\n\tconst isMultiToolbar = blockClientIds.length > 1;\n\tconst isSynced =\n\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\n\t// Shifts the toolbar to make room for the parent block selector.\n\tconst classes = clsx( 'block-editor-block-contextual-toolbar', {\n\t\t'has-parent': showParentSelector,\n\t} );\n\n\tconst innerClasses = clsx( 'block-editor-block-toolbar', {\n\t\t'is-synced': isSynced,\n\t\t'is-connected': isUsingBindings,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t
    \n\t\t\t\t{ ! isMultiToolbar &&\n\t\t\t\t\tisLargeViewport &&\n\t\t\t\t\tisDefaultEditingMode && }\n\t\t\t\t{ ( shouldShowVisualToolbar || isMultiToolbar ) &&\n\t\t\t\t\t( isDefaultEditingMode ||\n\t\t\t\t\t\t( isContentOnlyEditingMode && ! hasParentPattern ) ||\n\t\t\t\t\t\tisSynced ) && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ ! isMultiToolbar && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t) }\n\t\t\t\t{ ! hasContentOnlyLocking &&\n\t\t\t\t\tshouldShowVisualToolbar &&\n\t\t\t\t\tisMultiToolbar && }\n\t\t\t\t{ shouldShowVisualToolbar && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t<__unstableBlockNameContext.Provider\n\t\t\t\t\t\t\tvalue={ blockType?.name }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<__unstableBlockToolbarLastItem.Slot />\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport default function BlockToolbar( { hideDragHandle, variant } ) {\n\treturn (\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { useEffect, useRef } from '@wordpress/element';\nimport { useShortcut } from '@wordpress/keyboard-shortcuts';\n/**\n * Internal dependencies\n */\nimport BlockPopover from '../block-popover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\nimport { store as blockEditorStore } from '../../store';\nimport { PrivateBlockToolbar } from '../block-toolbar';\n\nexport default function BlockToolbarPopover( {\n\tclientId,\n\tisTyping,\n\t__unstableContentRef,\n} ) {\n\tconst { capturingClientId, isInsertionPointVisible, lastClientId } =\n\t\tuseSelectedBlockToolProps( clientId );\n\n\t// Stores the active toolbar item index so the block toolbar can return focus\n\t// to it when re-mounting.\n\tconst initialToolbarItemIndexRef = useRef();\n\n\tuseEffect( () => {\n\t\t// Resets the index whenever the active block changes so this is not\n\t\t// persisted. See https://github.com/WordPress/gutenberg/pull/25760#issuecomment-717906169\n\t\tinitialToolbarItemIndexRef.current = undefined;\n\t}, [ clientId ] );\n\n\tconst { stopTyping } = useDispatch( blockEditorStore );\n\tconst isToolbarForcedRef = useRef( false );\n\n\tuseShortcut( 'core/block-editor/focus-toolbar', () => {\n\t\tisToolbarForcedRef.current = true;\n\t\tstopTyping( true );\n\t} );\n\n\tuseEffect( () => {\n\t\tisToolbarForcedRef.current = false;\n\t} );\n\n\t// If the block has a parent with __experimentalCaptureToolbars enabled,\n\t// the toolbar should be positioned over the topmost capturing parent.\n\tconst clientIdToPositionOver = capturingClientId || clientId;\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId: clientIdToPositionOver,\n\t} );\n\n\treturn (\n\t\t! isTyping && (\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tinitialToolbarItemIndexRef.current = index;\n\t\t\t\t\t} }\n\t\t\t\t\tvariant=\"toolbar\"\n\t\t\t\t/>\n\t\t\t\n\t\t)\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { dragHandle } from '@wordpress/icons';\nimport { Button, Flex, FlexItem } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { forwardRef, useEffect } from '@wordpress/element';\nimport {\n\tBACKSPACE,\n\tDELETE,\n\tUP,\n\tDOWN,\n\tLEFT,\n\tRIGHT,\n\tTAB,\n\tESCAPE,\n\tENTER,\n\tSPACE,\n} from '@wordpress/keycodes';\nimport {\n\t__experimentalGetAccessibleBlockLabel as getAccessibleBlockLabel,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { focus } from '@wordpress/dom';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTitle from '../block-title';\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\nimport BlockDraggable from '../block-draggable';\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\n\n/**\n * Block selection button component, displaying the label of the block. If the block\n * descends from a root block, a button is displayed enabling the user to select\n * the root block.\n *\n * @param {string} props Component props.\n * @param {string} props.clientId Client ID of block.\n * @param {Object} ref Reference to the component.\n *\n * @return {Component} The component to be rendered.\n */\nfunction BlockSelectionButton( { clientId, rootClientId }, ref ) {\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockIndex,\n\t\t\t\thasBlockMovingClientId,\n\t\t\t\tgetBlockListSettings,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tcanMoveBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getActiveBlockVariation, getBlockType } =\n\t\t\t\tselect( blocksStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tconst { name, attributes } = getBlock( clientId );\n\t\t\tconst blockType = getBlockType( name );\n\t\t\tconst orientation =\n\t\t\t\tgetBlockListSettings( rootClientId )?.orientation;\n\t\t\tconst match = getActiveBlockVariation( name, attributes );\n\n\t\t\treturn {\n\t\t\t\tblockMovingMode: hasBlockMovingClientId(),\n\t\t\t\teditorMode: __unstableGetEditorMode(),\n\t\t\t\ticon: match?.icon || blockType.icon,\n\t\t\t\tlabel: getAccessibleBlockLabel(\n\t\t\t\t\tblockType,\n\t\t\t\t\tattributes,\n\t\t\t\t\tindex + 1,\n\t\t\t\t\torientation\n\t\t\t\t),\n\t\t\t\tcanMove: canMoveBlock( clientId, rootClientId ),\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\tconst { label, icon, blockMovingMode, editorMode, canMove } = selected;\n\tconst { setNavigationMode, removeBlock } = useDispatch( blockEditorStore );\n\n\t// Focus the breadcrumb in navigation mode.\n\tuseEffect( () => {\n\t\tif ( editorMode === 'navigation' ) {\n\t\t\tref.current.focus();\n\t\t\tspeak( label );\n\t\t}\n\t}, [ label, editorMode ] );\n\tconst blockElement = useBlockElement( clientId );\n\n\tconst {\n\t\thasBlockMovingClientId,\n\t\tgetBlockIndex,\n\t\tgetBlockRootClientId,\n\t\tgetClientIdsOfDescendants,\n\t\tgetSelectedBlockClientId,\n\t\tgetMultiSelectedBlocksEndClientId,\n\t\tgetPreviousBlockClientId,\n\t\tgetNextBlockClientId,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tselectBlock,\n\t\tclearSelectedBlock,\n\t\tsetBlockMovingClientId,\n\t\tmoveBlockToPosition,\n\t} = useDispatch( blockEditorStore );\n\n\tfunction onKeyDown( event ) {\n\t\tconst { keyCode } = event;\n\t\tconst isUp = keyCode === UP;\n\t\tconst isDown = keyCode === DOWN;\n\t\tconst isLeft = keyCode === LEFT;\n\t\tconst isRight = keyCode === RIGHT;\n\t\tconst isTab = keyCode === TAB;\n\t\tconst isEscape = keyCode === ESCAPE;\n\t\tconst isEnter = keyCode === ENTER;\n\t\tconst isSpace = keyCode === SPACE;\n\t\tconst isShift = event.shiftKey;\n\n\t\tif ( keyCode === BACKSPACE || keyCode === DELETE ) {\n\t\t\tremoveBlock( clientId );\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst selectionEndClientId = getMultiSelectedBlocksEndClientId();\n\t\tconst selectionBeforeEndClientId = getPreviousBlockClientId(\n\t\t\tselectionEndClientId || selectedBlockClientId\n\t\t);\n\t\tconst selectionAfterEndClientId = getNextBlockClientId(\n\t\t\tselectionEndClientId || selectedBlockClientId\n\t\t);\n\n\t\tconst navigateUp = ( isTab && isShift ) || isUp;\n\t\tconst navigateDown = ( isTab && ! isShift ) || isDown;\n\t\t// Move out of current nesting level (no effect if at root level).\n\t\tconst navigateOut = isLeft;\n\t\t// Move into next nesting level (no effect if the current block has no innerBlocks).\n\t\tconst navigateIn = isRight;\n\n\t\tlet focusedBlockUid;\n\t\tif ( navigateUp ) {\n\t\t\tfocusedBlockUid = selectionBeforeEndClientId;\n\t\t} else if ( navigateDown ) {\n\t\t\tfocusedBlockUid = selectionAfterEndClientId;\n\t\t} else if ( navigateOut ) {\n\t\t\tfocusedBlockUid =\n\t\t\t\tgetBlockRootClientId( selectedBlockClientId ) ??\n\t\t\t\tselectedBlockClientId;\n\t\t} else if ( navigateIn ) {\n\t\t\tfocusedBlockUid =\n\t\t\t\tgetClientIdsOfDescendants( selectedBlockClientId )[ 0 ] ??\n\t\t\t\tselectedBlockClientId;\n\t\t}\n\t\tconst startingBlockClientId = hasBlockMovingClientId();\n\t\tif ( isEscape && startingBlockClientId && ! event.defaultPrevented ) {\n\t\t\tsetBlockMovingClientId( null );\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tif ( ( isEnter || isSpace ) && startingBlockClientId ) {\n\t\t\tconst sourceRoot = getBlockRootClientId( startingBlockClientId );\n\t\t\tconst destRoot = getBlockRootClientId( selectedBlockClientId );\n\t\t\tconst sourceBlockIndex = getBlockIndex( startingBlockClientId );\n\t\t\tlet destinationBlockIndex = getBlockIndex( selectedBlockClientId );\n\t\t\tif (\n\t\t\t\tsourceBlockIndex < destinationBlockIndex &&\n\t\t\t\tsourceRoot === destRoot\n\t\t\t) {\n\t\t\t\tdestinationBlockIndex -= 1;\n\t\t\t}\n\t\t\tmoveBlockToPosition(\n\t\t\t\tstartingBlockClientId,\n\t\t\t\tsourceRoot,\n\t\t\t\tdestRoot,\n\t\t\t\tdestinationBlockIndex\n\t\t\t);\n\t\t\tselectBlock( startingBlockClientId );\n\t\t\tsetBlockMovingClientId( null );\n\t\t}\n\t\t// Prevent the block from being moved into itself.\n\t\tif (\n\t\t\tstartingBlockClientId &&\n\t\t\tselectedBlockClientId === startingBlockClientId &&\n\t\t\tnavigateIn\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif ( navigateDown || navigateUp || navigateOut || navigateIn ) {\n\t\t\tif ( focusedBlockUid ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tselectBlock( focusedBlockUid );\n\t\t\t} else if ( isTab && selectedBlockClientId ) {\n\t\t\t\tlet nextTabbable;\n\n\t\t\t\tif ( navigateDown ) {\n\t\t\t\t\tnextTabbable = blockElement;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tnextTabbable = focus.tabbable.findNext( nextTabbable );\n\t\t\t\t\t} while (\n\t\t\t\t\t\tnextTabbable &&\n\t\t\t\t\t\tblockElement.contains( nextTabbable )\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( ! nextTabbable ) {\n\t\t\t\t\t\tnextTabbable =\n\t\t\t\t\t\t\tblockElement.ownerDocument.defaultView.frameElement;\n\t\t\t\t\t\tnextTabbable = focus.tabbable.findNext( nextTabbable );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnextTabbable = focus.tabbable.findPrevious( blockElement );\n\t\t\t\t}\n\n\t\t\t\tif ( nextTabbable ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tnextTabbable.focus();\n\t\t\t\t\tclearSelectedBlock();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst classNames = clsx(\n\t\t'block-editor-block-list__block-selection-button',\n\t\t{\n\t\t\t'is-block-moving-mode': !! blockMovingMode,\n\t\t}\n\t);\n\n\tconst dragHandleLabel = __( 'Drag' );\n\tconst showBlockDraggable = canMove && editorMode === 'navigation';\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ showBlockDraggable && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ editorMode === 'navigation' && (\n\t\t\t\t\t\n\t\t\t\t\t\t setNavigationMode( false )\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\tshowTooltip={ false }\n\t\t\t\t\t\t\tclassName=\"block-selection-button_select-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default forwardRef( BlockSelectionButton );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockSelectionButton from './block-selection-button';\nimport { PrivateBlockPopover } from '../block-popover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\n\nfunction BlockToolbarBreadcrumb( { clientId, __unstableContentRef }, ref ) {\n\tconst {\n\t\tcapturingClientId,\n\t\tisInsertionPointVisible,\n\t\tlastClientId,\n\t\trootClientId,\n\t} = useSelectedBlockToolProps( clientId );\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default forwardRef( BlockToolbarBreadcrumb );\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst trash = (\n\t\n\t\t\n\t\n);\n\nexport default trash;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst shuffle = (\n\t\n\t\t\n\t\n);\n\nexport default shuffle;\n","/**\n * WordPress dependencies\n */\nimport { shuffle } from '@wordpress/icons';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst EMPTY_ARRAY = [];\n\nfunction Container( props ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nexport default function Shuffle( { clientId, as = Container } ) {\n\tconst { categories, patterns, patternName } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\t__experimentalGetAllowedPatterns,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst _categories = attributes?.metadata?.categories || EMPTY_ARRAY;\n\t\t\tconst _patternName = attributes?.metadata?.patternName;\n\t\t\tconst rootBlock = getBlockRootClientId( clientId );\n\n\t\t\t// Calling `__experimentalGetAllowedPatterns` is expensive.\n\t\t\t// Checking if the block can be shuffled prevents unnecessary selector calls.\n\t\t\t// See: https://github.com/WordPress/gutenberg/pull/64736.\n\t\t\tconst _patterns =\n\t\t\t\t_categories.length > 0\n\t\t\t\t\t? __experimentalGetAllowedPatterns( rootBlock )\n\t\t\t\t\t: EMPTY_ARRAY;\n\t\t\treturn {\n\t\t\t\tcategories: _categories,\n\t\t\t\tpatterns: _patterns,\n\t\t\t\tpatternName: _patternName,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst sameCategoryPatternsWithSingleWrapper = useMemo( () => {\n\t\tif ( categories.length === 0 || ! patterns || patterns.length === 0 ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn patterns.filter( ( pattern ) => {\n\t\t\tconst isCorePattern =\n\t\t\t\tpattern.source === 'core' ||\n\t\t\t\t( pattern.source?.startsWith( 'pattern-directory' ) &&\n\t\t\t\t\tpattern.source !== 'pattern-directory/theme' );\n\t\t\treturn (\n\t\t\t\t// Check if the pattern has only one top level block,\n\t\t\t\t// otherwise we may shuffle to pattern that will not allow to continue shuffling.\n\t\t\t\tpattern.blocks.length === 1 &&\n\t\t\t\t// We exclude the core patterns and pattern directory patterns that are not theme patterns.\n\t\t\t\t! isCorePattern &&\n\t\t\t\tpattern.categories?.some( ( category ) => {\n\t\t\t\t\treturn categories.includes( category );\n\t\t\t\t} ) &&\n\t\t\t\t// Check if the pattern is not a synced pattern.\n\t\t\t\t( pattern.syncStatus === 'unsynced' || ! pattern.id )\n\t\t\t);\n\t\t} );\n\t}, [ categories, patterns ] );\n\n\tif ( sameCategoryPatternsWithSingleWrapper.length < 2 ) {\n\t\treturn null;\n\t}\n\n\tfunction getNextPattern() {\n\t\tconst numberOfPatterns = sameCategoryPatternsWithSingleWrapper.length;\n\t\tconst patternIndex = sameCategoryPatternsWithSingleWrapper.findIndex(\n\t\t\t( { name } ) => name === patternName\n\t\t);\n\t\tconst nextPatternIndex =\n\t\t\tpatternIndex + 1 < numberOfPatterns ? patternIndex + 1 : 0;\n\t\treturn sameCategoryPatternsWithSingleWrapper[ nextPatternIndex ];\n\t}\n\n\tconst ComponentToUse = as;\n\treturn (\n\t\t {\n\t\t\t\tconst nextPattern = getNextPattern();\n\t\t\t\tnextPattern.blocks[ 0 ].attributes = {\n\t\t\t\t\t...nextPattern.blocks[ 0 ].attributes,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...nextPattern.blocks[ 0 ].attributes.metadata,\n\t\t\t\t\t\tcategories,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treplaceBlocks( clientId, nextPattern.blocks );\n\t\t\t} }\n\t\t/>\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { dragHandle, trash, edit } from '@wordpress/icons';\nimport { Button, ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockDraggable from '../block-draggable';\nimport BlockMover from '../block-mover';\nimport Shuffle from '../block-toolbar/shuffle';\nimport NavigableToolbar from '../navigable-toolbar';\nimport { unlock } from '../../lock-unlock';\n\nexport default function ZoomOutToolbar( { clientId, __unstableContentRef } ) {\n\tconst selected = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlock,\n\t\t\t\thasBlockMovingClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\t\t\t\tgetSettings,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { __experimentalSetIsInserterOpened: setIsInserterOpened } =\n\t\t\t\tgetSettings();\n\n\t\t\tconst { getBlockType } = select( blocksStore );\n\t\t\tconst { name } = getBlock( clientId );\n\t\t\tconst blockType = getBlockType( name );\n\t\t\tconst isBlockTemplatePart =\n\t\t\t\tblockType?.name === 'core/template-part';\n\n\t\t\tlet isNextBlockTemplatePart = false;\n\t\t\tconst nextClientId = getNextBlockClientId();\n\t\t\tif ( nextClientId ) {\n\t\t\t\tconst { name: nextName } = getBlock( nextClientId );\n\t\t\t\tconst nextBlockType = getBlockType( nextName );\n\t\t\t\tisNextBlockTemplatePart =\n\t\t\t\t\tnextBlockType?.name === 'core/template-part';\n\t\t\t}\n\n\t\t\tlet isPrevBlockTemplatePart = false;\n\t\t\tconst prevClientId = getPreviousBlockClientId();\n\t\t\tif ( prevClientId ) {\n\t\t\t\tconst { name: prevName } = getBlock( prevClientId );\n\t\t\t\tconst prevBlockType = getBlockType( prevName );\n\t\t\t\tisPrevBlockTemplatePart =\n\t\t\t\t\tprevBlockType?.name === 'core/template-part';\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tblockMovingMode: hasBlockMovingClientId(),\n\t\t\t\tisBlockTemplatePart,\n\t\t\t\tisNextBlockTemplatePart,\n\t\t\t\tisPrevBlockTemplatePart,\n\t\t\t\tcanRemove: canRemoveBlock( clientId ),\n\t\t\t\tcanMove: canMoveBlock( clientId ),\n\t\t\t\tsetIsInserterOpened,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst {\n\t\tblockMovingMode,\n\t\tisBlockTemplatePart,\n\t\tisNextBlockTemplatePart,\n\t\tisPrevBlockTemplatePart,\n\t\tcanRemove,\n\t\tcanMove,\n\t\tsetIsInserterOpened,\n\t} = selected;\n\n\tconst { removeBlock, __unstableSetEditorMode, resetZoomLevel } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\tconst classNames = clsx( 'zoom-out-toolbar', {\n\t\t'is-block-moving-mode': !! blockMovingMode,\n\t} );\n\n\tconst showBlockDraggable = canMove && ! isBlockTemplatePart;\n\n\treturn (\n\t\t\n\t\t\t{ showBlockDraggable && (\n\t\t\t\t\n\t\t\t\t\t{ ( draggableProps ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ ! isBlockTemplatePart && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ canMove && canRemove && (\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ ! isBlockTemplatePart && (\n\t\t\t\t {\n\t\t\t\t\t\t// Setting may be undefined.\n\t\t\t\t\t\tif ( typeof setIsInserterOpened === 'function' ) {\n\t\t\t\t\t\t\tsetIsInserterOpened( false );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t__unstableSetEditorMode( 'edit' );\n\t\t\t\t\t\tresetZoomLevel();\n\t\t\t\t\t\t__unstableContentRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ canRemove && ! isBlockTemplatePart && (\n\t\t\t\t {\n\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * Internal dependencies\n */\nimport BlockPopover from '../block-popover';\nimport useBlockToolbarPopoverProps from './use-block-toolbar-popover-props';\nimport useSelectedBlockToolProps from './use-selected-block-tool-props';\nimport ZoomOutToolbar from './zoom-out-toolbar';\n\nexport default function ZoomOutPopover( { clientId, __unstableContentRef } ) {\n\tconst { capturingClientId, isInsertionPointVisible, lastClientId } =\n\t\tuseSelectedBlockToolProps( clientId );\n\n\tconst popoverProps = useBlockToolbarPopoverProps( {\n\t\tcontentElement: __unstableContentRef?.current,\n\t\tclientId,\n\t} );\n\n\t// Override some of the popover props for the zoom-out toolbar.\n\tconst props = {\n\t\t...popoverProps,\n\t\tplacement: 'left-start',\n\t\tflip: false,\n\t\tshift: true,\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { Button } from '@wordpress/components';\nimport { plus } from '@wordpress/icons';\nimport { _x } from '@wordpress/i18n';\n\nfunction ZoomOutModeInserterButton( { isVisible, onClick } ) {\n\tconst [\n\t\tzoomOutModeInserterButtonHovered,\n\t\tsetZoomOutModeInserterButtonHovered,\n\t] = useState( false );\n\n\treturn (\n\t\t {\n\t\t\t\tsetZoomOutModeInserterButtonHovered( true );\n\t\t\t} }\n\t\t\tonMouseOut={ () => {\n\t\t\t\tsetZoomOutModeInserterButtonHovered( false );\n\t\t\t} }\n\t\t\tlabel={ _x(\n\t\t\t\t'Add pattern',\n\t\t\t\t'Generic label for pattern inserter button'\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default ZoomOutModeInserterButton;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useEffect, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverInbetween from '../block-popover/inbetween';\nimport ZoomOutModeInserterButton from './zoom-out-mode-inserter-button';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nfunction ZoomOutModeInserters() {\n\tconst [ isReady, setIsReady ] = useState( false );\n\tconst {\n\t\thasSelection,\n\t\tblockInsertionPoint,\n\t\tblockOrder,\n\t\tblockInsertionPointVisible,\n\t\tsetInserterIsOpened,\n\t\tsectionRootClientId,\n\t\tselectedBlockClientId,\n\t\thoveredBlockClientId,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSettings,\n\t\t\tgetBlockInsertionPoint,\n\t\t\tgetBlockOrder,\n\t\t\tgetSelectionStart,\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetHoveredBlockClientId,\n\t\t\tisBlockInsertionPointVisible,\n\t\t\tgetSectionRootClientId,\n\t\t} = unlock( select( blockEditorStore ) );\n\n\t\tconst root = getSectionRootClientId();\n\n\t\treturn {\n\t\t\thasSelection: !! getSelectionStart().clientId,\n\t\t\tblockInsertionPoint: getBlockInsertionPoint(),\n\t\t\tblockOrder: getBlockOrder( root ),\n\t\t\tblockInsertionPointVisible: isBlockInsertionPointVisible(),\n\t\t\tsectionRootClientId: root,\n\t\t\tsetInserterIsOpened:\n\t\t\t\tgetSettings().__experimentalSetIsInserterOpened,\n\t\t\tselectedBlockClientId: getSelectedBlockClientId(),\n\t\t\thoveredBlockClientId: getHoveredBlockClientId(),\n\t\t};\n\t}, [] );\n\n\tconst { showInsertionPoint } = useDispatch( blockEditorStore );\n\n\t// Defer the initial rendering to avoid the jumps due to the animation.\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetIsReady( true );\n\t\t}, 500 );\n\t\treturn () => {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t}, [] );\n\n\tif ( ! isReady ) {\n\t\treturn null;\n\t}\n\n\treturn [ undefined, ...blockOrder ].map( ( clientId, index ) => {\n\t\tconst shouldRenderInsertionPoint =\n\t\t\tblockInsertionPointVisible && blockInsertionPoint.index === index;\n\n\t\tconst previousClientId = clientId;\n\t\tconst nextClientId = blockOrder[ index ];\n\n\t\tconst isSelected =\n\t\t\thasSelection &&\n\t\t\t( selectedBlockClientId === previousClientId ||\n\t\t\t\tselectedBlockClientId === nextClientId );\n\n\t\tconst isHovered =\n\t\t\thoveredBlockClientId === previousClientId ||\n\t\t\thoveredBlockClientId === nextClientId;\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ ! shouldRenderInsertionPoint && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetInserterIsOpened( {\n\t\t\t\t\t\t\t\trootClientId: sectionRootClientId,\n\t\t\t\t\t\t\t\tinsertionIndex: index,\n\t\t\t\t\t\t\t\ttab: 'patterns',\n\t\t\t\t\t\t\t\tcategory: 'all',\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tshowInsertionPoint( sectionRootClientId, index, {\n\t\t\t\t\t\t\t\toperation: 'insert',\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t} );\n}\n\nexport default ZoomOutModeInserters;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { isTextField } from '@wordpress/dom';\nimport { Popover } from '@wordpress/components';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRef } from '@wordpress/element';\nimport { switchToBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport EmptyBlockInserter from './empty-block-inserter';\nimport {\n\tInsertionPointOpenRef,\n\tdefault as InsertionPoint,\n} from './insertion-point';\nimport BlockToolbarPopover from './block-toolbar-popover';\nimport BlockToolbarBreadcrumb from './block-toolbar-breadcrumb';\nimport ZoomOutPopover from './zoom-out-popover';\nimport { store as blockEditorStore } from '../../store';\nimport usePopoverScroll from '../block-popover/use-popover-scroll';\nimport ZoomOutModeInserters from './zoom-out-mode-inserters';\nimport { useShowBlockTools } from './use-show-block-tools';\nimport { unlock } from '../../lock-unlock';\nimport getEditorRegion from '../../utils/get-editor-region';\n\nfunction selector( select ) {\n\tconst {\n\t\tgetSelectedBlockClientId,\n\t\tgetFirstMultiSelectedBlockClientId,\n\t\tgetSettings,\n\t\t__unstableGetEditorMode,\n\t\tisTyping,\n\t} = select( blockEditorStore );\n\n\tconst clientId =\n\t\tgetSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();\n\n\tconst editorMode = __unstableGetEditorMode();\n\n\treturn {\n\t\tclientId,\n\t\thasFixedToolbar: getSettings().hasFixedToolbar,\n\t\tisTyping: isTyping(),\n\t\tisZoomOutMode: editorMode === 'zoom-out',\n\t};\n}\n\n/**\n * Renders block tools (the block toolbar, select/navigation mode toolbar, the\n * insertion point and a slot for the inline rich text toolbar). Must be wrapped\n * around the block content and editor styles wrapper or iframe.\n *\n * @param {Object} $0 Props.\n * @param {Object} $0.children The block content and style container.\n * @param {Object} $0.__unstableContentRef Ref holding the content scroll container.\n */\nexport default function BlockTools( {\n\tchildren,\n\t__unstableContentRef,\n\t...props\n} ) {\n\tconst { clientId, hasFixedToolbar, isTyping, isZoomOutMode } = useSelect(\n\t\tselector,\n\t\t[]\n\t);\n\tconst isMatch = useShortcutEventMatch();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\tgetBlockRootClientId,\n\t\tisGroupable,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\tconst {\n\t\tshowEmptyBlockSideInserter,\n\t\tshowBreadcrumb,\n\t\tshowBlockToolbarPopover,\n\t\tshowZoomOutToolbar,\n\t} = useShowBlockTools();\n\n\tconst {\n\t\tclearSelectedBlock,\n\t\tduplicateBlocks,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tselectBlock,\n\t\tmoveBlocksUp,\n\t\tmoveBlocksDown,\n\t\texpandBlock,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst blockSelectionButtonRef = useRef();\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isMatch( 'core/block-editor/move-up', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\t\tmoveBlocksUp( clientIds, rootClientId );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/move-down', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\t\tmoveBlocksDown( clientIds, rootClientId );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tduplicateBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/remove', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tremoveBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertAfterBlock( clientIds[ clientIds.length - 1 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertBeforeBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/unselect', event ) ) {\n\t\t\tif ( event.target.closest( '[role=toolbar]' ) ) {\n\t\t\t\t// This shouldn't be necessary, but we have a combination of a few things all combining to create a situation where:\n\t\t\t\t// - Because the block toolbar uses createPortal to populate the block toolbar fills, we can't rely on the React event bubbling to hit the onKeyDown listener for the block toolbar\n\t\t\t\t// - Since we can't use the React tree, we use the DOM tree which _should_ handle the event bubbling correctly from a `createPortal` element.\n\t\t\t\t// - This bubbles via the React tree, which hits this `unselect` escape keypress before the block toolbar DOM event listener has access to it.\n\t\t\t\t// An alternative would be to remove the addEventListener on the navigableToolbar and use this event to handle it directly right here. That feels hacky too though.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// If there is more than one block selected, select the first\n\t\t\t\t// block so that focus is directed back to the beginning of the selection.\n\t\t\t\t// In effect, to the user this feels like deselecting the multi-selection.\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t} else if (\n\t\t\t\tclientIds.length === 1 &&\n\t\t\t\tevent.target === blockSelectionButtonRef?.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tclearSelectedBlock();\n\t\t\t\tgetEditorRegion( __unstableContentRef.current )?.focus();\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\t// If focus is currently within a text field, such as a rich text block or other editable field,\n\t\t\t// skip collapsing the list view, and allow the keyboard shortcut to be handled by the text field.\n\t\t\t// This condition checks for both the active element and the active element within an iframed editor.\n\t\t\tif (\n\t\t\t\tisTextField( event.target ) ||\n\t\t\t\tisTextField(\n\t\t\t\t\tevent.target?.contentWindow?.document?.activeElement\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\texpandBlock( clientId );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 && isGroupable( clientIds ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t}\n\t\t}\n\t}\n\tconst blockToolbarRef = usePopoverScroll( __unstableContentRef );\n\tconst blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );\n\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/no-static-element-interactions\n\t\t
    \n\t\t\t\n\t\t\t\t{ ! isTyping && ! isZoomOutMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showEmptyBlockSideInserter && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showBlockToolbarPopover && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showBreadcrumb && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ showZoomOutToolbar && (\n\t\t\t\t\t\n\t\t\t\t) }\n\n\t\t\t\t{ /* Used for the inline rich text toolbar. Until this toolbar is combined into BlockToolbar, someone implementing their own BlockToolbar will also need to use this to see the image caption toolbar. */ }\n\t\t\t\t{ ! isZoomOutMode && ! hasFixedToolbar && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ children }\n\t\t\t\t{ /* Used for inline rich text popovers. */ }\n\t\t\t\t\n\t\t\t\t{ isZoomOutMode && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { isUnmodifiedDefaultBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Source of truth for which block tools are showing in the block editor.\n *\n * @return {Object} Object of which block tools will be shown.\n */\nexport function useShowBlockTools() {\n\treturn useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetFirstMultiSelectedBlockClientId,\n\t\t\tgetBlock,\n\t\t\tgetBlockMode,\n\t\t\tgetSettings,\n\t\t\thasMultiSelection,\n\t\t\t__unstableGetEditorMode,\n\t\t\tisTyping,\n\t\t} = select( blockEditorStore );\n\n\t\tconst clientId =\n\t\t\tgetSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();\n\n\t\tconst block = getBlock( clientId );\n\t\tconst editorMode = __unstableGetEditorMode();\n\t\tconst hasSelectedBlock = !! clientId && !! block;\n\t\tconst isEmptyDefaultBlock =\n\t\t\thasSelectedBlock &&\n\t\t\tisUnmodifiedDefaultBlock( block ) &&\n\t\t\tgetBlockMode( clientId ) !== 'html';\n\t\tconst _showEmptyBlockSideInserter =\n\t\t\tclientId &&\n\t\t\t! isTyping() &&\n\t\t\teditorMode === 'edit' &&\n\t\t\tisEmptyDefaultBlock;\n\t\tconst maybeShowBreadcrumb =\n\t\t\thasSelectedBlock &&\n\t\t\t! hasMultiSelection() &&\n\t\t\teditorMode === 'navigation';\n\n\t\tconst isZoomOut = editorMode === 'zoom-out';\n\t\tconst _showZoomOutToolbar =\n\t\t\tisZoomOut &&\n\t\t\tblock?.attributes?.align === 'full' &&\n\t\t\t! _showEmptyBlockSideInserter &&\n\t\t\t! maybeShowBreadcrumb;\n\t\tconst _showBlockToolbarPopover =\n\t\t\t! _showZoomOutToolbar &&\n\t\t\t! getSettings().hasFixedToolbar &&\n\t\t\t! _showEmptyBlockSideInserter &&\n\t\t\thasSelectedBlock &&\n\t\t\t! isEmptyDefaultBlock &&\n\t\t\t! maybeShowBreadcrumb;\n\n\t\treturn {\n\t\t\tshowEmptyBlockSideInserter: _showEmptyBlockSideInserter,\n\t\t\tshowBreadcrumb:\n\t\t\t\t! _showEmptyBlockSideInserter && maybeShowBreadcrumb,\n\t\t\tshowBlockToolbarPopover: _showBlockToolbarPopover,\n\t\t\tshowZoomOutToolbar: _showZoomOutToolbar,\n\t\t};\n\t}, [] );\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"commands\"];","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst moveTo = (\n\t\n\t\t\n\t\n);\n\nexport default moveTo;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst ungroup = (\n\t\n\t\t\n\t\n);\n\nexport default ungroup;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\thasBlockSupport,\n\tstore as blocksStore,\n\tswitchToBlockType,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCommandLoader } from '@wordpress/commands';\nimport {\n\tcopy,\n\ttrash as remove,\n\tplus as add,\n\tgroup,\n\tungroup,\n\tmoveTo as move,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nexport const useTransformCommands = () => {\n\tconst { replaceBlocks, multiSelect } = useDispatch( blockEditorStore );\n\tconst {\n\t\tblocks,\n\t\tclientIds,\n\t\tcanRemove,\n\t\tpossibleBlockTransformations,\n\t\tinvalidSelection,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockTransformItems,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tgetBlocksByClientId,\n\t\t\tcanRemoveBlocks,\n\t\t} = select( blockEditorStore );\n\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlocks = getBlocksByClientId( selectedBlockClientIds );\n\n\t\t// selectedBlocks can have `null`s when something tries to call `selectBlock` with an inexistent clientId.\n\t\t// These nulls will cause fatal errors down the line.\n\t\t// In order to prevent discrepancies between selectedBlockClientIds and selectedBlocks, we effectively treat the entire selection as invalid.\n\t\t// @see https://github.com/WordPress/gutenberg/pull/59410#issuecomment-2006304536\n\t\tif ( selectedBlocks.filter( ( block ) => ! block ).length > 0 ) {\n\t\t\treturn {\n\t\t\t\tinvalidSelection: true,\n\t\t\t};\n\t\t}\n\n\t\tconst rootClientId = getBlockRootClientId(\n\t\t\tselectedBlockClientIds[ 0 ]\n\t\t);\n\t\treturn {\n\t\t\tblocks: selectedBlocks,\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tpossibleBlockTransformations: getBlockTransformItems(\n\t\t\t\tselectedBlocks,\n\t\t\t\trootClientId\n\t\t\t),\n\t\t\tcanRemove: canRemoveBlocks( selectedBlockClientIds ),\n\t\t\tinvalidSelection: false,\n\t\t};\n\t}, [] );\n\n\tif ( invalidSelection ) {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t\tcommands: [],\n\t\t};\n\t}\n\tconst isTemplate = blocks.length === 1 && isTemplatePart( blocks[ 0 ] );\n\n\tfunction selectForMultipleBlocks( insertedBlocks ) {\n\t\tif ( insertedBlocks.length > 1 ) {\n\t\t\tmultiSelect(\n\t\t\t\tinsertedBlocks[ 0 ].clientId,\n\t\t\t\tinsertedBlocks[ insertedBlocks.length - 1 ].clientId\n\t\t\t);\n\t\t}\n\t}\n\n\t// Simple block tranformation based on the `Block Transforms` API.\n\tfunction onBlockTransform( name ) {\n\t\tconst newBlocks = switchToBlockType( blocks, name );\n\t\treplaceBlocks( clientIds, newBlocks );\n\t\tselectForMultipleBlocks( newBlocks );\n\t}\n\n\t/**\n\t * The `isTemplate` check is a stopgap solution here.\n\t * Ideally, the Transforms API should handle this\n\t * by allowing to exclude blocks from wildcard transformations.\n\t */\n\tconst hasPossibleBlockTransformations =\n\t\t!! possibleBlockTransformations.length && canRemove && ! isTemplate;\n\n\tif (\n\t\t! clientIds ||\n\t\tclientIds.length < 1 ||\n\t\t! hasPossibleBlockTransformations\n\t) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst commands = possibleBlockTransformations.map( ( transformation ) => {\n\t\tconst { name, title, icon } = transformation;\n\t\treturn {\n\t\t\tname: 'core/block-editor/transform-to-' + name.replace( '/', '-' ),\n\t\t\t// translators: %s: block title/name.\n\t\t\tlabel: sprintf( __( 'Transform to %s' ), title ),\n\t\t\ticon: ,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tonBlockTransform( name );\n\t\t\t\tclose();\n\t\t\t},\n\t\t};\n\t} );\n\n\treturn { isLoading: false, commands };\n};\n\nconst useActionsCommands = () => {\n\tconst { clientIds } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlockClientIds } = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t};\n\t}, [] );\n\n\tconst { getBlockRootClientId, canMoveBlocks, getBlockCount } =\n\t\tuseSelect( blockEditorStore );\n\n\tconst { setBlockMovingClientId, setNavigationMode, selectBlock } =\n\t\tuseDispatch( blockEditorStore );\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\n\tconst canMove =\n\t\tcanMoveBlocks( clientIds ) && getBlockCount( rootClientId ) !== 1;\n\n\tconst commands = [];\n\n\tif ( canMove ) {\n\t\tcommands.push( {\n\t\t\tname: 'move-to',\n\t\t\tlabel: __( 'Move to' ),\n\t\t\tcallback: () => {\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t\tsetBlockMovingClientId( clientIds[ 0 ] );\n\t\t\t},\n\t\t\ticon: move,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nconst useQuickActionsCommands = () => {\n\tconst { clientIds, isUngroupable, isGroupable } = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable,\n\t\t\tisGroupable: _isGroupable,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\treturn {\n\t\t\tclientIds: selectedBlockClientIds,\n\t\t\tisUngroupable: _isUngroupable(),\n\t\t\tisGroupable: _isGroupable(),\n\t\t};\n\t}, [] );\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockRootClientId,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst { getDefaultBlockName, getGroupingBlockName } =\n\t\tuseSelect( blocksStore );\n\n\tconst blocks = getBlocksByClientId( clientIds );\n\n\tconst {\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tduplicateBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst onGroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst groupingBlockName = getGroupingBlockName();\n\n\t\t// Activate the `transform` on `core/group` which does the conversion.\n\t\tconst newBlocks = switchToBlockType( blocks, groupingBlockName );\n\n\t\tif ( ! newBlocks ) {\n\t\t\treturn;\n\t\t}\n\t\treplaceBlocks( clientIds, newBlocks );\n\t};\n\tconst onUngroup = () => {\n\t\tif ( ! blocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst innerBlocks = blocks[ 0 ].innerBlocks;\n\n\t\tif ( ! innerBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\treplaceBlocks( clientIds, innerBlocks );\n\t};\n\n\tif ( ! clientIds || clientIds.length < 1 ) {\n\t\treturn { isLoading: false, commands: [] };\n\t}\n\n\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\tconst canInsertDefaultBlock = canInsertBlockType(\n\t\tgetDefaultBlockName(),\n\t\trootClientId\n\t);\n\tconst canDuplicate = blocks.every( ( block ) => {\n\t\treturn (\n\t\t\t!! block &&\n\t\t\thasBlockSupport( block.name, 'multiple', true ) &&\n\t\t\tcanInsertBlockType( block.name, rootClientId )\n\t\t);\n\t} );\n\tconst canRemove = canRemoveBlocks( clientIds );\n\n\tconst commands = [];\n\n\tif ( canDuplicate ) {\n\t\tcommands.push( {\n\t\t\tname: 'duplicate',\n\t\t\tlabel: __( 'Duplicate' ),\n\t\t\tcallback: () => duplicateBlocks( clientIds, true ),\n\t\t\ticon: copy,\n\t\t} );\n\t}\n\n\tif ( canInsertDefaultBlock ) {\n\t\tcommands.push(\n\t\t\t{\n\t\t\t\tname: 'add-before',\n\t\t\t\tlabel: __( 'Add before' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ 0 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertBeforeBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-after',\n\t\t\t\tlabel: __( 'Add after' ),\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst clientId = Array.isArray( clientIds )\n\t\t\t\t\t\t? clientIds[ clientIds.length - 1 ]\n\t\t\t\t\t\t: clientId;\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t},\n\t\t\t\ticon: add,\n\t\t\t}\n\t\t);\n\t}\n\n\tif ( isGroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'Group',\n\t\t\tlabel: __( 'Group' ),\n\t\t\tcallback: onGroup,\n\t\t\ticon: group,\n\t\t} );\n\t}\n\n\tif ( isUngroupable ) {\n\t\tcommands.push( {\n\t\t\tname: 'ungroup',\n\t\t\tlabel: __( 'Ungroup' ),\n\t\t\tcallback: onUngroup,\n\t\t\ticon: ungroup,\n\t\t} );\n\t}\n\n\tif ( canRemove ) {\n\t\tcommands.push( {\n\t\t\tname: 'remove',\n\t\t\tlabel: __( 'Delete' ),\n\t\t\tcallback: () => removeBlocks( clientIds, true ),\n\t\t\ticon: remove,\n\t\t} );\n\t}\n\n\treturn {\n\t\tisLoading: false,\n\t\tcommands: commands.map( ( command ) => ( {\n\t\t\t...command,\n\t\t\tname: 'core/block-editor/action-' + command.name,\n\t\t\tcallback: ( { close } ) => {\n\t\t\t\tcommand.callback();\n\t\t\t\tclose();\n\t\t\t},\n\t\t} ) ),\n\t};\n};\n\nexport const useBlockCommands = () => {\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockTransforms',\n\t\thook: useTransformCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockActions',\n\t\thook: useActionsCommands,\n\t} );\n\tuseCommandLoader( {\n\t\tname: 'core/block-editor/blockQuickActions',\n\t\thook: useQuickActionsCommands,\n\t\tcontext: 'block-selection-edit',\n\t} );\n};\n","/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../block-list';\nimport BlockTools from '../block-tools';\nimport EditorStyles from '../editor-styles';\nimport Iframe from '../iframe';\nimport WritingFlow from '../writing-flow';\nimport { useMouseMoveTypingReset } from '../observe-typing';\nimport { useBlockSelectionClearer } from '../block-selection-clearer';\nimport { useBlockCommands } from '../use-block-commands';\n\n// EditorStyles is a memoized component, so avoid passing a new\n// object reference on each render.\nconst EDITOR_STYLE_TRANSFORM_OPTIONS = {\n\t// Don't transform selectors that already specify `.editor-styles-wrapper`.\n\tignoredSelectors: [ /\\.editor-styles-wrapper/gi ],\n};\n\nexport function ExperimentalBlockCanvas( {\n\tshouldIframe = true,\n\theight = '300px',\n\tchildren = ,\n\tstyles,\n\tcontentRef: contentRefProp,\n\tiframeProps,\n} ) {\n\tuseBlockCommands();\n\tconst resetTypingRef = useMouseMoveTypingReset();\n\tconst clearerRef = useBlockSelectionClearer();\n\tconst localRef = useRef();\n\tconst contentRef = useMergeRefs( [ contentRefProp, clearerRef, localRef ] );\n\n\tif ( ! shouldIframe ) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t{ children }\n\t\t\t\n\t\t\n\t);\n}\n\n/**\n * BlockCanvas component is a component used to display the canvas of the block editor.\n * What we call the canvas is an iframe containing the block list that you can manipulate.\n * The component is also responsible of wiring up all the necessary hooks to enable\n * the keyboard navigation across blocks in the editor and inject content styles into the iframe.\n *\n * @example\n *\n * ```jsx\n * function MyBlockEditor() {\n * const [ blocks, updateBlocks ] = useState([]);\n * return (\n * \n * \n * \n * );\n * }\n * ```\n *\n * @param {Object} props Component props.\n * @param {string} props.height Canvas height, defaults to 300px.\n * @param {Array} props.styles Content styles to inject into the iframe.\n * @param {Element} props.children Content of the canvas, defaults to the BlockList component.\n * @return {Element} Block Breadcrumb.\n */\nfunction BlockCanvas( { children, height, styles } ) {\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\nexport default BlockCanvas;\n","/**\n * WordPress dependencies\n */\nimport {\n\tToolbarButton,\n\tDropdown,\n\tToolbarGroup,\n\tSVG,\n\tPath,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport deprecated from '@wordpress/deprecated';\n\nconst ColorSelectorSVGIcon = () => (\n\t\n\t\t\n\t\n);\n\n/**\n * Color Selector Icon component.\n *\n * @param {Object} props Component properties.\n * @param {Object} props.style Style object.\n * @param {string} props.className Class name for component.\n *\n * @return {*} React Icon component.\n */\nconst ColorSelectorIcon = ( { style, className } ) => {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t);\n};\n\n/**\n * Renders the Colors Selector Toolbar with the icon button.\n *\n * @param {Object} props Component properties.\n * @param {Object} props.TextColor Text color component that wraps icon.\n * @param {Object} props.BackgroundColor Background color component that wraps icon.\n *\n * @return {*} React toggle button component.\n */\nconst renderToggleComponent =\n\t( { TextColor, BackgroundColor } ) =>\n\t( { onToggle, isOpen } ) => {\n\t\tconst openOnArrowDown = ( event ) => {\n\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonToggle();\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\n\t\t);\n\t};\n\nconst BlockColorsStyleSelector = ( { children, ...other } ) => {\n\tdeprecated( `wp.blockEditor.BlockColorsStyleSelector`, {\n\t\talternative: 'block supports API',\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t} );\n\n\treturn (\n\t\t children }\n\t\t/>\n\t);\n};\n\nexport default BlockColorsStyleSelector;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst listView = (\n\t\n\t\t\n\t\n);\n\nexport default listView;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\nexport const ListViewContext = createContext( {} );\n\nexport const useListViewContext = () => useContext( ListViewContext );\n","/**\n * WordPress dependencies\n */\nimport { useRef, useEffect } from '@wordpress/element';\n\n/**\n * A component specifically designed to be used as an element referenced\n * by ARIA attributes such as `aria-labelledby` or `aria-describedby`.\n *\n * @param {Object} props Props.\n * @param {import('react').ReactNode} props.children\n */\nexport default function AriaReferencedText( { children, ...props } ) {\n\tconst ref = useRef();\n\n\tuseEffect( () => {\n\t\tif ( ref.current ) {\n\t\t\t// This seems like a no-op, but it fixes a bug in Firefox where\n\t\t\t// it fails to recompute the text when only the text node changes.\n\t\t\t// @see https://github.com/WordPress/gutenberg/pull/51035\n\t\t\tref.current.textContent = ref.current.textContent;\n\t\t}\n\t}, [ children ] );\n\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef, useEffect } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport { useListViewContext } from './context';\nimport Inserter from '../inserter';\nimport AriaReferencedText from './aria-referenced-text';\n\nexport const Appender = forwardRef(\n\t( { nestingLevel, blockCount, clientId, ...props }, ref ) => {\n\t\tconst { insertedBlock, setInsertedBlock } = useListViewContext();\n\n\t\tconst instanceId = useInstanceId( Appender );\n\t\tconst hideInserter = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getTemplateLock, __unstableGetEditorMode } =\n\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\treturn (\n\t\t\t\t\t!! getTemplateLock( clientId ) ||\n\t\t\t\t\t__unstableGetEditorMode() === 'zoom-out'\n\t\t\t\t);\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\t\tconst blockTitle = useBlockDisplayTitle( {\n\t\t\tclientId,\n\t\t\tcontext: 'list-view',\n\t\t} );\n\n\t\tconst insertedBlockTitle = useBlockDisplayTitle( {\n\t\t\tclientId: insertedBlock?.clientId,\n\t\t\tcontext: 'list-view',\n\t\t} );\n\n\t\tuseEffect( () => {\n\t\t\tif ( ! insertedBlockTitle?.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tspeak(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: name of block being inserted (i.e. Paragraph, Image, Group etc)\n\t\t\t\t\t__( '%s block inserted' ),\n\t\t\t\t\tinsertedBlockTitle\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t}, [ insertedBlockTitle ] );\n\n\t\tif ( hideInserter ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst descriptionId = `list-view-appender__${ instanceId }`;\n\t\tconst description = sprintf(\n\t\t\t/* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */\n\t\t\t__( 'Append to %1$s block at position %2$d, Level %3$d' ),\n\t\t\tblockTitle,\n\t\t\tblockCount + 1,\n\t\t\tnestingLevel\n\t\t);\n\n\t\treturn (\n\t\t\t
    \n\t\t\t\t {\n\t\t\t\t\t\tif ( maybeInsertedBlock?.clientId ) {\n\t\t\t\t\t\t\tsetInsertedBlock( maybeInsertedBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\t{ description }\n\t\t\t\t\n\t\t\t
    \n\t\t);\n\t}\n);\n","/**\n * External dependencies\n */\nimport { animated } from '@react-spring/web';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalTreeGridRow as TreeGridRow } from '@wordpress/components';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMovingAnimation from '../use-moving-animation';\n\nconst AnimatedTreeGridRow = animated( TreeGridRow );\n\nconst ListViewLeaf = forwardRef(\n\t(\n\t\t{\n\t\t\tisDragged,\n\t\t\tisSelected,\n\t\t\tposition,\n\t\t\tlevel,\n\t\t\trowCount,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tpath,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst animationRef = useMovingAnimation( {\n\t\t\tclientId: props[ 'data-block' ],\n\t\t\tenableAnimation: true,\n\t\t\ttriggerAnimationOnChange: path,\n\t\t} );\n\n\t\tconst mergedRef = useMergeRefs( [ ref, animationRef ] );\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t}\n);\n\nexport default ListViewLeaf;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst pinSmall = (\n\t\n\t\t\n\t\n);\n\nexport default pinSmall;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst lockSmall = (\n\t\n\t\t\n\t\n);\n\nexport default lockSmall;\n","/**\n * WordPress dependencies\n */\nimport { chevronRightSmall, chevronLeftSmall, Icon } from '@wordpress/icons';\nimport { isRTL } from '@wordpress/i18n';\n\nexport default function ListViewExpander( { onClick } ) {\n\treturn (\n\t\t// Keyboard events are handled by TreeGrid see: components/src/tree-grid/index.js\n\t\t//\n\t\t// The expander component is implemented as a pseudo element in the w3 example\n\t\t// https://www.w3.org/TR/wai-aria-practices/examples/treegrid/treegrid-1.html\n\t\t//\n\t\t// We've mimicked this by adding an icon with aria-hidden set to true to hide this from the accessibility tree.\n\t\t// For the current tree grid implementation, please do not try to make this a button.\n\t\t//\n\t\t// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n\t\t onClick( event, { forceToggle: true } ) }\n\t\t\taria-hidden=\"true\"\n\t\t\tdata-testid=\"list-view-expander\"\n\t\t>\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n// Maximum number of images to display in a list view row.\nconst MAX_IMAGES = 3;\n\nfunction getImage( block ) {\n\tif ( block.name !== 'core/image' ) {\n\t\treturn;\n\t}\n\n\tif ( block.attributes?.url ) {\n\t\treturn {\n\t\t\turl: block.attributes.url,\n\t\t\talt: block.attributes.alt,\n\t\t\tclientId: block.clientId,\n\t\t};\n\t}\n}\n\nfunction getImagesFromGallery( block ) {\n\tif ( block.name !== 'core/gallery' || ! block.innerBlocks ) {\n\t\treturn [];\n\t}\n\n\tconst images = [];\n\n\tfor ( const innerBlock of block.innerBlocks ) {\n\t\tconst img = getImage( innerBlock );\n\t\tif ( img ) {\n\t\t\timages.push( img );\n\t\t}\n\t\tif ( images.length >= MAX_IMAGES ) {\n\t\t\treturn images;\n\t\t}\n\t}\n\n\treturn images;\n}\n\nfunction getImagesFromBlock( block, isExpanded ) {\n\tconst img = getImage( block );\n\tif ( img ) {\n\t\treturn [ img ];\n\t}\n\treturn isExpanded ? [] : getImagesFromGallery( block );\n}\n\n/**\n * Get a block's preview images for display within a list view row.\n *\n * TODO: Currently only supports images from the core/image and core/gallery\n * blocks. This should be expanded to support other blocks that have images,\n * potentially via an API that blocks can opt into / provide their own logic.\n *\n * @param {Object} props Hook properties.\n * @param {string} props.clientId The block's clientId.\n * @param {boolean} props.isExpanded Whether or not the block is expanded in the list view.\n * @return {Array} Images.\n */\nexport default function useListViewImages( { clientId, isExpanded } ) {\n\tconst { block } = useSelect(\n\t\t( select ) => {\n\t\t\tconst _block = select( blockEditorStore ).getBlock( clientId );\n\t\t\treturn { block: _block };\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst images = useMemo( () => {\n\t\treturn getImagesFromBlock( block, isExpanded );\n\t}, [ block, isExpanded ] );\n\n\treturn images;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { forwardRef } from '@wordpress/element';\nimport { Icon, lockSmall as lock, pinSmall } from '@wordpress/icons';\nimport { SPACE, ENTER } from '@wordpress/keycodes';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport ListViewExpander from './expander';\nimport { useBlockLock } from '../block-lock';\nimport useListViewImages from './use-list-view-images';\nimport { store as blockEditorStore } from '../../store';\n\nfunction ListViewBlockSelectButton(\n\t{\n\t\tclassName,\n\t\tblock: { clientId },\n\t\tonClick,\n\t\tonContextMenu,\n\t\tonMouseDown,\n\t\tonToggleExpanded,\n\t\ttabIndex,\n\t\tonFocus,\n\t\tonDragStart,\n\t\tonDragEnd,\n\t\tdraggable,\n\t\tisExpanded,\n\t\tariaDescribedBy,\n\t},\n\tref\n) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId,\n\t\tcontext: 'list-view',\n\t} );\n\tconst { isLocked } = useBlockLock( clientId );\n\tconst { isContentOnly } = useSelect(\n\t\t( select ) => ( {\n\t\t\tisContentOnly:\n\t\t\t\tselect( blockEditorStore ).getBlockEditingMode( clientId ) ===\n\t\t\t\t'contentOnly',\n\t\t} ),\n\t\t[ clientId ]\n\t);\n\tconst shouldShowLockIcon = isLocked && ! isContentOnly;\n\tconst isSticky = blockInformation?.positionType === 'sticky';\n\tconst images = useListViewImages( { clientId, isExpanded } );\n\n\t// The `href` attribute triggers the browser's native HTML drag operations.\n\t// When the link is dragged, the element's outerHTML is set in DataTransfer object as text/html.\n\t// We need to clear any HTML drag data to prevent `pasteHandler` from firing\n\t// inside the `useOnBlockDrop` hook.\n\tconst onDragStartHandler = ( event ) => {\n\t\tevent.dataTransfer.clearData();\n\t\tonDragStart?.( event );\n\t};\n\n\t/**\n\t * @param {KeyboardEvent} event\n\t */\n\tfunction onKeyDown( event ) {\n\t\tif ( event.keyCode === ENTER || event.keyCode === SPACE ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ blockTitle }\n\t\t\t\t\n\t\t\t\t{ blockInformation?.anchor && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ blockInformation.anchor }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ isSticky && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t{ images.length ? (\n\t\t\t\t\t\n\t\t\t\t\t\t{ images.map( ( image, index ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t\n\t\t\t\t) : null }\n\t\t\t\t{ shouldShowLockIcon && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\nexport default forwardRef( ListViewBlockSelectButton );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlockSelectButton from './block-select-button';\nimport BlockDraggable from '../block-draggable';\nimport { store as blockEditorStore } from '../../store';\nimport { useListViewContext } from './context';\n\nconst ListViewBlockContents = forwardRef(\n\t(\n\t\t{\n\t\t\tonClick,\n\t\t\tonToggleExpanded,\n\t\t\tblock,\n\t\t\tisSelected,\n\t\t\tposition,\n\t\t\tsiblingBlockCount,\n\t\t\tlevel,\n\t\t\tisExpanded,\n\t\t\tselectedClientIds,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst { clientId } = block;\n\n\t\tconst { blockMovingClientId, selectedBlockInBlockEditor } = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { hasBlockMovingClientId, getSelectedBlockClientId } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\treturn {\n\t\t\t\t\tblockMovingClientId: hasBlockMovingClientId(),\n\t\t\t\t\tselectedBlockInBlockEditor: getSelectedBlockClientId(),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[]\n\t\t);\n\n\t\tconst { AdditionalBlockContent, insertedBlock, setInsertedBlock } =\n\t\t\tuseListViewContext();\n\n\t\tconst isBlockMoveTarget =\n\t\t\tblockMovingClientId && selectedBlockInBlockEditor === clientId;\n\n\t\tconst className = clsx( 'block-editor-list-view-block-contents', {\n\t\t\t'is-dropping-before': isBlockMoveTarget,\n\t\t} );\n\n\t\t// Only include all selected blocks if the currently clicked on block\n\t\t// is one of the selected blocks. This ensures that if a user attempts\n\t\t// to drag a block that isn't part of the selection, they're still able\n\t\t// to drag it and rearrange its position.\n\t\tconst draggableClientIds = selectedClientIds.includes( clientId )\n\t\t\t? selectedClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ AdditionalBlockContent && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\t\n\t\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n);\n\nexport default ListViewBlockContents;\n","/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { focus } from '@wordpress/dom';\n\nexport const getBlockPositionDescription = ( position, siblingCount, level ) =>\n\tsprintf(\n\t\t/* translators: 1: The numerical position of the block. 2: The total number of blocks. 3. The level of nesting for the block. */\n\t\t__( 'Block %1$d of %2$d, Level %3$d.' ),\n\t\tposition,\n\t\tsiblingCount,\n\t\tlevel\n\t);\n\nexport const getBlockPropertiesDescription = ( blockInformation, isLocked ) =>\n\t[\n\t\tblockInformation?.positionLabel\n\t\t\t? `${ sprintf(\n\t\t\t\t\t// translators: %s: Position of selected block, e.g. \"Sticky\" or \"Fixed\".\n\t\t\t\t\t__( 'Position: %s' ),\n\t\t\t\t\tblockInformation.positionLabel\n\t\t\t ) }.`\n\t\t\t: undefined,\n\t\tisLocked ? __( 'This block is locked.' ) : undefined,\n\t]\n\t\t.filter( Boolean )\n\t\t.join( ' ' );\n\n/**\n * Returns true if the client ID occurs within the block selection or multi-selection,\n * or false otherwise.\n *\n * @param {string} clientId Block client ID.\n * @param {string|string[]} selectedBlockClientIds Selected block client ID, or an array of multi-selected blocks client IDs.\n *\n * @return {boolean} Whether the block is in multi-selection set.\n */\nexport const isClientIdSelected = ( clientId, selectedBlockClientIds ) =>\n\tArray.isArray( selectedBlockClientIds ) && selectedBlockClientIds.length\n\t\t? selectedBlockClientIds.indexOf( clientId ) !== -1\n\t\t: selectedBlockClientIds === clientId;\n\n/**\n * From a start and end clientId of potentially different nesting levels,\n * return the nearest-depth ids that have a common level of depth in the\n * nesting hierarchy. For multiple block selection, this ensure that the\n * selection is always at the same nesting level, and not split across\n * separate levels.\n *\n * @param {string} startId The first id of a selection.\n * @param {string} endId The end id of a selection, usually one that has been clicked on.\n * @param {string[]} startParents An array of ancestor ids for the start id, in descending order.\n * @param {string[]} endParents An array of ancestor ids for the end id, in descending order.\n * @return {Object} An object containing the start and end ids.\n */\nexport function getCommonDepthClientIds(\n\tstartId,\n\tendId,\n\tstartParents,\n\tendParents\n) {\n\tconst startPath = [ ...startParents, startId ];\n\tconst endPath = [ ...endParents, endId ];\n\tconst depth = Math.min( startPath.length, endPath.length ) - 1;\n\tconst start = startPath[ depth ];\n\tconst end = endPath[ depth ];\n\n\treturn {\n\t\tstart,\n\t\tend,\n\t};\n}\n\n/**\n * Shift focus to the list view item associated with a particular clientId.\n *\n * @typedef {import('@wordpress/element').RefObject} RefObject\n *\n * @param {string} focusClientId The client ID of the block to focus.\n * @param {?HTMLElement} treeGridElement The container element to search within.\n */\nexport function focusListItem( focusClientId, treeGridElement ) {\n\tconst getFocusElement = () => {\n\t\tconst row = treeGridElement?.querySelector(\n\t\t\t`[role=row][data-block=\"${ focusClientId }\"]`\n\t\t);\n\t\tif ( ! row ) {\n\t\t\treturn null;\n\t\t}\n\t\t// Focus the first focusable in the row, which is the ListViewBlockSelectButton.\n\t\treturn focus.focusable.find( row )[ 0 ];\n\t};\n\n\tlet focusElement = getFocusElement();\n\tif ( focusElement ) {\n\t\tfocusElement.focus();\n\t} else {\n\t\t// The element hasn't been painted yet. Defer focusing on the next frame.\n\t\t// This could happen when all blocks have been deleted and the default block\n\t\t// hasn't been added to the editor yet.\n\t\twindow.requestAnimationFrame( () => {\n\t\t\tfocusElement = getFocusElement();\n\n\t\t\t// Ignore if the element still doesn't exist.\n\t\t\tif ( focusElement ) {\n\t\t\t\tfocusElement.focus();\n\t\t\t}\n\t\t} );\n\t}\n}\n\n/**\n * Get values for the block that flag whether the block should be displaced up or down,\n * whether the block is being nested, and whether the block appears after the dragged\n * blocks. These values are used to determine the class names to apply to the block.\n * The list view rows are displaced visually via CSS rules. Displacement rules:\n * - `normal`: no displacement — used to apply a translateY of `0` so that the block\n * appears in its original position, and moves to that position smoothly when dragging\n * outside of the list view area.\n * - `up`: the block should be displaced up, creating room beneath the block for the drop indicator.\n * - `down`: the block should be displaced down, creating room above the block for the drop indicator.\n *\n * @param {Object} props\n * @param {Object} props.blockIndexes The indexes of all the blocks in the list view, keyed by clientId.\n * @param {number|null|undefined} props.blockDropTargetIndex The index of the block that the user is dropping to.\n * @param {?string} props.blockDropPosition The position relative to the block that the user is dropping to.\n * @param {string} props.clientId The client id for the current block.\n * @param {?number} props.firstDraggedBlockIndex The index of the first dragged block.\n * @param {?boolean} props.isDragged Whether the current block is being dragged. Dragged blocks skip displacement.\n * @return {Object} An object containing the `displacement`, `isAfterDraggedBlocks` and `isNesting` values.\n */\nexport function getDragDisplacementValues( {\n\tblockIndexes,\n\tblockDropTargetIndex,\n\tblockDropPosition,\n\tclientId,\n\tfirstDraggedBlockIndex,\n\tisDragged,\n} ) {\n\tlet displacement;\n\tlet isNesting;\n\tlet isAfterDraggedBlocks;\n\n\tif ( ! isDragged ) {\n\t\tisNesting = false;\n\t\tconst thisBlockIndex = blockIndexes[ clientId ];\n\t\tisAfterDraggedBlocks = thisBlockIndex > firstDraggedBlockIndex;\n\n\t\t// Determine where to displace the position of the current block, relative\n\t\t// to the blocks being dragged (in their original position) and the drop target\n\t\t// (the position where a user is currently dragging the blocks to).\n\t\tif (\n\t\t\tblockDropTargetIndex !== undefined &&\n\t\t\tblockDropTargetIndex !== null &&\n\t\t\tfirstDraggedBlockIndex !== undefined\n\t\t) {\n\t\t\t// If the block is being dragged and there is a valid drop target,\n\t\t\t// determine if the block being rendered should be displaced up or down.\n\n\t\t\tif ( thisBlockIndex !== undefined ) {\n\t\t\t\tif (\n\t\t\t\t\tthisBlockIndex >= firstDraggedBlockIndex &&\n\t\t\t\t\tthisBlockIndex < blockDropTargetIndex\n\t\t\t\t) {\n\t\t\t\t\t// If the current block appears after the set of dragged blocks\n\t\t\t\t\t// (in their original position), but is before the drop target,\n\t\t\t\t\t// then the current block should be displaced up.\n\t\t\t\t\tdisplacement = 'up';\n\t\t\t\t} else if (\n\t\t\t\t\tthisBlockIndex < firstDraggedBlockIndex &&\n\t\t\t\t\tthisBlockIndex >= blockDropTargetIndex\n\t\t\t\t) {\n\t\t\t\t\t// If the current block appears before the set of dragged blocks\n\t\t\t\t\t// (in their original position), but is after the drop target,\n\t\t\t\t\t// then the current block should be displaced down.\n\t\t\t\t\tdisplacement = 'down';\n\t\t\t\t} else {\n\t\t\t\t\tdisplacement = 'normal';\n\t\t\t\t}\n\t\t\t\tisNesting =\n\t\t\t\t\ttypeof blockDropTargetIndex === 'number' &&\n\t\t\t\t\tblockDropTargetIndex - 1 === thisBlockIndex &&\n\t\t\t\t\tblockDropPosition === 'inside';\n\t\t\t}\n\t\t} else if (\n\t\t\tblockDropTargetIndex === null &&\n\t\t\tfirstDraggedBlockIndex !== undefined\n\t\t) {\n\t\t\t// A `null` value for `blockDropTargetIndex` indicates that the\n\t\t\t// drop target is outside of the valid areas within the list view.\n\t\t\t// In this case, the drag is still active, but as there is no\n\t\t\t// valid drop target, we should remove the gap indicating where\n\t\t\t// the block would be inserted.\n\t\t\tif (\n\t\t\t\tthisBlockIndex !== undefined &&\n\t\t\t\tthisBlockIndex >= firstDraggedBlockIndex\n\t\t\t) {\n\t\t\t\tdisplacement = 'up';\n\t\t\t} else {\n\t\t\t\tdisplacement = 'normal';\n\t\t\t}\n\t\t} else if (\n\t\t\tblockDropTargetIndex !== undefined &&\n\t\t\tblockDropTargetIndex !== null &&\n\t\t\tfirstDraggedBlockIndex === undefined\n\t\t) {\n\t\t\t// If the blockdrop target is defined, but there are no dragged blocks,\n\t\t\t// then the block should be displaced relative to the drop target.\n\t\t\tif ( thisBlockIndex !== undefined ) {\n\t\t\t\tif ( thisBlockIndex < blockDropTargetIndex ) {\n\t\t\t\t\tdisplacement = 'normal';\n\t\t\t\t} else {\n\t\t\t\t\tdisplacement = 'down';\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( blockDropTargetIndex === null ) {\n\t\t\tdisplacement = 'normal';\n\t\t}\n\t}\n\n\treturn {\n\t\tdisplacement,\n\t\tisNesting,\n\t\tisAfterDraggedBlocks,\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport useListViewScrollIntoView from './use-list-view-scroll-into-view';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport { useListViewContext } from './context';\nimport {\n\tgetBlockPositionDescription,\n\tgetBlockPropertiesDescription,\n\tfocusListItem,\n} from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useBlockLock } from '../block-lock';\nimport AriaReferencedText from './aria-referenced-text';\nimport { unlock } from '../../lock-unlock';\n\nfunction ListViewBlock( {\n\tblock: { clientId },\n\tdisplacement,\n\tisAfterDraggedBlocks,\n\tisDragged,\n\tisNesting,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n\tisSyncedBranch,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst rowRef = useRef( null );\n\tconst settingsRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ settingsAnchorRect, setSettingsAnchorRect ] = useState();\n\n\tconst { isLocked, canEdit, canMove } = useBlockLock( clientId );\n\n\tconst isFirstSelectedBlock =\n\t\tisSelected && selectedClientIds[ 0 ] === clientId;\n\tconst isLastSelectedBlock =\n\t\tisSelected &&\n\t\tselectedClientIds[ selectedClientIds.length - 1 ] === clientId;\n\n\tconst {\n\t\ttoggleBlockHighlight,\n\t\tduplicateBlocks,\n\t\tmultiSelect,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tsetOpenedBlockSettingsMenu,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetSelectedBlockClientIds,\n\t\tgetPreviousBlockClientId,\n\t\tgetBlockRootClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockParents,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t\tisGroupable,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\tconst { block, blockName, allowRightClickOverrides } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockName, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( clientId ),\n\t\t\t\tblockName: getBlockName( clientId ),\n\t\t\t\tallowRightClickOverrides:\n\t\t\t\t\tgetSettings().allowRightClickOverrides,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst showBlockActions =\n\t\t// When a block hides its toolbar it also hides the block settings menu,\n\t\t// since that menu is part of the toolbar in the editor canvas.\n\t\t// List View respects this by also hiding the block settings menu.\n\t\thasBlockSupport( blockName, '__experimentalToolbar', true );\n\tconst instanceId = useInstanceId( ListViewBlock );\n\tconst descriptionId = `list-view-block-select-button__description-${ instanceId }`;\n\n\tconst {\n\t\texpand,\n\t\tcollapse,\n\t\tcollapseAll,\n\t\tBlockSettingsMenu,\n\t\tlistViewInstanceId,\n\t\texpandedState,\n\t\tsetInsertedBlock,\n\t\ttreeGridElementRef,\n\t\trootClientId,\n\t} = useListViewContext();\n\tconst isMatch = useShortcutEventMatch();\n\n\t// Determine which blocks to update:\n\t// If the current (focused) block is part of the block selection, use the whole selection.\n\t// If the focused block is not part of the block selection, only update the focused block.\n\tfunction getBlocksToUpdate() {\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst isUpdatingSelectedBlocks =\n\t\t\tselectedBlockClientIds.includes( clientId );\n\t\tconst firstBlockClientId = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds[ 0 ]\n\t\t\t: clientId;\n\t\tconst firstBlockRootClientId =\n\t\t\tgetBlockRootClientId( firstBlockClientId );\n\n\t\tconst blocksToUpdate = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn {\n\t\t\tblocksToUpdate,\n\t\t\tfirstBlockClientId,\n\t\t\tfirstBlockRootClientId,\n\t\t\tselectedBlockClientIds,\n\t\t};\n\t}\n\n\t/**\n\t * @param {KeyboardEvent} event\n\t */\n\tasync function onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not handle events if it comes from modals;\n\t\t// retain the default behavior for these keys.\n\t\tif ( event.target.closest( '[role=dialog]' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isDeleteKey = [ BACKSPACE, DELETE ].includes( event.keyCode );\n\n\t\t// If multiple blocks are selected, deselect all blocks when the user\n\t\t// presses the escape key.\n\t\tif (\n\t\t\tisMatch( 'core/block-editor/unselect', event ) &&\n\t\t\tselectedClientIds.length > 0\n\t\t) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tselectBlock( event, undefined );\n\t\t} else if (\n\t\t\tisDeleteKey ||\n\t\t\tisMatch( 'core/block-editor/remove', event )\n\t\t) {\n\t\t\tconst {\n\t\t\t\tblocksToUpdate: blocksToDelete,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\tselectedBlockClientIds,\n\t\t\t} = getBlocksToUpdate();\n\n\t\t\t// Don't update the selection if the blocks cannot be deleted.\n\t\t\tif ( ! canRemoveBlocks( blocksToDelete ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet blockToFocus =\n\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ) ??\n\t\t\t\t// If the previous block is not found (when the first block is deleted),\n\t\t\t\t// fallback to focus the parent block.\n\t\t\t\tfirstBlockRootClientId;\n\n\t\t\tremoveBlocks( blocksToDelete, false );\n\n\t\t\t// Update the selection if the original selection has been removed.\n\t\t\tconst shouldUpdateSelection =\n\t\t\t\tselectedBlockClientIds.length > 0 &&\n\t\t\t\tgetSelectedBlockClientIds().length === 0;\n\n\t\t\t// If there's no previous block nor parent block, focus the first block.\n\t\t\tif ( ! blockToFocus ) {\n\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t}\n\n\t\t\tupdateFocusAndSelection( blockToFocus, shouldUpdateSelection );\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate, firstBlockRootClientId } =\n\t\t\t\tgetBlocksToUpdate();\n\n\t\t\tconst canDuplicate = getBlocksByClientId( blocksToUpdate ).every(\n\t\t\t\t( blockToUpdate ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! blockToUpdate &&\n\t\t\t\t\t\thasBlockSupport(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\t'multiple',\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\tfirstBlockRootClientId\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( canDuplicate ) {\n\t\t\t\tconst updatedBlocks = await duplicateBlocks(\n\t\t\t\t\tblocksToUpdate,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tif ( updatedBlocks?.length ) {\n\t\t\t\t\t// If blocks have been duplicated, focus the first duplicated block.\n\t\t\t\t\tupdateFocusAndSelection( updatedBlocks[ 0 ], false );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertBeforeBlock( blocksToUpdate[ 0 ] );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertAfterBlock( blocksToUpdate.at( -1 ) );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { firstBlockRootClientId, selectedBlockClientIds } =\n\t\t\t\tgetBlocksToUpdate();\n\t\t\tconst blockClientIds = getBlockOrder( firstBlockRootClientId );\n\t\t\tif ( ! blockClientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a level.\n\t\t\t// This is a similar implementation to that used by `useSelectAll`.\n\t\t\t// `isShallowEqual` is used for the list view instead of a length check,\n\t\t\t// as the array of siblings of the currently focused block may be a different\n\t\t\t// set of blocks from the current block selection if the user is focused\n\t\t\t// on a different part of the list view from the block selection.\n\t\t\tif ( isShallowEqual( selectedBlockClientIds, blockClientIds ) ) {\n\t\t\t\t// Only select up a level if the first block is not the root block.\n\t\t\t\t// This ensures that the block selection can't break out of the root block\n\t\t\t\t// used by the list view, if the list view is only showing a partial hierarchy.\n\t\t\t\tif (\n\t\t\t\t\tfirstBlockRootClientId &&\n\t\t\t\t\tfirstBlockRootClientId !== rootClientId\n\t\t\t\t) {\n\t\t\t\t\tupdateFocusAndSelection( firstBlockRootClientId, true );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Select all while passing `null` to skip focusing to the editor canvas,\n\t\t\t// and retain focus within the list view.\n\t\t\tmultiSelect(\n\t\t\t\tblockClientIds[ 0 ],\n\t\t\t\tblockClientIds[ blockClientIds.length - 1 ],\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\tevent.preventDefault();\n\t\t\tconst { firstBlockClientId } = getBlocksToUpdate();\n\t\t\tconst blockParents = getBlockParents( firstBlockClientId, false );\n\t\t\t// Collapse all blocks.\n\t\t\tcollapseAll();\n\t\t\t// Expand all parents of the current block.\n\t\t\texpand( blockParents );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tif ( blocksToUpdate.length > 1 && isGroupable( blocksToUpdate ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( blocksToUpdate );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( blocksToUpdate, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\t\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t\t}\n\t\t}\n\t}\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\ttoggleBlockHighlight( clientId, true );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\ttoggleBlockHighlight( clientId, false );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst updateFocusAndSelection = useCallback(\n\t\t( focusClientId, shouldSelectBlock ) => {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, treeGridElementRef?.current );\n\t\t},\n\t\t[ selectBlock, treeGridElementRef ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\t// Allow right-clicking an item in the List View to open up the block settings dropdown.\n\tconst onContextMenu = useCallback(\n\t\t( event ) => {\n\t\t\tif ( showBlockActions && allowRightClickOverrides ) {\n\t\t\t\tsettingsRef.current?.click();\n\t\t\t\t// Ensure the position of the settings dropdown is at the cursor.\n\t\t\t\tsetSettingsAnchorRect(\n\t\t\t\t\tnew window.DOMRect( event.clientX, event.clientY, 0, 0 )\n\t\t\t\t);\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides, settingsRef, showBlockActions ]\n\t);\n\n\tconst onMouseDown = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent right-click from focusing the block,\n\t\t\t// because focus will be handled when opening the block settings dropdown.\n\t\t\tif ( allowRightClickOverrides && event.button === 2 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides ]\n\t);\n\n\tconst settingsPopoverAnchor = useMemo( () => {\n\t\tconst { ownerDocument } = rowRef?.current || {};\n\n\t\t// If no custom position is set, the settings dropdown will be anchored to the\n\t\t// DropdownMenu toggle button.\n\t\tif ( ! settingsAnchorRect || ! ownerDocument ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Position the settings dropdown at the cursor when right-clicking a block.\n\t\treturn {\n\t\t\townerDocument,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn settingsAnchorRect;\n\t\t\t},\n\t\t};\n\t}, [ settingsAnchorRect ] );\n\n\tconst clearSettingsAnchorRect = useCallback( () => {\n\t\t// Clear the custom position for the settings dropdown so that it is restored back\n\t\t// to being anchored to the DropdownMenu toggle button.\n\t\tsetSettingsAnchorRect( undefined );\n\t}, [ setSettingsAnchorRect ] );\n\n\t// Pass in a ref to the row, so that it can be scrolled\n\t// into view when selected. For long lists, the placeholder for the\n\t// selected block is also observed, within ListViewLeafPlaceholder.\n\tuseListViewScrollIntoView( {\n\t\tisSelected,\n\t\trowItemRef: rowRef,\n\t\tselectedClientIds,\n\t} );\n\n\t// When switching between rendering modes (such as template preview and content only),\n\t// it is possible for a block to temporarily be unavailable. In this case, we should not\n\t// render the leaf, to avoid errors further down the tree.\n\tif ( ! block ) {\n\t\treturn null;\n\t}\n\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\tconst blockPropertiesDescription = getBlockPropertiesDescription(\n\t\tblockInformation,\n\t\tisLocked\n\t);\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = clsx(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = clsx(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isFirstSelectedBlock }\n\t);\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( ! showBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = clsx( {\n\t\t'is-selected': isSelected,\n\t\t'is-first-selected': isFirstSelectedBlock,\n\t\t'is-last-selected': isLastSelectedBlock,\n\t\t'is-branch-selected': isBranchSelected,\n\t\t'is-synced-branch': isSyncedBranch,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': ! showBlockActions,\n\t\t'is-synced': blockInformation?.isSynced,\n\t\t'is-draggable': canMove,\n\t\t'is-displacement-normal': displacement === 'normal',\n\t\t'is-displacement-up': displacement === 'up',\n\t\t'is-displacement-down': displacement === 'down',\n\t\t'is-after-dragged-blocks': isAfterDraggedBlocks,\n\t\t'is-nesting': isNesting,\n\t} );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\t// Detect if there is a block in the canvas currently being edited and multi-selection is not happening.\n\tconst currentlyEditingBlockInCanvas =\n\t\tisSelected && selectedClientIds.length === 1;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ [\n\t\t\t\t\t\t\t\tblockPositionDescription,\n\t\t\t\t\t\t\t\tblockPropertiesDescription,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t\t\t\t.join( ' ' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\n\t\t\t{ showBlockActions && BlockSettingsMenu && (\n\t\t\t\t\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default memo( ListViewBlock );\n","/**\n * WordPress dependencies\n */\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useLayoutEffect } from '@wordpress/element';\n\nexport default function useListViewScrollIntoView( {\n\tisSelected,\n\tselectedClientIds,\n\trowItemRef,\n} ) {\n\tconst isSingleSelection = selectedClientIds.length === 1;\n\n\tuseLayoutEffect( () => {\n\t\t// Skip scrolling into view if this particular block isn't selected,\n\t\t// or if more than one block is selected overall. This is to avoid\n\t\t// scrolling the view in a multi selection where the user has intentionally\n\t\t// selected multiple blocks within the list view, but the initially\n\t\t// selected block may be out of view.\n\t\tif ( ! isSelected || ! isSingleSelection || ! rowItemRef.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( rowItemRef.current );\n\t\tconst { ownerDocument } = rowItemRef.current;\n\n\t\tconst windowScroll =\n\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\tscrollContainer === ownerDocument.documentElement;\n\n\t\t// If the there is no scroll container, of if the scroll container is the window,\n\t\t// do not scroll into view, as the block is already in view.\n\t\tif ( windowScroll || ! scrollContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rowRect = rowItemRef.current.getBoundingClientRect();\n\t\tconst scrollContainerRect = scrollContainer.getBoundingClientRect();\n\n\t\t// If the selected block is not currently visible, scroll to it.\n\t\tif (\n\t\t\trowRect.top < scrollContainerRect.top ||\n\t\t\trowRect.bottom > scrollContainerRect.bottom\n\t\t) {\n\t\t\trowItemRef.current.scrollIntoView();\n\t\t}\n\t}, [ isSelected, isSingleSelection, rowItemRef ] );\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridRow as TreeGridRow,\n\t__experimentalTreeGridCell as TreeGridCell,\n} from '@wordpress/components';\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { Appender } from './appender';\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { getDragDisplacementValues, isClientIdSelected } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @param {boolean} isExpandedByDefault flag to determine the default fallback expanded state.\n * @return {number} block count\n */\nfunction countBlocks(\n\tblock,\n\texpandedState,\n\tdraggedClientIds,\n\tisExpandedByDefault\n) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? isExpandedByDefault;\n\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer(\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer =\n\t( expandedState, draggedClientIds, isExpandedByDefault ) =>\n\t( count, block ) => {\n\t\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\t\tif ( isDragged ) {\n\t\t\treturn count;\n\t\t}\n\t\tconst isExpanded =\n\t\t\texpandedState[ block.clientId ] ?? isExpandedByDefault;\n\t\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\t\treturn (\n\t\t\t\tcount +\n\t\t\t\tcountBlocks(\n\t\t\t\t\tblock,\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn count + 1;\n\t};\n\nconst noop = () => {};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock = noop,\n\t\tshowBlockMovers,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t\tisExpanded,\n\t\tparentId,\n\t\tshouldShowInnerBlocks = true,\n\t\tisSyncedBranch = false,\n\t\tshowAppender: showAppenderProp = true,\n\t} = props;\n\n\tconst parentBlockInformation = useBlockDisplayInformation( parentId );\n\tconst syncedBranch = isSyncedBranch || !! parentBlockInformation?.isSynced;\n\n\tconst canParentExpand = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! parentId ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn select( blockEditorStore ).canEditBlock( parentId );\n\t\t},\n\t\t[ parentId ]\n\t);\n\n\tconst {\n\t\tblockDropPosition,\n\t\tblockDropTargetIndex,\n\t\tfirstDraggedBlockIndex,\n\t\tblockIndexes,\n\t\texpandedState,\n\t\tdraggedClientIds,\n\t} = useListViewContext();\n\n\tif ( ! canParentExpand ) {\n\t\treturn null;\n\t}\n\n\t// Only show the appender at the first level.\n\tconst showAppender = showAppenderProp && level === 1;\n\tconst filteredBlocks = blocks.filter( Boolean );\n\tconst blockCount = filteredBlocks.length;\n\t// The appender means an extra row in List View, so add 1 to the row count.\n\tconst rowCount = showAppender ? blockCount + 1 : blockCount;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\t\tisExpanded\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\t// Determine the displacement of the block while dragging. This\n\t\t\t\t// works out whether the current block should be displaced up or\n\t\t\t\t// down, relative to the dragged blocks and the drop target.\n\t\t\t\tconst { displacement, isAfterDraggedBlocks, isNesting } =\n\t\t\t\t\tgetDragDisplacementValues( {\n\t\t\t\t\t\tblockIndexes,\n\t\t\t\t\t\tblockDropTargetIndex,\n\t\t\t\t\t\tblockDropPosition,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tfirstDraggedBlockIndex,\n\t\t\t\t\t\tisDragged,\n\t\t\t\t\t} );\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\t\t\t\tconst blockInView = itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks = !! innerBlocks?.length;\n\n\t\t\t\tconst shouldExpand =\n\t\t\t\t\thasNestedBlocks && shouldShowInnerBlocks\n\t\t\t\t\t\t? expandedState[ clientId ] ?? isExpanded\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\n\t\t\t\t// To avoid performance issues, we only render blocks that are in view,\n\t\t\t\t// or blocks that are selected or dragged. If a block is selected,\n\t\t\t\t// it is only counted if it is the first of the block selection.\n\t\t\t\t// This prevents the entire tree from being rendered when a branch is\n\t\t\t\t// selected, or a user selects all blocks, while still enabling scroll\n\t\t\t\t// into view behavior when selecting a block or opening the list view.\n\t\t\t\t// The first and last blocks of the list are always rendered, to ensure\n\t\t\t\t// that Home and End keys work as expected.\n\t\t\t\tconst showBlock =\n\t\t\t\t\tisDragged ||\n\t\t\t\t\tblockInView ||\n\t\t\t\t\t( isSelected && clientId === selectedClientIds[ 0 ] ) ||\n\t\t\t\t\tindex === 0 ||\n\t\t\t\t\tindex === blockCount - 1;\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && shouldExpand && ! isDragged && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ showAppender && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ( treeGridCellProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default memo( ListViewBranch );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n\tPopover,\n} from '@wordpress/components';\n\nimport { getScrollContainer } from '@wordpress/dom';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport ListViewExpander from './expander';\n\nexport default function ListViewDropIndicatorPreview( {\n\tdraggedBlockClientId,\n\tlistViewRef,\n\tblockDropTarget,\n} ) {\n\tconst blockInformation = useBlockDisplayInformation( draggedBlockClientId );\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId: draggedBlockClientId,\n\t\tcontext: 'list-view',\n\t} );\n\n\tconst { rootClientId, clientId, dropPosition } = blockDropTarget || {};\n\n\tconst [ rootBlockElement, blockElement ] = useMemo( () => {\n\t\tif ( ! listViewRef.current ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// The rootClientId will be defined whenever dropping into inner\n\t\t// block lists, but is undefined when dropping at the root level.\n\t\tconst _rootBlockElement = rootClientId\n\t\t\t? listViewRef.current.querySelector(\n\t\t\t\t\t`[data-block=\"${ rootClientId }\"]`\n\t\t\t )\n\t\t\t: undefined;\n\n\t\t// The clientId represents the sibling block, the dragged block will\n\t\t// usually be inserted adjacent to it. It will be undefined when\n\t\t// dropping a block into an empty block list.\n\t\tconst _blockElement = clientId\n\t\t\t? listViewRef.current.querySelector(\n\t\t\t\t\t`[data-block=\"${ clientId }\"]`\n\t\t\t )\n\t\t\t: undefined;\n\n\t\treturn [ _rootBlockElement, _blockElement ];\n\t}, [ listViewRef, rootClientId, clientId ] );\n\n\t// The targetElement is the element that the drop indicator will appear\n\t// before or after. When dropping into an empty block list, blockElement\n\t// is undefined, so the indicator will appear after the rootBlockElement.\n\tconst targetElement = blockElement || rootBlockElement;\n\n\tconst rtl = isRTL();\n\n\tconst getDropIndicatorWidth = useCallback(\n\t\t( targetElementRect, indent ) => {\n\t\t\tif ( ! targetElement ) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// Default to assuming that the width of the drop indicator\n\t\t\t// should be the same as the target element.\n\t\t\tlet width = targetElement.offsetWidth;\n\n\t\t\t// In deeply nested lists, where a scrollbar is present,\n\t\t\t// the width of the drop indicator should be the width of\n\t\t\t// the scroll container, minus the distance from the left\n\t\t\t// edge of the scroll container to the left edge of the\n\t\t\t// target element.\n\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\ttargetElement,\n\t\t\t\t'horizontal'\n\t\t\t);\n\n\t\t\tconst ownerDocument = targetElement.ownerDocument;\n\t\t\tconst windowScroll =\n\t\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\t\tscrollContainer === ownerDocument.documentElement;\n\n\t\t\tif ( scrollContainer && ! windowScroll ) {\n\t\t\t\tconst scrollContainerRect =\n\t\t\t\t\tscrollContainer.getBoundingClientRect();\n\n\t\t\t\tconst distanceBetweenContainerAndTarget = isRTL()\n\t\t\t\t\t? scrollContainerRect.right - targetElementRect.right\n\t\t\t\t\t: targetElementRect.left - scrollContainerRect.left;\n\n\t\t\t\tconst scrollContainerWidth = scrollContainer.clientWidth;\n\n\t\t\t\tif (\n\t\t\t\t\tscrollContainerWidth <\n\t\t\t\t\twidth + distanceBetweenContainerAndTarget\n\t\t\t\t) {\n\t\t\t\t\twidth =\n\t\t\t\t\t\tscrollContainerWidth -\n\t\t\t\t\t\tdistanceBetweenContainerAndTarget;\n\t\t\t\t}\n\n\t\t\t\t// LTR logic for ensuring the drop indicator does not extend\n\t\t\t\t// beyond the right edge of the scroll container.\n\t\t\t\tif (\n\t\t\t\t\t! rtl &&\n\t\t\t\t\ttargetElementRect.left + indent < scrollContainerRect.left\n\t\t\t\t) {\n\t\t\t\t\twidth -= scrollContainerRect.left - targetElementRect.left;\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\n\t\t\t\t// RTL logic for ensuring the drop indicator does not extend\n\t\t\t\t// beyond the right edge of the scroll container.\n\t\t\t\tif (\n\t\t\t\t\trtl &&\n\t\t\t\t\ttargetElementRect.right - indent > scrollContainerRect.right\n\t\t\t\t) {\n\t\t\t\t\twidth -=\n\t\t\t\t\t\ttargetElementRect.right - scrollContainerRect.right;\n\t\t\t\t\treturn width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract the indent from the final width of the indicator.\n\t\t\treturn width - indent;\n\t\t},\n\t\t[ rtl, targetElement ]\n\t);\n\n\tconst style = useMemo( () => {\n\t\tif ( ! targetElement ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst targetElementRect = targetElement.getBoundingClientRect();\n\n\t\treturn {\n\t\t\twidth: getDropIndicatorWidth( targetElementRect, 0 ),\n\t\t};\n\t}, [ getDropIndicatorWidth, targetElement ] );\n\n\tconst horizontalScrollOffsetStyle = useMemo( () => {\n\t\tif ( ! targetElement ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( targetElement );\n\t\tconst ownerDocument = targetElement.ownerDocument;\n\t\tconst windowScroll =\n\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\tscrollContainer === ownerDocument.documentElement;\n\n\t\tif ( scrollContainer && ! windowScroll ) {\n\t\t\tconst scrollContainerRect = scrollContainer.getBoundingClientRect();\n\t\t\tconst targetElementRect = targetElement.getBoundingClientRect();\n\n\t\t\tconst distanceBetweenContainerAndTarget = rtl\n\t\t\t\t? scrollContainerRect.right - targetElementRect.right\n\t\t\t\t: targetElementRect.left - scrollContainerRect.left;\n\n\t\t\tif ( ! rtl && scrollContainerRect.left > targetElementRect.left ) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX( ${ distanceBetweenContainerAndTarget }px )`,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( rtl && scrollContainerRect.right < targetElementRect.right ) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX( ${\n\t\t\t\t\t\tdistanceBetweenContainerAndTarget * -1\n\t\t\t\t\t}px )`,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn {};\n\t}, [ rtl, targetElement ] );\n\n\tconst ariaLevel = useMemo( () => {\n\t\tif ( ! rootBlockElement ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst _ariaLevel = parseInt(\n\t\t\trootBlockElement.getAttribute( 'aria-level' ),\n\t\t\t10\n\t\t);\n\n\t\treturn _ariaLevel ? _ariaLevel + 1 : 1;\n\t}, [ rootBlockElement ] );\n\n\tconst hasAdjacentSelectedBranch = useMemo( () => {\n\t\tif ( ! targetElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn targetElement.classList.contains( 'is-branch-selected' );\n\t}, [ targetElement ] );\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tconst isValidDropPosition =\n\t\t\tdropPosition === 'top' ||\n\t\t\tdropPosition === 'bottom' ||\n\t\t\tdropPosition === 'inside';\n\t\tif ( ! targetElement || ! isValidDropPosition ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tcontextElement: targetElement,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\tconst rect = targetElement.getBoundingClientRect();\n\t\t\t\t// In RTL languages, the drop indicator should be positioned\n\t\t\t\t// to the left of the target element, with the width of the\n\t\t\t\t// indicator determining the indent at the right edge of the\n\t\t\t\t// target element. In LTR languages, the drop indicator should\n\t\t\t\t// end at the right edge of the target element, with the indent\n\t\t\t\t// added to the position of the left edge of the target element.\n\t\t\t\t// let left = rtl ? rect.left : rect.left + indent;\n\t\t\t\tlet left = rect.left;\n\t\t\t\tlet top = 0;\n\n\t\t\t\t// In deeply nested lists, where a scrollbar is present,\n\t\t\t\t// the width of the drop indicator should be the width of\n\t\t\t\t// the visible area of the scroll container. Additionally,\n\t\t\t\t// the left edge of the drop indicator line needs to be\n\t\t\t\t// offset by the distance the left edge of the target element\n\t\t\t\t// and the left edge of the scroll container. The ensures\n\t\t\t\t// that the drop indicator position never breaks out of the\n\t\t\t\t// visible area of the scroll container.\n\t\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\t\ttargetElement,\n\t\t\t\t\t'horizontal'\n\t\t\t\t);\n\n\t\t\t\tconst doc = targetElement.ownerDocument;\n\t\t\t\tconst windowScroll =\n\t\t\t\t\tscrollContainer === doc.body ||\n\t\t\t\t\tscrollContainer === doc.documentElement;\n\n\t\t\t\t// If the scroll container is not the window, offset the left position, if need be.\n\t\t\t\tif ( scrollContainer && ! windowScroll ) {\n\t\t\t\t\tconst scrollContainerRect =\n\t\t\t\t\t\tscrollContainer.getBoundingClientRect();\n\n\t\t\t\t\t// In RTL languages, a vertical scrollbar is present on the\n\t\t\t\t\t// left edge of the scroll container. The width of the\n\t\t\t\t\t// scrollbar needs to be accounted for when positioning the\n\t\t\t\t\t// drop indicator.\n\t\t\t\t\tconst scrollbarWidth = rtl\n\t\t\t\t\t\t? scrollContainer.offsetWidth -\n\t\t\t\t\t\t scrollContainer.clientWidth\n\t\t\t\t\t\t: 0;\n\n\t\t\t\t\tif ( left < scrollContainerRect.left + scrollbarWidth ) {\n\t\t\t\t\t\tleft = scrollContainerRect.left + scrollbarWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( dropPosition === 'top' ) {\n\t\t\t\t\ttop = rect.top - rect.height * 2;\n\t\t\t\t} else {\n\t\t\t\t\t// `dropPosition` is either `bottom` or `inside`\n\t\t\t\t\ttop = rect.top;\n\t\t\t\t}\n\n\t\t\t\tconst width = getDropIndicatorWidth( rect, 0 );\n\t\t\t\tconst height = rect.height;\n\n\t\t\t\treturn new window.DOMRect( left, top, width, height );\n\t\t\t},\n\t\t};\n\t}, [ targetElement, dropPosition, getDropIndicatorWidth, rtl ] );\n\n\tif ( ! targetElement ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t {} } />\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ blockTitle }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useState, useCallback, useEffect } from '@wordpress/element';\nimport {\n\tuseThrottle,\n\t__experimentalUseDropZone as useDropZone,\n\tusePrevious,\n} from '@wordpress/compose';\nimport { isRTL } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetDistanceToNearestEdge,\n\tisPointContainedByRect,\n} from '../../utils/math';\nimport useOnBlockDrop from '../use-on-block-drop';\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('../../utils/math').WPPoint} WPPoint */\n\n/**\n * The type of a drag event.\n *\n * @typedef {'default'|'file'|'html'} WPDragEventType\n */\n\n/**\n * An object representing data for blocks in the DOM used by drag and drop.\n *\n * @typedef {Object} WPListViewDropZoneBlock\n * @property {string} clientId The client id for the block.\n * @property {string} rootClientId The root client id for the block.\n * @property {number} blockIndex The block's index.\n * @property {Element} element The DOM element representing the block.\n * @property {number} innerBlockCount The number of inner blocks the block has.\n * @property {boolean} isDraggedBlock Whether the block is currently being dragged.\n * @property {boolean} isExpanded Whether the block is expanded in the UI.\n * @property {boolean} canInsertDraggedBlocksAsSibling Whether the dragged block can be a sibling of this block.\n * @property {boolean} canInsertDraggedBlocksAsChild Whether the dragged block can be a child of this block.\n */\n\n/**\n * An array representing data for blocks in the DOM used by drag and drop.\n *\n * @typedef {WPListViewDropZoneBlock[]} WPListViewDropZoneBlocks\n */\n\n/**\n * An object containing details of a drop target.\n *\n * @typedef {Object} WPListViewDropZoneTarget\n * @property {string} blockIndex The insertion index.\n * @property {string} rootClientId The root client id for the block.\n * @property {string|undefined} clientId The client id for the block.\n * @property {'top'|'bottom'|'inside'} dropPosition The position relative to the block that the user is dropping to.\n * 'inside' refers to nesting as an inner block.\n */\n\n// When the indentation level, the corresponding left margin in `style.scss`\n// must be updated as well to ensure the drop zone is aligned with the indentation.\nexport const NESTING_LEVEL_INDENTATION = 24;\n\n/**\n * Determines whether the user is positioning the dragged block to be\n * moved up to a parent level.\n *\n * Determined based on nesting level indentation of the current block.\n *\n * @param {WPPoint} point The point representing the cursor position when dragging.\n * @param {DOMRect} rect The rectangle.\n * @param {number} nestingLevel The nesting level of the block.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n * @return {boolean} Whether the gesture is an upward gesture.\n */\nfunction isUpGesture( point, rect, nestingLevel = 1, rtl = false ) {\n\t// If the block is nested, and the user is dragging to the bottom\n\t// left of the block (or bottom right in RTL languages), then it is an upward gesture.\n\tconst blockIndentPosition = rtl\n\t\t? rect.right - nestingLevel * NESTING_LEVEL_INDENTATION\n\t\t: rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;\n\treturn rtl ? point.x > blockIndentPosition : point.x < blockIndentPosition;\n}\n\n/**\n * Returns how many nesting levels up the user is attempting to drag to.\n *\n * The relative parent level is calculated based on how far\n * the cursor is from the provided nesting level (e.g. of a candidate block\n * that the user is hovering over). The nesting level is considered \"desired\"\n * because it is not guaranteed that the user will be able to drag to the desired level.\n *\n * The returned integer can be used to access an ascending array\n * of parent blocks, where the first item is the block the user\n * is hovering over, and the last item is the root block.\n *\n * @param {WPPoint} point The point representing the cursor position when dragging.\n * @param {DOMRect} rect The rectangle.\n * @param {number} nestingLevel The nesting level of the block.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n * @return {number} The desired relative parent level.\n */\nfunction getDesiredRelativeParentLevel(\n\tpoint,\n\trect,\n\tnestingLevel = 1,\n\trtl = false\n) {\n\t// In RTL languages, the block indent position is from the right edge of the block.\n\t// In LTR languages, the block indent position is from the left edge of the block.\n\tconst blockIndentPosition = rtl\n\t\t? rect.right - nestingLevel * NESTING_LEVEL_INDENTATION\n\t\t: rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;\n\n\tconst distanceBetweenPointAndBlockIndentPosition = rtl\n\t\t? blockIndentPosition - point.x\n\t\t: point.x - blockIndentPosition;\n\n\tconst desiredParentLevel = Math.round(\n\t\tdistanceBetweenPointAndBlockIndentPosition / NESTING_LEVEL_INDENTATION\n\t);\n\n\treturn Math.abs( desiredParentLevel );\n}\n\n/**\n * Returns an array of the parent blocks of the block the user is dropping to.\n *\n * @param {WPListViewDropZoneBlock} candidateBlockData The block the user is dropping to.\n * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.\n * @return {WPListViewDropZoneBlocks} An array of block parents, including the block the user is dropping to.\n */\nfunction getCandidateBlockParents( candidateBlockData, blocksData ) {\n\tconst candidateBlockParents = [];\n\tlet currentBlockData = candidateBlockData;\n\n\twhile ( currentBlockData ) {\n\t\tcandidateBlockParents.push( { ...currentBlockData } );\n\t\tcurrentBlockData = blocksData.find(\n\t\t\t( blockData ) =>\n\t\t\t\tblockData.clientId === currentBlockData.rootClientId\n\t\t);\n\t}\n\n\treturn candidateBlockParents;\n}\n\n/**\n * Given a list of blocks data and a block index, return the next non-dragged\n * block. This is used to determine the block that the user is dropping to,\n * while ignoring the dragged block.\n *\n * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.\n * @param {number} index The index to begin searching from.\n * @return {WPListViewDropZoneBlock | undefined} The next non-dragged block.\n */\nfunction getNextNonDraggedBlock( blocksData, index ) {\n\tconst nextBlockData = blocksData[ index + 1 ];\n\tif ( nextBlockData && nextBlockData.isDraggedBlock ) {\n\t\treturn getNextNonDraggedBlock( blocksData, index + 1 );\n\t}\n\n\treturn nextBlockData;\n}\n\n/**\n * Determines whether the user positioning the dragged block to nest as an\n * inner block.\n *\n * Determined based on nesting level indentation of the current block, plus\n * the indentation of the next level of nesting. The vertical position of the\n * cursor must also be within the block.\n *\n * @param {WPPoint} point The point representing the cursor position when dragging.\n * @param {DOMRect} rect The rectangle.\n * @param {number} nestingLevel The nesting level of the block.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n */\nfunction isNestingGesture( point, rect, nestingLevel = 1, rtl = false ) {\n\tconst blockIndentPosition = rtl\n\t\t? rect.right - nestingLevel * NESTING_LEVEL_INDENTATION\n\t\t: rect.left + nestingLevel * NESTING_LEVEL_INDENTATION;\n\n\tconst isNestingHorizontalGesture = rtl\n\t\t? point.x < blockIndentPosition - NESTING_LEVEL_INDENTATION\n\t\t: point.x > blockIndentPosition + NESTING_LEVEL_INDENTATION;\n\n\treturn isNestingHorizontalGesture && point.y < rect.bottom;\n}\n\n// Block navigation is always a vertical list, so only allow dropping\n// to the above or below a block.\nconst ALLOWED_DROP_EDGES = [ 'top', 'bottom' ];\n\n/**\n * Given blocks data and the cursor position, compute the drop target.\n *\n * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.\n * @param {WPPoint} position The point representing the cursor position when dragging.\n * @param {boolean} rtl Whether the editor is in RTL mode.\n *\n * @return {WPListViewDropZoneTarget | undefined} An object containing data about the drop target.\n */\nexport function getListViewDropTarget( blocksData, position, rtl = false ) {\n\tlet candidateEdge;\n\tlet candidateBlockData;\n\tlet candidateDistance;\n\tlet candidateRect;\n\tlet candidateBlockIndex;\n\n\tfor ( let i = 0; i < blocksData.length; i++ ) {\n\t\tconst blockData = blocksData[ i ];\n\t\tif ( blockData.isDraggedBlock ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rect = blockData.element.getBoundingClientRect();\n\t\tconst [ distance, edge ] = getDistanceToNearestEdge(\n\t\t\tposition,\n\t\t\trect,\n\t\t\tALLOWED_DROP_EDGES\n\t\t);\n\n\t\tconst isCursorWithinBlock = isPointContainedByRect( position, rect );\n\t\tif (\n\t\t\tcandidateDistance === undefined ||\n\t\t\tdistance < candidateDistance ||\n\t\t\tisCursorWithinBlock\n\t\t) {\n\t\t\tcandidateDistance = distance;\n\n\t\t\tconst index = blocksData.indexOf( blockData );\n\t\t\tconst previousBlockData = blocksData[ index - 1 ];\n\n\t\t\t// If dragging near the top of a block and the preceding block\n\t\t\t// is at the same level, use the preceding block as the candidate\n\t\t\t// instead, as later it makes determining a nesting drop easier.\n\t\t\tif (\n\t\t\t\tedge === 'top' &&\n\t\t\t\tpreviousBlockData &&\n\t\t\t\tpreviousBlockData.rootClientId === blockData.rootClientId &&\n\t\t\t\t! previousBlockData.isDraggedBlock\n\t\t\t) {\n\t\t\t\tcandidateBlockData = previousBlockData;\n\t\t\t\tcandidateEdge = 'bottom';\n\t\t\t\tcandidateRect =\n\t\t\t\t\tpreviousBlockData.element.getBoundingClientRect();\n\t\t\t\tcandidateBlockIndex = index - 1;\n\t\t\t} else {\n\t\t\t\tcandidateBlockData = blockData;\n\t\t\t\tcandidateEdge = edge;\n\t\t\t\tcandidateRect = rect;\n\t\t\t\tcandidateBlockIndex = index;\n\t\t\t}\n\n\t\t\t// If the mouse position is within the block, break early\n\t\t\t// as the user would intend to drop either before or after\n\t\t\t// this block.\n\t\t\t//\n\t\t\t// This solves an issue where some rows in the list view\n\t\t\t// tree overlap slightly due to sub-pixel rendering.\n\t\t\tif ( isCursorWithinBlock ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( ! candidateBlockData ) {\n\t\treturn;\n\t}\n\n\tconst candidateBlockParents = getCandidateBlockParents(\n\t\tcandidateBlockData,\n\t\tblocksData\n\t);\n\n\tconst isDraggingBelow = candidateEdge === 'bottom';\n\n\t// If the user is dragging towards the bottom of the block check whether\n\t// they might be trying to nest the block as a child.\n\t// If the block already has inner blocks, and is expanded, this should be treated\n\t// as nesting since the next block in the tree will be the first child.\n\t// However, if the block is collapsed, dragging beneath the block should\n\t// still be allowed, as the next visible block in the tree will be a sibling.\n\tif (\n\t\tisDraggingBelow &&\n\t\tcandidateBlockData.canInsertDraggedBlocksAsChild &&\n\t\t( ( candidateBlockData.innerBlockCount > 0 &&\n\t\t\tcandidateBlockData.isExpanded ) ||\n\t\t\tisNestingGesture(\n\t\t\t\tposition,\n\t\t\t\tcandidateRect,\n\t\t\t\tcandidateBlockParents.length,\n\t\t\t\trtl\n\t\t\t) )\n\t) {\n\t\t// If the block is expanded, insert the block as the first child.\n\t\t// Otherwise, for collapsed blocks, insert the block as the last child.\n\t\tconst newBlockIndex = candidateBlockData.isExpanded\n\t\t\t? 0\n\t\t\t: candidateBlockData.innerBlockCount || 0;\n\n\t\treturn {\n\t\t\trootClientId: candidateBlockData.clientId,\n\t\t\tclientId: candidateBlockData.clientId,\n\t\t\tblockIndex: newBlockIndex,\n\t\t\tdropPosition: 'inside',\n\t\t};\n\t}\n\n\t// If the user is dragging towards the bottom of the block check whether\n\t// they might be trying to move the block to be at a parent level.\n\tif (\n\t\tisDraggingBelow &&\n\t\tcandidateBlockData.rootClientId &&\n\t\tisUpGesture(\n\t\t\tposition,\n\t\t\tcandidateRect,\n\t\t\tcandidateBlockParents.length,\n\t\t\trtl\n\t\t)\n\t) {\n\t\tconst nextBlock = getNextNonDraggedBlock(\n\t\t\tblocksData,\n\t\t\tcandidateBlockIndex\n\t\t);\n\t\tconst currentLevel = candidateBlockData.nestingLevel;\n\t\tconst nextLevel = nextBlock ? nextBlock.nestingLevel : 1;\n\n\t\tif ( currentLevel && nextLevel ) {\n\t\t\t// Determine the desired relative level of the block to be dropped.\n\t\t\tconst desiredRelativeLevel = getDesiredRelativeParentLevel(\n\t\t\t\tposition,\n\t\t\t\tcandidateRect,\n\t\t\t\tcandidateBlockParents.length,\n\t\t\t\trtl\n\t\t\t);\n\n\t\t\tconst targetParentIndex = Math.max(\n\t\t\t\tMath.min( desiredRelativeLevel, currentLevel - nextLevel ),\n\t\t\t\t0\n\t\t\t);\n\n\t\t\tif ( candidateBlockParents[ targetParentIndex ] ) {\n\t\t\t\t// Default to the block index of the candidate block.\n\t\t\t\tlet newBlockIndex = candidateBlockData.blockIndex;\n\n\t\t\t\t// If the next block is at the same level, use that as the default\n\t\t\t\t// block index. This ensures that the block is dropped in the correct\n\t\t\t\t// position when dragging to the bottom of a block.\n\t\t\t\tif (\n\t\t\t\t\tcandidateBlockParents[ targetParentIndex ].nestingLevel ===\n\t\t\t\t\tnextBlock?.nestingLevel\n\t\t\t\t) {\n\t\t\t\t\tnewBlockIndex = nextBlock?.blockIndex;\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, search from the current block index back\n\t\t\t\t\t// to find the last block index within the same target parent.\n\t\t\t\t\tfor ( let i = candidateBlockIndex; i >= 0; i-- ) {\n\t\t\t\t\t\tconst blockData = blocksData[ i ];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tblockData.rootClientId ===\n\t\t\t\t\t\t\tcandidateBlockParents[ targetParentIndex ]\n\t\t\t\t\t\t\t\t.rootClientId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewBlockIndex = blockData.blockIndex + 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\trootClientId:\n\t\t\t\t\t\tcandidateBlockParents[ targetParentIndex ].rootClientId,\n\t\t\t\t\tclientId: candidateBlockData.clientId,\n\t\t\t\t\tblockIndex: newBlockIndex,\n\t\t\t\t\tdropPosition: candidateEdge,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\t// If dropping as a sibling, but block cannot be inserted in\n\t// this context, return early.\n\tif ( ! candidateBlockData.canInsertDraggedBlocksAsSibling ) {\n\t\treturn;\n\t}\n\n\tconst offset = isDraggingBelow ? 1 : 0;\n\treturn {\n\t\trootClientId: candidateBlockData.rootClientId,\n\t\tclientId: candidateBlockData.clientId,\n\t\tblockIndex: candidateBlockData.blockIndex + offset,\n\t\tdropPosition: candidateEdge,\n\t};\n}\n\n// Throttle options need to be defined outside of the hook to avoid\n// re-creating the object on every render. This is due to a limitation\n// of the `useThrottle` hook, where the options object is included\n// in the dependency array for memoization.\nconst EXPAND_THROTTLE_OPTIONS = {\n\tleading: false, // Don't call the function immediately on the first call.\n\ttrailing: true, // Do call the function on the last call.\n};\n\n/**\n * A react hook for implementing a drop zone in list view.\n *\n * @param {Object} props Named parameters.\n * @param {?HTMLElement} [props.dropZoneElement] Optional element to be used as the drop zone.\n * @param {Object} [props.expandedState] The expanded state of the blocks in the list view.\n * @param {Function} [props.setExpandedState] Function to set the expanded state of a list of block clientIds.\n *\n * @return {WPListViewDropZoneTarget} The drop target.\n */\nexport default function useListViewDropZone( {\n\tdropZoneElement,\n\texpandedState,\n\tsetExpandedState,\n} ) {\n\tconst {\n\t\tgetBlockRootClientId,\n\t\tgetBlockIndex,\n\t\tgetBlockCount,\n\t\tgetDraggedBlockClientIds,\n\t\tcanInsertBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst [ target, setTarget ] = useState();\n\tconst { rootClientId: targetRootClientId, blockIndex: targetBlockIndex } =\n\t\ttarget || {};\n\n\tconst onBlockDrop = useOnBlockDrop( targetRootClientId, targetBlockIndex );\n\n\tconst rtl = isRTL();\n\n\tconst previousRootClientId = usePrevious( targetRootClientId );\n\n\tconst maybeExpandBlock = useCallback(\n\t\t( _expandedState, _target ) => {\n\t\t\t// If the user is attempting to drop a block inside a collapsed block,\n\t\t\t// that is, using a nesting gesture flagged by 'inside' dropPosition,\n\t\t\t// expand the block within the list view, if it isn't already.\n\t\t\tconst { rootClientId } = _target || {};\n\t\t\tif ( ! rootClientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t_target?.dropPosition === 'inside' &&\n\t\t\t\t! _expandedState[ rootClientId ]\n\t\t\t) {\n\t\t\t\tsetExpandedState( {\n\t\t\t\t\ttype: 'expand',\n\t\t\t\t\tclientIds: [ rootClientId ],\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\n\t// Throttle the maybeExpandBlock function to avoid expanding the block\n\t// too quickly when the user is dragging over the block. This is to\n\t// avoid expanding the block when the user is just passing over it.\n\tconst throttledMaybeExpandBlock = useThrottle(\n\t\tmaybeExpandBlock,\n\t\t500,\n\t\tEXPAND_THROTTLE_OPTIONS\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttarget?.dropPosition !== 'inside' ||\n\t\t\tpreviousRootClientId !== target?.rootClientId\n\t\t) {\n\t\t\tthrottledMaybeExpandBlock.cancel();\n\t\t\treturn;\n\t\t}\n\t\tthrottledMaybeExpandBlock( expandedState, target );\n\t}, [\n\t\texpandedState,\n\t\tpreviousRootClientId,\n\t\ttarget,\n\t\tthrottledMaybeExpandBlock,\n\t] );\n\n\tconst draggedBlockClientIds = getDraggedBlockClientIds();\n\tconst throttled = useThrottle(\n\t\tuseCallback(\n\t\t\t( event, currentTarget ) => {\n\t\t\t\tconst position = { x: event.clientX, y: event.clientY };\n\t\t\t\tconst isBlockDrag = !! draggedBlockClientIds?.length;\n\n\t\t\t\tconst blockElements = Array.from(\n\t\t\t\t\tcurrentTarget.querySelectorAll( '[data-block]' )\n\t\t\t\t);\n\n\t\t\t\tconst blocksData = blockElements.map( ( blockElement ) => {\n\t\t\t\t\tconst clientId = blockElement.dataset.block;\n\t\t\t\t\tconst isExpanded = blockElement.dataset.expanded === 'true';\n\t\t\t\t\tconst isDraggedBlock =\n\t\t\t\t\t\tblockElement.classList.contains( 'is-dragging' );\n\n\t\t\t\t\t// Get nesting level from `aria-level` attribute because Firefox does not support `element.ariaLevel`.\n\t\t\t\t\tconst nestingLevel = parseInt(\n\t\t\t\t\t\tblockElement.getAttribute( 'aria-level' ),\n\t\t\t\t\t\t10\n\t\t\t\t\t);\n\t\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tisExpanded,\n\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\t\t\telement: blockElement,\n\t\t\t\t\t\tnestingLevel: nestingLevel || undefined,\n\t\t\t\t\t\tisDraggedBlock: isBlockDrag ? isDraggedBlock : false,\n\t\t\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t\t\t\tcanInsertDraggedBlocksAsSibling: isBlockDrag\n\t\t\t\t\t\t\t? canInsertBlocks(\n\t\t\t\t\t\t\t\t\tdraggedBlockClientIds,\n\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t\tcanInsertDraggedBlocksAsChild: isBlockDrag\n\t\t\t\t\t\t\t? canInsertBlocks( draggedBlockClientIds, clientId )\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tconst newTarget = getListViewDropTarget(\n\t\t\t\t\tblocksData,\n\t\t\t\t\tposition,\n\t\t\t\t\trtl\n\t\t\t\t);\n\n\t\t\t\tif ( newTarget ) {\n\t\t\t\t\tsetTarget( newTarget );\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tcanInsertBlocks,\n\t\t\t\tdraggedBlockClientIds,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\trtl,\n\t\t\t]\n\t\t),\n\t\t50\n\t);\n\n\tconst ref = useDropZone( {\n\t\tdropZoneElement,\n\t\tonDrop( event ) {\n\t\t\tthrottled.cancel();\n\t\t\tif ( target ) {\n\t\t\t\tonBlockDrop( event );\n\t\t\t}\n\t\t\t// Use `undefined` value to indicate that the drag has concluded.\n\t\t\t// This allows styling rules that are active only when a user is\n\t\t\t// dragging to be removed.\n\t\t\tsetTarget( undefined );\n\t\t},\n\t\tonDragLeave() {\n\t\t\tthrottled.cancel();\n\t\t\t// Use `null` value to indicate that the drop target is not valid,\n\t\t\t// but that the drag is still active. This allows for styling rules\n\t\t\t// that are active only when a user drags outside of the list view.\n\t\t\tsetTarget( null );\n\t\t},\n\t\tonDragOver( event ) {\n\t\t\t// `currentTarget` is only available while the event is being\n\t\t\t// handled, so get it now and pass it to the thottled function.\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n\t\t\tthrottled( event, event.currentTarget );\n\t\t},\n\t\tonDragEnd() {\n\t\t\tthrottled.cancel();\n\t\t\t// Use `undefined` value to indicate that the drag has concluded.\n\t\t\t// This allows styling rules that are active only when a user is\n\t\t\t// dragging to be removed.\n\t\t\tsetTarget( undefined );\n\t\t},\n\t} );\n\n\treturn { ref, target };\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseInstanceId,\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport {\n\t__experimentalTreeGrid as TreeGrid,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicatorPreview from './drop-indicator';\nimport useBlockSelection from './use-block-selection';\nimport useListViewBlockIndexes from './use-list-view-block-indexes';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewCollapseItems from './use-list-view-collapse-items';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport useListViewExpandSelectedItem from './use-list-view-expand-selected-item';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockSettingsDropdown } from '../block-settings-menu/block-settings-dropdown';\nimport { focusListItem } from './utils';\nimport useClipboardHandler from './use-clipboard-handler';\n\nconst expanded = ( state, action ) => {\n\tif ( action.type === 'clear' ) {\n\t\treturn {};\n\t}\n\tif ( Array.isArray( action.clientIds ) ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.clientIds.reduce(\n\t\t\t\t( newState, id ) => ( {\n\t\t\t\t\t...newState,\n\t\t\t\t\t[ id ]: action.type === 'expand',\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t),\n\t\t};\n\t}\n\treturn state;\n};\n\nexport const BLOCK_LIST_ITEM_HEIGHT = 32;\n\n/** @typedef {import('react').ComponentType} ComponentType */\n/** @typedef {import('react').Ref} Ref */\n\n/**\n * Show a hierarchical list of blocks.\n *\n * @param {Object} props Components props.\n * @param {string} props.id An HTML element id for the root element of ListView.\n * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {?HTMLElement} props.dropZoneElement Optional element to be used as the drop zone.\n * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.\n * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.\n * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.\n * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.\n * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.\n * @param {string} props.description Optional accessible description for the tree grid component.\n * @param {?Function} props.onSelect Optional callback to be invoked when a block is selected. Receives the block object that was selected.\n * @param {?ComponentType} props.additionalBlockContent Component that renders additional block content UI.\n * @param {Ref} ref Forwarded ref\n */\nfunction ListViewComponent(\n\t{\n\t\tid,\n\t\tblocks,\n\t\tdropZoneElement,\n\t\tshowBlockMovers = false,\n\t\tisExpanded = false,\n\t\tshowAppender = false,\n\t\tblockSettingsMenu: BlockSettingsMenu = BlockSettingsDropdown,\n\t\trootClientId,\n\t\tdescription,\n\t\tonSelect,\n\t\tadditionalBlockContent: AdditionalBlockContent,\n\t},\n\tref\n) {\n\t// This can be removed once we no longer need to support the blocks prop.\n\tif ( blocks ) {\n\t\tdeprecated(\n\t\t\t'`blocks` property in `wp.blockEditor.__experimentalListView`',\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\talternative: '`rootClientId` property',\n\t\t\t}\n\t\t);\n\t}\n\n\tconst instanceId = useInstanceId( ListViewComponent );\n\tconst { clientIdsTree, draggedClientIds, selectedClientIds } =\n\t\tuseListViewClientIds( { blocks, rootClientId } );\n\tconst blockIndexes = useListViewBlockIndexes( clientIdsTree );\n\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst { visibleBlockCount } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getGlobalBlockCount, getClientIdsOfDescendants } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\n\tconst { updateBlockSelection } = useBlockSelection();\n\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst [ insertedBlock, setInsertedBlock ] = useState( null );\n\n\tconst { setSelectedTreeId } = useListViewExpandSelectedItem( {\n\t\tfirstSelectedBlockClientId: selectedClientIds[ 0 ],\n\t\tsetExpandedState,\n\t} );\n\tconst selectEditorBlock = useCallback(\n\t\t/**\n\t\t * @param {MouseEvent | KeyboardEvent | undefined} event\n\t\t * @param {string} blockClientId\n\t\t * @param {null | undefined | -1 | 1} focusPosition\n\t\t */\n\t\t( event, blockClientId, focusPosition ) => {\n\t\t\tupdateBlockSelection( event, blockClientId, null, focusPosition );\n\t\t\tsetSelectedTreeId( blockClientId );\n\t\t\tif ( onSelect ) {\n\t\t\t\tonSelect( getBlock( blockClientId ) );\n\t\t\t}\n\t\t},\n\t\t[ setSelectedTreeId, updateBlockSelection, onSelect, getBlock ]\n\t);\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone( {\n\t\tdropZoneElement,\n\t\texpandedState,\n\t\tsetExpandedState,\n\t} );\n\tconst elementRef = useRef();\n\n\t// Allow handling of copy, cut, and paste events.\n\tconst clipBoardRef = useClipboardHandler( {\n\t\tselectBlock: selectEditorBlock,\n\t} );\n\n\tconst treeGridRef = useMergeRefs( [\n\t\tclipBoardRef,\n\t\telementRef,\n\t\tdropZoneRef,\n\t\tref,\n\t] );\n\n\tuseEffect( () => {\n\t\t// If a blocks are already selected when the list view is initially\n\t\t// mounted, shift focus to the first selected block.\n\t\tif ( selectedClientIds?.length ) {\n\t\t\tfocusListItem( selectedClientIds[ 0 ], elementRef?.current );\n\t\t}\n\t\t// Disable reason: Only focus on the selected item when the list view is mounted.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [] );\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst clientIds = Array.isArray( clientId )\n\t\t\t\t? clientId\n\t\t\t\t: [ clientId ];\n\t\t\tsetExpandedState( { type: 'expand', clientIds } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapseAll = useCallback( () => {\n\t\tsetExpandedState( { type: 'clear' } );\n\t}, [ setExpandedState ] );\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\tconst focusRow = useCallback(\n\t\t( event, startRow, endRow ) => {\n\t\t\tif ( event.shiftKey ) {\n\t\t\t\tupdateBlockSelection(\n\t\t\t\t\tevent,\n\t\t\t\t\tstartRow?.dataset?.block,\n\t\t\t\t\tendRow?.dataset?.block\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ updateBlockSelection ]\n\t);\n\n\tuseListViewCollapseItems( {\n\t\tcollapseAll,\n\t\texpand,\n\t} );\n\n\tconst firstDraggedBlockClientId = draggedClientIds?.[ 0 ];\n\n\t// Convert a blockDropTarget into indexes relative to the blocks in the list view.\n\t// These values are used to determine which blocks should be displaced to make room\n\t// for the drop indicator. See `ListViewBranch` and `getDragDisplacementValues`.\n\tconst { blockDropTargetIndex, blockDropPosition, firstDraggedBlockIndex } =\n\t\tuseMemo( () => {\n\t\t\tlet _blockDropTargetIndex, _firstDraggedBlockIndex;\n\n\t\t\tif ( blockDropTarget?.clientId ) {\n\t\t\t\tconst foundBlockIndex =\n\t\t\t\t\tblockIndexes[ blockDropTarget.clientId ];\n\t\t\t\t// If dragging below or inside the block, treat the drop target as the next block.\n\t\t\t\t_blockDropTargetIndex =\n\t\t\t\t\tfoundBlockIndex === undefined ||\n\t\t\t\t\tblockDropTarget?.dropPosition === 'top'\n\t\t\t\t\t\t? foundBlockIndex\n\t\t\t\t\t\t: foundBlockIndex + 1;\n\t\t\t} else if ( blockDropTarget === null ) {\n\t\t\t\t// A `null` value is used to indicate that the user is dragging outside of the list view.\n\t\t\t\t_blockDropTargetIndex = null;\n\t\t\t}\n\n\t\t\tif ( firstDraggedBlockClientId ) {\n\t\t\t\tconst foundBlockIndex =\n\t\t\t\t\tblockIndexes[ firstDraggedBlockClientId ];\n\t\t\t\t_firstDraggedBlockIndex =\n\t\t\t\t\tfoundBlockIndex === undefined ||\n\t\t\t\t\tblockDropTarget?.dropPosition === 'top'\n\t\t\t\t\t\t? foundBlockIndex\n\t\t\t\t\t\t: foundBlockIndex + 1;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tblockDropTargetIndex: _blockDropTargetIndex,\n\t\t\t\tblockDropPosition: blockDropTarget?.dropPosition,\n\t\t\t\tfirstDraggedBlockIndex: _firstDraggedBlockIndex,\n\t\t\t};\n\t\t}, [ blockDropTarget, blockIndexes, firstDraggedBlockClientId ] );\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tblockDropPosition,\n\t\t\tblockDropTargetIndex,\n\t\t\tblockIndexes,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tfirstDraggedBlockIndex,\n\t\t\tcollapse,\n\t\t\tcollapseAll,\n\t\t\tBlockSettingsMenu,\n\t\t\tlistViewInstanceId: instanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t\ttreeGridElementRef: elementRef,\n\t\t\trootClientId,\n\t\t} ),\n\t\t[\n\t\t\tblockDropPosition,\n\t\t\tblockDropTargetIndex,\n\t\t\tblockIndexes,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tfirstDraggedBlockIndex,\n\t\t\tcollapse,\n\t\t\tcollapseAll,\n\t\t\tBlockSettingsMenu,\n\t\t\tinstanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t\trootClientId,\n\t\t]\n\t);\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\tBLOCK_LIST_ITEM_HEIGHT,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\t// Ensure that the windowing logic is recalculated when the expanded state changes.\n\t\t\t// This is necessary because expanding a collapsed block in a short list view can\n\t\t\t// switch the list view to a tall list view with a scrollbar, and vice versa.\n\t\t\t// When this happens, the windowing logic needs to be recalculated to ensure that\n\t\t\t// the correct number of blocks are rendered, by rechecking for a scroll container.\n\t\t\texpandedState,\n\t\t\tuseWindowing: true,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\t// If there are no blocks to show and we're not showing the appender, do not render the list view.\n\tif ( ! clientIdsTree.length && ! showAppender ) {\n\t\treturn null;\n\t}\n\n\tconst describedById =\n\t\tdescription && `block-editor-list-view-description-${ instanceId }`;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ description && (\n\t\t\t\t\n\t\t\t\t\t{ description }\n\t\t\t\t\n\t\t\t) }\n\t\t\t 0 &&\n\t\t\t\t\t\tblockDropTargetIndex !== undefined,\n\t\t\t\t} ) }\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t\tonFocusRow={ focusRow }\n\t\t\t\tapplicationAriaLabel={ __( 'Block navigation structure' ) }\n\t\t\t\taria-describedby={ describedById }\n\t\t\t\tstyle={ {\n\t\t\t\t\t'--wp-admin--list-view-dragged-items-height':\n\t\t\t\t\t\tdraggedClientIds?.length\n\t\t\t\t\t\t\t? `${\n\t\t\t\t\t\t\t\t\tBLOCK_LIST_ITEM_HEIGHT *\n\t\t\t\t\t\t\t\t\t( draggedClientIds.length - 1 )\n\t\t\t\t\t\t\t }px`\n\t\t\t\t\t\t\t: null,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\n// This is the private API for the ListView component.\n// It allows access to all props, not just the public ones.\nexport const PrivateListView = forwardRef( ListViewComponent );\n\n// This is the public API for the ListView component.\n// We wrap the PrivateListView component to hide some props from the public API.\nexport default forwardRef( ( props, ref ) => {\n\treturn (\n\t\t\n\t);\n} );\n","/**\n * WordPress dependencies\n */\n\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useListViewClientIds( { blocks, rootClientId } ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetDraggedBlockClientIds,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tgetEnabledClientIdsTree,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\n\t\t\treturn {\n\t\t\t\tselectedClientIds: getSelectedBlockClientIds(),\n\t\t\t\tdraggedClientIds: getDraggedBlockClientIds(),\n\t\t\t\tclientIdsTree:\n\t\t\t\t\tblocks ?? getEnabledClientIdsTree( rootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ blocks, rootClientId ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\nexport default function useListViewBlockIndexes( blocks ) {\n\tconst blockIndexes = useMemo( () => {\n\t\tconst indexes = {};\n\n\t\tlet currentGlobalIndex = 0;\n\n\t\tconst traverseBlocks = ( blockList ) => {\n\t\t\tblockList.forEach( ( block ) => {\n\t\t\t\tindexes[ block.clientId ] = currentGlobalIndex;\n\t\t\t\tcurrentGlobalIndex++;\n\n\t\t\t\tif ( block.innerBlocks.length > 0 ) {\n\t\t\t\t\ttraverseBlocks( block.innerBlocks );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\ttraverseBlocks( blocks );\n\n\t\treturn indexes;\n\t}, [ blocks ] );\n\n\treturn blockIndexes;\n}\n","/**\n * WordPress dependencies\n */\nimport { speak } from '@wordpress/a11y';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\nimport { UP, DOWN, HOME, END, ESCAPE } from '@wordpress/keycodes';\nimport { store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getCommonDepthClientIds } from './utils';\n\nexport default function useBlockSelection() {\n\tconst { clearSelectedBlock, multiSelect, selectBlock } =\n\t\tuseDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockName,\n\t\tgetBlockParents,\n\t\tgetBlockSelectionStart,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\thasSelectedBlock,\n\t} = useSelect( blockEditorStore );\n\n\tconst { getBlockType } = useSelect( blocksStore );\n\n\tconst updateBlockSelection = useCallback(\n\t\tasync ( event, clientId, destinationClientId, focusPosition ) => {\n\t\t\tif ( ! event?.shiftKey && event?.keyCode !== ESCAPE ) {\n\t\t\t\tselectBlock( clientId, focusPosition );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// To handle multiple block selection via the `SHIFT` key, prevent\n\t\t\t// the browser default behavior of opening the link in a new window.\n\t\t\tevent.preventDefault();\n\n\t\t\tconst isOnlyDeselection =\n\t\t\t\tevent.type === 'keydown' && event.keyCode === ESCAPE;\n\t\t\tconst isKeyPress =\n\t\t\t\tevent.type === 'keydown' &&\n\t\t\t\t( event.keyCode === UP ||\n\t\t\t\t\tevent.keyCode === DOWN ||\n\t\t\t\t\tevent.keyCode === HOME ||\n\t\t\t\t\tevent.keyCode === END );\n\n\t\t\t// Handle clicking on a block when no blocks are selected, and return early.\n\t\t\tif (\n\t\t\t\t! isKeyPress &&\n\t\t\t\t! hasSelectedBlock() &&\n\t\t\t\t! hasMultiSelection()\n\t\t\t) {\n\t\t\t\tselectBlock( clientId, null );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedBlocks = getSelectedBlockClientIds();\n\t\t\tconst clientIdWithParents = [\n\t\t\t\t...getBlockParents( clientId ),\n\t\t\t\tclientId,\n\t\t\t];\n\n\t\t\tif (\n\t\t\t\tisOnlyDeselection ||\n\t\t\t\t( isKeyPress &&\n\t\t\t\t\t! selectedBlocks.some( ( blockId ) =>\n\t\t\t\t\t\tclientIdWithParents.includes( blockId )\n\t\t\t\t\t) )\n\t\t\t) {\n\t\t\t\t// Ensure that shift-selecting blocks via the keyboard only\n\t\t\t\t// expands the current selection if focusing over already\n\t\t\t\t// selected blocks. Otherwise, clear the selection so that\n\t\t\t\t// a user can create a new selection entirely by keyboard.\n\t\t\t\tawait clearSelectedBlock();\n\t\t\t}\n\n\t\t\t// Update selection, if not only clearing the selection.\n\t\t\tif ( ! isOnlyDeselection ) {\n\t\t\t\tlet startTarget = getBlockSelectionStart();\n\t\t\t\tlet endTarget = clientId;\n\n\t\t\t\t// Handle keyboard behavior for selecting multiple blocks.\n\t\t\t\tif ( isKeyPress ) {\n\t\t\t\t\tif ( ! hasSelectedBlock() && ! hasMultiSelection() ) {\n\t\t\t\t\t\t// Set the starting point of the selection to the currently\n\t\t\t\t\t\t// focused block, if there are no blocks currently selected.\n\t\t\t\t\t\t// This ensures that as the selection is expanded or contracted,\n\t\t\t\t\t\t// the starting point of the selection is anchored to that block.\n\t\t\t\t\t\tstartTarget = clientId;\n\t\t\t\t\t}\n\t\t\t\t\tif ( destinationClientId ) {\n\t\t\t\t\t\t// If the user presses UP or DOWN, we want to ensure that the block they're\n\t\t\t\t\t\t// moving to is the target for selection, and not the currently focused one.\n\t\t\t\t\t\tendTarget = destinationClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst startParents = getBlockParents( startTarget );\n\t\t\t\tconst endParents = getBlockParents( endTarget );\n\n\t\t\t\tconst { start, end } = getCommonDepthClientIds(\n\t\t\t\t\tstartTarget,\n\t\t\t\t\tendTarget,\n\t\t\t\t\tstartParents,\n\t\t\t\t\tendParents\n\t\t\t\t);\n\t\t\t\tawait multiSelect( start, end, null );\n\t\t\t}\n\n\t\t\t// Announce deselected block, or number of deselected blocks if\n\t\t\t// the total number of blocks deselected is greater than one.\n\t\t\tconst updatedSelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// If the selection is greater than 1 and the Home or End keys\n\t\t\t// were used to generate the selection, then skip announcing the\n\t\t\t// deselected blocks.\n\t\t\tif (\n\t\t\t\t( event.keyCode === HOME || event.keyCode === END ) &&\n\t\t\t\tupdatedSelectedBlocks.length > 1\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectionDiff = selectedBlocks.filter(\n\t\t\t\t( blockId ) => ! updatedSelectedBlocks.includes( blockId )\n\t\t\t);\n\n\t\t\tlet label;\n\t\t\tif ( selectionDiff.length === 1 ) {\n\t\t\t\tconst title = getBlockType(\n\t\t\t\t\tgetBlockName( selectionDiff[ 0 ] )\n\t\t\t\t)?.title;\n\t\t\t\tif ( title ) {\n\t\t\t\t\tlabel = sprintf(\n\t\t\t\t\t\t/* translators: %s: block name */\n\t\t\t\t\t\t__( '%s deselected.' ),\n\t\t\t\t\t\ttitle\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if ( selectionDiff.length > 1 ) {\n\t\t\t\tlabel = sprintf(\n\t\t\t\t\t/* translators: %s: number of deselected blocks */\n\t\t\t\t\t__( '%s blocks deselected.' ),\n\t\t\t\t\tselectionDiff.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif ( label ) {\n\t\t\t\tspeak( label, 'assertive' );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tclearSelectedBlock,\n\t\t\tgetBlockName,\n\t\t\tgetBlockType,\n\t\t\tgetBlockParents,\n\t\t\tgetBlockSelectionStart,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\thasMultiSelection,\n\t\t\thasSelectedBlock,\n\t\t\tmultiSelect,\n\t\t\tselectBlock,\n\t\t]\n\t);\n\n\treturn {\n\t\tupdateBlockSelection,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useListViewExpandSelectedItem( {\n\tfirstSelectedBlockClientId,\n\tsetExpandedState,\n} ) {\n\tconst [ selectedTreeId, setSelectedTreeId ] = useState( null );\n\tconst { selectedBlockParentClientIds } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockParents } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tselectedBlockParentClientIds: getBlockParents(\n\t\t\t\t\tfirstSelectedBlockClientId,\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ firstSelectedBlockClientId ]\n\t);\n\n\t// Expand tree when a block is selected.\n\tuseEffect( () => {\n\t\t// If the selectedTreeId is the same as the selected block,\n\t\t// it means that the block was selected using the block list tree.\n\t\tif ( selectedTreeId === firstSelectedBlockClientId ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the selected block has parents, get the top-level parent.\n\t\tif ( selectedBlockParentClientIds?.length ) {\n\t\t\t// If the selected block has parents,\n\t\t\t// expand the tree branch.\n\t\t\tsetExpandedState( {\n\t\t\t\ttype: 'expand',\n\t\t\t\tclientIds: selectedBlockParentClientIds,\n\t\t\t} );\n\t\t}\n\t}, [\n\t\tfirstSelectedBlockClientId,\n\t\tselectedBlockParentClientIds,\n\t\tselectedTreeId,\n\t\tsetExpandedState,\n\t] );\n\n\treturn {\n\t\tsetSelectedTreeId,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useNotifyCopy } from '../../utils/use-notify-copy';\nimport { focusListItem } from './utils';\nimport { getPasteBlocks, setClipboardBlocks } from '../writing-flow/utils';\n\n// This hook borrows from useClipboardHandler in ../writing-flow/use-clipboard-handler.js\n// and adds behaviour for the list view, while skipping partial selection.\nexport default function useClipboardHandler( { selectBlock } ) {\n\tconst registry = useRegistry();\n\tconst {\n\t\tgetBlockOrder,\n\t\tgetBlockRootClientId,\n\t\tgetBlocksByClientId,\n\t\tgetPreviousBlockClientId,\n\t\tgetSelectedBlockClientIds,\n\t\tgetSettings,\n\t\tcanInsertBlockType,\n\t\tcanRemoveBlocks,\n\t} = useSelect( blockEditorStore );\n\tconst { flashBlock, removeBlocks, replaceBlocks, insertBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction updateFocusAndSelection( focusClientId, shouldSelectBlock ) {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, node );\n\t\t}\n\n\t\t// Determine which blocks to update:\n\t\t// If the current (focused) block is part of the block selection, use the whole selection.\n\t\t// If the focused block is not part of the block selection, only update the focused block.\n\t\tfunction getBlocksToUpdate( clientId ) {\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\t\tconst isUpdatingSelectedBlocks =\n\t\t\t\tselectedBlockClientIds.includes( clientId );\n\t\t\tconst firstBlockClientId = isUpdatingSelectedBlocks\n\t\t\t\t? selectedBlockClientIds[ 0 ]\n\t\t\t\t: clientId;\n\t\t\tconst firstBlockRootClientId =\n\t\t\t\tgetBlockRootClientId( firstBlockClientId );\n\n\t\t\tconst blocksToUpdate = isUpdatingSelectedBlocks\n\t\t\t\t? selectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\n\t\t\treturn {\n\t\t\t\tblocksToUpdate,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\toriginallySelectedBlockClientIds: selectedBlockClientIds,\n\t\t\t};\n\t\t}\n\n\t\tfunction handler( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t// This was possibly already handled in rich-text/use-paste-handler.js.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only handle events that occur within the list view.\n\t\t\tif ( ! node.contains( event.target.ownerDocument.activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Retrieve the block clientId associated with the focused list view row.\n\t\t\t// This enables applying copy / cut / paste behavior to the focused block,\n\t\t\t// rather than just the blocks that are currently selected.\n\t\t\tconst listViewRow =\n\t\t\t\tevent.target.ownerDocument.activeElement?.closest(\n\t\t\t\t\t'[role=row]'\n\t\t\t\t);\n\t\t\tconst clientId = listViewRow?.dataset?.block;\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tblocksToUpdate: selectedBlockClientIds,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\toriginallySelectedBlockClientIds,\n\t\t\t} = getBlocksToUpdate( clientId );\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\tconst blocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\tsetClipboardBlocks( event, blocks, registry );\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// Don't update the selection if the blocks cannot be deleted.\n\t\t\t\tif ( ! canRemoveBlocks( selectedBlockClientIds ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet blockToFocus =\n\t\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ) ??\n\t\t\t\t\t// If the previous block is not found (when the first block is deleted),\n\t\t\t\t\t// fallback to focus the parent block.\n\t\t\t\t\tfirstBlockRootClientId;\n\n\t\t\t\t// Remove blocks, but don't update selection, and it will be handled below.\n\t\t\t\tremoveBlocks( selectedBlockClientIds, false );\n\n\t\t\t\t// Update the selection if the original selection has been removed.\n\t\t\t\tconst shouldUpdateSelection =\n\t\t\t\t\toriginallySelectedBlockClientIds.length > 0 &&\n\t\t\t\t\tgetSelectedBlockClientIds().length === 0;\n\n\t\t\t\t// If there's no previous block nor parent block, focus the first block.\n\t\t\t\tif ( ! blockToFocus ) {\n\t\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t\t}\n\n\t\t\t\tupdateFocusAndSelection( blockToFocus, shouldUpdateSelection );\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML:\n\t\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst blocks = getPasteBlocks(\n\t\t\t\t\tevent,\n\t\t\t\t\tcanUserUseUnfilteredHTML\n\t\t\t\t);\n\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tconst [ selectedBlockClientId ] = selectedBlockClientIds;\n\n\t\t\t\t\t// If a single block is focused, and the blocks to be posted can\n\t\t\t\t\t// be inserted within the block, then append the pasted blocks\n\t\t\t\t\t// within the focused block. For example, if you have copied a paragraph\n\t\t\t\t\t// block and paste it within a single Group block, this will append\n\t\t\t\t\t// the paragraph block within the Group block.\n\t\t\t\t\tif (\n\t\t\t\t\t\tblocks.every( ( block ) =>\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\tblocks,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tselectedBlockClientId\n\t\t\t\t\t\t);\n\t\t\t\t\t\tupdateFocusAndSelection( blocks[ 0 ]?.clientId, false );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\tblocks,\n\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t-1\n\t\t\t\t);\n\t\t\t\tupdateFocusAndSelection( blocks[ 0 ]?.clientId, false );\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useListViewCollapseItems( { collapseAll, expand } ) {\n\tconst { expandedBlock, getBlockParents } = useSelect( ( select ) => {\n\t\tconst { getBlockParents: _getBlockParents, getExpandedBlock } = unlock(\n\t\t\tselect( blockEditorStore )\n\t\t);\n\t\treturn {\n\t\t\texpandedBlock: getExpandedBlock(),\n\t\t\tgetBlockParents: _getBlockParents,\n\t\t};\n\t}, [] );\n\n\t// Collapse all but the specified block when the expanded block client Id changes.\n\tuseEffect( () => {\n\t\tif ( expandedBlock ) {\n\t\t\tconst blockParents = getBlockParents( expandedBlock, false );\n\t\t\t// Collapse all blocks and expand the block's parents.\n\t\t\tcollapseAll();\n\t\t\texpand( blockParents );\n\t\t}\n\t}, [ collapseAll, expand, expandedBlock, getBlockParents ] );\n}\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Dropdown } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\nimport { listView } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ListView from '../list-view';\nimport { store as blockEditorStore } from '../../store';\n\nfunction BlockNavigationDropdownToggle( {\n\tisEnabled,\n\tonToggle,\n\tisOpen,\n\tinnerRef,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction BlockNavigationDropdown( { isDisabled, ...props }, ref ) {\n\tdeprecated( 'wp.blockEditor.BlockNavigationDropdown', {\n\t\tsince: '6.1',\n\t\talternative: 'wp.components.Dropdown and wp.blockEditor.ListView',\n\t} );\n\n\tconst hasBlocks = useSelect(\n\t\t( select ) => !! select( blockEditorStore ).getBlockCount(),\n\t\t[]\n\t);\n\tconst isEnabled = hasBlocks && ! isDisabled;\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t
    \n\t\t\t\t\t

    \n\t\t\t\t\t\t{ __( 'List view' ) }\n\t\t\t\t\t

    \n\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( BlockNavigationDropdown );\n","/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport InserterPreviewPanel from '../inserter/preview-panel';\nimport { replaceActiveStyle } from './utils';\n\nexport default function BlockStylesPreviewPanel( {\n\tgenericPreviewBlock,\n\tstyle,\n\tclassName,\n\tactiveStyle,\n} ) {\n\tconst example = getBlockType( genericPreviewBlock.name )?.example;\n\tconst styleClassName = replaceActiveStyle( className, activeStyle, style );\n\tconst previewBlocks = useMemo( () => {\n\t\treturn {\n\t\t\t...genericPreviewBlock,\n\t\t\ttitle: style.label || style.name,\n\t\t\tdescription: style.description,\n\t\t\tinitialAttributes: {\n\t\t\t\t...genericPreviewBlock.attributes,\n\t\t\t\tclassName:\n\t\t\t\t\tstyleClassName +\n\t\t\t\t\t' block-editor-block-styles__block-preview-container',\n\t\t\t},\n\t\t\texample,\n\t\t};\n\t}, [ genericPreviewBlock, styleClassName ] );\n\n\treturn ;\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { debounce, useViewportMatch } from '@wordpress/compose';\nimport {\n\tButton,\n\t__experimentalTruncate as Truncate,\n\tPopover,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockStylesPreviewPanel from './preview-panel';\nimport useStylesForBlocks from './use-styles-for-block';\n\nconst noop = () => {};\n\n// Block Styles component for the Settings Sidebar.\nfunction BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {\n\tconst {\n\t\tonSelect,\n\t\tstylesToRender,\n\t\tactiveStyle,\n\t\tgenericPreviewBlock,\n\t\tclassName: previewClassName,\n\t} = useStylesForBlocks( {\n\t\tclientId,\n\t\tonSwitch,\n\t} );\n\tconst [ hoveredStyle, setHoveredStyle ] = useState( null );\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\n\tif ( ! stylesToRender || stylesToRender.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst debouncedSetHoveredStyle = debounce( setHoveredStyle, 250 );\n\n\tconst onSelectStylePreview = ( style ) => {\n\t\tonSelect( style );\n\t\tonHoverClassName( null );\n\t\tsetHoveredStyle( null );\n\t\tdebouncedSetHoveredStyle.cancel();\n\t};\n\n\tconst styleItemHandler = ( item ) => {\n\t\tif ( hoveredStyle === item ) {\n\t\t\tdebouncedSetHoveredStyle.cancel();\n\t\t\treturn;\n\t\t}\n\t\tdebouncedSetHoveredStyle( item );\n\t\tonHoverClassName( item?.name ?? null );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t{ stylesToRender.map( ( style ) => {\n\t\t\t\t\tconst buttonText = style.label || style.name;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t styleItemHandler( style ) }\n\t\t\t\t\t\t\tonFocus={ () => styleItemHandler( style ) }\n\t\t\t\t\t\t\tonMouseLeave={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\tonBlur={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\tonClick={ () => onSelectStylePreview( style ) }\n\t\t\t\t\t\t\taria-current={ activeStyle.name === style.name }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ buttonText }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t
    \n\t\t\t{ hoveredStyle && ! isMobileViewport && (\n\t\t\t\t\n\t\t\t\t\t styleItemHandler( null ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockStyles;\n","/**\n * WordPress dependencies\n */\nimport {\n\theadingLevel1,\n\theadingLevel2,\n\theadingLevel3,\n\theadingLevel4,\n\theadingLevel5,\n\theadingLevel6,\n\tparagraph,\n} from '@wordpress/icons';\nimport { Icon } from '@wordpress/components';\n\n/** @typedef {import('react').ComponentType} ComponentType */\n\n/**\n * HeadingLevelIcon props.\n *\n * @typedef WPHeadingLevelIconProps\n *\n * @property {number} level The heading level to show an icon for.\n */\n\nconst LEVEL_TO_PATH = {\n\t0: paragraph,\n\t1: headingLevel1,\n\t2: headingLevel2,\n\t3: headingLevel3,\n\t4: headingLevel4,\n\t5: headingLevel5,\n\t6: headingLevel6,\n};\n\n/**\n * Heading level icon.\n *\n * @param {WPHeadingLevelIconProps} props Component props.\n *\n * @return {?ComponentType} The icon.\n */\nexport default function HeadingLevelIcon( { level } ) {\n\tif ( LEVEL_TO_PATH[ level ] ) {\n\t\treturn ;\n\t}\n\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst paragraph = (\n\t\n\t\t\n\t\n);\n\nexport default paragraph;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel1 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel1;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel2 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel2;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel3 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel3;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel4 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel4;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel5 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel5;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst headingLevel6 = (\n\t\n\t\t\n\t\n);\n\nexport default headingLevel6;\n","/**\n * WordPress dependencies\n */\nimport { ToolbarDropdownMenu } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport HeadingLevelIcon from './heading-level-icon';\n\nconst HEADING_LEVELS = [ 1, 2, 3, 4, 5, 6 ];\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-library-heading-level-dropdown',\n};\n\n/** @typedef {import('react').ComponentType} ComponentType */\n\n/**\n * HeadingLevelDropdown props.\n *\n * @typedef WPHeadingLevelDropdownProps\n *\n * @property {number} value The chosen heading level.\n * @property {number[]} options An array of supported heading levels.\n * @property {()=>number} onChange Function called with\n * the selected value changes.\n */\n\n/**\n * Dropdown for selecting a heading level (1 through 6) or paragraph (0).\n *\n * @param {WPHeadingLevelDropdownProps} props Component props.\n *\n * @return {ComponentType} The toolbar.\n */\nexport default function HeadingLevelDropdown( {\n\toptions = HEADING_LEVELS,\n\tvalue,\n\tonChange,\n} ) {\n\treturn (\n\t\t }\n\t\t\tlabel={ __( 'Change level' ) }\n\t\t\tcontrols={ options.map( ( targetLevel ) => {\n\t\t\t\tconst isActive = targetLevel === value;\n\t\t\t\treturn {\n\t\t\t\t\ticon: ,\n\t\t\t\t\ttitle:\n\t\t\t\t\t\ttargetLevel === 0\n\t\t\t\t\t\t\t? __( 'Paragraph' )\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t// translators: %d: heading level e.g: \"1\", \"2\", \"3\"\n\t\t\t\t\t\t\t\t\t__( 'Heading %d' ),\n\t\t\t\t\t\t\t\t\ttargetLevel\n\t\t\t\t\t\t\t ),\n\t\t\t\t\tisActive,\n\t\t\t\t\tonClick() {\n\t\t\t\t\t\tonChange( targetLevel );\n\t\t\t\t\t},\n\t\t\t\t\trole: 'menuitemradio',\n\t\t\t\t};\n\t\t\t} ) }\n\t\t/>\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst layout = (\n\t\n\t\t\n\t\n);\n\nexport default layout;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Button, Placeholder } from '@wordpress/components';\nimport { layout } from '@wordpress/icons';\n\nfunction BlockVariationPicker( {\n\ticon = layout,\n\tlabel = __( 'Choose variation' ),\n\tinstructions = __( 'Select a variation to start with:' ),\n\tvariations,\n\tonSelect,\n\tallowSkip,\n} ) {\n\tconst classes = clsx( 'block-editor-block-variation-picker', {\n\t\t'has-many-variations': variations.length > 4,\n\t} );\n\n\treturn (\n\t\t\n\t\t\t{ /*\n\t\t\t * Disable reason: The `list` ARIA role is redundant but\n\t\t\t * Safari+VoiceOver won't announce the list otherwise.\n\t\t\t */\n\t\t\t/* eslint-disable jsx-a11y/no-redundant-roles */ }\n\t\t\t\n\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t onSelect( variation ) }\n\t\t\t\t\t\t\tclassName=\"block-editor-block-variation-picker__variation\"\n\t\t\t\t\t\t\tlabel={ variation.description || variation.title }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ variation.title }\n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t) ) }\n\t\t\t\n\t\t\t{ /* eslint-enable jsx-a11y/no-redundant-roles */ }\n\t\t\t{ allowSkip && (\n\t\t\t\t
    \n\t\t\t\t\t onSelect() }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Skip' ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default BlockVariationPicker;\n","export const VIEWMODES = {\n\tcarousel: 'carousel',\n\tgrid: 'grid',\n};\n","/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport {\n\tchevronRight,\n\tchevronLeft,\n\tgrid,\n\tstretchFullWidth,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { VIEWMODES } from './constants';\n\nconst Actions = ( { onBlockPatternSelect } ) => (\n\t
    \n\t\t\n\t\t\t{ __( 'Choose' ) }\n\t\t\n\t
    \n);\n\nconst CarouselNavigation = ( {\n\thandlePrevious,\n\thandleNext,\n\tactiveSlide,\n\ttotalSlides,\n} ) => (\n\t
    \n\t\t\n\t\t\n\t
    \n);\n\nconst SetupToolbar = ( {\n\tviewMode,\n\tsetViewMode,\n\thandlePrevious,\n\thandleNext,\n\tactiveSlide,\n\ttotalSlides,\n\tonBlockPatternSelect,\n} ) => {\n\tconst isCarouselView = viewMode === VIEWMODES.carousel;\n\tconst displayControls = (\n\t\t
    \n\t\t\t setViewMode( VIEWMODES.carousel ) }\n\t\t\t\tisPressed={ isCarouselView }\n\t\t\t/>\n\t\t\t setViewMode( VIEWMODES.grid ) }\n\t\t\t\tisPressed={ viewMode === VIEWMODES.grid }\n\t\t\t/>\n\t\t
    \n\t);\n\treturn (\n\t\t
    \n\t\t\t{ isCarouselView && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ displayControls }\n\t\t\t{ isCarouselView && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n};\n\nexport default SetupToolbar;\n","/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { Composite, VisuallyHidden } from '@wordpress/components';\n\nimport { useState } from '@wordpress/element';\nimport { useInstanceId } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockPreview from '../block-preview';\nimport SetupToolbar from './setup-toolbar';\nimport usePatternsSetup from './use-patterns-setup';\nimport { VIEWMODES } from './constants';\n\nconst SetupContent = ( {\n\tviewMode,\n\tactiveSlide,\n\tpatterns,\n\tonBlockPatternSelect,\n\tshowTitles,\n} ) => {\n\tconst containerClass = 'block-editor-block-pattern-setup__container';\n\n\tif ( viewMode === VIEWMODES.carousel ) {\n\t\tconst slideClass = new Map( [\n\t\t\t[ activeSlide, 'active-slide' ],\n\t\t\t[ activeSlide - 1, 'previous-slide' ],\n\t\t\t[ activeSlide + 1, 'next-slide' ],\n\t\t] );\n\t\treturn (\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{ patterns.map( ( pattern, index ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t);\n\t}\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ patterns.map( ( pattern ) => (\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t
    \n\t);\n};\n\nfunction BlockPattern( { pattern, onSelect, showTitles } ) {\n\tconst baseClassName = 'block-editor-block-pattern-setup-list';\n\tconst { blocks, description, viewportWidth = 700 } = pattern;\n\tconst descriptionId = useInstanceId(\n\t\tBlockPattern,\n\t\t`${ baseClassName }__item-description`\n\t);\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t}\n\t\t\t\tid={ `${ baseClassName }__pattern__${ pattern.name }` }\n\t\t\t\trole=\"option\"\n\t\t\t\tonClick={ () => onSelect( blocks ) }\n\t\t\t>\n\t\t\t\t\n\t\t\t\t{ showTitles && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ pattern.title }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\t{ !! description && (\n\t\t\t\t\t\n\t\t\t\t\t\t{ description }\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction BlockPatternSlide( { active, className, pattern, minHeight } ) {\n\tconst { blocks, title, description } = pattern;\n\tconst descriptionId = useInstanceId(\n\t\tBlockPatternSlide,\n\t\t'block-editor-block-pattern-setup-list__item-description'\n\t);\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ !! description && (\n\t\t\t\t\n\t\t\t\t\t{ description }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n\nconst BlockPatternSetup = ( {\n\tclientId,\n\tblockName,\n\tfilterPatternsFn,\n\tonBlockPatternSelect,\n\tinitialViewMode = VIEWMODES.carousel,\n\tshowTitles = false,\n} ) => {\n\tconst [ viewMode, setViewMode ] = useState( initialViewMode );\n\tconst [ activeSlide, setActiveSlide ] = useState( 0 );\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\tconst patterns = usePatternsSetup( clientId, blockName, filterPatternsFn );\n\n\tif ( ! patterns?.length ) {\n\t\treturn null;\n\t}\n\n\tconst onBlockPatternSelectDefault = ( blocks ) => {\n\t\tconst clonedBlocks = blocks.map( ( block ) => cloneBlock( block ) );\n\t\treplaceBlock( clientId, clonedBlocks );\n\t};\n\tconst onPatternSelectCallback =\n\t\tonBlockPatternSelect || onBlockPatternSelectDefault;\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\tsetActiveSlide( ( active ) =>\n\t\t\t\t\t\t\tMath.min( active + 1, patterns.length - 1 )\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\thandlePrevious={ () => {\n\t\t\t\t\t\tsetActiveSlide( ( active ) =>\n\t\t\t\t\t\t\tMath.max( active - 1, 0 )\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t\tonBlockPatternSelect={ () => {\n\t\t\t\t\t\tonPatternSelectCallback(\n\t\t\t\t\t\t\tpatterns[ activeSlide ].blocks\n\t\t\t\t\t\t);\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\n\t\t\n\t);\n};\n\nexport default BlockPatternSetup;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction usePatternsSetup( clientId, blockName, filterPatternsFn ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetPatternsByBlockTypes,\n\t\t\t\t__experimentalGetAllowedPatterns,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tif ( filterPatternsFn ) {\n\t\t\t\treturn __experimentalGetAllowedPatterns( rootClientId ).filter(\n\t\t\t\t\tfilterPatternsFn\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn getPatternsByBlockTypes( blockName, rootClientId );\n\t\t},\n\t\t[ clientId, blockName, filterPatternsFn ]\n\t);\n}\n\nexport default usePatternsSetup;\n","/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItemsChoice,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { chevronDown } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nfunction VariationsButtons( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Transform to variation' ) }\n\t\t\t\n\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t }\n\t\t\t\t\tisPressed={ selectedValue === variation.name }\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: Name of the block variation */\n\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t\tonClick={ () => onSelectVariation( variation.name ) }\n\t\t\t\t\taria-label={ variation.title }\n\t\t\t\t\tshowTooltip\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t
    \n\t);\n}\n\nfunction VariationsDropdown( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\tconst selectOptions = variations.map(\n\t\t( { name, title, description } ) => ( {\n\t\t\tvalue: name,\n\t\t\tlabel: title,\n\t\t\tinfo: description,\n\t\t} )\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ () => (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n\nfunction VariationsToggleGroupControl( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ variation.name }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t\t/* translators: %s: Name of the block variation */\n\t\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\n\t\t
    \n\t);\n}\n\nfunction __experimentalBlockVariationTransforms( { blockClientId } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { activeBlockVariation, variations, isContentOnly } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t\tgetBlockVariations,\n\t\t\t\t__experimentalHasContentRoleAttribute,\n\t\t\t} = select( blocksStore );\n\t\t\tconst { getBlockName, getBlockAttributes, getBlockEditingMode } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst name = blockClientId && getBlockName( blockClientId );\n\n\t\t\tconst isContentBlock =\n\t\t\t\t__experimentalHasContentRoleAttribute( name );\n\n\t\t\treturn {\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tname,\n\t\t\t\t\tgetBlockAttributes( blockClientId )\n\t\t\t\t),\n\t\t\t\tvariations: name && getBlockVariations( name, 'transform' ),\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( blockClientId ) === 'contentOnly' &&\n\t\t\t\t\t! isContentBlock,\n\t\t\t};\n\t\t},\n\t\t[ blockClientId ]\n\t);\n\n\tconst selectedValue = activeBlockVariation?.name;\n\n\t// Check if each variation has a unique icon.\n\tconst hasUniqueIcons = useMemo( () => {\n\t\tconst variationIcons = new Set();\n\t\tif ( ! variations ) {\n\t\t\treturn false;\n\t\t}\n\t\tvariations.forEach( ( variation ) => {\n\t\t\tif ( variation.icon ) {\n\t\t\t\tvariationIcons.add( variation.icon?.src || variation.icon );\n\t\t\t}\n\t\t} );\n\t\treturn variationIcons.size === variations.length;\n\t}, [ variations ] );\n\n\tconst onSelectVariation = ( variationName ) => {\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\t...variations.find( ( { name } ) => name === variationName )\n\t\t\t\t.attributes,\n\t\t} );\n\t};\n\n\tif ( ! variations?.length || isContentOnly ) {\n\t\treturn null;\n\t}\n\n\tconst baseClass = 'block-editor-block-variation-transforms';\n\n\t// Show buttons if there are more than 5 variations because the ToggleGroupControl does not wrap\n\tconst showButtons = variations.length > 5;\n\n\tconst ButtonComponent = showButtons\n\t\t? VariationsButtons\n\t\t: VariationsToggleGroupControl;\n\n\tconst Component = hasUniqueIcons ? ButtonComponent : VariationsDropdown;\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default __experimentalBlockVariationTransforms;\n","/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nexport default createHigherOrderComponent( ( WrappedComponent ) => {\n\treturn ( props ) => {\n\t\tconst [ colorsFeature, enableCustomColors ] = useSettings(\n\t\t\t'color.palette',\n\t\t\t'color.custom'\n\t\t);\n\t\tconst {\n\t\t\tcolors = colorsFeature,\n\t\t\tdisableCustomColors = ! enableCustomColors,\n\t\t} = props;\n\t\tconst hasColorsToChoose =\n\t\t\t( colors && colors.length > 0 ) || ! disableCustomColors;\n\t\treturn (\n\t\t\t\n\t\t);\n\t};\n}, 'withColorContext' );\n","/**\n * WordPress dependencies\n */\nimport { ColorPalette } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport withColorContext from './with-color-context';\n\nexport default withColorContext( ColorPalette );\n","/**\n * Internal dependencies\n */\nimport ColorGradientControl from '../colors-gradients/control';\n\nexport default function ColorPaletteControl( {\n\tonChange,\n\tvalue,\n\t...otherProps\n} ) {\n\treturn (\n\t\t\n\t);\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"date\"];","/**\n * WordPress dependencies\n */\nimport { _x, __ } from '@wordpress/i18n';\nimport { dateI18n, humanTimeDiff } from '@wordpress/date';\nimport { useState, createInterpolateElement } from '@wordpress/element';\nimport {\n\tTextControl,\n\tExternalLink,\n\tVisuallyHidden,\n\tToggleControl,\n\t__experimentalVStack as VStack,\n\tCustomSelectControl,\n} from '@wordpress/components';\n\n// So that we illustrate the different formats in the dropdown properly, show a date that is\n// somwhat recent, has a day greater than 12, and a month with more than three letters.\nconst exampleDate = new Date();\nexampleDate.setDate( 20 );\nexampleDate.setMonth( exampleDate.getMonth() - 3 );\nif ( exampleDate.getMonth() === 4 ) {\n\t// May has three letters, so use March.\n\texampleDate.setMonth( 3 );\n}\n\n/**\n * The `DateFormatPicker` component renders controls that let the user choose a\n * _date format_. That is, how they want their dates to be formatted.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/date-format-picker/README.md\n *\n * @param {Object} props\n * @param {string|null} props.format The selected date\n * format. If\n * `null`,\n * _Default_ is\n * selected.\n * @param {string} props.defaultFormat The date format that\n * will be used if the\n * user selects\n * 'Default'.\n * @param {( format: string|null ) => void} props.onChange Called when a\n * selection is\n * made. If `null`,\n * _Default_ is\n * selected.\n */\nexport default function DateFormatPicker( {\n\tformat,\n\tdefaultFormat,\n\tonChange,\n} ) {\n\treturn (\n\t\t
    \n\t\t\t{ __( 'Date format' ) }\n\t\t\t\n\t\t\t\t\tonChange( checked ? null : defaultFormat )\n\t\t\t\t}\n\t\t\t/>\n\t\t\t{ format && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nfunction NonDefaultControls( { format, onChange } ) {\n\t// Suggest a short format, medium format, long format, and a standardised\n\t// (YYYY-MM-DD) format. The short, medium, and long formats are localised as\n\t// different languages have different ways of writing these. For example, 'F\n\t// j, Y' (April 20, 2022) in American English (en_US) is 'j. F Y' (20. April\n\t// 2022) in German (de). The resultant array is de-duplicated as some\n\t// languages will use the same format string for short, medium, and long\n\t// formats.\n\tconst suggestedFormats = [\n\t\t...new Set( [\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t'Y-m-d',\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'n/j/Y', 'short date format' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'n/j/Y g:i A', 'short date format with time' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'M j, Y', 'medium date format' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'M j, Y g:i A', 'medium date format with time' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'F j, Y', 'long date format' ),\n\t\t\t/* translators: See https://www.php.net/manual/datetime.format.php */\n\t\t\t_x( 'M j', 'short date format without the year' ),\n\t\t] ),\n\t];\n\n\tconst suggestedOptions = [\n\t\t...suggestedFormats.map( ( suggestedFormat, index ) => ( {\n\t\t\tkey: `suggested-${ index }`,\n\t\t\tname: dateI18n( suggestedFormat, exampleDate ),\n\t\t\tformat: suggestedFormat,\n\t\t} ) ),\n\t\t{\n\t\t\tkey: 'human-diff',\n\t\t\tname: humanTimeDiff( exampleDate ),\n\t\t\tformat: 'human-diff',\n\t\t},\n\t];\n\n\tconst customOption = {\n\t\tkey: 'custom',\n\t\tname: __( 'Custom' ),\n\t\tclassName:\n\t\t\t'block-editor-date-format-picker__custom-format-select-control__custom-option',\n\t\thint: __( 'Enter your own date format' ),\n\t};\n\n\tconst [ isCustom, setIsCustom ] = useState(\n\t\t() =>\n\t\t\t!! format &&\n\t\t\t! suggestedOptions.some( ( option ) => option.format === format )\n\t);\n\n\treturn (\n\t\t\n\t\t\t option.format === format\n\t\t\t\t\t\t ) ?? customOption\n\t\t\t\t}\n\t\t\t\tonChange={ ( { selectedItem } ) => {\n\t\t\t\t\tif ( selectedItem === customOption ) {\n\t\t\t\t\t\tsetIsCustom( true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetIsCustom( false );\n\t\t\t\t\t\tonChange( selectedItem.format );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ isCustom && (\n\t\t\t\tformat string.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLink: (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t\tvalue={ format }\n\t\t\t\t\tonChange={ ( value ) => onChange( value ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tColorIndicator,\n\tDropdown,\n\tFlexItem,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\t__experimentalHStack as HStack,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport ColorGradientControl from './control';\n\n// When the `ColorGradientSettingsDropdown` controls are being rendered to a\n// `ToolsPanel` they must be wrapped in a `ToolsPanelItem`.\nconst WithToolsPanelItem = ( { setting, children, panelId, ...props } ) => {\n\tconst clearValue = () => {\n\t\tif ( setting.colorValue ) {\n\t\t\tsetting.onColorChange();\n\t\t} else if ( setting.gradientValue ) {\n\t\t\tsetting.onGradientChange();\n\t\t}\n\t};\n\treturn (\n\t\t {\n\t\t\t\treturn !! setting.colorValue || !! setting.gradientValue;\n\t\t\t} }\n\t\t\tlabel={ setting.label }\n\t\t\tonDeselect={ clearValue }\n\t\t\tisShownByDefault={\n\t\t\t\tsetting.isShownByDefault !== undefined\n\t\t\t\t\t? setting.isShownByDefault\n\t\t\t\t\t: true\n\t\t\t}\n\t\t\t{ ...props }\n\t\t\tclassName=\"block-editor-tools-panel-color-gradient-settings__item\"\n\t\t\tpanelId={ panelId }\n\t\t\t// Pass resetAllFilter if supplied due to rendering via SlotFill\n\t\t\t// into parent ToolsPanel.\n\t\t\tresetAllFilter={ setting.resetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t\n\t);\n};\n\nconst LabeledColorIndicator = ( { colorValue, label } ) => (\n\t\n\t\t\n\t\t\n\t\t\t{ label }\n\t\t\n\t\n);\n\n// Renders a color dropdown's toggle as an `Item` if it is within an `ItemGroup`\n// or as a `Button` if it isn't e.g. the controls are being rendered in\n// a `ToolsPanel`.\nconst renderToggle =\n\t( settings ) =>\n\t( { onToggle, isOpen } ) => {\n\t\tconst { colorValue, label } = settings;\n\n\t\tconst toggleProps = {\n\t\t\tonClick: onToggle,\n\t\t\tclassName: clsx(\n\t\t\t\t'block-editor-panel-color-gradient-settings__dropdown',\n\t\t\t\t{ 'is-open': isOpen }\n\t\t\t),\n\t\t\t'aria-expanded': isOpen,\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n// Renders a collection of color controls as dropdowns. Depending upon the\n// context in which these dropdowns are being rendered, they may be wrapped\n// in an `ItemGroup` with each dropdown's toggle as an `Item`, or alternatively,\n// the may be individually wrapped in a `ToolsPanelItem` with the toggle as\n// a regular `Button`.\n//\n// For more context see: https://github.com/WordPress/gutenberg/pull/40084\nexport default function ColorGradientSettingsDropdown( {\n\tcolors,\n\tdisableCustomColors,\n\tdisableCustomGradients,\n\tenableAlpha,\n\tgradients,\n\tsettings,\n\t__experimentalIsRenderedInSidebar,\n\t...props\n} ) {\n\tlet popoverProps;\n\tif ( __experimentalIsRenderedInSidebar ) {\n\t\tpopoverProps = {\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t};\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ settings.map( ( setting, index ) => {\n\t\t\t\tconst controlProps = {\n\t\t\t\t\tclearable: false,\n\t\t\t\t\tcolorValue: setting.colorValue,\n\t\t\t\t\tcolors,\n\t\t\t\t\tdisableCustomColors,\n\t\t\t\t\tdisableCustomGradients,\n\t\t\t\t\tenableAlpha,\n\t\t\t\t\tgradientValue: setting.gradientValue,\n\t\t\t\t\tgradients,\n\t\t\t\t\tlabel: setting.label,\n\t\t\t\t\tonColorChange: setting.onColorChange,\n\t\t\t\t\tonGradientChange: setting.onGradientChange,\n\t\t\t\t\tshowTitle: false,\n\t\t\t\t\t__experimentalIsRenderedInSidebar,\n\t\t\t\t\t...setting,\n\t\t\t\t};\n\t\t\t\tconst toggleSettings = {\n\t\t\t\t\tcolorValue: setting.gradientValue ?? setting.colorValue,\n\t\t\t\t\tlabel: setting.label,\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\tsetting && (\n\t\t\t\t\t\t// If not in an `ItemGroup` wrap the dropdown in a\n\t\t\t\t\t\t// `ToolsPanelItem`\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalSpacer as Spacer,\n\t__experimentalToolsPanel as ToolsPanel,\n} from '@wordpress/components';\nimport { useRegistry } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ColorGradientSettingsDropdown from './dropdown';\nimport useColorsAndGradientsPalettes from './use-multiple-origin-colors-and-gradients';\n\nconst colorsAndGradientKeys = [\n\t'colors',\n\t'disableCustomColors',\n\t'gradients',\n\t'disableCustomGradients',\n];\n\nexport const PanelColorGradientSettingsInner = ( {\n\tclassName,\n\tcolors,\n\tgradients,\n\tdisableCustomColors,\n\tdisableCustomGradients,\n\tchildren,\n\tsettings,\n\ttitle,\n\tshowTitle = true,\n\t__experimentalIsRenderedInSidebar,\n\tenableAlpha,\n} ) => {\n\tconst panelId = useInstanceId( PanelColorGradientSettingsInner );\n\tconst { batch } = useRegistry();\n\tif (\n\t\t( ! colors || colors.length === 0 ) &&\n\t\t( ! gradients || gradients.length === 0 ) &&\n\t\tdisableCustomColors &&\n\t\tdisableCustomGradients &&\n\t\tsettings?.every(\n\t\t\t( setting ) =>\n\t\t\t\t( ! setting.colors || setting.colors.length === 0 ) &&\n\t\t\t\t( ! setting.gradients || setting.gradients.length === 0 ) &&\n\t\t\t\t( setting.disableCustomColors === undefined ||\n\t\t\t\t\tsetting.disableCustomColors ) &&\n\t\t\t\t( setting.disableCustomGradients === undefined ||\n\t\t\t\t\tsetting.disableCustomGradients )\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tbatch( () => {\n\t\t\t\t\tsettings.forEach(\n\t\t\t\t\t\t( {\n\t\t\t\t\t\t\tcolorValue,\n\t\t\t\t\t\t\tgradientValue,\n\t\t\t\t\t\t\tonColorChange,\n\t\t\t\t\t\t\tonGradientChange,\n\t\t\t\t\t\t} ) => {\n\t\t\t\t\t\t\tif ( colorValue ) {\n\t\t\t\t\t\t\t\tonColorChange();\n\t\t\t\t\t\t\t} else if ( gradientValue ) {\n\t\t\t\t\t\t\t\tonGradientChange();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tpanelId={ panelId }\n\t\t\t__experimentalFirstVisibleItemClass=\"first\"\n\t\t\t__experimentalLastVisibleItemClass=\"last\"\n\t\t>\n\t\t\t\n\t\t\t{ !! children && (\n\t\t\t\t<>\n\t\t\t\t\t { children }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n};\n\nconst PanelColorGradientSettingsSelect = ( props ) => {\n\tconst colorGradientSettings = useColorsAndGradientsPalettes();\n\treturn (\n\t\t\n\t);\n};\n\nconst PanelColorGradientSettings = ( props ) => {\n\tif (\n\t\tcolorsAndGradientKeys.every( ( key ) => props.hasOwnProperty( key ) )\n\t) {\n\t\treturn ;\n\t}\n\treturn ;\n};\n\nexport default PanelColorGradientSettings;\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst aspectRatio = (\n\t\n\t\t\n\t\n);\n\nexport default aspectRatio;\n","export const MIN_ZOOM = 100;\nexport const MAX_ZOOM = 300;\nexport const POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useSaveImage from './use-save-image';\nimport useTransformImage from './use-transform-image';\n\nconst ImageEditingContext = createContext( {} );\n\nexport const useImageEditingContext = () => useContext( ImageEditingContext );\n\nexport default function ImageEditingProvider( {\n\tid,\n\turl,\n\tnaturalWidth,\n\tnaturalHeight,\n\tonFinishEditing,\n\tonSaveImage,\n\tchildren,\n} ) {\n\tconst transformImage = useTransformImage( {\n\t\turl,\n\t\tnaturalWidth,\n\t\tnaturalHeight,\n\t} );\n\n\tconst saveImage = useSaveImage( {\n\t\tid,\n\t\turl,\n\t\tonSaveImage,\n\t\tonFinishEditing,\n\t\t...transformImage,\n\t} );\n\n\tconst providerValue = useMemo(\n\t\t() => ( {\n\t\t\t...transformImage,\n\t\t\t...saveImage,\n\t\t} ),\n\t\t[ transformImage, saveImage ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { applyFilters } from '@wordpress/hooks';\n\nexport default function useTransformImage( {\n\turl,\n\tnaturalWidth,\n\tnaturalHeight,\n} ) {\n\tconst [ editedUrl, setEditedUrl ] = useState();\n\tconst [ crop, setCrop ] = useState();\n\tconst [ position, setPosition ] = useState( { x: 0, y: 0 } );\n\tconst [ zoom, setZoom ] = useState( 100 );\n\tconst [ rotation, setRotation ] = useState( 0 );\n\tconst defaultAspect = naturalWidth / naturalHeight;\n\tconst [ aspect, setAspect ] = useState( defaultAspect );\n\n\tconst rotateClockwise = useCallback( () => {\n\t\tconst angle = ( rotation + 90 ) % 360;\n\n\t\tlet naturalAspectRatio = defaultAspect;\n\n\t\tif ( rotation % 180 === 90 ) {\n\t\t\tnaturalAspectRatio = 1 / defaultAspect;\n\t\t}\n\n\t\tif ( angle === 0 ) {\n\t\t\tsetEditedUrl();\n\t\t\tsetRotation( angle );\n\t\t\tsetAspect( defaultAspect );\n\t\t\tsetPosition( ( prevPosition ) => ( {\n\t\t\t\tx: -( prevPosition.y * naturalAspectRatio ),\n\t\t\t\ty: prevPosition.x * naturalAspectRatio,\n\t\t\t} ) );\n\t\t\treturn;\n\t\t}\n\n\t\tfunction editImage( event ) {\n\t\t\tconst canvas = document.createElement( 'canvas' );\n\n\t\t\tlet translateX = 0;\n\t\t\tlet translateY = 0;\n\n\t\t\tif ( angle % 180 ) {\n\t\t\t\tcanvas.width = event.target.height;\n\t\t\t\tcanvas.height = event.target.width;\n\t\t\t} else {\n\t\t\t\tcanvas.width = event.target.width;\n\t\t\t\tcanvas.height = event.target.height;\n\t\t\t}\n\n\t\t\tif ( angle === 90 || angle === 180 ) {\n\t\t\t\ttranslateX = canvas.width;\n\t\t\t}\n\n\t\t\tif ( angle === 270 || angle === 180 ) {\n\t\t\t\ttranslateY = canvas.height;\n\t\t\t}\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\n\t\t\tcontext.translate( translateX, translateY );\n\t\t\tcontext.rotate( ( angle * Math.PI ) / 180 );\n\t\t\tcontext.drawImage( event.target, 0, 0 );\n\n\t\t\tcanvas.toBlob( ( blob ) => {\n\t\t\t\tsetEditedUrl( URL.createObjectURL( blob ) );\n\t\t\t\tsetRotation( angle );\n\t\t\t\tsetAspect( canvas.width / canvas.height );\n\t\t\t\tsetPosition( ( prevPosition ) => ( {\n\t\t\t\t\tx: -( prevPosition.y * naturalAspectRatio ),\n\t\t\t\t\ty: prevPosition.x * naturalAspectRatio,\n\t\t\t\t} ) );\n\t\t\t} );\n\t\t}\n\n\t\tconst el = new window.Image();\n\t\tel.src = url;\n\t\tel.onload = editImage;\n\n\t\tconst imgCrossOrigin = applyFilters(\n\t\t\t'media.crossOrigin',\n\t\t\tundefined,\n\t\t\turl\n\t\t);\n\t\tif ( typeof imgCrossOrigin === 'string' ) {\n\t\t\tel.crossOrigin = imgCrossOrigin;\n\t\t}\n\t}, [ rotation, defaultAspect, url ] );\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\teditedUrl,\n\t\t\tsetEditedUrl,\n\t\t\tcrop,\n\t\t\tsetCrop,\n\t\t\tposition,\n\t\t\tsetPosition,\n\t\t\tzoom,\n\t\t\tsetZoom,\n\t\t\trotation,\n\t\t\tsetRotation,\n\t\t\trotateClockwise,\n\t\t\taspect,\n\t\t\tsetAspect,\n\t\t\tdefaultAspect,\n\t\t} ),\n\t\t[\n\t\t\teditedUrl,\n\t\t\tcrop,\n\t\t\tposition,\n\t\t\tzoom,\n\t\t\trotation,\n\t\t\trotateClockwise,\n\t\t\taspect,\n\t\t\tdefaultAspect,\n\t\t]\n\t);\n}\n","/**\n * WordPress dependencies\n */\n// Disable Reason: Needs to be refactored.\n// eslint-disable-next-line no-restricted-imports\nimport apiFetch from '@wordpress/api-fetch';\nimport { useDispatch } from '@wordpress/data';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\nexport default function useSaveImage( {\n\tcrop,\n\trotation,\n\turl,\n\tid,\n\tonSaveImage,\n\tonFinishEditing,\n} ) {\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst [ isInProgress, setIsInProgress ] = useState( false );\n\n\tconst cancel = useCallback( () => {\n\t\tsetIsInProgress( false );\n\t\tonFinishEditing();\n\t}, [ onFinishEditing ] );\n\n\tconst apply = useCallback( () => {\n\t\tsetIsInProgress( true );\n\n\t\tconst modifiers = [];\n\n\t\tif ( rotation > 0 ) {\n\t\t\tmodifiers.push( {\n\t\t\t\ttype: 'rotate',\n\t\t\t\targs: {\n\t\t\t\t\tangle: rotation,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\t// The crop script may return some very small, sub-pixel values when the image was not cropped.\n\t\t// Crop only when the new size has changed by more than 0.1%.\n\t\tif ( crop.width < 99.9 || crop.height < 99.9 ) {\n\t\t\tmodifiers.push( {\n\t\t\t\ttype: 'crop',\n\t\t\t\targs: {\n\t\t\t\t\tleft: crop.x,\n\t\t\t\t\ttop: crop.y,\n\t\t\t\t\twidth: crop.width,\n\t\t\t\t\theight: crop.height,\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\n\t\tif ( modifiers.length === 0 ) {\n\t\t\t// No changes to apply.\n\t\t\tsetIsInProgress( false );\n\t\t\tonFinishEditing();\n\t\t\treturn;\n\t\t}\n\n\t\tapiFetch( {\n\t\t\tpath: `/wp/v2/media/${ id }/edit`,\n\t\t\tmethod: 'POST',\n\t\t\tdata: { src: url, modifiers },\n\t\t} )\n\t\t\t.then( ( response ) => {\n\t\t\t\tonSaveImage( {\n\t\t\t\t\tid: response.id,\n\t\t\t\t\turl: response.source_url,\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tcreateErrorNotice(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: 1. Error message */\n\t\t\t\t\t\t__( 'Could not edit image. %s' ),\n\t\t\t\t\t\tstripHTML( error.message )\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'image-editing-error',\n\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} )\n\t\t\t.finally( () => {\n\t\t\t\tsetIsInProgress( false );\n\t\t\t\tonFinishEditing();\n\t\t\t} );\n\t}, [\n\t\tcrop,\n\t\trotation,\n\t\tid,\n\t\turl,\n\t\tonSaveImage,\n\t\tcreateErrorNotice,\n\t\tonFinishEditing,\n\t] );\n\n\treturn useMemo(\n\t\t() => ( {\n\t\t\tisInProgress,\n\t\t\tapply,\n\t\t\tcancel,\n\t\t} ),\n\t\t[ isInProgress, apply, cancel ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { check, aspectRatio as aspectRatioIcon } from '@wordpress/icons';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\nimport { POPOVER_PROPS } from './constants';\nimport { useImageEditingContext } from './context';\n\nfunction AspectRatioGroup( {\n\taspectRatios,\n\tisDisabled,\n\tlabel,\n\tonClick,\n\tvalue,\n} ) {\n\treturn (\n\t\t\n\t\t\t{ aspectRatios.map( ( { name, slug, ratio } ) => (\n\t\t\t\t {\n\t\t\t\t\t\tonClick( ratio );\n\t\t\t\t\t} }\n\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\tisSelected={ ratio === value }\n\t\t\t\t\ticon={ ratio === value ? check : undefined }\n\t\t\t\t>\n\t\t\t\t\t{ name }\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nexport function ratioToNumber( str ) {\n\t// TODO: support two-value aspect ratio?\n\t// https://css-tricks.com/almanac/properties/a/aspect-ratio/#aa-it-can-take-two-values\n\tconst [ a, b, ...rest ] = str.split( '/' ).map( Number );\n\tif (\n\t\ta <= 0 ||\n\t\tb <= 0 ||\n\t\tNumber.isNaN( a ) ||\n\t\tNumber.isNaN( b ) ||\n\t\trest.length\n\t) {\n\t\treturn NaN;\n\t}\n\treturn b ? a / b : a;\n}\n\nfunction presetRatioAsNumber( { ratio, ...rest } ) {\n\treturn {\n\t\tratio: ratioToNumber( ratio ),\n\t\t...rest,\n\t};\n}\n\nexport default function AspectRatioDropdown( { toggleProps } ) {\n\tconst { isInProgress, aspect, setAspect, defaultAspect } =\n\t\tuseImageEditingContext();\n\n\tconst [ defaultRatios, themeRatios, showDefaultRatios ] = useSettings(\n\t\t'dimensions.aspectRatios.default',\n\t\t'dimensions.aspectRatios.theme',\n\t\t'dimensions.defaultAspectRatios'\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t {\n\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\taspectRatios={ [\n\t\t\t\t\t\t\t// All ratios should be mirrored in AspectRatioTool in @wordpress/block-editor.\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tslug: 'original',\n\t\t\t\t\t\t\t\tname: __( 'Original' ),\n\t\t\t\t\t\t\t\taspect: defaultAspect,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...( showDefaultRatios\n\t\t\t\t\t\t\t\t? defaultRatios\n\t\t\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio === 1 )\n\t\t\t\t\t\t\t\t: [] ),\n\t\t\t\t\t\t] }\n\t\t\t\t\t/>\n\t\t\t\t\t{ themeRatios?.length > 0 && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ themeRatios }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ showDefaultRatios && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ defaultRatios\n\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio > 1 ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ showDefaultRatios && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ defaultRatios\n\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio < 1 ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Area, MediaSize, Point, Size } from './types'\n\n/**\n * Compute the dimension of the crop area based on media size,\n * aspect ratio and optionally rotation\n */\nexport function getCropSize(\n mediaWidth: number,\n mediaHeight: number,\n containerWidth: number,\n containerHeight: number,\n aspect: number,\n rotation = 0\n): Size {\n const { width, height } = rotateSize(mediaWidth, mediaHeight, rotation)\n const fittingWidth = Math.min(width, containerWidth)\n const fittingHeight = Math.min(height, containerHeight)\n\n if (fittingWidth > fittingHeight * aspect) {\n return {\n width: fittingHeight * aspect,\n height: fittingHeight,\n }\n }\n\n return {\n width: fittingWidth,\n height: fittingWidth / aspect,\n }\n}\n\n/**\n * Compute media zoom.\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\n */\nexport function getMediaZoom(mediaSize: MediaSize) {\n // Take the axis with more pixels to improve accuracy\n return mediaSize.width > mediaSize.height\n ? mediaSize.width / mediaSize.naturalWidth\n : mediaSize.height / mediaSize.naturalHeight\n}\n\n/**\n * Ensure a new media position stays in the crop area.\n */\nexport function restrictPosition(\n position: Point,\n mediaSize: Size,\n cropSize: Size,\n zoom: number,\n rotation = 0\n): Point {\n const { width, height } = rotateSize(mediaSize.width, mediaSize.height, rotation)\n\n return {\n x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n y: restrictPositionCoord(position.y, height, cropSize.height, zoom),\n }\n}\n\nfunction restrictPositionCoord(\n position: number,\n mediaSize: number,\n cropSize: number,\n zoom: number\n): number {\n const maxPosition = (mediaSize * zoom) / 2 - cropSize / 2\n\n return clamp(position, -maxPosition, maxPosition)\n}\n\nexport function getDistanceBetweenPoints(pointA: Point, pointB: Point) {\n return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2))\n}\n\nexport function getRotationBetweenPoints(pointA: Point, pointB: Point) {\n return (Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180) / Math.PI\n}\n\n/**\n * Compute the output cropped area of the media in percentages and pixels.\n * x/y are the top-left coordinates on the src media\n */\nexport function computeCroppedArea(\n crop: Point,\n mediaSize: MediaSize,\n cropSize: Size,\n aspect: number,\n zoom: number,\n rotation = 0,\n restrictPosition = true\n): { croppedAreaPercentages: Area; croppedAreaPixels: Area } {\n // if the media is rotated by the user, we cannot limit the position anymore\n // as it might need to be negative.\n const limitAreaFn = restrictPosition ? limitArea : noOp\n\n const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation)\n const mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation)\n\n // calculate the crop area in percentages\n // in the rotated space\n const croppedAreaPercentages = {\n x: limitAreaFn(\n 100,\n (((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width) *\n 100\n ),\n y: limitAreaFn(\n 100,\n (((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) /\n mediaBBoxSize.height) *\n 100\n ),\n width: limitAreaFn(100, ((cropSize.width / mediaBBoxSize.width) * 100) / zoom),\n height: limitAreaFn(100, ((cropSize.height / mediaBBoxSize.height) * 100) / zoom),\n }\n\n // we compute the pixels size naively\n const widthInPixels = Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.width,\n (croppedAreaPercentages.width * mediaNaturalBBoxSize.width) / 100\n )\n )\n const heightInPixels = Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.height,\n (croppedAreaPercentages.height * mediaNaturalBBoxSize.height) / 100\n )\n )\n const isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect\n\n // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n // thus we want to compute the width from the height and aspect for accuracy.\n // Otherwise, we compute the height from width and aspect.\n const sizePixels = isImgWiderThanHigh\n ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels,\n }\n : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect),\n }\n\n const croppedAreaPixels = {\n ...sizePixels,\n x: Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.width - sizePixels.width,\n (croppedAreaPercentages.x * mediaNaturalBBoxSize.width) / 100\n )\n ),\n y: Math.round(\n limitAreaFn(\n mediaNaturalBBoxSize.height - sizePixels.height,\n (croppedAreaPercentages.y * mediaNaturalBBoxSize.height) / 100\n )\n ),\n }\n\n return { croppedAreaPercentages, croppedAreaPixels }\n}\n\n/**\n * Ensure the returned value is between 0 and max\n */\nfunction limitArea(max: number, value: number): number {\n return Math.min(max, Math.max(0, value))\n}\n\nfunction noOp(_max: number, value: number) {\n return value\n}\n\n/**\n * Compute crop and zoom from the croppedAreaPercentages.\n */\nexport function getInitialCropFromCroppedAreaPercentages(\n croppedAreaPercentages: Area,\n mediaSize: MediaSize,\n rotation: number,\n cropSize: Size,\n minZoom: number,\n maxZoom: number\n) {\n const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation)\n\n // This is the inverse process of computeCroppedArea\n const zoom = clamp(\n (cropSize.width / mediaBBoxSize.width) * (100 / croppedAreaPercentages.width),\n minZoom,\n maxZoom\n )\n\n const crop = {\n x:\n (zoom * mediaBBoxSize.width) / 2 -\n cropSize.width / 2 -\n mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n y:\n (zoom * mediaBBoxSize.height) / 2 -\n cropSize.height / 2 -\n mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100),\n }\n\n return { crop, zoom }\n}\n\n/**\n * Compute zoom from the croppedAreaPixels\n */\nfunction getZoomFromCroppedAreaPixels(\n croppedAreaPixels: Area,\n mediaSize: MediaSize,\n cropSize: Size\n): number {\n const mediaZoom = getMediaZoom(mediaSize)\n\n return cropSize.height > cropSize.width\n ? cropSize.height / (croppedAreaPixels.height * mediaZoom)\n : cropSize.width / (croppedAreaPixels.width * mediaZoom)\n}\n\n/**\n * Compute crop and zoom from the croppedAreaPixels\n */\nexport function getInitialCropFromCroppedAreaPixels(\n croppedAreaPixels: Area,\n mediaSize: MediaSize,\n rotation = 0,\n cropSize: Size,\n minZoom: number,\n maxZoom: number\n): { crop: Point; zoom: number } {\n const mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation)\n\n const zoom = clamp(\n getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize),\n minZoom,\n maxZoom\n )\n\n const cropZoom =\n cropSize.height > cropSize.width\n ? cropSize.height / croppedAreaPixels.height\n : cropSize.width / croppedAreaPixels.width\n\n const crop = {\n x:\n ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n y:\n ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) *\n cropZoom,\n }\n return { crop, zoom }\n}\n\n/**\n * Return the point that is the center of point a and b\n */\nexport function getCenter(a: Point, b: Point): Point {\n return {\n x: (b.x + a.x) / 2,\n y: (b.y + a.y) / 2,\n }\n}\n\nexport function getRadianAngle(degreeValue: number) {\n return (degreeValue * Math.PI) / 180\n}\n\n/**\n * Returns the new bounding area of a rotated rectangle.\n */\nexport function rotateSize(width: number, height: number, rotation: number): Size {\n const rotRad = getRadianAngle(rotation)\n\n return {\n width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height),\n }\n}\n\n/**\n * Clamp value between min and max\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\n/**\n * Combine multiple class names into a single string.\n */\nexport function classNames(...args: (boolean | string | number | undefined | void | null)[]) {\n return args\n .filter((value) => {\n if (typeof value === 'string' && value.length > 0) {\n return true\n }\n\n return false\n })\n .join(' ')\n .trim()\n}\n","import * as React from 'react'\nimport normalizeWheel from 'normalize-wheel'\nimport { Area, MediaSize, Point, Size, VideoSrc } from './types'\nimport {\n getCropSize,\n restrictPosition,\n getDistanceBetweenPoints,\n getRotationBetweenPoints,\n computeCroppedArea,\n getCenter,\n getInitialCropFromCroppedAreaPixels,\n getInitialCropFromCroppedAreaPercentages,\n classNames,\n clamp,\n} from './helpers'\nimport cssStyles from './styles.css'\n\nexport type CropperProps = {\n image?: string\n video?: string | VideoSrc[]\n transform?: string\n crop: Point\n zoom: number\n rotation: number\n aspect: number\n minZoom: number\n maxZoom: number\n cropShape: 'rect' | 'round'\n cropSize?: Size\n objectFit?: 'contain' | 'cover' | 'horizontal-cover' | 'vertical-cover'\n showGrid?: boolean\n zoomSpeed: number\n zoomWithScroll?: boolean\n onCropChange: (location: Point) => void\n onZoomChange?: (zoom: number) => void\n onRotationChange?: (rotation: number) => void\n onCropComplete?: (croppedArea: Area, croppedAreaPixels: Area) => void\n onCropAreaChange?: (croppedArea: Area, croppedAreaPixels: Area) => void\n onCropSizeChange?: (cropSize: Size) => void\n onInteractionStart?: () => void\n onInteractionEnd?: () => void\n onMediaLoaded?: (mediaSize: MediaSize) => void\n style: {\n containerStyle?: React.CSSProperties\n mediaStyle?: React.CSSProperties\n cropAreaStyle?: React.CSSProperties\n }\n classes: {\n containerClassName?: string\n mediaClassName?: string\n cropAreaClassName?: string\n }\n restrictPosition: boolean\n mediaProps: React.ImgHTMLAttributes | React.VideoHTMLAttributes\n disableAutomaticStylesInjection?: boolean\n initialCroppedAreaPixels?: Area\n initialCroppedAreaPercentages?: Area\n onTouchRequest?: (e: React.TouchEvent) => boolean\n onWheelRequest?: (e: WheelEvent) => boolean\n setImageRef?: (ref: React.RefObject) => void\n setVideoRef?: (ref: React.RefObject) => void\n setMediaSize?: (size: MediaSize) => void\n setCropSize?: (size: Size) => void\n nonce?: string\n}\n\ntype State = {\n cropSize: Size | null\n hasWheelJustStarted: boolean\n mediaObjectFit: String | undefined\n}\n\nconst MIN_ZOOM = 1\nconst MAX_ZOOM = 3\n\ntype GestureEvent = UIEvent & {\n rotation: number\n scale: number\n clientX: number\n clientY: number\n}\n\nclass Cropper extends React.Component {\n static defaultProps = {\n zoom: 1,\n rotation: 0,\n aspect: 4 / 3,\n maxZoom: MAX_ZOOM,\n minZoom: MIN_ZOOM,\n cropShape: 'rect' as const,\n objectFit: 'contain' as const,\n showGrid: true,\n style: {},\n classes: {},\n mediaProps: {},\n zoomSpeed: 1,\n restrictPosition: true,\n zoomWithScroll: true,\n }\n\n imageRef: React.RefObject = React.createRef()\n videoRef: React.RefObject = React.createRef()\n containerPosition: Point = { x: 0, y: 0 }\n containerRef: HTMLDivElement | null = null\n styleRef: HTMLStyleElement | null = null\n containerRect: DOMRect | null = null\n mediaSize: MediaSize = { width: 0, height: 0, naturalWidth: 0, naturalHeight: 0 }\n dragStartPosition: Point = { x: 0, y: 0 }\n dragStartCrop: Point = { x: 0, y: 0 }\n gestureZoomStart = 0\n gestureRotationStart = 0\n isTouching = false\n lastPinchDistance = 0\n lastPinchRotation = 0\n rafDragTimeout: number | null = null\n rafPinchTimeout: number | null = null\n wheelTimer: number | null = null\n currentDoc: Document | null = typeof document !== 'undefined' ? document : null\n currentWindow: Window | null = typeof window !== 'undefined' ? window : null\n resizeObserver: ResizeObserver | null = null\n\n state: State = {\n cropSize: null,\n hasWheelJustStarted: false,\n mediaObjectFit: undefined,\n }\n\n componentDidMount() {\n if (!this.currentDoc || !this.currentWindow) return\n if (this.containerRef) {\n if (this.containerRef.ownerDocument) {\n this.currentDoc = this.containerRef.ownerDocument\n }\n if (this.currentDoc.defaultView) {\n this.currentWindow = this.currentDoc.defaultView\n }\n\n this.initResizeObserver()\n // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.addEventListener('resize', this.computeSizes)\n }\n this.props.zoomWithScroll &&\n this.containerRef.addEventListener('wheel', this.onWheel, { passive: false })\n this.containerRef.addEventListener('gesturestart', this.onGestureStart as EventListener)\n }\n\n this.currentDoc.addEventListener('scroll', this.onScroll)\n\n if (!this.props.disableAutomaticStylesInjection) {\n this.styleRef = this.currentDoc.createElement('style')\n this.styleRef.setAttribute('type', 'text/css')\n if (this.props.nonce) {\n this.styleRef.setAttribute('nonce', this.props.nonce)\n }\n this.styleRef.innerHTML = cssStyles\n this.currentDoc.head.appendChild(this.styleRef)\n }\n\n // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n if (this.imageRef.current && this.imageRef.current.complete) {\n this.onMediaLoad()\n }\n\n // set image and video refs in the parent if the callbacks exist\n if (this.props.setImageRef) {\n this.props.setImageRef(this.imageRef)\n }\n\n if (this.props.setVideoRef) {\n this.props.setVideoRef(this.videoRef)\n }\n }\n\n componentWillUnmount() {\n if (!this.currentDoc || !this.currentWindow) return\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.removeEventListener('resize', this.computeSizes)\n }\n this.resizeObserver?.disconnect()\n if (this.containerRef) {\n this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari)\n }\n\n if (this.styleRef) {\n this.styleRef.parentNode?.removeChild(this.styleRef)\n }\n\n this.cleanEvents()\n this.props.zoomWithScroll && this.clearScrollEvent()\n }\n\n componentDidUpdate(prevProps: CropperProps) {\n if (prevProps.rotation !== this.props.rotation) {\n this.computeSizes()\n this.recomputeCropPosition()\n } else if (prevProps.aspect !== this.props.aspect) {\n this.computeSizes()\n } else if (prevProps.objectFit !== this.props.objectFit) {\n this.computeSizes()\n } else if (prevProps.zoom !== this.props.zoom) {\n this.recomputeCropPosition()\n } else if (\n prevProps.cropSize?.height !== this.props.cropSize?.height ||\n prevProps.cropSize?.width !== this.props.cropSize?.width\n ) {\n this.computeSizes()\n } else if (\n prevProps.crop?.x !== this.props.crop?.x ||\n prevProps.crop?.y !== this.props.crop?.y\n ) {\n this.emitCropAreaChange()\n }\n if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n this.props.zoomWithScroll\n ? this.containerRef.addEventListener('wheel', this.onWheel, { passive: false })\n : this.clearScrollEvent()\n }\n if (prevProps.video !== this.props.video) {\n this.videoRef.current?.load()\n }\n\n const objectFit = this.getObjectFit()\n if (objectFit !== this.state.mediaObjectFit) {\n this.setState({ mediaObjectFit: objectFit }, this.computeSizes)\n }\n }\n\n initResizeObserver = () => {\n if (typeof window.ResizeObserver === 'undefined' || !this.containerRef) {\n return\n }\n let isFirstResize = true\n this.resizeObserver = new window.ResizeObserver((entries) => {\n if (isFirstResize) {\n isFirstResize = false // observe() is called on mount, we don't want to trigger a recompute on mount\n return\n }\n this.computeSizes()\n })\n this.resizeObserver.observe(this.containerRef)\n }\n\n // this is to prevent Safari on iOS >= 10 to zoom the page\n preventZoomSafari = (e: Event) => e.preventDefault()\n\n cleanEvents = () => {\n if (!this.currentDoc) return\n this.currentDoc.removeEventListener('mousemove', this.onMouseMove)\n this.currentDoc.removeEventListener('mouseup', this.onDragStopped)\n this.currentDoc.removeEventListener('touchmove', this.onTouchMove)\n this.currentDoc.removeEventListener('touchend', this.onDragStopped)\n this.currentDoc.removeEventListener('gesturemove', this.onGestureMove as EventListener)\n this.currentDoc.removeEventListener('gestureend', this.onGestureEnd as EventListener)\n this.currentDoc.removeEventListener('scroll', this.onScroll)\n }\n\n clearScrollEvent = () => {\n if (this.containerRef) this.containerRef.removeEventListener('wheel', this.onWheel)\n if (this.wheelTimer) {\n clearTimeout(this.wheelTimer)\n }\n }\n\n onMediaLoad = () => {\n const cropSize = this.computeSizes()\n\n if (cropSize) {\n this.emitCropData()\n this.setInitialCrop(cropSize)\n }\n\n if (this.props.onMediaLoaded) {\n this.props.onMediaLoaded(this.mediaSize)\n }\n }\n\n setInitialCrop = (cropSize: Size) => {\n if (this.props.initialCroppedAreaPercentages) {\n const { crop, zoom } = getInitialCropFromCroppedAreaPercentages(\n this.props.initialCroppedAreaPercentages,\n this.mediaSize,\n this.props.rotation,\n cropSize,\n this.props.minZoom,\n this.props.maxZoom\n )\n\n this.props.onCropChange(crop)\n this.props.onZoomChange && this.props.onZoomChange(zoom)\n } else if (this.props.initialCroppedAreaPixels) {\n const { crop, zoom } = getInitialCropFromCroppedAreaPixels(\n this.props.initialCroppedAreaPixels,\n this.mediaSize,\n this.props.rotation,\n cropSize,\n this.props.minZoom,\n this.props.maxZoom\n )\n\n this.props.onCropChange(crop)\n this.props.onZoomChange && this.props.onZoomChange(zoom)\n }\n }\n\n getAspect() {\n const { cropSize, aspect } = this.props\n if (cropSize) {\n return cropSize.width / cropSize.height\n }\n return aspect\n }\n\n getObjectFit() {\n if (this.props.objectFit === 'cover') {\n const mediaRef = this.imageRef.current || this.videoRef.current\n\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect()\n const containerAspect = this.containerRect.width / this.containerRect.height\n const naturalWidth =\n this.imageRef.current?.naturalWidth || this.videoRef.current?.videoWidth || 0\n const naturalHeight =\n this.imageRef.current?.naturalHeight || this.videoRef.current?.videoHeight || 0\n const mediaAspect = naturalWidth / naturalHeight\n\n return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover'\n }\n return 'horizontal-cover'\n }\n\n return this.props.objectFit\n }\n\n computeSizes = () => {\n const mediaRef = this.imageRef.current || this.videoRef.current\n\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect()\n this.saveContainerPosition()\n const containerAspect = this.containerRect.width / this.containerRect.height\n const naturalWidth =\n this.imageRef.current?.naturalWidth || this.videoRef.current?.videoWidth || 0\n const naturalHeight =\n this.imageRef.current?.naturalHeight || this.videoRef.current?.videoHeight || 0\n const isMediaScaledDown =\n mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight\n const mediaAspect = naturalWidth / naturalHeight\n\n // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n // as the values they report are rounded. That will result in precision losses\n // when calculating zoom. We use the fact that the media is positionned relative\n // to the container. That allows us to use the container's dimensions\n // and natural aspect ratio of the media to calculate accurate media size.\n // However, for this to work, the container should not be rotated\n let renderedMediaSize: Size\n\n if (isMediaScaledDown) {\n switch (this.state.mediaObjectFit) {\n default:\n case 'contain':\n renderedMediaSize =\n containerAspect > mediaAspect\n ? {\n width: this.containerRect.height * mediaAspect,\n height: this.containerRect.height,\n }\n : {\n width: this.containerRect.width,\n height: this.containerRect.width / mediaAspect,\n }\n break\n case 'horizontal-cover':\n renderedMediaSize = {\n width: this.containerRect.width,\n height: this.containerRect.width / mediaAspect,\n }\n break\n case 'vertical-cover':\n renderedMediaSize = {\n width: this.containerRect.height * mediaAspect,\n height: this.containerRect.height,\n }\n break\n }\n } else {\n renderedMediaSize = {\n width: mediaRef.offsetWidth,\n height: mediaRef.offsetHeight,\n }\n }\n\n this.mediaSize = {\n ...renderedMediaSize,\n naturalWidth,\n naturalHeight,\n }\n\n // set media size in the parent\n if (this.props.setMediaSize) {\n this.props.setMediaSize(this.mediaSize)\n }\n\n const cropSize = this.props.cropSize\n ? this.props.cropSize\n : getCropSize(\n this.mediaSize.width,\n this.mediaSize.height,\n this.containerRect.width,\n this.containerRect.height,\n this.props.aspect,\n this.props.rotation\n )\n\n if (\n this.state.cropSize?.height !== cropSize.height ||\n this.state.cropSize?.width !== cropSize.width\n ) {\n this.props.onCropSizeChange && this.props.onCropSizeChange(cropSize)\n }\n this.setState({ cropSize }, this.recomputeCropPosition)\n // pass crop size to parent\n if (this.props.setCropSize) {\n this.props.setCropSize(cropSize)\n }\n\n return cropSize\n }\n }\n\n saveContainerPosition = () => {\n if (this.containerRef) {\n const bounds = this.containerRef.getBoundingClientRect()\n this.containerPosition = { x: bounds.left, y: bounds.top }\n }\n }\n\n static getMousePoint = (e: MouseEvent | React.MouseEvent | GestureEvent) => ({\n x: Number(e.clientX),\n y: Number(e.clientY),\n })\n\n static getTouchPoint = (touch: Touch | React.Touch) => ({\n x: Number(touch.clientX),\n y: Number(touch.clientY),\n })\n\n onMouseDown = (e: React.MouseEvent) => {\n if (!this.currentDoc) return\n e.preventDefault()\n this.currentDoc.addEventListener('mousemove', this.onMouseMove)\n this.currentDoc.addEventListener('mouseup', this.onDragStopped)\n this.saveContainerPosition()\n this.onDragStart(Cropper.getMousePoint(e))\n }\n\n onMouseMove = (e: MouseEvent) => this.onDrag(Cropper.getMousePoint(e))\n\n onScroll = (e: Event) => {\n if (!this.currentDoc) return\n e.preventDefault()\n this.saveContainerPosition()\n }\n\n onTouchStart = (e: React.TouchEvent) => {\n if (!this.currentDoc) return\n this.isTouching = true\n if (this.props.onTouchRequest && !this.props.onTouchRequest(e)) {\n return\n }\n\n this.currentDoc.addEventListener('touchmove', this.onTouchMove, { passive: false }) // iOS 11 now defaults to passive: true\n this.currentDoc.addEventListener('touchend', this.onDragStopped)\n\n this.saveContainerPosition()\n\n if (e.touches.length === 2) {\n this.onPinchStart(e)\n } else if (e.touches.length === 1) {\n this.onDragStart(Cropper.getTouchPoint(e.touches[0]))\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n // Prevent whole page from scrolling on iOS.\n e.preventDefault()\n if (e.touches.length === 2) {\n this.onPinchMove(e)\n } else if (e.touches.length === 1) {\n this.onDrag(Cropper.getTouchPoint(e.touches[0]))\n }\n }\n\n onGestureStart = (e: GestureEvent) => {\n if (!this.currentDoc) return\n e.preventDefault()\n this.currentDoc.addEventListener('gesturechange', this.onGestureMove as EventListener)\n this.currentDoc.addEventListener('gestureend', this.onGestureEnd as EventListener)\n this.gestureZoomStart = this.props.zoom\n this.gestureRotationStart = this.props.rotation\n }\n\n onGestureMove = (e: GestureEvent) => {\n e.preventDefault()\n if (this.isTouching) {\n // this is to avoid conflict between gesture and touch events\n return\n }\n\n const point = Cropper.getMousePoint(e)\n const newZoom = this.gestureZoomStart - 1 + e.scale\n this.setNewZoom(newZoom, point, { shouldUpdatePosition: true })\n if (this.props.onRotationChange) {\n const newRotation = this.gestureRotationStart + e.rotation\n this.props.onRotationChange(newRotation)\n }\n }\n\n onGestureEnd = (e: GestureEvent) => {\n this.cleanEvents()\n }\n\n onDragStart = ({ x, y }: Point) => {\n this.dragStartPosition = { x, y }\n this.dragStartCrop = { ...this.props.crop }\n this.props.onInteractionStart?.()\n }\n\n onDrag = ({ x, y }: Point) => {\n if (!this.currentWindow) return\n if (this.rafDragTimeout) this.currentWindow.cancelAnimationFrame(this.rafDragTimeout)\n\n this.rafDragTimeout = this.currentWindow.requestAnimationFrame(() => {\n if (!this.state.cropSize) return\n if (x === undefined || y === undefined) return\n const offsetX = x - this.dragStartPosition.x\n const offsetY = y - this.dragStartPosition.y\n const requestedPosition = {\n x: this.dragStartCrop.x + offsetX,\n y: this.dragStartCrop.y + offsetY,\n }\n\n const newPosition = this.props.restrictPosition\n ? restrictPosition(\n requestedPosition,\n this.mediaSize,\n this.state.cropSize,\n this.props.zoom,\n this.props.rotation\n )\n : requestedPosition\n this.props.onCropChange(newPosition)\n })\n }\n\n onDragStopped = () => {\n this.isTouching = false\n this.cleanEvents()\n this.emitCropData()\n this.props.onInteractionEnd?.()\n }\n\n onPinchStart(e: React.TouchEvent) {\n const pointA = Cropper.getTouchPoint(e.touches[0])\n const pointB = Cropper.getTouchPoint(e.touches[1])\n this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB)\n this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB)\n this.onDragStart(getCenter(pointA, pointB))\n }\n\n onPinchMove(e: TouchEvent) {\n if (!this.currentDoc || !this.currentWindow) return\n const pointA = Cropper.getTouchPoint(e.touches[0])\n const pointB = Cropper.getTouchPoint(e.touches[1])\n const center = getCenter(pointA, pointB)\n this.onDrag(center)\n\n if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout)\n this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(() => {\n const distance = getDistanceBetweenPoints(pointA, pointB)\n const newZoom = this.props.zoom * (distance / this.lastPinchDistance)\n this.setNewZoom(newZoom, center, { shouldUpdatePosition: false })\n this.lastPinchDistance = distance\n\n const rotation = getRotationBetweenPoints(pointA, pointB)\n const newRotation = this.props.rotation + (rotation - this.lastPinchRotation)\n this.props.onRotationChange && this.props.onRotationChange(newRotation)\n this.lastPinchRotation = rotation\n })\n }\n\n onWheel = (e: WheelEvent) => {\n if (!this.currentWindow) return\n if (this.props.onWheelRequest && !this.props.onWheelRequest(e)) {\n return\n }\n\n e.preventDefault()\n const point = Cropper.getMousePoint(e)\n const { pixelY } = normalizeWheel(e)\n const newZoom = this.props.zoom - (pixelY * this.props.zoomSpeed) / 200\n this.setNewZoom(newZoom, point, { shouldUpdatePosition: true })\n\n if (!this.state.hasWheelJustStarted) {\n this.setState({ hasWheelJustStarted: true }, () => this.props.onInteractionStart?.())\n }\n\n if (this.wheelTimer) {\n clearTimeout(this.wheelTimer)\n }\n this.wheelTimer = this.currentWindow.setTimeout(\n () => this.setState({ hasWheelJustStarted: false }, () => this.props.onInteractionEnd?.()),\n 250\n )\n }\n\n getPointOnContainer = ({ x, y }: Point, containerTopLeft: Point): Point => {\n if (!this.containerRect) {\n throw new Error('The Cropper is not mounted')\n }\n return {\n x: this.containerRect.width / 2 - (x - containerTopLeft.x),\n y: this.containerRect.height / 2 - (y - containerTopLeft.y),\n }\n }\n\n getPointOnMedia = ({ x, y }: Point) => {\n const { crop, zoom } = this.props\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom,\n }\n }\n\n setNewZoom = (zoom: number, point: Point, { shouldUpdatePosition = true } = {}) => {\n if (!this.state.cropSize || !this.props.onZoomChange) return\n\n const newZoom = clamp(zoom, this.props.minZoom, this.props.maxZoom)\n\n if (shouldUpdatePosition) {\n const zoomPoint = this.getPointOnContainer(point, this.containerPosition)\n const zoomTarget = this.getPointOnMedia(zoomPoint)\n const requestedPosition = {\n x: zoomTarget.x * newZoom - zoomPoint.x,\n y: zoomTarget.y * newZoom - zoomPoint.y,\n }\n\n const newPosition = this.props.restrictPosition\n ? restrictPosition(\n requestedPosition,\n this.mediaSize,\n this.state.cropSize,\n newZoom,\n this.props.rotation\n )\n : requestedPosition\n\n this.props.onCropChange(newPosition)\n }\n this.props.onZoomChange(newZoom)\n }\n\n getCropData = () => {\n if (!this.state.cropSize) {\n return null\n }\n\n // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n const restrictedPosition = this.props.restrictPosition\n ? restrictPosition(\n this.props.crop,\n this.mediaSize,\n this.state.cropSize,\n this.props.zoom,\n this.props.rotation\n )\n : this.props.crop\n return computeCroppedArea(\n restrictedPosition,\n this.mediaSize,\n this.state.cropSize,\n this.getAspect(),\n this.props.zoom,\n this.props.rotation,\n this.props.restrictPosition\n )\n }\n\n emitCropData = () => {\n const cropData = this.getCropData()\n if (!cropData) return\n\n const { croppedAreaPercentages, croppedAreaPixels } = cropData\n if (this.props.onCropComplete) {\n this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels)\n }\n\n if (this.props.onCropAreaChange) {\n this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels)\n }\n }\n\n emitCropAreaChange = () => {\n const cropData = this.getCropData()\n if (!cropData) return\n\n const { croppedAreaPercentages, croppedAreaPixels } = cropData\n if (this.props.onCropAreaChange) {\n this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels)\n }\n }\n\n recomputeCropPosition = () => {\n if (!this.state.cropSize) return\n\n const newPosition = this.props.restrictPosition\n ? restrictPosition(\n this.props.crop,\n this.mediaSize,\n this.state.cropSize,\n this.props.zoom,\n this.props.rotation\n )\n : this.props.crop\n\n this.props.onCropChange(newPosition)\n this.emitCropData()\n }\n\n render() {\n const {\n image,\n video,\n mediaProps,\n transform,\n crop: { x, y },\n rotation,\n zoom,\n cropShape,\n showGrid,\n style: { containerStyle, cropAreaStyle, mediaStyle },\n classes: { containerClassName, cropAreaClassName, mediaClassName },\n } = this.props\n\n const objectFit = this.state.mediaObjectFit\n\n return (\n (this.containerRef = el)}\n data-testid=\"container\"\n style={containerStyle}\n className={classNames('reactEasyCrop_Container', containerClassName)}\n >\n {image ? (\n )}\n src={image}\n ref={this.imageRef}\n style={{\n ...mediaStyle,\n transform:\n transform || `translate(${x}px, ${y}px) rotate(${rotation}deg) scale(${zoom})`,\n }}\n onLoad={this.onMediaLoad}\n />\n ) : (\n video && (\n \n {(Array.isArray(video) ? video : [{ src: video }]).map((item) => (\n \n ))}\n \n )\n )}\n {this.state.cropSize && (\n \n )}\n \n )\n }\n}\n\nexport default Cropper\n","/**\n * External dependencies\n */\nimport Cropper from 'react-easy-crop';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { Spinner } from '@wordpress/components';\nimport { useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { MIN_ZOOM, MAX_ZOOM } from './constants';\n\nimport { useImageEditingContext } from './context';\n\nexport default function ImageCropper( {\n\turl,\n\twidth,\n\theight,\n\tnaturalHeight,\n\tnaturalWidth,\n\tborderProps,\n} ) {\n\tconst {\n\t\tisInProgress,\n\t\teditedUrl,\n\t\tposition,\n\t\tzoom,\n\t\taspect,\n\t\tsetPosition,\n\t\tsetCrop,\n\t\tsetZoom,\n\t\trotation,\n\t} = useImageEditingContext();\n\tconst [ contentResizeListener, { width: clientWidth } ] =\n\t\tuseResizeObserver();\n\n\tlet editedHeight = height || ( clientWidth * naturalHeight ) / naturalWidth;\n\n\tif ( rotation % 180 === 90 ) {\n\t\teditedHeight = ( clientWidth * naturalWidth ) / naturalHeight;\n\t}\n\n\tconst area = (\n\t\t\n\t\t\t {\n\t\t\t\t\tsetPosition( pos );\n\t\t\t\t} }\n\t\t\t\tonCropComplete={ ( newCropPercent ) => {\n\t\t\t\t\tsetCrop( newCropPercent );\n\t\t\t\t} }\n\t\t\t\tonZoomChange={ ( newZoom ) => {\n\t\t\t\t\tsetZoom( newZoom * 100 );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ isInProgress && }\n\t\t\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ contentResizeListener }\n\t\t\t{ area }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst search = (\n\t\n\t\t\n\t\n);\n\nexport default search;\n","/**\n * WordPress dependencies\n */\nimport {\n\tToolbarButton,\n\tRangeControl,\n\tDropdown,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { search } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { MIN_ZOOM, MAX_ZOOM, POPOVER_PROPS } from './constants';\nimport { useImageEditingContext } from './context';\n\nexport default function ZoomDropdown() {\n\tconst { isInProgress, zoom, setZoom } = useImageEditingContext();\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst rotateRight = (\n\t\n\t\t\n\t\n);\n\nexport default rotateRight;\n","/**\n * WordPress dependencies\n */\n\nimport { ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { rotateRight as rotateRightIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { useImageEditingContext } from './context';\n\nexport default function RotationButton() {\n\tconst { isInProgress, rotateClockwise } = useImageEditingContext();\n\treturn (\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useImageEditingContext } from './context';\n\nexport default function FormControls() {\n\tconst { isInProgress, apply, cancel } = useImageEditingContext();\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\n\t\t\t{ __( 'Cancel' ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { ToolbarGroup, ToolbarItem } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport AspectRatioDropdown from './aspect-ratio-dropdown';\nimport BlockControls from '../block-controls';\nimport ImageEditingProvider from './context';\nimport Cropper from './cropper';\nimport ZoomDropdown from './zoom-dropdown';\nimport RotationButton from './rotation-button';\nimport FormControls from './form-controls';\n\nexport default function ImageEditor( {\n\tid,\n\turl,\n\twidth,\n\theight,\n\tnaturalHeight,\n\tnaturalWidth,\n\tonSaveImage,\n\tonFinishEditing,\n\tborderProps,\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tButtonGroup,\n\tSelectControl,\n\t__experimentalNumberControl as NumberControl,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport useDimensionHandler from './use-dimension-handler';\n\nconst IMAGE_SIZE_PRESETS = [ 25, 50, 75, 100 ];\nconst noop = () => {};\n\nexport default function ImageSizeControl( {\n\timageSizeHelp,\n\timageWidth,\n\timageHeight,\n\timageSizeOptions = [],\n\tisResizable = true,\n\tslug,\n\twidth,\n\theight,\n\tonChange,\n\tonChangeImage = noop,\n} ) {\n\tconst { currentHeight, currentWidth, updateDimension, updateDimensions } =\n\t\tuseDimensionHandler( height, width, imageHeight, imageWidth, onChange );\n\n\treturn (\n\t\t<>\n\t\t\t{ imageSizeOptions && imageSizeOptions.length > 0 && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isResizable && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tupdateDimension( 'width', value )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tupdateDimension( 'height', value )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ IMAGE_SIZE_PRESETS.map( ( scale ) => {\n\t\t\t\t\t\t\t\tconst scaledWidth = Math.round(\n\t\t\t\t\t\t\t\t\timageWidth * ( scale / 100 )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst scaledHeight = Math.round(\n\t\t\t\t\t\t\t\t\timageHeight * ( scale / 100 )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst isCurrent =\n\t\t\t\t\t\t\t\t\tcurrentWidth === scaledWidth &&\n\t\t\t\t\t\t\t\t\tcurrentHeight === scaledHeight;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tupdateDimensions(\n\t\t\t\t\t\t\t\t\t\t\t\tscaledHeight,\n\t\t\t\t\t\t\t\t\t\t\t\tscaledWidth\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ scale }%\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\t updateDimensions() }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\n\nexport default function useDimensionHandler(\n\tcustomHeight,\n\tcustomWidth,\n\tdefaultHeight,\n\tdefaultWidth,\n\tonChange\n) {\n\tconst [ currentWidth, setCurrentWidth ] = useState(\n\t\tcustomWidth ?? defaultWidth ?? ''\n\t);\n\tconst [ currentHeight, setCurrentHeight ] = useState(\n\t\tcustomHeight ?? defaultHeight ?? ''\n\t);\n\n\t// When an image is first inserted, the default dimensions are initially\n\t// undefined. This effect updates the dimensions when the default values\n\t// come through.\n\tuseEffect( () => {\n\t\tif ( customWidth === undefined && defaultWidth !== undefined ) {\n\t\t\tsetCurrentWidth( defaultWidth );\n\t\t}\n\t\tif ( customHeight === undefined && defaultHeight !== undefined ) {\n\t\t\tsetCurrentHeight( defaultHeight );\n\t\t}\n\t}, [ defaultWidth, defaultHeight ] );\n\n\t// If custom values change, it means an outsider has resized the image using some other method (eg resize box)\n\t// this keeps track of these values too. We need to parse before comparing; custom values can be strings.\n\tuseEffect( () => {\n\t\tif (\n\t\t\tcustomWidth !== undefined &&\n\t\t\tNumber.parseInt( customWidth ) !== Number.parseInt( currentWidth )\n\t\t) {\n\t\t\tsetCurrentWidth( customWidth );\n\t\t}\n\t\tif (\n\t\t\tcustomHeight !== undefined &&\n\t\t\tNumber.parseInt( customHeight ) !== Number.parseInt( currentHeight )\n\t\t) {\n\t\t\tsetCurrentHeight( customHeight );\n\t\t}\n\t}, [ customWidth, customHeight ] );\n\n\tconst updateDimension = ( dimension, value ) => {\n\t\tconst parsedValue = value === '' ? undefined : parseInt( value, 10 );\n\t\tif ( dimension === 'width' ) {\n\t\t\tsetCurrentWidth( parsedValue );\n\t\t} else {\n\t\t\tsetCurrentHeight( parsedValue );\n\t\t}\n\t\tonChange( {\n\t\t\t[ dimension ]: parsedValue,\n\t\t} );\n\t};\n\n\tconst updateDimensions = ( nextHeight, nextWidth ) => {\n\t\tsetCurrentHeight( nextHeight ?? defaultHeight );\n\t\tsetCurrentWidth( nextWidth ?? defaultWidth );\n\t\tonChange( { height: nextHeight, width: nextWidth } );\n\t};\n\n\treturn {\n\t\tcurrentHeight,\n\t\tcurrentWidth,\n\t\tupdateDimension,\n\t\tupdateDimensions,\n\t};\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { ExternalLink } from '@wordpress/components';\nimport { safeDecodeURI, filterURLForDisplay } from '@wordpress/url';\n\nexport default function LinkViewerURL( { url, urlLabel, className } ) {\n\tconst linkClassName = clsx(\n\t\tclassName,\n\t\t'block-editor-url-popover__link-viewer-url'\n\t);\n\n\tif ( ! url ) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ urlLabel || filterURLForDisplay( safeDecodeURI( url ) ) }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { forwardRef, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tPopover,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { chevronDown } from '@wordpress/icons';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport LinkViewer from './link-viewer';\nimport LinkEditor from './link-editor';\nimport { unlock } from '../../lock-unlock';\n\nconst { __experimentalPopoverLegacyPositionToPlacement } = unlock(\n\tcomponentsPrivateApis\n);\n\nconst DEFAULT_PLACEMENT = 'bottom';\n\nconst URLPopover = forwardRef(\n\t(\n\t\t{\n\t\t\tadditionalControls,\n\t\t\tchildren,\n\t\t\trenderSettings,\n\t\t\t// The DEFAULT_PLACEMENT value is assigned inside the function's body\n\t\t\tplacement,\n\t\t\tfocusOnMount = 'firstElement',\n\t\t\t// Deprecated\n\t\t\tposition,\n\t\t\t// Rest\n\t\t\t...popoverProps\n\t\t},\n\t\tref\n\t) => {\n\t\tif ( position !== undefined ) {\n\t\t\tdeprecated( '`position` prop in wp.blockEditor.URLPopover', {\n\t\t\t\tsince: '6.2',\n\t\t\t\talternative: '`placement` prop',\n\t\t\t} );\n\t\t}\n\n\t\t// Compute popover's placement:\n\t\t// - give priority to `placement` prop, if defined\n\t\t// - otherwise, compute it from the legacy `position` prop (if defined)\n\t\t// - finally, fallback to the DEFAULT_PLACEMENT.\n\t\tlet computedPlacement;\n\t\tif ( placement !== undefined ) {\n\t\t\tcomputedPlacement = placement;\n\t\t} else if ( position !== undefined ) {\n\t\t\tcomputedPlacement =\n\t\t\t\t__experimentalPopoverLegacyPositionToPlacement( position );\n\t\t}\n\t\tcomputedPlacement = computedPlacement || DEFAULT_PLACEMENT;\n\n\t\tconst [ isSettingsExpanded, setIsSettingsExpanded ] = useState( false );\n\n\t\tconst showSettings = !! renderSettings && isSettingsExpanded;\n\n\t\tconst toggleSettingsVisibility = () => {\n\t\t\tsetIsSettingsExpanded( ! isSettingsExpanded );\n\t\t};\n\n\t\treturn (\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{ children }\n\t\t\t\t\t\t{ !! renderSettings && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t{ showSettings && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ renderSettings() }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\t{ additionalControls && ! showSettings && (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ additionalControls }\n\t\t\t\t\t
    \n\t\t\t\t) }\n\t\t\t\n\t\t);\n\t}\n);\n\nURLPopover.LinkEditor = LinkEditor;\n\nURLPopover.LinkViewer = LinkViewer;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-popover/README.md\n */\nexport default URLPopover;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport URLInput from '../url-input';\n\nexport default function LinkEditor( {\n\tautocompleteRef,\n\tclassName,\n\tonChangeInputValue,\n\tvalue,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { edit } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport LinkViewerURL from './link-viewer-url';\n\nexport default function LinkViewer( {\n\tclassName,\n\tlinkClassName,\n\tonEditLinkClick,\n\turl,\n\turlLabel,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{ onEditLinkClick && (\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tFormFileUpload,\n\tPlaceholder,\n\tDropZone,\n\twithFilters,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useState, useEffect } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { keyboardReturn } from '@wordpress/icons';\nimport { pasteHandler } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport MediaUpload from '../media-upload';\nimport MediaUploadCheck from '../media-upload/check';\nimport URLPopover from '../url-popover';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\nconst InsertFromURLPopover = ( {\n\tsrc,\n\tonChange,\n\tonSubmit,\n\tonClose,\n\tpopoverAnchor,\n} ) => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n);\n\nconst URLSelectionUI = ( { src, onChangeSrc, onSelectURL } ) => {\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst [ isURLInputVisible, setIsURLInputVisible ] = useState( false );\n\n\tconst openURLInput = () => {\n\t\tsetIsURLInputVisible( true );\n\t};\n\tconst closeURLInput = () => {\n\t\tsetIsURLInputVisible( false );\n\t\tpopoverAnchor?.focus();\n\t};\n\n\tconst onSubmitSrc = ( event ) => {\n\t\tevent.preventDefault();\n\t\tif ( src && onSelectURL ) {\n\t\t\tonSelectURL( src );\n\t\t\tcloseURLInput();\n\t\t}\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ __( 'Insert from URL' ) }\n\t\t\t\n\t\t\t{ isURLInputVisible && (\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n};\n\nexport function MediaPlaceholder( {\n\tvalue = {},\n\tallowedTypes,\n\tclassName,\n\ticon,\n\tlabels = {},\n\tmediaPreview,\n\tnotices,\n\tisAppender,\n\taccept,\n\taddToGallery,\n\tmultiple = false,\n\thandleUpload = true,\n\tdisableDropZone,\n\tdisableMediaButtons,\n\tonError,\n\tonSelect,\n\tonCancel,\n\tonSelectURL,\n\tonToggleFeaturedImage,\n\tonDoubleClick,\n\tonFilesPreUpload = noop,\n\tonHTMLDrop: deprecatedOnHTMLDrop,\n\tchildren,\n\tmediaLibraryButton,\n\tplaceholder,\n\tstyle,\n} ) {\n\tif ( deprecatedOnHTMLDrop ) {\n\t\tdeprecated( 'wp.blockEditor.MediaPlaceholder onHTMLDrop prop', {\n\t\t\tsince: '6.2',\n\t\t\tversion: '6.4',\n\t\t} );\n\t}\n\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().mediaUpload;\n\t}, [] );\n\tconst [ src, setSrc ] = useState( '' );\n\n\tuseEffect( () => {\n\t\tsetSrc( value?.src ?? '' );\n\t}, [ value?.src ] );\n\n\tconst onlyAllowsImages = () => {\n\t\tif ( ! allowedTypes || allowedTypes.length === 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn allowedTypes.every(\n\t\t\t( allowedType ) =>\n\t\t\t\tallowedType === 'image' || allowedType.startsWith( 'image/' )\n\t\t);\n\t};\n\n\tconst onChangeSrc = ( event ) => {\n\t\tsetSrc( event.target.value );\n\t};\n\n\tconst onFilesUpload = ( files ) => {\n\t\tif (\n\t\t\t! handleUpload ||\n\t\t\t( typeof handleUpload === 'function' && ! handleUpload( files ) )\n\t\t) {\n\t\t\treturn onSelect( files );\n\t\t}\n\t\tonFilesPreUpload( files );\n\t\tlet setMedia;\n\t\tif ( multiple ) {\n\t\t\tif ( addToGallery ) {\n\t\t\t\t// Since the setMedia function runs multiple times per upload group\n\t\t\t\t// and is passed newMedia containing every item in its group each time, we must\n\t\t\t\t// filter out whatever this upload group had previously returned to the\n\t\t\t\t// gallery before adding and returning the image array with replacement newMedia\n\t\t\t\t// values.\n\n\t\t\t\t// Define an array to store urls from newMedia between subsequent function calls.\n\t\t\t\tlet lastMediaPassed = [];\n\t\t\t\tsetMedia = ( newMedia ) => {\n\t\t\t\t\t// Remove any images this upload group is responsible for (lastMediaPassed).\n\t\t\t\t\t// Their replacements are contained in newMedia.\n\t\t\t\t\tconst filteredMedia = ( value ?? [] ).filter( ( item ) => {\n\t\t\t\t\t\t// If Item has id, only remove it if lastMediaPassed has an item with that id.\n\t\t\t\t\t\tif ( item.id ) {\n\t\t\t\t\t\t\treturn ! lastMediaPassed.some(\n\t\t\t\t\t\t\t\t// Be sure to convert to number for comparison.\n\t\t\t\t\t\t\t\t( { id } ) => Number( id ) === Number( item.id )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compare transient images via .includes since gallery may append extra info onto the url.\n\t\t\t\t\t\treturn ! lastMediaPassed.some( ( { urlSlug } ) =>\n\t\t\t\t\t\t\titem.url.includes( urlSlug )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\t// Return the filtered media array along with newMedia.\n\t\t\t\t\tonSelect( filteredMedia.concat( newMedia ) );\n\t\t\t\t\t// Reset lastMediaPassed and set it with ids and urls from newMedia.\n\t\t\t\t\tlastMediaPassed = newMedia.map( ( media ) => {\n\t\t\t\t\t\t// Add everything up to '.fileType' to compare via .includes.\n\t\t\t\t\t\tconst cutOffIndex = media.url.lastIndexOf( '.' );\n\t\t\t\t\t\tconst urlSlug = media.url.slice( 0, cutOffIndex );\n\t\t\t\t\t\treturn { id: media.id, urlSlug };\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tsetMedia = onSelect;\n\t\t\t}\n\t\t} else {\n\t\t\tsetMedia = ( [ media ] ) => onSelect( media );\n\t\t}\n\t\tmediaUpload( {\n\t\t\tallowedTypes,\n\t\t\tfilesList: files,\n\t\t\tonFileChange: setMedia,\n\t\t\tonError,\n\t\t} );\n\t};\n\n\tasync function handleBlocksDrop( blocks ) {\n\t\tif ( ! blocks || ! Array.isArray( blocks ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction recursivelyFindMediaFromBlocks( _blocks ) {\n\t\t\treturn _blocks.flatMap( ( block ) =>\n\t\t\t\t( block.name === 'core/image' ||\n\t\t\t\t\tblock.name === 'core/audio' ||\n\t\t\t\t\tblock.name === 'core/video' ) &&\n\t\t\t\tblock.attributes.url\n\t\t\t\t\t? [ block ]\n\t\t\t\t\t: recursivelyFindMediaFromBlocks( block.innerBlocks )\n\t\t\t);\n\t\t}\n\n\t\tconst mediaBlocks = recursivelyFindMediaFromBlocks( blocks );\n\n\t\tif ( ! mediaBlocks.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst uploadedMediaList = await Promise.all(\n\t\t\tmediaBlocks.map( ( block ) =>\n\t\t\t\tblock.attributes.id\n\t\t\t\t\t? block.attributes\n\t\t\t\t\t: new Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\twindow\n\t\t\t\t\t\t\t\t.fetch( block.attributes.url )\n\t\t\t\t\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t\t\t\t\t.then( ( blob ) =>\n\t\t\t\t\t\t\t\t\tmediaUpload( {\n\t\t\t\t\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\t\t\t\t\tadditionalData: {\n\t\t\t\t\t\t\t\t\t\t\ttitle: block.attributes.title,\n\t\t\t\t\t\t\t\t\t\t\talt_text: block.attributes.alt,\n\t\t\t\t\t\t\t\t\t\t\tcaption: block.attributes.caption,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\t\t\t\t\t\t\t\tif ( media.id ) {\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( media );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t\t\t\t\tonError: reject,\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.catch( () => resolve( block.attributes.url ) );\n\t\t\t\t\t } )\n\t\t\t)\n\t\t).catch( ( err ) => onError( err ) );\n\n\t\tif ( multiple ) {\n\t\t\tonSelect( uploadedMediaList );\n\t\t} else {\n\t\t\tonSelect( uploadedMediaList[ 0 ] );\n\t\t}\n\t}\n\n\tasync function onHTMLDrop( HTML ) {\n\t\tconst blocks = pasteHandler( { HTML } );\n\t\treturn await handleBlocksDrop( blocks );\n\t}\n\n\tconst onUpload = ( event ) => {\n\t\tonFilesUpload( event.target.files );\n\t};\n\n\tconst defaultRenderPlaceholder = ( content ) => {\n\t\tlet { instructions, title } = labels;\n\n\t\tif ( ! mediaUpload && ! onSelectURL ) {\n\t\t\tinstructions = __(\n\t\t\t\t'To edit this block, you need permission to upload media.'\n\t\t\t);\n\t\t}\n\n\t\tif ( instructions === undefined || title === undefined ) {\n\t\t\tconst typesAllowed = allowedTypes ?? [];\n\n\t\t\tconst [ firstAllowedType ] = typesAllowed;\n\t\t\tconst isOneType = 1 === typesAllowed.length;\n\t\t\tconst isAudio = isOneType && 'audio' === firstAllowedType;\n\t\t\tconst isImage = isOneType && 'image' === firstAllowedType;\n\t\t\tconst isVideo = isOneType && 'video' === firstAllowedType;\n\n\t\t\tif ( instructions === undefined && mediaUpload ) {\n\t\t\t\tinstructions = __(\n\t\t\t\t\t'Upload a media file or pick one from your media library.'\n\t\t\t\t);\n\n\t\t\t\tif ( isAudio ) {\n\t\t\t\t\tinstructions = __(\n\t\t\t\t\t\t'Upload or drag an audio file here, or pick one from your library.'\n\t\t\t\t\t);\n\t\t\t\t} else if ( isImage ) {\n\t\t\t\t\tinstructions = __(\n\t\t\t\t\t\t'Upload or drag an image file here, or pick one from your library.'\n\t\t\t\t\t);\n\t\t\t\t} else if ( isVideo ) {\n\t\t\t\t\tinstructions = __(\n\t\t\t\t\t\t'Upload or drag a video file here, or pick one from your library.'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( title === undefined ) {\n\t\t\t\ttitle = __( 'Media' );\n\n\t\t\t\tif ( isAudio ) {\n\t\t\t\t\ttitle = __( 'Audio' );\n\t\t\t\t} else if ( isImage ) {\n\t\t\t\t\ttitle = __( 'Image' );\n\t\t\t\t} else if ( isVideo ) {\n\t\t\t\t\ttitle = __( 'Video' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst placeholderClassName = clsx(\n\t\t\t'block-editor-media-placeholder',\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t'is-appender': isAppender,\n\t\t\t}\n\t\t);\n\n\t\treturn (\n\t\t\t\n\t\t\t\t{ content }\n\t\t\t\t{ children }\n\t\t\t\n\t\t);\n\t};\n\tconst renderPlaceholder = placeholder ?? defaultRenderPlaceholder;\n\n\tconst renderDropZone = () => {\n\t\tif ( disableDropZone ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t};\n\n\tconst renderCancelLink = () => {\n\t\treturn (\n\t\t\tonCancel && (\n\t\t\t\t\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\n\t\t\t)\n\t\t);\n\t};\n\n\tconst renderUrlSelectionUI = () => {\n\t\treturn (\n\t\t\tonSelectURL && (\n\t\t\t\t\n\t\t\t)\n\t\t);\n\t};\n\n\tconst renderFeaturedImageToggle = () => {\n\t\treturn (\n\t\t\tonToggleFeaturedImage && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{ __( 'Use featured image' ) }\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t)\n\t\t);\n\t};\n\n\tconst renderMediaUploadChecked = () => {\n\t\tconst defaultButton = ( { open } ) => {\n\t\t\treturn (\n\t\t\t\t {\n\t\t\t\t\t\topen();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Media Library' ) }\n\t\t\t\t\n\t\t\t);\n\t\t};\n\t\tconst libraryButton = mediaLibraryButton ?? defaultButton;\n\t\tconst uploadMediaLibraryButton = (\n\t\t\t id )\n\t\t\t\t\t\t: value.id\n\t\t\t\t}\n\t\t\t\trender={ libraryButton }\n\t\t\t/>\n\t\t);\n\n\t\tif ( mediaUpload && isAppender ) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t{ renderDropZone() }\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ uploadMediaLibraryButton }\n\t\t\t\t\t\t\t\t\t{ renderUrlSelectionUI() }\n\t\t\t\t\t\t\t\t\t{ renderFeaturedImageToggle() }\n\t\t\t\t\t\t\t\t\t{ renderCancelLink() }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn renderPlaceholder( content );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t);\n\t\t}\n\n\t\tif ( mediaUpload ) {\n\t\t\tconst content = (\n\t\t\t\t<>\n\t\t\t\t\t{ renderDropZone() }\n\t\t\t\t\t (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Upload' ) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tonChange={ onUpload }\n\t\t\t\t\t\taccept={ accept }\n\t\t\t\t\t\tmultiple={ !! multiple }\n\t\t\t\t\t/>\n\t\t\t\t\t{ uploadMediaLibraryButton }\n\t\t\t\t\t{ renderUrlSelectionUI() }\n\t\t\t\t\t{ renderFeaturedImageToggle() }\n\t\t\t\t\t{ renderCancelLink() }\n\t\t\t\t\n\t\t\t);\n\t\t\treturn renderPlaceholder( content );\n\t\t}\n\n\t\treturn renderPlaceholder( uploadMediaLibraryButton );\n\t};\n\n\tif ( disableMediaButtons ) {\n\t\treturn { renderDropZone() };\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ renderMediaUploadChecked() }\n\t\t\n\t);\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-placeholder/README.md\n */\nexport default withFilters( 'editor.MediaPlaceholder' )( MediaPlaceholder );\n","/**\n * Internal dependencies\n */\nimport PanelColorGradientSettings from '../colors-gradients/panel-color-gradient-settings';\n\nconst PanelColorSettings = ( { colorSettings, ...props } ) => {\n\tconst settings = colorSettings.map( ( setting ) => {\n\t\tif ( ! setting ) {\n\t\t\treturn setting;\n\t\t}\n\t\tconst { value, onChange, ...otherSettings } = setting;\n\t\treturn {\n\t\t\t...otherSettings,\n\t\t\tcolorValue: value,\n\t\t\tonColorChange: onChange,\n\t\t};\n\t} );\n\treturn (\n\t\t\n\t);\n};\nexport default PanelColorSettings;\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToolbarItem, DropdownMenu, Slot } from '@wordpress/components';\nimport { chevronDown } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { orderBy } from '../../../utils/sorting';\n\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nconst FormatToolbar = () => {\n\treturn (\n\t\t<>\n\t\t\t{ [ 'bold', 'italic', 'link', 'unknown' ].map( ( format ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\t\n\t\t\t\t{ ( fills ) => {\n\t\t\t\t\tif ( ! fills.length ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst allProps = fills.map( ( [ { props } ] ) => props );\n\t\t\t\t\tconst hasActive = allProps.some(\n\t\t\t\t\t\t( { isActive } ) => isActive\n\t\t\t\t\t);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ ( toggleProps ) => (\n\t\t\t\t\t\t\t\t props ),\n\t\t\t\t\t\t\t\t\t\t'title'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FormatToolbar;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Popover, ToolbarGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockControls from '../block-controls';\nimport FormatToolbar from './format-toolbar';\nimport NavigableToolbar from '../navigable-toolbar';\n\nfunction InlineToolbar( { popoverAnchor } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nconst FormatToolbarContainer = ( { inline, editableContentElement } ) => {\n\tif ( inline ) {\n\t\treturn ;\n\t}\n\n\t// Render regular toolbar.\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FormatToolbarContainer;\n","/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as richTextStore } from '@wordpress/rich-text';\n\nfunction formatTypesSelector( select ) {\n\treturn select( richTextStore ).getFormatTypes();\n}\n\n/**\n * Set of all interactive content tags.\n *\n * @see https://html.spec.whatwg.org/multipage/dom.html#interactive-content\n */\nconst interactiveContentTags = new Set( [\n\t'a',\n\t'audio',\n\t'button',\n\t'details',\n\t'embed',\n\t'iframe',\n\t'input',\n\t'label',\n\t'select',\n\t'textarea',\n\t'video',\n] );\n\nfunction prefixSelectKeys( selected, prefix ) {\n\tif ( typeof selected !== 'object' ) {\n\t\treturn { [ prefix ]: selected };\n\t}\n\treturn Object.fromEntries(\n\t\tObject.entries( selected ).map( ( [ key, value ] ) => [\n\t\t\t`${ prefix }.${ key }`,\n\t\t\tvalue,\n\t\t] )\n\t);\n}\n\nfunction getPrefixedSelectKeys( selected, prefix ) {\n\tif ( selected[ prefix ] ) {\n\t\treturn selected[ prefix ];\n\t}\n\treturn Object.keys( selected )\n\t\t.filter( ( key ) => key.startsWith( prefix + '.' ) )\n\t\t.reduce( ( accumulator, key ) => {\n\t\t\taccumulator[ key.slice( prefix.length + 1 ) ] = selected[ key ];\n\t\t\treturn accumulator;\n\t\t}, {} );\n}\n\n/**\n * This hook provides RichText with the `formatTypes` and its derived props from\n * experimental format type settings.\n *\n * @param {Object} $0 Options\n * @param {string} $0.clientId Block client ID.\n * @param {string} $0.identifier Block attribute.\n * @param {boolean} $0.withoutInteractiveFormatting Whether to clean the interactive formattings or not.\n * @param {Array} $0.allowedFormats Allowed formats\n */\nexport function useFormatTypes( {\n\tclientId,\n\tidentifier,\n\twithoutInteractiveFormatting,\n\tallowedFormats,\n} ) {\n\tconst allFormatTypes = useSelect( formatTypesSelector, [] );\n\tconst formatTypes = useMemo( () => {\n\t\treturn allFormatTypes.filter( ( { name, interactive, tagName } ) => {\n\t\t\tif ( allowedFormats && ! allowedFormats.includes( name ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\twithoutInteractiveFormatting &&\n\t\t\t\t( interactive || interactiveContentTags.has( tagName ) )\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} );\n\t}, [ allFormatTypes, allowedFormats, withoutInteractiveFormatting ] );\n\tconst keyedSelected = useSelect(\n\t\t( select ) =>\n\t\t\tformatTypes.reduce( ( accumulator, type ) => {\n\t\t\t\tif ( ! type.__experimentalGetPropsForEditableTreePreparation ) {\n\t\t\t\t\treturn accumulator;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t...prefixSelectKeys(\n\t\t\t\t\t\ttype.__experimentalGetPropsForEditableTreePreparation(\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttype.name\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}, {} ),\n\t\t[ formatTypes, clientId, identifier ]\n\t);\n\tconst dispatch = useDispatch();\n\tconst prepareHandlers = [];\n\tconst valueHandlers = [];\n\tconst changeHandlers = [];\n\tconst dependencies = [];\n\n\tfor ( const key in keyedSelected ) {\n\t\tdependencies.push( keyedSelected[ key ] );\n\t}\n\n\tformatTypes.forEach( ( type ) => {\n\t\tif ( type.__experimentalCreatePrepareEditableTree ) {\n\t\t\tconst handler = type.__experimentalCreatePrepareEditableTree(\n\t\t\t\tgetPrefixedSelectKeys( keyedSelected, type.name ),\n\t\t\t\t{\n\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( type.__experimentalCreateOnChangeEditableValue ) {\n\t\t\t\tvalueHandlers.push( handler );\n\t\t\t} else {\n\t\t\t\tprepareHandlers.push( handler );\n\t\t\t}\n\t\t}\n\n\t\tif ( type.__experimentalCreateOnChangeEditableValue ) {\n\t\t\tlet dispatchers = {};\n\n\t\t\tif ( type.__experimentalGetPropsForEditableTreeChangeHandler ) {\n\t\t\t\tdispatchers =\n\t\t\t\t\ttype.__experimentalGetPropsForEditableTreeChangeHandler(\n\t\t\t\t\t\tdispatch,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst selected = getPrefixedSelectKeys( keyedSelected, type.name );\n\t\t\tchangeHandlers.push(\n\t\t\t\ttype.__experimentalCreateOnChangeEditableValue(\n\t\t\t\t\t{\n\t\t\t\t\t\t...( typeof selected === 'object' ? selected : {} ),\n\t\t\t\t\t\t...dispatchers,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\trichTextIdentifier: identifier,\n\t\t\t\t\t\tblockClientId: clientId,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn {\n\t\tformatTypes,\n\t\tprepareHandlers,\n\t\tvalueHandlers,\n\t\tchangeHandlers,\n\t\tdependencies,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { insert, isCollapsed } from '@wordpress/rich-text';\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * When typing over a selection, the selection will we wrapped by a matching\n * character pair. The second character is optional, it defaults to the first\n * character.\n *\n * @type {string[]} Array of character pairs.\n */\nconst wrapSelectionSettings = [ '`', '\"', \"'\", '“”', '‘’' ];\n\nexport default ( props ) => ( element ) => {\n\tfunction onInput( event ) {\n\t\tconst { inputType, data } = event;\n\t\tconst { value, onChange, registry } = props.current;\n\n\t\t// Only run the rules when inserting text.\n\t\tif ( inputType !== 'insertText' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isCollapsed( value ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pair = applyFilters(\n\t\t\t'blockEditor.wrapSelectionSettings',\n\t\t\twrapSelectionSettings\n\t\t).find(\n\t\t\t( [ startChar, endChar ] ) => startChar === data || endChar === data\n\t\t);\n\n\t\tif ( ! pair ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [ startChar, endChar = startChar ] = pair;\n\t\tconst start = value.start;\n\t\tconst end = value.end + startChar.length;\n\n\t\tlet newValue = insert( value, startChar, start, start );\n\t\tnewValue = insert( newValue, endChar, end, end );\n\n\t\tconst {\n\t\t\t__unstableMarkLastChangeAsPersistent,\n\t\t\t__unstableMarkAutomaticChange,\n\t\t} = registry.dispatch( blockEditorStore );\n\n\t\t__unstableMarkLastChangeAsPersistent();\n\t\tonChange( newValue );\n\t\t__unstableMarkAutomaticChange();\n\n\t\tconst init = {};\n\n\t\tfor ( const key in event ) {\n\t\t\tinit[ key ] = event[ key ];\n\t\t}\n\n\t\tinit.data = endChar;\n\n\t\tconst { ownerDocument } = element;\n\t\tconst { defaultView } = ownerDocument;\n\t\tconst newEvent = new defaultView.InputEvent( 'input', init );\n\n\t\t// Dispatch an `input` event with the new data. This will trigger the\n\t\t// input rules.\n\t\t// Postpone the `input` to the next event loop tick so that the dispatch\n\t\t// doesn't happen synchronously in the middle of `beforeinput` dispatch.\n\t\t// This is closer to how native `input` event would be timed, and also\n\t\t// makes sure that the `input` event is dispatched only after the `onChange`\n\t\t// call few lines above has fully updated the data store state and rerendered\n\t\t// all affected components.\n\t\twindow.queueMicrotask( () => {\n\t\t\tevent.target.dispatchEvent( newEvent );\n\t\t} );\n\t\tevent.preventDefault();\n\t}\n\n\telement.addEventListener( 'beforeinput', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'beforeinput', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { insert, toHTMLString } from '@wordpress/rich-text';\nimport { getBlockTransforms, findTransform } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { preventEventDiscovery } from '../prevent-event-discovery';\nimport {\n\tretrieveSelectedAttribute,\n\tSTART_OF_SELECTED_AREA,\n} from '../../../utils/selection';\n\nexport function findSelection( blocks ) {\n\tlet i = blocks.length;\n\n\twhile ( i-- ) {\n\t\tconst attributeKey = retrieveSelectedAttribute(\n\t\t\tblocks[ i ].attributes\n\t\t);\n\n\t\tif ( attributeKey ) {\n\t\t\tblocks[ i ].attributes[ attributeKey ] = blocks[ i ].attributes[\n\t\t\t\tattributeKey\n\t\t\t]\n\t\t\t\t// To do: refactor this to use rich text's selection instead, so\n\t\t\t\t// we no longer have to use on this hack inserting a special\n\t\t\t\t// character.\n\t\t\t\t.toString()\n\t\t\t\t.replace( START_OF_SELECTED_AREA, '' );\n\t\t\treturn [ blocks[ i ].clientId, attributeKey, 0, 0 ];\n\t\t}\n\n\t\tconst nestedSelection = findSelection( blocks[ i ].innerBlocks );\n\n\t\tif ( nestedSelection ) {\n\t\t\treturn nestedSelection;\n\t\t}\n\t}\n\n\treturn [];\n}\n\nexport default ( props ) => ( element ) => {\n\tfunction inputRule() {\n\t\tconst { getValue, onReplace, selectionChange, registry } =\n\t\t\tprops.current;\n\n\t\tif ( ! onReplace ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We must use getValue() here because value may be update\n\t\t// asynchronously.\n\t\tconst value = getValue();\n\t\tconst { start, text } = value;\n\t\tconst characterBefore = text.slice( start - 1, start );\n\n\t\t// The character right before the caret must be a plain space.\n\t\tif ( characterBefore !== ' ' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst trimmedTextBefore = text.slice( 0, start ).trim();\n\t\tconst prefixTransforms = getBlockTransforms( 'from' ).filter(\n\t\t\t( { type } ) => type === 'prefix'\n\t\t);\n\t\tconst transformation = findTransform(\n\t\t\tprefixTransforms,\n\t\t\t( { prefix } ) => {\n\t\t\t\treturn trimmedTextBefore === prefix;\n\t\t\t}\n\t\t);\n\n\t\tif ( ! transformation ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst content = toHTMLString( {\n\t\t\tvalue: insert( value, START_OF_SELECTED_AREA, 0, start ),\n\t\t} );\n\t\tconst block = transformation.transform( content );\n\n\t\tselectionChange( ...findSelection( [ block ] ) );\n\t\tonReplace( [ block ] );\n\t\tregistry.dispatch( blockEditorStore ).__unstableMarkAutomaticChange();\n\n\t\treturn true;\n\t}\n\n\tfunction onInput( event ) {\n\t\tconst { inputType, type } = event;\n\t\tconst {\n\t\t\tgetValue,\n\t\t\tonChange,\n\t\t\t__unstableAllowPrefixTransformations,\n\t\t\tformatTypes,\n\t\t\tregistry,\n\t\t} = props.current;\n\n\t\t// Only run input rules when inserting text.\n\t\tif ( inputType !== 'insertText' && type !== 'compositionend' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( __unstableAllowPrefixTransformations && inputRule() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = getValue();\n\t\tconst transformed = formatTypes.reduce(\n\t\t\t( accumlator, { __unstableInputRule } ) => {\n\t\t\t\tif ( __unstableInputRule ) {\n\t\t\t\t\taccumlator = __unstableInputRule( accumlator );\n\t\t\t\t}\n\n\t\t\t\treturn accumlator;\n\t\t\t},\n\t\t\tpreventEventDiscovery( value )\n\t\t);\n\n\t\tconst {\n\t\t\t__unstableMarkLastChangeAsPersistent,\n\t\t\t__unstableMarkAutomaticChange,\n\t\t} = registry.dispatch( blockEditorStore );\n\n\t\tif ( transformed !== value ) {\n\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\tonChange( {\n\t\t\t\t...transformed,\n\t\t\t\tactiveFormats: value.activeFormats,\n\t\t\t} );\n\t\t\t__unstableMarkAutomaticChange();\n\t\t}\n\t}\n\n\telement.addEventListener( 'input', onInput );\n\telement.addEventListener( 'compositionend', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'input', onInput );\n\t\telement.removeEventListener( 'compositionend', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { renderToString } from '@wordpress/element';\nimport { createBlock } from '@wordpress/blocks';\n\nexport function addActiveFormats( value, activeFormats ) {\n\tif ( activeFormats?.length ) {\n\t\tlet index = value.formats.length;\n\n\t\twhile ( index-- ) {\n\t\t\tvalue.formats[ index ] = [\n\t\t\t\t...activeFormats,\n\t\t\t\t...( value.formats[ index ] || [] ),\n\t\t\t];\n\t\t}\n\t}\n}\n\n/**\n * Get the multiline tag based on the multiline prop.\n *\n * @param {?(string|boolean)} multiline The multiline prop.\n *\n * @return {string | undefined} The multiline tag.\n */\nexport function getMultilineTag( multiline ) {\n\tif ( multiline !== true && multiline !== 'p' && multiline !== 'li' ) {\n\t\treturn;\n\t}\n\n\treturn multiline === true ? 'p' : multiline;\n}\n\nexport function getAllowedFormats( { allowedFormats, disableFormats } ) {\n\tif ( disableFormats ) {\n\t\treturn getAllowedFormats.EMPTY_ARRAY;\n\t}\n\n\treturn allowedFormats;\n}\n\ngetAllowedFormats.EMPTY_ARRAY = [];\n\n/**\n * Creates a link from pasted URL.\n * Creates a paragraph block containing a link to the URL, and calls `onReplace`.\n *\n * @param {string} url The URL that could not be embedded.\n * @param {Function} onReplace Function to call with the created fallback block.\n */\nexport function createLinkInParagraph( url, onReplace ) {\n\tconst link = { url };\n\tonReplace(\n\t\tcreateBlock( 'core/paragraph', { content: renderToString( link ) } )\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { pasteHandler } from '@wordpress/blocks';\nimport { isEmpty, insert, create } from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { addActiveFormats } from '../utils';\nimport { getPasteEventData } from '../../../utils/pasting';\n\n/** @typedef {import('@wordpress/rich-text').RichTextValue} RichTextValue */\n\nexport default ( props ) => ( element ) => {\n\tfunction _onPaste( event ) {\n\t\tconst {\n\t\t\tdisableFormats,\n\t\t\tonChange,\n\t\t\tvalue,\n\t\t\tformatTypes,\n\t\t\ttagName,\n\t\t\tonReplace,\n\t\t\t__unstableEmbedURLOnPaste,\n\t\t\tpreserveWhiteSpace,\n\t\t\tpastePlainText,\n\t\t} = props.current;\n\n\t\t// The event listener is attached to the window, so we need to check if\n\t\t// the target is the element.\n\t\tif ( event.target !== element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { plainText, html } = getPasteEventData( event );\n\n\t\tevent.preventDefault();\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\tif ( disableFormats ) {\n\t\t\tonChange( insert( value, plainText ) );\n\t\t\treturn;\n\t\t}\n\n\t\tconst isInternal =\n\t\t\tevent.clipboardData.getData( 'rich-text' ) === 'true';\n\n\t\tfunction pasteInline( content ) {\n\t\t\tconst transformed = formatTypes.reduce(\n\t\t\t\t( accumulator, { __unstablePasteRule } ) => {\n\t\t\t\t\t// Only allow one transform.\n\t\t\t\t\tif ( __unstablePasteRule && accumulator === value ) {\n\t\t\t\t\t\taccumulator = __unstablePasteRule( value, {\n\t\t\t\t\t\t\thtml,\n\t\t\t\t\t\t\tplainText,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\tvalue\n\t\t\t);\n\t\t\tif ( transformed !== value ) {\n\t\t\t\tonChange( transformed );\n\t\t\t} else {\n\t\t\t\tconst valueToInsert = create( { html: content } );\n\t\t\t\taddActiveFormats( valueToInsert, value.activeFormats );\n\t\t\t\tonChange( insert( value, valueToInsert ) );\n\t\t\t}\n\t\t}\n\n\t\t// If the data comes from a rich text instance, we can directly use it\n\t\t// without filtering the data. The filters are only meant for externally\n\t\t// pasted content and remove inline styles.\n\t\tif ( isInternal ) {\n\t\t\tpasteInline( html );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( pastePlainText ) {\n\t\t\tonChange( insert( value, create( { text: plainText } ) ) );\n\t\t\treturn;\n\t\t}\n\n\t\tlet mode = 'INLINE';\n\n\t\tconst trimmedPlainText = plainText.trim();\n\n\t\tif (\n\t\t\t__unstableEmbedURLOnPaste &&\n\t\t\tisEmpty( value ) &&\n\t\t\tisURL( trimmedPlainText ) &&\n\t\t\t// For the link pasting feature, allow only http(s) protocols.\n\t\t\t/^https?:/.test( trimmedPlainText )\n\t\t) {\n\t\t\tmode = 'BLOCKS';\n\t\t}\n\n\t\tconst content = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode,\n\t\t\ttagName,\n\t\t\tpreserveWhiteSpace,\n\t\t} );\n\n\t\tif ( typeof content === 'string' ) {\n\t\t\tpasteInline( content );\n\t\t} else if ( content.length > 0 ) {\n\t\t\tif ( onReplace && isEmpty( value ) ) {\n\t\t\t\tonReplace( content, content.length - 1, -1 );\n\t\t\t}\n\t\t}\n\t}\n\n\tconst { defaultView } = element.ownerDocument;\n\n\t// Attach the listener to the window so parent elements have the chance to\n\t// prevent the default behavior.\n\tdefaultView.addEventListener( 'paste', _onPaste );\n\treturn () => {\n\t\tdefaultView.removeEventListener( 'paste', _onPaste );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { useMemo, useRef } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport beforeInputRules from './before-input-rules';\nimport inputRules from './input-rules';\nimport insertReplacementText from './insert-replacement-text';\nimport removeBrowserShortcuts from './remove-browser-shortcuts';\nimport shortcuts from './shortcuts';\nimport inputEvents from './input-events';\nimport undoAutomaticChange from './undo-automatic-change';\nimport pasteHandler from './paste-handler';\nimport _delete from './delete';\nimport enter from './enter';\nimport firefoxCompat from './firefox-compat';\n\nconst allEventListeners = [\n\tbeforeInputRules,\n\tinputRules,\n\tinsertReplacementText,\n\tremoveBrowserShortcuts,\n\tshortcuts,\n\tinputEvents,\n\tundoAutomaticChange,\n\tpasteHandler,\n\t_delete,\n\tenter,\n\tfirefoxCompat,\n];\n\nexport function useEventListeners( props ) {\n\tconst propsRef = useRef( props );\n\tpropsRef.current = props;\n\tconst refEffects = useMemo(\n\t\t() => allEventListeners.map( ( refEffect ) => refEffect( propsRef ) ),\n\t\t[ propsRef ]\n\t);\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( ! props.isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst cleanups = refEffects.map( ( effect ) => effect( element ) );\n\t\t\treturn () => {\n\t\t\t\tcleanups.forEach( ( cleanup ) => cleanup() );\n\t\t\t};\n\t\t},\n\t\t[ refEffects, props.isSelected ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { insert } from '@wordpress/rich-text';\n\nexport function preventEventDiscovery( value ) {\n\tconst searchText = 'tales of gutenberg';\n\tconst addText =\n\t\t' 🐡🐢🦀🐤🦋🐘🐧🐹🦁🦄🦍🐼🐿🎃🐴🐝🐆🦕🦔🌱🍇π🍌🐉💧🥨🌌🍂🍠🥦🥚🥝🎟🥥🥒🛵🥖🍒🍯🎾🎲🐺🐚🐮⌛️';\n\tconst { start, text } = value;\n\n\tif ( start < searchText.length ) {\n\t\treturn value;\n\t}\n\n\tconst charactersBefore = text.slice( start - searchText.length, start );\n\n\tif ( charactersBefore.toLowerCase() !== searchText ) {\n\t\treturn value;\n\t}\n\n\treturn insert( value, addText );\n}\n","/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * When the browser is about to auto correct, add an undo level so the user can\n * revert the change.\n *\n * @param {Object} props\n */\nexport default ( props ) => ( element ) => {\n\tfunction onInput( event ) {\n\t\tif ( event.inputType !== 'insertReplacementText' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { registry } = props.current;\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.__unstableMarkLastChangeAsPersistent();\n\t}\n\n\telement.addEventListener( 'beforeinput', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'beforeinput', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { isKeyboardEvent } from '@wordpress/keycodes';\n\n/**\n * Hook to prevent default behaviors for key combinations otherwise handled\n * internally by RichText.\n */\nexport default () => ( node ) => {\n\tfunction onKeydown( event ) {\n\t\tif (\n\t\t\tisKeyboardEvent.primary( event, 'z' ) ||\n\t\t\tisKeyboardEvent.primary( event, 'y' ) ||\n\t\t\tisKeyboardEvent.primaryShift( event, 'z' )\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\tnode.addEventListener( 'keydown', onKeydown );\n\treturn () => {\n\t\tnode.removeEventListener( 'keydown', onKeydown );\n\t};\n};\n","export default ( props ) => ( element ) => {\n\tconst { keyboardShortcuts } = props.current;\n\tfunction onKeyDown( event ) {\n\t\tfor ( const keyboardShortcut of keyboardShortcuts.current ) {\n\t\t\tkeyboardShortcut( event );\n\t\t}\n\t}\n\n\telement.addEventListener( 'keydown', onKeyDown );\n\treturn () => {\n\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t};\n};\n","export default ( props ) => ( element ) => {\n\tconst { inputEvents } = props.current;\n\tfunction onInput( event ) {\n\t\tfor ( const keyboardShortcut of inputEvents.current ) {\n\t\t\tkeyboardShortcut( event );\n\t\t}\n\t}\n\n\telement.addEventListener( 'input', onInput );\n\treturn () => {\n\t\telement.removeEventListener( 'input', onInput );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { BACKSPACE, ESCAPE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\nexport default ( props ) => ( element ) => {\n\tfunction onKeyDown( event ) {\n\t\tconst { keyCode } = event;\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( keyCode !== BACKSPACE && keyCode !== ESCAPE ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { registry } = props.current;\n\t\tconst { didAutomaticChange, getSettings } =\n\t\t\tregistry.select( blockEditorStore );\n\n\t\tconst { __experimentalUndo } = getSettings();\n\n\t\tif ( ! __experimentalUndo ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! didAutomaticChange() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\t__experimentalUndo();\n\t}\n\n\telement.addEventListener( 'keydown', onKeyDown );\n\treturn () => {\n\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { DELETE, BACKSPACE } from '@wordpress/keycodes';\nimport { isCollapsed, isEmpty } from '@wordpress/rich-text';\n\nexport default ( props ) => ( element ) => {\n\tfunction onKeyDown( event ) {\n\t\tconst { keyCode } = event;\n\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { value, onMerge, onRemove } = props.current;\n\n\t\tif ( keyCode === DELETE || keyCode === BACKSPACE ) {\n\t\t\tconst { start, end, text } = value;\n\t\t\tconst isReverse = keyCode === BACKSPACE;\n\t\t\tconst hasActiveFormats =\n\t\t\t\tvalue.activeFormats && !! value.activeFormats.length;\n\n\t\t\t// Only process delete if the key press occurs at an uncollapsed edge.\n\t\t\tif (\n\t\t\t\t! isCollapsed( value ) ||\n\t\t\t\thasActiveFormats ||\n\t\t\t\t( isReverse && start !== 0 ) ||\n\t\t\t\t( ! isReverse && end !== text.length )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( onMerge ) {\n\t\t\t\tonMerge( ! isReverse );\n\t\t\t}\n\n\t\t\t// Only handle remove on Backspace. This serves dual-purpose of being\n\t\t\t// an intentional user interaction distinguishing between Backspace and\n\t\t\t// Delete to remove the empty field, but also to avoid merge & remove\n\t\t\t// causing destruction of two fields (merge, then removed merged).\n\t\t\telse if ( onRemove && isEmpty( value ) && isReverse ) {\n\t\t\t\tonRemove( ! isReverse );\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\telement.addEventListener( 'keydown', onKeyDown );\n\treturn () => {\n\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { ENTER } from '@wordpress/keycodes';\nimport { insert, remove } from '@wordpress/rich-text';\n\nexport default ( props ) => ( element ) => {\n\tfunction onKeyDownDeprecated( event ) {\n\t\tif ( event.keyCode !== ENTER ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { onReplace, onSplit } = props.current;\n\n\t\tif ( onReplace && onSplit ) {\n\t\t\tevent.__deprecatedOnSplit = true;\n\t\t}\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The event listener is attached to the window, so we need to check if\n\t\t// the target is the element.\n\t\tif ( event.target !== element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.keyCode !== ENTER ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tdisableLineBreaks,\n\t\t\tonSplitAtEnd,\n\t\t\tonSplitAtDoubleLineEnd,\n\t\t\tregistry,\n\t\t} = props.current;\n\n\t\tevent.preventDefault();\n\n\t\tconst { text, start, end } = value;\n\n\t\tif ( event.shiftKey ) {\n\t\t\tif ( ! disableLineBreaks ) {\n\t\t\t\tonChange( insert( value, '\\n' ) );\n\t\t\t}\n\t\t} else if ( onSplitAtEnd && start === end && end === text.length ) {\n\t\t\tonSplitAtEnd();\n\t\t} else if (\n\t\t\t// For some blocks it's desirable to split at the end of the\n\t\t\t// block when there are two line breaks at the end of the\n\t\t\t// block, so triple Enter exits the block.\n\t\t\tonSplitAtDoubleLineEnd &&\n\t\t\tstart === end &&\n\t\t\tend === text.length &&\n\t\t\ttext.slice( -2 ) === '\\n\\n'\n\t\t) {\n\t\t\tregistry.batch( () => {\n\t\t\t\tconst _value = { ...value };\n\t\t\t\t_value.start = _value.end - 2;\n\t\t\t\tonChange( remove( _value ) );\n\t\t\t\tonSplitAtDoubleLineEnd();\n\t\t\t} );\n\t\t} else if ( ! disableLineBreaks ) {\n\t\t\tonChange( insert( value, '\\n' ) );\n\t\t}\n\t}\n\n\tconst { defaultView } = element.ownerDocument;\n\n\t// Attach the listener to the window so parent elements have the chance to\n\t// prevent the default behavior.\n\tdefaultView.addEventListener( 'keydown', onKeyDown );\n\telement.addEventListener( 'keydown', onKeyDownDeprecated );\n\treturn () => {\n\t\tdefaultView.removeEventListener( 'keydown', onKeyDown );\n\t\telement.removeEventListener( 'keydown', onKeyDownDeprecated );\n\t};\n};\n","/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\nexport default ( props ) => ( element ) => {\n\tfunction onFocus() {\n\t\tconst { registry } = props.current;\n\t\tif ( ! registry.select( blockEditorStore ).isMultiSelecting() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This is a little hack to work around focus issues with nested\n\t\t// editable elements in Firefox. For some reason the editable child\n\t\t// element sometimes regains focus, while it should not be focusable\n\t\t// and focus should remain on the editable parent element.\n\t\t// To do: try to find the cause of the shifting focus.\n\t\tconst parentEditable = element.parentElement.closest(\n\t\t\t'[contenteditable=\"true\"]'\n\t\t);\n\n\t\tif ( parentEditable ) {\n\t\t\tparentEditable.focus();\n\t\t}\n\t}\n\n\telement.addEventListener( 'focus', onFocus );\n\treturn () => {\n\t\telement.removeEventListener( 'focus', onFocus );\n\t};\n};\n","/**\n * WordPress dependencies\n */\nimport { getActiveFormat, getActiveObject } from '@wordpress/rich-text';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\n\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nexport const usesContextKey = Symbol( 'usesContext' );\n\nfunction Edit( { onChange, onFocus, value, forwardedRef, settings } ) {\n\tconst {\n\t\tname,\n\t\tedit: EditFunction,\n\t\t[ usesContextKey ]: usesContext,\n\t} = settings;\n\n\tconst blockContext = useContext( BlockContext );\n\n\t// Assign context values using the block type's declared context needs.\n\tconst context = useMemo( () => {\n\t\treturn usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tusesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t}, [ usesContext, blockContext ] );\n\n\tif ( ! EditFunction ) {\n\t\treturn null;\n\t}\n\n\tconst activeFormat = getActiveFormat( value, name );\n\tconst isActive = activeFormat !== undefined;\n\tconst activeObject = getActiveObject( value );\n\tconst isObjectActive =\n\t\tactiveObject !== undefined && activeObject.type === name;\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default function FormatEdit( { formatTypes, ...props } ) {\n\treturn formatTypes.map( ( settings ) => (\n\t\t\n\t) );\n}\n","/**\n * WordPress dependencies\n */\nimport { RawHTML } from '@wordpress/element';\nimport { children as childrenSource } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport RichText from './';\n\n/**\n * Internal dependencies\n */\nimport { getMultilineTag } from './utils';\n\nexport function valueToHTMLString( value, multiline ) {\n\tif ( RichText.isEmpty( value ) ) {\n\t\tconst multilineTag = getMultilineTag( multiline );\n\t\treturn multilineTag ? `<${ multilineTag }>` : '';\n\t}\n\n\tif ( Array.isArray( value ) ) {\n\t\tdeprecated( 'wp.blockEditor.RichText value prop as children type', {\n\t\t\tsince: '6.1',\n\t\t\tversion: '6.3',\n\t\t\talternative: 'value prop as string',\n\t\t\tlink: 'https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/',\n\t\t} );\n\t\treturn childrenSource.toHTML( value );\n\t}\n\n\t// To do: deprecate string type.\n\tif ( typeof value === 'string' ) {\n\t\treturn value;\n\t}\n\n\t// To do: create a toReactComponent method on RichTextData, which we\n\t// might in the future also use for the editable tree. See\n\t// https://github.com/WordPress/gutenberg/pull/41655.\n\treturn value.toHTMLString();\n}\n\nexport function Content( {\n\tvalue,\n\ttagName: Tag,\n\tmultiline,\n\tformat,\n\t...props\n} ) {\n\tvalue = { valueToHTMLString( value, multiline ) };\n\treturn Tag ? { value } : value;\n}\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { ENTER } from '@wordpress/keycodes';\nimport { create, split, toHTMLString } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { RichTextWrapper } from './';\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockEditContext } from '../block-edit';\nimport { getMultilineTag } from './utils';\n\nfunction RichTextMultiline(\n\t{\n\t\tchildren,\n\t\tidentifier,\n\t\ttagName: TagName = 'div',\n\t\tvalue = '',\n\t\tonChange,\n\t\tmultiline,\n\t\t...props\n\t},\n\tforwardedRef\n) {\n\tdeprecated( 'wp.blockEditor.RichText multiline prop', {\n\t\tsince: '6.1',\n\t\tversion: '6.3',\n\t\talternative: 'nested blocks (InnerBlocks)',\n\t\tlink: 'https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/nested-blocks-inner-blocks/',\n\t} );\n\n\tconst { clientId } = useBlockEditContext();\n\tconst { getSelectionStart, getSelectionEnd } =\n\t\tuseSelect( blockEditorStore );\n\tconst { selectionChange } = useDispatch( blockEditorStore );\n\n\tconst multilineTagName = getMultilineTag( multiline );\n\tvalue = value || `<${ multilineTagName }>`;\n\tconst padded = `${ value }<${ multilineTagName }>`;\n\tconst values = padded.split(\n\t\t`<${ multilineTagName }>`\n\t);\n\n\tvalues.shift();\n\tvalues.pop();\n\n\tfunction _onChange( newValues ) {\n\t\tonChange(\n\t\t\t`<${ multilineTagName }>${ newValues.join(\n\t\t\t\t`<${ multilineTagName }>`\n\t\t\t) }`\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ values.map( ( _value, index ) => {\n\t\t\t\treturn (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst newValues = values.slice();\n\t\t\t\t\t\t\tnewValues[ index ] = newValue;\n\t\t\t\t\t\t\t_onChange( newValues );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tisSelected={ undefined }\n\t\t\t\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\t\t\t\tif ( event.keyCode !== ENTER ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\tconst { offset: start } = getSelectionStart();\n\t\t\t\t\t\t\tconst { offset: end } = getSelectionEnd();\n\n\t\t\t\t\t\t\t// Cannot split if there is no selection.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttypeof start !== 'number' ||\n\t\t\t\t\t\t\t\ttypeof end !== 'number'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst richTextValue = create( { html: _value } );\n\t\t\t\t\t\t\trichTextValue.start = start;\n\t\t\t\t\t\t\trichTextValue.end = end;\n\n\t\t\t\t\t\t\tconst array = split( richTextValue ).map( ( v ) =>\n\t\t\t\t\t\t\t\ttoHTMLString( { value: v } )\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst newValues = values.slice();\n\t\t\t\t\t\t\tnewValues.splice( index, 1, ...array );\n\t\t\t\t\t\t\t_onChange( newValues );\n\t\t\t\t\t\t\tselectionChange(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t`${ identifier }-${ index + 1 }`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonMerge={ ( forward ) => {\n\t\t\t\t\t\t\tconst newValues = values.slice();\n\t\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\t\tif ( forward ) {\n\t\t\t\t\t\t\t\tif ( ! newValues[ index + 1 ] ) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewValues.splice(\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\tnewValues[ index ] + newValues[ index + 1 ]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\toffset = newValues[ index ].length - 1;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif ( ! newValues[ index - 1 ] ) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewValues.splice(\n\t\t\t\t\t\t\t\t\tindex - 1,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\tnewValues[ index - 1 ] + newValues[ index ]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\toffset = newValues[ index - 1 ].length - 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_onChange( newValues );\n\t\t\t\t\t\t\tselectionChange(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t`${ identifier }-${\n\t\t\t\t\t\t\t\t\tindex - ( forward ? 0 : 1 )\n\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\t\toffset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\n\t);\n}\n\nexport default forwardRef( RichTextMultiline );\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseRef,\n\tuseCallback,\n\tforwardRef,\n\tcreateContext,\n\tuseContext,\n} from '@wordpress/element';\nimport { useDispatch, useRegistry, useSelect } from '@wordpress/data';\nimport { useMergeRefs, useInstanceId } from '@wordpress/compose';\nimport {\n\t__unstableUseRichText as useRichText,\n\tremoveFormat,\n} from '@wordpress/rich-text';\nimport { Popover } from '@wordpress/components';\nimport { store as blocksStore } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditorAutocompleteProps } from '../autocomplete';\nimport { useBlockEditContext } from '../block-edit';\nimport { blockBindingsKey, isPreviewModeKey } from '../block-edit/context';\nimport FormatToolbarContainer from './format-toolbar-container';\nimport { store as blockEditorStore } from '../../store';\nimport { useMarkPersistent } from './use-mark-persistent';\nimport { useFormatTypes } from './use-format-types';\nimport { useEventListeners } from './event-listeners';\nimport FormatEdit from './format-edit';\nimport { getAllowedFormats } from './utils';\nimport { Content, valueToHTMLString } from './content';\nimport { withDeprecations } from './with-deprecations';\nimport { unlock } from '../../lock-unlock';\nimport { canBindBlock } from '../../hooks/use-bindings-attributes';\nimport BlockContext from '../block-context';\n\nexport const keyboardShortcutContext = createContext();\nexport const inputEventContext = createContext();\n\nconst instanceIdKey = Symbol( 'instanceId' );\n\n/**\n * Removes props used for the native version of RichText so that they are not\n * passed to the DOM element and log warnings.\n *\n * @param {Object} props Props to filter.\n *\n * @return {Object} Filtered props.\n */\nfunction removeNativeProps( props ) {\n\tconst {\n\t\t__unstableMobileNoFocusOnMount,\n\t\tdeleteEnter,\n\t\tplaceholderTextColor,\n\t\ttextAlign,\n\t\tselectionColor,\n\t\ttagsToEliminate,\n\t\tdisableEditingMenu,\n\t\tfontSize,\n\t\tfontFamily,\n\t\tfontWeight,\n\t\tfontStyle,\n\t\tminWidth,\n\t\tmaxWidth,\n\t\tdisableSuggestions,\n\t\tdisableAutocorrection,\n\t\t...restProps\n\t} = props;\n\treturn restProps;\n}\n\nexport function RichTextWrapper(\n\t{\n\t\tchildren,\n\t\ttagName = 'div',\n\t\tvalue: adjustedValue = '',\n\t\tonChange: adjustedOnChange,\n\t\tisSelected: originalIsSelected,\n\t\tmultiline,\n\t\tinlineToolbar,\n\t\twrapperClassName,\n\t\tautocompleters,\n\t\tonReplace,\n\t\tplaceholder,\n\t\tallowedFormats,\n\t\twithoutInteractiveFormatting,\n\t\tonRemove,\n\t\tonMerge,\n\t\tonSplit,\n\t\t__unstableOnSplitAtEnd: onSplitAtEnd,\n\t\t__unstableOnSplitAtDoubleLineEnd: onSplitAtDoubleLineEnd,\n\t\tidentifier,\n\t\tpreserveWhiteSpace,\n\t\t__unstablePastePlainText: pastePlainText,\n\t\t__unstableEmbedURLOnPaste,\n\t\t__unstableDisableFormats: disableFormats,\n\t\tdisableLineBreaks,\n\t\t__unstableAllowPrefixTransformations,\n\t\treadOnly,\n\t\t...props\n\t},\n\tforwardedRef\n) {\n\tprops = removeNativeProps( props );\n\n\tif ( onSplit ) {\n\t\tdeprecated( 'wp.blockEditor.RichText onSplit prop', {\n\t\t\tsince: '6.4',\n\t\t\talternative: 'block.json support key: \"splitting\"',\n\t\t} );\n\t}\n\n\tconst instanceId = useInstanceId( RichTextWrapper );\n\tconst anchorRef = useRef();\n\tconst context = useBlockEditContext();\n\tconst { clientId, isSelected: isBlockSelected, name: blockName } = context;\n\tconst blockBindings = context[ blockBindingsKey ];\n\tconst blockContext = useContext( BlockContext );\n\tconst registry = useRegistry();\n\tconst selector = ( select ) => {\n\t\t// Avoid subscribing to the block editor store if the block is not\n\t\t// selected.\n\t\tif ( ! isBlockSelected ) {\n\t\t\treturn { isSelected: false };\n\t\t}\n\n\t\tconst { getSelectionStart, getSelectionEnd } =\n\t\t\tselect( blockEditorStore );\n\t\tconst selectionStart = getSelectionStart();\n\t\tconst selectionEnd = getSelectionEnd();\n\n\t\tlet isSelected;\n\n\t\tif ( originalIsSelected === undefined ) {\n\t\t\tisSelected =\n\t\t\t\tselectionStart.clientId === clientId &&\n\t\t\t\tselectionEnd.clientId === clientId &&\n\t\t\t\t( identifier\n\t\t\t\t\t? selectionStart.attributeKey === identifier\n\t\t\t\t\t: selectionStart[ instanceIdKey ] === instanceId );\n\t\t} else if ( originalIsSelected ) {\n\t\t\tisSelected = selectionStart.clientId === clientId;\n\t\t}\n\n\t\treturn {\n\t\t\tselectionStart: isSelected ? selectionStart.offset : undefined,\n\t\t\tselectionEnd: isSelected ? selectionEnd.offset : undefined,\n\t\t\tisSelected,\n\t\t};\n\t};\n\tconst { selectionStart, selectionEnd, isSelected } = useSelect( selector, [\n\t\tclientId,\n\t\tidentifier,\n\t\tinstanceId,\n\t\toriginalIsSelected,\n\t\tisBlockSelected,\n\t] );\n\n\tconst { disableBoundBlock, bindingsPlaceholder, bindingsLabel } = useSelect(\n\t\t( select ) => {\n\t\t\tif (\n\t\t\t\t! blockBindings?.[ identifier ] ||\n\t\t\t\t! canBindBlock( blockName )\n\t\t\t) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst relatedBinding = blockBindings[ identifier ];\n\t\t\tconst { getBlockBindingsSource } = unlock( select( blocksStore ) );\n\t\t\tconst blockBindingsSource = getBlockBindingsSource(\n\t\t\t\trelatedBinding.source\n\t\t\t);\n\t\t\tconst blockBindingsContext = {};\n\t\t\tif ( blockBindingsSource?.usesContext?.length ) {\n\t\t\t\tfor ( const key of blockBindingsSource.usesContext ) {\n\t\t\t\t\tblockBindingsContext[ key ] = blockContext[ key ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst _disableBoundBlock =\n\t\t\t\t! blockBindingsSource?.canUserEditValue?.( {\n\t\t\t\t\tregistry,\n\t\t\t\t\tcontext: blockBindingsContext,\n\t\t\t\t\targs: relatedBinding.args,\n\t\t\t\t} );\n\n\t\t\t// Don't modify placeholders if value is not empty.\n\t\t\tif ( adjustedValue.length > 0 ) {\n\t\t\t\treturn {\n\t\t\t\t\tdisableBoundBlock: _disableBoundBlock,\n\t\t\t\t\t// Null values will make them fall back to the default behavior.\n\t\t\t\t\tbindingsPlaceholder: null,\n\t\t\t\t\tbindingsLabel: null,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { getBlockAttributes } = select( blockEditorStore );\n\t\t\tconst blockAttributes = getBlockAttributes( clientId );\n\t\t\tconst fieldsList = blockBindingsSource?.getFieldsList?.( {\n\t\t\t\tregistry,\n\t\t\t\tcontext: blockBindingsContext,\n\t\t\t} );\n\t\t\tconst bindingKey =\n\t\t\t\tfieldsList?.[ relatedBinding?.args?.key ]?.label ??\n\t\t\t\tblockBindingsSource?.label;\n\n\t\t\tconst _bindingsPlaceholder = _disableBoundBlock\n\t\t\t\t? bindingKey\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: connected field label or source label */\n\t\t\t\t\t\t__( 'Add %s' ),\n\t\t\t\t\t\tbindingKey\n\t\t\t\t );\n\t\t\tconst _bindingsLabel = _disableBoundBlock\n\t\t\t\t? relatedBinding?.args?.key || blockBindingsSource?.label\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: source label or key */\n\t\t\t\t\t\t__( 'Empty %s; start writing to edit its value' ),\n\t\t\t\t\t\trelatedBinding?.args?.key || blockBindingsSource?.label\n\t\t\t\t );\n\n\t\t\treturn {\n\t\t\t\tdisableBoundBlock: _disableBoundBlock,\n\t\t\t\tbindingsPlaceholder:\n\t\t\t\t\tblockAttributes?.placeholder || _bindingsPlaceholder,\n\t\t\t\tbindingsLabel: _bindingsLabel,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tblockBindings,\n\t\t\tidentifier,\n\t\t\tblockName,\n\t\t\tblockContext,\n\t\t\tregistry,\n\t\t\tadjustedValue,\n\t\t]\n\t);\n\n\tconst shouldDisableEditing = readOnly || disableBoundBlock;\n\n\tconst { getSelectionStart, getSelectionEnd, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { selectionChange } = useDispatch( blockEditorStore );\n\tconst adjustedAllowedFormats = getAllowedFormats( {\n\t\tallowedFormats,\n\t\tdisableFormats,\n\t} );\n\tconst hasFormats =\n\t\t! adjustedAllowedFormats || adjustedAllowedFormats.length > 0;\n\n\tconst onSelectionChange = useCallback(\n\t\t( start, end ) => {\n\t\t\tconst selection = {};\n\t\t\tconst unset = start === undefined && end === undefined;\n\n\t\t\tconst baseSelection = {\n\t\t\t\tclientId,\n\t\t\t\t[ identifier ? 'attributeKey' : instanceIdKey ]: identifier\n\t\t\t\t\t? identifier\n\t\t\t\t\t: instanceId,\n\t\t\t};\n\n\t\t\tif ( typeof start === 'number' || unset ) {\n\t\t\t\t// If we are only setting the start (or the end below), which\n\t\t\t\t// means a partial selection, and we're not updating a selection\n\t\t\t\t// with the same client ID, abort. This means the selected block\n\t\t\t\t// is a parent block.\n\t\t\t\tif (\n\t\t\t\t\tend === undefined &&\n\t\t\t\t\tgetBlockRootClientId( clientId ) !==\n\t\t\t\t\t\tgetBlockRootClientId( getSelectionEnd().clientId )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselection.start = {\n\t\t\t\t\t...baseSelection,\n\t\t\t\t\toffset: start,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( typeof end === 'number' || unset ) {\n\t\t\t\tif (\n\t\t\t\t\tstart === undefined &&\n\t\t\t\t\tgetBlockRootClientId( clientId ) !==\n\t\t\t\t\t\tgetBlockRootClientId( getSelectionStart().clientId )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tselection.end = {\n\t\t\t\t\t...baseSelection,\n\t\t\t\t\toffset: end,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tselectionChange( selection );\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetSelectionEnd,\n\t\t\tgetSelectionStart,\n\t\t\tidentifier,\n\t\t\tinstanceId,\n\t\t\tselectionChange,\n\t\t]\n\t);\n\n\tconst {\n\t\tformatTypes,\n\t\tprepareHandlers,\n\t\tvalueHandlers,\n\t\tchangeHandlers,\n\t\tdependencies,\n\t} = useFormatTypes( {\n\t\tclientId,\n\t\tidentifier,\n\t\twithoutInteractiveFormatting,\n\t\tallowedFormats: adjustedAllowedFormats,\n\t} );\n\n\tfunction addEditorOnlyFormats( value ) {\n\t\treturn valueHandlers.reduce(\n\t\t\t( accumulator, fn ) => fn( accumulator, value.text ),\n\t\t\tvalue.formats\n\t\t);\n\t}\n\n\tfunction removeEditorOnlyFormats( value ) {\n\t\tformatTypes.forEach( ( formatType ) => {\n\t\t\t// Remove formats created by prepareEditableTree, because they are editor only.\n\t\t\tif ( formatType.__experimentalCreatePrepareEditableTree ) {\n\t\t\t\tvalue = removeFormat(\n\t\t\t\t\tvalue,\n\t\t\t\t\tformatType.name,\n\t\t\t\t\t0,\n\t\t\t\t\tvalue.text.length\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn value.formats;\n\t}\n\n\tfunction addInvisibleFormats( value ) {\n\t\treturn prepareHandlers.reduce(\n\t\t\t( accumulator, fn ) => fn( accumulator, value.text ),\n\t\t\tvalue.formats\n\t\t);\n\t}\n\n\tconst {\n\t\tvalue,\n\t\tgetValue,\n\t\tonChange,\n\t\tref: richTextRef,\n\t} = useRichText( {\n\t\tvalue: adjustedValue,\n\t\tonChange( html, { __unstableFormats, __unstableText } ) {\n\t\t\tadjustedOnChange( html );\n\t\t\tObject.values( changeHandlers ).forEach( ( changeHandler ) => {\n\t\t\t\tchangeHandler( __unstableFormats, __unstableText );\n\t\t\t} );\n\t\t},\n\t\tselectionStart,\n\t\tselectionEnd,\n\t\tonSelectionChange,\n\t\tplaceholder: bindingsPlaceholder || placeholder,\n\t\t__unstableIsSelected: isSelected,\n\t\t__unstableDisableFormats: disableFormats,\n\t\tpreserveWhiteSpace,\n\t\t__unstableDependencies: [ ...dependencies, tagName ],\n\t\t__unstableAfterParse: addEditorOnlyFormats,\n\t\t__unstableBeforeSerialize: removeEditorOnlyFormats,\n\t\t__unstableAddInvisibleFormats: addInvisibleFormats,\n\t} );\n\tconst autocompleteProps = useBlockEditorAutocompleteProps( {\n\t\tonReplace,\n\t\tcompleters: autocompleters,\n\t\trecord: value,\n\t\tonChange,\n\t} );\n\n\tuseMarkPersistent( { html: adjustedValue, value } );\n\n\tconst keyboardShortcuts = useRef( new Set() );\n\tconst inputEvents = useRef( new Set() );\n\n\tfunction onFocus() {\n\t\tanchorRef.current?.focus();\n\t}\n\n\tconst TagName = tagName;\n\treturn (\n\t\t<>\n\t\t\t{ isSelected && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ children &&\n\t\t\t\t\t\t\t\tchildren( { value, onChange, onFocus } ) }\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ isSelected && hasFormats && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t\n\t\t\n\t);\n}\n\n// This is the private API for the RichText component.\n// It allows access to all props, not just the public ones.\nexport const PrivateRichText = withDeprecations(\n\tforwardRef( RichTextWrapper )\n);\n\nPrivateRichText.Content = Content;\nPrivateRichText.isEmpty = ( value ) => {\n\treturn ! value || value.length === 0;\n};\n\n// This is the public API for the RichText component.\n// We wrap the PrivateRichText component to hide some props from the public API.\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/rich-text/README.md\n */\nconst PublicForwardedRichTextContainer = forwardRef( ( props, ref ) => {\n\tconst context = useBlockEditContext();\n\tconst isPreviewMode = context[ isPreviewModeKey ];\n\n\tif ( isPreviewMode ) {\n\t\t// Remove all non-content props.\n\t\tconst {\n\t\t\tchildren,\n\t\t\ttagName: Tag = 'div',\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tisSelected,\n\t\t\tmultiline,\n\t\t\tinlineToolbar,\n\t\t\twrapperClassName,\n\t\t\tautocompleters,\n\t\t\tonReplace,\n\t\t\tplaceholder,\n\t\t\tallowedFormats,\n\t\t\twithoutInteractiveFormatting,\n\t\t\tonRemove,\n\t\t\tonMerge,\n\t\t\tonSplit,\n\t\t\t__unstableOnSplitAtEnd,\n\t\t\t__unstableOnSplitAtDoubleLineEnd,\n\t\t\tidentifier,\n\t\t\tpreserveWhiteSpace,\n\t\t\t__unstablePastePlainText,\n\t\t\t__unstableEmbedURLOnPaste,\n\t\t\t__unstableDisableFormats,\n\t\t\tdisableLineBreaks,\n\t\t\t__unstableAllowPrefixTransformations,\n\t\t\treadOnly,\n\t\t\t...contentProps\n\t\t} = removeNativeProps( props );\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn ;\n} );\n\nPublicForwardedRichTextContainer.Content = Content;\nPublicForwardedRichTextContainer.isEmpty = ( value ) => {\n\treturn ! value || value.length === 0;\n};\n\nexport default PublicForwardedRichTextContainer;\nexport { RichTextShortcut } from './shortcut';\nexport { RichTextToolbarButton } from './toolbar-button';\nexport { __unstableRichTextInputEvent } from './input-event';\n","/**\n * WordPress dependencies\n */\nimport { useLayoutEffect, useRef } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport function useMarkPersistent( { html, value } ) {\n\tconst previousTextRef = useRef();\n\tconst hasActiveFormats = !! value.activeFormats?.length;\n\tconst { __unstableMarkLastChangeAsPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Must be set synchronously to make sure it applies to the last change.\n\tuseLayoutEffect( () => {\n\t\t// Ignore mount.\n\t\tif ( ! previousTextRef.current ) {\n\t\t\tpreviousTextRef.current = value.text;\n\t\t\treturn;\n\t\t}\n\n\t\t// Text input, so don't create an undo level for every character.\n\t\t// Create an undo level after 1 second of no input.\n\t\tif ( previousTextRef.current !== value.text ) {\n\t\t\tconst timeout = window.setTimeout( () => {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}, 1000 );\n\t\t\tpreviousTextRef.current = value.text;\n\t\t\treturn () => {\n\t\t\t\twindow.clearTimeout( timeout );\n\t\t\t};\n\t\t}\n\n\t\t__unstableMarkLastChangeAsPersistent();\n\t}, [ html, hasActiveFormats ] );\n}\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport { children as childrenSource } from '@wordpress/blocks';\nimport { __unstableCreateElement } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport RichTextMultiline from './multiline';\n\nexport function withDeprecations( Component ) {\n\treturn forwardRef( ( props, ref ) => {\n\t\tlet value = props.value;\n\t\tlet onChange = props.onChange;\n\n\t\t// Handle deprecated format.\n\t\tif ( Array.isArray( value ) ) {\n\t\t\tdeprecated( 'wp.blockEditor.RichText value prop as children type', {\n\t\t\t\tsince: '6.1',\n\t\t\t\tversion: '6.3',\n\t\t\t\talternative: 'value prop as string',\n\t\t\t\tlink: 'https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/',\n\t\t\t} );\n\n\t\t\tvalue = childrenSource.toHTML( props.value );\n\t\t\tonChange = ( newValue ) =>\n\t\t\t\tprops.onChange(\n\t\t\t\t\tchildrenSource.fromDOM(\n\t\t\t\t\t\t__unstableCreateElement( document, newValue ).childNodes\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\n\t\tconst NewComponent = props.multiline ? RichTextMultiline : Component;\n\n\t\treturn (\n\t\t\t\n\t\t);\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport RichText from '../rich-text';\n\nconst EditableText = forwardRef( ( props, ref ) => {\n\treturn ;\n} );\n\nEditableText.Content = ( { value = '', tagName: Tag = 'div', ...props } ) => {\n\treturn { value };\n};\n\n/**\n * Renders an editable text input in which text formatting is not allowed.\n */\nexport default EditableText;\n","/**\n * External dependencies\n */\nimport TextareaAutosize from 'react-autosize-textarea';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport EditableText from '../editable-text';\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/plain-text/README.md\n */\nconst PlainText = forwardRef( ( { __experimentalVersion, ...props }, ref ) => {\n\tif ( __experimentalVersion === 2 ) {\n\t\treturn ;\n\t}\n\n\tconst { className, onChange, ...remainingProps } = props;\n\n\treturn (\n\t\t onChange( event.target.value ) }\n\t\t\t{ ...remainingProps }\n\t\t/>\n\t);\n} );\n\nexport default PlainText;\n","/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\nimport { _x, sprintf } from '@wordpress/i18n';\n\nexport default function ResponsiveBlockControlLabel( {\n\tproperty,\n\tviewport,\n\tdesc,\n} ) {\n\tconst instanceId = useInstanceId( ResponsiveBlockControlLabel );\n\tconst accessibleLabel =\n\t\tdesc ||\n\t\tsprintf(\n\t\t\t/* translators: 1: property name. 2: viewport name. */\n\t\t\t_x(\n\t\t\t\t'Controls the %1$s property for %2$s viewports.',\n\t\t\t\t'Text labelling a interface as controlling a given layout property (eg: margin) for a given screen size.'\n\t\t\t),\n\t\t\tproperty,\n\t\t\tviewport.label\n\t\t);\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{ viewport.label }\n\t\t\t\n\t\t\t\n\t\t\t\t{ accessibleLabel }\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Fragment } from '@wordpress/element';\nimport { ToggleControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport ResponsiveBlockControlLabel from './label';\n\nfunction ResponsiveBlockControl( props ) {\n\tconst {\n\t\ttitle,\n\t\tproperty,\n\t\ttoggleLabel,\n\t\tonIsResponsiveChange,\n\t\trenderDefaultControl,\n\t\trenderResponsiveControls,\n\t\tisResponsive = false,\n\t\tdefaultLabel = {\n\t\t\tid: 'all',\n\t\t\tlabel: _x( 'All', 'screen sizes' ),\n\t\t},\n\t\tviewports = [\n\t\t\t{\n\t\t\t\tid: 'small',\n\t\t\t\tlabel: __( 'Small screens' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'medium',\n\t\t\t\tlabel: __( 'Medium screens' ),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'large',\n\t\t\t\tlabel: __( 'Large screens' ),\n\t\t\t},\n\t\t],\n\t} = props;\n\n\tif ( ! title || ! property || ! renderDefaultControl ) {\n\t\treturn null;\n\t}\n\n\tconst toggleControlLabel =\n\t\ttoggleLabel ||\n\t\tsprintf(\n\t\t\t/* translators: %s: Property value for the control (eg: margin, padding, etc.). */\n\t\t\t__( 'Use the same %s on all screen sizes.' ),\n\t\t\tproperty\n\t\t);\n\n\tconst toggleHelpText = __(\n\t\t'Toggle between using the same value for all screen sizes or using a unique value per screen size.'\n\t);\n\n\tconst defaultControl = renderDefaultControl(\n\t\t,\n\t\tdefaultLabel\n\t);\n\n\tconst defaultResponsiveControls = () => {\n\t\treturn viewports.map( ( viewport ) => (\n\t\t\t\n\t\t\t\t{ renderDefaultControl(\n\t\t\t\t\t,\n\t\t\t\t\tviewport\n\t\t\t\t) }\n\t\t\t\n\t\t) );\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{ title }\n\t\t\t\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ ! isResponsive && defaultControl }\n\t\t\t\t\t{ isResponsive &&\n\t\t\t\t\t\t( renderResponsiveControls\n\t\t\t\t\t\t\t? renderResponsiveControls( viewports )\n\t\t\t\t\t\t\t: defaultResponsiveControls() ) }\n\t\t\t\t
    \n\t\t\t\n\t\t
    \n\t);\n}\n\nexport default ResponsiveBlockControl;\n","/**\n * WordPress dependencies\n */\nimport { isKeyboardEvent } from '@wordpress/keycodes';\nimport { useEffect, useContext, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { keyboardShortcutContext } from './';\n\nexport function RichTextShortcut( { character, type, onUse } ) {\n\tconst keyboardShortcuts = useContext( keyboardShortcutContext );\n\tconst onUseRef = useRef();\n\tonUseRef.current = onUse;\n\n\tuseEffect( () => {\n\t\tfunction callback( event ) {\n\t\t\tif ( isKeyboardEvent[ type ]( event, character ) ) {\n\t\t\t\tonUseRef.current();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tkeyboardShortcuts.current.add( callback );\n\t\treturn () => {\n\t\t\tkeyboardShortcuts.current.delete( callback );\n\t\t};\n\t}, [ character, type ] );\n\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { Fill, ToolbarButton } from '@wordpress/components';\nimport { displayShortcut } from '@wordpress/keycodes';\n\nexport function RichTextToolbarButton( {\n\tname,\n\tshortcutType,\n\tshortcutCharacter,\n\t...props\n} ) {\n\tlet shortcut;\n\tlet fillName = 'RichText.ToolbarControls';\n\n\tif ( name ) {\n\t\tfillName += `.${ name }`;\n\t}\n\n\tif ( shortcutType && shortcutCharacter ) {\n\t\tshortcut = displayShortcut[ shortcutType ]( shortcutCharacter );\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useContext, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { inputEventContext } from './';\n\nexport function __unstableRichTextInputEvent( { inputType, onInput } ) {\n\tconst callbacks = useContext( inputEventContext );\n\tconst onInputRef = useRef();\n\tonInputRef.current = onInput;\n\n\tuseEffect( () => {\n\t\tfunction callback( event ) {\n\t\t\tif ( event.inputType === inputType ) {\n\t\t\t\tonInputRef.current();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tcallbacks.current.add( callback );\n\t\treturn () => {\n\t\t\tcallbacks.current.delete( callback );\n\t\t};\n\t}, [ inputType ] );\n\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tDropdown,\n\tButton,\n\tMenuItemsChoice,\n\tSVG,\n\tPath,\n\tNavigableMenu,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\nimport { Icon, edit as editIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst selectIcon = (\n\t\n\t\t\n\t\n);\n\nfunction ToolSelector( props, ref ) {\n\tconst mode = useSelect(\n\t\t( select ) => select( blockEditorStore ).__unstableGetEditorMode(),\n\t\t[]\n\t);\n\tconst { __unstableSetEditorMode } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t) }\n\t\t\tpopoverProps={ { placement: 'bottom-start' } }\n\t\t\trenderContent={ () => (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvalue: 'navigation',\n\t\t\t\t\t\t\t\t\tlabel: (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t{ selectIcon }\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Select' ) }\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Tools provide different interactions for selecting, navigating, and editing blocks. Toggle between select and edit by pressing Escape and Enter.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( ToolSelector );\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as BaseUnitControl,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\n\nexport default function UnitControl( { units: unitsProp, ...props } ) {\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits || [ '%', 'px', 'em', 'rem', 'vw' ],\n\t\tunits: unitsProp,\n\t} );\n\n\treturn ;\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst arrowLeft = (\n\t\n\t\t\n\t\n);\n\nexport default arrowLeft;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { Button } from '@wordpress/components';\nimport { link, keyboardReturn, arrowLeft } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport URLInput from './';\n\nclass URLInputButton extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\t\tthis.toggle = this.toggle.bind( this );\n\t\tthis.submitLink = this.submitLink.bind( this );\n\t\tthis.state = {\n\t\t\texpanded: false,\n\t\t};\n\t}\n\n\ttoggle() {\n\t\tthis.setState( { expanded: ! this.state.expanded } );\n\t}\n\n\tsubmitLink( event ) {\n\t\tevent.preventDefault();\n\t\tthis.toggle();\n\t}\n\n\trender() {\n\t\tconst { url, onChange } = this.props;\n\t\tconst { expanded } = this.state;\n\t\tconst buttonLabel = url ? __( 'Edit link' ) : __( 'Insert link' );\n\n\t\treturn (\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t{ expanded && (\n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t);\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default URLInputButton;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nconst image = (\n\t\n\t\t\n\t\n);\n\nexport default image;\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useEffect, useState } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport {\n\tToolbarButton,\n\tNavigableMenu,\n\tButton,\n\tMenuItem,\n\tToggleControl,\n\tTextControl,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport {\n\tIcon,\n\tlink as linkIcon,\n\timage,\n\tpage,\n\tfullscreen,\n\tlinkOff,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport URLPopover from './index';\n\nconst LINK_DESTINATION_NONE = 'none';\nconst LINK_DESTINATION_CUSTOM = 'custom';\nconst LINK_DESTINATION_MEDIA = 'media';\nconst LINK_DESTINATION_ATTACHMENT = 'attachment';\nconst NEW_TAB_REL = [ 'noreferrer', 'noopener' ];\n\nconst ImageURLInputUI = ( {\n\tlinkDestination,\n\tonChangeUrl,\n\turl,\n\tmediaType = 'image',\n\tmediaUrl,\n\tmediaLink,\n\tlinkTarget,\n\tlinkClass,\n\trel,\n\tshowLightboxSetting,\n\tlightboxEnabled,\n\tonSetLightbox,\n\tresetLightbox,\n} ) => {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst openLinkUI = () => {\n\t\tsetIsOpen( true );\n\t};\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState( false );\n\tconst [ urlInput, setUrlInput ] = useState( null );\n\n\tconst autocompleteRef = useRef( null );\n\tconst wrapperRef = useRef();\n\n\tuseEffect( () => {\n\t\tif ( ! wrapperRef.current ) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperRef.current )[ 0 ] ||\n\t\t\twrapperRef.current;\n\t\tnextFocusTarget.focus();\n\t}, [ isEditingLink, url, lightboxEnabled ] );\n\n\tconst startEditLink = () => {\n\t\tif (\n\t\t\tlinkDestination === LINK_DESTINATION_MEDIA ||\n\t\t\tlinkDestination === LINK_DESTINATION_ATTACHMENT\n\t\t) {\n\t\t\tsetUrlInput( '' );\n\t\t}\n\t\tsetIsEditingLink( true );\n\t};\n\n\tconst stopEditLink = () => {\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst closeLinkUI = () => {\n\t\tsetUrlInput( null );\n\t\tstopEditLink();\n\t\tsetIsOpen( false );\n\t};\n\n\tconst getUpdatedLinkTargetSettings = ( value ) => {\n\t\tconst newLinkTarget = value ? '_blank' : undefined;\n\n\t\tlet updatedRel;\n\t\tif ( newLinkTarget ) {\n\t\t\tconst rels = ( rel ?? '' ).split( ' ' );\n\t\t\tNEW_TAB_REL.forEach( ( relVal ) => {\n\t\t\t\tif ( ! rels.includes( relVal ) ) {\n\t\t\t\t\trels.push( relVal );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tupdatedRel = rels.join( ' ' );\n\t\t} else {\n\t\t\tconst rels = ( rel ?? '' )\n\t\t\t\t.split( ' ' )\n\t\t\t\t.filter(\n\t\t\t\t\t( relVal ) => NEW_TAB_REL.includes( relVal ) === false\n\t\t\t\t);\n\t\t\tupdatedRel = rels.length ? rels.join( ' ' ) : undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tlinkTarget: newLinkTarget,\n\t\t\trel: updatedRel,\n\t\t};\n\t};\n\n\tconst onFocusOutside = () => {\n\t\treturn ( event ) => {\n\t\t\t// The autocomplete suggestions list renders in a separate popover (in a portal),\n\t\t\t// so onFocusOutside fails to detect that a click on a suggestion occurred in the\n\t\t\t// LinkContainer. Detect clicks on autocomplete suggestions using a ref here, and\n\t\t\t// return to avoid the popover being closed.\n\t\t\tconst autocompleteElement = autocompleteRef.current;\n\t\t\tif (\n\t\t\t\tautocompleteElement &&\n\t\t\t\tautocompleteElement.contains( event.target )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetIsOpen( false );\n\t\t\tsetUrlInput( null );\n\t\t\tstopEditLink();\n\t\t};\n\t};\n\n\tconst onSubmitLinkChange = () => {\n\t\treturn ( event ) => {\n\t\t\tif ( urlInput ) {\n\t\t\t\t// It is possible the entered URL actually matches a named link destination.\n\t\t\t\t// This check will ensure our link destination is correct.\n\t\t\t\tconst selectedDestination =\n\t\t\t\t\tgetLinkDestinations().find(\n\t\t\t\t\t\t( destination ) => destination.url === urlInput\n\t\t\t\t\t)?.linkDestination || LINK_DESTINATION_CUSTOM;\n\n\t\t\t\tonChangeUrl( {\n\t\t\t\t\thref: urlInput,\n\t\t\t\t\tlinkDestination: selectedDestination,\n\t\t\t\t\tlightbox: { enabled: false },\n\t\t\t\t} );\n\t\t\t}\n\t\t\tstopEditLink();\n\t\t\tsetUrlInput( null );\n\t\t\tevent.preventDefault();\n\t\t};\n\t};\n\n\tconst onLinkRemove = () => {\n\t\tonChangeUrl( {\n\t\t\tlinkDestination: LINK_DESTINATION_NONE,\n\t\t\thref: '',\n\t\t} );\n\t};\n\n\tconst getLinkDestinations = () => {\n\t\tconst linkDestinations = [\n\t\t\t{\n\t\t\t\tlinkDestination: LINK_DESTINATION_MEDIA,\n\t\t\t\ttitle: __( 'Link to image file' ),\n\t\t\t\turl: mediaType === 'image' ? mediaUrl : undefined,\n\t\t\t\ticon: image,\n\t\t\t},\n\t\t];\n\t\tif ( mediaType === 'image' && mediaLink ) {\n\t\t\tlinkDestinations.push( {\n\t\t\t\tlinkDestination: LINK_DESTINATION_ATTACHMENT,\n\t\t\t\ttitle: __( 'Link to attachment page' ),\n\t\t\t\turl: mediaType === 'image' ? mediaLink : undefined,\n\t\t\t\ticon: page,\n\t\t\t} );\n\t\t}\n\t\treturn linkDestinations;\n\t};\n\n\tconst onSetHref = ( value ) => {\n\t\tconst linkDestinations = getLinkDestinations();\n\t\tlet linkDestinationInput;\n\t\tif ( ! value ) {\n\t\t\tlinkDestinationInput = LINK_DESTINATION_NONE;\n\t\t} else {\n\t\t\tlinkDestinationInput = (\n\t\t\t\tlinkDestinations.find( ( destination ) => {\n\t\t\t\t\treturn destination.url === value;\n\t\t\t\t} ) || { linkDestination: LINK_DESTINATION_CUSTOM }\n\t\t\t).linkDestination;\n\t\t}\n\t\tonChangeUrl( {\n\t\t\tlinkDestination: linkDestinationInput,\n\t\t\thref: value,\n\t\t} );\n\t};\n\n\tconst onSetNewTab = ( value ) => {\n\t\tconst updatedLinkTarget = getUpdatedLinkTargetSettings( value );\n\t\tonChangeUrl( updatedLinkTarget );\n\t};\n\n\tconst onSetLinkRel = ( value ) => {\n\t\tonChangeUrl( { rel: value } );\n\t};\n\n\tconst onSetLinkClass = ( value ) => {\n\t\tonChangeUrl( { linkClass: value } );\n\t};\n\n\tconst advancedOptions = (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n\n\tconst linkEditorValue = urlInput !== null ? urlInput : url;\n\tconst hideLightboxPanel =\n\t\t! lightboxEnabled || ( lightboxEnabled && ! showLightboxSetting );\n\tconst showLinkEditor = ! linkEditorValue && hideLightboxPanel;\n\n\tconst urlLabel = (\n\t\tgetLinkDestinations().find(\n\t\t\t( destination ) => destination.linkDestination === linkDestination\n\t\t) || {}\n\t).title;\n\n\tconst PopoverChildren = () => {\n\t\tif (\n\t\t\tlightboxEnabled &&\n\t\t\tshowLightboxSetting &&\n\t\t\t! url &&\n\t\t\t! isEditingLink\n\t\t) {\n\t\t\treturn (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t

    { __( 'Expand on click' ) }

    \n\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t{ __( 'Scales the image with a lightbox effect' ) }\n\t\t\t\t\t\t

    \n\t\t\t\t\t
    \n\t\t\t\t\t {\n\t\t\t\t\t\t\tonSetLightbox?.( false );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t/>\n\t\t\t\t
    \n\t\t\t);\n\t\t} else if ( ! url || isEditingLink ) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t);\n\t\t} else if ( url && ! isEditingLink ) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tonLinkRemove();\n\t\t\t\t\t\t\tresetLightbox?.();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{ isOpen && (\n\t\t\t\t advancedOptions : null\n\t\t\t\t\t}\n\t\t\t\t\tadditionalControls={\n\t\t\t\t\t\tshowLinkEditor && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ getLinkDestinations().map( ( link ) => (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tsetUrlInput( null );\n\t\t\t\t\t\t\t\t\t\t\tonSetHref( link.url );\n\t\t\t\t\t\t\t\t\t\t\tstopEditLink();\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ link.title }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t{ showLightboxSetting && (\n\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\tsetUrlInput( null );\n\t\t\t\t\t\t\t\t\t\t\tonChangeUrl( {\n\t\t\t\t\t\t\t\t\t\t\t\tlinkDestination:\n\t\t\t\t\t\t\t\t\t\t\t\t\tLINK_DESTINATION_NONE,\n\t\t\t\t\t\t\t\t\t\t\t\thref: '',\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\tonSetLightbox?.( true );\n\t\t\t\t\t\t\t\t\t\t\tstopEditLink();\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Expand on click' ) }\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\toffset={ 13 }\n\t\t\t\t>\n\t\t\t\t\t{ PopoverChildren() }\n\t\t\t\t\n\t\t\t) }\n\t\t\n\t);\n};\n\nexport { ImageURLInputUI as __experimentalImageURLInputUI };\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\nexport default function PreviewOptions() {\n\tdeprecated( 'wp.blockEditor.PreviewOptions', {\n\t\tversion: '6.5',\n\t} );\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect, useState } from '@wordpress/element';\n\n/**\n * Function to resize the editor window.\n *\n * @param {string} deviceType Used for determining the size of the container (e.g. Desktop, Tablet, Mobile)\n *\n * @return {Object} Inline styles to be added to resizable container.\n */\nexport default function useResizeCanvas( deviceType ) {\n\tconst [ actualWidth, updateActualWidth ] = useState( window.innerWidth );\n\n\tuseEffect( () => {\n\t\tif ( deviceType === 'Desktop' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeListener = () => updateActualWidth( window.innerWidth );\n\t\twindow.addEventListener( 'resize', resizeListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'resize', resizeListener );\n\t\t};\n\t}, [ deviceType ] );\n\n\tconst getCanvasWidth = ( device ) => {\n\t\tlet deviceWidth;\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\t\tdeviceWidth = 780;\n\t\t\t\tbreak;\n\t\t\tcase 'Mobile':\n\t\t\t\tdeviceWidth = 360;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\n\t\treturn deviceWidth < actualWidth ? deviceWidth : actualWidth;\n\t};\n\n\tconst marginValue = () => ( window.innerHeight < 800 ? 36 : 64 );\n\n\tconst contentInlineStyles = ( device ) => {\n\t\tconst height = device === 'Mobile' ? '768px' : '1024px';\n\t\tconst marginVertical = marginValue() + 'px';\n\t\tconst marginHorizontal = 'auto';\n\n\t\tswitch ( device ) {\n\t\t\tcase 'Tablet':\n\t\t\tcase 'Mobile':\n\t\t\t\treturn {\n\t\t\t\t\twidth: getCanvasWidth( device ),\n\t\t\t\t\t// Keeping margin styles separate to avoid warnings\n\t\t\t\t\t// when those props get overridden in the iframe component\n\t\t\t\t\tmarginTop: marginVertical,\n\t\t\t\t\tmarginBottom: marginVertical,\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t\theight,\n\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\tmarginLeft: marginHorizontal,\n\t\t\t\t\tmarginRight: marginHorizontal,\n\t\t\t\t};\n\t\t}\n\t};\n\n\treturn contentInlineStyles( deviceType );\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockElementRef } from '../block-list/use-block-props/use-block-refs';\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/skip-to-selected-block/README.md\n */\nexport default function SkipToSelectedBlock() {\n\tconst selectedBlockClientId = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlockSelectionStart(),\n\t\t[]\n\t);\n\tconst ref = useRef();\n\tuseBlockElementRef( selectedBlockClientId, ref );\n\tconst onClick = () => {\n\t\tref.current?.focus();\n\t};\n\n\treturn selectedBlockClientId ? (\n\t\t\n\t\t\t{ __( 'Skip to the selected block' ) }\n\t\t\n\t) : null;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"wordcount\"];","/**\n * WordPress dependencies\n */\nimport { sprintf, _n } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { serialize } from '@wordpress/blocks';\nimport { count as wordCount } from '@wordpress/wordcount';\nimport { copy } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function MultiSelectionInspector() {\n\tconst { blocks } = useSelect( ( select ) => {\n\t\tconst { getMultiSelectedBlocks } = select( blockEditorStore );\n\t\treturn {\n\t\t\tblocks: getMultiSelectedBlocks(),\n\t\t};\n\t}, [] );\n\tconst words = wordCount( serialize( blocks ), 'words' );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %d: number of blocks */\n\t\t\t\t\t\t_n( '%d Block', '%d Blocks', blocks.length ),\n\t\t\t\t\t\tblocks.length\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %d: number of words */\n\t\t\t\t\t\t_n( '%d word selected.', '%d words selected.', words ),\n\t\t\t\t\t\twords\n\t\t\t\t\t) }\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { SVG, Path } from '@wordpress/primitives';\n\nconst cog = (\n\t\n\t\t\n\t\n);\n\nexport default cog;\n","/**\n * WordPress dependencies\n */\nimport { Path, SVG } from '@wordpress/primitives';\n\nexport const styles = (\n\t\n\t\t\n\t\n);\n\nexport default styles;\n","/**\n * WordPress dependencies\n */\nimport { cog, styles, listView } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport const TAB_SETTINGS = {\n\tname: 'settings',\n\ttitle: __( 'Settings' ),\n\tvalue: 'settings',\n\ticon: cog,\n\tclassName: 'block-editor-block-inspector__tab-item',\n};\n\nexport const TAB_STYLES = {\n\tname: 'styles',\n\ttitle: __( 'Styles' ),\n\tvalue: 'styles',\n\ticon: styles,\n\tclassName: 'block-editor-block-inspector__tab-item',\n};\n\nexport const TAB_LIST_VIEW = {\n\tname: 'list',\n\ttitle: __( 'List View' ),\n\tvalue: 'list-view',\n\ticon: listView,\n\tclassName: 'block-editor-block-inspector__tab-item',\n};\n","/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\t__experimentalUseSlotFills as useSlotFills,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tdefault as InspectorControls,\n\tInspectorAdvancedControls,\n} from '../inspector-controls';\n\nconst AdvancedControls = () => {\n\tconst fills = useSlotFills( InspectorAdvancedControls.slotName );\n\tconst hasFills = Boolean( fills && fills.length );\n\n\tif ( ! hasFills ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default AdvancedControls;\n","/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\t__experimentalUseSlotFills as useSlotFills,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useLayoutEffect, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport InspectorControlsGroups from '../inspector-controls/groups';\nimport { default as InspectorControls } from '../inspector-controls';\nimport { store as blockEditorStore } from '../../store';\n\nconst PositionControlsPanel = () => {\n\tconst [ initialOpen, setInitialOpen ] = useState();\n\n\t// Determine whether the panel should be expanded.\n\tconst { multiSelectedBlocks } = useSelect( ( select ) => {\n\t\tconst { getBlocksByClientId, getSelectedBlockClientIds } =\n\t\t\tselect( blockEditorStore );\n\t\tconst clientIds = getSelectedBlockClientIds();\n\t\treturn {\n\t\t\tmultiSelectedBlocks: getBlocksByClientId( clientIds ),\n\t\t};\n\t}, [] );\n\n\tuseLayoutEffect( () => {\n\t\t// If any selected block has a position set, open the panel by default.\n\t\t// The first block's value will still be used within the control though.\n\t\tif ( initialOpen === undefined ) {\n\t\t\tsetInitialOpen(\n\t\t\t\tmultiSelectedBlocks.some(\n\t\t\t\t\t( { attributes } ) => !! attributes?.style?.position?.type\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}, [ initialOpen, multiSelectedBlocks, setInitialOpen ] );\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nconst PositionControls = () => {\n\tconst fills = useSlotFills(\n\t\tInspectorControlsGroups.position.Slot.__unstableName\n\t);\n\tconst hasFills = Boolean( fills && fills.length );\n\n\tif ( ! hasFills ) {\n\t\treturn null;\n\t}\n\n\treturn ;\n};\n\nexport default PositionControls;\n","/**\n * Internal dependencies\n */\nimport AdvancedControls from './advanced-controls-panel';\nimport PositionControls from './position-controls-panel';\nimport { default as InspectorControls } from '../inspector-controls';\n\nconst SettingsTab = ( { showAdvancedControls = false } ) => (\n\t<>\n\t\t\n\t\t\n\t\t\n\t\t{ showAdvancedControls && (\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t) }\n\t\n);\n\nexport default SettingsTab;\n","/**\n * WordPress dependencies\n */\nimport { PanelBody } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockStyles from '../block-styles';\nimport InspectorControls from '../inspector-controls';\nimport { useBorderPanelLabel } from '../../hooks/border';\n\nconst StylesTab = ( { blockName, clientId, hasBlockStyles } ) => {\n\tconst borderPanelLabel = useBorderPanelLabel( { blockName } );\n\n\treturn (\n\t\t<>\n\t\t\t{ hasBlockStyles && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t) }\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default StylesTab;\n","// List view tab restricts the blocks that may render to it via the\n// allowlist below.\nconst allowlist = [ 'core/navigation' ];\n\nexport const useIsListViewTabDisabled = ( blockName ) => {\n\treturn ! allowlist.includes( blockName );\n};\n\nexport default useIsListViewTabDisabled;\n","/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { store as preferencesStore } from '@wordpress/preferences';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { TAB_SETTINGS, TAB_STYLES, TAB_LIST_VIEW } from './utils';\nimport SettingsTab from './settings-tab';\nimport StylesTab from './styles-tab';\nimport InspectorControls from '../inspector-controls';\nimport useIsListViewTabDisabled from './use-is-list-view-tab-disabled';\nimport { unlock } from '../../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nexport default function InspectorControlsTabs( {\n\tblockName,\n\tclientId,\n\thasBlockStyles,\n\ttabs,\n} ) {\n\tconst showIconLabels = useSelect( ( select ) => {\n\t\treturn select( preferencesStore ).get( 'core', 'showIconLabels' );\n\t}, [] );\n\n\t// The tabs panel will mount before fills are rendered to the list view\n\t// slot. This means the list view tab isn't initially included in the\n\t// available tabs so the panel defaults selection to the settings tab\n\t// which at the time is the first tab. This check allows blocks known to\n\t// include the list view tab to set it as the tab selected by default.\n\tconst initialTabName = ! useIsListViewTabDisabled( blockName )\n\t\t? TAB_LIST_VIEW.name\n\t\t: undefined;\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ tabs.map( ( tab ) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ showIconLabels && tab.title }\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    \n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __experimentalUseSlotFills as useSlotFills } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControlsGroups from '../inspector-controls/groups';\nimport useIsListViewTabDisabled from './use-is-list-view-tab-disabled';\nimport { InspectorAdvancedControls } from '../inspector-controls';\nimport { TAB_LIST_VIEW, TAB_SETTINGS, TAB_STYLES } from './utils';\nimport { store as blockEditorStore } from '../../store';\n\nconst EMPTY_ARRAY = [];\n\nfunction getShowTabs( blockName, tabSettings = {} ) {\n\t// Block specific setting takes precedence over generic default.\n\tif ( tabSettings[ blockName ] !== undefined ) {\n\t\treturn tabSettings[ blockName ];\n\t}\n\n\t// Use generic default if set over the Gutenberg experiment option.\n\tif ( tabSettings.default !== undefined ) {\n\t\treturn tabSettings.default;\n\t}\n\n\treturn true;\n}\n\nexport default function useInspectorControlsTabs( blockName ) {\n\tconst tabs = [];\n\tconst {\n\t\tbindings: bindingsGroup,\n\t\tborder: borderGroup,\n\t\tcolor: colorGroup,\n\t\tdefault: defaultGroup,\n\t\tdimensions: dimensionsGroup,\n\t\tlist: listGroup,\n\t\tposition: positionGroup,\n\t\tstyles: stylesGroup,\n\t\ttypography: typographyGroup,\n\t\teffects: effectsGroup,\n\t} = InspectorControlsGroups;\n\n\t// List View Tab: If there are any fills for the list group add that tab.\n\tconst listViewDisabled = useIsListViewTabDisabled( blockName );\n\tconst listFills = useSlotFills( listGroup.Slot.__unstableName );\n\tconst hasListFills = ! listViewDisabled && !! listFills && listFills.length;\n\n\t// Styles Tab: Add this tab if there are any fills for block supports\n\t// e.g. border, color, spacing, typography, etc.\n\tconst styleFills = [\n\t\t...( useSlotFills( borderGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( colorGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( dimensionsGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( stylesGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( typographyGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( effectsGroup.Slot.__unstableName ) || [] ),\n\t];\n\tconst hasStyleFills = styleFills.length;\n\n\t// Settings Tab: If we don't have multiple tabs to display\n\t// (i.e. both list view and styles), check only the default and position\n\t// InspectorControls slots. If we have multiple tabs, we'll need to check\n\t// the advanced controls slot as well to ensure they are rendered.\n\tconst advancedFills = [\n\t\t...( useSlotFills( InspectorAdvancedControls.slotName ) || [] ),\n\t\t...( useSlotFills( bindingsGroup.Slot.__unstableName ) || [] ),\n\t];\n\n\tconst settingsFills = [\n\t\t...( useSlotFills( defaultGroup.Slot.__unstableName ) || [] ),\n\t\t...( useSlotFills( positionGroup.Slot.__unstableName ) || [] ),\n\t\t...( hasListFills && hasStyleFills > 1 ? advancedFills : [] ),\n\t];\n\n\t// Add the tabs in the order that they will default to if available.\n\t// List View > Settings > Styles.\n\tif ( hasListFills ) {\n\t\ttabs.push( TAB_LIST_VIEW );\n\t}\n\n\tif ( settingsFills.length ) {\n\t\ttabs.push( TAB_SETTINGS );\n\t}\n\n\tif ( hasStyleFills ) {\n\t\ttabs.push( TAB_STYLES );\n\t}\n\n\tconst tabSettings = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().blockInspectorTabs;\n\t}, [] );\n\n\tconst showTabs = getShowTabs( blockName, tabSettings );\n\treturn showTabs ? tabs : EMPTY_ARRAY;\n}\n","/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport {\n\tuseBlockEditContext,\n\tmayDisplayControlsKey,\n} from '../block-edit/context';\n\nconst { createPrivateSlotFill } = unlock( componentsPrivateApis );\nconst { Fill, Slot } = createPrivateSlotFill( 'BlockInformation' );\n\nconst BlockInfo = ( props ) => {\n\tconst context = useBlockEditContext();\n\tif ( ! context[ mayDisplayControlsKey ] ) {\n\t\treturn null;\n\t}\n\treturn ;\n};\nBlockInfo.Slot = ( props ) => ;\n\nexport default BlockInfo;\n","/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tButton,\n\t__experimentalVStack as VStack,\n\t__experimentalTruncate as Truncate,\n\tFlex,\n\tFlexBlock,\n\tFlexItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\n\nexport default function BlockQuickNavigation( { clientIds, onSelect } ) {\n\tif ( ! clientIds.length ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t\n\t\t\t{ clientIds.map( ( clientId ) => (\n\t\t\t\t\n\t\t\t) ) }\n\t\t\n\t);\n}\n\nfunction BlockQuickNavigationItem( { clientId, onSelect } ) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId,\n\t\tcontext: 'list-view',\n\t} );\n\tconst { isSelected } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { isBlockSelected, hasSelectedInnerBlock } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tisSelected:\n\t\t\t\t\tisBlockSelected( clientId ) ||\n\t\t\t\t\thasSelectedInnerBlock( clientId, /* deep: */ true ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\treturn (\n\t\t {\n\t\t\t\tawait selectBlock( clientId );\n\t\t\t\tif ( onSelect ) {\n\t\t\t\t\tonSelect( clientId );\n\t\t\t\t}\n\t\t\t} }\n\t\t>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ blockTitle }\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tgetBlockType,\n\tgetUnregisteredTypeHandlerName,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { PanelBody, __unstableMotion as motion } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport SkipToSelectedBlock from '../skip-to-selected-block';\nimport BlockCard from '../block-card';\nimport MultiSelectionInspector from '../multi-selection-inspector';\nimport BlockVariationTransforms from '../block-variation-transforms';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\nimport BlockStyles from '../block-styles';\nimport { default as InspectorControls } from '../inspector-controls';\nimport { default as InspectorControlsTabs } from '../inspector-controls-tabs';\nimport useInspectorControlsTabs from '../inspector-controls-tabs/use-inspector-controls-tabs';\nimport AdvancedControls from '../inspector-controls-tabs/advanced-controls-panel';\nimport PositionControls from '../inspector-controls-tabs/position-controls-panel';\nimport useBlockInspectorAnimationSettings from './useBlockInspectorAnimationSettings';\nimport BlockInfo from '../block-info-slot-fill';\nimport BlockQuickNavigation from '../block-quick-navigation';\nimport { useBorderPanelLabel } from '../../hooks/border';\n\nimport { unlock } from '../../lock-unlock';\n\nfunction BlockStylesPanel( { clientId } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n\nfunction BlockInspectorLockedBlocks( { topLevelLockedBlock } ) {\n\tconst contentClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetClientIdsOfDescendants,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\treturn getClientIdsOfDescendants( topLevelLockedBlock ).filter(\n\t\t\t\t( clientId ) =>\n\t\t\t\t\tgetBlockName( clientId ) !== 'core/list-item' &&\n\t\t\t\t\tgetBlockEditingMode( clientId ) === 'contentOnly'\n\t\t\t);\n\t\t},\n\t\t[ topLevelLockedBlock ]\n\t);\n\tconst hasBlockStyles = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName } = select( blockEditorStore );\n\t\t\tconst { getBlockStyles } = select( blocksStore );\n\t\t\treturn !! getBlockStyles( getBlockName( topLevelLockedBlock ) )\n\t\t\t\t?.length;\n\t\t},\n\t\t[ topLevelLockedBlock ]\n\t);\n\tconst blockInformation = useBlockDisplayInformation( topLevelLockedBlock );\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t{ hasBlockStyles && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ contentClientIds.length > 0 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) }\n\t\t
    \n\t);\n}\n\nconst BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {\n\tconst {\n\t\tcount,\n\t\tselectedBlockName,\n\t\tselectedBlockClientId,\n\t\tblockType,\n\t\ttopLevelLockedBlock,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetSelectedBlockCount,\n\t\t\tgetBlockName,\n\t\t\tgetContentLockingParent,\n\t\t\tgetTemplateLock,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\t\tconst _selectedBlockName =\n\t\t\t_selectedBlockClientId && getBlockName( _selectedBlockClientId );\n\t\tconst _blockType =\n\t\t\t_selectedBlockName && getBlockType( _selectedBlockName );\n\n\t\treturn {\n\t\t\tcount: getSelectedBlockCount(),\n\t\t\tselectedBlockClientId: _selectedBlockClientId,\n\t\t\tselectedBlockName: _selectedBlockName,\n\t\t\tblockType: _blockType,\n\t\t\ttopLevelLockedBlock:\n\t\t\t\tgetContentLockingParent( _selectedBlockClientId ) ||\n\t\t\t\t( getTemplateLock( _selectedBlockClientId ) === 'contentOnly' ||\n\t\t\t\t_selectedBlockName === 'core/block'\n\t\t\t\t\t? _selectedBlockClientId\n\t\t\t\t\t: undefined ),\n\t\t};\n\t}, [] );\n\n\tconst availableTabs = useInspectorControlsTabs( blockType?.name );\n\tconst showTabs = availableTabs?.length > 1;\n\n\t// The block inspector animation settings will be completely\n\t// removed in the future to create an API which allows the block\n\t// inspector to transition between what it\n\t// displays based on the relationship between the selected block\n\t// and its parent, and only enable it if the parent is controlling\n\t// its children blocks.\n\tconst blockInspectorAnimationSettings =\n\t\tuseBlockInspectorAnimationSettings( blockType );\n\n\tconst borderPanelLabel = useBorderPanelLabel( {\n\t\tblockName: selectedBlockName,\n\t} );\n\n\tif ( count > 1 ) {\n\t\treturn (\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t{ showTabs ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t
    \n\t\t);\n\t}\n\n\tconst isSelectedBlockUnregistered =\n\t\tselectedBlockName === getUnregisteredTypeHandlerName();\n\n\t/*\n\t * If the selected block is of an unregistered type, avoid showing it as an actual selection\n\t * because we want the user to focus on the unregistered block warning, not block settings.\n\t */\n\tif (\n\t\t! blockType ||\n\t\t! selectedBlockClientId ||\n\t\tisSelectedBlockUnregistered\n\t) {\n\t\tif ( showNoBlockSelectedMessage ) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{ __( 'No block selected.' ) }\n\t\t\t\t\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\tif ( topLevelLockedBlock ) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t (\n\t\t\t\t\n\t\t\t\t\t{ children }\n\t\t\t\t\n\t\t\t) }\n\t\t>\n\t\t\t\n\t\t\n\t);\n};\n\nconst BlockInspectorSingleBlockWrapper = ( { animate, wrapper, children } ) => {\n\treturn animate ? wrapper( children ) : children;\n};\n\nconst AnimatedContainer = ( {\n\tblockInspectorAnimationSettings,\n\tselectedBlockClientId,\n\tchildren,\n} ) => {\n\tconst animationOrigin =\n\t\tblockInspectorAnimationSettings &&\n\t\tblockInspectorAnimationSettings.enterDirection === 'leftToRight'\n\t\t\t? -50\n\t\t\t: 50;\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n};\n\nconst BlockInspectorSingleBlock = ( { clientId, blockName } ) => {\n\tconst availableTabs = useInspectorControlsTabs( blockName );\n\tconst showTabs = availableTabs?.length > 1;\n\n\tconst hasBlockStyles = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockStyles } = select( blocksStore );\n\t\t\tconst blockStyles = getBlockStyles( blockName );\n\t\t\treturn blockStyles && blockStyles.length > 0;\n\t\t},\n\t\t[ blockName ]\n\t);\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst borderPanelLabel = useBorderPanelLabel( { blockName } );\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t{ showTabs && (\n\t\t\t\t\n\t\t\t) }\n\t\t\t{ ! showTabs && (\n\t\t\t\t<>\n\t\t\t\t\t{ hasBlockStyles && (\n\t\t\t\t\t\t\n\t\t\t\t\t) }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t) }\n\t\t\t\n\t\t
    \n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-inspector/README.md\n */\nexport default BlockInspector;\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function useBlockInspectorAnimationSettings( blockType ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( blockType ) {\n\t\t\t\tconst globalBlockInspectorAnimationSettings =\n\t\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t\t.blockInspectorAnimation;\n\n\t\t\t\t// Get the name of the block that will allow it's children to be animated.\n\t\t\t\tconst animationParent =\n\t\t\t\t\tglobalBlockInspectorAnimationSettings?.animationParent;\n\n\t\t\t\t// Determine whether the animationParent block is a parent of the selected block.\n\t\t\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\t\t\t\tconst animationParentBlockClientId = getBlockParentsByBlockName(\n\t\t\t\t\t_selectedBlockClientId,\n\t\t\t\t\tanimationParent,\n\t\t\t\t\ttrue\n\t\t\t\t)[ 0 ];\n\n\t\t\t\t// If the selected block is not a child of the animationParent block,\n\t\t\t\t// and not an animationParent block itself, don't animate.\n\t\t\t\tif (\n\t\t\t\t\t! animationParentBlockClientId &&\n\t\t\t\t\tblockType.name !== animationParent\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn globalBlockInspectorAnimationSettings?.[\n\t\t\t\t\tblockType.name\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t[ blockType ]\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport useClipboardHandler from '../writing-flow/use-clipboard-handler';\n\n/**\n * @deprecated\n */\nexport const __unstableUseClipboardHandler = () => {\n\tdeprecated( '__unstableUseClipboardHandler', {\n\t\talternative: 'BlockCanvas or WritingFlow',\n\t\tsince: '6.4',\n\t\tversion: '6.7',\n\t} );\n\treturn useClipboardHandler();\n};\n\n/**\n * @deprecated\n * @param {Object} props\n */\nexport default function CopyHandler( props ) {\n\tdeprecated( 'CopyHandler', {\n\t\talternative: 'BlockCanvas or WritingFlow',\n\t\tsince: '6.4',\n\t\tversion: '6.7',\n\t} );\n\treturn
    ;\n}\n","/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { PrivateInserterMenu } from './menu';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\nfunction InserterLibrary(\n\t{\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\tshowInserterHelpPanel,\n\t\tshowMostUsedBlocks = false,\n\t\t__experimentalInsertionIndex,\n\t\t__experimentalInitialTab,\n\t\t__experimentalInitialCategory,\n\t\t__experimentalFilterValue,\n\t\tonPatternCategorySelection,\n\t\tonSelect = noop,\n\t\tshouldFocusBlock = false,\n\t\tonClose,\n\t},\n\tref\n) {\n\tconst { destinationRootClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId } = select( blockEditorStore );\n\t\t\tconst _rootClientId =\n\t\t\t\trootClientId || getBlockRootClientId( clientId ) || undefined;\n\t\t\treturn {\n\t\t\t\tdestinationRootClientId: _rootClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\treturn (\n\t\t\n\t);\n}\n\nexport const PrivateInserterLibrary = forwardRef( InserterLibrary );\n\nfunction PublicInserterLibrary( props, ref ) {\n\treturn (\n\t\t\n\t);\n}\n\nexport default forwardRef( PublicInserterLibrary );\n","/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Scrolls the multi block selection end into view if not in view already. This\n * is important to do after selection by keyboard.\n *\n * @deprecated\n */\nexport function MultiSelectScrollIntoView() {\n\tdeprecated( 'wp.blockEditor.MultiSelectScrollIntoView', {\n\t\thint: 'This behaviour is now built-in.',\n\t\tsince: '5.8',\n\t} );\n\treturn null;\n}\n","/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\nimport { computeCaretRect, getScrollContainer } from '@wordpress/dom';\nimport { useSelect } from '@wordpress/data';\nimport { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst isIE = window.navigator.userAgent.indexOf( 'Trident' ) !== -1;\nconst arrowKeyCodes = new Set( [ UP, DOWN, LEFT, RIGHT ] );\nconst initialTriggerPercentage = 0.75;\n\nexport function useTypewriter() {\n\tconst hasSelectedBlock = useSelect(\n\t\t( select ) => select( blockEditorStore ).hasSelectedBlock(),\n\t\t[]\n\t);\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! hasSelectedBlock ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tlet scrollResizeRafId;\n\t\t\tlet onKeyDownRafId;\n\n\t\t\tlet caretRect;\n\n\t\t\tfunction onScrollResize() {\n\t\t\t\tif ( scrollResizeRafId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tscrollResizeRafId = defaultView.requestAnimationFrame( () => {\n\t\t\t\t\tcomputeCaretRectangle();\n\t\t\t\t\tscrollResizeRafId = null;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\t// Ensure the any remaining request is cancelled.\n\t\t\t\tif ( onKeyDownRafId ) {\n\t\t\t\t\tdefaultView.cancelAnimationFrame( onKeyDownRafId );\n\t\t\t\t}\n\n\t\t\t\t// Use an animation frame for a smooth result.\n\t\t\t\tonKeyDownRafId = defaultView.requestAnimationFrame( () => {\n\t\t\t\t\tmaintainCaretPosition( event );\n\t\t\t\t\tonKeyDownRafId = null;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Maintains the scroll position after a selection change caused by a\n\t\t\t * keyboard event.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keyboard event.\n\t\t\t */\n\t\t\tfunction maintainCaretPosition( { keyCode } ) {\n\t\t\t\tif ( ! isSelectionEligibleForScroll() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst currentCaretRect = computeCaretRect( defaultView );\n\n\t\t\t\tif ( ! currentCaretRect ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If for some reason there is no position set to be scrolled to, let\n\t\t\t\t// this be the position to be scrolled to in the future.\n\t\t\t\tif ( ! caretRect ) {\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Even though enabling the typewriter effect for arrow keys results in\n\t\t\t\t// a pleasant experience, it may not be the case for everyone, so, for\n\t\t\t\t// now, let's disable it.\n\t\t\t\tif ( arrowKeyCodes.has( keyCode ) ) {\n\t\t\t\t\t// Reset the caret position to maintain.\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst diff = currentCaretRect.top - caretRect.top;\n\n\t\t\t\tif ( diff === 0 ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst scrollContainer = getScrollContainer( node );\n\n\t\t\t\t// The page must be scrollable.\n\t\t\t\tif ( ! scrollContainer ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst windowScroll =\n\t\t\t\t\tscrollContainer === ownerDocument.body ||\n\t\t\t\t\tscrollContainer === ownerDocument.documentElement;\n\t\t\t\tconst scrollY = windowScroll\n\t\t\t\t\t? defaultView.scrollY\n\t\t\t\t\t: scrollContainer.scrollTop;\n\t\t\t\tconst scrollContainerY = windowScroll\n\t\t\t\t\t? 0\n\t\t\t\t\t: scrollContainer.getBoundingClientRect().top;\n\t\t\t\tconst relativeScrollPosition = windowScroll\n\t\t\t\t\t? caretRect.top / defaultView.innerHeight\n\t\t\t\t\t: ( caretRect.top - scrollContainerY ) /\n\t\t\t\t\t ( defaultView.innerHeight - scrollContainerY );\n\n\t\t\t\t// If the scroll position is at the start, the active editable element\n\t\t\t\t// is the last one, and the caret is positioned within the initial\n\t\t\t\t// trigger percentage of the page, do not scroll the page.\n\t\t\t\t// The typewriter effect should not kick in until an empty page has been\n\t\t\t\t// filled with the initial trigger percentage or the user scrolls\n\t\t\t\t// intentionally down.\n\t\t\t\tif (\n\t\t\t\t\tscrollY === 0 &&\n\t\t\t\t\trelativeScrollPosition < initialTriggerPercentage &&\n\t\t\t\t\tisLastEditableNode()\n\t\t\t\t) {\n\t\t\t\t\t// Reset the caret position to maintain.\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst scrollContainerHeight = windowScroll\n\t\t\t\t\t? defaultView.innerHeight\n\t\t\t\t\t: scrollContainer.clientHeight;\n\n\t\t\t\t// Abort if the target scroll position would scroll the caret out of\n\t\t\t\t// view.\n\t\t\t\tif (\n\t\t\t\t\t// The caret is under the lower fold.\n\t\t\t\t\tcaretRect.top + caretRect.height >\n\t\t\t\t\t\tscrollContainerY + scrollContainerHeight ||\n\t\t\t\t\t// The caret is above the upper fold.\n\t\t\t\t\tcaretRect.top < scrollContainerY\n\t\t\t\t) {\n\t\t\t\t\t// Reset the caret position to maintain.\n\t\t\t\t\tcaretRect = currentCaretRect;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( windowScroll ) {\n\t\t\t\t\tdefaultView.scrollBy( 0, diff );\n\t\t\t\t} else {\n\t\t\t\t\tscrollContainer.scrollTop += diff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Adds a `selectionchange` listener to reset the scroll position to be\n\t\t\t * maintained.\n\t\t\t */\n\t\t\tfunction addSelectionChangeListener() {\n\t\t\t\townerDocument.addEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tcomputeCaretRectOnSelectionChange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Resets the scroll position to be maintained during a `selectionchange`\n\t\t\t * event. Also removes the listener, so it acts as a one-time listener.\n\t\t\t */\n\t\t\tfunction computeCaretRectOnSelectionChange() {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tcomputeCaretRectOnSelectionChange\n\t\t\t\t);\n\t\t\t\tcomputeCaretRectangle();\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Resets the scroll position to be maintained.\n\t\t\t */\n\t\t\tfunction computeCaretRectangle() {\n\t\t\t\tif ( isSelectionEligibleForScroll() ) {\n\t\t\t\t\tcaretRect = computeCaretRect( defaultView );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Checks if the current situation is elegible for scroll:\n\t\t\t * - There should be one and only one block selected.\n\t\t\t * - The component must contain the selection.\n\t\t\t * - The active element must be contenteditable.\n\t\t\t */\n\t\t\tfunction isSelectionEligibleForScroll() {\n\t\t\t\treturn (\n\t\t\t\t\tnode.contains( ownerDocument.activeElement ) &&\n\t\t\t\t\townerDocument.activeElement.isContentEditable\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction isLastEditableNode() {\n\t\t\t\tconst editableNodes = node.querySelectorAll(\n\t\t\t\t\t'[contenteditable=\"true\"]'\n\t\t\t\t);\n\t\t\t\tconst lastEditableNode =\n\t\t\t\t\teditableNodes[ editableNodes.length - 1 ];\n\t\t\t\treturn lastEditableNode === ownerDocument.activeElement;\n\t\t\t}\n\n\t\t\t// When the user scrolls or resizes, the scroll position should be\n\t\t\t// reset.\n\t\t\tdefaultView.addEventListener( 'scroll', onScrollResize, true );\n\t\t\tdefaultView.addEventListener( 'resize', onScrollResize, true );\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'keyup', maintainCaretPosition );\n\t\t\tnode.addEventListener( 'mousedown', addSelectionChangeListener );\n\t\t\tnode.addEventListener( 'touchstart', addSelectionChangeListener );\n\n\t\t\treturn () => {\n\t\t\t\tdefaultView.removeEventListener(\n\t\t\t\t\t'scroll',\n\t\t\t\t\tonScrollResize,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener(\n\t\t\t\t\t'resize',\n\t\t\t\t\tonScrollResize,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'keyup', maintainCaretPosition );\n\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t'mousedown',\n\t\t\t\t\taddSelectionChangeListener\n\t\t\t\t);\n\t\t\t\tnode.removeEventListener(\n\t\t\t\t\t'touchstart',\n\t\t\t\t\taddSelectionChangeListener\n\t\t\t\t);\n\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tcomputeCaretRectOnSelectionChange\n\t\t\t\t);\n\n\t\t\t\tdefaultView.cancelAnimationFrame( scrollResizeRafId );\n\t\t\t\tdefaultView.cancelAnimationFrame( onKeyDownRafId );\n\t\t\t};\n\t\t},\n\t\t[ hasSelectedBlock ]\n\t);\n}\n\nfunction Typewriter( { children } ) {\n\treturn (\n\t\t
    \n\t\t\t{ children }\n\t\t
    \n\t);\n}\n\n/**\n * The exported component. The implementation of Typewriter faced technical\n * challenges in Internet Explorer, and is simply skipped, rendering the given\n * props children instead.\n *\n * @type {Component}\n */\nconst TypewriterOrIEBypass = isIE ? ( props ) => props.children : Typewriter;\n\n/**\n * Ensures that the text selection keeps the same vertical distance from the\n * viewport during keyboard events within this component. The vertical distance\n * can vary. It is the last clicked or scrolled to position.\n */\nexport default TypewriterOrIEBypass;\n","/**\n * WordPress dependencies\n */\nimport { createContext, useContext, useMemo } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\n\nconst RenderedRefsContext = createContext( {} );\n\n/**\n * Immutably adds an unique identifier to a set scoped for a given block type.\n *\n * @param {Object} renderedBlocks Rendered blocks grouped by block name\n * @param {string} blockName Name of the block.\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n *\n * @return {Object} The list of rendered blocks grouped by block name.\n */\nfunction addToBlockType( renderedBlocks, blockName, uniqueId ) {\n\tconst result = {\n\t\t...renderedBlocks,\n\t\t[ blockName ]: renderedBlocks[ blockName ]\n\t\t\t? new Set( renderedBlocks[ blockName ] )\n\t\t\t: new Set(),\n\t};\n\tresult[ blockName ].add( uniqueId );\n\n\treturn result;\n}\n\n/**\n * A React context provider for use with the `useHasRecursion` hook to prevent recursive\n * renders.\n *\n * Wrap block content with this provider and provide the same `uniqueId` prop as used\n * with `useHasRecursion`.\n *\n * @param {Object} props\n * @param {*} props.uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} props.blockName Optional block name.\n * @param {JSX.Element} props.children React children.\n *\n * @return {JSX.Element} A React element.\n */\nexport function RecursionProvider( { children, uniqueId, blockName = '' } ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\n\tblockName = blockName || name;\n\n\tconst newRenderedBlocks = useMemo(\n\t\t() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),\n\t\t[ previouslyRenderedBlocks, blockName, uniqueId ]\n\t);\n\n\treturn (\n\t\t\n\t\t\t{ children }\n\t\t\n\t);\n}\n\n/**\n * A React hook for keeping track of blocks previously rendered up in the block\n * tree. Blocks susceptible to recursion can use this hook in their `Edit`\n * function to prevent said recursion.\n *\n * Use this with the `RecursionProvider` component, using the same `uniqueId` value\n * for both the hook and the provider.\n *\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} blockName Optional block name.\n *\n * @return {boolean} A boolean describing whether the provided id has already been rendered.\n */\nexport function useHasRecursion( uniqueId, blockName = '' ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\tblockName = blockName || name;\n\treturn Boolean( previouslyRenderedBlocks[ blockName ]?.has( uniqueId ) );\n}\n\nexport const DeprecatedExperimentalRecursionProvider = ( props ) => {\n\tdeprecated( 'wp.blockEditor.__experimentalRecursionProvider', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.RecursionProvider',\n\t} );\n\treturn ;\n};\n\nexport const DeprecatedExperimentalUseHasRecursion = ( ...args ) => {\n\tdeprecated( 'wp.blockEditor.__experimentalUseHasRecursion', {\n\t\tsince: '6.5',\n\t\talternative: 'wp.blockEditor.useHasRecursion',\n\t} );\n\treturn useHasRecursion( ...args );\n};\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n\t__experimentalHeading as Heading,\n\t__experimentalSpacer as Spacer,\n\tButton,\n\t__experimentalText as Text,\n} from '@wordpress/components';\nimport { closeSmall } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport default function InspectorPopoverHeader( {\n\ttitle,\n\thelp,\n\tactions = [],\n\tonClose,\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ title }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{ actions.map( ( { label, icon, onClick } ) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{ ! icon && label }\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\t{ onClose && (\n\t\t\t\t\t\n\t\t\t\t) }\n\t\t\t\n\t\t\t{ help && { help } }\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { DateTimePicker, TimePicker } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { forwardRef } from '@wordpress/element';\nimport { getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport InspectorPopoverHeader from '../inspector-popover-header';\n\nexport function PublishDateTimePicker(\n\t{\n\t\tonClose,\n\t\tonChange,\n\t\tshowPopoverHeaderActions,\n\t\tisCompact,\n\t\tcurrentDate,\n\t\t...additionalProps\n\t},\n\tref\n) {\n\tconst datePickerProps = {\n\t\tstartOfWeek: getSettings().l10n.startOfWeek,\n\t\tonChange,\n\t\tcurrentDate: isCompact ? undefined : currentDate,\n\t\tcurrentTime: isCompact ? currentDate : undefined,\n\t\t...additionalProps,\n\t};\n\tconst DatePickerComponent = isCompact ? TimePicker : DateTimePicker;\n\treturn (\n\t\t
    \n\t\t\t onChange?.( null ),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t ]\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tonClose={ onClose }\n\t\t\t/>\n\t\t\t\n\t\t
    \n\t);\n}\n\nexport const PrivatePublishDateTimePicker = forwardRef( PublishDateTimePicker );\n\nfunction PublicPublishDateTimePicker( props, ref ) {\n\treturn (\n\t\t\n\t);\n}\n\nexport default forwardRef( PublicPublishDateTimePicker );\n","const ELEMENT_CLASS_NAMES = {\n\tbutton: 'wp-element-button',\n\tcaption: 'wp-element-caption',\n};\n\nexport const __experimentalGetElementClassName = ( element ) => {\n\treturn ELEMENT_CLASS_NAMES[ element ] ? ELEMENT_CLASS_NAMES[ element ] : '';\n};\n","/**\n * This function was accidentally exposed for mobile/native usage.\n *\n * @deprecated\n *\n * @return {string} Empty string.\n */\nexport default () => '';\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\tToggleControl,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useToolsPanelDropdownMenuProps } from './utils';\n\nexport function useHasImageSettingsPanel( name, value, inheritedValue ) {\n\t// Note: If lightbox `value` exists, that means it was\n\t// defined via the the Global Styles UI and will NOT\n\t// be a boolean value or contain the `allowEditing` property,\n\t// so we should show the settings panel in those cases.\n\treturn (\n\t\t( name === 'core/image' && inheritedValue?.lightbox?.allowEditing ) ||\n\t\t!! value?.lightbox\n\t);\n}\n\nexport default function ImageSettingsPanel( {\n\tonChange,\n\tvalue,\n\tinheritedValue,\n\tpanelId,\n} ) {\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst resetLightbox = () => {\n\t\tonChange( undefined );\n\t};\n\n\tconst onChangeLightbox = ( newSetting ) => {\n\t\tonChange( {\n\t\t\tenabled: newSetting,\n\t\t} );\n\t};\n\n\tlet lightboxChecked = false;\n\n\tif ( inheritedValue?.lightbox?.enabled ) {\n\t\tlightboxChecked = inheritedValue.lightbox.enabled;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t !! value?.lightbox }\n\t\t\t\t\tlabel={ __( 'Expand on click' ) }\n\t\t\t\t\tonDeselect={ resetLightbox }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\tTextareaControl,\n\tNotice,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { default as transformStyles } from '../../utils/transform-styles';\n\nexport default function AdvancedPanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n} ) {\n\t// Custom CSS\n\tconst [ cssError, setCSSError ] = useState( null );\n\tconst customCSS = inheritedValue?.css;\n\tfunction handleOnChange( newValue ) {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\tcss: newValue,\n\t\t} );\n\t\tif ( cssError ) {\n\t\t\t// Check if the new value is valid CSS, and pass a wrapping selector\n\t\t\t// to ensure that `transformStyles` validates the CSS. Note that the\n\t\t\t// wrapping selector here is not used in the actual output of any styles.\n\t\t\tconst [ transformed ] = transformStyles(\n\t\t\t\t[ { css: newValue } ],\n\t\t\t\t'.for-validation-only'\n\t\t\t);\n\t\t\tif ( transformed ) {\n\t\t\t\tsetCSSError( null );\n\t\t\t}\n\t\t}\n\t}\n\tfunction handleOnBlur( event ) {\n\t\tif ( ! event?.target?.value ) {\n\t\t\tsetCSSError( null );\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if the new value is valid CSS, and pass a wrapping selector\n\t\t// to ensure that `transformStyles` validates the CSS. Note that the\n\t\t// wrapping selector here is not used in the actual output of any styles.\n\t\tconst [ transformed ] = transformStyles(\n\t\t\t[ { css: event.target.value } ],\n\t\t\t'.for-validation-only'\n\t\t);\n\n\t\tsetCSSError(\n\t\t\ttransformed === null\n\t\t\t\t? __( 'There is an error with your CSS structure.' )\n\t\t\t\t: null\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ cssError && (\n\t\t\t\t setCSSError( null ) }>\n\t\t\t\t\t{ cssError }\n\t\t\t\t\n\t\t\t) }\n\t\t\t handleOnChange( newValue ) }\n\t\t\t\tonBlur={ handleOnBlur }\n\t\t\t\tclassName=\"block-editor-global-styles-advanced-panel__custom-css-input\"\n\t\t\t\tspellCheck={ false }\n\t\t\t/>\n\t\t\n\t);\n}\n","/**\n * External dependencies\n */\nimport memoize from 'memize';\n\n/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { getBlockTypes } from '@wordpress/blocks';\n\nconst globalStylesChangesCache = new Map();\nconst EMPTY_ARRAY = [];\nconst translationMap = {\n\tcaption: __( 'Caption' ),\n\tlink: __( 'Link' ),\n\tbutton: __( 'Button' ),\n\theading: __( 'Heading' ),\n\th1: __( 'H1' ),\n\th2: __( 'H2' ),\n\th3: __( 'H3' ),\n\th4: __( 'H4' ),\n\th5: __( 'H5' ),\n\th6: __( 'H6' ),\n\t'settings.color': __( 'Color' ),\n\t'settings.typography': __( 'Typography' ),\n\t'styles.color': __( 'Colors' ),\n\t'styles.spacing': __( 'Spacing' ),\n\t'styles.background': __( 'Background' ),\n\t'styles.typography': __( 'Typography' ),\n};\nconst getBlockNames = memoize( () =>\n\tgetBlockTypes().reduce( ( accumulator, { name, title } ) => {\n\t\taccumulator[ name ] = title;\n\t\treturn accumulator;\n\t}, {} )\n);\nconst isObject = ( obj ) => obj !== null && typeof obj === 'object';\n\n/**\n * Get the translation for a given global styles key.\n * @param {string} key A key representing a path to a global style property or setting.\n * @return {string|undefined} A translated key or undefined if no translation exists.\n */\nfunction getTranslation( key ) {\n\tif ( translationMap[ key ] ) {\n\t\treturn translationMap[ key ];\n\t}\n\n\tconst keyArray = key.split( '.' );\n\n\tif ( keyArray?.[ 0 ] === 'blocks' ) {\n\t\tconst blockName = getBlockNames()?.[ keyArray[ 1 ] ];\n\t\treturn blockName || keyArray[ 1 ];\n\t}\n\n\tif ( keyArray?.[ 0 ] === 'elements' ) {\n\t\treturn translationMap[ keyArray[ 1 ] ] || keyArray[ 1 ];\n\t}\n\n\treturn undefined;\n}\n\n/**\n * A deep comparison of two objects, optimized for comparing global styles.\n * @param {Object} changedObject The changed object to compare.\n * @param {Object} originalObject The original object to compare against.\n * @param {string} parentPath A key/value pair object of block names and their rendered titles.\n * @return {string[]} An array of paths whose values have changed.\n */\nfunction deepCompare( changedObject, originalObject, parentPath = '' ) {\n\t// We have two non-object values to compare.\n\tif ( ! isObject( changedObject ) && ! isObject( originalObject ) ) {\n\t\t/*\n\t\t * Only return a path if the value has changed.\n\t\t * And then only the path name up to 2 levels deep.\n\t\t */\n\t\treturn changedObject !== originalObject\n\t\t\t? parentPath.split( '.' ).slice( 0, 2 ).join( '.' )\n\t\t\t: undefined;\n\t}\n\n\t// Enable comparison when an object doesn't have a corresponding property to compare.\n\tchangedObject = isObject( changedObject ) ? changedObject : {};\n\toriginalObject = isObject( originalObject ) ? originalObject : {};\n\n\tconst allKeys = new Set( [\n\t\t...Object.keys( changedObject ),\n\t\t...Object.keys( originalObject ),\n\t] );\n\n\tlet diffs = [];\n\tfor ( const key of allKeys ) {\n\t\tconst path = parentPath ? parentPath + '.' + key : key;\n\t\tconst changedPath = deepCompare(\n\t\t\tchangedObject[ key ],\n\t\t\toriginalObject[ key ],\n\t\t\tpath\n\t\t);\n\t\tif ( changedPath ) {\n\t\t\tdiffs = diffs.concat( changedPath );\n\t\t}\n\t}\n\treturn diffs;\n}\n\n/**\n * Returns an array of translated summarized global styles changes.\n * Results are cached using a Map() key of `JSON.stringify( { next, previous } )`.\n *\n * @param {Object} next The changed object to compare.\n * @param {Object} previous The original object to compare against.\n * @return {Array[]} A 2-dimensional array of tuples: [ \"group\", \"translated change\" ].\n */\nexport function getGlobalStylesChangelist( next, previous ) {\n\tconst cacheKey = JSON.stringify( { next, previous } );\n\n\tif ( globalStylesChangesCache.has( cacheKey ) ) {\n\t\treturn globalStylesChangesCache.get( cacheKey );\n\t}\n\n\t/*\n\t * Compare the two changesets with normalized keys.\n\t * The order of these keys determines the order in which\n\t * they'll appear in the results.\n\t */\n\tconst changedValueTree = deepCompare(\n\t\t{\n\t\t\tstyles: {\n\t\t\t\tbackground: next?.styles?.background,\n\t\t\t\tcolor: next?.styles?.color,\n\t\t\t\ttypography: next?.styles?.typography,\n\t\t\t\tspacing: next?.styles?.spacing,\n\t\t\t},\n\t\t\tblocks: next?.styles?.blocks,\n\t\t\telements: next?.styles?.elements,\n\t\t\tsettings: next?.settings,\n\t\t},\n\t\t{\n\t\t\tstyles: {\n\t\t\t\tbackground: previous?.styles?.background,\n\t\t\t\tcolor: previous?.styles?.color,\n\t\t\t\ttypography: previous?.styles?.typography,\n\t\t\t\tspacing: previous?.styles?.spacing,\n\t\t\t},\n\t\t\tblocks: previous?.styles?.blocks,\n\t\t\telements: previous?.styles?.elements,\n\t\t\tsettings: previous?.settings,\n\t\t}\n\t);\n\n\tif ( ! changedValueTree.length ) {\n\t\tglobalStylesChangesCache.set( cacheKey, EMPTY_ARRAY );\n\t\treturn EMPTY_ARRAY;\n\t}\n\n\t// Remove duplicate results.\n\tconst result = [ ...new Set( changedValueTree ) ]\n\t\t/*\n\t\t * Translate the keys.\n\t\t * Remove empty translations.\n\t\t */\n\t\t.reduce( ( acc, curr ) => {\n\t\t\tconst translation = getTranslation( curr );\n\t\t\tif ( translation ) {\n\t\t\t\tacc.push( [ curr.split( '.' )[ 0 ], translation ] );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\tglobalStylesChangesCache.set( cacheKey, result );\n\n\treturn result;\n}\n\n/**\n * From a getGlobalStylesChangelist() result, returns an array of translated global styles changes, grouped by type.\n * The types are 'blocks', 'elements', 'settings', and 'styles'.\n *\n * @param {Object} next The changed object to compare.\n * @param {Object} previous The original object to compare against.\n * @param {{maxResults:number}} options Options. maxResults: results to return before truncating.\n * @return {string[]} An array of translated changes.\n */\nexport default function getGlobalStylesChanges( next, previous, options = {} ) {\n\tlet changeList = getGlobalStylesChangelist( next, previous );\n\tconst changesLength = changeList.length;\n\tconst { maxResults } = options;\n\n\tif ( changesLength ) {\n\t\t// Truncate to `n` results if necessary.\n\t\tif ( !! maxResults && changesLength > maxResults ) {\n\t\t\tchangeList = changeList.slice( 0, maxResults );\n\t\t}\n\t\treturn Object.entries(\n\t\t\tchangeList.reduce( ( acc, curr ) => {\n\t\t\t\tconst group = acc[ curr[ 0 ] ] || [];\n\t\t\t\tif ( ! group.includes( curr[ 1 ] ) ) {\n\t\t\t\t\tacc[ curr[ 0 ] ] = [ ...group, curr[ 1 ] ];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, {} )\n\t\t).map( ( [ key, changeValues ] ) => {\n\t\t\tconst changeValuesLength = changeValues.length;\n\t\t\tconst joinedChangesValue = changeValues.join(\n\t\t\t\t/* translators: Used between list items, there is a space after the comma. */\n\t\t\t\t__( ', ' ) // eslint-disable-line @wordpress/i18n-no-flanking-whitespace\n\t\t\t);\n\t\t\tswitch ( key ) {\n\t\t\t\tcase 'blocks': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of block names separated by a comma.\n\t\t\t\t\t\t_n( '%s block.', '%s blocks.', changeValuesLength ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase 'elements': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of element names separated by a comma.\n\t\t\t\t\t\t_n( '%s element.', '%s elements.', changeValuesLength ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase 'settings': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of theme.json setting labels separated by a comma.\n\t\t\t\t\t\t__( '%s settings.' ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase 'styles': {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of theme.json top-level styles labels separated by a comma.\n\t\t\t\t\t\t__( '%s styles.' ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t// translators: %s: a list of global styles changes separated by a comma.\n\t\t\t\t\t\t__( '%s.' ),\n\t\t\t\t\t\tjoinedChangesValue\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn EMPTY_ARRAY;\n}\n","/**\n * Memize options object.\n *\n * @typedef MemizeOptions\n *\n * @property {number} [maxSize] Maximum size of the cache.\n */\n\n/**\n * Internal cache entry.\n *\n * @typedef MemizeCacheNode\n *\n * @property {?MemizeCacheNode|undefined} [prev] Previous node.\n * @property {?MemizeCacheNode|undefined} [next] Next node.\n * @property {Array<*>} args Function arguments for cache\n * entry.\n * @property {*} val Function result.\n */\n\n/**\n * Properties of the enhanced function for controlling cache.\n *\n * @typedef MemizeMemoizedFunction\n *\n * @property {()=>void} clear Clear the cache.\n */\n\n/**\n * Accepts a function to be memoized, and returns a new memoized function, with\n * optional options.\n *\n * @template {(...args: any[]) => any} F\n *\n * @param {F} fn Function to memoize.\n * @param {MemizeOptions} [options] Options object.\n *\n * @return {((...args: Parameters) => ReturnType) & MemizeMemoizedFunction} Memoized function.\n */\nfunction memize(fn, options) {\n\tvar size = 0;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar head;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar tail;\n\n\toptions = options || {};\n\n\tfunction memoized(/* ...args */) {\n\t\tvar node = head,\n\t\t\tlen = arguments.length,\n\t\t\targs,\n\t\t\ti;\n\n\t\tsearchCache: while (node) {\n\t\t\t// Perform a shallow equality test to confirm that whether the node\n\t\t\t// under test is a candidate for the arguments passed. Two arrays\n\t\t\t// are shallowly equal if their length matches and each entry is\n\t\t\t// strictly equal between the two sets. Avoid abstracting to a\n\t\t\t// function which could incur an arguments leaking deoptimization.\n\n\t\t\t// Check whether node arguments match arguments length\n\t\t\tif (node.args.length !== arguments.length) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check whether node arguments match arguments values\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tif (node.args[i] !== arguments[i]) {\n\t\t\t\t\tnode = node.next;\n\t\t\t\t\tcontinue searchCache;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif (node !== head) {\n\t\t\t\t// As tail, shift to previous. Must only shift if not also\n\t\t\t\t// head, since if both head and tail, there is no previous.\n\t\t\t\tif (node === tail) {\n\t\t\t\t\ttail = node.prev;\n\t\t\t\t}\n\n\t\t\t\t// Adjust siblings to point to each other. If node was tail,\n\t\t\t\t// this also handles new tail's empty `next` assignment.\n\t\t\t\t/** @type {MemizeCacheNode} */ (node.prev).next = node.next;\n\t\t\t\tif (node.next) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = head;\n\t\t\t\tnode.prev = null;\n\t\t\t\t/** @type {MemizeCacheNode} */ (head).prev = node;\n\t\t\t\thead = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\t// Create a copy of arguments (avoid leaking deoptimization)\n\t\targs = new Array(len);\n\t\tfor (i = 0; i < len; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\tnode = {\n\t\t\targs: args,\n\n\t\t\t// Generate the result from original function\n\t\t\tval: fn.apply(null, args),\n\t\t};\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif (head) {\n\t\t\thead.prev = node;\n\t\t\tnode.next = head;\n\t\t} else {\n\t\t\t// If no head, follows that there's no tail (at initial or reset)\n\t\t\ttail = node;\n\t\t}\n\n\t\t// Trim tail if we're reached max size and are pending cache insertion\n\t\tif (size === /** @type {MemizeOptions} */ (options).maxSize) {\n\t\t\ttail = /** @type {MemizeCacheNode} */ (tail).prev;\n\t\t\t/** @type {MemizeCacheNode} */ (tail).next = null;\n\t\t} else {\n\t\t\tsize++;\n\t\t}\n\n\t\thead = node;\n\n\t\treturn node.val;\n\t}\n\n\tmemoized.clear = function () {\n\t\thead = null;\n\t\ttail = null;\n\t\tsize = 0;\n\t};\n\n\t// Ignore reason: There's not a clear solution to create an intersection of\n\t// the function with additional properties, where the goal is to retain the\n\t// function signature of the incoming argument and add control properties\n\t// on the return value.\n\n\t// @ts-ignore\n\treturn memoized;\n}\n\nexport { memize as default };\n","/**\n * WordPress dependencies\n */\nimport { RawHTML, StrictMode, Fragment } from '@wordpress/element';\nimport {\n\tgetSaveElement,\n\t__unstableGetBlockProps as getBlockProps,\n} from '@wordpress/blocks';\nimport { RichTextData } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport InnerBlocks from '../inner-blocks';\nimport { Content } from './content';\n\n/*\n * This function is similar to `@wordpress/element`'s `renderToString` function,\n * except that it does not render the elements to a string, but instead collects\n * the values of all rich text `Content` elements.\n */\nfunction addValuesForElement( element, values, innerBlocks ) {\n\tif ( null === element || undefined === element || false === element ) {\n\t\treturn;\n\t}\n\n\tif ( Array.isArray( element ) ) {\n\t\treturn addValuesForElements( element, values, innerBlocks );\n\t}\n\n\tswitch ( typeof element ) {\n\t\tcase 'string':\n\t\tcase 'number':\n\t\t\treturn;\n\t}\n\n\tconst { type, props } = element;\n\n\tswitch ( type ) {\n\t\tcase StrictMode:\n\t\tcase Fragment:\n\t\t\treturn addValuesForElements( props.children, values, innerBlocks );\n\t\tcase RawHTML:\n\t\t\treturn;\n\t\tcase InnerBlocks.Content:\n\t\t\treturn addValuesForBlocks( values, innerBlocks );\n\t\tcase Content:\n\t\t\tvalues.push( props.value );\n\t\t\treturn;\n\t}\n\n\tswitch ( typeof type ) {\n\t\tcase 'string':\n\t\t\tif ( typeof props.children !== 'undefined' ) {\n\t\t\t\treturn addValuesForElements(\n\t\t\t\t\tprops.children,\n\t\t\t\t\tvalues,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase 'function':\n\t\t\tconst el =\n\t\t\t\ttype.prototype && typeof type.prototype.render === 'function'\n\t\t\t\t\t? new type( props ).render()\n\t\t\t\t\t: type( props );\n\t\t\treturn addValuesForElement( el, values, innerBlocks );\n\t}\n}\n\nfunction addValuesForElements( children, ...args ) {\n\tchildren = Array.isArray( children ) ? children : [ children ];\n\n\tfor ( let i = 0; i < children.length; i++ ) {\n\t\taddValuesForElement( children[ i ], ...args );\n\t}\n}\n\nfunction addValuesForBlocks( values, blocks ) {\n\tfor ( let i = 0; i < blocks.length; i++ ) {\n\t\tconst { name, attributes, innerBlocks } = blocks[ i ];\n\t\tconst saveElement = getSaveElement(\n\t\t\tname,\n\t\t\tattributes,\n\t\t\t// Instead of letting save elements use `useInnerBlocksProps.save`,\n\t\t\t// force them to use InnerBlocks.Content instead so we can intercept\n\t\t\t// a single component.\n\t\t\t\n\t\t);\n\t\taddValuesForElement( saveElement, values, innerBlocks );\n\t}\n}\n\nexport function getRichTextValues( blocks = [] ) {\n\tgetBlockProps.skipFilters = true;\n\tconst values = [];\n\taddValuesForBlocks( values, blocks );\n\tgetBlockProps.skipFilters = false;\n\treturn values.map( ( value ) =>\n\t\tvalue instanceof RichTextData\n\t\t\t? value\n\t\t\t: RichTextData.fromHTMLString( value )\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n} from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps\n */\n\n/**\n * The descriptions are purposely made generic as object-fit could be used for\n * any replaced element. Provide your own set of options if you need different\n * help text or labels.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Replaced_element\n *\n * @type {SelectControlProps[]}\n */\nconst DEFAULT_SCALE_OPTIONS = [\n\t{\n\t\tvalue: 'fill',\n\t\tlabel: _x( 'Fill', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Fill the space by stretching the content.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Fit the content to the space without clipping.' ),\n\t},\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( \"Fill the space by clipping what doesn't fit.\" ),\n\t},\n\t{\n\t\tvalue: 'none',\n\t\tlabel: _x( 'None', 'Scale option for dimensions control' ),\n\t\thelp: __(\n\t\t\t'Do not adjust the sizing of the content. Content that is too large will be clipped, and content that is too small will have additional padding.'\n\t\t),\n\t},\n\t{\n\t\tvalue: 'scale-down',\n\t\tlabel: _x( 'Scale down', 'Scale option for dimensions control' ),\n\t\thelp: __(\n\t\t\t'Scale down the content to fit the space if it is too big. Content that is too small will have additional padding.'\n\t\t),\n\t},\n];\n\n/**\n * @callback ScaleToolPropsOnChange\n * @param {string} nextValue New scale value.\n * @return {void}\n */\n\n/**\n * @typedef {Object} ScaleToolProps\n * @property {string} [panelId] ID of the panel that contains the controls.\n * @property {string} [value] Current scale value.\n * @property {ScaleToolPropsOnChange} [onChange] Callback to update the scale value.\n * @property {SelectControlProps[]} [options] Scale options.\n * @property {string} [defaultValue] Default scale value.\n * @property {boolean} [showControl=true] Whether to show the control.\n * @property {boolean} [isShownByDefault=true] Whether the tool panel is shown by default.\n */\n\n/**\n * A tool to select the CSS object-fit property for the image.\n *\n * @param {ScaleToolProps} props\n *\n * @return {import('react').ReactElement} The scale tool.\n */\nexport default function ScaleTool( {\n\tpanelId,\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_SCALE_OPTIONS,\n\tdefaultValue = DEFAULT_SCALE_OPTIONS[ 0 ].value,\n\tisShownByDefault = true,\n} ) {\n\t// Match the CSS default so if the value is used directly in CSS it will look correct in the control.\n\tconst displayValue = value ?? 'fill';\n\n\tconst scaleHelp = useMemo( () => {\n\t\treturn options.reduce( ( acc, option ) => {\n\t\t\tacc[ option.value ] = option.help;\n\t\t\treturn acc;\n\t\t}, {} );\n\t}, [ options ] );\n\n\treturn (\n\t\t displayValue !== defaultValue }\n\t\t\tonDeselect={ () => onChange( defaultValue ) }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t\n\t\t\t\t{ options.map( ( option ) => (\n\t\t\t\t\t\n\t\t\t\t) ) }\n\t\t\t\n\t\t\n\t);\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n\n if (match) {\n // The match may be something like 'Object.createEmotionProps'\n var parts = match[1].split('.');\n return parts[parts.length - 1];\n } // Safari / Firefox\n\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return match[1];\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = insertStyles(cache, serialized, typeof finalTag === 'string');\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/createElement(finalTag, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","/**\n * External dependencies\n */\nimport styled from '@emotion/styled';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nconst SingleColumnToolsPanelItem = styled( ToolsPanelItem )`\n\tgrid-column: span 1;\n`;\n\n/**\n * @typedef {import('@wordpress/components/build-types/unit-control/types').WPUnitControlUnit} WPUnitControlUnit\n */\n\n/**\n * @typedef {Object} WidthHeightToolValue\n * @property {string} [width] Width CSS value.\n * @property {string} [height] Height CSS value.\n */\n\n/**\n * @callback WidthHeightToolOnChange\n * @param {WidthHeightToolValue} nextValue Next dimensions value.\n * @return {void}\n */\n\n/**\n * @typedef {Object} WidthHeightToolProps\n * @property {string} [panelId] ID of the panel that contains the controls.\n * @property {WidthHeightToolValue} [value] Current dimensions values.\n * @property {WidthHeightToolOnChange} [onChange] Callback to update the dimensions values.\n * @property {WPUnitControlUnit[]} [units] Units options.\n * @property {boolean} [isShownByDefault] Whether the panel is shown by default.\n */\n\n/**\n * Component that renders controls to edit the dimensions of an image or container.\n *\n * @param {WidthHeightToolProps} props The component props.\n *\n * @return {import('react').ReactElement} The width and height tool.\n */\nexport default function WidthHeightTool( {\n\tpanelId,\n\tvalue = {},\n\tonChange = () => {},\n\tunits,\n\tisShownByDefault = true,\n} ) {\n\t// null, undefined, and 'auto' all represent the default value.\n\tconst width = value.width === 'auto' ? '' : value.width ?? '';\n\tconst height = value.height === 'auto' ? '' : value.height ?? '';\n\n\tconst onDimensionChange = ( dimension ) => ( nextDimension ) => {\n\t\tconst nextValue = { ...value };\n\t\t// Empty strings or undefined may be passed and both represent removing the value.\n\t\tif ( ! nextDimension ) {\n\t\t\tdelete nextValue[ dimension ];\n\t\t} else {\n\t\t\tnextValue[ dimension ] = nextDimension;\n\t\t}\n\t\tonChange( nextValue );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t width !== '' }\n\t\t\t\tonDeselect={ onDimensionChange( 'width' ) }\n\t\t\t\tpanelId={ panelId }\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t\t height !== '' }\n\t\t\t\tonDeselect={ onDimensionChange( 'height' ) }\n\t\t\t\tpanelId={ panelId }\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport AspectRatioTool from './aspect-ratio-tool';\nimport ScaleTool from './scale-tool';\nimport WidthHeightTool from './width-height-tool';\n\n/**\n * @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps\n */\n\n/**\n * @typedef {import('@wordpress/components/build-types/unit-control/types').WPUnitControlUnit} WPUnitControlUnit\n */\n\n/**\n * @typedef {Object} Dimensions\n * @property {string} [width] CSS width property.\n * @property {string} [height] CSS height property.\n * @property {string} [scale] CSS object-fit property.\n * @property {string} [aspectRatio] CSS aspect-ratio property.\n */\n\n/**\n * @callback DimensionsControlsOnChange\n * @param {Dimensions} nextValue\n * @return {void}\n */\n\n/**\n * @typedef {Object} DimensionsControlsProps\n * @property {string} [panelId] ID of the panel that contains the controls.\n * @property {Dimensions} [value] Current dimensions values.\n * @property {DimensionsControlsOnChange} [onChange] Callback to update the dimensions values.\n * @property {SelectControlProps[]} [aspectRatioOptions] Aspect ratio options.\n * @property {SelectControlProps[]} [scaleOptions] Scale options.\n * @property {WPUnitControlUnit[]} [unitsOptions] Units options.\n */\n\n/**\n * Component that renders controls to edit the dimensions of an image or container.\n *\n * @param {DimensionsControlsProps} props The component props.\n *\n * @return {Element} The dimensions controls.\n */\nfunction DimensionsTool( {\n\tpanelId,\n\tvalue = {},\n\tonChange = () => {},\n\taspectRatioOptions, // Default options handled by AspectRatioTool.\n\tdefaultAspectRatio = 'auto', // Match CSS default value for aspect-ratio.\n\tscaleOptions, // Default options handled by ScaleTool.\n\tdefaultScale = 'fill', // Match CSS default value for object-fit.\n\tunitsOptions, // Default options handled by UnitControl.\n\ttools = [ 'aspectRatio', 'widthHeight', 'scale' ],\n} ) {\n\t// Coerce undefined and CSS default values to be null.\n\tconst width =\n\t\tvalue.width === undefined || value.width === 'auto'\n\t\t\t? null\n\t\t\t: value.width;\n\tconst height =\n\t\tvalue.height === undefined || value.height === 'auto'\n\t\t\t? null\n\t\t\t: value.height;\n\tconst aspectRatio =\n\t\tvalue.aspectRatio === undefined || value.aspectRatio === 'auto'\n\t\t\t? null\n\t\t\t: value.aspectRatio;\n\tconst scale =\n\t\tvalue.scale === undefined || value.scale === 'fill'\n\t\t\t? null\n\t\t\t: value.scale;\n\n\t// Keep track of state internally, so when the value is cleared by means\n\t// other than directly editing that field, it's easier to restore the\n\t// previous value.\n\tconst [ lastScale, setLastScale ] = useState( scale );\n\tconst [ lastAspectRatio, setLastAspectRatio ] = useState( aspectRatio );\n\n\t// 'custom' is not a valid value for CSS aspect-ratio, but it is used in the\n\t// dropdown to indicate that setting both the width and height is the same\n\t// as a custom aspect ratio.\n\tconst aspectRatioValue = width && height ? 'custom' : lastAspectRatio;\n\n\tconst showScaleControl = aspectRatio || ( width && height );\n\n\treturn (\n\t\t<>\n\t\t\t{ tools.includes( 'aspectRatio' ) && (\n\t\t\t\t {\n\t\t\t\t\t\tconst nextValue = { ...value };\n\n\t\t\t\t\t\t// 'auto' is CSS default, so it gets treated as null.\n\t\t\t\t\t\tnextAspectRatio =\n\t\t\t\t\t\t\tnextAspectRatio === 'auto' ? null : nextAspectRatio;\n\n\t\t\t\t\t\tsetLastAspectRatio( nextAspectRatio );\n\n\t\t\t\t\t\t// Update aspectRatio.\n\t\t\t\t\t\tif ( ! nextAspectRatio ) {\n\t\t\t\t\t\t\tdelete nextValue.aspectRatio;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.aspectRatio = nextAspectRatio;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update scale.\n\t\t\t\t\t\tif ( ! nextAspectRatio ) {\n\t\t\t\t\t\t\tdelete nextValue.scale;\n\t\t\t\t\t\t} else if ( lastScale ) {\n\t\t\t\t\t\t\tnextValue.scale = lastScale;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.scale = defaultScale;\n\t\t\t\t\t\t\tsetLastScale( defaultScale );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update width and height.\n\t\t\t\t\t\tif ( 'custom' !== nextAspectRatio && width && height ) {\n\t\t\t\t\t\t\tdelete nextValue.height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( nextValue );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ tools.includes( 'widthHeight' ) && (\n\t\t\t\t {\n\t\t\t\t\t\tconst nextValue = { ...value };\n\n\t\t\t\t\t\t// 'auto' is CSS default, so it gets treated as null.\n\t\t\t\t\t\tnextWidth = nextWidth === 'auto' ? null : nextWidth;\n\t\t\t\t\t\tnextHeight = nextHeight === 'auto' ? null : nextHeight;\n\n\t\t\t\t\t\t// Update width.\n\t\t\t\t\t\tif ( ! nextWidth ) {\n\t\t\t\t\t\t\tdelete nextValue.width;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.width = nextWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update height.\n\t\t\t\t\t\tif ( ! nextHeight ) {\n\t\t\t\t\t\t\tdelete nextValue.height;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.height = nextHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update aspectRatio.\n\t\t\t\t\t\tif ( nextWidth && nextHeight ) {\n\t\t\t\t\t\t\tdelete nextValue.aspectRatio;\n\t\t\t\t\t\t} else if ( lastAspectRatio ) {\n\t\t\t\t\t\t\tnextValue.aspectRatio = lastAspectRatio;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No setting defaultAspectRatio here, because\n\t\t\t\t\t\t\t// aspectRatio is optional in this scenario,\n\t\t\t\t\t\t\t// unlike scale.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Auto-update scale.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! lastAspectRatio &&\n\t\t\t\t\t\t\t!! nextWidth !== !! nextHeight\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdelete nextValue.scale;\n\t\t\t\t\t\t} else if ( lastScale ) {\n\t\t\t\t\t\t\tnextValue.scale = lastScale;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.scale = defaultScale;\n\t\t\t\t\t\t\tsetLastScale( defaultScale );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( nextValue );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ tools.includes( 'scale' ) && showScaleControl && (\n\t\t\t\t {\n\t\t\t\t\t\tconst nextValue = { ...value };\n\n\t\t\t\t\t\t// 'fill' is CSS default, so it gets treated as null.\n\t\t\t\t\t\tnextScale = nextScale === 'fill' ? null : nextScale;\n\n\t\t\t\t\t\tsetLastScale( nextScale );\n\n\t\t\t\t\t\t// Update scale.\n\t\t\t\t\t\tif ( ! nextScale ) {\n\t\t\t\t\t\t\tdelete nextValue.scale;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextValue.scale = nextScale;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( nextValue );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\n\t);\n}\n\nexport default DimensionsTool;\n","/**\n * WordPress dependencies\n */\nimport {\n\tSelectControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n\nconst DEFAULT_SIZE_OPTIONS = [\n\t{\n\t\tlabel: _x( 'Thumbnail', 'Image size option for resolution control' ),\n\t\tvalue: 'thumbnail',\n\t},\n\t{\n\t\tlabel: _x( 'Medium', 'Image size option for resolution control' ),\n\t\tvalue: 'medium',\n\t},\n\t{\n\t\tlabel: _x( 'Large', 'Image size option for resolution control' ),\n\t\tvalue: 'large',\n\t},\n\t{\n\t\tlabel: _x( 'Full Size', 'Image size option for resolution control' ),\n\t\tvalue: 'full',\n\t},\n];\n\nexport default function ResolutionTool( {\n\tpanelId,\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_SIZE_OPTIONS,\n\tdefaultValue = DEFAULT_SIZE_OPTIONS[ 0 ].value,\n\tisShownByDefault = true,\n} ) {\n\tconst displayValue = value ?? defaultValue;\n\treturn (\n\t\t displayValue !== defaultValue }\n\t\t\tlabel={ __( 'Resolution' ) }\n\t\t\tonDeselect={ () => onChange( defaultValue ) }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport * as globalStyles from './components/global-styles';\nimport { ExperimentalBlockEditorProvider } from './components/provider';\nimport { lock } from './lock-unlock';\nimport { getRichTextValues } from './components/rich-text/get-rich-text-values';\nimport ResizableBoxPopover from './components/resizable-box-popover';\nimport { default as PrivateQuickInserter } from './components/inserter/quick-inserter';\nimport {\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n} from './components/inserter/search-items';\nimport { PrivateListView } from './components/list-view';\nimport BlockInfo from './components/block-info-slot-fill';\nimport { useHasBlockToolbar } from './components/block-toolbar/use-has-block-toolbar';\nimport { cleanEmptyObject } from './hooks/utils';\nimport BlockQuickNavigation from './components/block-quick-navigation';\nimport { LayoutStyle } from './components/block-list/layout';\nimport { BlockRemovalWarningModal } from './components/block-removal-warning-modal';\nimport {\n\tsetBackgroundStyleDefaults,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n} from './hooks';\nimport DimensionsTool from './components/dimensions-tool';\nimport ResolutionTool from './components/resolution-tool';\nimport TextAlignmentControl from './components/text-alignment-control';\nimport { usesContextKey } from './components/rich-text/format-edit';\nimport { ExperimentalBlockCanvas } from './components/block-canvas';\nimport { getDuotoneFilter } from './components/duotone/utils';\nimport { useFlashEditableBlocks } from './components/use-flash-editable-blocks';\nimport {\n\tselectBlockPatternsKey,\n\treusableBlocksSelectKey,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tsectionRootClientIdKey,\n} from './store/private-keys';\nimport { requiresWrapperOnCopy } from './components/writing-flow/utils';\nimport { PrivateRichText } from './components/rich-text/';\nimport { PrivateBlockPopover } from './components/block-popover';\nimport { PrivateInserterLibrary } from './components/inserter/library';\nimport { PrivatePublishDateTimePicker } from './components/publish-date-time-picker';\nimport useSpacingSizes from './components/spacing-sizes-control/hooks/use-spacing-sizes';\nimport useBlockDisplayTitle from './components/block-title/use-block-display-title';\nimport TabbedSidebar from './components/tabbed-sidebar';\nimport { useBlockBindingsUtils } from './utils/block-bindings';\n\n/**\n * Private @wordpress/block-editor APIs.\n */\nexport const privateApis = {};\nlock( privateApis, {\n\t...globalStyles,\n\tExperimentalBlockCanvas,\n\tExperimentalBlockEditorProvider,\n\tgetDuotoneFilter,\n\tgetRichTextValues,\n\tPrivateQuickInserter,\n\textractWords,\n\tgetNormalizedSearchTerms,\n\tnormalizeString,\n\tPrivateListView,\n\tResizableBoxPopover,\n\tBlockInfo,\n\tuseHasBlockToolbar,\n\tcleanEmptyObject,\n\tBlockQuickNavigation,\n\tLayoutStyle,\n\tBlockRemovalWarningModal,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tDimensionsTool,\n\tResolutionTool,\n\tTabbedSidebar,\n\tTextAlignmentControl,\n\tusesContextKey,\n\tuseFlashEditableBlocks,\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n\tselectBlockPatternsKey,\n\trequiresWrapperOnCopy,\n\tPrivateRichText,\n\tPrivateInserterLibrary,\n\treusableBlocksSelectKey,\n\tPrivateBlockPopover,\n\tPrivatePublishDateTimePicker,\n\tuseSpacingSizes,\n\tuseBlockDisplayTitle,\n\t__unstableBlockStyleVariationOverridesWithConfig,\n\tsetBackgroundStyleDefaults,\n\tuseBlockBindingsUtils,\n\tsectionRootClientIdKey,\n} );\n","/**\n * WordPress dependencies\n */\nimport { ResizableBox } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../block-popover/cover';\n\nexport default function ResizableBoxPopover( {\n\tclientId,\n\tresizableBoxProps,\n\t...props\n} ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","/**\n * WordPress dependencies\n */\nimport { useEffect } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tModal,\n\tButton,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function BlockRemovalWarningModal( { rules } ) {\n\tconst { clientIds, selectPrevious, message } = useSelect( ( select ) =>\n\t\tunlock( select( blockEditorStore ) ).getRemovalPromptData()\n\t);\n\n\tconst {\n\t\tclearBlockRemovalPrompt,\n\t\tsetBlockRemovalRules,\n\t\tprivateRemoveBlocks,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\t// Load block removal rules, simultaneously signalling that the block\n\t// removal prompt is in place.\n\tuseEffect( () => {\n\t\tsetBlockRemovalRules( rules );\n\t\treturn () => {\n\t\t\tsetBlockRemovalRules();\n\t\t};\n\t}, [ rules, setBlockRemovalRules ] );\n\n\tif ( ! message ) {\n\t\treturn;\n\t}\n\n\tconst onConfirmRemoval = () => {\n\t\tprivateRemoveBlocks( clientIds, selectPrevious, /* force */ true );\n\t\tclearBlockRemovalPrompt();\n\t};\n\n\treturn (\n\t\t\n\t\t\t

    { message }

    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n"],"names":["module","exports","keys","values","map","Map","has","key","indexOf","get","set","value","push","delete","index","splice","createEvent","name","Event","bubbles","e","evt","document","initEvent","assign","ta","nodeName","heightOffset","clientWidth","cachedHeight","pageResize","update","destroy","style","window","removeEventListener","Object","forEach","bind","height","resize","overflowY","overflowX","wordWrap","addEventListener","getComputedStyle","boxSizing","parseFloat","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","isNaN","changeOverflow","width","offsetWidth","scrollHeight","overflows","el","arr","parentNode","Element","scrollTop","node","getParentOverflows","docTop","documentElement","styleHeight","Math","round","computed","actualHeight","offsetHeight","dispatchEvent","err","methods","autosize","options","Array","prototype","call","length","x","default","prop","currentStyle","replace","word","letter","toUpperCase","Diff","buildValues","diff","components","newString","oldString","useLongestToken","componentPos","componentLen","newPos","oldPos","component","removed","join","slice","count","added","tmp","i","oldValue","lastComponent","equals","pop","callback","this","self","done","setTimeout","undefined","castInput","removeEmpty","tokenize","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","canAdd","canRemove","path","pushComponent","exec","ret","last","commonCount","left","right","comparator","ignoreCase","toLowerCase","array","split","chars","oldStr","newStr","characterDiff","equal","a","b","constructor","isArray","size","entries","Set","ArrayBuffer","isView","RegExp","source","flags","valueOf","toString","hasOwnProperty","computedStyle","lnHeightStr","lnHeight","_lnHeightStyle","lineHeight","_node","createElement","innerHTML","setAttribute","fontSizeStr","fontSize","padding","border","body","appendChild","removeChild","canUseDOM","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","attachEvent","canUseViewport","screen","isInWorker","_ie","_firefox","_opera","_webkit","_chrome","_ie_real_version","_osx","_windows","_linux","_android","_win64","_iphone","_ipad","_native","_mobile","_populated","_populate","uas","navigator","userAgent","agent","os","NaN","documentMode","trident","ver","UserAgent_DEPRECATED","ie","ieCompatibilityMode","ie64","firefox","opera","webkit","safari","chrome","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","useHasFeature","implementation","hasFeature","eventNameSuffix","capture","eventName","isSupported","element","isEventSupported","normalizeWheel","event","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","getEventType","String","create","isColorSupported","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","createColors","isFileInArray","file","some","ruleOrString","test","includes","prefix","prefixWithSpace","ignoreFiles","concat","includeFiles","root","input","walkRules","rule","parent","selectors","selector","exclude","excludeArr","excludeRule","excludeSelector","transform","Container","AtRule","defaults","super","type","append","children","proxyOf","nodes","prepend","registerAtRule","Node","Comment","parse","Rule","Root","isClean","my","Declaration","cleanSource","markDirtyUp","child","normalize","markDirty","cleanRaws","keepBetween","each","result","iterator","getIterator","indexes","every","condition","lastEach","getProxyProcessor","startsWith","args","toProxy","cb","other","insertAfter","exist","add","existIndex","reverse","id","insertBefore","sample","Error","text","rebuild","raws","before","first","unshift","removeAll","replaceValues","pattern","opts","walkDecls","decl","props","fast","walk","addToError","walkAtRules","walkComments","registerParse","dependant","registerRule","registerRoot","setPrototypeOf","pico","terminalHighlight","CssSyntaxError","message","line","column","plugin","reason","endLine","endColumn","setMessage","captureStackTrace","showSourceCode","color","css","mark","aside","lines","start","max","end","min","maxWidth","str","number","gutter","spacing","code","variable","LazyResult","Processor","Document","toResult","stringify","registerLazyResult","registerProcessor","PreviousMap","Input","fromJSON","json","inputs","n","ownInputs","inputHydrated","__proto__","inputId","SourceMapConsumer","SourceMapGenerator","fileURLToPath","pathToFileURL","isAbsolute","resolve","nanoid","fromOffsetCache","Symbol","sourceMapAvailable","Boolean","pathAvailable","hasBOM","from","consumer","mapResolve","error","offset","pos","fromOffset","col","origin","url","lastLine","lineToIndex","prevIndex","l","mid","sourceRoot","to","fromUrl","originalPositionFor","URL","mapFile","protocol","sourceContentFor","toJSON","consumerCache","registerInput","MapGenerator","Result","TYPE_TO_CLASS_NAME","atrule","comment","PLUGIN_PROPS","AtRuleExit","CommentExit","DeclarationExit","DocumentExit","Once","OnceExit","postcssPlugin","prepare","RootExit","RuleExit","NOT_VISITORS","CHILDREN","isPromise","obj","then","getEvents","toStack","events","eventIndex","visitorIndex","visitors","cleanMarks","postcss","processor","stringified","processed","inline","prev","parser","syntax","helpers","plugins","async","Promise","reject","processing","runAsync","onRejected","catch","onFinally","getAsyncError","handleError","lastPlugin","postcssVersion","console","prepareVisitors","listeners","version","filter","hasListener","promise","runOnRoot","stack","visitTick","visitor","roots","subRoot","all","sync","stringifier","data","generate","walkSync","visitSync","onFulfilled","visit","warnings","content","messages","toStringTag","registerPostcss","list","comma","string","space","separators","current","func","inQuote","prevQuote","escape","trim","dirname","relative","sep","cssString","mapOpts","originalCSS","usesFileUrls","absolute","memoizedFileURLs","memoizedPaths","memoizedURLs","addAnnotation","isInline","toBase64","annotation","outputFile","eol","applyPrevMaps","previous","toUrl","sourcesContent","applySourceMap","clearAnnotation","isMap","generateMap","generateString","fromSourceMap","ignoreInvalidMapping","addMapping","generated","original","isSourcesContent","setSourcesContent","isAnnotation","noSource","mapping","sourcePath","match","lastIndexOf","p","semicolon","withContent","charCodeAt","cached","previousMaps","already","toFileUrl","setSourceContent","Buffer","btoa","unescape","encodeURIComponent","fileURL","encodeURI","NoWorkResult","_processor","_css","_opts","_map","defineProperty","generatedCSS","generatedMap","_root","Stringifier","cloneNode","cloned","j","clone","postcssNode","s","after","overrides","between","cloneAfter","cloneBefore","rangeBy","next","positionBy","stringRepresentation","positionInside","endIndex","raw","defaultType","remove","replaceWith","bookmark","foundSelf","_","fixed","emitInputs","inputsNextIndex","proxyCache","Proxy","warn","Parser","tokenizer","SAFE_COMMENT_NEIGHBOR","empty","spaces","createTokenizer","token","shift","unnamedAtrule","init","open","params","brackets","endOfFile","nextToken","getPosition","spacesAndCommentsFromEnd","afterName","spacesAndCommentsFromStart","checkMissedSemicolon","tokens","colon","founded","doubleColon","customProperty","findLastWithPosition","unknownWord","firstSpaces","precheckMissedSemicolon","important","stringFrom","spacesFromEnd","cache","emptyRule","unexpectedClose","endFile","unclosedBlock","position","freeSemicolon","ownSemicolon","bracket","back","unclosedBracket","clean","reduce","lastTokenType","Warning","initializer","warningPrinted","creator","process","env","LANG","transformer","processOpts","pluginOpts","atRule","existsSync","readFileSync","loadAnnotation","startWith","loadMap","decodeInline","decodeURIComponent","substr","lastMatch","atob","encoding","getAnnotationURL","sourceMapString","mappings","_mappings","sections","comments","substring","loadFile","JSON","prevPath","normalized","use","warning","ignore","DEFAULT_RAW","beforeClose","beforeComment","beforeDecl","beforeOpen","beforeRule","commentLeft","commentRight","emptyBody","indent","builder","rawValue","block","beforeAfter","detect","buf","depth","step","own","rawCache","method","rawBeforeClose","rawBeforeComment","rawBeforeDecl","rawBeforeOpen","rawBeforeRule","rawColon","rawEmptyBody","rawIndent","parts","rawSemicolon","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","quote","escaped","escapePos","currentToken","ignoreErrors","buffer","returned","unclosed","what","ignoreUnclosed","controlChar","fromCharCode","lastIndex","charAt","printed","range","opt","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","object","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","extendStatics","__extends","d","__","__assign","t","arguments","__rest","getOwnPropertySymbols","__esModule","React","getLineHeight","RESIZED","TextareaAutosizeClass","_super","_this","apply","state","textarea","onResize","updateLineHeight","setState","onChange","currentValue","currentTarget","componentDidMount","_a","maxRows","componentWillUnmount","render","_b","innerRef","maxHeight","ref","componentDidUpdate","defaultProps","rows","propTypes","Component","TextareaAutosize","forwardRef","TextareaAutosize_1","characterMap","allAccents","firstAccent","matcher","removeAccents","CSSValueParser","config","skipHostRelativeUrls","parsedValue","valueChanged","urlVal","basedUrl","rootUrl","pathname","ValueParser","bubble","unit","openParentheses","closeParentheses","singleQuote","doubleQuote","backslash","slash","star","uLower","uUpper","plus","isUnicodeRange","whitespacePos","parenthesesOpenPos","balanced","sourceEndIndex","sourceIndex","stringifyNode","custom","customResult","minus","dot","exp","EXP","nextCode","nextNextCode","likeNumber","random","customAlphabet","alphabet","defaultSize","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","o","enumerable","r","mayDisplayControlsKey","mayDisplayParentControlsKey","blockEditingModeKey","blockBindingsKey","isPreviewModeKey","DEFAULT_BLOCK_EDIT_CONTEXT","isSelected","Context","createContext","Provider","useBlockEditContext","useContext","PREFERENCES_DEFAULTS","insertUsage","SETTINGS_DEFAULTS","alignWide","supportsLayout","colors","slug","fontSizes","_x","imageDefaultSize","imageSizes","imageEditing","allowedBlockTypes","maxUploadFileSize","allowedMimeTypes","canLockBlocks","enableOpenverseMediaCategory","clearBlockSelection","__experimentalCanUserUseUnfilteredHTML","__experimentalBlockDirectory","__mobileEnablePageTemplates","__experimentalBlockPatterns","__experimentalBlockPatternCategories","__unstableIsPreviewMode","blockInspectorAnimation","animationParent","enterDirection","generateAnchors","gradients","gradient","__unstableResolvedAssets","styles","scripts","insertAt","elements","moveTo","withoutMovedElements","identity","mapBlockOrder","blocks","rootClientId","clientId","innerBlocks","order","subClientId","mapBlockParents","currentBlocks","flattenBlocks","getFlattenedBlocksWithoutAttributes","attributes","restBlock","getFlattenedBlockAttributes","isUpdatingSameBlockAttribute","action","lastAction","fastDeepEqual","clientIds","hasSameKeys","updateBlockTreeForBlocks","treeToUpdate","tree","flattenedBlocks","byClientId","subBlock","updateParentInnerBlocksInTree","updatedClientIds","updateChildrenOfUpdatedClientIds","uncontrolledParents","controlledParents","parents","controlledInnerBlocks","pipe","combineReducers","reducer","updatedId","newState","inserterClientIds","getFlattenedClientIds","replacedClientIds","parentsOfRemovedBlocks","parentId","removedClientIds","updatedBlockUids","fromRootClientId","toRootClientId","getAllChildren","keepControlledInnerBlocks","nestedControllers","stateAfterBlocksRemoval","stateAfterInsert","stateAfterInsertOrder","_key","explicitPersistent","markNextChangeAsNotPersistent","nextIsPersistentChange","nextState","_state$isPersistentCh","isPersistentChange","isExplicitPersistentChange","_state$isPersistentCh2","IGNORED_ACTION_TYPES","isIgnoredChange","tempState","changes","updates","hasChange","_action$attributes","updatedAttributeEntries","uniqueByBlock","hasUpdatedAttributes","existingAttributes","newAttributes","_state$get","blockOrder","subState","mappedBlocks","_state$get$filter","fromIndex","firstClientId","firstIndex","lastClientId","newSubOrder","_order$filter","hasControlledInnerBlocks","selectionHelper","updateSelection","blockToSelect","indexToSelect","combinedReducers","isDragging","isTyping","isBlockInterfaceHidden","draggedBlocks","selection","selectionStart","attributeKey","startOffset","selectionEnd","endOffset","startClientId","endClientId","isMultiSelecting","isSelectionEnabled","initialPosition","blocksMode","blockListSettings","fromEntries","settings","merged","insertionPoint","__unstableWithInserter","operation","nearestSide","template","isValid","preferences","nextInsertUsage","prevUsage","blockName","select","blocksStore","getActiveBlockVariation","time","lastBlockAttributesChange","accumulator","lastFocus","editorMode","mode","hasBlockMovingClientId","expandedBlock","highlightedBlock","isHighlighted","lastBlockInserted","meta","temporarilyEditingAsBlocks","temporarilyEditingFocusModeRevert","focusModeToRevert","blockVisibility","blockEditingModes","styleOverrides","removalPromptData","selectPrevious","blockRemovalRules","rules","openedBlockSettingsMenu","_action$clientId","registeredInserterMediaCategories","category","hoveredBlockClientId","zoomLevel","zoom","automaticChangeStatus","_jsx","SVG","xmlns","viewBox","Path","globalStylesDataKey","globalStylesLinksDataKey","selectBlockPatternsKey","reusableBlocksSelectKey","sectionRootClientIdKey","lock","unlock","__dangerousOptInToUnstableAPIsOnlyForCoreModules","STORE_NAME","withRootClientIdOptionKey","parsedPatternCache","WeakMap","grammarMapCache","getParsedPattern","parsedPattern","__unstableSkipMigrationLogs","metadata","categories","patternName","title","parsePattern","getGrammar","grammarMap","grammarParse","checkAllowList","item","defaultResult","checkAllowListRecursive","blocksQueue","innerBlock","getAllPatternsDependants","__experimentalUserPatternCategories","__experimentalReusableBlocks","blockPatterns","getReusableBlocks","getInsertBlockTypeDependants","templateLock","field","items","cmpA","cmpB","orderA","findIndex","orderB","orderBy","sort","INSERTER_PATTERN_TYPES","user","theme","directory","INSERTER_SYNC_TYPES","full","unsynced","allPatternsCategory","label","myPatternsCategory","isPatternFiltered","sourceFilter","syncFilter","isUserPattern","isDirectoryPattern","syncStatus","setImmutably","leaf","lvl","getValueFromObjectPath","defaultValue","_value","arrayPath","fieldName","blockedPaths","deprecatedFlags","disableCustomColors","disableCustomGradients","disableCustomFontSizes","enableCustomLineHeight","enableCustomUnits","enableCustomSpacing","prefixedFlags","removeCustomPrefixes","getBlockSettings","paths","getBlockName","candidates","hasBlockSupport","applyFilters","normalizedPath","candidateClientId","_getValueFromObjectPa","candidateAtts","getBlockAttributes","getSettings","_ref","_result$custom","__experimentalFeatures","PATHS_WITH_OVERRIDE","deprecatedSettingsValue","getLastInsertedBlocksClientIds","getBlockWithoutAttributes","isBlockSubtreeDisabled","isChildSubtreeDisabled","childClientId","getBlockEditingMode","getBlockOrder","getEnabledClientIdsTree","createSelector","getEnabledClientIdsTreeUnmemoized","getEnabledBlockParents","ascending","getBlockParents","getRemovalPromptData","getBlockRemovalRules","getOpenedBlockSettingsMenu","getStyleOverrides","clientIdMap","getClientIdsWithDescendants","acc","overrideA","overrideB","_clientIdMap$clientId","_clientIdMap$clientId2","clientIdA","clientIdB","getRegisteredInserterMediaCategories","getInserterMediaCategories","inserterMediaCategories","coreInserterMediaCategoriesNames","mimeType","mediaType","hasAllowedPatterns","createRegistrySelector","getAllPatterns","patterns","inserter","grammar","canInsertBlockType","mapUserPattern","userPattern","wp_pattern_category","catId","find","wp_pattern_sync_status","getPatternBySlug","_state$settings$__exp","_state$settings$selec","_id","parseInt","_state$settings$__exp2","_state$settings$selec2","y","isResolvingPatterns","blockPatternsSelect","reusableBlocksSelect","EMPTY_ARRAY","getLastFocus","getExpandedBlock","getContentLockingParent","getTemplateLock","getTemporarilyEditingAsBlocks","getTemporarilyEditingFocusModeToRevert","getBlockStyles","isZoomOutMode","getSectionRootClientId","getZoomLevel","isZoomOut","EMPTY_SET","EMPTY_OBJECT","socialLinkName","Platform","OS","service","isBlockValid","getBlock","__unstableGetBlockWithoutInnerBlocks","getBlocks","treeKey","areInnerBlocksControlled","__unstableGetClientIdWithClientIdsTree","deprecated","since","__unstableGetClientIdsTree","getClientIdsOfDescendants","rootIds","ids","rootId","getGlobalBlockCount","getBlocksByName","blockNames","foundBlocks","__experimentalGetGlobalBlocksByName","alternative","getBlocksByClientId","getBlockNamesByClientId","getBlockCount","getSelectionStart","getSelectionEnd","getBlockSelectionStart","getBlockSelectionEnd","getSelectedBlockCount","getMultiSelectedBlockClientIds","hasSelectedBlock","getSelectedBlockClientId","getSelectedBlock","getBlockRootClientId","_state$blocks$parents","getBlockParentsByBlockName","hasName","getBlockHierarchyRootClientId","getLowestCommonAncestorWithSelectedBlock","selectedId","clientParents","selectedParents","lowestCommonAncestor","maxDepth","getAdjacentBlockClientId","modifier","getFirstMultiSelectedBlockClientId","getLastMultiSelectedBlockClientId","orderSet","nextIndex","getPreviousBlockClientId","getNextBlockClientId","getSelectedBlocksInitialCaretPosition","getSelectedBlockClientIds","startIndex","getMultiSelectedBlocks","multiSelectedBlockClientIds","getDependants","selectedClientIds","isFirstMultiSelectedBlock","isBlockMultiSelected","isAncestorMultiSelected","ancestorClientId","isMultiSelected","getMultiSelectedBlocksStartClientId","getMultiSelectedBlocksEndClientId","__unstableIsFullySelected","selectionAnchor","selectionFocus","__unstableIsSelectionCollapsed","__unstableSelectionHasUnmergeableBlock","getBlockType","merge","__unstableIsSelectionMergeable","isForward","anchorRootClientId","targetBlockClientId","blockToMergeClientId","targetBlockName","blockToMerge","blocksToMerge","switchToBlockType","__unstableGetSelectedBlocksWithPartialSelection","anchorIndex","focusIndex","blockA","blockB","htmlA","htmlB","valueA","html","valueB","toHTMLString","getBlockIndex","isBlockSelected","hasSelectedInnerBlock","deep","selectedBlockClientIds","hasDraggedInnerBlock","innerClientId","isBlockBeingDragged","isBlockWithinSelection","hasMultiSelection","getBlockMode","isDraggingBlocks","getDraggedBlockClientIds","isAncestorBeingDragged","parentClientId","isCaretWithinFormattedText","getBlockInsertionPoint","isBlockInsertionPointVisible","isValidTemplate","getTemplate","_getBlockListSettings","_state$settings$templ","getBlockListSettings","canInsertBlockTypeUnmemoized","blockType","parentBlockListSettings","parentName","parentBlockType","parentAllowedChildBlocks","allowedBlocks","hasParentAllowedBlock","parentAllowedBlocks","hasParentListAllowedBlock","blockAllowedParentBlocks","hasBlockAllowedParent","hasBlockAllowedAncestor","blockAllowedAncestorBlocks","ancestor","canInsert","canInsertBlocks","canRemoveBlock","canRemoveBlocks","canMoveBlock","move","canMoveBlocks","canEditBlock","edit","canLockBlockType","nameOrType","getInsertUsage","_state$preferences$in","canIncludeBlockTypeInInserter","calculateFrecency","duration","Date","now","buildBlockTypeItem","buildScope","isDisabled","blockItemBase","icon","frecency","inserterVariations","getBlockVariations","initialAttributes","description","keywords","variations","example","utility","getInserterItems","syncedPatternInserterItems","reusableBlock","src","foreground","buildBlockTypeInserterItem","blockTypeInserterItems","getBlockTypes","sectionRootClientId","isDefault","variationMapper","getItemFromVariation","variation","variationId","core","coreItems","noncore","nonCoreItems","groupByType","getBlockTransformItems","normalizedBlocks","buildBlockTypeTransformItem","blockTypeTransformItems","itemsByName","possibleTransforms","getPossibleBlockTransformations","hasInserterItems","getAllowedBlocks","blockTypes","__experimentalGetAllowedBlocks","getDirectInsertBlock","_state$blockListSetti","defaultBlock","directInsert","__experimentalGetDirectInsertBlock","__experimentalGetParsedPattern","getAllowedPatternsDependants","__experimentalGetAllowedPatterns","parsedPatterns","getPatternsByBlockTypes","normalizedBlockNames","filteredPatterns","__experimentalGetPatternsByBlockTypes","__experimentalGetPatternTransformItems","selectedBlockNames","isLastBlockChangePersistent","__experimentalGetBlockListSettingsForBlocks","blockListSettingsForBlocks","__experimentalGetReusableBlockTitle","__unstableIsLastBlockChangeIgnored","__experimentalGetLastBlockAttributeChanges","isNavigationMode","__unstableGetEditorMode","didAutomaticChange","isBlockHighlighted","__experimentalGetActiveBlockIdByBlockNames","validBlockNames","selectedBlockClientId","entityAreaParents","wasBlockJustInserted","isBlockVisible","_state$blockVisibilit","getHoveredBlockClientId","__unstableGetVisibleBlocks","visibleBlocks","__unstableHasActiveBlockOverlayActive","sectionClientIds","blockSupportDisable","__unstableIsWithinBlockOverlay","sectionsClientIds","blockEditingMode","__experimentalHasContentRoleAttribute","parentMode","isUngroupable","_clientId","getGroupingBlockName","groupingBlockName","transforms","ungroup","isGroupable","_clientIds","__unstableGetContentLockingParent","__unstableGetTemporarilyEditingAsBlocks","__unstableGetTemporarilyEditingFocusModeToRevert","privateSettings","__experimentalUpdateSettings","stripExperimentalSettings","cleanSettings","hideBlockInterface","showBlockInterface","privateRemoveBlocks","forceRemove","dispatch","registry","maybeArray","displayBlockRemovalPrompt","selectPreviousBlock","batch","ensureDefaultBlock","__unstableHasCustomAppender","insertDefaultBlock","clearBlockRemovalPrompt","setBlockRemovalRules","setOpenedBlockSettingsMenu","setStyleOverride","deleteStyleOverride","setLastFocus","stopEditingAsBlocks","blockEditorStore","__unstableMarkNextChangeAsNotPersistent","updateBlockAttributes","updateBlockListSettings","updateSettings","focusMode","__unstableSetTemporarilyEditingAsBlocks","startDragging","stopDragging","expandBlock","modifyContentLockBlock","selectBlock","setZoomLevel","resetZoomLevel","START_OF_SELECTED_AREA","retrieveSelectedAttribute","blockAttributes","RichTextData","findRichTextAttributeKey","castArray","resetBlocks","validateBlocksToTemplate","isBlocksValidToTemplate","doBlocksMatchTemplate","setTemplateValidity","resetSelection","receiveBlocks","updateBlock","hoverBlock","fallbackToParent","previousBlockClientId","firstParentClientId","selectNextBlock","nextBlockClientId","startMultiSelect","stopMultiSelect","multiSelect","__experimentalInitialPosition","blockCount","speak","sprintf","_n","clearSelectedBlock","toggleSelection","replaceBlocks","replaceBlock","createOnMove","moveBlocksDown","moveBlocksUp","moveBlocksToPosition","moveBlockToPosition","insertBlock","insertBlocks","hint","showInsertionPoint","__unstableOptions","hideInsertionPoint","synchronizeTemplate","updatedBlockList","synchronizeBlocksWithTemplate","__unstableDeleteSelection","targetSelection","targetBlock","targetBlockType","selectionA","selectionB","insert","cloneA","cloneBlock","cloneB","followingBlock","blocksWithTheSameType","updatedAttributes","newAttributeKey","convertedHtml","convertedValue","newOffset","newValue","newHtml","replacement","selectionChange","__unstableSplitSelection","focusRootClientId","blockAType","blockBType","attributeKeyA","attributeKeyB","bindings","createWarningNotice","noticesStore","insertAfterBlock","isUnmodifiedDefaultBlock","createEmpty","defaultBlockName","getDefaultBlockName","createBlock","head","tail","switched","output","clonedBlocks","firstBlock","headType","firstBlocks","isUnmodifiedBlock","lastBlock","tailType","lastBlocks","__unstableExpandSelection","mergeBlocks","firstBlockClientId","secondBlockClientId","getBlockSupport","blockWithSameType","removeBlock","rootAttributes","previousRootAttributes","attributeDefinition","canRestoreTextSelection","selectedBlock","removeBlocks","replaceInnerBlocks","toggleBlockMode","startTyping","stopTyping","startDraggingBlocks","stopDraggingBlocks","enterFormattedText","exitFormattedText","__unstableSaveReusableBlock","__unstableMarkLastChangeAsPersistent","__unstableMarkAutomaticChange","requestIdleCallback","setNavigationMode","__unstableSetEditorMode","firstSelectedClientId","sectionClientId","setBlockMovingClientId","duplicateBlocks","clientIdsArray","lastSelectedIndex","__experimentalCloneSanitizedBlock","insertBeforeBlock","blockIndex","directInsertBlock","copiedAttributes","attributesToCopy","toggleBlockHighlight","flashBlock","setHasControlledInnerBlocks","setBlockVisibility","registerInserterMediaCategory","labels","fetch","isExternalResource","setBlockEditingMode","unsetBlockEditingMode","storeConfig","actions","store","createReduxStore","persist","registeredStore","registerStore","useSettings","useSelect","useSetting","note","registerPrivateActions","privateActions","registerPrivateSelectors","privateSelectors","DEFAULT_MAXIMUM_VIEWPORT_WIDTH","DEFAULT_MINIMUM_VIEWPORT_WIDTH","DEFAULT_SCALE_FACTOR","DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MIN","DEFAULT_MINIMUM_FONT_SIZE_FACTOR_MAX","DEFAULT_MINIMUM_FONT_SIZE_LIMIT","getComputedFluidTypographyValue","minimumFontSize","maximumFontSize","minimumViewportWidth","maximumViewportWidth","scaleFactor","minimumFontSizeLimit","getTypographyValueAndUnit","fontSizeParsed","minimumFontSizeLimitParsed","coerceTo","fontSizeValueInPx","minimumFontSizeFactor","log2","calculatedMinimumFontSize","roundToPrecision","minimumFontSizeParsed","fontSizeUnit","maximumFontSizeParsed","minimumFontSizeRem","maximumViewportWidthParsed","minimumViewportWidthParsed","linearDenominator","minViewportWidthOffsetValue","viewportWidthOffset","linearFactorScaled","isFinite","rootSizeValue","acceptableUnits","acceptableUnitsGroup","regexUnits","matches","returnValue","digits","base","pow","Number","formatFontWeight","fontWeight","FONT_STYLES","FONT_WEIGHTS","getFontStylesAndWeights","fontFamilyFaces","fontStyles","fontWeights","combinedStyleAndWeightOptions","isSystemFont","isVariableFont","face","startValue","endValue","fontWeightValue","weight","fontStyle","formatFontStyle","styleName","styleValue","weightName","weightValue","optionName","getTypographyFontSizeValue","preset","fluid","isFluidTypographyEnabled","typography","fluidTypographySettings","typographySettings","layoutSettings","layout","defaultMaxViewportWidth","wideSize","maxViewportWidth","getFluidTypographyOptionsFromSettings","minFontSize","minViewportWidth","fluidSettings","findNearestFontWeight","availableFontWeights","newFontWeightValue","nearestFontWeight","nearest","fw","abs","ROOT_BLOCK_SELECTOR","ROOT_CSS_PROPERTIES_SELECTOR","PRESET_METADATA","valueKey","cssVarInfix","classes","classSuffix","propertyName","valueFunc","STYLE_PATH_TO_CSS_VAR_INFIX","shadow","useToolsPanelDropdownMenuProps","useViewportMatch","popoverProps","placement","findInPresetsBy","features","presetPath","presetProperty","presetValueValue","orderedPresetsByOrigin","presetByOrigin","origins","presets","presetObject","getValueFromVariable","parsedVar","USER_VALUE_PREFIX","endsWith","THEME_VALUE_PREFIX","THEME_VALUE_SUFFIX","presetType","getValueFromPresetVariable","getValueFromCustomVariable","scopeSelector","scope","scopes","selectorsScoped","outer","inner","areGlobalStyleConfigsEqual","getResolvedValue","ruleValue","resolvedValue","resolvedRuleValue","getCSSValueFromRawStyle","getResolvedRefValue","themeFileURIs","uri","themeFileUri","href","getResolvedThemeFilePath","_links","GlobalStylesContext","setUserConfig","EMPTY_CONFIG","VALID_SETTINGS","useGlobalStylesReset","useCallback","useGlobalSetting","propertyPath","configs","appendedBlockPath","appendedPropertyPath","contextualPath","globalPath","sourceKey","useMemo","configToUse","setting","_getValueFromObjectPa2","currentConfig","useGlobalStyle","shouldDecodeEncode","mergedConfig","baseConfig","userConfig","appendedPath","finalPath","rawResult","variableStylePath","presetPropertyValue","getPresetVariableFromValue","useSettingsForBlockElement","parentSettings","supportedStyles","supports","getSupportedStyles","updatedSettings","customFontSize","defaultFontSizes","fontFamilies","background","button","heading","link","caption","customGradient","defaultDuotone","customDuotone","textColumns","sides","dimensions","textAlign","useColorsPerOrigin","customColors","palette","themeColors","defaultColors","shouldDisplayDefaultColors","defaultPalette","useGradientsPerOrigin","customGradients","themeGradients","defaultGradients","shouldDisplayDefaultGradients","f","cleanEmptyObject","cleanedNestedObjects","transformStyles","activeSupports","migrationPaths","results","isActive","referenceBlockAttributes","returnBlock","support","shouldSkipSerialization","blockNameOrType","featureSet","feature","skipSerialization","__experimentalSkipSerialization","pendingStyleOverrides","useStyleOverride","usePrivateStyleOverride","assets","__unstableType","useDispatch","useRegistry","fallbackId","useId","useEffect","override","queueMicrotask","isPending","currentId","useBlockSettings","parentLayout","backgroundImage","backgroundSize","customFontFamilies","defaultFontFamilies","themeFontFamilies","defaultFontSizesEnabled","customFontSizes","themeFontSizes","textDecoration","writingMode","textTransform","letterSpacing","margin","blockGap","defaultSpacingSizesEnabled","customSpacingSize","userSpacingSizes","defaultSpacingSizes","themeSpacingSizes","units","aspectRatio","minHeight","borderColor","borderRadius","borderStyle","borderWidth","customColorsEnabled","userDuotonePalette","themeDuotonePalette","defaultDuotonePalette","userGradientPalette","themeGradientPalette","defaultGradientPalette","areCustomGradientsEnabled","isBackgroundEnabled","isLinkEnabled","isTextEnabled","isHeadingEnabled","isButtonEnabled","duotone","spacingSizes","radius","BlockPropsPure","memo","useBlockProps","setAllWrapperProps","wrapperProps","setWrapperProps","nextAll","addFilter","apiVersion","createSlotFill","BlockControlsFill","group","controls","__experimentalShareWithChildBlocks","Fill","shareWithChildBlocks","context","groups","useBlockControlsFill","innerMarkup","_jsxs","_Fragment","ToolbarGroup","StyleProvider","fillProps","forwardedContext","ComponentsContext","privateApis","BlockControlsSlot","toolbarState","ToolbarContext","contextState","Slot","fills","useSlotFills","__unstableName","slot","bubblesVirtually","BlockControls","BlockFormatControls","LAYOUT_DEFINITIONS","className","baseStyles","float","spacingStyles","constrained","flex","displayMode","gap","grid","appendSelectors","subselector","getBlockGapCSS","layoutDefinitions","layoutType","blockGapValue","gapStyle","cssProperty","getAlignmentsInfo","contentSize","alignmentInfo","sizeRegex","none","wide","opacity","sidesLeft","RANGE_CONTROL_MAX_SIZE","ALL_SIDES","DEFAULT_VALUES","top","bottom","ICONS","sidesAll","axial","horizontal","sidesHorizontal","vertical","sidesVertical","sidesTop","sidesRight","sidesBottom","LABELS","mixed","VIEWS","isValueSpacingPreset","getCustomValueFromPreset","getSpacingPresetSlug","spacingSize","getPresetValueFromCustomValue","spacingMatch","getSpacingPresetCssVar","hasAxisSupport","hasHorizontalSupport","hasVerticalSupport","getGapCSSValue","blockGapBoxControlValue","isValueString","getGapBoxControlValueFromStyle","row","alignBottom","alignCenter","alignTop","alignStretch","spaceBetween","BLOCK_ALIGNMENTS_CONTROLS","center","stretch","DEFAULT_CONTROLS","isCollapsed","isToolbar","applyOrUnset","align","activeAlignment","defaultAlignmentControl","UIComponent","ToolbarDropdownMenu","extraProps","control","role","onClick","BlockVerticalAlignmentControl","BlockVerticalAlignmentUI","BlockVerticalAlignmentToolbar","icons","justifyLeft","justifyCenter","justifyRight","justifySpaceBetween","justifyStretch","allowedControls","handleClick","allControls","elem","JustifyContentControl","JustifyContentUI","JustifyToolbar","justifyContentMap","alignItemsMap","verticalAlignmentMap","flexWrapOptions","inspectorControls","layoutBlockSupport","allowOrientation","Flex","FlexItem","FlexLayoutJustifyContentControl","OrientationControl","FlexWrapControl","toolBarControls","allowSwitching","allowVerticalAlignment","FlexLayoutVerticalAlignmentControl","getLayoutStyle","hasBlockGapSupport","orientation","justifyContent","flexWrap","verticalAlignment","alignItems","getOrientation","getAlignments","defaultVerticalAlignment","onVerticalAlignmentChange","verticalAlignmentOptions","Button","__next40pxDefaultSize","isPressed","POPOVER_PROPS","onJustificationChange","justificationOptions","ToggleGroupControl","__nextHasNoMarginBottom","ToggleGroupControlOptionIcon","ToggleControl","checked","newVerticalAlignment","newJustification","arrowRight","arrowDown","blockGapStyleValue","isBlockBasedTheme","alignments","alignment","info","cloneElement","allowJustification","allowCustomContentAndWideSize","availableUnits","useCustomUnits","VStack","UnitControl","labelPosition","nextWidth","InputControlPrefixWrapper","variant","Icon","alignNone","stretchWide","DefaultLayoutJustifyContentControl","marginLeft","marginRight","getCSSRules","paddingRightValue","paddingLeftValue","RANGE_CONTROL_MAX_VALUES","px","vw","vh","em","rem","svw","lvw","dvw","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","allowSizingOnChildren","showColumnsControl","__experimentalEnableGridInteractivity","columnCount","showMinWidthControl","GridLayoutTypeControl","GridLayoutColumnsAndRowsControl","GridLayoutMinimumWidthControl","minimumColumnWidth","rowCount","maxValue","isManualPlacement","quantity","parseQuantityAndUnitFromRawValue","BaseControl","VisualLabel","as","isBlock","onUnitChange","newUnit","toFixed","hideLabelFromVision","RangeControl","withInputField","defaultColumnCount","NumberControl","newColumnCount","newRowCount","tempColumnCount","setTempColumnCount","useState","tempRowCount","setTempRowCount","tempMinimumColumnWidth","setTempMinimumColumnWidth","gridPlacement","helpText","help","ToggleGroupControlOption","layoutTypes","flow","getLayoutType","defaultLayout","Layout","LayoutProvider","useLayout","WIDE_CONTROLS","useAvailableAlignments","isNoneOnly","wideControlsEnabled","themeSupportsLayout","_settings$alignWide","__unstableIsBlockBasedTheme","positionLeft","positionCenter","positionRight","stretchFullWidth","enabledControls","onChangeAlignment","activeAlignmentControl","commonProps","controlName","toggleProps","onClose","MenuGroup","MenuItem","iconPosition","clsx","BlockAlignmentControl","BlockAlignmentUI","BlockAlignmentToolbar","useBlockEditingMode","globalBlockEditingMode","ALL_ALIGNMENTS","WIDE_ALIGNMENTS","getValidAlignments","blockAlign","hasWideBlockSupport","hasWideEnabled","validAlignments","setAttributes","nextAlign","blockDefaultAlign","addSaveProps","attributeKeys","hasSupport","_settings$attributes$","enum","InspectorControlsDefault","InspectorControlsAdvanced","InspectorControlsBindings","InspectorControlsBackground","InspectorControlsBorder","InspectorControlsColor","InspectorControlsFilter","InspectorControlsDimensions","InspectorControlsPosition","InspectorControlsTypography","InspectorControlsListView","InspectorControlsStyles","advanced","effects","InspectorControlsFill","__experimentalGroup","resetAllFilter","ToolsPanelInspectorControl","RegisterResetAll","registerResetAllFilter","deregisterResetAllFilter","ToolsPanelContext","BlockSupportToolsPanel","dropdownMenuProps","panelId","resetAll","resetFilters","newBlockAttributes","resetFilter","ToolsPanel","hasInnerWrapper","shouldRenderPlaceholderItems","__experimentalFirstVisibleItemClass","__experimentalLastVisibleItemClass","BlockSupportSlotContainer","toolsPanelContext","computedFillProps","_fillProps$forwardedC","InspectorControlsSlot","motionContextValue","MotionContext","InspectorControls","InspectorAdvancedControls","slotName","fillRule","clipRule","withFilters","MediaUpload","fallback","hasUploadPermissions","mediaUpload","LinkSettingsDrawer","settingsOpen","setSettingsOpen","prefersReducedMotion","useReducedMotion","MaybeAnimatePresence","Fragment","AnimatePresence","MaybeMotionDiv","motion","div","settingsDrawerId","useInstanceId","isRTL","chevronLeftSmall","chevronRightSmall","initial","animate","exit","variants","collapsed","transition","isFunction","maybeFunc","URLInput","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","createRef","inputRef","updateSuggestions","debounce","suggestionNodes","suggestionsRequest","suggestions","showSuggestions","suggestionsValue","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","prevProps","__experimentalShowInitialSuggestions","scrollIntoView","behavior","disableSuggestions","shouldShowInitialSuggestions","cancel","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","isURL","loading","request","debouncedSpeak","finally","keyCode","UP","target","preventDefault","setSelectionRange","DOWN","ENTER","onSubmit","suggestion","previousIndex","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","renderControl","renderSuggestions","isFullWidth","placeholder","__experimentalRenderControl","controlProps","inputProps","required","suffix","InputControl","Spinner","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","currentInputValue","Popover","focusOnMount","_createElement","compose","withSafeTimeout","withSpokenMessages","withInstanceId","withSelect","LinkControlSearchCreate","searchTerm","itemProps","buttonText","createInterpolateElement","ICONS_MAP","post","postList","page","post_tag","tag","attachment","SearchItemIcon","globe","isFrontPage","home","isBlogHome","verse","addLeadingSlash","trimmedURL","removeTrailingSlash","getVisualTypeName","LinkControlSearchItem","shouldShowType","safeDecodeURI","getPath","v","partialRight","fn","partialArgs","filterURLForDisplay","shortcut","TextHighlight","stripHTML","highlight","CREATE_TYPE","URL_TYPE","MAILTO_TYPE","INTERNAL_TYPE","LINK_ENTRY_TYPES","DEFAULT_LINK_SETTINGS","LinkControlSearchResults","withCreateSuggestion","createSuggestionButtonText","suggestionsQuery","resultsListClasses","isSingleDirectEntryResult","shouldShowCreateSuggestion","shouldShowSuggestionsTypes","searchResultsLabelId","labelText","searchResultsLabel","VisuallyHidden","isURLLike","val","getProtocol","protocolIsValid","isValidProtocol","mayBeTLD","maxLength","cleanedURL","hasPossibleTLD","isWWW","isInternal","isValidFragment","handleNoop","handleDirectEntry","prependHTTP","noopSearchHandler","noop","LinkControlSearchInput","currentLink","onCreateSuggestion","onSelect","fetchSuggestions","allowDirectEntry","showInitialSuggestions","withURLSuggestion","genericSearchHandler","fetchSearchSuggestions","pageOnFront","pageForPosts","directEntryHandler","handleEntitySearch","useSearchHandler","searchHandler","focusedSuggestion","setFocusedSuggestion","onSuggestionSelected","restLinkProps","onInputChange","hasSuggestion","ViewerSlot","ViewerFill","isFetching","richData","useReducer","fetchRichUrlData","__experimentalFetchRichUrlData","AbortController","controller","signal","urlData","aborted","abort","LinkPreview","onEditClick","hasRichPreviews","hasUnlinkControl","onRemove","showIconLabels","preferencesStore","showRichPreviews","useRichUrlData","hasRichData","displayURL","isEmptyURL","displayTitle","isUrlRedundant","alt","createNotice","useCopyToClipboard","isDismissible","ExternalLink","Truncate","numberOfLines","linkOff","copySmall","accessibleWhenDisabled","disabled","LinkControlSettings","handleSettingChange","theSettings","CheckboxControl","PREFERENCE_SCOPE","PREFERENCE_KEY","LinkControl","searchInputPlaceholder","onCancel","noDirectEntry","forceIsEditingLink","createSuggestion","inputValue","propInputValue","noURLSuggestion","hasTextControl","renderControlBottom","advancedSettingsPreference","_prefsStore$get","setPreference","isSettingsOpen","isMountingRef","useRef","wrapperNode","textInputRef","isEndingEditWithFocusRef","settingsKeys","internalControlValue","setInternalControlValue","setInternalURLInputValue","setInternalTextInputValue","createSetInternalSettingValueHandler","internalValue","setInternalValue","previousValue","setPreviousValue","nextValue","settingsUpdates","useInternalValue","valueHasChanges","isShallowEqualObjects","isEditingLink","setIsEditingLink","createPage","isCreatingPage","errorMessage","handleCreatePage","cancelableCreateSuggestion","setIsCreatingPage","setErrorMessage","suggestionTitle","hasCanceled_","isCanceled","makeCancelable","useCreatePage","focusable","hasLinkValue","stopEditing","contains","ownerDocument","activeElement","handleSubmit","currentUrlInputValue","currentInputIsEmpty","shownUnlinkControl","showActions","showTextControl","isEditing","showSettings","TextControl","updatedValue","nonSettingsChanges","InputControlSuffixWrapper","keyboardReturn","Notice","status","LinkControlSettingsDrawer","prefVal","LinkSettings","HStack","justify","stopPropagation","uniqueId","withDispatch","removeNotice","MediaReplaceFlow","mediaURL","mediaId","mediaIds","allowedTypes","accept","onError","onSelectURL","onReset","onToggleFeaturedImage","useFeaturedImage","onFilesUpload","multiple","addToGallery","handleUpload","canUpload","editMediaButtonRef","errorNoticeID","onUploadError","safeMessage","selectMedia","media","closeMenu","openOnArrowDown","click","gallery","allowedType","Dropdown","contentClassName","renderToggle","isOpen","onToggle","ToolbarButton","renderContent","NavigableMenu","MediaUploadCheck","mediaIcon","FormFileUpload","uploadFiles","files","filesList","onFileChange","openFileDialog","upload","postFeaturedImage","IMAGE_BACKGROUND_TYPE","BACKGROUND_POPOVER_PROPS","coordsToBackgroundPosition","backgroundPositionToCoords","InspectorImagePreviewItem","imgUrl","filename","onToggleCallback","ItemGroup","flexGrow","BackgroundControlsPanel","hasImageValue","imgLabel","getFilename","DropdownContentWrapper","paddingSize","LoadingSpinner","Placeholder","BackgroundImageControls","inheritedValue","onRemoveImage","onResetImage","displayInPanel","defaultValues","isUploading","setIsUploading","replaceContainerRef","createErrorNotice","onSelectMedia","isBlobURL","media_type","sizeValue","positionValue","backgroundPosition","hasBackgroundImageValue","closeAndFocus","toggleButton","tabbable","DropZone","onFilesDrop","image","BackgroundSizeControls","repeatValue","backgroundRepeat","imageValue","isUploadedImage","attachmentValue","backgroundAttachment","currentValueForToggle","repeatCheckedValue","updateBackgroundSize","nextRepeat","nextPosition","backgroundPositionValue","FocalPointPicker","toggleScrollWithPage","__unstableInputWidth","toggleIsRepeated","BackgroundImagePanel","globalStyles","_settings","resolvedInheritedValue","resolvedValues","backgroundValue","resetBackground","shouldShowBackgroundImageControls","isDropDownOpen","setIsDropDownOpen","useHasBackgroundPanel","BackgroundToolsPanel","headerLabel","Wrapper","defaultControls","showBackgroundImageControl","ToolsPanelItem","onDeselect","isShownByDefault","BackgroundImageControl","BACKGROUND_SUPPORT_KEY","BACKGROUND_BLOCK_DEFAULT_VALUES","hasBackgroundSupport","setBackgroundStyleDefaults","backgroundStyle","backgroundStylesWithDefaults","getBackgroundImageClasses","BackgroundInspectorControl","StylesBackgroundPanel","newStyle","backgroundStyles","ANCHOR_REGEX","ANCHOR_SCHEMA","attribute","anchor","isWeb","autoCapitalize","autoComplete","ARIA_LABEL_SCHEMA","ariaLabel","originClassName","getBlockDefaultClassName","grad","turn","rad","PI","u","g","h","floor","c","m","N","M","H","$","parsed","rgba","brightness","isDark","isLight","toHex","toRgb","toRgbString","toHsl","toHslString","toHsv","invert","w","saturate","desaturate","grayscale","lighten","darken","rotate","hue","alpha","isEqual","S","k","bisque","cadetblue","chartreuse","chocolate","coral","antiquewhite","aqua","azure","whitesmoke","papayawhip","plum","blanchedalmond","gold","goldenrod","gainsboro","cornsilk","cornflowerblue","burlywood","aquamarine","beige","crimson","darkblue","darkcyan","darkgoldenrod","darkkhaki","darkgray","darkgreen","darkgrey","peachpuff","darkmagenta","darkred","darkorchid","darkorange","darkslateblue","darkslategray","darkslategrey","deeppink","deepskyblue","wheat","firebrick","floralwhite","ghostwhite","darkviolet","dodgerblue","grey","honeydew","hotpink","blueviolet","forestgreen","lawngreen","indianred","indigo","fuchsia","brown","maroon","mediumblue","lightcoral","darkturquoise","lightcyan","ivory","lightyellow","lightsalmon","lightseagreen","linen","mediumaquamarine","lemonchiffon","lime","khaki","mediumseagreen","limegreen","mediumspringgreen","lightskyblue","lightblue","midnightblue","lightpink","mistyrose","moccasin","mintcream","lightslategray","lightslategrey","navajowhite","navy","mediumvioletred","powderblue","palegoldenrod","oldlace","paleturquoise","mediumturquoise","mediumorchid","rebeccapurple","lightsteelblue","mediumslateblue","thistle","tan","orchid","mediumpurple","purple","pink","skyblue","springgreen","palegreen","slateblue","lavenderblush","peru","palevioletred","violet","teal","slategray","slategrey","aliceblue","darkseagreen","darkolivegreen","greenyellow","seagreen","seashell","tomato","silver","sienna","lavender","lightgreen","orange","orangered","steelblue","royalblue","turquoise","yellowgreen","salmon","saddlebrown","sandybrown","rosybrown","darksalmon","lightgoldenrodyellow","snow","lightgrey","lightgray","dimgray","dimgrey","olivedrab","olive","toName","closest","luminance","contrast","isReadable","level","extend","namesPlugin","a11yPlugin","kebabCase","componentsPrivateApis","getColorObjectByAttributeValues","definedColor","customColor","colorObj","getColorObjectByColorValue","colorValue","getColorClassName","colorContextName","colorSlug","useMultipleOriginColorsAndGradients","enableCustomColors","enableCustomGradients","colorGradientSettings","hasColorsOrGradients","inputArray","getAllUnit","selectedUnits","flat","cornerUnits","getAllValue","parsedQuantitiesAndUnits","allValues","_value$","allUnits","hasMixedValues","allValue","hasDefinedValues","AllInputControl","setSelectedUnits","isMixed","allPlaceholder","disableUnits","isOnly","isNumeric","topLeft","topRight","bottomLeft","bottomRight","CORNERS","BoxInputControls","valuesProp","createHandleOnChange","corner","parsedQuantity","parsedUnit","computedUnit","Tooltip","side","newUnits","LinkedButton","isLinked","iconSize","MIN_BORDER_RADIUS_VALUE","MAX_BORDER_RADIUS_VALUES","BorderRadiusControl","setIsLinked","unitConfig","InputControls","toggleLinked","ShadowPopoverContainer","onShadowChange","shadows","useShadowPresets","Heading","ShadowPresets","activeShadow","Composite","ShadowIndicator","Item","unset","boxShadow","showTooltip","check","ShadowPopover","shadowIcon","_settings$shadow$pres","defaultPresetsEnabled","defaultPresets","defaultShadows","themeShadows","customShadows","unsetShadow","shadowPresets","useHasBorderPanel","useHasBorderPanelControls","hasBorderColor","useHasBorderColorControl","hasBorderRadius","useHasBorderRadiusControl","hasBorderStyle","useHasBorderStyleControl","hasBorderWidth","useHasBorderWidthControl","hasShadow","useHasShadowControl","BorderToolsPanel","BorderPanel","_ref2","_shadowPresets$custom","decodeValue","encodeColorValue","colorObject","flatMap","originColors","hasSplitBorders","borderValue","setBorder","newBorder","showBorderColor","showBorderStyle","showBorderWidth","showBorderRadius","borderRadiusValues","setBorderRadius","newBorderRadius","borderValues","hasShadowControl","mergedShadowPresets","setShadow","shadowName","showBorderByDefault","hasBorderControl","useBorderPanelLabel","isDefinedBorder","resetBorder","BorderBoxControl","enableAlpha","enableStyle","updatedBorder","popoverOffset","popoverPlacement","__experimentalIsRenderedInSidebar","resetShadow","isBordered","isSeparated","BORDER_SUPPORT_KEY","SHADOW_SUPPORT_KEY","getColorByProperty","property","matchedColor","getMultiOriginColor","namedColor","getColorSlugFromVariable","styleToAttributes","borderColorValue","borderColorSlug","updatedStyle","attributesToStyle","BordersInspectorControl","attributesResetAllFilter","existingStyle","isEnabled","StylesBorderPanel","hasBorderSupport","borderClasses","getBorderClasses","newClassName","borderColorClass","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","__experimentalGetGradientClass","gradientSlug","getGradientValueBySlug","__experimentalGetGradientObjectByGradientValue","getGradientSlugByValue","__experimentalUseGradient","gradientAttribute","customGradientAttribute","allGradients","setGradient","newGradientValue","gradientClass","gradientValue","Tabs","colorsAndGradientKeys","TAB_IDS","ColorGradientControlInner","onColorChange","onGradientChange","clearable","showTitle","headingLevel","canChooseAColor","canChooseAGradient","tabPanels","ColorPalette","newColor","GradientPicker","newGradient","renderPanelType","defaultTabId","TabList","Tab","tabId","TabPanel","ColorGradientControlSelect","useHasColorPanel","hasTextPanel","useHasTextPanel","hasBackgroundPanel","useHasBackgroundColorPanel","hasLinkPanel","useHasLinkPanel","hasHeadingPanel","useHasHeadingPanel","hasButtonPanel","useHasButtonPanel","hasCaptionPanel","useHasCaptionPanel","ColorToolsPanel","LabeledColorIndicators","indicators","ZStack","isLayered","indicator","expanded","ColorIndicator","ColorPanelTab","isGradient","userValue","setValue","colorGradientControlSettings","ColorGradientControl","ColorPanelDropdown","resetValue","tabs","_tabs$","currentTab","tab","firstTabKey","firstTab","tabKey","restTabProps","ColorPanel","areCustomSolidsEnabled","hasSolidColors","hasGradientColors","encodeGradientValue","gradientObject","originGradients","showBackgroundPanel","backgroundColor","userBackgroundColor","userGradient","showLinkPanel","linkColor","userLinkColor","hoverLinkColor","userHoverLinkColor","showTextPanel","textColor","userTextColor","setTextColor","changedObject","showPanel","hasTextColor","resetTextColor","hasBackground","hasLink","resetLink","elementBackgroundColor","elementGradient","elementTextColor","elementBackgroundUserColor","elementGradientUserColor","elementTextUserColor","supportsBackground","hasElement","resetElement","newTextColor","newBackgroundColor","restItem","fallbackBackgroundColor","fallbackTextColor","fallbackLinkColor","isLargeText","enableAlphaChecker","currentBackgroundColor","currentTextColor","currentLinkColor","textColors","colordBackgroundColor","colord","backgroundColorHasTransparency","backgroundColorBrightness","isReadableOptions","speakMessage","colordTextColor","isColordTextReadable","textHasTransparency","spokenMessage","BlockRefs","refsMap","observableMap","BlockRefsProvider","useBlockRefProvider","useRefEffect","assignRef","useBlockElementRef","useLayoutEffect","unsubscribe","subscribe","useBlockElement","blockElement","setBlockElement","defaultView","BlockColorContrastChecker","detectedBackgroundColor","setDetectedBackgroundColor","detectedColor","setDetectedColor","detectedLinkColor","setDetectedLinkColor","blockEl","firstLinkElement","querySelector","innerText","backgroundColorNode","nodeType","ELEMENT_NODE","ContrastChecker","COLOR_SUPPORT_KEY","hasColorSupport","colorSupport","hasLinkColorSupport","hasGradientSupport","hasBackgroundColorSupport","hasTextColorSupport","hasGradient","shouldSerialize","textClass","backgroundClass","serializeHasBackground","textColorValue","textColorSlug","backgroundColorValue","backgroundColorSlug","ColorInspectorControl","ColorEdit","enableContrastChecking","StylesColorPanel","enableContrastChecker","userPalette","themePalette","extraStyles","saveProps","hasBackgroundValue","MIGRATION_PATHS","FontFamilyControl","blockLevelFontFamilies","fontFamily","SelectControl","destinationBlockType","getFontAppearanceLabel","hasFontStyles","hasFontWeights","FontAppearanceControl","otherProps","hasStylesOrWeights","defaultOption","selectOptions","combineOptions","combinedOptions","styleOptions","weightOptions","currentSelection","option","CustomSelectControl","describedBy","selectedItem","LineHeightControl","isDefined","isLineHeightDefined","adjustNextValue","wasTypedOrPasted","BASE_DEFAULT_VALUE","__unstableStateReducer","stateReducer","payload","nativeEvent","inputType","handleOnChange","spinFactor","spinControls","LetterSpacingControl","TEXT_ALIGNMENT_OPTIONS","alignLeft","alignRight","alignJustify","DEFAULT_OPTIONS","TextAlignmentControl","validOptions","isDeselectable","TEXT_TRANSFORMS","formatUppercase","formatLowercase","formatCapitalize","TextTransformControl","TEXT_DECORATIONS","formatUnderline","formatStrikethrough","TextDecorationControl","WRITING_MODES","textHorizontal","textVertical","WritingModeControl","MIN_TEXT_COLUMNS","MAX_TEXT_COLUMNS","useHasTypographyPanel","hasFontFamily","useHasFontFamilyControl","hasLineHeight","useHasLineHeightControl","hasFontAppearance","useHasAppearanceControl","hasLetterSpacing","useHasLetterSpacingControl","hasTextAlign","useHasTextAlignmentControl","hasTextTransform","useHasTextTransformControl","hasTextDecoration","useHasTextDecorationControl","hasWritingMode","useHasWritingModeControl","hasTextColumns","useHasTextColumnsControl","hasFontSize","useHasFontSizeControl","TypographyToolsPanel","fontAppearance","TypographyPanel","hasFontFamilyEnabled","selectedFontFamily","_fontFamilies$find$fo","fontFamiliesFromSettings","_fontFamiliesFromSett","family","fontFace","getMergedFontFamiliesAndFontFamilyFaces","setFontFamily","hasFontSizeEnabled","mergedFontSizes","_fontSizes$custom","_fontSizes$theme","_fontSizes$default","getMergedFontSizes","setFontSize","hasAppearanceControl","appearanceControlLabel","useAppearanceControlLabel","nearestFontStyle","hasFontStyle","fs","hasFontWeight","availableFontStyles","newFontStyleValue","findNearestStyleAndWeight","setFontAppearance","newFontStyle","newFontWeight","resetFontAppearance","hasLineHeightEnabled","setLineHeight","hasLetterSpacingControl","setLetterSpacing","hasTextColumnsControl","setTextColumns","hasTextTransformControl","setTextTransform","hasTextDecorationControl","setTextDecoration","hasWritingModeControl","setWritingMode","hasTextAlignmentControl","setTextAlign","resetFontFamily","resetFontSize","FontSizePicker","withReset","withSlider","resetLineHeight","resetLetterSpacing","resetTextColumns","resetTextDecoration","resetWritingMode","resetTextTransform","showNone","resetTextAlign","FONT_FAMILY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEY","TokenList","getFontSize","fontSizeAttribute","customFontSizeAttribute","fontSizeObject","getFontSizeObjectByValue","getFontSizeClass","fontSizeSlug","FONT_SIZE_SUPPORT_KEY","DEFAULT_ALIGNMENT_CONTROLS","alignmentControls","AlignmentControl","AlignmentUI","AlignmentToolbar","TEXT_ALIGN_SUPPORT_KEY","VALID_TEXT_ALIGNMENTS","NO_TEXT_ALIGNMENTS","getValidTextAlignments","blockTextAlign","hasTextAlignControl","validTextAlignments","textAlignmentControls","newTextAlignValue","omit","TYPOGRAPHY_SUPPORT_KEYS","fontSizeValue","fontFamilyValue","fontFamilySlug","TypographyInspectorControl","StylesTypographyPanel","CUSTOM_VALUE_SETTINGS","steps","rm","SpacingInputControl","minimumCustomValue","onMouseOut","onMouseOver","showSideInLabel","_CUSTOM_VALUE_SETTING","_CUSTOM_VALUE_SETTING2","selectListSizes","showRangeControl","disableCustomSpacingSizes","editorSettings","showCustomValueControl","setShowCustomValueControl","minValue","setMinValue","usePrevious","presetValue","sliderValue","getSliderValueFromPreset","selectedUnit","customRangeValue","getNewPresetValue","newSize","controlType","marks","_newValue","sideLabel","typeLabel","onBlur","getNewCustomValue","onDragStart","onDrag","onDragEnd","onMouseDown","offsetX","renderTooltipContent","groupedSides","AxialInputControls","nextValues","filteredSides","axisValue","SeparatedInputControls","SingleInputControl","currentSide","compare","Intl","Collator","numeric","useSpacingSizes","customSpacingSizes","customSizes","themeSizes","defaultSizes","sizes","SpacingSizesControl","labelProp","inputValues","hasOneSide","hasOnlyAxialSides","view","setView","sideValues","hasMatchingAxialValues","hasNoValuesAndBalancedSides","counts","hasBalancedSidesSupport","getInitialView","inputControlProps","newValues","RANGE_CONTROL_CUSTOM_SETTINGS","HeightControl","_RANGE_CONTROL_CUSTOM","_RANGE_CONTROL_CUSTOM2","currentUnit","Spacer","marginX","marginBottom","useGetNumberOfBlocksBeforeCell","gridClientId","numColumns","getNumberOfBlocksBeforeCell","targetIndex","_getBlockAttributes$s","columnStart","rowStart","selfStretch","ChildLayoutControl","childLayout","parentType","defaultParentType","parentLayoutType","FlexControls","GridControls","flexSize","flexResetLabel","hasFlexValue","resetFlex","childLayoutOrientation","columnSpan","rowSpan","hasSpanValue","resetGridSpans","newColumnSpan","newRowSpan","hasStartValue","resetGridStarts","newColumnStart","newRowStart","AspectRatioTool","displayValue","defaultRatios","themeRatios","showDefaultRatios","themeOptions","ratio","defaultOptions","aspectRatioOptions","AXIAL_SIDES","useHasDimensionsPanel","hasContentSize","useHasContentSize","hasWideSize","useHasWideSize","hasPadding","useHasPadding","hasMargin","useHasMargin","hasGap","useHasGap","hasMinHeight","useHasMinHeight","hasAspectRatio","useHasAspectRatio","hasChildLayout","useHasChildLayout","_settings$parentLayou","defaultParentLayoutType","filterValuesBySides","filteredValues","splitStyleValue","DimensionsToolsPanel","DimensionsPanel","onVisualize","includeLayoutControls","_defaultControls$cont","_defaultControls$wide","_defaultControls$padd","_defaultControls$marg","_defaultControls$bloc","_defaultControls$chil","_defaultControls$minH","_defaultControls$aspe","showSpacingPresetsControl","useHasSpacingPresets","minimumMargin","minMarginValue","setMinMarginValue","showContentSizeControl","contentSizeValue","setContentSizeValue","showWideSizeControl","wideSizeValue","setWideSizeValue","showPaddingControl","paddingValues","paddingSides","isAxialPadding","setPaddingValues","newPaddingValues","onMouseOverPadding","showMarginControl","marginValues","marginSides","isAxialMargin","setMarginValues","newMarginValues","onMouseOverMargin","showGapControl","gapValue","gapValues","splitGapValue","gapSides","isAxialGap","setGapValue","newGapValue","setGapValues","nextBoxGapValue","showMinHeightControl","minHeightValue","setMinHeightValue","tempValue","showAspectRatioControl","aspectRatioValue","showChildLayoutControl","onMouseLeaveControls","hasUserSetContentSizeValue","resetContentSizeValue","nextContentSize","hasUserSetWideSizeValue","resetWideSizeValue","nextWideSize","hasPaddingValue","resetPaddingValue","BoxControl","allowReset","splitOnAxis","hasMarginValue","resetMarginValue","hasGapValue","resetGapValue","newChildLayout","hasMinHeightValue","resetMinHeightValue","hasAspectRatioValue","scrollableRef","onWheel","scrollBy","passive","BLOCK_SELECTOR","APPENDER_SELECTOR","BLOCK_APPENDER_CLASS","isInSameBlock","isInsideRootBlock","getBlockClientId","blockNode","rectUnion","rect1","rect2","DOMRectReadOnly","isElementVisible","viewport","classList","bounds","getBoundingClientRect","checkVisibility","opacityProperty","contentVisibilityAuto","visibilityProperty","display","visibility","getVisibleElementBounds","currentElement","innerWidth","MAX_POPOVER_RECOMPUTE_COUNTER","MAX_SAFE_INTEGER","PrivateBlockPopover","bottomClientId","__unstablePopoverSlot","__unstableContentRef","selectedElement","lastSelectedElement","mergedRefs","useMergeRefs","usePopoverScroll","popoverDimensionsRecomputeCounter","forceRecomputePopoverDimensions","observer","MutationObserver","observe","disconnect","popoverAnchor","contextElement","__unstableSlotName","flip","PublicBlockPopover","CoverContainer","additionalStyles","setWidth","setHeight","ResizeObserver","box","_bottomClientId","SpacingVisualizer","computeStyle","forceShow","updateStyle","requestAnimationFrame","previousValueRef","setIsActive","isShallowEqual","timeout","clearTimeout","BlockPopoverCover","getComputedCSS","getPropertyValue","MarginVisualizer","borderRightWidth","borderLeftWidth","PaddingVisualizer","DIMENSIONS_SUPPORT_KEY","SPACING_SUPPORT_KEY","DimensionsInspectorControl","visualizedProperty","setVisualizedProperty","setProperty","useVisualizer","StylesDimensionsPanel","hasDimensionsSupport","inlineStyleOverrides","useCustomSides","styleSupportKeys","hasStyleSupport","getInlineStyles","skipSerializationPathsEdit","skipSerializationPathsSave","skipSerializationPathsSaveChecks","renamedFeatures","omitStyle","preserveReference","firstSubpath","restPath","skipPaths","featureName","__unstableParentLayout","passedProps","blockElementsContainerIdentifier","baseElementSelector","blockElementStyles","elementCSSRules","elementTypes","pseudo","elementStyles","ELEMENTS","compileCSS","pseudoSelector","DuotoneControl","idProp","colorPalette","duotonePalette","disableCustomDuotone","toolbarIcon","DuotoneSwatch","actionLabel","descriptionId","headerTitle","DuotonePicker","getDuotoneUnsetStylesheet","getDuotoneStylesheet","getDuotoneFilter","rgbColor","getValuesFromColors","getBlockCSSSelector","hasSelectors","rootSelector","__experimentalSelector","pathArray","fallbackSelector","featureSelector","subfeatureSelector","useMultiOriginColorPresets","presetSetting","defaultSetting","disableDefault","userPresets","themePresets","useHasFiltersPanel","useHasDuotoneControl","FiltersToolsPanel","LabeledColorIndicator","FiltersPanel","hasDuotoneEnabled","setDuotone","duotonePreset","settedValue","hasDuotone","resetDuotone","isSafari","useMultiOriginPresets","enableDefault","getColorsFromDuotonePreset","duotoneStyle","enableCustomDuotone","duotonePresetOrColors","StylesFiltersPanel","newDuotone","maybePreset","getDuotonePresetFromColors","experimentalDuotone","filterClass","shouldRender","filterId","duotoneSelector","duotoneAttr","isCustom","isPreset","selectorPart","isValidFilter","useDuotoneStyles","useBlockDisplayInformation","isSynced","isReusableBlock","isTemplatePart","getBlockLabel","positionLabel","positionType","getPositionTypeLabel","blockTypeInfo","POSITION_SUPPORT_KEY","DEFAULT_OPTION","STICKY_OPTION","FIXED_OPTION","POSITION_SIDES","VALID_POSITION_TYPES","hasStickyOrFixedPositionValue","useIsPositionDisabled","allowFixed","allowSticky","PositionPanelPure","hasFixedPositionSupport","sticky","hasStickyPositionSupport","blockInformation","stickyHelpText","availableOptions","selectedOption","web","onChangeType","native","hasPositionBlockSupport","isPositionDisabled","allowPositionStyles","getPositionCSS","ELEMENT_CLASS_NAMES","BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS","__experimentalBorder","flattenTree","newKey","newLeaf","newPrefix","getFeatureDeclarations","declarations","isShorthand","subfeature","newDeclarations","getStylesDeclarations","blockStyles","useRootPaddingAlign","disableRootPadding","isRoot","STYLE_PROPERTY","properties","useEngine","rootOnly","pathToValue","entry","getLayoutStyles","hasFallbackGapSupport","fallbackGapValue","ruleset","spacingStyle","cssValue","combinedSelector","validDisplayModes","baseStyle","STYLE_KEYS","pickStyleKeys","treeToPickFrom","clonedEntries","getNodesWithSettings","blockSelectors","_tree$settings$blocks","pickPresets","blockPresets","blockCustom","toCustomProperties","mergedSettings","getPresetsDeclarations","customProps","toStyles","disableLayoutStyles","layoutStyles","marginReset","rootPadding","variationStyles","nodesWithStyles","getNodesWithStyles","_tree$styles$blocks","skipSelectorWrapper","_node$elements","variationName","_variation$elements","_variation$blocks","variationSelector","styleVariationSelectors","variationBlockName","variationBlockStyles","_variationBlockStyles","variationBlockSelector","variationDuotoneSelector","variationFeatureSelectors","featureSelectors","scopeFeatureSelectors","variationBlockStyleNodes","hasLayoutSupport","variationBlockElement","variationBlockElementStyles","elementName","sel","elementSelector","nodesWithSettings","useRootPaddingAwareAlignments","hasBodyStyles","featureDeclarations","cssSelector","duotoneStyles","duotoneDeclarations","styleDeclarations","processCSSNesting","styleVariationName","styleVariationSelector","styleVariations","baseSelector","combinedSelectors","concatFeatureVariationSelectorString","styleVariationDeclarations","pseudoSelectorStyles","pseudoKey","pseudoStyle","pseudoDeclarations","pseudoRule","blockSelector","classSelectorToUse","selectorToUse","getPresetsClasses","getBlockSelectors","variationInstanceId","duotoneSupport","__experimentalLayout","__experimentalDefault","blockStyleVariations","variationSuffix","variationClass","ancestorRegex","addVariationClass","_match","group1","group2","part","getBlockStyleVariationSelector","getSelectorsConfig","featureKey","processedCSS","splittedPart","nestedSelector","pseudoPart","withoutPseudoElement","toAppend","appendToSelector","useGlobalStylesOutputWithConfig","_updatedConfig$styles","updatedConfig","customProperties","svgs","at","getPresetsSvgFilters","toSvgFilters","isGlobalStyles","useGlobalStylesOutput","VARIATION_PREFIX","getVariationMatches","OverrideStyles","isMatch","registeredStyles","getVariationNameFromClass","globalSettings","_mergedConfig$setting","_mergedConfig$styles","_mergedConfig$setting2","replaceRefs","refValue","getVariationStylesWithRefValues","useBlockStyleVariation","variationConfig","layoutBlockSupportKey","hasLayoutBlockSupport","useLayoutClasses","defaultBlockLayout","usedLayout","inherit","layoutClassnames","baseClassName","splitBlockName","compoundClassName","blockSupportAndThemeSettings","allowEditing","allowInheriting","blockSupportAndLayout","blockLayoutType","showInheritToggle","constrainedType","displayControlsForLegacyLayouts","hasContentSizeOrLegacySettings","onChangeLayout","newLayout","PanelBody","LayoutTypeSwitcher","newType","ButtonGroup","BlockWithLayoutStyles","BlockListBlock","blockGapSupport","layoutClasses","selectorPrefix","fullLayoutType","layoutClassNames","__unstableLayoutClassNames","withLayoutStyles","createHigherOrderComponent","blockSupportsLayout","GridRect","columnEnd","rowEnd","containsRect","rect","intersectsRect","getGridTracks","tracks","previousTrack","getClosestTrack","edge","track","getGridInfo","gridElement","gridTemplateColumns","gridTemplateRows","numRows","numItems","currentColor","globalTips","kbd","randomIndex","Tip","showColors","blockDefault","renderedIcon","parentNavBlockClientId","minWidth","chevronRight","chevronLeft","BlockIcon","Text","WrappedComponent","useSubRegistry","subRegistries","subRegistry","createRegistry","blockEditorStoreName","getSubRegistry","RegistryProvider","useBlockSync","controlledBlocks","controlledSelection","onInput","isControlled","pendingChangesRef","incoming","outgoing","subscribedRef","setControlledBlocks","storeBlocks","onInputRef","onChangeRef","isMountedRef","isPersistent","previousAreBlocksDifferent","newIsPersistent","newBlocks","areBlocksDifferent","KeyboardShortcuts","Register","registerShortcut","keyboardShortcutsStore","keyCombination","character","aliases","ExperimentalBlockEditorProvider","withRegistryProvider","__internalIsInitialized","SlotFillProvider","passthrough","BlockContextProvider","DEFAULT_BLOCK_CONTEXT","EditWithFilters","save","blockContext","BlockContext","usesContext","generatedClassName","secondaryActions","Children","DropdownMenu","moreVertical","noIcons","MultipleUsageWarning","originalBlockClientId","onReplace","PrivateBlockContext","BlockEdit","mayDisplayControls","mayDisplayParentControls","isPreviewMode","layoutSupport","BlockEditContextProvider","Edit","BlockView","rawContent","renderedContent","actionText","RawHTML","safeHTML","onKeep","onConvert","convertor","convertButtonText","converted","convertedBlock","getSaveContent","difference","originalContent","newContent","diffChars","blockToBlocks","rawHandler","HTML","BlockInvalidWarning","canInsertHTMLBlock","canInsertClassicBlock","setCompare","onCompareClose","convert","toClassic","classicBlock","toHTML","htmlBlock","toBlocks","toRecoveredBlock","recoveredBlock","Modal","onRequestClose","BlockCompare","BlockCrashBoundary","hasError","componentDidCatch","setHtml","getBlockContent","validateBlock","updateQueue","makeQueue","raf","schedule","writeQueue","write","onStartQueue","onStart","onFrameQueue","onFrame","onFinishQueue","onFinish","timeouts","handler","ms","pendingCount","findTimeout","batchedUpdates","throttle","lastArgs","queuedFn","throttled","nativeRaf","impl","performance","frameLoop","advance","ts","queue","loop","prevTs","eachSafely","flush","arg","fun","num","und","ctx","clear","flushCalls","isSSR","createStringInterpolator$1","colors$1","skipAnimation","willAdvance","globals","freeze","createStringInterpolator","startQueue","currentFrame","prevFrame","priority","idle","animation","flushStartQueue","startSafely","startUnsafely","dt","nextFrame","NUMBER","PERCENTAGE","rgb","hsl","hsla","hex3","hex4","hex6","hex8","hue2rgb","q","hslToRgb","parse255","int","parse360","parse1","parsePercentage","colorToRgba","int32Color","normalizeColor","createInterpolator","extrapolate","outputRange","inputRange","extrapolateLeft","extrapolateRight","easing","findRange","inputMin","inputMax","outputMin","outputMax","Infinity","interpolate","$get","for","$observers","hasFluidValue","getFluidValue","getFluidObservers","callFluidObservers","observers","eventObserved","callFluidObserver","FluidValue","setFluidGetter","setHidden","observerAdded","removeFluidObserver","observerRemoved","writable","configurable","numberRegex","colorRegex","unitRegex","rgbaRegex","cssVariableRegex","variableToRgba","parseCSSVariable","namedColorRegex","rgbaRound","p1","p2","p3","p4","keyframes","outputRanges","interpolators","_output$find","missingUnit","once","called","TypeError","warnInterpolate","isAnimatedString","emptyDeps","$node","getAnimated","owner","setAnimated","defineHidden","getPayload","Animated","AnimatedValue","elapsedTime","lastPosition","lastVelocity","v0","durationProgress","getValue","AnimatedString","_string","_toString","goal","TreeContext","dependencies","AnimatedObject","animated","_makePayload","_addToPayload","AnimatedArray","makeAnimated","getAnimatedType","withAnimated","host","hasInstance","isReactComponent","givenProps","givenRef","instanceRef","updateRef","deps","createAnimatedStyle","getAnimatedState","forceUpdate","isMounted","useIsMounted","instance","applyAnimatedValues","PropsObserver","observerRef","effect","dep","usedProps","getComponentProps","cacheKey","getDisplayName","displayName","callProp","matchProp","resolveProp","getDefaultProp","noopTransform","getDefaultProps","DEFAULT_PROPS","RESERVED_PROPS","pause","immediate","delay","onProps","onPause","onResume","onRest","onResolve","trail","expires","enter","leave","onDestroyed","callId","inferTo","forward","getForwardProps","out","computeGoal","isAsyncTo","c1","c2","c3","c4","c5","bounceOut","n1","d1","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","sin","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","easeInElastic","easeOutElastic","easeInOutElastic","easeInBounce","easeOutBounce","easeInOutBounce","tension","friction","mass","damping","clamp","AnimationConfig","frequency","velocity","restVelocity","precision","progress","bounce","decay","sanitizeConfig","isTensionConfig","emptyArray","Animation","changed","toValues","fromValues","scheduleProps","_props$cancel","paused","resumeQueue","resume","delayed","pauseQueue","cancelId","getCombinedResult","cancelled","getCancelledResult","getNoopResult","getFinishedResult","finished","asyncTo","prevTo","prevPromise","asyncId","preventBail","bail","bailPromise","bailIfEnded","bailSignal","bailResult","arg1","arg2","BailSignal","skipAnimationSignal","SkipAniamtionSignal","stopAsync","animating","stop","isFrameValue","FrameValue","nextId$1","_priority","_onPriorityChange","_attach","_detach","_onChange","$P","hasAnimated","isAnimating","isPaused","setActiveBit","active","IS_ANIMATING","setPausedBit","SpringValue","_state","_pendingCalls","_lastCallId","_lastToId","_memoizedDuration","isDelayed","anim","elapsed","bounceFactor","canBounce","isGrowing","isMoving","isBouncing","numSteps","ceil","currVal","finalVal","_stop","_focus","_set","_update","finish","_onStart","_start","_prepareNode","isLoop","mergeActiveFn","sendEvent","isFrozen","checkFinished","_resume","_merge","nextProps","createLoopUpdate","hasToProp","hasFromProp","prevFrom","hasFromChanged","hasToChanged","hasAsyncTo","newConfig","defaultConfig","mergeConfig","isAnimatable","goalType","started","hasValueChanged","ACTIVE_EVENTS","oldNode","loopRet","createUpdate","findDefined","_target$animation$typ","_target$animation","_target$defaultProps$","_target$defaultProps","BATCHED_EVENTS","nextId","Controller","springs","_flush","_initialProps","_lastAsyncId","_active","_changed","_started","_item","_events","_onFrame","spring","prepareKeys","ctrl","flushUpdate","flushUpdateQueue","promises","prepareSprings","createSpring","_excluded$3","SpringContext","excluded","sourceKeys","_objectWithoutPropertiesLoose","inherited","getResult","committed","prevCache","useCache","areInputsEqual","useMemoOne","_context","Consumer","TransitionPhase","Interpolation","calc","_get","_dt","checkIdle","becomeIdle","highest","isIdle","isCustomPropRE","dangerousStyleValue","isUnitlessNumber","attributeCache","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columns","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","orphans","tabSize","widows","zIndex","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","prefixes","prefixKey","domTransforms","pxTransforms","degTransforms","addUnit","isValueIdentity","AnimatedStyle","z","xyz","deg","FluidTransform","unstable_batchedUpdates","transparent","burntsienna","_applyAnimatedValues","_createAnimatedStyle","_getComponentProps","hostConfig","createHost","isFilterElement","scrollLeft","names","hasAttribute","textContent","getAbsolutePosition","offsetTop","offsetLeft","triggerAnimationOnChange","prevRect","scrollContainer","getScrollContainer","adjustScrolling","preserveScrollPosition","matchMedia","finishedMoving","transformOrigin","destination","useFocusFirstElement","textInputs","isTextField","isReverse","getAttribute","focusElement","findNext","isFormElement","placeCaretAtHorizontalEdge","useIsHovered","listener","defaultPrevented","useFocusHandler","parentElement","isContentEditable","useEventHandlers","BACKSPACE","DELETE","useNavModeExit","useZoomOutModeExit","onDoubleClick","__experimentalSetIsInserterOpened","useIntersectionObserver","IntersectionObserver","unobserve","useScrollIntoView","isIntersecting","useFlashEditableBlocks","BLOCK_BINDINGS_ALLOWED_BLOCKS","DEFAULT_ATTRIBUTE","canBindBlock","canBindAttribute","attributeName","withBlockBindingSupport","sources","getAllBlockBindingsSources","blockBindings","supportedAttributes","bindingsWithDefaults","bindingSource","replacePatternOverrideDefaultBindings","updatedContext","boundAttributes","blockBindingsBySource","binding","sourceName","sourceArgs","getValues","attr","hasParentPattern","hasPatternOverridesDefaultBinding","_setAttributes","nextAttributes","keptAttributes","setValues","__unstableIsHtml","isAligned","blockApiVersion","blockTitle","isSubtreeDisabled","hasOverlay","isPartiallySelected","isReusable","hasChildSelected","isBlockMovingMode","canInsertMovingBlock","isEditingDisabled","hasEditableOutline","isTemporarilyEditingAsBlocks","defaultClassName","blockLabel","htmlSuffix","useMovingAnimation","useDisabled","blockEditContext","bindingsStyle","hasNegativeMargin","marginTop","inert","Block","isHtml","__unstableBlockSource","isLocked","onInsertBlocksAfter","onMerge","_wrapperProps","blockEdit","insertBlocksAfter","getEditWrapperProps","propsA","propsB","newProps","mergeWrapperProps","isSticky","BlockHtml","saveContent","serializeRawBlock","dataAlign","restWrapperProps","updatedWrapperProps","BlockCrashWarning","getBlockProps","applyWithDispatch","ownProps","onInsertBlocks","switchToDefaultOrRemove","moveFirstItemUp","changeSelection","targetRootClientId","nextRootClientId","previousRootClientId","replacementBlocks","selectionEnabled","selectedProps","blockWithoutAttributes","_hasBlockSupport","hasLightBlockWrapper","previewContext","_isSelected","canMove","isAncestorOfSelectedBlock","movingClientId","blocksWithSameName","isInvalid","privateContext","ZWNBSP","DefaultBlockAppender","showPrompt","isManualGrid","isEmpty","bodyPlaceholder","decodeEntities","onAppend","Inserter","isAppender","__experimentalIsQuick","DefaultAppender","ButtonBlockAppender","BlockListAppender","CustomAppender","tagName","TagName","isDragOver","contentEditable","previousClientId","nextClientId","popoverRecomputeCounter","forcePopoverRecompute","isVisible","_rootClientId","previousElement","nextElement","isVertical","previousRect","nextRect","targetRect","DOMRect","popoverScrollRef","animateVariants","hide","scaleY","show","reducedMotion","InsertionPointOpenRef","InbetweenInsertionPointPopover","openRef","isInserterShown","isDistractionFree","_isNavigationMode","_previousClientId","_nextClientId","disableMotion","lineVariants","scale","rest","hover","inserterVariants","BlockPopoverInbetween","whileHover","whileTap","onHoverEnd","onSelectOrClose","InsertionPoint","isBlockListEmpty","blockInsertionPoint","BlockDropZonePopover","useInBetweenInserter","isInBetweenInserterDisabled","onMouseMove","TEXT_NODE","captureToolbars","__experimentalCaptureToolbars","clientY","clientX","blockElRect","firstElementChild","hasFixedToolbar","elementRect","useBlockSelectionClearer","BlockSelectionClearer","pendingSettingsUpdates","useOnBlockDrop","targetBlockIndex","insertOrReplaceBlocks","clientIdsToReplace","groupInnerBlocks","areAllImages","galleryBlock","wrappedBlocks","moveBlocks","sourceClientIds","sourceRootClientId","insertIndex","sourceBlocks","_onDrop","srcRootClientId","srcClientIds","dropType","srcIndex","dataTransfer","getData","parseDropEvent","blocksToInsert","sourceBlockIndex","isAtSameLevel","draggedBlockCount","onBlockDrop","_onFilesDrop","transformation","findTransform","getBlockTransforms","_onHTMLDrop","pasteHandler","onHTMLDrop","getFilesFromDataTransfer","getDistanceToNearestEdge","point","allowedEdges","candidateDistance","candidateEdge","distance","isHorizontal","pointLateralPosition","pointForwardPosition","edgeStart","edgeEnd","edgeForwardPosition","edgeLateralPosition","getDistanceFromPointToEdge","isPointContainedByRect","THRESHOLD_DISTANCE","MINIMUM_HEIGHT_FOR_THRESHOLD","MINIMUM_WIDTH_FOR_THRESHOLD","isDropTargetValid","draggedBlockNames","areBlocksAllowed","allowedBlockNames","targetMatchesDraggedBlockParents","allowedParentName","isInsertionPoint","targetToCheck","HTMLElement","dataset","providesContext","contextName","useBlockContext","BlockListItemsMemo","BlockListItems","UncontrolledInnerBlocks","prioritizedInserterBlocks","__experimentalDefaultBlock","__experimentalDirectInsert","wrapperRef","templateInsertUpdatesSelection","__experimentalAppenderTagName","renderAppender","parentLock","_allowedBlocks","prevValue","setPrevValue","useShallowMemo","_prioritizedInserterBlocks","_templateLock","newSettings","useNestedSettingsUpdate","existingTemplateRef","isCancelled","currentInnerBlocks","shouldApplyTemplate","hasTemplateChanged","nextBlocks","useInnerBlockTemplateSync","defaultLayoutBlockSupport","memoedLayout","ControlledInnerBlocks","ForwardedInnerBlocks","innerBlocksProps","useInnerBlocksProps","__unstableDisableLayoutClassNames","__unstableDisableDropZone","dropZoneElement","selected","_isDropZoneDisabled","isDropZoneDisabled","enableClickThrough","blockDropZoneRef","parentBlockClientId","dropTarget","setDropTarget","useThrottle","blocksData","getIsUnmodifiedDefaultBlock","getElementById","blockOrientation","dropTargetPosition","nearestIndex","insertPosition","minDistance","parentBlockOrientation","rootBlockIndex","isRightToLeft","sideDistance","sideEdge","isPointInsideRect","isPointWithinTopAndBottomBoundariesOfRect","adjacentIndex","isNearestBlockUnmodifiedDefaultBlock","isAdjacentBlockUnmodifiedDefaultBlock","getDropTargetPosition","canInsertGalleryBlock","areGroupableBlocks","groupBlockVariations","canInsertRow","insertionPointClientId","useDropZone","onDrop","onDragOver","onDragLeave","relatedTarget","useBlockDropZone","InnerBlocks","getInnerBlocksProps","BaseDefaultBlockAppender","showSeparator","isFloating","onAddBlock","isToggle","BaseButtonBlockAppender","Content","KEY_DOWN_ELIGIBLE_KEY_CODES","RIGHT","LEFT","useMouseMoveTypingReset","lastClientX","lastClientY","stopTypingOnMouseMove","useTypingObserver","_isTyping","ref1","ref2","getSelection","timerId","stopTypingOnNonTextField","stopTypingOnEscapeKey","ESCAPE","stopTypingOnSelectionUncollapse","startTypingInTextField","shiftKey","isKeyDownEligibleForStartTyping","ZoomOutSeparator","isDraggedOver","setIsDraggedOver","blockInsertionPointVisible","isReducedMotion","ease","pendingBlockVisibilityUpdatesPerRegistry","isLargeViewport","isOutlineMode","isFocusMode","outlineMode","delayedBlockVisibilityUpdates","useDebounce","trailing","intersectionObserver","Observer","StopEditingAsBlocksOnOutsideSelect","isBlockOrDescendantSelected","BlockList","Items","hasAppender","hasCustomAppender","selectedBlocks","shouldRenderAppender","_order","AsyncModeProvider","isFullSelection","useMultiSelection","removeAllRanges","getClosestTabbable","containerElement","onlyVertical","focusableNodes","isTabbableIndex","nodeRect","useArrowNav","verticalRect","ctrlKey","altKey","metaKey","isUp","isDown","isLeft","isRight","isNav","hasModifier","isNavEdge","isVerticalEdge","isHorizontalEdge","isNavigationCandidate","computeCaretRect","isReverseDir","keepCaretInsideBlock","closestTabbable","isClosestTabbableABlock","placeCaretAtVerticalEdge","useSelectAll","useShortcutEventMatch","isEntirelySelected","blockClientIds","setContentEditableWrapper","useDragSelection","anchorElement","rafId","onMouseUp","rangeCount","getRangeAt","commonAncestorContainer","clonedRange","cloneRange","addRange","onMouseLeave","buttons","cancelAnimationFrame","getRichTextElement","useSelectionObserver","onSelectionChange","startNode","anchorNode","anchorOffset","childNodes","extractSelectionStartNode","endNode","focusNode","focusOffset","isSelectionForward","_focusNode$previousSi","previousSibling","extractSelectionEndNode","isClickShift","selectedClientId","clickedClientId","focusNodeIsNonSelectable","startPath","endPath","findDepth","richTextElementStart","richTextElementEnd","_richTextDataStart$st","_richTextDataEnd$star","richTextDataStart","__unstableIsEditableTree","richTextDataEnd","wpBlockAttributeKey","useClickSelection","useInput","onBeforeInput","selectedAttributeValue","regExp","__deprecatedOnSplit","onCompositionStart","useNotifyCopy","createSuccessNotice","eventType","notice","getPasteEventData","clipboardData","plainText","startIdx","endIdx","startStr","removeWindowsFragments","metaTag","removeCharsetMetaTag","IMAGE_TAG","IMG_WITH_LOCAL_SRC","shouldDismissPastedFiles","requiresWrapperOnCopy","setClipboardBlocks","_blocks","wrapperBlockClientId","wrapperBlockName","serialized","serialize","setData","useClipboardHandler","notifyCopy","documentHasUncollapsedSelection","documentHasSelection","isSelectionMergeable","shouldHandleWholeBlocks","expandSelectionIsNeeded","canUserUseUnfilteredHTML","isFullySelected","fromTransforms","rootBlockName","switchedBlocks","switchedBlock","useWritingFlow","container","focusCaptureBeforeRef","focusCaptureAfterRef","focusCaptureTabIndex","noCaptureRef","onFocusCapture","canvasElement","frameElement","isBefore","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","tabbables","isShift","direction","nextTabbable","currentBlock","isElementPartOfSelectedBlock","preventScroll","onFocusOut","preventScrollOnTab","useTabNav","removeAttribute","forwardedRef","compatibilityStyles","bubbleEvent","Constructor","frame","contentDocument","MouseEvent","newEvent","useBubbleEvents","iframeDocument","eventTypes","handlers","constructorName","getPrototypeOf","Iframe","contentRef","frameSize","readonly","resolvedAssets","setIframeDocument","prevContainerWidthRef","bodyClasses","setBodyClasses","clearerRef","writingFlowRef","contentResizeListener","contentHeight","useResizeObserver","containerResizeListener","containerWidth","setRef","iFrameDocument","preventFileDropDefault","onLoad","dir","compatStyle","styleSheets","styleSheet","cssRules","ownerNode","matchFromRules","_cssRules","selectorText","conditionText","__cssRules","mainStylesCssId","mainStylesElement","inlineStylesCssId","inlineStylesElement","_load","iframeWindowInnerHeight","setIframeWindowInnerHeight","iframeResizeRef","nodeWindow","innerHeight","windowInnerWidth","setWindowInnerWidth","windowResizeRef","isZoomedOut","disabledRef","bodyRef","cleanup","_src","createObjectURL","Blob","revokeObjectURL","removeProperty","shouldRenderFocusCaptureElements","iframe","KeyboardEvent","createPortal","TOKENS","class","combinator","universal","TRIM_TOKENS","getArgumentPatternByType","gobbleParens","nesting","char","STRING_PATTERN","ESCAPE_PATTERN","replacements","repeat","tokenizeBy","changedTokens","tokenOffset","flatten","cacheByWrapperSelector","ROOT_SELECTOR_TOKENS","wrapperSelector","transformOptions","ignoredSelectors","baseURL","_transformOptions$ign","excludedSelectors","prefixSelector","prefixedSelector","excludedSelector","tokenized","parsel","findLastIndex","tokenizedPrefix","listOrNode","prefixRootSelector","rebaseUrl","transformStyle","useDarkThemeBodyClassName","canvas","tempCanvas","transformedStyles","transformedSvgs","_styles","overrideWithId","overflow","dangerouslySetInnerHTML","__html","MemoizedBlockList","MAX_HEIGHT","EMPTY_ADDITIONAL_STYLES","ScaledBlockPreview","viewportWidth","editorStyles","Disabled","bodyElement","pointerEvents","EditorStyles","AutoBlockPreview","__experimentalMinHeight","__experimentalPadding","originalSettings","renderedBlocks","AutoHeightBlockPreview","useBlockPreview","_example$viewportWidt","getBlockFromExample","BlockPreview","BlockCard","isFirst","htmlProps","propsWithTabIndex","BlockDraggableChip","isPattern","fadeWhenDisabled","patternLabel","dragHandle","InserterDraggableBlocks","transferData","blockTypeIcon","Draggable","__experimentalTransferDataType","parsedBlocks","__experimentalDragComponent","onDraggableStart","onDraggableEnd","draggable","onHover","isDraggable","isDraggingRef","itemIconStyle","createBlocksFromInnerBlocksTemplate","InserterListboxItem","isAppleOS","onMouseEnter","shouldSpeak","setShouldSpeak","Group","chunk","chunks","BlockTypesList","listId","InserterListboxGroup","InserterListboxRow","InserterListItem","getBlockMenuDefaultClassName","rowId","useBlockTypesState","onInsert","isQuick","collections","getCategories","getCollections","shouldFocusBlock","insertedBlock","focusShift","focusWrap","BlockTypesTabPanel","onSelectItem","showMostUsedBlocks","suggestedItems","uncategorizedItems","itemsPerCollection","namespace","getBlockNamespace","currentlyRenderedCategories","useAsyncList","didRenderAllCategories","collectionEntries","currentlyRenderedCollections","InserterPanel","categoryItems","collection","collectionItems","InserterNoResults","itemsForCurrentRoot","itemsRemaining","InserterListbox","PatternCategoriesList","selectedCategory","patternCategories","onClickCategory","PatternsExplorerSearch","searchValue","setSearchValue","SearchControl","Pagination","currentPage","numPages","changePage","totalItems","WithToolTip","BlockPattern","setIsDragging","patternBlocks","clonedBlock","BlockPatternPlaceholder","shownPatterns","onClickPattern","showTitlesAsTooltip","pagingProps","activeCompositeId","setActiveCompositeId","firstCompositeItemId","activeId","setActiveId","BlockPatternsPaging","getIndex","destinationRootClientId","destinationIndex","parentIndex","insertionIndex","selectBlockOnInsert","_destinationIndex","_destinationRootClientId","shouldForceFocusBlock","blockLength","onToggleInsertionPoint","usePatternsState","userPatternCategories","allCategories","userCategory","existingCategory","lowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","re","defaultGetName","defaultGetTitle","defaultGetDescription","defaultGetKeywords","defaultGetCategory","defaultGetCollection","splitRegexp","stripRegexp","extractedWords","normalizedStrings","extractWords","delimiter","noCase","normalizeString","getNormalizedSearchTerms","searchBlockItems","searchInput","searchItems","getCategory","getCollection","rankedItems","getItemSearchRank","rank","rank1","rank2","getName","getTitle","getDescription","getKeywords","normalizedSearchInput","normalizedTitle","terms","unmatchedTerms","unprocessedTerms","term","unprocessedTerm","removeMatchingTerms","PAGE_SIZE","INITIAL_INSERTER_RESULTS","usePatternsPaging","currentCategoryPatterns","currentCategory","scrollContainerRef","currentFilter","setCurrentPage","previousCategory","previousFilter","pageIndex","categoryPatterns","categoryPatternsAsyncList","scrollTo","PatternsListHeader","filterValue","filteredBlockPatternsLength","useInsertionPoint","registeredPatternCategories","patternCategory","filteredBlockPatterns","hasKnownCategory","resultsFoundMessage","previousSearchValue","setPreviousSearchValue","hasItems","BlockPatternsList","usePatternCategories","populatedCategories","localeCompare","cat","hasRegisteredCategory","PatternsExplorer","initialCategory","setSelectedCategory","PatternExplorerSidebar","PatternList","onModalClose","restProps","isFullScreen","ScreenHeader","View","paddingX","paddingY","NavigatorBackButton","MobileTabNavigation","NavigatorProvider","initialPath","NavigatorScreen","NavigatorButton","isAction","FlexBlock","getShouldDisableSyncFilter","getShouldHideSourcesFilter","PATTERN_SOURCE_MENU_OPTIONS","PatternsFilter","setPatternSyncFilter","setPatternSourceFilter","patternSyncFilter","patternSourceFilter","currentPatternSourceFilter","shouldDisableSyncFilter","shouldHideSourcesFilter","patternSyncMenuOptions","fill","MenuItemsChoice","choices","newSourceFilter","Link","PatternCategoryPreviews","allPatterns","availableCategories","catName","onSetPatternSyncFilter","onSetPatternSourceFilter","patternFilter","onSelectCategory","defaultTransition","previousSelectedCategory","selectOnMove","selectedTabId","categoryId","transitionEnd","closed","showPatternsExplorer","setShowPatternsExplorer","isMobile","CategoryTabs","PatternsExplorerModal","mediaTypeTag","video","audio","getBlockAndPreviewFromMedia","mediaSrc","PreviewTag","preview","previewUrl","ALLOWED_MEDIA_TYPES","MEDIA_OPTIONS_POPOVER_PROPS","MediaPreviewOptions","getReportUrl","reportUrl","external","InsertExternalImageModal","MediaPreview","showExternalUploadModal","setShowExternalUploadModal","isHovered","setIsHovered","isInserting","setIsInserting","onMediaInsert","previewBlock","response","blob","additionalData","img","rendered","truncatedTitle","omission","mediaList","sourceId","MediaCategoryPanel","search","setSearch","debouncedSearch","useDebouncedInput","query","setMediaList","setIsLoading","lastRequestRef","_media","useMediaResults","per_page","baseCssClass","searchLabel","search_items","MediaList","mediaCategories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","_categories","categoriesHaveMedia","canInsertMediaType","useMediaCategories","mediaCategory","__unstableInserterMenuExtension","orderInserterBlockItems","aName","bName","aIndex","bIndex","onHoverPattern","__experimentalInsertionIndex","maxBlockPatterns","maxBlockTypes","showBlockDirectory","prioritizePatterns","prioritizedBlocks","blockTypeCategories","blockTypeCollections","onSelectBlockType","maxBlockTypesToShow","filteredBlockTypes","orderedItems","currentShownBlockTypes","currentShownPatterns","blocksUI","patternsUI","selectedTab","closeButtonLabel","closeSmall","panelRef","panel","NOOP","PrivateInserterMenu","showInserterHelpPanel","__experimentalFilterValue","onPatternCategorySelection","__experimentalInitialTab","__experimentalInitialCategory","setFilterValue","delayedFilterValue","hoveredItem","setHoveredItem","selectedPatternCategory","setSelectedPatternCategory","setPatternFilter","selectedMediaCategory","setSelectedMediaCategory","setSelectedTab","blockTypesTabRef","onInsertPattern","onClickPatternCategory","showPatternPanel","showMediaPanel","inserterSearch","InserterSearchResults","blocksTab","BlockTypesTab","Tips","patternsTab","BlockPatternsTab","mediaTab","MediaTab","tabsRef","TabbedSidebar","InserterPreviewPanel","QuickInserter","hasSearch","setInserterIsOpened","showPatterns","showSearch","onBrowseAll","defaultRenderToggle","hasSingleBlockType","tooltipPosition","InserterMenu","insertOnlyAllowedBlock","expandOnMobile","shouldDirectInsert","allowedBlockType","__experimentalPreferPatternsOnRoot","blockToInsert","adjacentAttributes","previousBlock","parentBlock","lastInnerBlock","getAdjacentBlockAttributes","getInsertionIndex","ifCondition","inserterButtonRef","mergedInserterButtonRef","isToggleButton","ButtonBlockerAppender","GridVisualizer","GridVisualizerGrid","gridInfo","setGridInfo","isDroppingAllowed","setIsDroppingAllowed","onGlobalDrag","onGlobalDragEnd","ManualGridVisualizer","GridVisualizerCell","highlightedRect","setHighlightedRect","gridItemStyles","occupiedRects","rects","_style$layout","_highlightedRect$cont","isCellOccupied","GridVisualizerDropZone","GridVisualizerAppender","useGridVisualizerDropZone","validateDrag","onDragEnter","srcClientId","useDropZoneWithValidation","prevHighlightedRect","GridItemResizer","rootBlockElement","GridItemResizerInner","resizeDirection","setResizeDirection","enableSide","setEnableSide","blockClientRect","rootBlockClientRect","justification","ResizableBox","enable","boundsByDirection","onPointerDown","pointerId","setPointerCapture","onResizeStart","onResizeStop","boxElement","columnGap","rowGap","gridColumnTracks","gridRowTracks","GridItemMovers","blockClientId","_layout$columnStart","_layout$rowStart","_layout$columnSpan","_layout$rowSpan","GridItemMover","chevronUp","chevronDown","useBlockPropsChildLayoutStyles","shouldRenderChildLayoutStyles","parentColumnValue","parentColumnUnit","numColsToBreakAt","defaultGapValue","containerQueryValue","minimumContainerQueryValue","gridColumnValue","resizerBounds","setResizerBounds","updateLayout","isLockedByParent","isEditingAsBlocks","isContentLocked","stopEditingAsBlockCallback","META_ATTRIBUTE_NAME","blockTypeSettings","ignoredHookedBlocks","hookedBlocksForCurrentBlock","blockHooks","hookedBlockClientIds","_hookedBlockClientIds","relativePosition","hookedBlock","candidate","groupedHookedBlocks","initialOpen","vendor","insertBlockIntoDesignatedLocation","innerBlocksLength","isObjectEmpty","useBlockBindingsUtils","updateBlockBindings","currentBindings","newBindings","newMetadata","removeAllBlockBindings","DropdownMenuV2","BlockBindingsPanelDropdown","fieldsList","getBlockBindingsSources","blocksPrivateApis","registeredSources","currentKey","fields","GroupLabel","RadioItem","ItemLabel","ItemHelpText","Separator","BlockBindingsAttribute","sourceProps","getBlockBindingsSource","isSourceInvalid","truncate","isDestructive","ReadOnlyBlockBindingsPanelItems","EditableBlockBindingsPanelItems","trigger","BlockBindingsPanel","bindableAttributes","getBindableAttributes","_fieldsList","canUpdateBlockBindings","getFieldsList","sourceList","filteredBindings","readOnly","placeBlock","gridColumnCount","blockColumnSpan","blockRowSpan","startColumn","startRow","candidateRect","GridLayoutSync","gridLayout","selectedBlockLayout","_getBlockAttributes$l","selectedBlockRect","previouslySelectedBlockRect","previousIsManualPlacement","previousBlockOrder","_attributes$style$lay","bottomMostRow","_attributes$style$lay2","hasEmptyLayoutAttribute","_attributes$style$lay3","useGridLayoutSync","GridTools","__experimentalLabel","addGridVisualizerToBlockEdit","getBorderClassesAndStyles","useBorderProps","borderProps","borderColorObject","getShadowClassesAndStyles","getColorClassesAndStyles","useColorProps","userGradients","colorProps","backgroundColorObject","textColorObject","getSpacingClassesAndStyles","getTypographyClassesAndStyles","typographyStyles","fontFamilyClassName","useCachedTruthy","cachedValue","setCachedValue","useZoomOut","zoomOut","originalIsZoomOutRef","withBlockEditHooks","OriginalBlockEdit","neededProps","createBlockEditFilter","customClassName","contentLockUI","blockBindingsPanel","withBlockListBlockHooks","allWrapperProps","createBlockListBlockFilter","blockStyleVariation","accu","neededAttributes","upperFirst","firstLetter","withCustomColorPalette","colorsArray","withEditorColorPalette","allColors","createColorHOC","colorTypes","withColorPalette","colorMap","colorType","setters","createSetters","colorUtils","getMostReadableColor","colordColor","getColorContrast","maxContrast","settersAccumulator","colorAttributeName","upperFirstColorAttributeName","customColorAttributeName","createSetColor","previousState","colorContext","previousColorObject","previousColor","createCustomColorsHOC","withColors","BaseFontSizePicker","DEFAULT_FONT_SIZES","fontSizeNames","fontSizeAttributeNames","fontSizeAttributeNamesAccumulator","fontSizeAttributeName","customFontSizeAttributeName","createSetFontSize","didAttributesChange","newStateAccumulator","fontSizeAttributeValue","triggerPrefix","useItems","selectedBlockName","filteredItems","blockItem","allowContext","getOptionCompletion","inserterItem","apiFetch","addQueryArgs","letters","order_by","getOptionKeywords","getOptionLabel","subtype","useCompleters","completers","filteredCompleters","linkAutocompleter","blockAutocompleter","hasFilter","completer","Autocomplete","fullscreen","AlignmentMatrixControl","hasFocusBorder","useBlockDisplayTitle","maximumLength","BlockTitle","getEditorRegion","editor","_Array$from$find","_editorCanvas$closest","editorCanvas","querySelectorAll","contentWindow","rootLabelText","hasSelection","rootLabel","blockRef","blockEditor","useBlockOverlayActive","COMMON_PROPS","RESTRICTED_HEIGHT_PROPS","getProps","contentElement","selectedBlockElement","toolbarHeight","blockRect","topOfContentElementInViewport","viewportHeight","clientHeight","restrictedTopArea","hasSpaceForToolbarAbove","isBlockTallerThanViewport","useBlockToolbarPopoverProps","setToolbarHeight","setProps","popoverRef","popoverNode","updateProps","contentView","resizeObserver","addEventHandler","blockView","removeEventHandler","useSelectedBlockToolProps","selectedBlockProps","blockParentsClientIds","capturingClientId","isInsertionPointVisible","EmptyBlockInserter","BlockDraggable","appendToOwnerDocument","cloneClassname","elementId","dragComponent","visibleInserter","_getBlockType","startScrolling","scrollOnDragOver","stopScrolling","dragStartYRef","velocityYRef","scrollParentYRef","scrollEditorIntervalRef","clearInterval","setInterval","newTop","scroll","scrollParentHeight","offsetDragStartPosition","offsetDragPosition","moveableDistance","dragDistance","distancePercentage","PIXELS_PER_SECOND_PER_PERCENTAGE","useScrollWhenDragging","editorRoot","throttledOnDragOver","targetClientId","dropTargetValid","targetRootBlockName","rootAllowedBlocks","getMovementDirection","moveDirection","getBlockMoverDescription","selectedCount","isLast","movementDirection","getMultiBlockMoverDescription","getArrowIcon","getMovementDirectionLabel","BlockMoverButton","moverOrientation","normalizedClientIds","blocksCount","blockRootClientId","firstBlockIndex","lastBlockIndex","isFirstBlock","isLastBlock","blockListOrientation","moverFunction","BlockMoverUpButton","BlockMoverDownButton","hideDragHandle","isBlockMoverUpButtonDisabled","isBlockMoverDownButtonDisabled","_getBlockAttributes","draggableProps","ToolbarItem","DEBOUNCE_TIMEOUT","useDebouncedShowGestures","isFocused","highlightParent","debounceTimeout","timeoutRef","nextIsFocused","clearTimeoutRef","debouncedShowGestures","debouncedHideGestures","shouldHideGestures","useShowHoveredOrFocusedGestures","setIsFocused","registerRef","isFocusedWithin","handleOnFocus","handleOnBlur","BlockParentSelector","_firstParentClientId","parentBlockName","_parentBlockType","nodeRef","showHoveredOrFocusedGestures","PreviewBlockPopover","BlockVariationTranformationItem","setHoveredTransformItemName","BlockVariationTransformations","transformations","hoveredTransformItemName","RestTransformationItems","restTransformations","BlockTranformationItem","BlockTransformationsMenu","possibleBlockTransformations","possibleBlockVariationTransformations","onSelectVariation","priorityTextTransformations","priorityContentTranformationBlocks","priorityTextTranformsNames","groupedPossibleTransforms","currentName","nextName","useGroupedTransforms","hasBothContentTransformations","restTransformItems","replaceActiveStyle","activeStyle","getDefaultStyle","useStylesForBlocks","onSwitch","stylesToRender","getRenderedStyles","potentialStyleName","getActiveStyle","genericPreviewBlock","useGenericPreviewBlock","styleClassName","BlockStylesMenuItems","menuItemText","limit","ellipsizeMode","BlockStylesMenu","hoveredBlock","getMatchingBlockByName","consumedBlocks","transformMatchingBlock","retainedBlockAttributes","getRetainedBlockAttributes","contentAttributes","getBlockAttributesNamesByRole","_accumulator","PreviewPatternsPopover","transformedBlocks","statePatterns","showTransforms","setShowTransforms","useTransformedPatterns","_pattern","getPatternTransformedBlocks","_patternBlocks","patternBlock","BlockSwitcherDropdownMenuContents","hasBlockStyles","isUsingBindings","blockVariationTransformations","activeBlockVariation","useBlockVariationTransforms","selectForMultipleBlocks","insertedBlocks","isSingleBlock","isTemplate","hasPossibleBlockTransformations","hasPossibleBlockVariationTransformations","hasPatternTransformation","hasBlockOrBlockVariationTransforms","connectedBlockDescription","PatternTransformationsMenu","onPatternTransform","onBlockTransform","onBlockVariationTransform","BlockIndicator","BlockSwitcher","hasContentOnlyLocking","invalidBlocks","firstBlockName","_isSingleBlockSelected","_icon","_hasTemplateLock","isSelectionOfSameType","copy","blockSwitcherLabel","blockSwitcherDescription","menuProps","__unstableBlockToolbarLastItem","STYLE_ATTRIBUTES","getStyleAttributes","sourceBlock","recursivelyUpdateBlockAttributes","targetBlocks","BlockActions","__experimentalUpdateSelection","canInsertDefaultBlock","canInsertBlock","canCopyStyles","canDuplicate","pasteStyles","clipboard","readText","__unstableSkipAutop","hasSerializedBlocks","copiedBlocks","usePasteStyles","onDuplicate","onInsertBefore","onInsertAfter","onMoveTo","onGroup","onUngroup","onCopy","onPasteStyles","__unstableBlockSettingsMenuFirstItem","useConvertToGroupButtonProps","blocksSelection","firstSelectedBlock","_isUngroupable","ConvertToGroupButton","displayShortcut","primary","onConvertToGroup","onConvertFromGroup","useBlockLock","canEdit","canLock","ALLOWS_EDIT_LOCKING","getTemplateLockValue","BlockLockModal","setLock","allowsEditLocking","hasTemplateLock","applyTemplateLock","setApplyTemplateLock","isAllChecked","overlayClassName","indeterminate","prevLock","lockIcon","unlockIcon","BlockLockMenuItem","isModalOpen","toggleModal","lockOutline","BlockModeToggle","isCodeEditingEnabled","codeEditingEnabled","ModifyContentLockMenuItem","blockEditorActions","isEmptyString","testString","BlockRenameModal","originalBlockName","onSave","hasOverridesWarning","editedBlockName","setEditedBlockName","nameHasChanged","nameIsOriginal","nameIsEmpty","isNameValid","BlockRenameControl","renamingBlock","setRenamingBlock","_metadata","customName","hasPatternOverrides","newName","BlockSettingsMenuControls","BlockSettingsMenuControlsSlot","isContentOnly","canRename","showLockButton","showRenameButton","convertToGroupButtonProps","showConvertToGroupButton","onlyBlock","BlockParentSelectorMenuItem","isSmallViewport","menuItemRef","gesturesProps","CopyMenuItem","copyMenuItemLabel","BlockSettingsDropdown","__experimentalSelectBlock","currentClientId","shortcuts","getShortcutRepresentation","duplicate","hasSelectedBlocks","updateSelectionAfterDuplicate","clientIdsPromise","updateSelectionAfterRemove","blockToFocus","shouldUpdateSelection","parentBlockIsSelected","localOpen","BlockHTMLConvertButton","BlockLockToolbar","hasLockButtonShownRef","layouts","canInsertStack","canInsertGrid","onConvertToRow","onConvertToStack","onConvertToGrid","BlockEditVisuallyButton","canEditVisually","getAllFocusableToolbarItemsIn","hasFocusWithin","NavigableToolbar","focusEditorOnEscape","shouldUseKeyboardFocusShortcut","__experimentalInitialIndex","initialIndex","__experimentalOnIndexChange","onIndexChange","toolbarRef","isAccessibleToolbar","setIsAccessibleToolbar","determineIsAccessibleToolbar","onlyToolbarItem","childList","subtree","useIsAccessibleToolbar","defaultIndex","initialFocusOnMount","focusToolbar","firstTabbable","focusFirstTabbableIn","useShortcut","focusToolbarViaShortcut","navigableToolbarRef","handleKeyDown","useToolbarFocus","Toolbar","useHasBlockControls","useHasBlockToolbar","isToolbarEnabled","isDefaultEditingMode","hasAnyBlockControls","useHasAnyBlockControls","PrivateBlockToolbar","isContentOnlyEditingMode","toolbarKey","shouldShowVisualToolbar","showParentSelector","editingMode","_isDefaultEditingMode","_blockName","isVisual","_isUsingBindings","_hasParentPattern","toolbarWrapperRef","isMultiToolbar","innerClasses","BlockMover","BlockGroupToolbar","__unstableBlockNameContext","BlockSettingsMenu","BlockToolbar","BlockToolbarPopover","initialToolbarItemIndexRef","isToolbarForcedRef","clientIdToPositionOver","BlockPopover","blockMovingMode","getAccessibleBlockLabel","classNames","dragHandleLabel","showBlockDraggable","isTab","isEscape","isEnter","isSpace","selectionEndClientId","selectionBeforeEndClientId","selectionAfterEndClientId","navigateUp","navigateDown","navigateOut","navigateIn","focusedBlockUid","_getBlockRootClientId","_getClientIdsOfDescen","startingBlockClientId","destRoot","destinationBlockIndex","findPrevious","BlockSelectionButton","Shuffle","_patternName","rootBlock","sameCategoryPatternsWithSingleWrapper","isCorePattern","ComponentToUse","shuffle","nextPattern","numberOfPatterns","patternIndex","getNextPattern","ZoomOutToolbar","setIsInserterOpened","isBlockTemplatePart","isNextBlockTemplatePart","nextBlockType","isPrevBlockTemplatePart","prevClientId","prevName","prevBlockType","trash","ZoomOutPopover","zoomOutModeInserterButtonHovered","setZoomOutModeInserterButtonHovered","isReady","setIsReady","shouldRenderInsertionPoint","ZoomOutModeInserterButton","BlockTools","showEmptyBlockSideInserter","showBreadcrumb","showBlockToolbarPopover","showZoomOutToolbar","isEmptyDefaultBlock","_showEmptyBlockSideInserter","maybeShowBreadcrumb","_showZoomOutToolbar","blockSelectionButtonRef","blockToolbarRef","blockToolbarAfterRef","BlockToolbarBreadcrumb","ZoomOutModeInserters","useTransformCommands","invalidSelection","commands","close","useActionsCommands","command","useQuickActionsCommands","_isGroupable","useBlockCommands","useCommandLoader","hook","EDITOR_STYLE_TRANSFORM_OPTIONS","ExperimentalBlockCanvas","shouldIframe","contentRefProp","iframeProps","resetTypingRef","localRef","WritingFlow","ColorSelectorSVGIcon","ColorSelectorIcon","renderToggleComponent","TextColor","BackgroundColor","BlockColorsStyleSelector","ListViewContext","useListViewContext","AriaReferencedText","Appender","nestingLevel","setInsertedBlock","hideInserter","insertedBlockTitle","maybeInsertedBlock","AnimatedTreeGridRow","TreeGridRow","ListViewLeaf","isDragged","animationRef","enableAnimation","mergedRef","positionInSet","setSize","isExpanded","ListViewExpander","forceToggle","getImage","onContextMenu","onToggleExpanded","ariaDescribedBy","shouldShowLockIcon","images","getImagesFromGallery","getImagesFromBlock","useListViewImages","clearData","pinSmall","ListViewBlockContents","siblingBlockCount","blockMovingClientId","selectedBlockInBlockEditor","AdditionalBlockContent","draggableClientIds","ListViewBlockSelectButton","focusListItem","focusClientId","treeGridElement","getFocusElement","ListViewBlock","displacement","isAfterDraggedBlocks","isNesting","isBranchSelected","showBlockMovers","isSyncedBranch","cellRef","rowRef","settingsRef","settingsAnchorRect","setSettingsAnchorRect","isFirstSelectedBlock","isLastSelectedBlock","allowRightClickOverrides","showBlockActions","expand","collapse","collapseAll","listViewInstanceId","expandedState","treeGridElementRef","getBlocksToUpdate","isUpdatingSelectedBlocks","firstBlockRootClientId","blocksToUpdate","selectEditorBlock","updateFocusAndSelection","shouldSelectBlock","toggleExpanded","settingsPopoverAnchor","clearSettingsAnchorRect","rowItemRef","isSingleSelection","rowRect","scrollContainerRect","useListViewScrollIntoView","blockPositionDescription","getBlockPositionDescription","siblingCount","blockPropertiesDescription","getBlockPropertiesDescription","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","colSpan","dropdownClientIds","currentlyEditingBlockInCanvas","isDeleteKey","_getPreviousBlockClie","blocksToDelete","blockToUpdate","updatedBlocks","newlySelectedBlocks","blockParents","TreeGridCell","withoutGridItem","TreeGridItem","disableOpenOnArrowDown","countBlocks","draggedClientIds","isExpandedByDefault","_expandedState$block$","countReducer","_expandedState$block$2","ListViewBranch","listPosition","fixedListWindow","shouldShowInnerBlocks","showAppender","showAppenderProp","parentBlockInformation","syncedBranch","canParentExpand","blockDropPosition","blockDropTargetIndex","firstDraggedBlockIndex","blockIndexes","filteredBlocks","_expandedState$client","thisBlockIndex","getDragDisplacementValues","itemInView","blockInView","updatedPath","hasNestedBlocks","shouldExpand","isClientIdSelected","isSelectedBranch","showBlock","treeGridCellProps","ListViewDropIndicatorPreview","draggedBlockClientId","listViewRef","blockDropTarget","dropPosition","targetElement","rtl","getDropIndicatorWidth","targetElementRect","windowScroll","distanceBetweenContainerAndTarget","scrollContainerWidth","horizontalScrollOffsetStyle","ariaLevel","_ariaLevel","hasAdjacentSelectedBranch","doc","scrollbarWidth","NESTING_LEVEL_INDENTATION","getNextNonDraggedBlock","nextBlockData","isDraggedBlock","ALLOWED_DROP_EDGES","getListViewDropTarget","candidateBlockData","candidateBlockIndex","blockData","isCursorWithinBlock","previousBlockData","candidateBlockParents","currentBlockData","getCandidateBlockParents","isDraggingBelow","canInsertDraggedBlocksAsChild","innerBlockCount","blockIndentPosition","isNestingGesture","newBlockIndex","isUpGesture","nextBlock","currentLevel","nextLevel","desiredRelativeLevel","distanceBetweenPointAndBlockIndentPosition","desiredParentLevel","getDesiredRelativeParentLevel","targetParentIndex","canInsertDraggedBlocksAsSibling","EXPAND_THROTTLE_OPTIONS","leading","PrivateListView","ListViewComponent","blockSettingsMenu","additionalBlockContent","clientIdsTree","useListViewClientIds","currentGlobalIndex","traverseBlocks","blockList","useListViewBlockIndexes","visibleBlockCount","updateBlockSelection","destinationClientId","focusPosition","isOnlyDeselection","isKeyPress","HOME","END","clientIdWithParents","blockId","startTarget","endTarget","startParents","endParents","startId","endId","getCommonDepthClientIds","updatedSelectedBlocks","selectionDiff","useBlockSelection","setExpandedState","setSelectedTreeId","firstSelectedBlockClientId","selectedTreeId","selectedBlockParentClientIds","useListViewExpandSelectedItem","dropZoneRef","setTarget","maybeExpandBlock","_expandedState","_target","throttledMaybeExpandBlock","draggedBlockClientIds","isBlockDrag","newTarget","useListViewDropZone","elementRef","clipBoardRef","listViewRow","originallySelectedBlockClientIds","getPasteBlocks","treeGridRef","expandRow","collapseRow","focusRow","endRow","_getBlockParents","useListViewCollapseItems","firstDraggedBlockClientId","_blockDropTargetIndex","_firstDraggedBlockIndex","foundBlockIndex","contextValue","useFixedWindowList","useWindowing","windowOverscan","describedById","TreeGrid","onCollapseRow","onExpandRow","onFocusRow","applicationAriaLabel","BlockNavigationDropdownToggle","listView","ListView","BlockStylesPreviewPanel","previewBlocks","onHoverClassName","previewClassName","hoveredStyle","setHoveredStyle","isMobileViewport","debouncedSetHoveredStyle","styleItemHandler","_item$name","onSelectStylePreview","LEVEL_TO_PATH","HeadingLevelIcon","HEADING_LEVELS","HeadingLevelDropdown","targetLevel","instructions","allowSkip","VIEWMODES","Actions","onBlockPatternSelect","CarouselNavigation","handlePrevious","handleNext","activeSlide","totalSlides","SetupToolbar","viewMode","setViewMode","isCarouselView","displayControls","SetupContent","showTitles","containerClass","slideClass","BlockPatternSlide","BlockPatternSetup","filterPatternsFn","initialViewMode","setActiveSlide","usePatternsSetup","onPatternSelectCallback","VariationsButtons","selectedValue","VariationsDropdown","VariationsToggleGroupControl","isContentBlock","hasUniqueIcons","variationIcons","showButtons","colorsFeature","hasColorsToChoose","withColorContext","ColorPaletteControl","exampleDate","DateFormatPicker","format","defaultFormat","dateI18n","NonDefaultControls","_suggestedOptions$fin","suggestedOptions","suggestedFormat","humanTimeDiff","customOption","setIsCustom","setDate","setMonth","getMonth","WithToolsPanelItem","clearValue","ColorGradientSettingsDropdown","_setting$gradientValu","toggleSettings","PanelColorGradientSettingsInner","marginY","PanelColorGradientSettingsSelect","useColorsAndGradientsPalettes","MIN_ZOOM","MAX_ZOOM","ImageEditingContext","useImageEditingContext","ImageEditingProvider","naturalWidth","naturalHeight","onFinishEditing","onSaveImage","transformImage","editedUrl","setEditedUrl","crop","setCrop","setPosition","setZoom","rotation","setRotation","defaultAspect","aspect","setAspect","rotateClockwise","angle","naturalAspectRatio","prevPosition","Image","onload","translateX","translateY","getContext","translate","drawImage","toBlob","imgCrossOrigin","crossOrigin","useTransformImage","saveImage","isInProgress","setIsInProgress","modifiers","source_url","useSaveImage","providerValue","AspectRatioGroup","aspectRatios","ratioToNumber","presetRatioAsNumber","AspectRatioDropdown","aspectRatioIcon","newAspect","restrictPosition","mediaSize","cropSize","rotateSize","restrictPositionCoord","maxPosition","getDistanceBetweenPoints","pointA","pointB","getRotationBetweenPoints","atan2","limitArea","noOp","_max","getCenter","rotRad","_i","Cropper","imageRef","videoRef","containerPosition","containerRef","styleRef","containerRect","dragStartPosition","dragStartCrop","gestureZoomStart","gestureRotationStart","isTouching","lastPinchDistance","lastPinchRotation","rafDragTimeout","rafPinchTimeout","wheelTimer","currentDoc","currentWindow","hasWheelJustStarted","mediaObjectFit","initResizeObserver","isFirstResize","computeSizes","preventZoomSafari","cleanEvents","onDragStopped","onTouchMove","onGestureMove","onGestureEnd","onScroll","clearScrollEvent","onMediaLoad","emitCropData","setInitialCrop","onMediaLoaded","initialCroppedAreaPercentages","croppedAreaPercentages","minZoom","maxZoom","mediaBBoxSize","getInitialCropFromCroppedAreaPercentages","onCropChange","onZoomChange","initialCroppedAreaPixels","croppedAreaPixels","mediaNaturalBBoxSize","mediaZoom","getMediaZoom","getZoomFromCroppedAreaPixels","cropZoom","getInitialCropFromCroppedAreaPixels","mediaRef","saveContainerPosition","containerAspect","videoWidth","_c","_d","videoHeight","mediaAspect","renderedMediaSize","setMediaSize","mediaWidth","mediaHeight","containerHeight","fittingWidth","fittingHeight","getCropSize","_e","_f","onCropSizeChange","recomputeCropPosition","setCropSize","getMousePoint","onTouchStart","onTouchRequest","touches","onPinchStart","getTouchPoint","onPinchMove","onGestureStart","newZoom","setNewZoom","shouldUpdatePosition","onRotationChange","newRotation","onInteractionStart","offsetY","requestedPosition","newPosition","onInteractionEnd","onWheelRequest","zoomSpeed","getPointOnContainer","containerTopLeft","getPointOnMedia","zoomPoint","zoomTarget","getCropData","limitAreaFn","widthInPixels","heightInPixels","sizePixels","computeCroppedArea","getAspect","cropData","onCropComplete","onCropAreaChange","emitCropAreaChange","zoomWithScroll","disableAutomaticStylesInjection","nonce","complete","setImageRef","setVideoRef","objectFit","_g","_h","_j","load","getObjectFit","mediaProps","cropShape","showGrid","containerStyle","cropAreaStyle","mediaStyle","containerClassName","cropAreaClassName","mediaClassName","autoPlay","muted","onLoadedMetadata","touch","ImageCropper","editedHeight","area","newCropPercent","ZoomDropdown","RotationButton","rotateRightIcon","FormControls","ImageEditor","IMAGE_SIZE_PRESETS","ImageSizeControl","imageSizeHelp","imageWidth","imageHeight","imageSizeOptions","isResizable","onChangeImage","currentHeight","currentWidth","updateDimension","updateDimensions","customHeight","customWidth","defaultHeight","defaultWidth","setCurrentWidth","setCurrentHeight","dimension","nextHeight","useDimensionHandler","scaledWidth","scaledHeight","isCurrent","LinkViewerURL","urlLabel","linkClassName","__experimentalPopoverLegacyPositionToPlacement","URLPopover","additionalControls","renderSettings","computedPlacement","isSettingsExpanded","setIsSettingsExpanded","toggleSettingsVisibility","LinkEditor","onChangeInputValue","LinkViewer","onEditLinkClick","InsertFromURLPopover","URLSelectionUI","onChangeSrc","setPopoverAnchor","isURLInputVisible","setIsURLInputVisible","closeURLInput","openURLInput","mediaPreview","notices","disableDropZone","disableMediaButtons","onFilesPreUpload","deprecatedOnHTMLDrop","mediaLibraryButton","setSrc","_value$src","setMedia","lastMediaPassed","newMedia","filteredMedia","urlSlug","cutOffIndex","mediaBlocks","recursivelyFindMediaFromBlocks","uploadedMediaList","alt_text","handleBlocksDrop","onUpload","renderPlaceholder","typesAllowed","firstAllowedType","isOneType","isAudio","isImage","isVideo","placeholderClassName","renderDropZone","renderCancelLink","renderUrlSelectionUI","renderFeaturedImageToggle","renderMediaUploadChecked","libraryButton","defaultButton","uploadMediaLibraryButton","PanelColorSettings","colorSettings","otherSettings","PanelColorGradientSettings","FormatToolbar","hasActive","InlineToolbar","FormatToolbarContainer","editableContentElement","formatTypesSelector","richTextStore","getFormatTypes","interactiveContentTags","prefixSelectKeys","getPrefixedSelectKeys","wrapSelectionSettings","findSelection","nestedSelection","getMultilineTag","multiline","getAllowedFormats","allowedFormats","disableFormats","allEventListeners","pair","startChar","endChar","InputEvent","inputRule","trimmedTextBefore","prefixTransforms","__unstableAllowPrefixTransformations","formatTypes","transformed","accumlator","__unstableInputRule","searchText","preventEventDiscovery","activeFormats","onKeydown","isKeyboardEvent","primaryShift","keyboardShortcuts","keyboardShortcut","inputEvents","__experimentalUndo","_onPaste","__unstableEmbedURLOnPaste","preserveWhiteSpace","pastePlainText","log","pasteInline","__unstablePasteRule","valueToInsert","formats","addActiveFormats","trimmedPlainText","hasActiveFormats","onKeyDownDeprecated","onSplit","disableLineBreaks","onSplitAtEnd","onSplitAtDoubleLineEnd","parentEditable","useEventListeners","propsRef","refEffects","refEffect","cleanups","usesContextKey","EditFunction","activeFormat","getActiveFormat","activeObject","getActiveObject","isObjectActive","activeAttributes","activeObjectAttributes","FormatEdit","valueToHTMLString","RichText","multilineTag","childrenSource","Tag","identifier","multilineTagName","RichTextWrapper","richTextValue","keyboardShortcutContext","inputEventContext","instanceIdKey","removeNativeProps","__unstableMobileNoFocusOnMount","deleteEnter","placeholderTextColor","selectionColor","tagsToEliminate","disableEditingMenu","disableAutocorrection","adjustedValue","adjustedOnChange","originalIsSelected","inlineToolbar","wrapperClassName","autocompleters","withoutInteractiveFormatting","__unstableOnSplitAtEnd","__unstableOnSplitAtDoubleLineEnd","__unstablePastePlainText","__unstableDisableFormats","anchorRef","disableBoundBlock","bindingsPlaceholder","bindingsLabel","_fieldsList$relatedBi","relatedBinding","blockBindingsSource","blockBindingsContext","_disableBoundBlock","canUserEditValue","bindingKey","_bindingsPlaceholder","_bindingsLabel","shouldDisableEditing","adjustedAllowedFormats","hasFormats","baseSelection","prepareHandlers","valueHandlers","changeHandlers","allFormatTypes","interactive","keyedSelected","__experimentalGetPropsForEditableTreePreparation","richTextIdentifier","__experimentalCreatePrepareEditableTree","__experimentalCreateOnChangeEditableValue","dispatchers","__experimentalGetPropsForEditableTreeChangeHandler","useFormatTypes","removeEditorOnlyFormats","formatType","removeFormat","richTextRef","useRichText","__unstableFormats","__unstableText","changeHandler","__unstableIsSelected","__unstableDependencies","__unstableAfterParse","__unstableBeforeSerialize","__unstableAddInvisibleFormats","autocompleteProps","useAutocompleteProps","useBlockEditorAutocompleteProps","record","previousTextRef","useMarkPersistent","__unstableSlotNameProvider","suppressContentEditableWarning","PrivateRichText","fromDOM","__unstableCreateElement","NewComponent","RichTextMultiline","PublicForwardedRichTextContainer","contentProps","EditableText","__experimentalVersion","remainingProps","ResponsiveBlockControlLabel","desc","accessibleLabel","toggleLabel","onIsResponsiveChange","renderDefaultControl","renderResponsiveControls","isResponsive","defaultLabel","viewports","toggleControlLabel","toggleHelpText","defaultControl","RichTextShortcut","onUse","onUseRef","RichTextToolbarButton","shortcutType","shortcutCharacter","fillName","__unstableRichTextInputEvent","callbacks","selectIcon","editIcon","unitsProp","BaseUnitControl","URLInputButton","toggle","submitLink","buttonLabel","arrowLeft","LINK_DESTINATION_NONE","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_ATTACHMENT","NEW_TAB_REL","ImageURLInputUI","linkDestination","onChangeUrl","mediaUrl","mediaLink","linkTarget","linkClass","rel","showLightboxSetting","lightboxEnabled","onSetLightbox","resetLightbox","setIsOpen","urlInput","setUrlInput","stopEditLink","getLinkDestinations","linkDestinations","advancedOptions","updatedLinkTarget","newLinkTarget","updatedRel","rels","relVal","getUpdatedLinkTargetSettings","linkEditorValue","hideLightboxPanel","showLinkEditor","linkIcon","openLinkUI","onFocusOutside","autocompleteElement","closeLinkUI","linkDestinationInput","onSetHref","selectedDestination","lightbox","enabled","startEditLink","PreviewOptions","useResizeCanvas","deviceType","actualWidth","updateActualWidth","resizeListener","getCanvasWidth","device","deviceWidth","marginVertical","marginHorizontal","contentInlineStyles","SkipToSelectedBlock","MultiSelectionInspector","words","wordCount","TAB_SETTINGS","cog","TAB_STYLES","TAB_LIST_VIEW","AdvancedControls","PositionControlsPanel","setInitialOpen","multiSelectedBlocks","PositionControls","InspectorControlsGroups","SettingsTab","showAdvancedControls","StylesTab","borderPanelLabel","BlockStyles","allowlist","InspectorControlsTabs","initialTabName","useIsListViewTabDisabled","useInspectorControlsTabs","bindingsGroup","borderGroup","colorGroup","defaultGroup","dimensionsGroup","listGroup","positionGroup","stylesGroup","typographyGroup","effectsGroup","listViewDisabled","listFills","hasListFills","hasStyleFills","advancedFills","settingsFills","showTabs","tabSettings","getShowTabs","blockInspectorTabs","createPrivateSlotFill","BlockInfo","BlockQuickNavigation","BlockQuickNavigationItem","BlockStylesPanel","BlockInspectorLockedBlocks","topLevelLockedBlock","contentClientIds","BlockInspectorSingleBlockWrapper","wrapper","AnimatedContainer","blockInspectorAnimationSettings","animationOrigin","BlockInspectorSingleBlock","availableTabs","BlockVariationTransforms","BlockInspector","showNoBlockSelectedMessage","_selectedBlockClientId","_selectedBlockName","_blockType","globalBlockInspectorAnimationSettings","useBlockInspectorAnimationSettings","isSelectedBlockUnregistered","getUnregisteredTypeHandlerName","__unstableUseClipboardHandler","CopyHandler","PrivateInserterLibrary","MultiSelectScrollIntoView","isIE","arrowKeyCodes","initialTriggerPercentage","useTypewriter","scrollResizeRafId","onKeyDownRafId","caretRect","onScrollResize","computeCaretRectangle","maintainCaretPosition","isSelectionEligibleForScroll","currentCaretRect","scrollY","scrollContainerY","relativeScrollPosition","editableNodes","isLastEditableNode","scrollContainerHeight","addSelectionChangeListener","computeCaretRectOnSelectionChange","RenderedRefsContext","RecursionProvider","previouslyRenderedBlocks","newRenderedBlocks","addToBlockType","useHasRecursion","DeprecatedExperimentalRecursionProvider","DeprecatedExperimentalUseHasRecursion","InspectorPopoverHeader","PrivatePublishDateTimePicker","showPopoverHeaderActions","isCompact","currentDate","additionalProps","datePickerProps","startOfWeek","l10n","currentTime","DatePickerComponent","TimePicker","DateTimePicker","__experimentalGetElementClassName","useHasImageSettingsPanel","ImageSettingsPanel","lightboxChecked","newSetting","AdvancedPanel","cssError","setCSSError","customCSS","TextareaControl","spellCheck","globalStylesChangesCache","translationMap","h1","h2","h3","h4","h5","h6","getBlockNames","memoized","len","searchCache","maxSize","memoize","isObject","deepCompare","originalObject","parentPath","allKeys","diffs","changedPath","getGlobalStylesChangelist","changedValueTree","curr","translation","keyArray","getTranslation","getGlobalStylesChanges","changeList","changesLength","maxResults","changeValues","changeValuesLength","joinedChangesValue","addValuesForElement","addValuesForElements","StrictMode","addValuesForBlocks","getSaveElement","DEFAULT_SCALE_OPTIONS","ScaleTool","scaleHelp","reactPropsRegex","isPropValid","StyleSheet","_insertTag","tags","nextSibling","firstChild","isSpeedy","speedy","ctr","_proto","hydrate","createTextNode","createStyleElement","sheet","sheetForTag","insertRule","indexof","begin","characters","return","peek","caret","alloc","dealloc","delimit","whitespace","escaping","commenter","MS","MOZ","WEBKIT","COMMENT","DECLARATION","KEYFRAMES","hash","compile","rulesets","points","scanning","ampersand","reference","declaration","identifierWithPointTracking","fixedElements","compat","isImplicitRule","toRules","getRules","parentRules","removeLabel","defaultStylisPlugins","ssrStyles","_insert","stylisPlugins","inserted","nodesToHydrate","attrib","currentSheet","finalizingPlugins","serializer","shouldCache","registered","unitlessKeys","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","WebkitLineClamp","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","processStyleValue","cursor","handleInterpolation","mergedProps","interpolation","__emotion_styles","interpolated","createStringFromObject","previousCursor","labelPattern","EmotionCacheContext","ThemeContext","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","__emotion_forwardProp","createStyled","identifierName","targetClassName","__emotion_real","baseTag","__emotion_base","defaultShouldForwardProp","shouldUseAs","Styled","finalTag","classInterpolations","rawClassName","stringMode","strings","isStringTag","registerStyles","finalShouldForwardProp","ele","possiblyStyleElement","withComponent","nextTag","nextOptions","SingleColumnToolsPanelItem","_styled","WidthHeightTool","_value$width","_value$height","onDimensionChange","nextDimension","DEFAULT_SIZE_OPTIONS","getRichTextValues","skipFilters","fromHTMLString","PrivateQuickInserter","ResizableBoxPopover","resizableBoxProps","LayoutStyle","layoutStyle","BlockRemovalWarningModal","onConfirmRemoval","useLayoutStyles","DimensionsTool","defaultAspectRatio","scaleOptions","defaultScale","unitsOptions","tools","lastScale","setLastScale","lastAspectRatio","setLastAspectRatio","showScaleControl","nextAspectRatio","nextScale","ResolutionTool","__unstableBlockStyleVariationOverridesWithConfig","overridesWithConfig","newOverrides","overriddenClientIds","configStyles"],"sourceRoot":""} \ No newline at end of file diff --git a/gutenberg.php b/gutenberg.php index cc428e7b..d949cb28 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -14,7 +14,7 @@ ### BEGIN AUTO-GENERATED DEFINES define( 'GUTENBERG_VERSION', '19.3.0' ); -define( 'GUTENBERG_GIT_COMMIT', '503c484066cf0798a603039766affff44e44d99b' ); +define( 'GUTENBERG_GIT_COMMIT', '87b1251e3bc7cca989a928e0f290654332ea2174' ); ### END AUTO-GENERATED DEFINES defined( 'GUTENBERG_MINIMUM_WP_VERSION' ) or define( 'GUTENBERG_MINIMUM_WP_VERSION', '6.5' );