@wordpress/block-directory 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 3.5.0 (2022-04-21)
6
+
5
7
  ## 3.4.0 (2022-04-08)
6
8
 
7
9
  ## 3.3.0 (2022-03-23)
@@ -117,6 +117,7 @@ function DownloadableBlockListItem(_ref3) {
117
117
  }
118
118
 
119
119
  return (0, _element.createElement)(_components.__unstableCompositeItem, (0, _extends2.default)({
120
+ __experimentalIsFocusable: true,
120
121
  role: "option",
121
122
  as: _components.Button
122
123
  }, composite, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-directory/src/components/downloadable-block-list-item/index.js"],"names":["getDownloadableBlockLabel","title","rating","ratingCount","hasNotice","isInstalled","isInstalling","stars","Math","round","DownloadableBlockListItem","composite","item","onClick","author","description","icon","name","isInstallable","select","getErrorNoticeForBlock","isBlockInstalling","blockDirectoryStore","notice","id","hasFatal","isFatal","statusText","Button","event","preventDefault","span"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tSpinner,\n\tVisuallyHidden,\n\t__unstableCompositeItem as CompositeItem,\n} from '@wordpress/components';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { getBlockType } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockRatings from '../block-ratings';\nimport DownloadableBlockIcon from '../downloadable-block-icon';\nimport DownloadableBlockNotice from '../downloadable-block-notice';\nimport { store as blockDirectoryStore } from '../../store';\n\n// Return the appropriate block item label, given the block data and status.\nfunction getDownloadableBlockLabel(\n\t{ title, rating, ratingCount },\n\t{ hasNotice, isInstalled, isInstalling }\n) {\n\tconst stars = Math.round( rating / 0.5 ) * 0.5;\n\n\tif ( ! isInstalled && hasNotice ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Retry installing %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalled ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Add %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalling ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Installing %s.', decodeEntities( title ) );\n\t}\n\n\t// No ratings yet, just use the title.\n\tif ( ratingCount < 1 ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Install %s.', decodeEntities( title ) );\n\t}\n\n\treturn sprintf(\n\t\t/* translators: %1$s: block title, %2$s: average rating, %3$s: total ratings count. */\n\t\t_n(\n\t\t\t'Install %1$s. %2$s stars with %3$s review.',\n\t\t\t'Install %1$s. %2$s stars with %3$s reviews.',\n\t\t\tratingCount\n\t\t),\n\t\tdecodeEntities( title ),\n\t\tstars,\n\t\tratingCount\n\t);\n}\n\nfunction DownloadableBlockListItem( { composite, item, onClick } ) {\n\tconst { author, description, icon, rating, title } = item;\n\t// getBlockType returns a block object if this block exists, or null if not.\n\tconst isInstalled = !! getBlockType( item.name );\n\n\tconst { hasNotice, isInstalling, isInstallable } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetErrorNoticeForBlock,\n\t\t\t\tisInstalling: isBlockInstalling,\n\t\t\t} = select( blockDirectoryStore );\n\t\t\tconst notice = getErrorNoticeForBlock( item.id );\n\t\t\tconst hasFatal = notice && notice.isFatal;\n\t\t\treturn {\n\t\t\t\thasNotice: !! notice,\n\t\t\t\tisInstalling: isBlockInstalling( item.id ),\n\t\t\t\tisInstallable: ! hasFatal,\n\t\t\t};\n\t\t},\n\t\t[ item ]\n\t);\n\n\tlet statusText = '';\n\tif ( isInstalled ) {\n\t\tstatusText = __( 'Installed!' );\n\t} else if ( isInstalling ) {\n\t\tstatusText = __( 'Installing…' );\n\t}\n\n\treturn (\n\t\t<CompositeItem\n\t\t\trole=\"option\"\n\t\t\tas={ Button }\n\t\t\t{ ...composite }\n\t\t\tclassName=\"block-directory-downloadable-block-list-item\"\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonClick();\n\t\t\t} }\n\t\t\tisBusy={ isInstalling }\n\t\t\tdisabled={ isInstalling || ! isInstallable }\n\t\t\tlabel={ getDownloadableBlockLabel( item, {\n\t\t\t\thasNotice,\n\t\t\t\tisInstalled,\n\t\t\t\tisInstalling,\n\t\t\t} ) }\n\t\t\tshowTooltip={ true }\n\t\t\ttooltipPosition=\"top center\"\n\t\t>\n\t\t\t<div className=\"block-directory-downloadable-block-list-item__icon\">\n\t\t\t\t<DownloadableBlockIcon icon={ icon } title={ title } />\n\t\t\t\t{ isInstalling ? (\n\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__spinner\">\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<BlockRatings rating={ rating } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t<span className=\"block-directory-downloadable-block-list-item__details\">\n\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__title\">\n\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %1$s: block title, %2$s: author name. */\n\t\t\t\t\t\t\t__( '%1$s <span>by %2$s</span>' ),\n\t\t\t\t\t\t\tdecodeEntities( title ),\n\t\t\t\t\t\t\tauthor\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tspan: (\n\t\t\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__author\" />\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</span>\n\t\t\t\t{ hasNotice ? (\n\t\t\t\t\t<DownloadableBlockNotice block={ item } />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__desc\">\n\t\t\t\t\t\t\t{ !! statusText\n\t\t\t\t\t\t\t\t? statusText\n\t\t\t\t\t\t\t\t: decodeEntities( description ) }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{ isInstallable &&\n\t\t\t\t\t\t\t! ( isInstalled || isInstalling ) && (\n\t\t\t\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t\t\t\t{ __( 'Install block' ) }\n\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</span>\n\t\t</CompositeItem>\n\t);\n}\n\nexport default DownloadableBlockListItem;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-directory/src/components/downloadable-block-list-item/index.js"],"names":["getDownloadableBlockLabel","title","rating","ratingCount","hasNotice","isInstalled","isInstalling","stars","Math","round","DownloadableBlockListItem","composite","item","onClick","author","description","icon","name","isInstallable","select","getErrorNoticeForBlock","isBlockInstalling","blockDirectoryStore","notice","id","hasFatal","isFatal","statusText","Button","event","preventDefault","span"],"mappings":";;;;;;;;;AAUA;;;;AAPA;;AACA;;AAOA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AArBA;AACA;AACA;;AAaA;AACA;AACA;AAMA;AACA,SAASA,yBAAT,cAGE;AAAA,MAFD;AAAEC,IAAAA,KAAF;AAASC,IAAAA,MAAT;AAAiBC,IAAAA;AAAjB,GAEC;AAAA,MADD;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,WAAb;AAA0BC,IAAAA;AAA1B,GACC;AACD,QAAMC,KAAK,GAAGC,IAAI,CAACC,KAAL,CAAYP,MAAM,GAAG,GAArB,IAA6B,GAA3C;;AAEA,MAAK,CAAEG,WAAF,IAAiBD,SAAtB,EAAkC;AACjC;AACA,WAAO,mBAAS,sBAAT,EAAiC,kCAAgBH,KAAhB,CAAjC,CAAP;AACA;;AAED,MAAKI,WAAL,EAAmB;AAClB;AACA,WAAO,mBAAS,SAAT,EAAoB,kCAAgBJ,KAAhB,CAApB,CAAP;AACA;;AAED,MAAKK,YAAL,EAAoB;AACnB;AACA,WAAO,mBAAS,gBAAT,EAA2B,kCAAgBL,KAAhB,CAA3B,CAAP;AACA,GAhBA,CAkBD;;;AACA,MAAKE,WAAW,GAAG,CAAnB,EAAuB;AACtB;AACA,WAAO,mBAAS,aAAT,EAAwB,kCAAgBF,KAAhB,CAAxB,CAAP;AACA;;AAED,SAAO;AACN;AACA,gBACC,4CADD,EAEC,6CAFD,EAGCE,WAHD,CAFM,EAON,kCAAgBF,KAAhB,CAPM,EAQNM,KARM,EASNJ,WATM,CAAP;AAWA;;AAED,SAASO,yBAAT,QAAmE;AAAA,MAA/B;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,IAAb;AAAmBC,IAAAA;AAAnB,GAA+B;AAClE,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,WAAV;AAAuBC,IAAAA,IAAvB;AAA6Bd,IAAAA,MAA7B;AAAqCD,IAAAA;AAArC,MAA+CW,IAArD,CADkE,CAElE;;AACA,QAAMP,WAAW,GAAG,CAAC,CAAE,0BAAcO,IAAI,CAACK,IAAnB,CAAvB;AAEA,QAAM;AAAEb,IAAAA,SAAF;AAAaE,IAAAA,YAAb;AAA2BY,IAAAA;AAA3B,MAA6C,qBAChDC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,sBADK;AAELd,MAAAA,YAAY,EAAEe;AAFT,QAGFF,MAAM,CAAEG,YAAF,CAHV;AAIA,UAAMC,MAAM,GAAGH,sBAAsB,CAAER,IAAI,CAACY,EAAP,CAArC;AACA,UAAMC,QAAQ,GAAGF,MAAM,IAAIA,MAAM,CAACG,OAAlC;AACA,WAAO;AACNtB,MAAAA,SAAS,EAAE,CAAC,CAAEmB,MADR;AAENjB,MAAAA,YAAY,EAAEe,iBAAiB,CAAET,IAAI,CAACY,EAAP,CAFzB;AAGNN,MAAAA,aAAa,EAAE,CAAEO;AAHX,KAAP;AAKA,GAbiD,EAclD,CAAEb,IAAF,CAdkD,CAAnD;AAiBA,MAAIe,UAAU,GAAG,EAAjB;;AACA,MAAKtB,WAAL,EAAmB;AAClBsB,IAAAA,UAAU,GAAG,cAAI,YAAJ,CAAb;AACA,GAFD,MAEO,IAAKrB,YAAL,EAAoB;AAC1BqB,IAAAA,UAAU,GAAG,cAAI,aAAJ,CAAb;AACA;;AAED,SACC,4BAAC,mCAAD;AACC,IAAA,yBAAyB,MAD1B;AAEC,IAAA,IAAI,EAAC,QAFN;AAGC,IAAA,EAAE,EAAGC;AAHN,KAIMjB,SAJN;AAKC,IAAA,SAAS,EAAC,8CALX;AAMC,IAAA,OAAO,EAAKkB,KAAF,IAAa;AACtBA,MAAAA,KAAK,CAACC,cAAN;AACAjB,MAAAA,OAAO;AACP,KATF;AAUC,IAAA,MAAM,EAAGP,YAVV;AAWC,IAAA,QAAQ,EAAGA,YAAY,IAAI,CAAEY,aAX9B;AAYC,IAAA,KAAK,EAAGlB,yBAAyB,CAAEY,IAAF,EAAQ;AACxCR,MAAAA,SADwC;AAExCC,MAAAA,WAFwC;AAGxCC,MAAAA;AAHwC,KAAR,CAZlC;AAiBC,IAAA,WAAW,EAAG,IAjBf;AAkBC,IAAA,eAAe,EAAC;AAlBjB,MAoBC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,8BAAD;AAAuB,IAAA,IAAI,EAAGU,IAA9B;AAAqC,IAAA,KAAK,EAAGf;AAA7C,IADD,EAEGK,YAAY,GACb;AAAM,IAAA,SAAS,EAAC;AAAhB,KACC,4BAAC,mBAAD,OADD,CADa,GAKb,4BAAC,qBAAD;AAAc,IAAA,MAAM,EAAGJ;AAAvB,IAPF,CApBD,EA8BC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACG,uCACD;AACC;AACA,gBAAI,2BAAJ,CAFD,EAGC,kCAAgBD,KAAhB,CAHD,EAICa,MAJD,CADC,EAOD;AACCiB,IAAAA,IAAI,EACH;AAAM,MAAA,SAAS,EAAC;AAAhB;AAFF,GAPC,CADH,CADD,EAgBG3B,SAAS,GACV,4BAAC,gCAAD;AAAyB,IAAA,KAAK,EAAGQ;AAAjC,IADU,GAGV,qDACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACG,CAAC,CAAEe,UAAH,GACCA,UADD,GAEC,kCAAgBZ,WAAhB,CAHJ,CADD,EAMGG,aAAa,IACd,EAAIb,WAAW,IAAIC,YAAnB,CADC,IAEA,4BAAC,0BAAD,QACG,cAAI,eAAJ,CADH,CARH,CAnBF,CA9BD,CADD;AAmEA;;eAEcI,yB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tSpinner,\n\tVisuallyHidden,\n\t__unstableCompositeItem as CompositeItem,\n} from '@wordpress/components';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { getBlockType } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockRatings from '../block-ratings';\nimport DownloadableBlockIcon from '../downloadable-block-icon';\nimport DownloadableBlockNotice from '../downloadable-block-notice';\nimport { store as blockDirectoryStore } from '../../store';\n\n// Return the appropriate block item label, given the block data and status.\nfunction getDownloadableBlockLabel(\n\t{ title, rating, ratingCount },\n\t{ hasNotice, isInstalled, isInstalling }\n) {\n\tconst stars = Math.round( rating / 0.5 ) * 0.5;\n\n\tif ( ! isInstalled && hasNotice ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Retry installing %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalled ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Add %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalling ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Installing %s.', decodeEntities( title ) );\n\t}\n\n\t// No ratings yet, just use the title.\n\tif ( ratingCount < 1 ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Install %s.', decodeEntities( title ) );\n\t}\n\n\treturn sprintf(\n\t\t/* translators: %1$s: block title, %2$s: average rating, %3$s: total ratings count. */\n\t\t_n(\n\t\t\t'Install %1$s. %2$s stars with %3$s review.',\n\t\t\t'Install %1$s. %2$s stars with %3$s reviews.',\n\t\t\tratingCount\n\t\t),\n\t\tdecodeEntities( title ),\n\t\tstars,\n\t\tratingCount\n\t);\n}\n\nfunction DownloadableBlockListItem( { composite, item, onClick } ) {\n\tconst { author, description, icon, rating, title } = item;\n\t// getBlockType returns a block object if this block exists, or null if not.\n\tconst isInstalled = !! getBlockType( item.name );\n\n\tconst { hasNotice, isInstalling, isInstallable } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetErrorNoticeForBlock,\n\t\t\t\tisInstalling: isBlockInstalling,\n\t\t\t} = select( blockDirectoryStore );\n\t\t\tconst notice = getErrorNoticeForBlock( item.id );\n\t\t\tconst hasFatal = notice && notice.isFatal;\n\t\t\treturn {\n\t\t\t\thasNotice: !! notice,\n\t\t\t\tisInstalling: isBlockInstalling( item.id ),\n\t\t\t\tisInstallable: ! hasFatal,\n\t\t\t};\n\t\t},\n\t\t[ item ]\n\t);\n\n\tlet statusText = '';\n\tif ( isInstalled ) {\n\t\tstatusText = __( 'Installed!' );\n\t} else if ( isInstalling ) {\n\t\tstatusText = __( 'Installing…' );\n\t}\n\n\treturn (\n\t\t<CompositeItem\n\t\t\t__experimentalIsFocusable\n\t\t\trole=\"option\"\n\t\t\tas={ Button }\n\t\t\t{ ...composite }\n\t\t\tclassName=\"block-directory-downloadable-block-list-item\"\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonClick();\n\t\t\t} }\n\t\t\tisBusy={ isInstalling }\n\t\t\tdisabled={ isInstalling || ! isInstallable }\n\t\t\tlabel={ getDownloadableBlockLabel( item, {\n\t\t\t\thasNotice,\n\t\t\t\tisInstalled,\n\t\t\t\tisInstalling,\n\t\t\t} ) }\n\t\t\tshowTooltip={ true }\n\t\t\ttooltipPosition=\"top center\"\n\t\t>\n\t\t\t<div className=\"block-directory-downloadable-block-list-item__icon\">\n\t\t\t\t<DownloadableBlockIcon icon={ icon } title={ title } />\n\t\t\t\t{ isInstalling ? (\n\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__spinner\">\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<BlockRatings rating={ rating } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t<span className=\"block-directory-downloadable-block-list-item__details\">\n\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__title\">\n\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %1$s: block title, %2$s: author name. */\n\t\t\t\t\t\t\t__( '%1$s <span>by %2$s</span>' ),\n\t\t\t\t\t\t\tdecodeEntities( title ),\n\t\t\t\t\t\t\tauthor\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tspan: (\n\t\t\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__author\" />\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</span>\n\t\t\t\t{ hasNotice ? (\n\t\t\t\t\t<DownloadableBlockNotice block={ item } />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__desc\">\n\t\t\t\t\t\t\t{ !! statusText\n\t\t\t\t\t\t\t\t? statusText\n\t\t\t\t\t\t\t\t: decodeEntities( description ) }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{ isInstallable &&\n\t\t\t\t\t\t\t! ( isInstalled || isInstalling ) && (\n\t\t\t\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t\t\t\t{ __( 'Install block' ) }\n\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</span>\n\t\t</CompositeItem>\n\t);\n}\n\nexport default DownloadableBlockListItem;\n"]}
@@ -99,6 +99,7 @@ function DownloadableBlockListItem(_ref3) {
99
99
  }
100
100
 
101
101
  return createElement(CompositeItem, _extends({
102
+ __experimentalIsFocusable: true,
102
103
  role: "option",
103
104
  as: Button
104
105
  }, composite, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-directory/src/components/downloadable-block-list-item/index.js"],"names":["__","_n","sprintf","Button","Spinner","VisuallyHidden","__unstableCompositeItem","CompositeItem","createInterpolateElement","decodeEntities","getBlockType","useSelect","BlockRatings","DownloadableBlockIcon","DownloadableBlockNotice","store","blockDirectoryStore","getDownloadableBlockLabel","title","rating","ratingCount","hasNotice","isInstalled","isInstalling","stars","Math","round","DownloadableBlockListItem","composite","item","onClick","author","description","icon","name","isInstallable","select","getErrorNoticeForBlock","isBlockInstalling","notice","id","hasFatal","isFatal","statusText","event","preventDefault","span"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tSpinner,\n\tVisuallyHidden,\n\t__unstableCompositeItem as CompositeItem,\n} from '@wordpress/components';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { getBlockType } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockRatings from '../block-ratings';\nimport DownloadableBlockIcon from '../downloadable-block-icon';\nimport DownloadableBlockNotice from '../downloadable-block-notice';\nimport { store as blockDirectoryStore } from '../../store';\n\n// Return the appropriate block item label, given the block data and status.\nfunction getDownloadableBlockLabel(\n\t{ title, rating, ratingCount },\n\t{ hasNotice, isInstalled, isInstalling }\n) {\n\tconst stars = Math.round( rating / 0.5 ) * 0.5;\n\n\tif ( ! isInstalled && hasNotice ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Retry installing %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalled ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Add %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalling ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Installing %s.', decodeEntities( title ) );\n\t}\n\n\t// No ratings yet, just use the title.\n\tif ( ratingCount < 1 ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Install %s.', decodeEntities( title ) );\n\t}\n\n\treturn sprintf(\n\t\t/* translators: %1$s: block title, %2$s: average rating, %3$s: total ratings count. */\n\t\t_n(\n\t\t\t'Install %1$s. %2$s stars with %3$s review.',\n\t\t\t'Install %1$s. %2$s stars with %3$s reviews.',\n\t\t\tratingCount\n\t\t),\n\t\tdecodeEntities( title ),\n\t\tstars,\n\t\tratingCount\n\t);\n}\n\nfunction DownloadableBlockListItem( { composite, item, onClick } ) {\n\tconst { author, description, icon, rating, title } = item;\n\t// getBlockType returns a block object if this block exists, or null if not.\n\tconst isInstalled = !! getBlockType( item.name );\n\n\tconst { hasNotice, isInstalling, isInstallable } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetErrorNoticeForBlock,\n\t\t\t\tisInstalling: isBlockInstalling,\n\t\t\t} = select( blockDirectoryStore );\n\t\t\tconst notice = getErrorNoticeForBlock( item.id );\n\t\t\tconst hasFatal = notice && notice.isFatal;\n\t\t\treturn {\n\t\t\t\thasNotice: !! notice,\n\t\t\t\tisInstalling: isBlockInstalling( item.id ),\n\t\t\t\tisInstallable: ! hasFatal,\n\t\t\t};\n\t\t},\n\t\t[ item ]\n\t);\n\n\tlet statusText = '';\n\tif ( isInstalled ) {\n\t\tstatusText = __( 'Installed!' );\n\t} else if ( isInstalling ) {\n\t\tstatusText = __( 'Installing…' );\n\t}\n\n\treturn (\n\t\t<CompositeItem\n\t\t\trole=\"option\"\n\t\t\tas={ Button }\n\t\t\t{ ...composite }\n\t\t\tclassName=\"block-directory-downloadable-block-list-item\"\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonClick();\n\t\t\t} }\n\t\t\tisBusy={ isInstalling }\n\t\t\tdisabled={ isInstalling || ! isInstallable }\n\t\t\tlabel={ getDownloadableBlockLabel( item, {\n\t\t\t\thasNotice,\n\t\t\t\tisInstalled,\n\t\t\t\tisInstalling,\n\t\t\t} ) }\n\t\t\tshowTooltip={ true }\n\t\t\ttooltipPosition=\"top center\"\n\t\t>\n\t\t\t<div className=\"block-directory-downloadable-block-list-item__icon\">\n\t\t\t\t<DownloadableBlockIcon icon={ icon } title={ title } />\n\t\t\t\t{ isInstalling ? (\n\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__spinner\">\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<BlockRatings rating={ rating } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t<span className=\"block-directory-downloadable-block-list-item__details\">\n\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__title\">\n\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %1$s: block title, %2$s: author name. */\n\t\t\t\t\t\t\t__( '%1$s <span>by %2$s</span>' ),\n\t\t\t\t\t\t\tdecodeEntities( title ),\n\t\t\t\t\t\t\tauthor\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tspan: (\n\t\t\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__author\" />\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</span>\n\t\t\t\t{ hasNotice ? (\n\t\t\t\t\t<DownloadableBlockNotice block={ item } />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__desc\">\n\t\t\t\t\t\t\t{ !! statusText\n\t\t\t\t\t\t\t\t? statusText\n\t\t\t\t\t\t\t\t: decodeEntities( description ) }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{ isInstallable &&\n\t\t\t\t\t\t\t! ( isInstalled || isInstalling ) && (\n\t\t\t\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t\t\t\t{ __( 'Install block' ) }\n\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</span>\n\t\t</CompositeItem>\n\t);\n}\n\nexport default DownloadableBlockListItem;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-directory/src/components/downloadable-block-list-item/index.js"],"names":["__","_n","sprintf","Button","Spinner","VisuallyHidden","__unstableCompositeItem","CompositeItem","createInterpolateElement","decodeEntities","getBlockType","useSelect","BlockRatings","DownloadableBlockIcon","DownloadableBlockNotice","store","blockDirectoryStore","getDownloadableBlockLabel","title","rating","ratingCount","hasNotice","isInstalled","isInstalling","stars","Math","round","DownloadableBlockListItem","composite","item","onClick","author","description","icon","name","isInstallable","select","getErrorNoticeForBlock","isBlockInstalling","notice","id","hasFatal","isFatal","statusText","event","preventDefault","span"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,EAAb,EAAiBC,OAAjB,QAAgC,iBAAhC;AACA,SACCC,MADD,EAECC,OAFD,EAGCC,cAHD,EAICC,uBAAuB,IAAIC,aAJ5B,QAKO,uBALP;AAMA,SAASC,wBAAT,QAAyC,oBAAzC;AACA,SAASC,cAAT,QAA+B,0BAA/B;AACA,SAASC,YAAT,QAA6B,mBAA7B;AACA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;AACA,OAAOC,uBAAP,MAAoC,8BAApC;AACA,SAASC,KAAK,IAAIC,mBAAlB,QAA6C,aAA7C,C,CAEA;;AACA,SAASC,yBAAT,cAGE;AAAA,MAFD;AAAEC,IAAAA,KAAF;AAASC,IAAAA,MAAT;AAAiBC,IAAAA;AAAjB,GAEC;AAAA,MADD;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,WAAb;AAA0BC,IAAAA;AAA1B,GACC;AACD,QAAMC,KAAK,GAAGC,IAAI,CAACC,KAAL,CAAYP,MAAM,GAAG,GAArB,IAA6B,GAA3C;;AAEA,MAAK,CAAEG,WAAF,IAAiBD,SAAtB,EAAkC;AACjC;AACA,WAAOnB,OAAO,CAAE,sBAAF,EAA0BO,cAAc,CAAES,KAAF,CAAxC,CAAd;AACA;;AAED,MAAKI,WAAL,EAAmB;AAClB;AACA,WAAOpB,OAAO,CAAE,SAAF,EAAaO,cAAc,CAAES,KAAF,CAA3B,CAAd;AACA;;AAED,MAAKK,YAAL,EAAoB;AACnB;AACA,WAAOrB,OAAO,CAAE,gBAAF,EAAoBO,cAAc,CAAES,KAAF,CAAlC,CAAd;AACA,GAhBA,CAkBD;;;AACA,MAAKE,WAAW,GAAG,CAAnB,EAAuB;AACtB;AACA,WAAOlB,OAAO,CAAE,aAAF,EAAiBO,cAAc,CAAES,KAAF,CAA/B,CAAd;AACA;;AAED,SAAOhB,OAAO;AACb;AACAD,EAAAA,EAAE,CACD,4CADC,EAED,6CAFC,EAGDmB,WAHC,CAFW,EAObX,cAAc,CAAES,KAAF,CAPD,EAQbM,KARa,EASbJ,WATa,CAAd;AAWA;;AAED,SAASO,yBAAT,QAAmE;AAAA,MAA/B;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,IAAb;AAAmBC,IAAAA;AAAnB,GAA+B;AAClE,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,WAAV;AAAuBC,IAAAA,IAAvB;AAA6Bd,IAAAA,MAA7B;AAAqCD,IAAAA;AAArC,MAA+CW,IAArD,CADkE,CAElE;;AACA,QAAMP,WAAW,GAAG,CAAC,CAAEZ,YAAY,CAAEmB,IAAI,CAACK,IAAP,CAAnC;AAEA,QAAM;AAAEb,IAAAA,SAAF;AAAaE,IAAAA,YAAb;AAA2BY,IAAAA;AAA3B,MAA6CxB,SAAS,CACzDyB,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,sBADK;AAELd,MAAAA,YAAY,EAAEe;AAFT,QAGFF,MAAM,CAAEpB,mBAAF,CAHV;AAIA,UAAMuB,MAAM,GAAGF,sBAAsB,CAAER,IAAI,CAACW,EAAP,CAArC;AACA,UAAMC,QAAQ,GAAGF,MAAM,IAAIA,MAAM,CAACG,OAAlC;AACA,WAAO;AACNrB,MAAAA,SAAS,EAAE,CAAC,CAAEkB,MADR;AAENhB,MAAAA,YAAY,EAAEe,iBAAiB,CAAET,IAAI,CAACW,EAAP,CAFzB;AAGNL,MAAAA,aAAa,EAAE,CAAEM;AAHX,KAAP;AAKA,GAb0D,EAc3D,CAAEZ,IAAF,CAd2D,CAA5D;AAiBA,MAAIc,UAAU,GAAG,EAAjB;;AACA,MAAKrB,WAAL,EAAmB;AAClBqB,IAAAA,UAAU,GAAG3C,EAAE,CAAE,YAAF,CAAf;AACA,GAFD,MAEO,IAAKuB,YAAL,EAAoB;AAC1BoB,IAAAA,UAAU,GAAG3C,EAAE,CAAE,aAAF,CAAf;AACA;;AAED,SACC,cAAC,aAAD;AACC,IAAA,yBAAyB,MAD1B;AAEC,IAAA,IAAI,EAAC,QAFN;AAGC,IAAA,EAAE,EAAGG;AAHN,KAIMyB,SAJN;AAKC,IAAA,SAAS,EAAC,8CALX;AAMC,IAAA,OAAO,EAAKgB,KAAF,IAAa;AACtBA,MAAAA,KAAK,CAACC,cAAN;AACAf,MAAAA,OAAO;AACP,KATF;AAUC,IAAA,MAAM,EAAGP,YAVV;AAWC,IAAA,QAAQ,EAAGA,YAAY,IAAI,CAAEY,aAX9B;AAYC,IAAA,KAAK,EAAGlB,yBAAyB,CAAEY,IAAF,EAAQ;AACxCR,MAAAA,SADwC;AAExCC,MAAAA,WAFwC;AAGxCC,MAAAA;AAHwC,KAAR,CAZlC;AAiBC,IAAA,WAAW,EAAG,IAjBf;AAkBC,IAAA,eAAe,EAAC;AAlBjB,MAoBC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,qBAAD;AAAuB,IAAA,IAAI,EAAGU,IAA9B;AAAqC,IAAA,KAAK,EAAGf;AAA7C,IADD,EAEGK,YAAY,GACb;AAAM,IAAA,SAAS,EAAC;AAAhB,KACC,cAAC,OAAD,OADD,CADa,GAKb,cAAC,YAAD;AAAc,IAAA,MAAM,EAAGJ;AAAvB,IAPF,CApBD,EA8BC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGX,wBAAwB,CACzBN,OAAO;AACN;AACAF,EAAAA,EAAE,CAAE,2BAAF,CAFI,EAGNS,cAAc,CAAES,KAAF,CAHR,EAINa,MAJM,CADkB,EAOzB;AACCe,IAAAA,IAAI,EACH;AAAM,MAAA,SAAS,EAAC;AAAhB;AAFF,GAPyB,CAD3B,CADD,EAgBGzB,SAAS,GACV,cAAC,uBAAD;AAAyB,IAAA,KAAK,EAAGQ;AAAjC,IADU,GAGV,8BACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACG,CAAC,CAAEc,UAAH,GACCA,UADD,GAEClC,cAAc,CAAEuB,WAAF,CAHlB,CADD,EAMGG,aAAa,IACd,EAAIb,WAAW,IAAIC,YAAnB,CADC,IAEA,cAAC,cAAD,QACGvB,EAAE,CAAE,eAAF,CADL,CARH,CAnBF,CA9BD,CADD;AAmEA;;AAED,eAAe2B,yBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\tSpinner,\n\tVisuallyHidden,\n\t__unstableCompositeItem as CompositeItem,\n} from '@wordpress/components';\nimport { createInterpolateElement } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { getBlockType } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockRatings from '../block-ratings';\nimport DownloadableBlockIcon from '../downloadable-block-icon';\nimport DownloadableBlockNotice from '../downloadable-block-notice';\nimport { store as blockDirectoryStore } from '../../store';\n\n// Return the appropriate block item label, given the block data and status.\nfunction getDownloadableBlockLabel(\n\t{ title, rating, ratingCount },\n\t{ hasNotice, isInstalled, isInstalling }\n) {\n\tconst stars = Math.round( rating / 0.5 ) * 0.5;\n\n\tif ( ! isInstalled && hasNotice ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Retry installing %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalled ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Add %s.', decodeEntities( title ) );\n\t}\n\n\tif ( isInstalling ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Installing %s.', decodeEntities( title ) );\n\t}\n\n\t// No ratings yet, just use the title.\n\tif ( ratingCount < 1 ) {\n\t\t/* translators: %1$s: block title */\n\t\treturn sprintf( 'Install %s.', decodeEntities( title ) );\n\t}\n\n\treturn sprintf(\n\t\t/* translators: %1$s: block title, %2$s: average rating, %3$s: total ratings count. */\n\t\t_n(\n\t\t\t'Install %1$s. %2$s stars with %3$s review.',\n\t\t\t'Install %1$s. %2$s stars with %3$s reviews.',\n\t\t\tratingCount\n\t\t),\n\t\tdecodeEntities( title ),\n\t\tstars,\n\t\tratingCount\n\t);\n}\n\nfunction DownloadableBlockListItem( { composite, item, onClick } ) {\n\tconst { author, description, icon, rating, title } = item;\n\t// getBlockType returns a block object if this block exists, or null if not.\n\tconst isInstalled = !! getBlockType( item.name );\n\n\tconst { hasNotice, isInstalling, isInstallable } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetErrorNoticeForBlock,\n\t\t\t\tisInstalling: isBlockInstalling,\n\t\t\t} = select( blockDirectoryStore );\n\t\t\tconst notice = getErrorNoticeForBlock( item.id );\n\t\t\tconst hasFatal = notice && notice.isFatal;\n\t\t\treturn {\n\t\t\t\thasNotice: !! notice,\n\t\t\t\tisInstalling: isBlockInstalling( item.id ),\n\t\t\t\tisInstallable: ! hasFatal,\n\t\t\t};\n\t\t},\n\t\t[ item ]\n\t);\n\n\tlet statusText = '';\n\tif ( isInstalled ) {\n\t\tstatusText = __( 'Installed!' );\n\t} else if ( isInstalling ) {\n\t\tstatusText = __( 'Installing…' );\n\t}\n\n\treturn (\n\t\t<CompositeItem\n\t\t\t__experimentalIsFocusable\n\t\t\trole=\"option\"\n\t\t\tas={ Button }\n\t\t\t{ ...composite }\n\t\t\tclassName=\"block-directory-downloadable-block-list-item\"\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonClick();\n\t\t\t} }\n\t\t\tisBusy={ isInstalling }\n\t\t\tdisabled={ isInstalling || ! isInstallable }\n\t\t\tlabel={ getDownloadableBlockLabel( item, {\n\t\t\t\thasNotice,\n\t\t\t\tisInstalled,\n\t\t\t\tisInstalling,\n\t\t\t} ) }\n\t\t\tshowTooltip={ true }\n\t\t\ttooltipPosition=\"top center\"\n\t\t>\n\t\t\t<div className=\"block-directory-downloadable-block-list-item__icon\">\n\t\t\t\t<DownloadableBlockIcon icon={ icon } title={ title } />\n\t\t\t\t{ isInstalling ? (\n\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__spinner\">\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<BlockRatings rating={ rating } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t<span className=\"block-directory-downloadable-block-list-item__details\">\n\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__title\">\n\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %1$s: block title, %2$s: author name. */\n\t\t\t\t\t\t\t__( '%1$s <span>by %2$s</span>' ),\n\t\t\t\t\t\t\tdecodeEntities( title ),\n\t\t\t\t\t\t\tauthor\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tspan: (\n\t\t\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__author\" />\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</span>\n\t\t\t\t{ hasNotice ? (\n\t\t\t\t\t<DownloadableBlockNotice block={ item } />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"block-directory-downloadable-block-list-item__desc\">\n\t\t\t\t\t\t\t{ !! statusText\n\t\t\t\t\t\t\t\t? statusText\n\t\t\t\t\t\t\t\t: decodeEntities( description ) }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{ isInstallable &&\n\t\t\t\t\t\t\t! ( isInstalled || isInstalling ) && (\n\t\t\t\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t\t\t\t{ __( 'Install block' ) }\n\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</span>\n\t\t</CompositeItem>\n\t);\n}\n\nexport default DownloadableBlockListItem;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-directory",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "Extend editor with block directory features to search, download and install blocks.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -26,24 +26,24 @@
26
26
  "react-native": "src/index",
27
27
  "dependencies": {
28
28
  "@babel/runtime": "^7.16.0",
29
- "@wordpress/a11y": "^3.6.0",
30
- "@wordpress/api-fetch": "^6.3.0",
31
- "@wordpress/block-editor": "^8.5.0",
32
- "@wordpress/blocks": "^11.5.0",
33
- "@wordpress/components": "^19.8.0",
34
- "@wordpress/compose": "^5.4.0",
35
- "@wordpress/core-data": "^4.4.0",
36
- "@wordpress/data": "^6.6.0",
37
- "@wordpress/edit-post": "^6.3.0",
38
- "@wordpress/editor": "^12.5.0",
39
- "@wordpress/element": "^4.4.0",
40
- "@wordpress/hooks": "^3.6.0",
41
- "@wordpress/html-entities": "^3.6.0",
42
- "@wordpress/i18n": "^4.6.0",
43
- "@wordpress/icons": "^8.2.0",
44
- "@wordpress/notices": "^3.6.0",
45
- "@wordpress/plugins": "^4.4.0",
46
- "@wordpress/url": "^3.7.0",
29
+ "@wordpress/a11y": "^3.7.0",
30
+ "@wordpress/api-fetch": "^6.4.0",
31
+ "@wordpress/block-editor": "^8.6.0",
32
+ "@wordpress/blocks": "^11.6.0",
33
+ "@wordpress/components": "^19.9.0",
34
+ "@wordpress/compose": "^5.5.0",
35
+ "@wordpress/core-data": "^4.5.0",
36
+ "@wordpress/data": "^6.7.0",
37
+ "@wordpress/edit-post": "^6.4.0",
38
+ "@wordpress/editor": "^12.6.0",
39
+ "@wordpress/element": "^4.5.0",
40
+ "@wordpress/hooks": "^3.7.0",
41
+ "@wordpress/html-entities": "^3.7.0",
42
+ "@wordpress/i18n": "^4.7.0",
43
+ "@wordpress/icons": "^8.3.0",
44
+ "@wordpress/notices": "^3.7.0",
45
+ "@wordpress/plugins": "^4.5.0",
46
+ "@wordpress/url": "^3.8.0",
47
47
  "lodash": "^4.17.21"
48
48
  },
49
49
  "peerDependencies": {
@@ -53,5 +53,5 @@
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  },
56
- "gitHead": "11eb1241e63c9240018323551c6753f8a5fa96f9"
56
+ "gitHead": "1ba52312b56db563df2d8d4fba5b00613fb46d8c"
57
57
  }
@@ -93,6 +93,7 @@ function DownloadableBlockListItem( { composite, item, onClick } ) {
93
93
 
94
94
  return (
95
95
  <CompositeItem
96
+ __experimentalIsFocusable
96
97
  role="option"
97
98
  as={ Button }
98
99
  { ...composite }
@@ -59,7 +59,8 @@ describe( 'DownloadableBlockListItem', () => {
59
59
  <DownloadableBlockListItem onClick={ jest.fn() } item={ plugin } />
60
60
  );
61
61
  const button = getByRole( 'option' );
62
- expect( button.disabled ).toBe( true );
62
+ // Keeping it false to avoid focus loss and disable it using aria-disabled.
63
+ expect( button.disabled ).toBe( false );
63
64
  expect( button.getAttribute( 'aria-disabled' ) ).toBe( 'true' );
64
65
  } );
65
66