8889841cPK+K[z_:: test/index.jsnu[/** * Internal dependencies */ import { getRegisteredBlocks, registerCheckoutBlock, innerBlockAreas, } from '../index'; describe( 'checkout blocks registry', () => { const component = () => { return null; }; describe( 'registerCheckoutBlock', () => { const invokeTest = ( blockName, options ) => () => { return registerCheckoutBlock( blockName, options ); }; it( 'throws an error when registered block is missing `blockName`', () => { expect( invokeTest( { metadata: { name: null, parent: innerBlockAreas.CHECKOUT_FIELDS, }, component, } ) ).toThrowError( /blockName/ ); expect( invokeTest( { metadata: { name: '', parent: innerBlockAreas.CHECKOUT_FIELDS, }, component, } ) ).toThrowError( /blockName/ ); } ); it( 'throws an error when registered block is missing a valid parent', () => { expect( invokeTest( { metadata: { name: 'test/block-name', parent: [], }, component, } ) ).toThrowError( /parent/ ); expect( invokeTest( { metadata: { name: 'test/block-name', parent: 'invalid-parent', }, component, } ) ).toThrowError( /parent/ ); expect( invokeTest( { metadata: { name: 'test/block-name', parent: [ 'invalid-parent', innerBlockAreas.CHECKOUT_FIELDS, ], }, component, } ) ).not.toThrowError( /parent/ ); } ); it( 'throws an error when registered block is missing `component`', () => { expect( invokeTest( { metadata: { name: 'test/block-name', parent: innerBlockAreas.CHECKOUT_FIELDS, }, } ) ).toThrowError( /component/ ); } ); } ); describe( 'getRegisteredBlocks', () => { it( 'gets an empty array when checkout area has no registered blocks', () => { expect( getRegisteredBlocks( innerBlockAreas.CONTACT_INFORMATION ) ).toEqual( [] ); } ); it( 'gets an empty array when the area is not defined', () => { expect( getRegisteredBlocks( 'not-defined' ) ).toEqual( [] ); } ); } ); } ); PK+K[=4mmindex.tsnu[export * from './get-registered-blocks'; export * from './register-checkout-block'; export * from './types'; PK+K[K.UUregister-checkout-block.tsnu[/** * External dependencies */ import { registerBlockComponent } from '@woocommerce/blocks-registry'; /** * Internal dependencies */ import { assertBlockName, assertBlockParent, assertOption, assertBlockComponent, } from './utils'; import { registeredBlocks } from './registered-blocks'; import type { CheckoutBlockOptions } from './types'; /** * Main API for registering a new checkout block within areas. */ export const registerCheckoutBlock = ( options: CheckoutBlockOptions ): void => { assertOption( options, 'metadata', 'object' ); assertBlockName( options.metadata.name ); assertBlockParent( options.metadata.parent ); assertBlockComponent( options, 'component' ); /** * This ensures the frontend component for the checkout block is available. */ registerBlockComponent( { blockName: options.metadata.name as string, component: options.component, } ); // Infer the `force` value from whether the block is locked or not. But // allow overriding it on block registration. const force = typeof options.force === 'boolean' ? options.force : Boolean( options.metadata?.attributes?.lock?.default?.remove ); /** * Store block metadata for later lookup. */ registeredBlocks[ options.metadata.name ] = { blockName: options.metadata.name, metadata: options.metadata, component: options.component, force, }; }; PK+K[3registered-blocks.tsnu[/** * Internal dependencies */ import type { RegisteredBlocks } from './types'; const registeredBlocks: RegisteredBlocks = {}; export { registeredBlocks }; PK+K[Oyc c utils.tsnu[/** * External dependencies */ import { isObject } from '@woocommerce/types'; /** * Internal dependencies */ import { hasInnerBlocks } from './get-registered-blocks'; /** * Asserts that an option is of the given type. Otherwise, throws an error. * * @throws Will throw an error if the type of the option doesn't match the expected type. */ export const assertType = ( optionName: string, option: unknown, expectedType: unknown ): void => { const actualType = typeof option; if ( actualType !== expectedType ) { throw new Error( `Incorrect value for the ${ optionName } argument when registering a checkout block. It was a ${ actualType }, but must be a ${ expectedType }.` ); } }; /** * Validate the block name. * * @throws Will throw an error if the block name is invalid. */ export const assertBlockName = ( blockName: string ): void => { assertType( 'blockName', blockName, 'string' ); if ( ! blockName ) { throw new Error( `Value for the blockName argument must not be empty.` ); } }; /** * Validate the block parent. * * @throws Will throw an error if the block name is invalid. */ export const assertBlockParent = ( blockParent: string | string[] ): void => { if ( typeof blockParent !== 'string' && ! Array.isArray( blockParent ) ) { throw new Error( `Incorrect value for the parent argument when registering a checkout block. It was a ${ typeof blockParent }, but must be a string or array of strings.` ); } if ( typeof blockParent === 'string' && ! hasInnerBlocks( blockParent ) ) { throw new Error( `When registering a checkout block, the parent must be a valid inner block area.` ); } if ( Array.isArray( blockParent ) && ! blockParent.some( ( parent ) => hasInnerBlocks( parent ) ) ) { throw new Error( `When registering a checkout block, the parent must be a valid inner block area.` ); } }; /** * Asserts that an option is of the given type. Otherwise, throws an error. * * @throws Will throw an error if the type of the option doesn't match the expected type. * @param {Object} options Object containing the option to validate. * @param {string} optionName Name of the option to validate. * @param {string} expectedType Type expected for the option. */ export const assertOption = ( options: unknown, optionName: string, expectedType: string ): void => { if ( ! isObject( options ) ) { return; } const actualType = typeof options[ optionName ]; if ( actualType !== expectedType ) { throw new Error( `Incorrect value for the ${ optionName } argument when registering a block component. It was a ${ actualType }, but must be a ${ expectedType }.` ); } }; /** * Asserts that an option is a valid react element or lazy callback. Otherwise, throws an error. * * @throws Will throw an error if the type of the option doesn't match the expected type. */ export const assertBlockComponent = ( options: Record< string, unknown >, optionName: string ): void => { const optionValue = options[ optionName ]; if ( optionValue ) { if ( typeof optionValue === 'function' ) { return; } if ( isObject( optionValue ) && optionValue.$$typeof && optionValue.$$typeof === Symbol.for( 'react.lazy' ) ) { return; } } throw new Error( `Incorrect value for the ${ optionName } argument when registering a block component. Component must be a valid React Element or Lazy callback.` ); }; PK+K[nGGtypes.tsnu[/** * External dependencies */ import type { LazyExoticComponent } from '@wordpress/element'; import type { BlockConfiguration } from '@wordpress/blocks'; import type { RegisteredBlockComponent } from '@woocommerce/types'; export enum innerBlockAreas { CHECKOUT = 'woocommerce/checkout', CHECKOUT_FIELDS = 'woocommerce/checkout-fields-block', CHECKOUT_TOTALS = 'woocommerce/checkout-totals-block', CONTACT_INFORMATION = 'woocommerce/checkout-contact-information-block', SHIPPING_ADDRESS = 'woocommerce/checkout-shipping-address-block', BILLING_ADDRESS = 'woocommerce/checkout-billing-address-block', SHIPPING_METHOD = 'woocommerce/checkout-shipping-method-block', SHIPPING_METHODS = 'woocommerce/checkout-shipping-methods-block', PICKUP_LOCATION = 'woocommerce/checkout-pickup-options-block', PAYMENT_METHODS = 'woocommerce/checkout-payment-methods-block', CART = 'woocommerce/cart', EMPTY_CART = 'woocommerce/empty-cart-block', FILLED_CART = 'woocommerce/filled-cart-block', CART_ITEMS = 'woocommerce/cart-items-block', CART_CROSS_SELLS = 'woocommerce/cart-cross-sells-block', CART_TOTALS = 'woocommerce/cart-totals-block', MINI_CART = 'woocommerce/mini-cart-contents', EMPTY_MINI_CART = 'woocommerce/empty-mini-cart-contents-block', FILLED_MINI_CART = 'woocommerce/filled-mini-cart-contents-block', MINI_CART_ITEMS = 'woocommerce/mini-cart-items-block', MINI_CART_FOOTER = 'woocommerce/mini-cart-footer-block', CART_ORDER_SUMMARY = 'woocommerce/cart-order-summary-block', CHECKOUT_ORDER_SUMMARY = 'woocommerce/checkout-order-summary-block', } interface CheckoutBlockOptionsMetadata extends Partial< BlockConfiguration > { name: string; parent: string[]; } export type RegisteredBlock = { blockName: string; metadata: CheckoutBlockOptionsMetadata; component: RegisteredBlockComponent; force: boolean; }; export type RegisteredBlocks = Record< string, RegisteredBlock >; export type CheckoutBlockOptions = { metadata: CheckoutBlockOptionsMetadata; force?: boolean; component: | LazyExoticComponent< React.ComponentType< unknown > > | ( () => JSX.Element | null ) | null; }; PK+K[Y%%cc inserter.pngnu[PNG  IHDR,iGiCCPICC Profile(1KBa \Ĕh2"DԖWz/T-EC5MPC4/0$(ier@["o6 ̫DRu<30%FWwr֍8~ә^J 0Z6`؈'HvLrõvg%p9- J~W,N823ۦpQTlTCB3BAyՀ?0ߝvfc0x ]f.pUEh}ҴփjYp\B˰eH^?VeXIfMM*iDASCIIScreenshotWiTXtXML:com.adobe.xmp 496 796 Screenshot z)IDATxyCJf&STr2Se~+?LEe,,K2 ! $A@$B1;,6 $KW/t7Suy{nKvJŚ5kq lm۶t+ѣGwܑΞ=yϝ;7}]wcǎy(8DDDD;8p`1cFӳAϿ?twիW 81bDꫯz""""7.9~ z<; |4hРɷڃ# &,X݋ʕ+ G3䓼eҤIW^ۯX"/{O^z){I;wd͛77۰o Ө˖-˿ /ɗֱݻwDV#,=s|o!D!""""0}6mZ6ʼne}GrE l \aK.2 Uo˗/!04+kֲKbn#$@` 4o޼b7`+C舉1ce6wIuJag(c88E#cرmWz&8@ ylԨQ9"6Vʁ V\Uq2lذPp(8DDDD U C<69b<]yqYtϩSz+}y^t… ѣ:% s<O40>̿ߟ=?{lMW_M;wLٓ͜93ڵf͚,Llْ8x4a„6yM4)oC9C裏n +>fa^bȊ+OܹshpBڴiSm]=̙{/-]M3K" Qptر4{.M9Ο? fZmR[{r>|8Ǝ{ʴm۶\Z:K/ֿ]Žj_jU! X|y'ele^Ppt?Iݒ[9r$8y|gjoV_O>:  \f͚ߟ/_N3fHǏ/^ivoDLF-(8z@p 4?|l:|$"OVpt?񢍀98sLsOMPRp""ޝ|Oc0oYg߿)SiyzN>@cC=$8xr./+ywo>)oXLj#*̣wTX{6lǖ}Y֮]jRg{o_2ߟzyW5õ#ؿ^ܝ?m^>Gy;Zخo@W>bfUST|m8GD rlK$uZyG)n3$""}Lp.kJBtgٻJp XB@DGdz8zJpa2kc]41رcGѺ z@*J i&8 0W$zʡÁOa+ۇ@"x ,ȭpC nvЛ*.U[i߯3.UMpߨ<&?ZdIKڋPDu&D+~= Qͧ$+Y##_Y=k%.pG(^C/(8٩gˁKU=" tZ1L#!]&(tj&8*_1phnU(!q!o󛞗ޖ01[̩QQ/3T=RzIX u[_  RV1hqFW(ZYFG#8 )ᦅ/Oh0aBZ׬YΜ9f={rj;3\2ptw{q uADDVrlc?C鮻J !C1cƴDoѢE C9>4xt?0/i-]c۶m;r[Y}' C9~lшݻw/o8ټysC޶WN&MJJ+V1'Nkz({osqfVnbSN…55lذ~cϛ7y.[F(8DDD:ܹsӀ?}t61ԏ?fΜ:tl[vڕ7lؐ7R0X|y[<:u'7uǎi޽Y=:{'jS^{oD Ppx}"""qu=f̘vZz00ޫٶ zkܹ3&c.Y]qڵ_Kaso ~Y7vM6։CQptgccǎM#Gl W$˫ٶXti6\#My'8}ݼ߁1#^~Vjժ,8OQp(8> o߾lhoٲ襘>}z &}Gy[o yzGӥK;w<=ܹsc={s,ƤIrOȑ#Ӊ'~a{:"NC[Aw_6_|t6&L۷g~رy5k-[xϔ)Sr!@:r\!:m ~P e}C!""""z)=0 {`СiڴiyҥKs^!,Ο?ߩ7-У()8""""K@,Y$Ǯ]zz rD UE lR80 /EЈ#0CDDDDn1|Ie^5Ǹ/kUqfcYD У@֭[FaϘ1& yٖ?Z*}wMG0{9n3ꫯԩS9$KCDDDDn˗/g!QTΝkM$ pi*#BB(t渥6lX]AxbBpP6EÇv/_!""""=9rڵ1eU ǥ^*]w % ر#}{K_қoiHU,XFx≴rx@2$9vv/| K/eڵmu/v` ,] >+g/}K~~cƌVv g \?Am۶[[}f'YJ0)Sl Ղ#KEdFRn8>3fvQ-_veGy7}"""""}@pt`TԨ:uĽ+fѬBj%@^% ߵouO@Fonٲ@DDDD͸udb;0L aתnWlR;6=&3gL_Wpw]x1=SYD˫gYlGOáCr,Wռ2?j4J_zt4x|䅀!%`H8GrP(,Q/&8$ W^y%MǹPgK.suHV^}õ`~ؾ1aoM4uZ|@DDDDO`H +yj<,&I{x}G}|,`(7l%<0qb V&a' C?>~I9M'5-!% yذaCdß;7R?d0) 3pK,I\G\3\LPĹ,(ңؿ;G?~̱-Ztú ahb\ X^csg2,xQ& (oť [_\ouBs/7zWsb2U ׮yO=@DDDD>̷8-&9x`6 ?? Mz0RO/A3QCpĶ;Gu譠+ZUpPF;!*֭kssް-cȑ7,ިR7̙96=0\\[u(8a`5+D޽{e |{Ø#צ(qje.{bַ{Y u;}[B8'_R*8>QpCVed3'JAF{e#?A|Jfw@/0#$FB|tFpt} """臂0 mǍMm|"XfJ,?~ί7 ٦ިZ[tVpt} """臂zAڈ0w 0G E P-SE`V~#X ۓ](?FNH_%>qJA<m&8>QpB0I 5PG.73diLnJ+|9 -#ZΝ;k¸54q="Q5l1CL@06C2M]g;E5:;eʔvU|6OoVc8Ζe1F^իDDDD0Gq z Tčœ'On3%ZzE`Yϝކ:`ؒ'<#-ń0Nl-;&c[)i\XN >/GziӦC!J`3sQWe?fvT=v)8UU'>D:Q?E1$ruh[F(iTu(8z1W\.7ÇZOKy:EwnA,: e ި~d+9@<6·;m 7VΝrq(8DDDDDD"""""CDDD!M&ӭM q"""""CDDDDD"""""}Y~}zg}ݗo;#ۿMNO>dZbEneCDDDDZcƍ f;NZl' i^{&$z衴dɒt6~i:sLZzu3fLm{ gΜ95hѢ[vm뮻~'O"E!""""mٺukMlRQ8 _x* W … n[˗߰aCq+U""""o⍄ԩSwn^ƍKCDDD /d0]^z4|cӦM9ѣG[GB$[5~a+ J=ܓE… nZpېCD^ʙ]g)8D"""?4G*(8<}ɵ|fAC!""" .QFioX܏>({iyh\o4⊂C!""" ΝWsέBiĈ7lPpM'X[n7v 4^<OWVp(8DDD z9b9sDGG\֮]]o]r}Yڹsgzʕ+%}f; ot1_{`%K'Om>t̙"=f̘=\7!1r֐!C1zao~QuԨQСCW^Mk֬.|CM|Im$IQָq'nm~уeRpA:}=u&p"(};I˖-2eJ6@=Z3Jz{S3lr4hР|́u `P'͛77<#U=|^?mڴڲX`(8ꋍԡ =X~}zg}ݗo ۿͭO>dZbEޏ`nȑi߾}`GKĉ$?Ppt!NO?su[VA>!;;t?1,Yu& .{` LEǭ3|Q I& A Ty({67cڼ||ڰdlӡ3Ҏ=~aJ:ii˪I4):+ٵ:xDvm_{m0J-oǎ7- zBYoGC#y~v,]i|bW)|n+GSႃPy0`Jtޖew%b+h22X>` dѕFOK 6Q{77&8 3< 6=z#H|7ZCשZp'ɥ;/JF^hV\drAw `2kvQ7Wǀ,=X]1i Ғr%ڵ͋+` z½lܷU÷=qpnF>אe1mA;тW<ǸDFq@#c\C r?4͞i^"΁e凢Yλtg9xw϶SNqrrl{)G<[e4F＀{-A :(0q3!^VΝnݺqȭYlw!8NڷkEz{i҇ec3;_MwN=0'ny&jڿK,=A4tx7a@rw:7z ]Nw=Q_T*v4Dh~/8xG`K( >r!rA<<| '̎ !.80f"F;#G !pm.]zq؇rs#A}@<ëZS}ګ0:H0N9( u7?OEi9~7 `(]Q(CQfe#q?DNy#|ثAٶGtϾ4qchE޽{^cRh ÷{Va@bE]H9C4j! 03 r[=|ip?F^>uy:R=+27;=m'h,~e#tz}Ws#gzƽJ]6z<?~|{x/joxq!|L@_[+8bwϞKH6?xlNtt_KM:/{p^ڷuZڸl|:iO#'Od&8oh9D)a<рU},{K\4hC_7 sFc[5b]j"h C>j6 spJ⃏R>>(RE9 # tjA E#3Z@˖^$PQbܰ<\>/F٩40:0bYW uUBPa 7޼xz@,{yoZFuGW8-Qhs w0K÷=\uYgEo3=NKVS:=/RUk^ GX mޛ=+aX*8BK~v1Xڻ}~:tUO{g3 tt|̴uՄ{ӋiOL#[FQ\3&K4sCTu֭FG/bHѲw|06.R=ljAyXOl[vMY6ΡǍG5Ekj핧Y`WR&q3cEt@tEk{I!܊bVY9Za+[]I /ߨ/Zgz~;*84G t}|pz?ʮ9n&8\9/1`5# ˸Vuw>q,|u[fJ=m^S;D rR%nŤkGE}T5p^$8;ܙ~tjӻ&HV03+>j:ǫyYofڽ~RھnJڻ}nڻws27 R/h\z?|K{z8 0ph `\\]-8 0 p;cæZ_G{)iVoê( hI r|Z11jBpDJ8XBο^0ZJV_ #z_R1iupC([bq尣U÷=ZOpPB`GKs 4ar}I_+j/eQw MR͞zw]+>.UƳ5f UV[dKƮe[\Ϩèj 4 .fw}){{r:tjSFSHg\Og3!}3m/WOL{vdE:qv&v+NRD=ˏX J+w+tTpT]4pEV~4KfhZ|}fG401&WgG^5t(o梃SDο\e@jGe4v])Z;](ܸhkv*[#(E$PTG~Yd3U1KpzoqAy5ziNGe|}n. FIkQe ,Fm^T6(8zx왴wt|̎gҩϤc['+JN{%J:MJzgtlS Ӧec?LkW~arO47G_" .$GjWcH+ZBK>zU<F1#BP z@cLh m4$q0X;*8+OIzµ$>G#ZiɌ m -1Uٙ3Xfߊc!H]vD;\]FLFhfTOpo>9cWݣ1C)& q'HU\ΗgkK}N=TG(sq !zbRx!(O,}óL܏)x,Ryt(dwj,!96#Q2RDžΙi߶ӱ-?LvLLw>lؾvr:Ξ/ۦ?~:]7!^;>\tXɴ|Of;6#ǏffA"r ɯ!񡬎M;FTWUS]kCdB ibdt2P| Xht>O_>|@ԗ#\ТNzc WF`OyXiiDUϧǸ!b,F\F$Z,aq >οZ(lq iOpDK}(TuC徊VzH(S4G>u!+>;ƒIRgezX:zRpD~\>Hp4{Cp!b`V꽕g%w9jI{l>BCpD{810[zzsV,F WuK~]k#Io޷礣?~2o}:81[:!m3iǚڧO7?mv}*m^9!''Ջ' '}~N9N좂CDyjGjlBw==!otl rDF`8BY# d: BL:&+5-0iT=ޑQP/Y{!JîlO~ꪽ{uOC߭c`?KF׿#i׾sD\Mzo$Mjڻg[}zTx}w΋k%heLvq&zʹgi֙i߶yio׽~jJڱeĴvI'dmk&m맧m椷,N[6z6m]dڰ⹴cN鸨Qp?01q;)瓐E=7Gg&z@pbz{i]im'c'ړvwwu͔a9.T䘍go/I{LNOGN{K;OO[V0YZ:q欂CD!? pCi43(8_$\pr&Ep<yK 3OvXvoکiӊi뚩퍯]֥'wegE}/:r0ڹ&ٷ#sCD!?!xIz3KBq"pttr+黂mt9:6ciOvL۶.J;-O2_)(YxBg CDDDn[^:}ӧӉwM'NοD (8=$Us툂C!""" ^*8٭3 #s%d$]2̗g5ȃ:y2?p=.ÍFc]+I̽U8'c"""" Ĥ\Ræ3gW\Y[μTÆ hbba $ aZj3Oy~IIC1Mg擊!i߈JqEݔ1q(8DDDD '#{̙u+1 +j˙q &ҬaN/ q.Z(c F˗7-sL$ g>ND[9s4<2#eG+֑u2(8DDDDq[ fZmS t*(ٳ 0ޣeСiʔ)uO 7rErH= 64Ln^ 0 s_{{ƍ7J"""" |.S ɓ'|:ܟ9=4ܔ,YRv QFSN&zA⺙(͋s@b;w߸z:eBoJk׮m~_!8+b-[Ϛ5+>tP<~}"""" zJ=UQ ZƎ0_b!{챜۳[ҤI:z8.]Z۶￿nvW z~"=%z8vڕ8/QpR,*DDDD[&cD' 窛R=AO1- .C0]0N1fda(\tӳ)~>H [ARDDDDѓ5cS"QHi-g`8 Y?~ڄ|Fg#rDg[>5_zu^OüyrLIU8}t^GyX\ F -bFjD]qԐ8n3ږ(8""""Ȧg k 0މj bp/""]7c &D}_n3-#zYbj 9UGjHZtQo֭RpSpHo"eo =09`GXAĜ]'U%j4(8:~t l etrcLiFY`Ģ{*83Gp˖-uMިfwGDDDDZýă?! >/8"hil0pt ><#"F] Er1cA݂K"؜? U,?rHMp0A)ʀz#FP G?aW N_uRp6 kI:G?,Cm,8b♪%'NlRE1Z=""""c>}z7: iӦeX4yB{<  WOp0wp""""" [(8}ͩרrf9rdxGkہ(yDLlj'*@{رy""""# Q:2!L>3g݆q}",_fMqwˇ V\3 2QL\ e˖wޝ'ElwἜر#f鹈ƌƍy>QSNyS(8""""=!80C`2$={6HG 012{Icǎ<=z4w}=u'x"=:g_DE>a2ߟE#F|> /(2S֩S UV^ SvJ8Asr e 1˗/(8 ^"8.]EJ{ֶkEpL4M޸Pq\|r1cF?~|^xӳ@PT)G"b0("8֮]͠Ppt@ )&+srKٝJ3ALqEoE,Oc)]bE|0!8*8#͛7ܨJ ŦL7K .e!nN@:"8&GL (rLX ,r\r%C{ѢE9c}  ҥjÆ .mz5 bΝE CF"-]44.U38uTM*8vڕ8q{yƍk#DQ{SCDDD۸S]p!3&>a#pJ{z6q,ԞXlYvggc9GY^ܳ7qvl_Op,Y Ppt c?NFqa#U8 ܶcǎmDEGn\,?|3gά`1Cc/fzࡇfAOEG̟??pASBF*b8pbnY>|pڳgOmqzg=LE/L  B (q׮]&2^ E!"""үG/YAS"\b9 e)!\~M~@D @<7S1BVEMĄ] aU l޽ HWAk~)] n;w.,T'u_zئ =-6ǭs7TTQVܴ xQp(8DDDD䦨4. t 'ONӧO"Np?p0 1*ɟ~-|d2LK|{-QpC y_cLbc2L&SO$=|):DDJ$L&d:|MQp3A#3 6Q L&dķo"I"" ~&8uȭ D$G?ti;*-RpC!""Qp(8DDD!"Pp(8DDQp(8""Qp(8DDD"" p_9sDHΝ;믿V\goG;#={ʶo߾4xt /C!""˗C=Ð!Cӝwޙ>|Kqr4hP޼y^4CDDD!})S+zRlٲ͛kfϞ"DQp-ʕ+ـ_`AmΝ;F0`@;wn. DԩS>>üwM{oZn]g„ 9k׮;x,Cܾ}{1bD>>VZU۟CB :T[cǎZO ~8۽{w/z\= u{ޯ~7sAW~k6""gـ>uTwCMGIk֬i#PcҤIp߻wo6Gfۻ;mܸ1+²q",_| e$?~<-\0GX>9fQA`?!v7Bu,x87JppS?7W^y[vwS&[WCYmDDD!=φ ֟>}lڴi k׮ˆMܡXvڶ[lis qW¶6mL3fȢ<~5O@$#!8B`9sX"T`۶m7̙3裏rguG+VHַrWɓk ݝ,]M뀂CDD!|ر#Q/Gm;xz-Ztrl)z\RF!bYq^ v ~'r=;6öe*UFpMt6l#"" y^=[n͆ŋk܎^{aTp\ޗ^z@48~"8\\`YBӂc|ĉ+ԃ>h}9rd^Ncpp?A]1}/$8x{^΋^YzxTDm(Ӓ%Kr+?Oe1Z<ٞ;Zt#RqED"76-|ڴ?O|CZw@|%8p3Vb pʄ;F8nVΚ5+= 7/vT{`bm.LLe<S'qSW!<~0CDQNpV# [*8a`=AauFp \?#`ZT++pjl=6WҨ QpHg >+85 R3X#6Ex{N`=L/H 1S\(SQj@x+Lv#`at zm8Z[Ip=-!"HDD!"IrR0n9T5C1  ;`HZ\7|3] (ܕ0(~\3QV)`$2}(BM)A8e}u("Qp;#1]0CI{Z٦5:,!)I|'>"Qp(8DDD"" (8DD Qp(8""" CDD"" (8DD C!"" CDD"" CDDC!"" CDDD!"PpCDDqkǟ˗""rK"I"" ~&8潾 }^i% [7IDDsҼ71}d2LJ|{-$"g#DJ5L&A Qpc!""""" C!""""" Qp(8DDDDD QpC!""""PpCDDDDD CDDDDD"""""PpHodI!"""""݆CDDDDD"""""PpCDDDDD"""""PpCDDDDD CDDDDD""")M[w$o.MI""ۘt؈$"" Qp(8DD Qp(8""Pp(8z}YZn]{۶mK;wʹuݻ}3"" 8q" ӡCn9:u*=O?a"?c77t+O~ ,m"ంEDn7qɴlٲϟNΝ[[v[vn[uM>=mݺU7 zG􎉙^y啴o߾O1(8DDcڵkm^{-4s쟿p,}زeK#'zLXO\.\R݆唇uӦMǦq˗_|1\t1>䓴zޫl޼9Ky/ݻZ9uIcǎ6r}:O]hQQ*'B %K4, U>裼1=;QO8tD`HF>>|>PpܱҥK 5km֮]J}ތ3rE٣b>hPK R> ^Rp\z5+ 'Y8!zҍLDFpTӅ+rN{QF7okvwk lWf>ϟahɪ>POj}r8"w.U % ;M4);6~衇TpH6e„ iȑ i v&׾Lؑ4p6ImYڃi{oin{"#0 Zi^Q& z*ôGOKpj/Ρ=xY#R*;Z3*9yvx8.buOO bVrp crΡHDzwۈFtVp]5jCBhi{'IX7p6"FJkUp\r݀jǥ%z1^~66Sp4G?Q6('8hGu=$!՗KU*Q#^eϞ=u[[7Wz1ґ:϶ra)'CCJ}"ZCGm#" 9y智FWia$Ea> >Z9_A(LprM|ǀ>z lQ1$"efLpL2"p Ѳ8asƲbn;A t=x!T[CpFHz10ZG>n8U7j+N YKW&0#zq\s&!xq:8b7,GL+R~tXNŋ)K72{DD!|WQ6@PȲpuRE/Yvq|#yѕQ^=ͿQI͎G(gjYhex#Mw{5^26+֧љ$M4bR!4bĈ j F`=&ZKayxW|0)#!2Dvcyڅ4zzFݸ xo.h"hOpĠ $GUp7m/8pѣPRQxgoZ]dQpHm` 1hUVOpЀ24]ma9./ chHq"vD!qDlRy/b](S*ؼj- w?qqPDzF˷"*ˈzHDDD!A> .)kT>c3;vihX77.BIqD:\9Do6K@'z譫2x,kpOIRt}^8~Gkȑp#$n1*yO}Xp`Rx5Ft(8nD"CDD}ָp !8fjڕb*,Fqk.U Qpܶ#XUp~p`z*/=.cUlTECQp(8  qȨ'*бd)8 ~ӢE.!,XҶ3fH;wDD77Qpt3~ĉ$wy7M:5 :4=iݺu7c„ -O< ߭A z>uCN6-д·4gbQp(8pQpBq/| K_RGGY|tK.M+/'|2 >ae˖ŋ^\?CD CD]򕯤se࣏>… ,'1cƤ]vuXpD{.h_C!" *8<_g2ٰa 3gP7fسgOΧ;ž^l[VDH994ey '3ʾ]/" QptV":;iRDVuAgϞ͂xz\ŋk^yꫯw|;7ud￿Gcw~wnz9͝;71(w#Gԭhʕ+sys\USL{,y睹.G='ö~5cҤImuԩ*+ k zl(7#8)'582.#ED! 'p MZ廒QPl[ΚޑmoFpЂOwG9sf3jW)80Q 8sxnTίA €KW):^DQpqF&Cr"ћVuZ;>yϘ1# 'Ọ7Ug YӧG 3%fsi`Lܹ3I_rdwcG60%0W]o}v|ĖQoqC3l0)cC1o޼?(T:E~W"CAcF)rhdl19]LWe@ !TOpq&1-F8bB>+ESGEpлޱzkJsG466E97YUpPoyۘ)\u/Η|9軞w~&+^'YNbɓ'^D~(8:-؂{˳Mwup;B3z:mgF@ ϹDoDLWTavꪕr1R_21H{ב^,a~ά(8D6of°MGe˼p"$86mڔ"%Iu观c޽u(+J/^u5MDD! WpáL8‚ F"ցI]hC-"(8z%,b0 *"t˸QpCD""" (8DDDQp(8DDD! Qp(8k(QpCD(8DD!""EEc[pĉ[ )8~1}s??N۶mNWpaӦMZKy77ͳ7pG!ܙM!""i/QFϧ={dÔ*8ظqu,2.pС/|!=|ov.CDDDq|+_I&M~ggCc͹=P?}///}KiȑH:th7~#=-Z(}_OwqG>.‡˿َ3gүꯦ_|1ű{6c_b69f$8|ɼڲeK?\P={6_eގ6mZ<0o;}Lg>4`+VB(Ӂj{\<{O~Ygv7ו2.^8WFϰCDDDPpˁрplxG?#oh!a?~m1lY|#&9s!p۷Ae }ݼ-cW^ɿ׬YSvlб ݾ 8q ZǏ~8uԼŋ5#u\/E =y㞇X|ꩧ9 <3|H>}z__ zꏿUV}Ѽ+YܺΝ˷o߾tcǎ{ʔ)Y~_3QpHVT{d5{̘15%Z\ݖ_x6fj#8ȫ׮]1C=o}+ƹ-h+8B̛75>i5//\Px+Wj\p b!^0^I꫾ z"FJ]ňCs=g/!̘1cUlեx{a:asܹѯ}km[q3ho[t6@)8$%SQ#Ë:1p(8 PFl#-Cp\r%mG+dĈYI{FijWrχg*8x~K'O*8DDDb㧏Axio[|1N0\ {< bGؖ<78WN>-{8bf\7w1.Brncj3> | G,X 7k.p]9r$_kHѣA =1!r""" N õ ޶@8Ƹe`R.ZU1dȐpAi$8J_wGQc$#8GXPƾ{o &p?_3Qm:<~f)^_gbJJQK$""җG+,޶2'˩ ܠbFЊJ*) eٙL\0 \ݹsgq1bX@|_ӥ'zS=\]̖ǯ }(8 ҂J,VrVF5=!1WiuTCDDH[i7: :Ip#1Q\vz۰H!""MNI!OڊKCDDpXf( QpCD _|1_u ! 1ߏCDD 1xg;y(8Dbe˖N^n]|(8D!"- <᝼k׮`m(8D!"7-8*8N:(8DǏN^fMMp0ۻś:ujھ}-+Õ+WrpCmEn w̙~ٳgUVu~?vXYwC!"^p|[ʂ Ow?ƽ^p}GoHӦMP>^1;c3k 7o޼[VϟeXxqۜ8q<(no\;O<ѩ=v^'Zy(8"rǢEj~߬n0m-8,Y+3ft(;z׾<xPp [/80_z饴sN(8DSw/=om#8衸.Pp'I&` ފC"}Kp;䉓 ࠢ;c0Gy 0 % FHO۷/o>xCz4hPmݳgOH^y>Ç |:sXpam.]ƍρa&۳_MT\u7c1yoa[vIvzmhr,aD6 0xZ=^yxQ/qU8_ZiE`( ^ZW9h.];fu187͎;j-C=0p؆c`у芺yVa=Qf\Jc #abh"$h9e  Pw,.[7刖HE#%aR_VFu_|~&=Q>hDLD]6f7xWpluʻǯ^ճ?Jpݸ~\GQp(;N3;IzeµaYQ-l>Vu*Ł 7<xU׋FӧO:חHzi#85?Z[5Ft9-wC@yG篕3c*8bܝCN5Tff#]È@ArG秕wIW ;i}6XEG\7QD/n;,E0*ʖVʃQP)-|SȄ#L0TFf{YU Kcq }  C1JWmWg\F0*-| h-"8q0ga<vtTpԻ"*&U hmUprFF5uhF.U=ELp SOؔ}׊D>"unM秕wIW -z9L}3q"3Hab!Fk3bXaAQhu%ph wL|1Z)>惏1ʱqw鈸g|K.5 ՠ0 q(h,C: +!&&vΝSQbs3}Y cȱA]s>ה2sc'8>DGi.5!fH\5Fw_'0)[}岜7SeGG+ǩgTG5f֔#yH1T3 y1}=_\sw`N*㽚Ci.nXV+<)6D}Fp(=R*|96- p5!92/#X2'#E+Z+s/QV˃ס>/~ y#]w 4 ~һYa$4:c#b8ȇ:xe00Ƶ){ (/튺yփtίR#0HOu1+yp\9sUI7r[3M(OGT[yy!ʺ%S1@@ @VVC=^^;*}Rpw%FjZ"aqwEԻKSKivꦕwSwIT{<:#8DDD#+/`u!Cv 5Ao+\-wc9VnΞg{uD/ _]G'Vjv^!| mt=f[QDHt#uB4r0ݓ[r34;N#p^^,Op6%jb9%\jCDDqC5܉`^PI9>D=; C k^9;ޅM ?+Qp(8D\V+_%Qp(8DDD!"PpCDD Qp(8""Qp(8DDD!"" t>g2LL QpL&Id2)8""0L&CDD&dRp(8DDDa2L (8L&ɤd2 QpL&C!"" d2)8DDD0L&CDD&ɤPpd2L Qp(8L&Id2)8""0L&CDDDa2L (8L}.qiɒ%i9_u_~qn˗/O&L3&YknRp(8DDDat̙|}ڵk/}K}Ξ=VX_`ApܤPpԓi߾}߿{﵍7*8L&(8Vpi{'~\2߃3fHiӦ#=yۿλiڴi__HW\Ij-˗/#G__M۷oO?Ǽ #xI7oOOիWoäPpұc}u}ѣGgC{//co< EĥKN_E7{_ڵkG}],^NC`{ *?<@aRp(8DDDaM1dp! 6R`qW#omz7s/|O>l`;v{F޶,KB l<~9oVn C!"" SotiÆ ~Í)Gk}Сܹs>=zvoݻ7jҘO?P_|1?K.Up Qpzk "!z,A½#Ԗa)~jժ z(8!x|' /|!c֬Y|?CI#Gd*b)O4=h't}kݲpɊbӧkqG7 WȮVu tW{6d2Tp!$`1kdċg[8g ~M&Iq-sJ1Lx.x>xNx^|L^-Ïd2)8n痊pDFBtA&dRptBZ Ր9d2)8C" QpL&IQp(8L&IQpd2 !(8L&ɤPp(8D&ɤPp(8|Da2L ƐC ~M&gӏye˖nݚfI!!>qPpL&ӭI{yG=C" 闂{//hL&S%޹{Kw*ƐCࠅmd!;QpH>(WtʕWd2x]T [d 19q(8DnlG_e4Lz)ޯ7#6-sOސ^y啼'HַҩS:?ٳZr z+M>ύ"/J_!<"$"8z[L&^*ߩ &chŊYPL0!M<^}՚ 5kV>Vgя~]SO=v;w.?[Bc)>-Fti-d2K;bCA]hC 8=Ǣe*?!DV6d[woGQptXxqz衇j}ٴdɒo;˹$\N>fΜ -a%ˏ9}Ѽ-n\m{|{w8x`9rdކӚ5k_oSޜ(7, ~4jԨ}sϵq={vw#F]v 6e<k7egmMxOÆ yW`'= 3=xyi9_ίn訦z[b_Go+d25] 8p*{(Pccl S?[_wؑ~uK.ͩ6'7plaDCM˖-K7nX@x࡜ǏBPoYx{7q1DSM6eq}ܛq_c2„u{-\J0w:G0رczx5 z,>k9sԎ=cƌgoڵtGmYe<0΂m([nqozVJaSc * 5ܓ'O.GU{ǿxb^sx?tR^O&Xh1Hz("S=S FX(GjUp.TW|虠E7HJ^SZX#zA@1cePO z0ιgxM)ܒwKVǂ jxX3V.gw8~zyl޼9/;vXm=D<[&Mx߈Ϙ6q 0p_8.J7c& ǭ o.!)ID݂z4X=!bgxRpR1+^Usg WKQp(8:%8JҰtDpD m@o rU#tp;`)8Jٞ2a_  fS |fgLDD GΆ}T(h=#\1Z*1*nTpljU&0 &.*Cp {,?ޒ 乥xqs?ĉϘ6+WlWpDCcw a`Ǻ].y`ljP  \GJ4^jBC$gX 11qƍc^]#5Cp#\JAP9 ^!eB|DDJ(]C*Z`k`n|ܾD0Z{Cw""n;3&"Pp(8|D"" !CDDQp(8"C>c" ȠF;Rp(8+SNM۷o2O\QwqGxC!SpC3P7Htor1>tpȰܳGݰ Ͳny VFDd W`~rx0)4H[<"C GC sJE/Ij1a„4rH/t AŽZ&{& ֯_6 809saU͗Df=a"QpM Z~Ko߾[.8F.]wU?z$\ =z$'0`@m}^~6`kƐCDygdŚ5krF}bRz9s- AC~`a=u?pa7iYhif8naÆ K/60Oݻ77oFme[nM'NhҥKkń{"Əs= !m۶իs\z5Ln6mj(80X?;y";f̘Fؒ%Kn(%.#$0 %և;-}){G>}:ߟ2eJE*eB asƲb"" ~|F`4zE [VGXlǎVZ#,B`ٳCY 'xfsE@x}=4EH#2U CD" ۮ1bz,0qeCͱG0<LK0-yEmhV(?w7oF؈4YhQ|pc}W[=%!# BR{X!Y![ k. a?=-ٳgo[V`NĈ+mVT_̜93!B6~( z>b.g0p&F)a{\7sxbt2=ӊQy IENDB`PK+K[Dget-registered-blocks.tsnu[/** * Internal dependencies */ import { innerBlockAreas, RegisteredBlock } from './types'; import { registeredBlocks } from './registered-blocks'; /** * Check if a block/area supports inner block registration. */ export const hasInnerBlocks = ( block: string ): block is innerBlockAreas => { return Object.values( innerBlockAreas ).includes( block as innerBlockAreas ); }; /** * Returns an array of registered block objects available within a specific parent block/area. */ export const getRegisteredBlocks = ( block: string ): Array< RegisteredBlock > => { return hasInnerBlocks( block ) ? Object.values( registeredBlocks ).filter( ( { metadata } ) => ( metadata?.parent || [] ).includes( block ) ) : []; }; PK+K[z_:: test/index.jsnu[PK+K[=4mmwindex.tsnu[PK+K[K.UU register-checkout-block.tsnu[PK+K[3registered-blocks.tsnu[PK+K[Oyc c utils.tsnu[PK+K[nGG:types.tsnu[PK+K[Y%%cc %inserter.pngnu[PK+K[DXget-registered-blocks.tsnu[PKw