@wordpress/block-library 7.14.0 → 7.14.1

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 (104) hide show
  1. package/build/button/edit.js +8 -3
  2. package/build/button/edit.js.map +1 -1
  3. package/build/column/index.js +1 -1
  4. package/build/cover/index.js +1 -1
  5. package/build/group/edit.js +0 -17
  6. package/build/group/edit.js.map +1 -1
  7. package/build/group/index.js +1 -7
  8. package/build/group/index.js.map +1 -1
  9. package/build/group/transforms.js +4 -1
  10. package/build/group/transforms.js.map +1 -1
  11. package/build/group/variations.js +2 -1
  12. package/build/group/variations.js.map +1 -1
  13. package/build/media-text/edit.js +25 -11
  14. package/build/media-text/edit.js.map +1 -1
  15. package/build/media-text/media-container.js +4 -3
  16. package/build/media-text/media-container.js.map +1 -1
  17. package/build/navigation/edit/overlay-menu-icon.js +0 -8
  18. package/build/navigation/edit/overlay-menu-icon.js.map +1 -1
  19. package/build/navigation/edit/overlay-menu-preview.js +0 -12
  20. package/build/navigation/edit/overlay-menu-preview.js.map +1 -1
  21. package/build/navigation-link/edit.js +8 -3
  22. package/build/navigation-link/edit.js.map +1 -1
  23. package/build/navigation-submenu/edit.js +8 -3
  24. package/build/navigation-submenu/edit.js.map +1 -1
  25. package/build/post-date/edit.js +10 -6
  26. package/build/post-date/edit.js.map +1 -1
  27. package/build/query/edit/index.js +23 -211
  28. package/build/query/edit/index.js.map +1 -1
  29. package/build/query/edit/query-content.js +169 -0
  30. package/build/query/edit/query-content.js.map +1 -0
  31. package/build/query/edit/query-placeholder.js +69 -6
  32. package/build/query/edit/query-placeholder.js.map +1 -1
  33. package/build/query/utils.js +40 -0
  34. package/build/query/utils.js.map +1 -1
  35. package/build/social-link/edit.js +8 -6
  36. package/build/social-link/edit.js.map +1 -1
  37. package/build/template-part/edit/selection-modal.js +2 -13
  38. package/build/template-part/edit/selection-modal.js.map +1 -1
  39. package/build-module/button/edit.js +7 -3
  40. package/build-module/button/edit.js.map +1 -1
  41. package/build-module/column/index.js +1 -1
  42. package/build-module/cover/index.js +1 -1
  43. package/build-module/group/edit.js +1 -19
  44. package/build-module/group/edit.js.map +1 -1
  45. package/build-module/group/index.js +1 -7
  46. package/build-module/group/index.js.map +1 -1
  47. package/build-module/group/transforms.js +4 -1
  48. package/build-module/group/transforms.js.map +1 -1
  49. package/build-module/group/variations.js +2 -1
  50. package/build-module/group/variations.js.map +1 -1
  51. package/build-module/media-text/edit.js +25 -11
  52. package/build-module/media-text/edit.js.map +1 -1
  53. package/build-module/media-text/media-container.js +4 -3
  54. package/build-module/media-text/media-container.js.map +1 -1
  55. package/build-module/navigation/edit/overlay-menu-icon.js +1 -9
  56. package/build-module/navigation/edit/overlay-menu-icon.js.map +1 -1
  57. package/build-module/navigation/edit/overlay-menu-preview.js +0 -12
  58. package/build-module/navigation/edit/overlay-menu-preview.js.map +1 -1
  59. package/build-module/navigation-link/edit.js +7 -3
  60. package/build-module/navigation-link/edit.js.map +1 -1
  61. package/build-module/navigation-submenu/edit.js +7 -3
  62. package/build-module/navigation-submenu/edit.js.map +1 -1
  63. package/build-module/post-date/edit.js +11 -7
  64. package/build-module/post-date/edit.js.map +1 -1
  65. package/build-module/query/edit/index.js +27 -208
  66. package/build-module/query/edit/index.js.map +1 -1
  67. package/build-module/query/edit/query-content.js +152 -0
  68. package/build-module/query/edit/query-content.js.map +1 -0
  69. package/build-module/query/edit/query-placeholder.js +67 -5
  70. package/build-module/query/edit/query-placeholder.js.map +1 -1
  71. package/build-module/query/utils.js +37 -0
  72. package/build-module/query/utils.js.map +1 -1
  73. package/build-module/social-link/edit.js +9 -7
  74. package/build-module/social-link/edit.js.map +1 -1
  75. package/build-module/template-part/edit/selection-modal.js +3 -14
  76. package/build-module/template-part/edit/selection-modal.js.map +1 -1
  77. package/package.json +14 -14
  78. package/src/button/edit.js +10 -2
  79. package/src/column/block.json +1 -1
  80. package/src/comments/index.php +1 -1
  81. package/src/cover/block.json +1 -1
  82. package/src/group/block.json +1 -7
  83. package/src/group/edit.js +2 -12
  84. package/src/group/transforms.js +1 -0
  85. package/src/group/variations.js +2 -1
  86. package/src/list/test/__snapshots__/edit.native.js.snap +8 -32
  87. package/src/list/test/edit.native.js +16 -68
  88. package/src/media-text/edit.js +45 -29
  89. package/src/media-text/media-container.js +3 -2
  90. package/src/navigation/edit/overlay-menu-icon.js +1 -5
  91. package/src/navigation/edit/overlay-menu-preview.js +0 -10
  92. package/src/navigation/index.php +0 -4
  93. package/src/navigation-link/edit.js +6 -2
  94. package/src/navigation-submenu/edit.js +6 -2
  95. package/src/post-comments-form/index.php +1 -1
  96. package/src/post-date/edit.js +13 -4
  97. package/src/post-featured-image/index.php +1 -1
  98. package/src/query/edit/index.js +50 -227
  99. package/src/query/edit/query-content.js +131 -0
  100. package/src/query/edit/query-placeholder.js +87 -8
  101. package/src/query/utils.js +46 -0
  102. package/src/search/index.php +1 -1
  103. package/src/social-link/edit.js +9 -9
  104. package/src/template-part/edit/selection-modal.js +2 -14
@@ -3,20 +3,86 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.default = QueryPlaceholder;
7
7
 
8
8
  var _element = require("@wordpress/element");
9
9
 
10
10
  var _data = require("@wordpress/data");
11
11
 
12
+ var _blocks = require("@wordpress/blocks");
13
+
12
14
  var _blockEditor = require("@wordpress/block-editor");
13
15
 
14
- var _blocks = require("@wordpress/blocks");
16
+ var _components = require("@wordpress/components");
17
+
18
+ var _i18n = require("@wordpress/i18n");
15
19
 
16
20
  /**
17
21
  * WordPress dependencies
18
22
  */
19
23
  function QueryPlaceholder(_ref) {
24
+ var _blockType$icon;
25
+
26
+ let {
27
+ attributes,
28
+ clientId,
29
+ name,
30
+ openPatternSelectionModal,
31
+ setAttributes
32
+ } = _ref;
33
+ const [isStartingBlank, setIsStartingBlank] = (0, _element.useState)(false);
34
+ const blockProps = (0, _blockEditor.useBlockProps)();
35
+ const {
36
+ blockType,
37
+ allVariations,
38
+ hasPatterns
39
+ } = (0, _data.useSelect)(select => {
40
+ const {
41
+ getBlockVariations,
42
+ getBlockType
43
+ } = select(_blocks.store);
44
+ const {
45
+ getBlockRootClientId,
46
+ __experimentalGetPatternsByBlockTypes
47
+ } = select(_blockEditor.store);
48
+ const rootClientId = getBlockRootClientId(clientId);
49
+ return {
50
+ blockType: getBlockType(name),
51
+ allVariations: getBlockVariations(name),
52
+ hasPatterns: !!__experimentalGetPatternsByBlockTypes(name, rootClientId).length
53
+ };
54
+ }, [name, clientId]);
55
+ const matchingVariation = (0, _blockEditor.__experimentalGetMatchingVariation)(attributes, allVariations);
56
+ const icon = (matchingVariation === null || matchingVariation === void 0 ? void 0 : matchingVariation.icon) || (blockType === null || blockType === void 0 ? void 0 : (_blockType$icon = blockType.icon) === null || _blockType$icon === void 0 ? void 0 : _blockType$icon.src);
57
+ const label = (matchingVariation === null || matchingVariation === void 0 ? void 0 : matchingVariation.title) || (blockType === null || blockType === void 0 ? void 0 : blockType.title);
58
+
59
+ if (isStartingBlank) {
60
+ return (0, _element.createElement)(QueryVariationPicker, {
61
+ clientId: clientId,
62
+ name: name,
63
+ attributes: attributes,
64
+ setAttributes: setAttributes,
65
+ icon: icon,
66
+ label: label
67
+ });
68
+ }
69
+
70
+ return (0, _element.createElement)("div", blockProps, (0, _element.createElement)(_components.Placeholder, {
71
+ icon: icon,
72
+ label: label,
73
+ instructions: (0, _i18n.__)('Choose a pattern for the query loop or start blank.')
74
+ }, !!hasPatterns && (0, _element.createElement)(_components.Button, {
75
+ variant: "primary",
76
+ onClick: openPatternSelectionModal
77
+ }, (0, _i18n.__)('Choose')), (0, _element.createElement)(_components.Button, {
78
+ variant: "secondary",
79
+ onClick: () => {
80
+ setIsStartingBlank(true);
81
+ }
82
+ }, (0, _i18n.__)('Start blank'))));
83
+ }
84
+
85
+ function QueryVariationPicker(_ref2) {
20
86
  let {
21
87
  clientId,
22
88
  name,
@@ -24,7 +90,7 @@ function QueryPlaceholder(_ref) {
24
90
  setAttributes,
25
91
  icon,
26
92
  label
27
- } = _ref;
93
+ } = _ref2;
28
94
  const {
29
95
  defaultVariation,
30
96
  scopeVariations
@@ -65,7 +131,4 @@ function QueryPlaceholder(_ref) {
65
131
  }
66
132
  }));
67
133
  }
68
-
69
- var _default = QueryPlaceholder;
70
- exports.default = _default;
71
134
  //# sourceMappingURL=query-placeholder.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/query/edit/query-placeholder.js"],"names":["QueryPlaceholder","clientId","name","attributes","setAttributes","icon","label","defaultVariation","scopeVariations","select","getBlockVariations","getBlockType","getDefaultBlockVariation","blocksStore","blockType","replaceInnerBlocks","blockEditorStore","blockProps","nextVariation","query","postType","innerBlocks"],"mappings":";;;;;;;;;AAGA;;AACA;;AAKA;;AATA;AACA;AACA;AAYA,SAASA,gBAAT,OAOI;AAAA,MAPuB;AAC1BC,IAAAA,QAD0B;AAE1BC,IAAAA,IAF0B;AAG1BC,IAAAA,UAH0B;AAI1BC,IAAAA,aAJ0B;AAK1BC,IAAAA,IAL0B;AAM1BC,IAAAA;AAN0B,GAOvB;AACH,QAAM;AAAEC,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAAwC,qBAC3CC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,kBADK;AAELC,MAAAA,YAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEI,aAAF,CAJV;AAMA,WAAO;AACNC,MAAAA,SAAS,EAAEH,YAAY,CAAET,IAAF,CADjB;AAENK,MAAAA,gBAAgB,EAAEK,wBAAwB,CAAEV,IAAF,EAAQ,OAAR,CAFpC;AAGNM,MAAAA,eAAe,EAAEE,kBAAkB,CAAER,IAAF,EAAQ,OAAR;AAH7B,KAAP;AAKA,GAb4C,EAc7C,CAAEA,IAAF,CAd6C,CAA9C;AAgBA,QAAM;AAAEa,IAAAA;AAAF,MAAyB,uBAAaC,kBAAb,CAA/B;AACA,QAAMC,UAAU,GAAG,iCAAnB;AACA,SACC,mCAAUA,UAAV,EACC,4BAAC,+CAAD;AACC,IAAA,IAAI,EAAGZ,IADR;AAEC,IAAA,KAAK,EAAGC,KAFT;AAGC,IAAA,UAAU,EAAGE,eAHd;AAIC,IAAA,QAAQ,EAAG,YAAwC;AAAA,UAAtCU,aAAsC,uEAAtBX,gBAAsB;;AAClD,UAAKW,aAAa,CAACf,UAAnB,EAAgC;AAC/BC,QAAAA,aAAa,CAAE,EACd,GAAGc,aAAa,CAACf,UADH;AAEdgB,UAAAA,KAAK,EAAE,EACN,GAAGD,aAAa,CAACf,UAAd,CAAyBgB,KADtB;AAENC,YAAAA,QAAQ,EACPjB,UAAU,CAACgB,KAAX,CAAiBC,QAAjB,IACAF,aAAa,CAACf,UAAd,CAAyBgB,KAAzB,CAA+BC;AAJ1B;AAFO,SAAF,CAAb;AASA;;AACD,UAAKF,aAAa,CAACG,WAAnB,EAAiC;AAChCN,QAAAA,kBAAkB,CACjBd,QADiB,EAEjB,iDACCiB,aAAa,CAACG,WADf,CAFiB,EAKjB,KALiB,CAAlB;AAOA;AACD;AAzBF,IADD,CADD;AA+BA;;eAEcrB,gB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tuseBlockProps,\n\t__experimentalBlockVariationPicker,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport {\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\nfunction QueryPlaceholder( {\n\tclientId,\n\tname,\n\tattributes,\n\tsetAttributes,\n\ticon,\n\tlabel,\n} ) {\n\tconst { defaultVariation, scopeVariations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockVariations,\n\t\t\t\tgetBlockType,\n\t\t\t\tgetDefaultBlockVariation,\n\t\t\t} = select( blocksStore );\n\n\t\t\treturn {\n\t\t\t\tblockType: getBlockType( name ),\n\t\t\t\tdefaultVariation: getDefaultBlockVariation( name, 'block' ),\n\t\t\t\tscopeVariations: getBlockVariations( name, 'block' ),\n\t\t\t};\n\t\t},\n\t\t[ name ]\n\t);\n\tconst { replaceInnerBlocks } = useDispatch( blockEditorStore );\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<__experimentalBlockVariationPicker\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={ label }\n\t\t\t\tvariations={ scopeVariations }\n\t\t\t\tonSelect={ ( nextVariation = defaultVariation ) => {\n\t\t\t\t\tif ( nextVariation.attributes ) {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t...nextVariation.attributes,\n\t\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\t\t...nextVariation.attributes.query,\n\t\t\t\t\t\t\t\tpostType:\n\t\t\t\t\t\t\t\t\tattributes.query.postType ||\n\t\t\t\t\t\t\t\t\tnextVariation.attributes.query.postType,\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\tif ( nextVariation.innerBlocks ) {\n\t\t\t\t\t\treplaceInnerBlocks(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate(\n\t\t\t\t\t\t\t\tnextVariation.innerBlocks\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tfalse\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</div>\n\t);\n}\n\nexport default QueryPlaceholder;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/query/edit/query-placeholder.js"],"names":["QueryPlaceholder","attributes","clientId","name","openPatternSelectionModal","setAttributes","isStartingBlank","setIsStartingBlank","blockProps","blockType","allVariations","hasPatterns","select","getBlockVariations","getBlockType","blocksStore","getBlockRootClientId","__experimentalGetPatternsByBlockTypes","blockEditorStore","rootClientId","length","matchingVariation","icon","src","label","title","QueryVariationPicker","defaultVariation","scopeVariations","getDefaultBlockVariation","replaceInnerBlocks","nextVariation","query","postType","innerBlocks"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useState } from '@wordpress/element';\nimport {\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalBlockVariationPicker,\n\t__experimentalGetMatchingVariation as getMatchingVariation,\n} from '@wordpress/block-editor';\nimport { Button, Placeholder } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nexport default function QueryPlaceholder( {\n\tattributes,\n\tclientId,\n\tname,\n\topenPatternSelectionModal,\n\tsetAttributes,\n} ) {\n\tconst [ isStartingBlank, setIsStartingBlank ] = useState( false );\n\tconst blockProps = useBlockProps();\n\n\tconst { blockType, allVariations, hasPatterns } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockVariations, getBlockType } = select( blocksStore );\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\t__experimentalGetPatternsByBlockTypes,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\treturn {\n\t\t\t\tblockType: getBlockType( name ),\n\t\t\t\tallVariations: getBlockVariations( name ),\n\t\t\t\thasPatterns: !! __experimentalGetPatternsByBlockTypes(\n\t\t\t\t\tname,\n\t\t\t\t\trootClientId\n\t\t\t\t).length,\n\t\t\t};\n\t\t},\n\t\t[ name, clientId ]\n\t);\n\n\tconst matchingVariation = getMatchingVariation( attributes, allVariations );\n\tconst icon = matchingVariation?.icon || blockType?.icon?.src;\n\tconst label = matchingVariation?.title || blockType?.title;\n\tif ( isStartingBlank ) {\n\t\treturn (\n\t\t\t<QueryVariationPicker\n\t\t\t\tclientId={ clientId }\n\t\t\t\tname={ name }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={ label }\n\t\t\t/>\n\t\t);\n\t}\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<Placeholder\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={ label }\n\t\t\t\tinstructions={ __(\n\t\t\t\t\t'Choose a pattern for the query loop or start blank.'\n\t\t\t\t) }\n\t\t\t>\n\t\t\t\t{ !! hasPatterns && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tonClick={ openPatternSelectionModal }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Choose' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t) }\n\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tsetIsStartingBlank( true );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Start blank' ) }\n\t\t\t\t</Button>\n\t\t\t</Placeholder>\n\t\t</div>\n\t);\n}\n\nfunction QueryVariationPicker( {\n\tclientId,\n\tname,\n\tattributes,\n\tsetAttributes,\n\ticon,\n\tlabel,\n} ) {\n\tconst { defaultVariation, scopeVariations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockVariations,\n\t\t\t\tgetBlockType,\n\t\t\t\tgetDefaultBlockVariation,\n\t\t\t} = select( blocksStore );\n\n\t\t\treturn {\n\t\t\t\tblockType: getBlockType( name ),\n\t\t\t\tdefaultVariation: getDefaultBlockVariation( name, 'block' ),\n\t\t\t\tscopeVariations: getBlockVariations( name, 'block' ),\n\t\t\t};\n\t\t},\n\t\t[ name ]\n\t);\n\tconst { replaceInnerBlocks } = useDispatch( blockEditorStore );\n\tconst blockProps = useBlockProps();\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<__experimentalBlockVariationPicker\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={ label }\n\t\t\t\tvariations={ scopeVariations }\n\t\t\t\tonSelect={ ( nextVariation = defaultVariation ) => {\n\t\t\t\t\tif ( nextVariation.attributes ) {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t...nextVariation.attributes,\n\t\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\t\t...nextVariation.attributes.query,\n\t\t\t\t\t\t\t\tpostType:\n\t\t\t\t\t\t\t\t\tattributes.query.postType ||\n\t\t\t\t\t\t\t\t\tnextVariation.attributes.query.postType,\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\tif ( nextVariation.innerBlocks ) {\n\t\t\t\t\t\treplaceInnerBlocks(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tcreateBlocksFromInnerBlocksTemplate(\n\t\t\t\t\t\t\t\tnextVariation.innerBlocks\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tfalse\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</div>\n\t);\n}\n"]}
@@ -7,6 +7,7 @@ exports.getTransformedBlocksFromPattern = exports.getEntitiesInfo = void 0;
7
7
  exports.isControlAllowed = isControlAllowed;
8
8
  exports.mapToIHasNameAndId = void 0;
9
9
  exports.useAllowedControls = useAllowedControls;
10
+ exports.useBlockNameForPatterns = useBlockNameForPatterns;
10
11
  exports.useIsPostTypeHierarchical = useIsPostTypeHierarchical;
11
12
  exports.useTaxonomies = exports.usePostTypes = void 0;
12
13
 
@@ -18,6 +19,8 @@ var _element = require("@wordpress/element");
18
19
 
19
20
  var _coreData = require("@wordpress/core-data");
20
21
 
22
+ var _blockEditor = require("@wordpress/block-editor");
23
+
21
24
  var _htmlEntities = require("@wordpress/html-entities");
22
25
 
23
26
  var _blocks = require("@wordpress/blocks");
@@ -331,6 +334,43 @@ const getTransformedBlocksFromPattern = (blocks, queryBlockAttributes) => {
331
334
  queryClientIds
332
335
  };
333
336
  };
337
+ /**
338
+ * Helper hook that determines if there is an active variation of the block
339
+ * and if there are available specific patterns for this variation.
340
+ * If there are, these patterns are going to be the only ones suggested to
341
+ * the user in setup and replace flow, without including the default ones
342
+ * for Query Loop.
343
+ *
344
+ * If there are no such patterns, the default ones for Query Loop are going
345
+ * to be suggested.
346
+ *
347
+ * @param {string} clientId The block's client ID.
348
+ * @param {Object} attributes The block's attributes.
349
+ * @return {string} The block name to be used in the patterns suggestions.
350
+ */
351
+
334
352
 
335
353
  exports.getTransformedBlocksFromPattern = getTransformedBlocksFromPattern;
354
+
355
+ function useBlockNameForPatterns(clientId, attributes) {
356
+ const activeVariationName = (0, _data.useSelect)(select => {
357
+ var _select$getActiveBloc2;
358
+
359
+ return (_select$getActiveBloc2 = select(_blocks.store).getActiveBlockVariation(queryLoopName, attributes)) === null || _select$getActiveBloc2 === void 0 ? void 0 : _select$getActiveBloc2.name;
360
+ }, [attributes]);
361
+ const blockName = `${queryLoopName}/${activeVariationName}`;
362
+ const activeVariationPatterns = (0, _data.useSelect)(select => {
363
+ if (!activeVariationName) {
364
+ return;
365
+ }
366
+
367
+ const {
368
+ getBlockRootClientId,
369
+ __experimentalGetPatternsByBlockTypes
370
+ } = select(_blockEditor.store);
371
+ const rootClientId = getBlockRootClientId(clientId);
372
+ return __experimentalGetPatternsByBlockTypes(blockName, rootClientId);
373
+ }, [clientId, activeVariationName]);
374
+ return activeVariationPatterns !== null && activeVariationPatterns !== void 0 && activeVariationPatterns.length ? blockName : queryLoopName;
375
+ }
336
376
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/query/utils.js"],"names":["getEntitiesInfo","entities","mapping","reduce","accumulator","entity","mapById","mapByName","names","id","name","push","mapToIHasNameAndId","path","map","usePostTypes","postTypes","select","getPostTypes","coreStore","excludedPostTypes","filteredPostTypes","per_page","filter","viewable","slug","includes","postTypesTaxonomiesMap","length","type","taxonomies","postTypesSelectOptions","labels","label","singular_name","value","useTaxonomies","postType","getTaxonomies","filteredTaxonomies","context","useIsPostTypeHierarchical","getPostType","hierarchical","useAllowedControls","attributes","blocksStore","getActiveBlockVariation","queryLoopName","allowControls","isControlAllowed","allowedControls","key","getTransformedBlocksFromPattern","blocks","queryBlockAttributes","query","inherit","clonedBlocks","block","queryClientIds","blocksQueue","shift","clientId","innerBlocks","forEach","innerBlock","newBlocks"],"mappings":";;;;;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AAZA;AACA;AACA;;AAGA;AACA;AACA;;AAOA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,MAAMA,eAAe,GAAKC,QAAF,IAAgB;AAC9C,QAAMC,OAAO,GAAGD,QAAH,aAAGA,QAAH,uBAAGA,QAAQ,CAAEE,MAAV,CACf,CAAEC,WAAF,EAAeC,MAAf,KAA2B;AAC1B,UAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA,SAAX;AAAsBC,MAAAA;AAAtB,QAAgCJ,WAAtC;AACAE,IAAAA,OAAO,CAAED,MAAM,CAACI,EAAT,CAAP,GAAuBJ,MAAvB;AACAE,IAAAA,SAAS,CAAEF,MAAM,CAACK,IAAT,CAAT,GAA2BL,MAA3B;AACAG,IAAAA,KAAK,CAACG,IAAN,CAAYN,MAAM,CAACK,IAAnB;AACA,WAAON,WAAP;AACA,GAPc,EAQf;AAAEE,IAAAA,OAAO,EAAE,EAAX;AAAeC,IAAAA,SAAS,EAAE,EAA1B;AAA8BC,IAAAA,KAAK,EAAE;AAArC,GARe,CAAhB;AAUA,SAAO;AACNP,IAAAA,QADM;AAEN,OAAGC;AAFG,GAAP;AAIA,CAfM;AAiBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMU,kBAAkB,GAAG,CAAEX,QAAF,EAAYY,IAAZ,KAAsB;AACvD,SAAO,CAAEZ,QAAQ,IAAI,EAAd,EAAmBa,GAAnB,CAA0BT,MAAF,KAAgB,EAC9C,GAAGA,MAD2C;AAE9CK,IAAAA,IAAI,EAAE,kCAAgB,iBAAKL,MAAL,EAAaQ,IAAb,CAAhB;AAFwC,GAAhB,CAAxB,CAAP;AAIA,CALM;AAOP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAME,YAAY,GAAG,MAAM;AACjC,QAAMC,SAAS,GAAG,qBAAaC,MAAF,IAAc;AAAA;;AAC1C,UAAM;AAAEC,MAAAA;AAAF,QAAmBD,MAAM,CAAEE,eAAF,CAA/B;AACA,UAAMC,iBAAiB,GAAG,CAAE,YAAF,CAA1B;AACA,UAAMC,iBAAiB,oBAAGH,YAAY,CAAE;AAAEI,MAAAA,QAAQ,EAAE,CAAC;AAAb,KAAF,CAAf,kDAAG,cAAkCC,MAAlC,CACzB;AAAA,UAAE;AAAEC,QAAAA,QAAF;AAAYC,QAAAA;AAAZ,OAAF;AAAA,aACCD,QAAQ,IAAI,CAAEJ,iBAAiB,CAACM,QAAlB,CAA4BD,IAA5B,CADf;AAAA,KADyB,CAA1B;AAIA,WAAOJ,iBAAP;AACA,GARiB,EAQf,EARe,CAAlB;AASA,QAAMM,sBAAsB,GAAG,sBAAS,MAAM;AAC7C,QAAK,EAAEX,SAAF,aAAEA,SAAF,eAAEA,SAAS,CAAEY,MAAb,CAAL,EAA2B;AAC3B,WAAOZ,SAAS,CAACb,MAAV,CAAkB,CAAEC,WAAF,EAAeyB,IAAf,KAAyB;AACjDzB,MAAAA,WAAW,CAAEyB,IAAI,CAACJ,IAAP,CAAX,GAA2BI,IAAI,CAACC,UAAhC;AACA,aAAO1B,WAAP;AACA,KAHM,EAGJ,EAHI,CAAP;AAIA,GAN8B,EAM5B,CAAEY,SAAF,CAN4B,CAA/B;AAOA,QAAMe,sBAAsB,GAAG,sBAC9B,MACC,CAAEf,SAAS,IAAI,EAAf,EAAoBF,GAApB,CAAyB;AAAA,QAAE;AAAEkB,MAAAA,MAAF;AAAUP,MAAAA;AAAV,KAAF;AAAA,WAA0B;AAClDQ,MAAAA,KAAK,EAAED,MAAM,CAACE,aADoC;AAElDC,MAAAA,KAAK,EAAEV;AAF2C,KAA1B;AAAA,GAAzB,CAF6B,EAM9B,CAAET,SAAF,CAN8B,CAA/B;AAQA,SAAO;AAAEW,IAAAA,sBAAF;AAA0BI,IAAAA;AAA1B,GAAP;AACA,CA1BM;AA4BP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMK,aAAa,GAAKC,QAAF,IAAgB;AAC5C,QAAMP,UAAU,GAAG,qBAChBb,MAAF,IAAc;AACb,UAAM;AAAEqB,MAAAA;AAAF,QAAoBrB,MAAM,CAAEE,eAAF,CAAhC;AACA,UAAMoB,kBAAkB,GAAGD,aAAa,CAAE;AACzCT,MAAAA,IAAI,EAAEQ,QADmC;AAEzCf,MAAAA,QAAQ,EAAE,CAAC,CAF8B;AAGzCkB,MAAAA,OAAO,EAAE;AAHgC,KAAF,CAAxC;AAKA,WAAOD,kBAAP;AACA,GATiB,EAUlB,CAAEF,QAAF,CAVkB,CAAnB;AAYA,SAAOP,UAAP;AACA,CAdM;AAgBP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASW,yBAAT,CAAoCJ,QAApC,EAA+C;AACrD,SAAO,qBACJpB,MAAF,IAAc;AACb,UAAMY,IAAI,GAAGZ,MAAM,CAAEE,eAAF,CAAN,CAAoBuB,WAApB,CAAiCL,QAAjC,CAAb;AACA,WAAO,CAAAR,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEL,QAAN,MAAkBK,IAAlB,aAAkBA,IAAlB,uBAAkBA,IAAI,CAAEc,YAAxB,CAAP;AACA,GAJK,EAKN,CAAEN,QAAF,CALM,CAAP;AAOA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASO,kBAAT,CAA6BC,UAA7B,EAA0C;AAChD,SAAO,qBACJ5B,MAAF;AAAA;;AAAA,oCACCA,MAAM,CAAE6B,aAAF,CAAN,CAAsBC,uBAAtB,CACCC,aADD,EAECH,UAFD,CADD,0DACC,sBAGGI,aAJJ;AAAA,GADM,EAON,CAAEJ,UAAF,CAPM,CAAP;AASA;;AACM,SAASK,gBAAT,CAA2BC,eAA3B,EAA4CC,GAA5C,EAAkD;AACxD;AACA,MAAK,CAAED,eAAP,EAAyB;AACxB,WAAO,IAAP;AACA;;AACD,SAAOA,eAAe,CAACzB,QAAhB,CAA0B0B,GAA1B,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,+BAA+B,GAAG,CAC9CC,MAD8C,EAE9CC,oBAF8C,KAG1C;AACJ,QAAM;AACLC,IAAAA,KAAK,EAAE;AAAEnB,MAAAA,QAAF;AAAYoB,MAAAA;AAAZ;AADF,MAEFF,oBAFJ;AAGA,QAAMG,YAAY,GAAGJ,MAAM,CAACxC,GAAP,CAAc6C,KAAF,IAAa,wBAAYA,KAAZ,CAAzB,CAArB;AACA,QAAMC,cAAc,GAAG,EAAvB;AACA,QAAMC,WAAW,GAAG,CAAE,GAAGH,YAAL,CAApB;;AACA,SAAQG,WAAW,CAACjC,MAAZ,GAAqB,CAA7B,EAAiC;AAAA;;AAChC,UAAM+B,KAAK,GAAGE,WAAW,CAACC,KAAZ,EAAd;;AACA,QAAKH,KAAK,CAACjD,IAAN,KAAe,YAApB,EAAmC;AAClCiD,MAAAA,KAAK,CAACd,UAAN,CAAiBW,KAAjB,GAAyB,EACxB,GAAGG,KAAK,CAACd,UAAN,CAAiBW,KADI;AAExBnB,QAAAA,QAFwB;AAGxBoB,QAAAA;AAHwB,OAAzB;AAKAG,MAAAA,cAAc,CAACjD,IAAf,CAAqBgD,KAAK,CAACI,QAA3B;AACA;;AACD,0BAAAJ,KAAK,CAACK,WAAN,0EAAmBC,OAAnB,CAA8BC,UAAF,IAAkB;AAC7CL,MAAAA,WAAW,CAAClD,IAAZ,CAAkBuD,UAAlB;AACA,KAFD;AAGA;;AACD,SAAO;AAAEC,IAAAA,SAAS,EAAET,YAAb;AAA2BE,IAAAA;AAA3B,GAAP;AACA,CAzBM","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { cloneBlock, store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { name as queryLoopName } from './block.json';\n\n/**\n * @typedef IHasNameAndId\n * @property {string|number} id The entity's id.\n * @property {string} name The entity's name.\n */\n\n/**\n * The object used in Query block that contains info and helper mappings\n * from an array of IHasNameAndId objects.\n *\n * @typedef {Object} QueryEntitiesInfo\n * @property {IHasNameAndId[]} entities The array of entities.\n * @property {Object<string, IHasNameAndId>} mapById Object mapping with the id as key and the entity as value.\n * @property {Object<string, IHasNameAndId>} mapByName Object mapping with the name as key and the entity as value.\n * @property {string[]} names Array with the entities' names.\n */\n\n/**\n * Returns a helper object with mapping from Objects that implement\n * the `IHasNameAndId` interface. The returned object is used for\n * integration with `FormTokenField` component.\n *\n * @param {IHasNameAndId[]} entities The entities to extract of helper object.\n * @return {QueryEntitiesInfo} The object with the entities information.\n */\nexport const getEntitiesInfo = ( entities ) => {\n\tconst mapping = entities?.reduce(\n\t\t( accumulator, entity ) => {\n\t\t\tconst { mapById, mapByName, names } = accumulator;\n\t\t\tmapById[ entity.id ] = entity;\n\t\t\tmapByName[ entity.name ] = entity;\n\t\t\tnames.push( entity.name );\n\t\t\treturn accumulator;\n\t\t},\n\t\t{ mapById: {}, mapByName: {}, names: [] }\n\t);\n\treturn {\n\t\tentities,\n\t\t...mapping,\n\t};\n};\n\n/**\n * Helper util to map records to add a `name` prop from a\n * provided path, in order to handle all entities in the same\n * fashion(implementing`IHasNameAndId` interface).\n *\n * @param {Object[]} entities The array of entities.\n * @param {string} path The path to map a `name` property from the entity.\n * @return {IHasNameAndId[]} An array of enitities that now implement the `IHasNameAndId` interface.\n */\nexport const mapToIHasNameAndId = ( entities, path ) => {\n\treturn ( entities || [] ).map( ( entity ) => ( {\n\t\t...entity,\n\t\tname: decodeEntities( get( entity, path ) ),\n\t} ) );\n};\n\n/**\n * Returns a helper object that contains:\n * 1. An `options` object from the available post types, to be passed to a `SelectControl`.\n * 2. A helper map with available taxonomies per post type.\n *\n * @return {Object} The helper object related to post types.\n */\nexport const usePostTypes = () => {\n\tconst postTypes = useSelect( ( select ) => {\n\t\tconst { getPostTypes } = select( coreStore );\n\t\tconst excludedPostTypes = [ 'attachment' ];\n\t\tconst filteredPostTypes = getPostTypes( { per_page: -1 } )?.filter(\n\t\t\t( { viewable, slug } ) =>\n\t\t\t\tviewable && ! excludedPostTypes.includes( slug )\n\t\t);\n\t\treturn filteredPostTypes;\n\t}, [] );\n\tconst postTypesTaxonomiesMap = useMemo( () => {\n\t\tif ( ! postTypes?.length ) return;\n\t\treturn postTypes.reduce( ( accumulator, type ) => {\n\t\t\taccumulator[ type.slug ] = type.taxonomies;\n\t\t\treturn accumulator;\n\t\t}, {} );\n\t}, [ postTypes ] );\n\tconst postTypesSelectOptions = useMemo(\n\t\t() =>\n\t\t\t( postTypes || [] ).map( ( { labels, slug } ) => ( {\n\t\t\t\tlabel: labels.singular_name,\n\t\t\t\tvalue: slug,\n\t\t\t} ) ),\n\t\t[ postTypes ]\n\t);\n\treturn { postTypesTaxonomiesMap, postTypesSelectOptions };\n};\n\n/**\n * Hook that returns the taxonomies associated with a specific post type.\n *\n * @param {string} postType The post type from which to retrieve the associated taxonomies.\n * @return {Object[]} An array of the associated taxonomies.\n */\nexport const useTaxonomies = ( postType ) => {\n\tconst taxonomies = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getTaxonomies } = select( coreStore );\n\t\t\tconst filteredTaxonomies = getTaxonomies( {\n\t\t\t\ttype: postType,\n\t\t\t\tper_page: -1,\n\t\t\t\tcontext: 'view',\n\t\t\t} );\n\t\t\treturn filteredTaxonomies;\n\t\t},\n\t\t[ postType ]\n\t);\n\treturn taxonomies;\n};\n\n/**\n * Hook that returns whether a specific post type is hierarchical.\n *\n * @param {string} postType The post type to check.\n * @return {boolean} Whether a specific post type is hierarchical.\n */\nexport function useIsPostTypeHierarchical( postType ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst type = select( coreStore ).getPostType( postType );\n\t\t\treturn type?.viewable && type?.hierarchical;\n\t\t},\n\t\t[ postType ]\n\t);\n}\n\n/**\n * Hook that returns the query properties' names defined by the active\n * block variation, to determine which block's filters to show.\n *\n * @param {Object} attributes Block attributes.\n * @return {string[]} An array of the query attributes.\n */\nexport function useAllowedControls( attributes ) {\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tselect( blocksStore ).getActiveBlockVariation(\n\t\t\t\tqueryLoopName,\n\t\t\t\tattributes\n\t\t\t)?.allowControls,\n\n\t\t[ attributes ]\n\t);\n}\nexport function isControlAllowed( allowedControls, key ) {\n\t// Every controls is allowed if the list is not defined.\n\tif ( ! allowedControls ) {\n\t\treturn true;\n\t}\n\treturn allowedControls.includes( key );\n}\n\n/**\n * Clones a pattern's blocks and then recurses over that list of blocks,\n * transforming them to retain some `query` attribute properties.\n * For now we retain the `postType` and `inherit` properties as they are\n * fundamental for the expected functionality of the block and don't affect\n * its design and presentation.\n *\n * Returns the cloned/transformed blocks and array of existing Query Loop\n * client ids for further manipulation, in order to avoid multiple recursions.\n *\n * @param {WPBlock[]} blocks The list of blocks to look through and transform(mutate).\n * @param {Record<string,*>} queryBlockAttributes The existing Query Loop's attributes.\n * @return {{ newBlocks: WPBlock[], queryClientIds: string[] }} An object with the cloned/transformed blocks and all the Query Loop clients from these blocks.\n */\nexport const getTransformedBlocksFromPattern = (\n\tblocks,\n\tqueryBlockAttributes\n) => {\n\tconst {\n\t\tquery: { postType, inherit },\n\t} = queryBlockAttributes;\n\tconst clonedBlocks = blocks.map( ( block ) => cloneBlock( block ) );\n\tconst queryClientIds = [];\n\tconst blocksQueue = [ ...clonedBlocks ];\n\twhile ( blocksQueue.length > 0 ) {\n\t\tconst block = blocksQueue.shift();\n\t\tif ( block.name === 'core/query' ) {\n\t\t\tblock.attributes.query = {\n\t\t\t\t...block.attributes.query,\n\t\t\t\tpostType,\n\t\t\t\tinherit,\n\t\t\t};\n\t\t\tqueryClientIds.push( block.clientId );\n\t\t}\n\t\tblock.innerBlocks?.forEach( ( innerBlock ) => {\n\t\t\tblocksQueue.push( innerBlock );\n\t\t} );\n\t}\n\treturn { newBlocks: clonedBlocks, queryClientIds };\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/query/utils.js"],"names":["getEntitiesInfo","entities","mapping","reduce","accumulator","entity","mapById","mapByName","names","id","name","push","mapToIHasNameAndId","path","map","usePostTypes","postTypes","select","getPostTypes","coreStore","excludedPostTypes","filteredPostTypes","per_page","filter","viewable","slug","includes","postTypesTaxonomiesMap","length","type","taxonomies","postTypesSelectOptions","labels","label","singular_name","value","useTaxonomies","postType","getTaxonomies","filteredTaxonomies","context","useIsPostTypeHierarchical","getPostType","hierarchical","useAllowedControls","attributes","blocksStore","getActiveBlockVariation","queryLoopName","allowControls","isControlAllowed","allowedControls","key","getTransformedBlocksFromPattern","blocks","queryBlockAttributes","query","inherit","clonedBlocks","block","queryClientIds","blocksQueue","shift","clientId","innerBlocks","forEach","innerBlock","newBlocks","useBlockNameForPatterns","activeVariationName","blockName","activeVariationPatterns","getBlockRootClientId","__experimentalGetPatternsByBlockTypes","blockEditorStore","rootClientId"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { cloneBlock, store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { name as queryLoopName } from './block.json';\n\n/**\n * @typedef IHasNameAndId\n * @property {string|number} id The entity's id.\n * @property {string} name The entity's name.\n */\n\n/**\n * The object used in Query block that contains info and helper mappings\n * from an array of IHasNameAndId objects.\n *\n * @typedef {Object} QueryEntitiesInfo\n * @property {IHasNameAndId[]} entities The array of entities.\n * @property {Object<string, IHasNameAndId>} mapById Object mapping with the id as key and the entity as value.\n * @property {Object<string, IHasNameAndId>} mapByName Object mapping with the name as key and the entity as value.\n * @property {string[]} names Array with the entities' names.\n */\n\n/**\n * Returns a helper object with mapping from Objects that implement\n * the `IHasNameAndId` interface. The returned object is used for\n * integration with `FormTokenField` component.\n *\n * @param {IHasNameAndId[]} entities The entities to extract of helper object.\n * @return {QueryEntitiesInfo} The object with the entities information.\n */\nexport const getEntitiesInfo = ( entities ) => {\n\tconst mapping = entities?.reduce(\n\t\t( accumulator, entity ) => {\n\t\t\tconst { mapById, mapByName, names } = accumulator;\n\t\t\tmapById[ entity.id ] = entity;\n\t\t\tmapByName[ entity.name ] = entity;\n\t\t\tnames.push( entity.name );\n\t\t\treturn accumulator;\n\t\t},\n\t\t{ mapById: {}, mapByName: {}, names: [] }\n\t);\n\treturn {\n\t\tentities,\n\t\t...mapping,\n\t};\n};\n\n/**\n * Helper util to map records to add a `name` prop from a\n * provided path, in order to handle all entities in the same\n * fashion(implementing`IHasNameAndId` interface).\n *\n * @param {Object[]} entities The array of entities.\n * @param {string} path The path to map a `name` property from the entity.\n * @return {IHasNameAndId[]} An array of enitities that now implement the `IHasNameAndId` interface.\n */\nexport const mapToIHasNameAndId = ( entities, path ) => {\n\treturn ( entities || [] ).map( ( entity ) => ( {\n\t\t...entity,\n\t\tname: decodeEntities( get( entity, path ) ),\n\t} ) );\n};\n\n/**\n * Returns a helper object that contains:\n * 1. An `options` object from the available post types, to be passed to a `SelectControl`.\n * 2. A helper map with available taxonomies per post type.\n *\n * @return {Object} The helper object related to post types.\n */\nexport const usePostTypes = () => {\n\tconst postTypes = useSelect( ( select ) => {\n\t\tconst { getPostTypes } = select( coreStore );\n\t\tconst excludedPostTypes = [ 'attachment' ];\n\t\tconst filteredPostTypes = getPostTypes( { per_page: -1 } )?.filter(\n\t\t\t( { viewable, slug } ) =>\n\t\t\t\tviewable && ! excludedPostTypes.includes( slug )\n\t\t);\n\t\treturn filteredPostTypes;\n\t}, [] );\n\tconst postTypesTaxonomiesMap = useMemo( () => {\n\t\tif ( ! postTypes?.length ) return;\n\t\treturn postTypes.reduce( ( accumulator, type ) => {\n\t\t\taccumulator[ type.slug ] = type.taxonomies;\n\t\t\treturn accumulator;\n\t\t}, {} );\n\t}, [ postTypes ] );\n\tconst postTypesSelectOptions = useMemo(\n\t\t() =>\n\t\t\t( postTypes || [] ).map( ( { labels, slug } ) => ( {\n\t\t\t\tlabel: labels.singular_name,\n\t\t\t\tvalue: slug,\n\t\t\t} ) ),\n\t\t[ postTypes ]\n\t);\n\treturn { postTypesTaxonomiesMap, postTypesSelectOptions };\n};\n\n/**\n * Hook that returns the taxonomies associated with a specific post type.\n *\n * @param {string} postType The post type from which to retrieve the associated taxonomies.\n * @return {Object[]} An array of the associated taxonomies.\n */\nexport const useTaxonomies = ( postType ) => {\n\tconst taxonomies = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getTaxonomies } = select( coreStore );\n\t\t\tconst filteredTaxonomies = getTaxonomies( {\n\t\t\t\ttype: postType,\n\t\t\t\tper_page: -1,\n\t\t\t\tcontext: 'view',\n\t\t\t} );\n\t\t\treturn filteredTaxonomies;\n\t\t},\n\t\t[ postType ]\n\t);\n\treturn taxonomies;\n};\n\n/**\n * Hook that returns whether a specific post type is hierarchical.\n *\n * @param {string} postType The post type to check.\n * @return {boolean} Whether a specific post type is hierarchical.\n */\nexport function useIsPostTypeHierarchical( postType ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst type = select( coreStore ).getPostType( postType );\n\t\t\treturn type?.viewable && type?.hierarchical;\n\t\t},\n\t\t[ postType ]\n\t);\n}\n\n/**\n * Hook that returns the query properties' names defined by the active\n * block variation, to determine which block's filters to show.\n *\n * @param {Object} attributes Block attributes.\n * @return {string[]} An array of the query attributes.\n */\nexport function useAllowedControls( attributes ) {\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tselect( blocksStore ).getActiveBlockVariation(\n\t\t\t\tqueryLoopName,\n\t\t\t\tattributes\n\t\t\t)?.allowControls,\n\n\t\t[ attributes ]\n\t);\n}\nexport function isControlAllowed( allowedControls, key ) {\n\t// Every controls is allowed if the list is not defined.\n\tif ( ! allowedControls ) {\n\t\treturn true;\n\t}\n\treturn allowedControls.includes( key );\n}\n\n/**\n * Clones a pattern's blocks and then recurses over that list of blocks,\n * transforming them to retain some `query` attribute properties.\n * For now we retain the `postType` and `inherit` properties as they are\n * fundamental for the expected functionality of the block and don't affect\n * its design and presentation.\n *\n * Returns the cloned/transformed blocks and array of existing Query Loop\n * client ids for further manipulation, in order to avoid multiple recursions.\n *\n * @param {WPBlock[]} blocks The list of blocks to look through and transform(mutate).\n * @param {Record<string,*>} queryBlockAttributes The existing Query Loop's attributes.\n * @return {{ newBlocks: WPBlock[], queryClientIds: string[] }} An object with the cloned/transformed blocks and all the Query Loop clients from these blocks.\n */\nexport const getTransformedBlocksFromPattern = (\n\tblocks,\n\tqueryBlockAttributes\n) => {\n\tconst {\n\t\tquery: { postType, inherit },\n\t} = queryBlockAttributes;\n\tconst clonedBlocks = blocks.map( ( block ) => cloneBlock( block ) );\n\tconst queryClientIds = [];\n\tconst blocksQueue = [ ...clonedBlocks ];\n\twhile ( blocksQueue.length > 0 ) {\n\t\tconst block = blocksQueue.shift();\n\t\tif ( block.name === 'core/query' ) {\n\t\t\tblock.attributes.query = {\n\t\t\t\t...block.attributes.query,\n\t\t\t\tpostType,\n\t\t\t\tinherit,\n\t\t\t};\n\t\t\tqueryClientIds.push( block.clientId );\n\t\t}\n\t\tblock.innerBlocks?.forEach( ( innerBlock ) => {\n\t\t\tblocksQueue.push( innerBlock );\n\t\t} );\n\t}\n\treturn { newBlocks: clonedBlocks, queryClientIds };\n};\n\n/**\n * Helper hook that determines if there is an active variation of the block\n * and if there are available specific patterns for this variation.\n * If there are, these patterns are going to be the only ones suggested to\n * the user in setup and replace flow, without including the default ones\n * for Query Loop.\n *\n * If there are no such patterns, the default ones for Query Loop are going\n * to be suggested.\n *\n * @param {string} clientId The block's client ID.\n * @param {Object} attributes The block's attributes.\n * @return {string} The block name to be used in the patterns suggestions.\n */\nexport function useBlockNameForPatterns( clientId, attributes ) {\n\tconst activeVariationName = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blocksStore ).getActiveBlockVariation(\n\t\t\t\tqueryLoopName,\n\t\t\t\tattributes\n\t\t\t)?.name,\n\n\t\t[ attributes ]\n\t);\n\tconst blockName = `${ queryLoopName }/${ activeVariationName }`;\n\tconst activeVariationPatterns = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! activeVariationName ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\t__experimentalGetPatternsByBlockTypes,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\treturn __experimentalGetPatternsByBlockTypes(\n\t\t\t\tblockName,\n\t\t\t\trootClientId\n\t\t\t);\n\t\t},\n\t\t[ clientId, activeVariationName ]\n\t);\n\treturn activeVariationPatterns?.length ? blockName : queryLoopName;\n}\n"]}
@@ -37,10 +37,10 @@ const SocialLinkURLPopover = _ref => {
37
37
  url,
38
38
  setAttributes,
39
39
  setPopover,
40
- anchorRef
40
+ popoverAnchor
41
41
  } = _ref;
42
42
  return (0, _element.createElement)(_blockEditor.URLPopover, {
43
- anchorRef: anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current,
43
+ anchor: popoverAnchor,
44
44
  onClose: () => setPopover(false)
45
45
  }, (0, _element.createElement)("form", {
46
46
  className: "block-editor-url-popover__link-editor",
@@ -84,8 +84,10 @@ const SocialLinkEdit = _ref2 => {
84
84
  const [showURLPopover, setPopover] = (0, _element.useState)(false);
85
85
  const classes = (0, _classnames.default)('wp-social-link', 'wp-social-link-' + service, {
86
86
  'wp-social-link__is-incomplete': !url
87
- });
88
- const ref = (0, _element.useRef)();
87
+ }); // Use internal state instead of a ref to make sure that the component
88
+ // re-renders when the popover's anchor updates.
89
+
90
+ const [popoverAnchor, setPopoverAnchor] = (0, _element.useState)(null);
89
91
  const IconComponent = (0, _socialList.getIconBySite)(service);
90
92
  const socialLinkName = (0, _socialList.getNameBySite)(service);
91
93
  const socialLinkLabel = label !== null && label !== void 0 ? label : socialLinkName;
@@ -110,7 +112,7 @@ const SocialLinkEdit = _ref2 => {
110
112
  })
111
113
  })))), (0, _element.createElement)("li", blockProps, (0, _element.createElement)(_components.Button, {
112
114
  className: "wp-block-social-link-anchor",
113
- ref: ref,
115
+ ref: setPopoverAnchor,
114
116
  onClick: () => setPopover(true)
115
117
  }, (0, _element.createElement)(IconComponent, null), (0, _element.createElement)("span", {
116
118
  className: (0, _classnames.default)('wp-block-social-link-label', {
@@ -120,7 +122,7 @@ const SocialLinkEdit = _ref2 => {
120
122
  url: url,
121
123
  setAttributes: setAttributes,
122
124
  setPopover: setPopover,
123
- anchorRef: ref
125
+ popoverAnchor: popoverAnchor
124
126
  }))));
125
127
  };
126
128
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/social-link/edit.js"],"names":["SocialLinkURLPopover","url","setAttributes","setPopover","anchorRef","current","event","preventDefault","nextURL","keyboardReturn","SocialLinkEdit","attributes","context","isSelected","service","label","showLabels","iconColorValue","iconBackgroundColorValue","showURLPopover","classes","ref","IconComponent","socialLinkName","socialLinkLabel","blockProps","className","style","color","backgroundColor","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tInspectorControls,\n\tURLPopover,\n\tURLInput,\n\tuseBlockProps,\n} from '@wordpress/block-editor';\nimport { Fragment, useState, useRef } from '@wordpress/element';\nimport {\n\tButton,\n\tPanelBody,\n\tPanelRow,\n\tTextControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { getIconBySite, getNameBySite } from './social-list';\n\nconst SocialLinkURLPopover = ( {\n\turl,\n\tsetAttributes,\n\tsetPopover,\n\tanchorRef,\n} ) => (\n\t<URLPopover\n\t\tanchorRef={ anchorRef?.current }\n\t\tonClose={ () => setPopover( false ) }\n\t>\n\t\t<form\n\t\t\tclassName=\"block-editor-url-popover__link-editor\"\n\t\t\tonSubmit={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetPopover( false );\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"block-editor-url-input\">\n\t\t\t\t<URLInput\n\t\t\t\t\tvalue={ url }\n\t\t\t\t\tonChange={ ( nextURL ) =>\n\t\t\t\t\t\tsetAttributes( { url: nextURL } )\n\t\t\t\t\t}\n\t\t\t\t\tplaceholder={ __( 'Enter address' ) }\n\t\t\t\t\tdisableSuggestions={ true }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\ticon={ keyboardReturn }\n\t\t\t\tlabel={ __( 'Apply' ) }\n\t\t\t\ttype=\"submit\"\n\t\t\t/>\n\t\t</form>\n\t</URLPopover>\n);\n\nconst SocialLinkEdit = ( {\n\tattributes,\n\tcontext,\n\tisSelected,\n\tsetAttributes,\n} ) => {\n\tconst { url, service, label } = attributes;\n\tconst { showLabels, iconColorValue, iconBackgroundColorValue } = context;\n\tconst [ showURLPopover, setPopover ] = useState( false );\n\tconst classes = classNames( 'wp-social-link', 'wp-social-link-' + service, {\n\t\t'wp-social-link__is-incomplete': ! url,\n\t} );\n\n\tconst ref = useRef();\n\tconst IconComponent = getIconBySite( service );\n\tconst socialLinkName = getNameBySite( service );\n\tconst socialLinkLabel = label ?? socialLinkName;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classes,\n\t\tstyle: {\n\t\t\tcolor: iconColorValue,\n\t\t\tbackgroundColor: iconBackgroundColorValue,\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: name of the social service. */\n\t\t\t\t\t\t__( '%s label' ),\n\t\t\t\t\t\tsocialLinkName\n\t\t\t\t\t) }\n\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t>\n\t\t\t\t\t<PanelRow>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tlabel={ __( 'Link label' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Briefly describe the link to help screen reader users.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { label: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<li { ...blockProps }>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"wp-block-social-link-anchor\"\n\t\t\t\t\tref={ ref }\n\t\t\t\t\tonClick={ () => setPopover( true ) }\n\t\t\t\t>\n\t\t\t\t\t<IconComponent />\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ classNames( 'wp-block-social-link-label', {\n\t\t\t\t\t\t\t'screen-reader-text': ! showLabels,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ socialLinkLabel }\n\t\t\t\t\t</span>\n\t\t\t\t\t{ isSelected && showURLPopover && (\n\t\t\t\t\t\t<SocialLinkURLPopover\n\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tsetPopover={ setPopover }\n\t\t\t\t\t\t\tanchorRef={ ref }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</Button>\n\t\t\t</li>\n\t\t</Fragment>\n\t);\n};\n\nexport default SocialLinkEdit;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/social-link/edit.js"],"names":["SocialLinkURLPopover","url","setAttributes","setPopover","popoverAnchor","event","preventDefault","nextURL","keyboardReturn","SocialLinkEdit","attributes","context","isSelected","service","label","showLabels","iconColorValue","iconBackgroundColorValue","showURLPopover","classes","setPopoverAnchor","IconComponent","socialLinkName","socialLinkLabel","blockProps","className","style","color","backgroundColor","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tInspectorControls,\n\tURLPopover,\n\tURLInput,\n\tuseBlockProps,\n} from '@wordpress/block-editor';\nimport { Fragment, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tPanelBody,\n\tPanelRow,\n\tTextControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { getIconBySite, getNameBySite } from './social-list';\n\nconst SocialLinkURLPopover = ( {\n\turl,\n\tsetAttributes,\n\tsetPopover,\n\tpopoverAnchor,\n} ) => (\n\t<URLPopover anchor={ popoverAnchor } onClose={ () => setPopover( false ) }>\n\t\t<form\n\t\t\tclassName=\"block-editor-url-popover__link-editor\"\n\t\t\tonSubmit={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetPopover( false );\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"block-editor-url-input\">\n\t\t\t\t<URLInput\n\t\t\t\t\tvalue={ url }\n\t\t\t\t\tonChange={ ( nextURL ) =>\n\t\t\t\t\t\tsetAttributes( { url: nextURL } )\n\t\t\t\t\t}\n\t\t\t\t\tplaceholder={ __( 'Enter address' ) }\n\t\t\t\t\tdisableSuggestions={ true }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\ticon={ keyboardReturn }\n\t\t\t\tlabel={ __( 'Apply' ) }\n\t\t\t\ttype=\"submit\"\n\t\t\t/>\n\t\t</form>\n\t</URLPopover>\n);\n\nconst SocialLinkEdit = ( {\n\tattributes,\n\tcontext,\n\tisSelected,\n\tsetAttributes,\n} ) => {\n\tconst { url, service, label } = attributes;\n\tconst { showLabels, iconColorValue, iconBackgroundColorValue } = context;\n\tconst [ showURLPopover, setPopover ] = useState( false );\n\tconst classes = classNames( 'wp-social-link', 'wp-social-link-' + service, {\n\t\t'wp-social-link__is-incomplete': ! url,\n\t} );\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\n\tconst IconComponent = getIconBySite( service );\n\tconst socialLinkName = getNameBySite( service );\n\tconst socialLinkLabel = label ?? socialLinkName;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classes,\n\t\tstyle: {\n\t\t\tcolor: iconColorValue,\n\t\t\tbackgroundColor: iconBackgroundColorValue,\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: name of the social service. */\n\t\t\t\t\t\t__( '%s label' ),\n\t\t\t\t\t\tsocialLinkName\n\t\t\t\t\t) }\n\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t>\n\t\t\t\t\t<PanelRow>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\tlabel={ __( 'Link label' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Briefly describe the link to help screen reader users.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { label: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<li { ...blockProps }>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"wp-block-social-link-anchor\"\n\t\t\t\t\tref={ setPopoverAnchor }\n\t\t\t\t\tonClick={ () => setPopover( true ) }\n\t\t\t\t>\n\t\t\t\t\t<IconComponent />\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ classNames( 'wp-block-social-link-label', {\n\t\t\t\t\t\t\t'screen-reader-text': ! showLabels,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ socialLinkLabel }\n\t\t\t\t\t</span>\n\t\t\t\t\t{ isSelected && showURLPopover && (\n\t\t\t\t\t\t<SocialLinkURLPopover\n\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tsetPopover={ setPopover }\n\t\t\t\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</Button>\n\t\t\t</li>\n\t\t</Fragment>\n\t);\n};\n\nexport default SocialLinkEdit;\n"]}
@@ -42,10 +42,7 @@ function TemplatePartSelectionModal(_ref) {
42
42
  area,
43
43
  clientId
44
44
  } = _ref;
45
- const [searchValue, setSearchValue] = (0, _element.useState)(''); // When the templatePartId is undefined,
46
- // it means the user is creating a new one from the placeholder.
47
-
48
- const isReplacingTemplatePartContent = !!templatePartId;
45
+ const [searchValue, setSearchValue] = (0, _element.useState)('');
49
46
  const {
50
47
  templateParts
51
48
  } = (0, _hooks.useAlternativeTemplateParts)(area, templatePartId); // We can map template parts to block patters to reuse the BlockPatternsList UI
@@ -68,9 +65,6 @@ function TemplatePartSelectionModal(_ref) {
68
65
  const {
69
66
  createSuccessNotice
70
67
  } = (0, _data.useDispatch)(_notices.store);
71
- const {
72
- replaceInnerBlocks
73
- } = (0, _data.useDispatch)(_blockEditor.store);
74
68
  const onTemplatePartSelect = (0, _element.useCallback)(templatePart => {
75
69
  var _templatePart$title;
76
70
 
@@ -108,12 +102,7 @@ function TemplatePartSelectionModal(_ref) {
108
102
  blockPatterns: filteredBlockPatterns,
109
103
  shownPatterns: shownBlockPatterns,
110
104
  onClickPattern: (pattern, blocks) => {
111
- if (isReplacingTemplatePartContent) {
112
- replaceInnerBlocks(clientId, blocks);
113
- } else {
114
- createFromBlocks(blocks, pattern.title);
115
- }
116
-
105
+ createFromBlocks(blocks, pattern.title);
117
106
  onClose();
118
107
  }
119
108
  })), !hasTemplateParts && !hasBlockPatterns && (0, _element.createElement)(_components.__experimentalHStack, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/template-part/edit/selection-modal.js"],"names":["TemplatePartSelectionModal","setAttributes","onClose","templatePartId","area","clientId","searchValue","setSearchValue","isReplacingTemplatePartContent","templateParts","filteredTemplateParts","partsAsPatterns","map","templatePart","name","theme","slug","title","rendered","blocks","content","raw","shownTemplateParts","blockPatterns","filteredBlockPatterns","shownBlockPatterns","createSuccessNotice","noticesStore","replaceInnerBlocks","blockEditorStore","onTemplatePartSelect","undefined","type","createFromBlocks","hasTemplateParts","length","hasBlockPatterns","pattern"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useDispatch } from '@wordpress/data';\nimport { parse } from '@wordpress/blocks';\nimport { useAsyncList } from '@wordpress/compose';\nimport {\n\t__experimentalBlockPatternsList as BlockPatternsList,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport {\n\tSearchControl,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseAlternativeBlockPatterns,\n\tuseAlternativeTemplateParts,\n\tuseCreateTemplatePartFromBlocks,\n} from './utils/hooks';\nimport { createTemplatePartId } from './utils/create-template-part-id';\nimport { searchPatterns } from './utils/search';\n\nexport default function TemplatePartSelectionModal( {\n\tsetAttributes,\n\tonClose,\n\ttemplatePartId = null,\n\tarea,\n\tclientId,\n} ) {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\t// When the templatePartId is undefined,\n\t// it means the user is creating a new one from the placeholder.\n\tconst isReplacingTemplatePartContent = !! templatePartId;\n\tconst { templateParts } = useAlternativeTemplateParts(\n\t\tarea,\n\t\ttemplatePartId\n\t);\n\t// We can map template parts to block patters to reuse the BlockPatternsList UI\n\tconst filteredTemplateParts = useMemo( () => {\n\t\tconst partsAsPatterns = templateParts.map( ( templatePart ) => ( {\n\t\t\tname: createTemplatePartId( templatePart.theme, templatePart.slug ),\n\t\t\ttitle: templatePart.title.rendered,\n\t\t\tblocks: parse( templatePart.content.raw ),\n\t\t\ttemplatePart,\n\t\t} ) );\n\n\t\treturn searchPatterns( partsAsPatterns, searchValue );\n\t}, [ templateParts, searchValue ] );\n\tconst shownTemplateParts = useAsyncList( filteredTemplateParts );\n\tconst blockPatterns = useAlternativeBlockPatterns( area, clientId );\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\treturn searchPatterns( blockPatterns, searchValue );\n\t}, [ blockPatterns, searchValue ] );\n\tconst shownBlockPatterns = useAsyncList( filteredBlockPatterns );\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst { replaceInnerBlocks } = useDispatch( blockEditorStore );\n\n\tconst onTemplatePartSelect = useCallback( ( templatePart ) => {\n\t\tsetAttributes( {\n\t\t\tslug: templatePart.slug,\n\t\t\ttheme: templatePart.theme,\n\t\t\tarea: undefined,\n\t\t} );\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: template part title. */\n\t\t\t\t__( 'Template Part \"%s\" inserted.' ),\n\t\t\t\ttemplatePart.title?.rendered || templatePart.slug\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t\tonClose();\n\t}, [] );\n\n\tconst createFromBlocks = useCreateTemplatePartFromBlocks(\n\t\tarea,\n\t\tsetAttributes\n\t);\n\n\tconst hasTemplateParts = !! filteredTemplateParts.length;\n\tconst hasBlockPatterns = !! filteredBlockPatterns.length;\n\n\treturn (\n\t\t<div className=\"block-library-template-part__selection-content\">\n\t\t\t<div className=\"block-library-template-part__selection-search\">\n\t\t\t\t<SearchControl\n\t\t\t\t\tonChange={ setSearchValue }\n\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\tlabel={ __( 'Search for replacements' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{ hasTemplateParts && (\n\t\t\t\t<div>\n\t\t\t\t\t<h2>{ __( 'Existing template parts' ) }</h2>\n\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\tblockPatterns={ filteredTemplateParts }\n\t\t\t\t\t\tshownPatterns={ shownTemplateParts }\n\t\t\t\t\t\tonClickPattern={ ( pattern ) => {\n\t\t\t\t\t\t\tonTemplatePartSelect( pattern.templatePart );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ hasBlockPatterns && (\n\t\t\t\t<div>\n\t\t\t\t\t<h2>{ __( 'Patterns' ) }</h2>\n\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\tblockPatterns={ filteredBlockPatterns }\n\t\t\t\t\t\tshownPatterns={ shownBlockPatterns }\n\t\t\t\t\t\tonClickPattern={ ( pattern, blocks ) => {\n\t\t\t\t\t\t\tif ( isReplacingTemplatePartContent ) {\n\t\t\t\t\t\t\t\treplaceInnerBlocks( clientId, blocks );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcreateFromBlocks( blocks, pattern.title );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ ! hasTemplateParts && ! hasBlockPatterns && (\n\t\t\t\t<HStack alignment=\"center\">\n\t\t\t\t\t<p>{ __( 'No results found.' ) }</p>\n\t\t\t\t</HStack>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/template-part/edit/selection-modal.js"],"names":["TemplatePartSelectionModal","setAttributes","onClose","templatePartId","area","clientId","searchValue","setSearchValue","templateParts","filteredTemplateParts","partsAsPatterns","map","templatePart","name","theme","slug","title","rendered","blocks","content","raw","shownTemplateParts","blockPatterns","filteredBlockPatterns","shownBlockPatterns","createSuccessNotice","noticesStore","onTemplatePartSelect","undefined","type","createFromBlocks","hasTemplateParts","length","hasBlockPatterns","pattern"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useDispatch } from '@wordpress/data';\nimport { parse } from '@wordpress/blocks';\nimport { useAsyncList } from '@wordpress/compose';\nimport { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';\nimport {\n\tSearchControl,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseAlternativeBlockPatterns,\n\tuseAlternativeTemplateParts,\n\tuseCreateTemplatePartFromBlocks,\n} from './utils/hooks';\nimport { createTemplatePartId } from './utils/create-template-part-id';\nimport { searchPatterns } from './utils/search';\n\nexport default function TemplatePartSelectionModal( {\n\tsetAttributes,\n\tonClose,\n\ttemplatePartId = null,\n\tarea,\n\tclientId,\n} ) {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst { templateParts } = useAlternativeTemplateParts(\n\t\tarea,\n\t\ttemplatePartId\n\t);\n\t// We can map template parts to block patters to reuse the BlockPatternsList UI\n\tconst filteredTemplateParts = useMemo( () => {\n\t\tconst partsAsPatterns = templateParts.map( ( templatePart ) => ( {\n\t\t\tname: createTemplatePartId( templatePart.theme, templatePart.slug ),\n\t\t\ttitle: templatePart.title.rendered,\n\t\t\tblocks: parse( templatePart.content.raw ),\n\t\t\ttemplatePart,\n\t\t} ) );\n\n\t\treturn searchPatterns( partsAsPatterns, searchValue );\n\t}, [ templateParts, searchValue ] );\n\tconst shownTemplateParts = useAsyncList( filteredTemplateParts );\n\tconst blockPatterns = useAlternativeBlockPatterns( area, clientId );\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\treturn searchPatterns( blockPatterns, searchValue );\n\t}, [ blockPatterns, searchValue ] );\n\tconst shownBlockPatterns = useAsyncList( filteredBlockPatterns );\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\tconst onTemplatePartSelect = useCallback( ( templatePart ) => {\n\t\tsetAttributes( {\n\t\t\tslug: templatePart.slug,\n\t\t\ttheme: templatePart.theme,\n\t\t\tarea: undefined,\n\t\t} );\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: template part title. */\n\t\t\t\t__( 'Template Part \"%s\" inserted.' ),\n\t\t\t\ttemplatePart.title?.rendered || templatePart.slug\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t\tonClose();\n\t}, [] );\n\n\tconst createFromBlocks = useCreateTemplatePartFromBlocks(\n\t\tarea,\n\t\tsetAttributes\n\t);\n\n\tconst hasTemplateParts = !! filteredTemplateParts.length;\n\tconst hasBlockPatterns = !! filteredBlockPatterns.length;\n\n\treturn (\n\t\t<div className=\"block-library-template-part__selection-content\">\n\t\t\t<div className=\"block-library-template-part__selection-search\">\n\t\t\t\t<SearchControl\n\t\t\t\t\tonChange={ setSearchValue }\n\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\tlabel={ __( 'Search for replacements' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{ hasTemplateParts && (\n\t\t\t\t<div>\n\t\t\t\t\t<h2>{ __( 'Existing template parts' ) }</h2>\n\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\tblockPatterns={ filteredTemplateParts }\n\t\t\t\t\t\tshownPatterns={ shownTemplateParts }\n\t\t\t\t\t\tonClickPattern={ ( pattern ) => {\n\t\t\t\t\t\t\tonTemplatePartSelect( pattern.templatePart );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ hasBlockPatterns && (\n\t\t\t\t<div>\n\t\t\t\t\t<h2>{ __( 'Patterns' ) }</h2>\n\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\tblockPatterns={ filteredBlockPatterns }\n\t\t\t\t\t\tshownPatterns={ shownBlockPatterns }\n\t\t\t\t\t\tonClickPattern={ ( pattern, blocks ) => {\n\t\t\t\t\t\t\tcreateFromBlocks( blocks, pattern.title );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ ! hasTemplateParts && ! hasBlockPatterns && (\n\t\t\t\t<HStack alignment=\"center\">\n\t\t\t\t\t<p>{ __( 'No results found.' ) }</p>\n\t\t\t\t</HStack>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"]}
@@ -16,6 +16,7 @@ import { BlockControls, InspectorControls, RichText, useBlockProps, __experiment
16
16
  import { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';
17
17
  import { link, linkOff } from '@wordpress/icons';
18
18
  import { createBlock } from '@wordpress/blocks';
19
+ import { useMergeRefs } from '@wordpress/compose';
19
20
  const NEW_TAB_REL = 'noreferrer noopener';
20
21
 
21
22
  function WidthPanel(_ref) {
@@ -105,15 +106,18 @@ function ButtonEdit(props) {
105
106
  unlink();
106
107
  (_richTextRef$current = richTextRef.current) === null || _richTextRef$current === void 0 ? void 0 : _richTextRef$current.focus();
107
108
  }
108
- }
109
+ } // Use internal state instead of a ref to make sure that the component
110
+ // re-renders when the popover's anchor updates.
111
+
109
112
 
113
+ const [popoverAnchor, setPopoverAnchor] = useState(null);
110
114
  const borderProps = useBorderProps(attributes);
111
115
  const colorProps = useColorProps(attributes);
112
116
  const spacingProps = useSpacingProps(attributes);
113
117
  const ref = useRef();
114
118
  const richTextRef = useRef();
115
119
  const blockProps = useBlockProps({
116
- ref,
120
+ ref: useMergeRefs([setPopoverAnchor, ref]),
117
121
  onKeyDown
118
122
  });
119
123
  const [isEditingURL, setIsEditingURL] = useState(false);
@@ -189,7 +193,7 @@ function ButtonEdit(props) {
189
193
  setIsEditingURL(false);
190
194
  (_richTextRef$current2 = richTextRef.current) === null || _richTextRef$current2 === void 0 ? void 0 : _richTextRef$current2.focus();
191
195
  },
192
- anchorRef: ref === null || ref === void 0 ? void 0 : ref.current,
196
+ anchor: popoverAnchor,
193
197
  focusOnMount: isEditingURL ? 'firstElement' : false,
194
198
  __unstableSlotName: '__unstable-block-tools-after',
195
199
  shift: true
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/button/edit.js"],"names":["classnames","__","useCallback","useEffect","useState","useRef","Button","ButtonGroup","PanelBody","TextControl","ToolbarButton","Popover","BlockControls","InspectorControls","RichText","useBlockProps","__experimentalUseBorderProps","useBorderProps","__experimentalUseColorProps","useColorProps","__experimentalGetSpacingClassesAndStyles","useSpacingProps","__experimentalLinkControl","LinkControl","__experimentalGetElementClassName","displayShortcut","isKeyboardEvent","link","linkOff","createBlock","NEW_TAB_REL","WidthPanel","selectedWidth","setAttributes","handleChange","newWidth","width","undefined","map","widthValue","ButtonEdit","props","attributes","className","isSelected","onReplace","mergeBlocks","linkTarget","placeholder","rel","style","text","url","onSetLinkRel","value","onToggleOpenInNewTab","newLinkTarget","updatedRel","setButtonText","newText","replace","onKeyDown","event","primary","startEditing","primaryShift","unlink","richTextRef","current","focus","borderProps","colorProps","spacingProps","ref","blockProps","isEditingURL","setIsEditingURL","isURLSet","opensInNewTab","preventDefault","fontSize","border","radius","newURL","newOpensInNewTab"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useEffect, useState, useRef } from '@wordpress/element';\nimport {\n\tButton,\n\tButtonGroup,\n\tPanelBody,\n\tTextControl,\n\tToolbarButton,\n\tPopover,\n} from '@wordpress/components';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalUseColorProps as useColorProps,\n\t__experimentalGetSpacingClassesAndStyles as useSpacingProps,\n\t__experimentalLinkControl as LinkControl,\n\t__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\nimport { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';\nimport { link, linkOff } from '@wordpress/icons';\nimport { createBlock } from '@wordpress/blocks';\n\nconst NEW_TAB_REL = 'noreferrer noopener';\n\nfunction WidthPanel( { selectedWidth, setAttributes } ) {\n\tfunction handleChange( newWidth ) {\n\t\t// Check if we are toggling the width off\n\t\tconst width = selectedWidth === newWidth ? undefined : newWidth;\n\n\t\t// Update attributes.\n\t\tsetAttributes( { width } );\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Width settings' ) }>\n\t\t\t<ButtonGroup aria-label={ __( 'Button width' ) }>\n\t\t\t\t{ [ 25, 50, 75, 100 ].map( ( widthValue ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ widthValue }\n\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\tvariant={\n\t\t\t\t\t\t\t\twidthValue === selectedWidth\n\t\t\t\t\t\t\t\t\t? 'primary'\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick={ () => handleChange( widthValue ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ widthValue }%\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</ButtonGroup>\n\t\t</PanelBody>\n\t);\n}\n\nfunction ButtonEdit( props ) {\n\tconst {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tclassName,\n\t\tisSelected,\n\t\tonReplace,\n\t\tmergeBlocks,\n\t} = props;\n\tconst { linkTarget, placeholder, rel, style, text, url, width } =\n\t\tattributes;\n\tconst onSetLinkRel = useCallback(\n\t\t( value ) => {\n\t\t\tsetAttributes( { rel: value } );\n\t\t},\n\t\t[ setAttributes ]\n\t);\n\n\tfunction onToggleOpenInNewTab( value ) {\n\t\tconst newLinkTarget = value ? '_blank' : undefined;\n\n\t\tlet updatedRel = rel;\n\t\tif ( newLinkTarget && ! rel ) {\n\t\t\tupdatedRel = NEW_TAB_REL;\n\t\t} else if ( ! newLinkTarget && rel === NEW_TAB_REL ) {\n\t\t\tupdatedRel = undefined;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tlinkTarget: newLinkTarget,\n\t\t\trel: updatedRel,\n\t\t} );\n\t}\n\n\tfunction setButtonText( newText ) {\n\t\t// Remove anchor tags from button text content.\n\t\tsetAttributes( { text: newText.replace( /<\\/?a[^>]*>/g, '' ) } );\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\tstartEditing( event );\n\t\t} else if ( isKeyboardEvent.primaryShift( event, 'k' ) ) {\n\t\t\tunlink();\n\t\t\trichTextRef.current?.focus();\n\t\t}\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst colorProps = useColorProps( attributes );\n\tconst spacingProps = useSpacingProps( attributes );\n\tconst ref = useRef();\n\tconst richTextRef = useRef();\n\tconst blockProps = useBlockProps( { ref, onKeyDown } );\n\n\tconst [ isEditingURL, setIsEditingURL ] = useState( false );\n\tconst isURLSet = !! url;\n\tconst opensInNewTab = linkTarget === '_blank';\n\n\tfunction startEditing( event ) {\n\t\tevent.preventDefault();\n\t\tsetIsEditingURL( true );\n\t}\n\n\tfunction unlink() {\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlinkTarget: undefined,\n\t\t\trel: undefined,\n\t\t} );\n\t\tsetIsEditingURL( false );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingURL( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\t{ ...blockProps }\n\t\t\t\tclassName={ classnames( blockProps.className, {\n\t\t\t\t\t[ `has-custom-width wp-block-button__width-${ width }` ]:\n\t\t\t\t\t\twidth,\n\t\t\t\t\t[ `has-custom-font-size` ]: blockProps.style.fontSize,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<RichText\n\t\t\t\t\tref={ richTextRef }\n\t\t\t\t\taria-label={ __( 'Button text' ) }\n\t\t\t\t\tplaceholder={ placeholder || __( 'Add text…' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tonChange={ ( value ) => setButtonText( value ) }\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t'wp-block-button__link',\n\t\t\t\t\t\tcolorProps.className,\n\t\t\t\t\t\tborderProps.className,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// For backwards compatibility add style that isn't\n\t\t\t\t\t\t\t// provided via block support.\n\t\t\t\t\t\t\t'no-border-radius': style?.border?.radius === 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__experimentalGetElementClassName( 'button' )\n\t\t\t\t\t) }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t\t...colorProps.style,\n\t\t\t\t\t\t...spacingProps.style,\n\t\t\t\t\t} }\n\t\t\t\t\tonSplit={ ( value ) =>\n\t\t\t\t\t\tcreateBlock( 'core/button', {\n\t\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t\ttext: value,\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\tidentifier=\"text\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ ! isURLSet && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ link }\n\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\tonClick={ startEditing }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ isURLSet && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ linkOff }\n\t\t\t\t\t\ttitle={ __( 'Unlink' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primaryShift( 'k' ) }\n\t\t\t\t\t\tonClick={ unlink }\n\t\t\t\t\t\tisActive={ true }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ isSelected && ( isEditingURL || isURLSet ) && (\n\t\t\t\t<Popover\n\t\t\t\t\tposition=\"bottom center\"\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsEditingURL( false );\n\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t\tanchorRef={ ref?.current }\n\t\t\t\t\tfocusOnMount={ isEditingURL ? 'firstElement' : false }\n\t\t\t\t\t__unstableSlotName={ '__unstable-block-tools-after' }\n\t\t\t\t\tshift\n\t\t\t\t>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\tclassName=\"wp-block-navigation-link__inline-link-input\"\n\t\t\t\t\t\tvalue={ { url, opensInNewTab } }\n\t\t\t\t\t\tonChange={ ( {\n\t\t\t\t\t\t\turl: newURL = '',\n\t\t\t\t\t\t\topensInNewTab: newOpensInNewTab,\n\t\t\t\t\t\t} ) => {\n\t\t\t\t\t\t\tsetAttributes( { url: newURL } );\n\n\t\t\t\t\t\t\tif ( opensInNewTab !== newOpensInNewTab ) {\n\t\t\t\t\t\t\t\tonToggleOpenInNewTab( newOpensInNewTab );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\tunlink();\n\t\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tforceIsEditingLink={ isEditingURL }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<WidthPanel\n\t\t\t\t\tselectedWidth={ width }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls __experimentalGroup=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\tlabel={ __( 'Link rel' ) }\n\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\tonChange={ onSetLinkRel }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n}\n\nexport default ButtonEdit;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/button/edit.js"],"names":["classnames","__","useCallback","useEffect","useState","useRef","Button","ButtonGroup","PanelBody","TextControl","ToolbarButton","Popover","BlockControls","InspectorControls","RichText","useBlockProps","__experimentalUseBorderProps","useBorderProps","__experimentalUseColorProps","useColorProps","__experimentalGetSpacingClassesAndStyles","useSpacingProps","__experimentalLinkControl","LinkControl","__experimentalGetElementClassName","displayShortcut","isKeyboardEvent","link","linkOff","createBlock","useMergeRefs","NEW_TAB_REL","WidthPanel","selectedWidth","setAttributes","handleChange","newWidth","width","undefined","map","widthValue","ButtonEdit","props","attributes","className","isSelected","onReplace","mergeBlocks","linkTarget","placeholder","rel","style","text","url","onSetLinkRel","value","onToggleOpenInNewTab","newLinkTarget","updatedRel","setButtonText","newText","replace","onKeyDown","event","primary","startEditing","primaryShift","unlink","richTextRef","current","focus","popoverAnchor","setPopoverAnchor","borderProps","colorProps","spacingProps","ref","blockProps","isEditingURL","setIsEditingURL","isURLSet","opensInNewTab","preventDefault","fontSize","border","radius","newURL","newOpensInNewTab"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useEffect, useState, useRef } from '@wordpress/element';\nimport {\n\tButton,\n\tButtonGroup,\n\tPanelBody,\n\tTextControl,\n\tToolbarButton,\n\tPopover,\n} from '@wordpress/components';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\t__experimentalUseBorderProps as useBorderProps,\n\t__experimentalUseColorProps as useColorProps,\n\t__experimentalGetSpacingClassesAndStyles as useSpacingProps,\n\t__experimentalLinkControl as LinkControl,\n\t__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\nimport { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';\nimport { link, linkOff } from '@wordpress/icons';\nimport { createBlock } from '@wordpress/blocks';\nimport { useMergeRefs } from '@wordpress/compose';\n\nconst NEW_TAB_REL = 'noreferrer noopener';\n\nfunction WidthPanel( { selectedWidth, setAttributes } ) {\n\tfunction handleChange( newWidth ) {\n\t\t// Check if we are toggling the width off\n\t\tconst width = selectedWidth === newWidth ? undefined : newWidth;\n\n\t\t// Update attributes.\n\t\tsetAttributes( { width } );\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Width settings' ) }>\n\t\t\t<ButtonGroup aria-label={ __( 'Button width' ) }>\n\t\t\t\t{ [ 25, 50, 75, 100 ].map( ( widthValue ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ widthValue }\n\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\tvariant={\n\t\t\t\t\t\t\t\twidthValue === selectedWidth\n\t\t\t\t\t\t\t\t\t? 'primary'\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick={ () => handleChange( widthValue ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ widthValue }%\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</ButtonGroup>\n\t\t</PanelBody>\n\t);\n}\n\nfunction ButtonEdit( props ) {\n\tconst {\n\t\tattributes,\n\t\tsetAttributes,\n\t\tclassName,\n\t\tisSelected,\n\t\tonReplace,\n\t\tmergeBlocks,\n\t} = props;\n\tconst { linkTarget, placeholder, rel, style, text, url, width } =\n\t\tattributes;\n\tconst onSetLinkRel = useCallback(\n\t\t( value ) => {\n\t\t\tsetAttributes( { rel: value } );\n\t\t},\n\t\t[ setAttributes ]\n\t);\n\n\tfunction onToggleOpenInNewTab( value ) {\n\t\tconst newLinkTarget = value ? '_blank' : undefined;\n\n\t\tlet updatedRel = rel;\n\t\tif ( newLinkTarget && ! rel ) {\n\t\t\tupdatedRel = NEW_TAB_REL;\n\t\t} else if ( ! newLinkTarget && rel === NEW_TAB_REL ) {\n\t\t\tupdatedRel = undefined;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tlinkTarget: newLinkTarget,\n\t\t\trel: updatedRel,\n\t\t} );\n\t}\n\n\tfunction setButtonText( newText ) {\n\t\t// Remove anchor tags from button text content.\n\t\tsetAttributes( { text: newText.replace( /<\\/?a[^>]*>/g, '' ) } );\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\tstartEditing( event );\n\t\t} else if ( isKeyboardEvent.primaryShift( event, 'k' ) ) {\n\t\t\tunlink();\n\t\t\trichTextRef.current?.focus();\n\t\t}\n\t}\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst colorProps = useColorProps( attributes );\n\tconst spacingProps = useSpacingProps( attributes );\n\tconst ref = useRef();\n\tconst richTextRef = useRef();\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, ref ] ),\n\t\tonKeyDown,\n\t} );\n\n\tconst [ isEditingURL, setIsEditingURL ] = useState( false );\n\tconst isURLSet = !! url;\n\tconst opensInNewTab = linkTarget === '_blank';\n\n\tfunction startEditing( event ) {\n\t\tevent.preventDefault();\n\t\tsetIsEditingURL( true );\n\t}\n\n\tfunction unlink() {\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlinkTarget: undefined,\n\t\t\trel: undefined,\n\t\t} );\n\t\tsetIsEditingURL( false );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingURL( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\t{ ...blockProps }\n\t\t\t\tclassName={ classnames( blockProps.className, {\n\t\t\t\t\t[ `has-custom-width wp-block-button__width-${ width }` ]:\n\t\t\t\t\t\twidth,\n\t\t\t\t\t[ `has-custom-font-size` ]: blockProps.style.fontSize,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<RichText\n\t\t\t\t\tref={ richTextRef }\n\t\t\t\t\taria-label={ __( 'Button text' ) }\n\t\t\t\t\tplaceholder={ placeholder || __( 'Add text…' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tonChange={ ( value ) => setButtonText( value ) }\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t'wp-block-button__link',\n\t\t\t\t\t\tcolorProps.className,\n\t\t\t\t\t\tborderProps.className,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// For backwards compatibility add style that isn't\n\t\t\t\t\t\t\t// provided via block support.\n\t\t\t\t\t\t\t'no-border-radius': style?.border?.radius === 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__experimentalGetElementClassName( 'button' )\n\t\t\t\t\t) }\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t...borderProps.style,\n\t\t\t\t\t\t...colorProps.style,\n\t\t\t\t\t\t...spacingProps.style,\n\t\t\t\t\t} }\n\t\t\t\t\tonSplit={ ( value ) =>\n\t\t\t\t\t\tcreateBlock( 'core/button', {\n\t\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t\ttext: value,\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\tidentifier=\"text\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ ! isURLSet && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ link }\n\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\tonClick={ startEditing }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ isURLSet && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ linkOff }\n\t\t\t\t\t\ttitle={ __( 'Unlink' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primaryShift( 'k' ) }\n\t\t\t\t\t\tonClick={ unlink }\n\t\t\t\t\t\tisActive={ true }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ isSelected && ( isEditingURL || isURLSet ) && (\n\t\t\t\t<Popover\n\t\t\t\t\tposition=\"bottom center\"\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsEditingURL( false );\n\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\tfocusOnMount={ isEditingURL ? 'firstElement' : false }\n\t\t\t\t\t__unstableSlotName={ '__unstable-block-tools-after' }\n\t\t\t\t\tshift\n\t\t\t\t>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\tclassName=\"wp-block-navigation-link__inline-link-input\"\n\t\t\t\t\t\tvalue={ { url, opensInNewTab } }\n\t\t\t\t\t\tonChange={ ( {\n\t\t\t\t\t\t\turl: newURL = '',\n\t\t\t\t\t\t\topensInNewTab: newOpensInNewTab,\n\t\t\t\t\t\t} ) => {\n\t\t\t\t\t\t\tsetAttributes( { url: newURL } );\n\n\t\t\t\t\t\t\tif ( opensInNewTab !== newOpensInNewTab ) {\n\t\t\t\t\t\t\t\tonToggleOpenInNewTab( newOpensInNewTab );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonRemove={ () => {\n\t\t\t\t\t\t\tunlink();\n\t\t\t\t\t\t\trichTextRef.current?.focus();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tforceIsEditingLink={ isEditingURL }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<WidthPanel\n\t\t\t\t\tselectedWidth={ width }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls __experimentalGroup=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\tlabel={ __( 'Link rel' ) }\n\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\tonChange={ onSetLinkRel }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n}\n\nexport default ButtonEdit;\n"]}
@@ -30,7 +30,7 @@ const metadata = {
30
30
  },
31
31
  templateLock: {
32
32
  type: ["string", "boolean"],
33
- "enum": ["all", "insert", "noContent", false]
33
+ "enum": ["all", "insert", "contentOnly", false]
34
34
  }
35
35
  },
36
36
  supports: {
@@ -85,7 +85,7 @@ const metadata = {
85
85
  },
86
86
  templateLock: {
87
87
  type: ["string", "boolean"],
88
- "enum": ["all", "insert", "noContent", false]
88
+ "enum": ["all", "insert", "contentOnly", false]
89
89
  }
90
90
  },
91
91
  usesContext: ["postId", "postType"],
@@ -3,8 +3,7 @@ import { createElement, Fragment } from "@wordpress/element";
3
3
  /**
4
4
  * WordPress dependencies
5
5
  */
6
- import { useSelect, useDispatch } from '@wordpress/data';
7
- import { useEffect } from '@wordpress/element';
6
+ import { useSelect } from '@wordpress/data';
8
7
  import { InnerBlocks, useBlockProps, InspectorControls, useInnerBlocksProps, useSetting, store as blockEditorStore } from '@wordpress/block-editor';
9
8
  import { SelectControl } from '@wordpress/components';
10
9
  import { __ } from '@wordpress/i18n';
@@ -63,23 +62,6 @@ function GroupEdit(_ref) {
63
62
  renderAppender: hasInnerBlocks ? undefined : InnerBlocks.ButtonBlockAppender,
64
63
  __experimentalLayout: layoutSupportEnabled ? usedLayout : undefined
65
64
  });
66
- const {
67
- __unstableMarkNextChangeAsNotPersistent
68
- } = useDispatch(blockEditorStore);
69
- const {
70
- type: layoutType = null
71
- } = layout;
72
- useEffect(() => {
73
- if (layoutType) {
74
- __unstableMarkNextChangeAsNotPersistent();
75
-
76
- setAttributes({
77
- layout: { ...layout,
78
- type: layoutType
79
- }
80
- });
81
- }
82
- }, [layoutType]);
83
65
  return createElement(Fragment, null, createElement(InspectorControls, {
84
66
  __experimentalGroup: "advanced"
85
67
  }, createElement(SelectControl, {