@wordpress/patterns 2.32.0 → 2.32.1-next.47f435fc9.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.
Files changed (105) hide show
  1. package/build/api/index.js +35 -29
  2. package/build/api/index.js.map +7 -1
  3. package/build/components/allow-overrides-modal.js +149 -112
  4. package/build/components/allow-overrides-modal.js.map +7 -1
  5. package/build/components/category-selector.js +59 -38
  6. package/build/components/category-selector.js.map +7 -1
  7. package/build/components/create-pattern-modal.js +162 -111
  8. package/build/components/create-pattern-modal.js.map +7 -1
  9. package/build/components/duplicate-pattern-modal.js +85 -66
  10. package/build/components/duplicate-pattern-modal.js.map +7 -1
  11. package/build/components/index.js +50 -33
  12. package/build/components/index.js.map +7 -1
  13. package/build/components/overrides-panel.js +44 -39
  14. package/build/components/overrides-panel.js.map +7 -1
  15. package/build/components/pattern-convert-button.js +144 -133
  16. package/build/components/pattern-convert-button.js.map +7 -1
  17. package/build/components/pattern-overrides-block-controls.js +109 -109
  18. package/build/components/pattern-overrides-block-controls.js.map +7 -1
  19. package/build/components/pattern-overrides-controls.js +86 -69
  20. package/build/components/pattern-overrides-controls.js.map +7 -1
  21. package/build/components/patterns-manage-button.js +96 -97
  22. package/build/components/patterns-manage-button.js.map +7 -1
  23. package/build/components/rename-pattern-category-modal.js +122 -111
  24. package/build/components/rename-pattern-category-modal.js.map +7 -1
  25. package/build/components/rename-pattern-modal.js +95 -73
  26. package/build/components/rename-pattern-modal.js.map +7 -1
  27. package/build/components/reset-overrides-control.js +61 -57
  28. package/build/components/reset-overrides-control.js.map +7 -1
  29. package/build/constants.js +57 -23
  30. package/build/constants.js.map +7 -1
  31. package/build/index.js +27 -24
  32. package/build/index.js.map +7 -1
  33. package/build/lock-unlock.js +31 -15
  34. package/build/lock-unlock.js.map +7 -1
  35. package/build/private-apis.js +71 -48
  36. package/build/private-apis.js.map +7 -1
  37. package/build/private-hooks.js +57 -69
  38. package/build/private-hooks.js.map +7 -1
  39. package/build/store/actions.js +72 -85
  40. package/build/store/actions.js.map +7 -1
  41. package/build/store/constants.js +27 -10
  42. package/build/store/constants.js.map +7 -1
  43. package/build/store/index.js +50 -44
  44. package/build/store/index.js.map +7 -1
  45. package/build/store/reducer.js +30 -14
  46. package/build/store/reducer.js.map +7 -1
  47. package/build/store/selectors.js +26 -13
  48. package/build/store/selectors.js.map +7 -1
  49. package/build-module/api/index.js +14 -25
  50. package/build-module/api/index.js.map +7 -1
  51. package/build-module/components/allow-overrides-modal.js +131 -103
  52. package/build-module/components/allow-overrides-modal.js.map +7 -1
  53. package/build-module/components/category-selector.js +35 -29
  54. package/build-module/components/category-selector.js.map +7 -1
  55. package/build-module/components/create-pattern-modal.js +137 -99
  56. package/build-module/components/create-pattern-modal.js.map +7 -1
  57. package/build-module/components/duplicate-pattern-modal.js +53 -58
  58. package/build-module/components/duplicate-pattern-modal.js.map +7 -1
  59. package/build-module/components/index.js +22 -26
  60. package/build-module/components/index.js.map +7 -1
  61. package/build-module/components/overrides-panel.js +30 -34
  62. package/build-module/components/overrides-panel.js.map +7 -1
  63. package/build-module/components/pattern-convert-button.js +120 -125
  64. package/build-module/components/pattern-convert-button.js.map +7 -1
  65. package/build-module/components/pattern-overrides-block-controls.js +100 -103
  66. package/build-module/components/pattern-overrides-block-controls.js.map +7 -1
  67. package/build-module/components/pattern-overrides-controls.js +69 -58
  68. package/build-module/components/pattern-overrides-controls.js.map +7 -1
  69. package/build-module/components/patterns-manage-button.js +78 -91
  70. package/build-module/components/patterns-manage-button.js.map +7 -1
  71. package/build-module/components/rename-pattern-category-modal.js +106 -101
  72. package/build-module/components/rename-pattern-category-modal.js.map +7 -1
  73. package/build-module/components/rename-pattern-modal.js +80 -64
  74. package/build-module/components/rename-pattern-modal.js.map +7 -1
  75. package/build-module/components/reset-overrides-control.js +46 -51
  76. package/build-module/components/reset-overrides-control.js.map +7 -1
  77. package/build-module/constants.js +29 -18
  78. package/build-module/constants.js.map +7 -1
  79. package/build-module/index.js +6 -6
  80. package/build-module/index.js.map +7 -1
  81. package/build-module/lock-unlock.js +8 -7
  82. package/build-module/lock-unlock.js.map +7 -1
  83. package/build-module/private-apis.js +31 -18
  84. package/build-module/private-apis.js.map +7 -1
  85. package/build-module/private-hooks.js +35 -64
  86. package/build-module/private-hooks.js.map +7 -1
  87. package/build-module/store/actions.js +44 -74
  88. package/build-module/store/actions.js.map +7 -1
  89. package/build-module/store/constants.js +5 -5
  90. package/build-module/store/constants.js.map +7 -1
  91. package/build-module/store/index.js +13 -32
  92. package/build-module/store/index.js.map +7 -1
  93. package/build-module/store/reducer.js +9 -8
  94. package/build-module/store/reducer.js.map +7 -1
  95. package/build-module/store/selectors.js +5 -9
  96. package/build-module/store/selectors.js.map +7 -1
  97. package/build-style/style-rtl.css +3 -138
  98. package/build-style/style.css +3 -138
  99. package/package.json +24 -17
  100. package/src/components/style.scss +5 -0
  101. package/src/style.scss +2 -1
  102. package/build/index.native.js +0 -18
  103. package/build/index.native.js.map +0 -1
  104. package/build-module/index.native.js +0 -11
  105. package/build-module/index.native.js.map +0 -1
@@ -1,30 +1,26 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { BlockSettingsMenuControls } from '@wordpress/block-editor';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import PatternConvertButton from './pattern-convert-button';
10
- import PatternsManageButton from './patterns-manage-button';
11
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
- export default function PatternsMenuItems({
13
- rootClientId
14
- }) {
15
- return /*#__PURE__*/_jsx(BlockSettingsMenuControls, {
16
- children: ({
17
- selectedClientIds,
18
- onClose
19
- }) => /*#__PURE__*/_jsxs(_Fragment, {
20
- children: [/*#__PURE__*/_jsx(PatternConvertButton, {
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { BlockSettingsMenuControls } from "@wordpress/block-editor";
3
+ import PatternConvertButton from "./pattern-convert-button";
4
+ import PatternsManageButton from "./patterns-manage-button";
5
+ function PatternsMenuItems({ rootClientId }) {
6
+ return /* @__PURE__ */ jsx(BlockSettingsMenuControls, { children: ({ selectedClientIds, onClose }) => /* @__PURE__ */ jsxs(Fragment, { children: [
7
+ /* @__PURE__ */ jsx(
8
+ PatternConvertButton,
9
+ {
21
10
  clientIds: selectedClientIds,
22
- rootClientId: rootClientId,
11
+ rootClientId,
23
12
  closeBlockSettingsMenu: onClose
24
- }), selectedClientIds.length === 1 && /*#__PURE__*/_jsx(PatternsManageButton, {
13
+ }
14
+ ),
15
+ selectedClientIds.length === 1 && /* @__PURE__ */ jsx(
16
+ PatternsManageButton,
17
+ {
25
18
  clientId: selectedClientIds[0]
26
- })]
27
- })
28
- });
19
+ }
20
+ )
21
+ ] }) });
29
22
  }
30
- //# sourceMappingURL=index.js.map
23
+ export {
24
+ PatternsMenuItems as default
25
+ };
26
+ //# sourceMappingURL=index.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["BlockSettingsMenuControls","PatternConvertButton","PatternsManageButton","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PatternsMenuItems","rootClientId","children","selectedClientIds","onClose","clientIds","closeBlockSettingsMenu","length","clientId"],"sources":["@wordpress/patterns/src/components/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { BlockSettingsMenuControls } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport PatternConvertButton from './pattern-convert-button';\nimport PatternsManageButton from './patterns-manage-button';\n\nexport default function PatternsMenuItems( { rootClientId } ) {\n\treturn (\n\t\t<BlockSettingsMenuControls>\n\t\t\t{ ( { selectedClientIds, onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<PatternConvertButton\n\t\t\t\t\t\tclientIds={ selectedClientIds }\n\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\tcloseBlockSettingsMenu={ onClose }\n\t\t\t\t\t/>\n\t\t\t\t\t{ selectedClientIds.length === 1 && (\n\t\t\t\t\t\t<PatternsManageButton\n\t\t\t\t\t\t\tclientId={ selectedClientIds[ 0 ] }\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</BlockSettingsMenuControls>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,yBAAyB,QAAQ,yBAAyB;;AAEnE;AACA;AACA;AACA,OAAOC,oBAAoB,MAAM,0BAA0B;AAC3D,OAAOC,oBAAoB,MAAM,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAE5D,eAAe,SAASC,iBAAiBA,CAAE;EAAEC;AAAa,CAAC,EAAG;EAC7D,oBACCN,IAAA,CAACJ,yBAAyB;IAAAW,QAAA,EACvBA,CAAE;MAAEC,iBAAiB;MAAEC;IAAQ,CAAC,kBACjCL,KAAA,CAAAF,SAAA;MAAAK,QAAA,gBACCP,IAAA,CAACH,oBAAoB;QACpBa,SAAS,EAAGF,iBAAmB;QAC/BF,YAAY,EAAGA,YAAc;QAC7BK,sBAAsB,EAAGF;MAAS,CAClC,CAAC,EACAD,iBAAiB,CAACI,MAAM,KAAK,CAAC,iBAC/BZ,IAAA,CAACF,oBAAoB;QACpBe,QAAQ,EAAGL,iBAAiB,CAAE,CAAC;MAAI,CACnC,CACD;IAAA,CACA;EACF,CACyB,CAAC;AAE9B","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/index.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { BlockSettingsMenuControls } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport PatternConvertButton from './pattern-convert-button';\nimport PatternsManageButton from './patterns-manage-button';\n\nexport default function PatternsMenuItems( { rootClientId } ) {\n\treturn (\n\t\t<BlockSettingsMenuControls>\n\t\t\t{ ( { selectedClientIds, onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<PatternConvertButton\n\t\t\t\t\t\tclientIds={ selectedClientIds }\n\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\tcloseBlockSettingsMenu={ onClose }\n\t\t\t\t\t/>\n\t\t\t\t\t{ selectedClientIds.length === 1 && (\n\t\t\t\t\t\t<PatternsManageButton\n\t\t\t\t\t\t\tclientId={ selectedClientIds[ 0 ] }\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</BlockSettingsMenuControls>\n\t);\n}\n"],
5
+ "mappings": "AAeI,mBACC,KADD;AAZJ,SAAS,iCAAiC;AAK1C,OAAO,0BAA0B;AACjC,OAAO,0BAA0B;AAElB,SAAR,kBAAoC,EAAE,aAAa,GAAI;AAC7D,SACC,oBAAC,6BACE,WAAE,EAAE,mBAAmB,QAAQ,MAChC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAY;AAAA,QACZ;AAAA,QACA,wBAAyB;AAAA;AAAA,IAC1B;AAAA,IACE,kBAAkB,WAAW,KAC9B;AAAA,MAAC;AAAA;AAAA,QACA,UAAW,kBAAmB,CAAE;AAAA;AAAA,IACjC;AAAA,KAEF,GAEF;AAEF;",
6
+ "names": []
7
+ }
@@ -1,38 +1,34 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { privateApis as blockEditorPrivateApis, store as blockEditorStore } from '@wordpress/block-editor';
5
- import { PanelBody } from '@wordpress/components';
6
- import { useSelect } from '@wordpress/data';
7
- import { useMemo } from '@wordpress/element';
8
- import { __ } from '@wordpress/i18n';
9
-
10
- /**
11
- * Internal dependencies
12
- */
13
- import { isOverridableBlock } from '../api';
14
- import { unlock } from '../lock-unlock';
15
- import { jsx as _jsx } from "react/jsx-runtime";
16
- const {
17
- BlockQuickNavigation
18
- } = unlock(blockEditorPrivateApis);
19
- export default function OverridesPanel() {
20
- const allClientIds = useSelect(select => select(blockEditorStore).getClientIdsWithDescendants(), []);
21
- const {
22
- getBlock
23
- } = useSelect(blockEditorStore);
24
- const clientIdsWithOverrides = useMemo(() => allClientIds.filter(clientId => {
25
- const block = getBlock(clientId);
26
- return isOverridableBlock(block);
27
- }), [allClientIds, getBlock]);
1
+ import { jsx } from "react/jsx-runtime";
2
+ import {
3
+ privateApis as blockEditorPrivateApis,
4
+ store as blockEditorStore
5
+ } from "@wordpress/block-editor";
6
+ import { PanelBody } from "@wordpress/components";
7
+ import { useSelect } from "@wordpress/data";
8
+ import { useMemo } from "@wordpress/element";
9
+ import { __ } from "@wordpress/i18n";
10
+ import { isOverridableBlock } from "../api";
11
+ import { unlock } from "../lock-unlock";
12
+ const { BlockQuickNavigation } = unlock(blockEditorPrivateApis);
13
+ function OverridesPanel() {
14
+ const allClientIds = useSelect(
15
+ (select) => select(blockEditorStore).getClientIdsWithDescendants(),
16
+ []
17
+ );
18
+ const { getBlock } = useSelect(blockEditorStore);
19
+ const clientIdsWithOverrides = useMemo(
20
+ () => allClientIds.filter((clientId) => {
21
+ const block = getBlock(clientId);
22
+ return isOverridableBlock(block);
23
+ }),
24
+ [allClientIds, getBlock]
25
+ );
28
26
  if (!clientIdsWithOverrides?.length) {
29
27
  return null;
30
28
  }
31
- return /*#__PURE__*/_jsx(PanelBody, {
32
- title: __('Overrides'),
33
- children: /*#__PURE__*/_jsx(BlockQuickNavigation, {
34
- clientIds: clientIdsWithOverrides
35
- })
36
- });
29
+ return /* @__PURE__ */ jsx(PanelBody, { title: __("Overrides"), children: /* @__PURE__ */ jsx(BlockQuickNavigation, { clientIds: clientIdsWithOverrides }) });
37
30
  }
38
- //# sourceMappingURL=overrides-panel.js.map
31
+ export {
32
+ OverridesPanel as default
33
+ };
34
+ //# sourceMappingURL=overrides-panel.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["privateApis","blockEditorPrivateApis","store","blockEditorStore","PanelBody","useSelect","useMemo","__","isOverridableBlock","unlock","jsx","_jsx","BlockQuickNavigation","OverridesPanel","allClientIds","select","getClientIdsWithDescendants","getBlock","clientIdsWithOverrides","filter","clientId","block","length","title","children","clientIds"],"sources":["@wordpress/patterns/src/components/overrides-panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as blockEditorPrivateApis,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { PanelBody } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { isOverridableBlock } from '../api';\nimport { unlock } from '../lock-unlock';\n\nconst { BlockQuickNavigation } = unlock( blockEditorPrivateApis );\n\nexport default function OverridesPanel() {\n\tconst allClientIds = useSelect(\n\t\t( select ) => select( blockEditorStore ).getClientIdsWithDescendants(),\n\t\t[]\n\t);\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst clientIdsWithOverrides = useMemo(\n\t\t() =>\n\t\t\tallClientIds.filter( ( clientId ) => {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\treturn isOverridableBlock( block );\n\t\t\t} ),\n\t\t[ allClientIds, getBlock ]\n\t);\n\n\tif ( ! clientIdsWithOverrides?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Overrides' ) }>\n\t\t\t<BlockQuickNavigation clientIds={ clientIdsWithOverrides } />\n\t\t</PanelBody>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,WAAW,IAAIC,sBAAsB,EACrCC,KAAK,IAAIC,gBAAgB,QACnB,yBAAyB;AAChC,SAASC,SAAS,QAAQ,uBAAuB;AACjD,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,OAAO,QAAQ,oBAAoB;AAC5C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,SAASC,kBAAkB,QAAQ,QAAQ;AAC3C,SAASC,MAAM,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAExC,MAAM;EAAEC;AAAqB,CAAC,GAAGH,MAAM,CAAER,sBAAuB,CAAC;AAEjE,eAAe,SAASY,cAAcA,CAAA,EAAG;EACxC,MAAMC,YAAY,GAAGT,SAAS,CAC3BU,MAAM,IAAMA,MAAM,CAAEZ,gBAAiB,CAAC,CAACa,2BAA2B,CAAC,CAAC,EACtE,EACD,CAAC;EACD,MAAM;IAAEC;EAAS,CAAC,GAAGZ,SAAS,CAAEF,gBAAiB,CAAC;EAClD,MAAMe,sBAAsB,GAAGZ,OAAO,CACrC,MACCQ,YAAY,CAACK,MAAM,CAAIC,QAAQ,IAAM;IACpC,MAAMC,KAAK,GAAGJ,QAAQ,CAAEG,QAAS,CAAC;IAClC,OAAOZ,kBAAkB,CAAEa,KAAM,CAAC;EACnC,CAAE,CAAC,EACJ,CAAEP,YAAY,EAAEG,QAAQ,CACzB,CAAC;EAED,IAAK,CAAEC,sBAAsB,EAAEI,MAAM,EAAG;IACvC,OAAO,IAAI;EACZ;EAEA,oBACCX,IAAA,CAACP,SAAS;IAACmB,KAAK,EAAGhB,EAAE,CAAE,WAAY,CAAG;IAAAiB,QAAA,eACrCb,IAAA,CAACC,oBAAoB;MAACa,SAAS,EAAGP;IAAwB,CAAE;EAAC,CACnD,CAAC;AAEd","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/overrides-panel.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as blockEditorPrivateApis,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { PanelBody } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { isOverridableBlock } from '../api';\nimport { unlock } from '../lock-unlock';\n\nconst { BlockQuickNavigation } = unlock( blockEditorPrivateApis );\n\nexport default function OverridesPanel() {\n\tconst allClientIds = useSelect(\n\t\t( select ) => select( blockEditorStore ).getClientIdsWithDescendants(),\n\t\t[]\n\t);\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst clientIdsWithOverrides = useMemo(\n\t\t() =>\n\t\t\tallClientIds.filter( ( clientId ) => {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\treturn isOverridableBlock( block );\n\t\t\t} ),\n\t\t[ allClientIds, getBlock ]\n\t);\n\n\tif ( ! clientIdsWithOverrides?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Overrides' ) }>\n\t\t\t<BlockQuickNavigation clientIds={ clientIdsWithOverrides } />\n\t\t</PanelBody>\n\t);\n}\n"],
5
+ "mappings": "AAyCG;AAtCH;AAAA,EACC,eAAe;AAAA,EACf,SAAS;AAAA,OACH;AACP,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,SAAS,UAAU;AAKnB,SAAS,0BAA0B;AACnC,SAAS,cAAc;AAEvB,MAAM,EAAE,qBAAqB,IAAI,OAAQ,sBAAuB;AAEjD,SAAR,iBAAkC;AACxC,QAAM,eAAe;AAAA,IACpB,CAAE,WAAY,OAAQ,gBAAiB,EAAE,4BAA4B;AAAA,IACrE,CAAC;AAAA,EACF;AACA,QAAM,EAAE,SAAS,IAAI,UAAW,gBAAiB;AACjD,QAAM,yBAAyB;AAAA,IAC9B,MACC,aAAa,OAAQ,CAAE,aAAc;AACpC,YAAM,QAAQ,SAAU,QAAS;AACjC,aAAO,mBAAoB,KAAM;AAAA,IAClC,CAAE;AAAA,IACH,CAAE,cAAc,QAAS;AAAA,EAC1B;AAEA,MAAK,CAAE,wBAAwB,QAAS;AACvC,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,aAAU,OAAQ,GAAI,WAAY,GAClC,8BAAC,wBAAqB,WAAY,wBAAyB,GAC5D;AAEF;",
6
+ "names": []
7
+ }
@@ -1,154 +1,149 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { hasBlockSupport, isReusableBlock, createBlock, serialize, getBlockType } from '@wordpress/blocks';
5
- import { store as blockEditorStore } from '@wordpress/block-editor';
6
- import { useState, useCallback } from '@wordpress/element';
7
- import { MenuItem } from '@wordpress/components';
8
- import { symbol } from '@wordpress/icons';
9
- import { useSelect, useDispatch } from '@wordpress/data';
10
- import { store as coreStore } from '@wordpress/core-data';
11
- import { __, sprintf } from '@wordpress/i18n';
12
- import { store as noticesStore } from '@wordpress/notices';
13
- /**
14
- * Internal dependencies
15
- */
16
- import { store as patternsStore } from '../store';
17
- import CreatePatternModal from './create-pattern-modal';
18
- import { unlock } from '../lock-unlock';
19
- import { PATTERN_SYNC_TYPES } from '../constants';
20
-
21
- /**
22
- * Menu control to convert block(s) to a pattern block.
23
- *
24
- * @param {Object} props Component props.
25
- * @param {string[]} props.clientIds Client ids of selected blocks.
26
- * @param {string} props.rootClientId ID of the currently selected top-level block.
27
- * @param {()=>void} props.closeBlockSettingsMenu Callback to close the block settings menu dropdown.
28
- * @return {import('react').ComponentType} The menu control or null.
29
- */
30
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
31
- export default function PatternConvertButton({
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import {
3
+ hasBlockSupport,
4
+ isReusableBlock,
5
+ createBlock,
6
+ serialize,
7
+ getBlockType
8
+ } from "@wordpress/blocks";
9
+ import { store as blockEditorStore } from "@wordpress/block-editor";
10
+ import { useState, useCallback } from "@wordpress/element";
11
+ import { MenuItem } from "@wordpress/components";
12
+ import { symbol } from "@wordpress/icons";
13
+ import { useSelect, useDispatch } from "@wordpress/data";
14
+ import { store as coreStore } from "@wordpress/core-data";
15
+ import { __, sprintf } from "@wordpress/i18n";
16
+ import { store as noticesStore } from "@wordpress/notices";
17
+ import { store as patternsStore } from "../store";
18
+ import CreatePatternModal from "./create-pattern-modal";
19
+ import { unlock } from "../lock-unlock";
20
+ import { PATTERN_SYNC_TYPES } from "../constants";
21
+ function PatternConvertButton({
32
22
  clientIds,
33
23
  rootClientId,
34
24
  closeBlockSettingsMenu
35
25
  }) {
36
- const {
37
- createSuccessNotice
38
- } = useDispatch(noticesStore);
39
- const {
40
- replaceBlocks,
41
- updateBlockAttributes
42
- } = useDispatch(blockEditorStore);
43
- // Ignore reason: false positive of the lint rule.
44
- // eslint-disable-next-line @wordpress/no-unused-vars-before-return
45
- const {
46
- setEditingPattern
47
- } = unlock(useDispatch(patternsStore));
26
+ const { createSuccessNotice } = useDispatch(noticesStore);
27
+ const { replaceBlocks, updateBlockAttributes } = useDispatch(blockEditorStore);
28
+ const { setEditingPattern } = unlock(useDispatch(patternsStore));
48
29
  const [isModalOpen, setIsModalOpen] = useState(false);
49
- const {
50
- getBlockAttributes
51
- } = useSelect(blockEditorStore);
52
- const canConvert = useSelect(select => {
53
- var _getBlocksByClientId;
54
- const {
55
- canUser
56
- } = select(coreStore);
57
- const {
58
- getBlocksByClientId,
59
- canInsertBlockType,
60
- getBlockRootClientId
61
- } = select(blockEditorStore);
62
- const rootId = rootClientId || (clientIds.length > 0 ? getBlockRootClientId(clientIds[0]) : undefined);
63
- const blocks = (_getBlocksByClientId = getBlocksByClientId(clientIds)) !== null && _getBlocksByClientId !== void 0 ? _getBlocksByClientId : [];
64
-
65
- // Check if the block has reusable support defined.
66
- const hasReusableBlockSupport = blockName => {
67
- const blockType = getBlockType(blockName);
68
- const hasParent = blockType && 'parent' in blockType;
69
-
70
- // If the block has a parent, check with false as default, otherwise with true.
71
- return hasBlockSupport(blockName, 'reusable', !hasParent);
72
- };
73
- const isSyncedPattern = blocks.length === 1 && blocks[0] && isReusableBlock(blocks[0]) && !!select(coreStore).getEntityRecord('postType', 'wp_block', blocks[0].attributes.ref);
74
- const isUnsyncedPattern = window?.__experimentalContentOnlyPatternInsertion && blocks.length === 1 && blocks?.[0]?.attributes?.metadata?.patternName;
75
- const _canConvert =
76
- // Hide when this is already a pattern.
77
- !isUnsyncedPattern && !isSyncedPattern &&
78
- // Hide when patterns are disabled.
79
- canInsertBlockType('core/block', rootId) && blocks.every(block =>
80
- // Guard against the case where a regular block has *just* been converted.
81
- !!block &&
82
- // Hide on invalid blocks.
83
- block.isValid &&
84
- // Hide when block doesn't support being made into a pattern.
85
- hasReusableBlockSupport(block.name)) &&
86
- // Hide when current doesn't have permission to do that.
87
- // Blocks refers to the wp_block post type, this checks the ability to create a post of that type.
88
- !!canUser('create', {
89
- kind: 'postType',
90
- name: 'wp_block'
91
- });
92
- return _canConvert;
93
- }, [clientIds, rootClientId]);
94
- const {
95
- getBlocksByClientId
96
- } = useSelect(blockEditorStore);
97
- const getContent = useCallback(() => serialize(getBlocksByClientId(clientIds)), [getBlocksByClientId, clientIds]);
30
+ const { getBlockAttributes } = useSelect(blockEditorStore);
31
+ const canConvert = useSelect(
32
+ (select) => {
33
+ const { canUser } = select(coreStore);
34
+ const {
35
+ getBlocksByClientId: getBlocksByClientId2,
36
+ canInsertBlockType,
37
+ getBlockRootClientId
38
+ } = select(blockEditorStore);
39
+ const rootId = rootClientId || (clientIds.length > 0 ? getBlockRootClientId(clientIds[0]) : void 0);
40
+ const blocks = getBlocksByClientId2(clientIds) ?? [];
41
+ const hasReusableBlockSupport = (blockName) => {
42
+ const blockType = getBlockType(blockName);
43
+ const hasParent = blockType && "parent" in blockType;
44
+ return hasBlockSupport(blockName, "reusable", !hasParent);
45
+ };
46
+ const isSyncedPattern = blocks.length === 1 && blocks[0] && isReusableBlock(blocks[0]) && !!select(coreStore).getEntityRecord(
47
+ "postType",
48
+ "wp_block",
49
+ blocks[0].attributes.ref
50
+ );
51
+ const isUnsyncedPattern = window?.__experimentalContentOnlyPatternInsertion && blocks.length === 1 && blocks?.[0]?.attributes?.metadata?.patternName;
52
+ const _canConvert = (
53
+ // Hide when this is already a pattern.
54
+ !isUnsyncedPattern && !isSyncedPattern && // Hide when patterns are disabled.
55
+ canInsertBlockType("core/block", rootId) && blocks.every(
56
+ (block) => (
57
+ // Guard against the case where a regular block has *just* been converted.
58
+ !!block && // Hide on invalid blocks.
59
+ block.isValid && // Hide when block doesn't support being made into a pattern.
60
+ hasReusableBlockSupport(block.name)
61
+ )
62
+ ) && // Hide when current doesn't have permission to do that.
63
+ // Blocks refers to the wp_block post type, this checks the ability to create a post of that type.
64
+ !!canUser("create", {
65
+ kind: "postType",
66
+ name: "wp_block"
67
+ })
68
+ );
69
+ return _canConvert;
70
+ },
71
+ [clientIds, rootClientId]
72
+ );
73
+ const { getBlocksByClientId } = useSelect(blockEditorStore);
74
+ const getContent = useCallback(
75
+ () => serialize(getBlocksByClientId(clientIds)),
76
+ [getBlocksByClientId, clientIds]
77
+ );
98
78
  if (!canConvert) {
99
79
  return null;
100
80
  }
101
- const handleSuccess = ({
102
- pattern
103
- }) => {
81
+ const handleSuccess = ({ pattern }) => {
104
82
  if (pattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced) {
105
83
  if (clientIds?.length === 1) {
106
84
  const existingAttributes = getBlockAttributes(clientIds[0]);
107
85
  updateBlockAttributes(clientIds[0], {
108
86
  metadata: {
109
- ...(existingAttributes?.metadata ? existingAttributes.metadata : {}),
87
+ ...existingAttributes?.metadata ? existingAttributes.metadata : {},
110
88
  patternName: `core/block/${pattern.id}`,
111
89
  name: pattern.title.raw
112
90
  }
113
91
  });
114
92
  }
115
93
  } else {
116
- const newBlock = createBlock('core/block', {
94
+ const newBlock = createBlock("core/block", {
117
95
  ref: pattern.id
118
96
  });
119
97
  replaceBlocks(clientIds, newBlock);
120
98
  setEditingPattern(newBlock.clientId, true);
121
99
  closeBlockSettingsMenu();
122
100
  }
123
- createSuccessNotice(pattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced ? sprintf(
124
- // translators: %s: the name the user has given to the pattern.
125
- __('Unsynced pattern created: %s'), pattern.title.raw) : sprintf(
126
- // translators: %s: the name the user has given to the pattern.
127
- __('Synced pattern created: %s'), pattern.title.raw), {
128
- type: 'snackbar',
129
- id: 'convert-to-pattern-success'
130
- });
101
+ createSuccessNotice(
102
+ pattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced ? sprintf(
103
+ // translators: %s: the name the user has given to the pattern.
104
+ __("Unsynced pattern created: %s"),
105
+ pattern.title.raw
106
+ ) : sprintf(
107
+ // translators: %s: the name the user has given to the pattern.
108
+ __("Synced pattern created: %s"),
109
+ pattern.title.raw
110
+ ),
111
+ {
112
+ type: "snackbar",
113
+ id: "convert-to-pattern-success"
114
+ }
115
+ );
131
116
  setIsModalOpen(false);
132
117
  };
133
- return /*#__PURE__*/_jsxs(_Fragment, {
134
- children: [/*#__PURE__*/_jsx(MenuItem, {
135
- icon: symbol,
136
- onClick: () => setIsModalOpen(true),
137
- "aria-expanded": isModalOpen,
138
- "aria-haspopup": "dialog",
139
- children: __('Create pattern')
140
- }), isModalOpen && /*#__PURE__*/_jsx(CreatePatternModal, {
141
- content: getContent,
142
- onSuccess: pattern => {
143
- handleSuccess(pattern);
144
- },
145
- onError: () => {
146
- setIsModalOpen(false);
147
- },
148
- onClose: () => {
149
- setIsModalOpen(false);
118
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
119
+ /* @__PURE__ */ jsx(
120
+ MenuItem,
121
+ {
122
+ icon: symbol,
123
+ onClick: () => setIsModalOpen(true),
124
+ "aria-expanded": isModalOpen,
125
+ "aria-haspopup": "dialog",
126
+ children: __("Create pattern")
127
+ }
128
+ ),
129
+ isModalOpen && /* @__PURE__ */ jsx(
130
+ CreatePatternModal,
131
+ {
132
+ content: getContent,
133
+ onSuccess: (pattern) => {
134
+ handleSuccess(pattern);
135
+ },
136
+ onError: () => {
137
+ setIsModalOpen(false);
138
+ },
139
+ onClose: () => {
140
+ setIsModalOpen(false);
141
+ }
150
142
  }
151
- })]
152
- });
143
+ )
144
+ ] });
153
145
  }
154
- //# sourceMappingURL=pattern-convert-button.js.map
146
+ export {
147
+ PatternConvertButton as default
148
+ };
149
+ //# sourceMappingURL=pattern-convert-button.js.map
@@ -1 +1,7 @@
1
- {"version":3,"names":["hasBlockSupport","isReusableBlock","createBlock","serialize","getBlockType","store","blockEditorStore","useState","useCallback","MenuItem","symbol","useSelect","useDispatch","coreStore","__","sprintf","noticesStore","patternsStore","CreatePatternModal","unlock","PATTERN_SYNC_TYPES","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PatternConvertButton","clientIds","rootClientId","closeBlockSettingsMenu","createSuccessNotice","replaceBlocks","updateBlockAttributes","setEditingPattern","isModalOpen","setIsModalOpen","getBlockAttributes","canConvert","select","_getBlocksByClientId","canUser","getBlocksByClientId","canInsertBlockType","getBlockRootClientId","rootId","length","undefined","blocks","hasReusableBlockSupport","blockName","blockType","hasParent","isSyncedPattern","getEntityRecord","attributes","ref","isUnsyncedPattern","window","__experimentalContentOnlyPatternInsertion","metadata","patternName","_canConvert","every","block","isValid","name","kind","getContent","handleSuccess","pattern","wp_pattern_sync_status","unsynced","existingAttributes","id","title","raw","newBlock","clientId","type","children","icon","onClick","content","onSuccess","onError","onClose"],"sources":["@wordpress/patterns/src/components/pattern-convert-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\thasBlockSupport,\n\tisReusableBlock,\n\tcreateBlock,\n\tserialize,\n\tgetBlockType,\n} from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useState, useCallback } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n/**\n * Internal dependencies\n */\nimport { store as patternsStore } from '../store';\nimport CreatePatternModal from './create-pattern-modal';\nimport { unlock } from '../lock-unlock';\nimport { PATTERN_SYNC_TYPES } from '../constants';\n\n/**\n * Menu control to convert block(s) to a pattern block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.closeBlockSettingsMenu Callback to close the block settings menu dropdown.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function PatternConvertButton( {\n\tclientIds,\n\trootClientId,\n\tcloseBlockSettingsMenu,\n} ) {\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst { replaceBlocks, updateBlockAttributes } =\n\t\tuseDispatch( blockEditorStore );\n\t// Ignore reason: false positive of the lint rule.\n\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\tconst { setEditingPattern } = unlock( useDispatch( patternsStore ) );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\t// Check if the block has reusable support defined.\n\t\t\tconst hasReusableBlockSupport = ( blockName ) => {\n\t\t\t\tconst blockType = getBlockType( blockName );\n\t\t\t\tconst hasParent = blockType && 'parent' in blockType;\n\n\t\t\t\t// If the block has a parent, check with false as default, otherwise with true.\n\t\t\t\treturn hasBlockSupport( blockName, 'reusable', ! hasParent );\n\t\t\t};\n\n\t\t\tconst isSyncedPattern =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst isUnsyncedPattern =\n\t\t\t\twindow?.__experimentalContentOnlyPatternInsertion &&\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks?.[ 0 ]?.attributes?.metadata?.patternName;\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a pattern.\n\t\t\t\t! isUnsyncedPattern &&\n\t\t\t\t! isSyncedPattern &&\n\t\t\t\t// Hide when patterns are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made into a pattern.\n\t\t\t\t\t\thasReusableBlockSupport( block.name )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t// Blocks refers to the wp_block post type, this checks the ability to create a post of that type.\n\t\t\t\t!! canUser( 'create', {\n\t\t\t\t\tkind: 'postType',\n\t\t\t\t\tname: 'wp_block',\n\t\t\t\t} );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\tconst { getBlocksByClientId } = useSelect( blockEditorStore );\n\tconst getContent = useCallback(\n\t\t() => serialize( getBlocksByClientId( clientIds ) ),\n\t\t[ getBlocksByClientId, clientIds ]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\tconst handleSuccess = ( { pattern } ) => {\n\t\tif ( pattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced ) {\n\t\t\tif ( clientIds?.length === 1 ) {\n\t\t\t\tconst existingAttributes = getBlockAttributes( clientIds[ 0 ] );\n\t\t\t\tupdateBlockAttributes( clientIds[ 0 ], {\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...( existingAttributes?.metadata\n\t\t\t\t\t\t\t? existingAttributes.metadata\n\t\t\t\t\t\t\t: {} ),\n\t\t\t\t\t\tpatternName: `core/block/${ pattern.id }`,\n\t\t\t\t\t\tname: pattern.title.raw,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\tconst newBlock = createBlock( 'core/block', {\n\t\t\t\tref: pattern.id,\n\t\t\t} );\n\n\t\t\treplaceBlocks( clientIds, newBlock );\n\t\t\tsetEditingPattern( newBlock.clientId, true );\n\t\t\tcloseBlockSettingsMenu();\n\t\t}\n\n\t\tcreateSuccessNotice(\n\t\t\tpattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\tpattern.title.raw\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\tpattern.title.raw\n\t\t\t\t ),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'convert-to-pattern-success',\n\t\t\t}\n\t\t);\n\t\tsetIsModalOpen( false );\n\t};\n\treturn (\n\t\t<>\n\t\t\t<MenuItem\n\t\t\t\ticon={ symbol }\n\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\taria-expanded={ isModalOpen }\n\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t>\n\t\t\t\t{ __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<CreatePatternModal\n\t\t\t\t\tcontent={ getContent }\n\t\t\t\t\tonSuccess={ ( pattern ) => {\n\t\t\t\t\t\thandleSuccess( pattern );\n\t\t\t\t\t} }\n\t\t\t\t\tonError={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/pattern-convert-button.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\thasBlockSupport,\n\tisReusableBlock,\n\tcreateBlock,\n\tserialize,\n\tgetBlockType,\n} from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useState, useCallback } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { symbol } from '@wordpress/icons';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n/**\n * Internal dependencies\n */\nimport { store as patternsStore } from '../store';\nimport CreatePatternModal from './create-pattern-modal';\nimport { unlock } from '../lock-unlock';\nimport { PATTERN_SYNC_TYPES } from '../constants';\n\n/**\n * Menu control to convert block(s) to a pattern block.\n *\n * @param {Object} props Component props.\n * @param {string[]} props.clientIds Client ids of selected blocks.\n * @param {string} props.rootClientId ID of the currently selected top-level block.\n * @param {()=>void} props.closeBlockSettingsMenu Callback to close the block settings menu dropdown.\n * @return {import('react').ComponentType} The menu control or null.\n */\nexport default function PatternConvertButton( {\n\tclientIds,\n\trootClientId,\n\tcloseBlockSettingsMenu,\n} ) {\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst { replaceBlocks, updateBlockAttributes } =\n\t\tuseDispatch( blockEditorStore );\n\t// Ignore reason: false positive of the lint rule.\n\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\tconst { setEditingPattern } = unlock( useDispatch( patternsStore ) );\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\tconst canConvert = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canUser } = select( coreStore );\n\t\t\tconst {\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst rootId =\n\t\t\t\trootClientId ||\n\t\t\t\t( clientIds.length > 0\n\t\t\t\t\t? getBlockRootClientId( clientIds[ 0 ] )\n\t\t\t\t\t: undefined );\n\n\t\t\tconst blocks = getBlocksByClientId( clientIds ) ?? [];\n\n\t\t\t// Check if the block has reusable support defined.\n\t\t\tconst hasReusableBlockSupport = ( blockName ) => {\n\t\t\t\tconst blockType = getBlockType( blockName );\n\t\t\t\tconst hasParent = blockType && 'parent' in blockType;\n\n\t\t\t\t// If the block has a parent, check with false as default, otherwise with true.\n\t\t\t\treturn hasBlockSupport( blockName, 'reusable', ! hasParent );\n\t\t\t};\n\n\t\t\tconst isSyncedPattern =\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks[ 0 ] &&\n\t\t\t\tisReusableBlock( blocks[ 0 ] ) &&\n\t\t\t\t!! select( coreStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_block',\n\t\t\t\t\tblocks[ 0 ].attributes.ref\n\t\t\t\t);\n\n\t\t\tconst isUnsyncedPattern =\n\t\t\t\twindow?.__experimentalContentOnlyPatternInsertion &&\n\t\t\t\tblocks.length === 1 &&\n\t\t\t\tblocks?.[ 0 ]?.attributes?.metadata?.patternName;\n\n\t\t\tconst _canConvert =\n\t\t\t\t// Hide when this is already a pattern.\n\t\t\t\t! isUnsyncedPattern &&\n\t\t\t\t! isSyncedPattern &&\n\t\t\t\t// Hide when patterns are disabled.\n\t\t\t\tcanInsertBlockType( 'core/block', rootId ) &&\n\t\t\t\tblocks.every(\n\t\t\t\t\t( block ) =>\n\t\t\t\t\t\t// Guard against the case where a regular block has *just* been converted.\n\t\t\t\t\t\t!! block &&\n\t\t\t\t\t\t// Hide on invalid blocks.\n\t\t\t\t\t\tblock.isValid &&\n\t\t\t\t\t\t// Hide when block doesn't support being made into a pattern.\n\t\t\t\t\t\thasReusableBlockSupport( block.name )\n\t\t\t\t) &&\n\t\t\t\t// Hide when current doesn't have permission to do that.\n\t\t\t\t// Blocks refers to the wp_block post type, this checks the ability to create a post of that type.\n\t\t\t\t!! canUser( 'create', {\n\t\t\t\t\tkind: 'postType',\n\t\t\t\t\tname: 'wp_block',\n\t\t\t\t} );\n\n\t\t\treturn _canConvert;\n\t\t},\n\t\t[ clientIds, rootClientId ]\n\t);\n\tconst { getBlocksByClientId } = useSelect( blockEditorStore );\n\tconst getContent = useCallback(\n\t\t() => serialize( getBlocksByClientId( clientIds ) ),\n\t\t[ getBlocksByClientId, clientIds ]\n\t);\n\n\tif ( ! canConvert ) {\n\t\treturn null;\n\t}\n\n\tconst handleSuccess = ( { pattern } ) => {\n\t\tif ( pattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced ) {\n\t\t\tif ( clientIds?.length === 1 ) {\n\t\t\t\tconst existingAttributes = getBlockAttributes( clientIds[ 0 ] );\n\t\t\t\tupdateBlockAttributes( clientIds[ 0 ], {\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...( existingAttributes?.metadata\n\t\t\t\t\t\t\t? existingAttributes.metadata\n\t\t\t\t\t\t\t: {} ),\n\t\t\t\t\t\tpatternName: `core/block/${ pattern.id }`,\n\t\t\t\t\t\tname: pattern.title.raw,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\tconst newBlock = createBlock( 'core/block', {\n\t\t\t\tref: pattern.id,\n\t\t\t} );\n\n\t\t\treplaceBlocks( clientIds, newBlock );\n\t\t\tsetEditingPattern( newBlock.clientId, true );\n\t\t\tcloseBlockSettingsMenu();\n\t\t}\n\n\t\tcreateSuccessNotice(\n\t\t\tpattern.wp_pattern_sync_status === PATTERN_SYNC_TYPES.unsynced\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t__( 'Unsynced pattern created: %s' ),\n\t\t\t\t\t\tpattern.title.raw\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t// translators: %s: the name the user has given to the pattern.\n\t\t\t\t\t\t__( 'Synced pattern created: %s' ),\n\t\t\t\t\t\tpattern.title.raw\n\t\t\t\t ),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'convert-to-pattern-success',\n\t\t\t}\n\t\t);\n\t\tsetIsModalOpen( false );\n\t};\n\treturn (\n\t\t<>\n\t\t\t<MenuItem\n\t\t\t\ticon={ symbol }\n\t\t\t\tonClick={ () => setIsModalOpen( true ) }\n\t\t\t\taria-expanded={ isModalOpen }\n\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t>\n\t\t\t\t{ __( 'Create pattern' ) }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<CreatePatternModal\n\t\t\t\t\tcontent={ getContent }\n\t\t\t\t\tonSuccess={ ( pattern ) => {\n\t\t\t\t\t\thandleSuccess( pattern );\n\t\t\t\t\t} }\n\t\t\t\t\tonError={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["getBlocksByClientId"]
7
+ }