@wordpress/block-editor 12.3.2 → 12.3.4

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.
Files changed (52) hide show
  1. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +3 -6
  2. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  3. package/build/components/block-removal-warning-modal/index.js +1 -1
  4. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  5. package/build/components/global-styles/filters-panel.js +1 -1
  6. package/build/components/global-styles/filters-panel.js.map +1 -1
  7. package/build/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  8. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  9. package/build/components/inserter/block-patterns-tab.js +7 -35
  10. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  11. package/build/components/inserter/hooks/use-block-types-state.js +3 -4
  12. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  13. package/build/components/inserter/hooks/use-patterns-state.js +9 -3
  14. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  15. package/build/components/inserter/reusable-blocks-tab.js +1 -1
  16. package/build/components/inserter/reusable-blocks-tab.js.map +1 -1
  17. package/build/store/selectors.js +31 -15
  18. package/build/store/selectors.js.map +1 -1
  19. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +4 -6
  20. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  21. package/build-module/components/block-removal-warning-modal/index.js +2 -2
  22. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  23. package/build-module/components/global-styles/filters-panel.js +2 -2
  24. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  25. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  26. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  27. package/build-module/components/inserter/block-patterns-tab.js +7 -33
  28. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  29. package/build-module/components/inserter/hooks/use-block-types-state.js +3 -4
  30. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  31. package/build-module/components/inserter/hooks/use-patterns-state.js +9 -3
  32. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  33. package/build-module/components/inserter/reusable-blocks-tab.js +1 -1
  34. package/build-module/components/inserter/reusable-blocks-tab.js.map +1 -1
  35. package/build-module/store/selectors.js +31 -15
  36. package/build-module/store/selectors.js.map +1 -1
  37. package/build-style/content-rtl.css +3 -0
  38. package/build-style/content.css +3 -0
  39. package/build-style/style-rtl.css +1 -2
  40. package/build-style/style.css +1 -2
  41. package/package.json +9 -9
  42. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +4 -8
  43. package/src/components/block-removal-warning-modal/index.js +4 -6
  44. package/src/components/default-block-appender/content.scss +11 -0
  45. package/src/components/global-styles/filters-panel.js +2 -2
  46. package/src/components/inserter/block-patterns-explorer/patterns-list.js +8 -2
  47. package/src/components/inserter/block-patterns-tab.js +8 -56
  48. package/src/components/inserter/hooks/use-block-types-state.js +3 -4
  49. package/src/components/inserter/hooks/use-patterns-state.js +35 -19
  50. package/src/components/inserter/reusable-blocks-tab.js +1 -1
  51. package/src/components/list-view/style.scss +1 -2
  52. package/src/store/selectors.js +51 -20
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useCallback } from '@wordpress/element';
4
+ import { useCallback, useMemo } from '@wordpress/element';
5
5
  import { cloneBlock } from '@wordpress/blocks';
6
6
  import { useDispatch, useSelect } from '@wordpress/data';
7
7
  import { __, sprintf } from '@wordpress/i18n';
@@ -11,6 +11,11 @@ import { store as noticesStore } from '@wordpress/notices';
11
11
  */
12
12
 
13
13
  import { store as blockEditorStore } from '../../../store';
14
+ const CUSTOM_CATEGORY = {
15
+ name: 'custom',
16
+ label: __('My patterns'),
17
+ description: __('Custom patterns add by site users')
18
+ };
14
19
  /**
15
20
  * Retrieves the block patterns inserter state.
16
21
  *
@@ -34,6 +39,7 @@ const usePatternsState = (onInsert, rootClientId) => {
34
39
  patternCategories: getSettings().__experimentalBlockPatternCategories
35
40
  };
36
41
  }, [rootClientId]);
42
+ const allCategories = useMemo(() => [...patternCategories, CUSTOM_CATEGORY], [patternCategories]);
37
43
  const {
38
44
  createSuccessNotice
39
45
  } = useDispatch(noticesStore);
@@ -44,8 +50,8 @@ const usePatternsState = (onInsert, rootClientId) => {
44
50
  __('Block pattern "%s" inserted.'), pattern.title), {
45
51
  type: 'snackbar'
46
52
  });
47
- }, []);
48
- return [patterns, patternCategories, onClickPattern];
53
+ }, [createSuccessNotice, onInsert]);
54
+ return [patterns, allCategories, onClickPattern];
49
55
  };
50
56
 
51
57
  export default usePatternsState;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"names":["useCallback","cloneBlock","useDispatch","useSelect","__","sprintf","store","noticesStore","blockEditorStore","usePatternsState","onInsert","rootClientId","patternCategories","patterns","select","__experimentalGetAllowedPatterns","getSettings","__experimentalBlockPatternCategories","createSuccessNotice","onClickPattern","pattern","blocks","map","block","name","title","type"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,QAA4B,oBAA5B;AACA,SAASC,UAAT,QAA2B,mBAA3B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,gBAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B;AACtD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkCV,SAAS,CAC9CW,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,gCAAF;AAAoCC,MAAAA;AAApC,QACLF,MAAM,CAAEN,gBAAF,CADP;AAEA,WAAO;AACNK,MAAAA,QAAQ,EAAEE,gCAAgC,CAAEJ,YAAF,CADpC;AAENC,MAAAA,iBAAiB,EAChBI,WAAW,GAAGC;AAHT,KAAP;AAKA,GAT+C,EAUhD,CAAEN,YAAF,CAVgD,CAAjD;AAYA,QAAM;AAAEO,IAAAA;AAAF,MAA0BhB,WAAW,CAAEK,YAAF,CAA3C;AACA,QAAMY,cAAc,GAAGnB,WAAW,CAAE,CAAEoB,OAAF,EAAWC,MAAX,KAAuB;AAC1DX,IAAAA,QAAQ,CACP,CAAEW,MAAF,aAAEA,MAAF,cAAEA,MAAF,GAAY,EAAZ,EAAiBC,GAAjB,CAAwBC,KAAF,IAAatB,UAAU,CAAEsB,KAAF,CAA7C,CADO,EAEPH,OAAO,CAACI,IAFD,CAAR;AAIAN,IAAAA,mBAAmB,CAClBb,OAAO;AACN;AACAD,IAAAA,EAAE,CAAE,8BAAF,CAFI,EAGNgB,OAAO,CAACK,KAHF,CADW,EAMlB;AACCC,MAAAA,IAAI,EAAE;AADP,KANkB,CAAnB;AAUA,GAfiC,EAe/B,EAf+B,CAAlC;AAiBA,SAAO,CAAEb,QAAF,EAAYD,iBAAZ,EAA+BO,cAA/B,CAAP;AACA,CAhCD;;AAkCA,eAAeV,gBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { cloneBlock } 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';\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 * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)\n */\nconst usePatternsState = ( onInsert, rootClientId ) => {\n\tconst { patternCategories, patterns } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tpatternCategories:\n\t\t\t\t\tgetSettings().__experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback( ( pattern, blocks ) => {\n\t\tonInsert(\n\t\t\t( blocks ?? [] ).map( ( block ) => cloneBlock( block ) ),\n\t\t\tpattern.name\n\t\t);\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: block pattern title. */\n\t\t\t\t__( 'Block pattern \"%s\" inserted.' ),\n\t\t\t\tpattern.title\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}, [] );\n\n\treturn [ patterns, patternCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"names":["useCallback","useMemo","cloneBlock","useDispatch","useSelect","__","sprintf","store","noticesStore","blockEditorStore","CUSTOM_CATEGORY","name","label","description","usePatternsState","onInsert","rootClientId","patternCategories","patterns","select","__experimentalGetAllowedPatterns","getSettings","__experimentalBlockPatternCategories","allCategories","createSuccessNotice","onClickPattern","pattern","blocks","map","block","title","type"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,EAAsBC,OAAtB,QAAqC,oBAArC;AACA,SAASC,UAAT,QAA2B,mBAA3B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,gBAA1C;AAEA,MAAMC,eAAe,GAAG;AACvBC,EAAAA,IAAI,EAAE,QADiB;AAEvBC,EAAAA,KAAK,EAAEP,EAAE,CAAE,aAAF,CAFc;AAGvBQ,EAAAA,WAAW,EAAER,EAAE,CAAE,mCAAF;AAHQ,CAAxB;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMS,gBAAgB,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B;AACtD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkCd,SAAS,CAC9Ce,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,gCAAF;AAAoCC,MAAAA;AAApC,QACLF,MAAM,CAAEV,gBAAF,CADP;AAGA,WAAO;AACNS,MAAAA,QAAQ,EAAEE,gCAAgC,CAAEJ,YAAF,CADpC;AAENC,MAAAA,iBAAiB,EAChBI,WAAW,GAAGC;AAHT,KAAP;AAKA,GAV+C,EAWhD,CAAEN,YAAF,CAXgD,CAAjD;AAcA,QAAMO,aAAa,GAAGtB,OAAO,CAC5B,MAAM,CAAE,GAAGgB,iBAAL,EAAwBP,eAAxB,CADsB,EAE5B,CAAEO,iBAAF,CAF4B,CAA7B;AAKA,QAAM;AAAEO,IAAAA;AAAF,MAA0BrB,WAAW,CAAEK,YAAF,CAA3C;AACA,QAAMiB,cAAc,GAAGzB,WAAW,CACjC,CAAE0B,OAAF,EAAWC,MAAX,KAAuB;AACtBZ,IAAAA,QAAQ,CACP,CAAEY,MAAF,aAAEA,MAAF,cAAEA,MAAF,GAAY,EAAZ,EAAiBC,GAAjB,CAAwBC,KAAF,IAAa3B,UAAU,CAAE2B,KAAF,CAA7C,CADO,EAEPH,OAAO,CAACf,IAFD,CAAR;AAIAa,IAAAA,mBAAmB,CAClBlB,OAAO;AACN;AACAD,IAAAA,EAAE,CAAE,8BAAF,CAFI,EAGNqB,OAAO,CAACI,KAHF,CADW,EAMlB;AACCC,MAAAA,IAAI,EAAE;AADP,KANkB,CAAnB;AAUA,GAhBgC,EAiBjC,CAAEP,mBAAF,EAAuBT,QAAvB,CAjBiC,CAAlC;AAoBA,SAAO,CAAEG,QAAF,EAAYK,aAAZ,EAA2BE,cAA3B,CAAP;AACA,CA1CD;;AA4CA,eAAeX,gBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { cloneBlock } 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';\n\nconst CUSTOM_CATEGORY = {\n\tname: 'custom',\n\tlabel: __( 'My patterns' ),\n\tdescription: __( 'Custom patterns add by site users' ),\n};\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 * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)\n */\nconst usePatternsState = ( onInsert, rootClientId ) => {\n\tconst { patternCategories, patterns } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tpatternCategories:\n\t\t\t\t\tgetSettings().__experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst allCategories = useMemo(\n\t\t() => [ ...patternCategories, CUSTOM_CATEGORY ],\n\t\t[ patternCategories ]\n\t);\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback(\n\t\t( pattern, blocks ) => {\n\t\t\tonInsert(\n\t\t\t\t( blocks ?? [] ).map( ( block ) => cloneBlock( block ) ),\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}\n\t\t\t);\n\t\t},\n\t\t[ createSuccessNotice, onInsert ]\n\t);\n\n\treturn [ patterns, allCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n"]}
@@ -71,7 +71,7 @@ export function ReusableBlocksTab({
71
71
  href: addQueryArgs('edit.php', {
72
72
  post_type: 'wp_block'
73
73
  })
74
- }, __('Manage custom patterns'))));
74
+ }, __('Manage my patterns'))));
75
75
  }
76
76
  export default ReusableBlocksTab;
77
77
  //# sourceMappingURL=reusable-blocks-tab.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.js"],"names":["useMemo","__","addQueryArgs","Button","BlockTypesList","InserterPanel","InserterNoResults","useBlockTypesState","ReusableBlocksList","onHover","onInsert","rootClientId","items","onSelectItem","filteredItems","filter","category","length","ReusableBlocksTab","post_type"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,oBAAxB;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASC,MAAT,QAAuB,uBAAvB;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,qBAA3B;AACA,OAAOC,aAAP,MAA0B,SAA1B;AACA,OAAOC,iBAAP,MAA8B,cAA9B;AACA,OAAOC,kBAAP,MAA+B,+BAA/B;;AAEA,SAASC,kBAAT,CAA6B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,QAAX;AAAqBC,EAAAA;AAArB,CAA7B,EAAmE;AAClE,QAAM,CAAEC,KAAF,IAAaC,YAAb,IAA8BN,kBAAkB,CACrDI,YADqD,EAErDD,QAFqD,CAAtD;AAKA,QAAMI,aAAa,GAAGd,OAAO,CAAE,MAAM;AACpC,WAAOY,KAAK,CAACG,MAAN,CAAc,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAoBA,QAAQ,KAAK,UAA/C,CAAP;AACA,GAF4B,EAE1B,CAAEJ,KAAF,CAF0B,CAA7B;;AAIA,MAAKE,aAAa,CAACG,MAAd,KAAyB,CAA9B,EAAkC;AACjC,WAAO,cAAC,iBAAD,OAAP;AACA;;AAED,SACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAGhB,EAAE,CAAE,iBAAF;AAAzB,KACC,cAAC,cAAD;AACC,IAAA,KAAK,EAAGa,aADT;AAEC,IAAA,QAAQ,EAAGD,YAFZ;AAGC,IAAA,OAAO,EAAGJ,OAHX;AAIC,IAAA,KAAK,EAAGR,EAAE,CAAE,iBAAF;AAJX,IADD,CADD;AAUA,C,CAED;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASiB,iBAAT,CAA4B;AAAEP,EAAAA,YAAF;AAAgBD,EAAAA,QAAhB;AAA0BD,EAAAA;AAA1B,CAA5B,EAAkE;AACxE,SACC,8BACC,cAAC,kBAAD;AACC,IAAA,OAAO,EAAGA,OADX;AAEC,IAAA,QAAQ,EAAGC,QAFZ;AAGC,IAAA,YAAY,EAAGC;AAHhB,IADD,EAMC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,MAAD;AACC,IAAA,SAAS,EAAC,+CADX;AAEC,IAAA,OAAO,EAAC,WAFT;AAGC,IAAA,IAAI,EAAGT,YAAY,CAAE,UAAF,EAAc;AAChCiB,MAAAA,SAAS,EAAE;AADqB,KAAd;AAHpB,KAOGlB,EAAE,CAAE,wBAAF,CAPL,CADD,CAND,CADD;AAoBA;AAED,eAAeiB,iBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Button } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nfunction ReusableBlocksList( { onHover, onInsert, rootClientId } ) {\n\tconst [ items, , , onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tconst filteredItems = useMemo( () => {\n\t\treturn items.filter( ( { category } ) => category === 'reusable' );\n\t}, [ items ] );\n\n\tif ( filteredItems.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\treturn (\n\t\t<InserterPanel title={ __( 'Synced patterns' ) }>\n\t\t\t<BlockTypesList\n\t\t\t\titems={ filteredItems }\n\t\t\t\tonSelect={ onSelectItem }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ __( 'Synced patterns' ) }\n\t\t\t/>\n\t\t</InserterPanel>\n\t);\n}\n\n// The unwrapped component is only exported for use by unit tests.\n/**\n * List of reusable blocks shown in the \"Reusable\" tab of the inserter.\n *\n * @param {Object} props Component props.\n * @param {?string} props.rootClientId Client id of block to insert into.\n * @param {Function} props.onInsert Callback to run when item is inserted.\n * @param {Function} props.onHover Callback to run when item is hovered.\n *\n * @return {WPComponent} The component.\n */\nexport function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlocksList\n\t\t\t\tonHover={ onHover }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t<div className=\"block-editor-inserter__manage-reusable-blocks-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"block-editor-inserter__manage-reusable-blocks\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\thref={ addQueryArgs( 'edit.php', {\n\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Manage custom patterns' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.js"],"names":["useMemo","__","addQueryArgs","Button","BlockTypesList","InserterPanel","InserterNoResults","useBlockTypesState","ReusableBlocksList","onHover","onInsert","rootClientId","items","onSelectItem","filteredItems","filter","category","length","ReusableBlocksTab","post_type"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,oBAAxB;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASC,MAAT,QAAuB,uBAAvB;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,qBAA3B;AACA,OAAOC,aAAP,MAA0B,SAA1B;AACA,OAAOC,iBAAP,MAA8B,cAA9B;AACA,OAAOC,kBAAP,MAA+B,+BAA/B;;AAEA,SAASC,kBAAT,CAA6B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,QAAX;AAAqBC,EAAAA;AAArB,CAA7B,EAAmE;AAClE,QAAM,CAAEC,KAAF,IAAaC,YAAb,IAA8BN,kBAAkB,CACrDI,YADqD,EAErDD,QAFqD,CAAtD;AAKA,QAAMI,aAAa,GAAGd,OAAO,CAAE,MAAM;AACpC,WAAOY,KAAK,CAACG,MAAN,CAAc,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAoBA,QAAQ,KAAK,UAA/C,CAAP;AACA,GAF4B,EAE1B,CAAEJ,KAAF,CAF0B,CAA7B;;AAIA,MAAKE,aAAa,CAACG,MAAd,KAAyB,CAA9B,EAAkC;AACjC,WAAO,cAAC,iBAAD,OAAP;AACA;;AAED,SACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAGhB,EAAE,CAAE,iBAAF;AAAzB,KACC,cAAC,cAAD;AACC,IAAA,KAAK,EAAGa,aADT;AAEC,IAAA,QAAQ,EAAGD,YAFZ;AAGC,IAAA,OAAO,EAAGJ,OAHX;AAIC,IAAA,KAAK,EAAGR,EAAE,CAAE,iBAAF;AAJX,IADD,CADD;AAUA,C,CAED;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASiB,iBAAT,CAA4B;AAAEP,EAAAA,YAAF;AAAgBD,EAAAA,QAAhB;AAA0BD,EAAAA;AAA1B,CAA5B,EAAkE;AACxE,SACC,8BACC,cAAC,kBAAD;AACC,IAAA,OAAO,EAAGA,OADX;AAEC,IAAA,QAAQ,EAAGC,QAFZ;AAGC,IAAA,YAAY,EAAGC;AAHhB,IADD,EAMC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,MAAD;AACC,IAAA,SAAS,EAAC,+CADX;AAEC,IAAA,OAAO,EAAC,WAFT;AAGC,IAAA,IAAI,EAAGT,YAAY,CAAE,UAAF,EAAc;AAChCiB,MAAAA,SAAS,EAAE;AADqB,KAAd;AAHpB,KAOGlB,EAAE,CAAE,oBAAF,CAPL,CADD,CAND,CADD;AAoBA;AAED,eAAeiB,iBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Button } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nfunction ReusableBlocksList( { onHover, onInsert, rootClientId } ) {\n\tconst [ items, , , onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tconst filteredItems = useMemo( () => {\n\t\treturn items.filter( ( { category } ) => category === 'reusable' );\n\t}, [ items ] );\n\n\tif ( filteredItems.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\treturn (\n\t\t<InserterPanel title={ __( 'Synced patterns' ) }>\n\t\t\t<BlockTypesList\n\t\t\t\titems={ filteredItems }\n\t\t\t\tonSelect={ onSelectItem }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ __( 'Synced patterns' ) }\n\t\t\t/>\n\t\t</InserterPanel>\n\t);\n}\n\n// The unwrapped component is only exported for use by unit tests.\n/**\n * List of reusable blocks shown in the \"Reusable\" tab of the inserter.\n *\n * @param {Object} props Component props.\n * @param {?string} props.rootClientId Client id of block to insert into.\n * @param {Function} props.onInsert Callback to run when item is inserted.\n * @param {Function} props.onHover Callback to run when item is hovered.\n *\n * @return {WPComponent} The component.\n */\nexport function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlocksList\n\t\t\t\tonHover={ onHover }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t<div className=\"block-editor-inserter__manage-reusable-blocks-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"block-editor-inserter__manage-reusable-blocks\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\thref={ addQueryArgs( 'edit.php', {\n\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Manage my patterns' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
@@ -1765,7 +1765,6 @@ const buildBlockTypeItem = (state, {
1765
1765
  *
1766
1766
  * @param {Object} state Editor state.
1767
1767
  * @param {?string} rootClientId Optional root client ID of block list.
1768
- * @param {?string} syncStatus Optional sync status to filter pattern blocks by.
1769
1768
  *
1770
1769
  * @return {WPEditorInserterItem[]} Items that appear in inserter.
1771
1770
  *
@@ -1783,10 +1782,7 @@ const buildBlockTypeItem = (state, {
1783
1782
  */
1784
1783
 
1785
1784
 
1786
- export const getInserterItems = createSelector((state, rootClientId = null, syncStatus) => {
1787
- const buildBlockTypeInserterItem = buildBlockTypeItem(state, {
1788
- buildScope: 'inserter'
1789
- });
1785
+ export const getInserterItems = createSelector((state, rootClientId = null) => {
1790
1786
  /*
1791
1787
  * Matches block comment delimiters amid serialized content.
1792
1788
  *
@@ -1800,7 +1796,6 @@ export const getInserterItems = createSelector((state, rootClientId = null, sync
1800
1796
  * - prepended ^\s*
1801
1797
  *
1802
1798
  */
1803
-
1804
1799
  const blockParserTokenizer = /^\s*<!--\s+(\/)?wp:([a-z][a-z0-9_-]*\/)?([a-z][a-z0-9_-]*)\s+({(?:(?=([^}]+|}+(?=})|(?!}\s+\/?-->)[^])*)\5|[^]*?)}\s+)?(\/)?-->/;
1805
1800
 
1806
1801
  const buildReusableBlockInserterItem = reusableBlock => {
@@ -1852,8 +1847,13 @@ export const getInserterItems = createSelector((state, rootClientId = null, sync
1852
1847
  };
1853
1848
  };
1854
1849
 
1850
+ const syncedPatternInserterItems = canInsertBlockTypeUnmemoized(state, 'core/block', rootClientId) ? getReusableBlocks(state).filter(reusableBlock => // Filter to either fully synced patterns (sync_status === 'fully'),
1851
+ // or old school reusable blocks (sync_status === '').
1852
+ reusableBlock.meta?.sync_status === 'fully' || reusableBlock.meta?.sync_status === '' || !reusableBlock.meta?.sync_status).map(buildReusableBlockInserterItem) : [];
1853
+ const buildBlockTypeInserterItem = buildBlockTypeItem(state, {
1854
+ buildScope: 'inserter'
1855
+ });
1855
1856
  const blockTypeInserterItems = getBlockTypes().filter(blockType => canIncludeBlockTypeInInserter(state, blockType, rootClientId)).map(buildBlockTypeInserterItem);
1856
- const reusableBlockInserterItems = canInsertBlockTypeUnmemoized(state, 'core/block', rootClientId) ? getReusableBlocks(state).filter(reusableBlock => syncStatus === reusableBlock.meta?.sync_status || !syncStatus && reusableBlock.meta?.sync_status === '').map(buildReusableBlockInserterItem) : [];
1857
1857
  const items = blockTypeInserterItems.reduce((accumulator, item) => {
1858
1858
  const {
1859
1859
  variations = []
@@ -1895,7 +1895,7 @@ export const getInserterItems = createSelector((state, rootClientId = null, sync
1895
1895
  noncore: []
1896
1896
  });
1897
1897
  const sortedBlockTypes = [...coreItems, ...nonCoreItems];
1898
- return [...sortedBlockTypes, ...reusableBlockInserterItems];
1898
+ return [...sortedBlockTypes, ...syncedPatternInserterItems];
1899
1899
  }, (state, rootClientId) => [state.blockListSettings[rootClientId], state.blocks.byClientId, state.blocks.order, state.preferences.insertUsage, state.settings.allowedBlockTypes, state.settings.templateLock, getReusableBlocks(state), getBlockTypes()]);
1900
1900
  /**
1901
1901
  * Determines the items that appear in the available block transforms list.
@@ -2039,9 +2039,24 @@ const checkAllowListRecursive = (blocks, allowedBlockTypes) => {
2039
2039
  return true;
2040
2040
  };
2041
2041
 
2042
+ function getUnsyncedPatterns(state) {
2043
+ var _state$settings$__exp;
2044
+
2045
+ const reusableBlocks = (_state$settings$__exp = state?.settings?.__experimentalReusableBlocks) !== null && _state$settings$__exp !== void 0 ? _state$settings$__exp : EMPTY_ARRAY;
2046
+ return reusableBlocks.filter(reusableBlock => reusableBlock.meta?.sync_status === 'unsynced').map(reusableBlock => {
2047
+ return {
2048
+ name: `core/block/${reusableBlock.id}`,
2049
+ title: reusableBlock.title.raw,
2050
+ categories: ['custom'],
2051
+ content: reusableBlock.content.raw
2052
+ };
2053
+ });
2054
+ }
2055
+
2042
2056
  export const __experimentalGetParsedPattern = createSelector((state, patternName) => {
2043
2057
  const patterns = state.settings.__experimentalBlockPatterns;
2044
- const pattern = patterns.find(({
2058
+ const unsyncedPatterns = getUnsyncedPatterns(state);
2059
+ const pattern = [...patterns, ...unsyncedPatterns].find(({
2045
2060
  name
2046
2061
  }) => name === patternName);
2047
2062
 
@@ -2054,13 +2069,14 @@ export const __experimentalGetParsedPattern = createSelector((state, patternName
2054
2069
  __unstableSkipMigrationLogs: true
2055
2070
  })
2056
2071
  };
2057
- }, state => [state.settings.__experimentalBlockPatterns]);
2072
+ }, state => [state.settings.__experimentalBlockPatterns, state.settings.__experimentalReusableBlocks]);
2058
2073
  const getAllAllowedPatterns = createSelector(state => {
2059
2074
  const patterns = state.settings.__experimentalBlockPatterns;
2075
+ const unsyncedPatterns = getUnsyncedPatterns(state);
2060
2076
  const {
2061
2077
  allowedBlockTypes
2062
2078
  } = getSettings(state);
2063
- const parsedPatterns = patterns.filter(({
2079
+ const parsedPatterns = [...patterns, ...unsyncedPatterns].filter(({
2064
2080
  inserter = true
2065
2081
  }) => !!inserter).map(({
2066
2082
  name
@@ -2069,7 +2085,7 @@ const getAllAllowedPatterns = createSelector(state => {
2069
2085
  blocks
2070
2086
  }) => checkAllowListRecursive(blocks, allowedBlockTypes));
2071
2087
  return allowedPatterns;
2072
- }, state => [state.settings.__experimentalBlockPatterns, state.settings.allowedBlockTypes]);
2088
+ }, state => [state.settings.__experimentalBlockPatterns, state.settings.__experimentalReusableBlocks, state.settings.allowedBlockTypes]);
2073
2089
  /**
2074
2090
  * Returns the list of allowed patterns for inner blocks children.
2075
2091
  *
@@ -2087,7 +2103,7 @@ export const __experimentalGetAllowedPatterns = createSelector((state, rootClien
2087
2103
  name
2088
2104
  }) => canInsertBlockType(state, name, rootClientId)));
2089
2105
  return patternsAllowed;
2090
- }, (state, rootClientId) => [state.settings.__experimentalBlockPatterns, state.settings.allowedBlockTypes, state.settings.templateLock, state.blockListSettings[rootClientId], state.blocks.byClientId.get(rootClientId)]);
2106
+ }, (state, rootClientId) => [state.settings.__experimentalBlockPatterns, state.settings.__experimentalReusableBlocks, state.settings.allowedBlockTypes, state.settings.templateLock, state.blockListSettings[rootClientId], state.blocks.byClientId.get(rootClientId)]);
2091
2107
  /**
2092
2108
  * Returns the list of patterns based on their declared `blockTypes`
2093
2109
  * and a block's name.
@@ -2311,9 +2327,9 @@ export function __experimentalGetLastBlockAttributeChanges(state) {
2311
2327
  */
2312
2328
 
2313
2329
  function getReusableBlocks(state) {
2314
- var _state$settings$__exp;
2330
+ var _state$settings$__exp2;
2315
2331
 
2316
- return (_state$settings$__exp = state?.settings?.__experimentalReusableBlocks) !== null && _state$settings$__exp !== void 0 ? _state$settings$__exp : EMPTY_ARRAY;
2332
+ return (_state$settings$__exp2 = state?.settings?.__experimentalReusableBlocks) !== null && _state$settings$__exp2 !== void 0 ? _state$settings$__exp2 : EMPTY_ARRAY;
2317
2333
  }
2318
2334
  /**
2319
2335
  * Returns whether the navigation mode is enabled.