@wordpress/block-library 8.26.0 → 8.27.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 (275) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/avatar/edit.js +2 -2
  3. package/build/avatar/edit.js.map +1 -1
  4. package/build/block/edit.js +76 -13
  5. package/build/block/edit.js.map +1 -1
  6. package/build/block/{v1/edit.native.js → edit.native.js} +4 -4
  7. package/build/block/edit.native.js.map +1 -0
  8. package/build/block/index.js +5 -3
  9. package/build/block/index.js.map +1 -1
  10. package/build/button/edit.js +24 -6
  11. package/build/button/edit.js.map +1 -1
  12. package/build/button/index.js +1 -0
  13. package/build/button/index.js.map +1 -1
  14. package/build/button/save.js +3 -1
  15. package/build/button/save.js.map +1 -1
  16. package/build/cover/edit/index.js +2 -1
  17. package/build/cover/edit/index.js.map +1 -1
  18. package/build/cover/edit/inspector-controls.js +13 -1
  19. package/build/cover/edit/inspector-controls.js.map +1 -1
  20. package/build/cover/edit.native.js +1 -0
  21. package/build/cover/edit.native.js.map +1 -1
  22. package/build/cover/index.js +3 -0
  23. package/build/cover/index.js.map +1 -1
  24. package/build/embed/edit.js +3 -2
  25. package/build/embed/edit.js.map +1 -1
  26. package/build/file/index.js +0 -1
  27. package/build/file/index.js.map +1 -1
  28. package/build/footnotes/edit.js +2 -1
  29. package/build/footnotes/edit.js.map +1 -1
  30. package/build/footnotes/format.js +17 -19
  31. package/build/footnotes/format.js.map +1 -1
  32. package/build/group/index.js +1 -0
  33. package/build/group/index.js.map +1 -1
  34. package/build/heading/edit.js +2 -1
  35. package/build/heading/edit.js.map +1 -1
  36. package/build/heading/edit.native.js +141 -0
  37. package/build/heading/edit.native.js.map +1 -0
  38. package/build/heading/index.js +1 -0
  39. package/build/heading/index.js.map +1 -1
  40. package/build/image/edit.js +8 -4
  41. package/build/image/edit.js.map +1 -1
  42. package/build/image/image.js +33 -7
  43. package/build/image/image.js.map +1 -1
  44. package/build/image/index.js +6 -3
  45. package/build/image/index.js.map +1 -1
  46. package/build/more/index.js +4 -0
  47. package/build/more/index.js.map +1 -1
  48. package/build/navigation/edit/index.js +2 -2
  49. package/build/navigation/edit/index.js.map +1 -1
  50. package/build/navigation/index.js +0 -1
  51. package/build/navigation/index.js.map +1 -1
  52. package/build/paragraph/edit.js +2 -1
  53. package/build/paragraph/edit.js.map +1 -1
  54. package/build/paragraph/index.js +1 -2
  55. package/build/paragraph/index.js.map +1 -1
  56. package/build/paragraph/transforms.js +1 -2
  57. package/build/paragraph/transforms.js.map +1 -1
  58. package/build/post-content/edit.js +2 -2
  59. package/build/post-content/edit.js.map +1 -1
  60. package/build/post-date/edit.js +1 -1
  61. package/build/post-date/edit.js.map +1 -1
  62. package/build/post-navigation-link/edit.js +43 -2
  63. package/build/post-navigation-link/edit.js.map +1 -1
  64. package/build/post-navigation-link/index.js +8 -0
  65. package/build/post-navigation-link/index.js.map +1 -1
  66. package/build/pullquote/index.js +4 -0
  67. package/build/pullquote/index.js.map +1 -1
  68. package/build/query/edit/inspector-controls/index.js +3 -3
  69. package/build/query/edit/inspector-controls/index.js.map +1 -1
  70. package/build/query/edit/query-content.js +2 -2
  71. package/build/query/edit/query-content.js.map +1 -1
  72. package/build/query/edit/query-placeholder.js +6 -7
  73. package/build/query/edit/query-placeholder.js.map +1 -1
  74. package/build/query/index.js +1 -2
  75. package/build/query/index.js.map +1 -1
  76. package/build/query/variations.js +8 -1
  77. package/build/query/variations.js.map +1 -1
  78. package/build/query/view.js +31 -12
  79. package/build/query/view.js.map +1 -1
  80. package/build/search/index.js +0 -1
  81. package/build/search/index.js.map +1 -1
  82. package/build/table-of-contents/hooks.js +2 -2
  83. package/build/table-of-contents/hooks.js.map +1 -1
  84. package/build/template-part/edit/advanced-controls.js +1 -4
  85. package/build/template-part/edit/advanced-controls.js.map +1 -1
  86. package/build/template-part/edit/index.js +39 -17
  87. package/build/template-part/edit/index.js.map +1 -1
  88. package/build/video/edit.native.js +7 -2
  89. package/build/video/edit.native.js.map +1 -1
  90. package/build/video/transforms.js +17 -0
  91. package/build/video/transforms.js.map +1 -1
  92. package/build-module/avatar/edit.js +2 -2
  93. package/build-module/avatar/edit.js.map +1 -1
  94. package/build-module/block/edit.js +76 -13
  95. package/build-module/block/edit.js.map +1 -1
  96. package/build-module/block/{v1/edit.native.js → edit.native.js} +3 -3
  97. package/build-module/block/edit.native.js.map +1 -0
  98. package/build-module/block/index.js +5 -3
  99. package/build-module/block/index.js.map +1 -1
  100. package/build-module/button/edit.js +25 -7
  101. package/build-module/button/edit.js.map +1 -1
  102. package/build-module/button/index.js +1 -0
  103. package/build-module/button/index.js.map +1 -1
  104. package/build-module/button/save.js +4 -2
  105. package/build-module/button/save.js.map +1 -1
  106. package/build-module/cover/edit/index.js +2 -1
  107. package/build-module/cover/edit/index.js.map +1 -1
  108. package/build-module/cover/edit/inspector-controls.js +14 -2
  109. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  110. package/build-module/cover/edit.native.js +1 -0
  111. package/build-module/cover/edit.native.js.map +1 -1
  112. package/build-module/cover/index.js +3 -0
  113. package/build-module/cover/index.js.map +1 -1
  114. package/build-module/embed/edit.js +3 -2
  115. package/build-module/embed/edit.js.map +1 -1
  116. package/build-module/file/index.js +0 -1
  117. package/build-module/file/index.js.map +1 -1
  118. package/build-module/footnotes/edit.js +2 -1
  119. package/build-module/footnotes/edit.js.map +1 -1
  120. package/build-module/footnotes/format.js +17 -19
  121. package/build-module/footnotes/format.js.map +1 -1
  122. package/build-module/group/index.js +1 -0
  123. package/build-module/group/index.js.map +1 -1
  124. package/build-module/heading/edit.js +3 -2
  125. package/build-module/heading/edit.js.map +1 -1
  126. package/build-module/heading/edit.native.js +132 -0
  127. package/build-module/heading/edit.native.js.map +1 -0
  128. package/build-module/heading/index.js +1 -0
  129. package/build-module/heading/index.js.map +1 -1
  130. package/build-module/image/edit.js +9 -5
  131. package/build-module/image/edit.js.map +1 -1
  132. package/build-module/image/image.js +33 -7
  133. package/build-module/image/image.js.map +1 -1
  134. package/build-module/image/index.js +6 -3
  135. package/build-module/image/index.js.map +1 -1
  136. package/build-module/more/index.js +4 -0
  137. package/build-module/more/index.js.map +1 -1
  138. package/build-module/navigation/edit/index.js +1 -1
  139. package/build-module/navigation/edit/index.js.map +1 -1
  140. package/build-module/navigation/index.js +0 -1
  141. package/build-module/navigation/index.js.map +1 -1
  142. package/build-module/paragraph/edit.js +3 -2
  143. package/build-module/paragraph/edit.js.map +1 -1
  144. package/build-module/paragraph/index.js +1 -2
  145. package/build-module/paragraph/index.js.map +1 -1
  146. package/build-module/paragraph/transforms.js +1 -2
  147. package/build-module/paragraph/transforms.js.map +1 -1
  148. package/build-module/post-content/edit.js +1 -1
  149. package/build-module/post-content/edit.js.map +1 -1
  150. package/build-module/post-date/edit.js +1 -1
  151. package/build-module/post-date/edit.js.map +1 -1
  152. package/build-module/post-navigation-link/edit.js +44 -3
  153. package/build-module/post-navigation-link/edit.js.map +1 -1
  154. package/build-module/post-navigation-link/index.js +8 -0
  155. package/build-module/post-navigation-link/index.js.map +1 -1
  156. package/build-module/pullquote/index.js +4 -0
  157. package/build-module/pullquote/index.js.map +1 -1
  158. package/build-module/query/edit/inspector-controls/index.js +4 -4
  159. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  160. package/build-module/query/edit/query-content.js +2 -2
  161. package/build-module/query/edit/query-content.js.map +1 -1
  162. package/build-module/query/edit/query-placeholder.js +7 -8
  163. package/build-module/query/edit/query-placeholder.js.map +1 -1
  164. package/build-module/query/index.js +1 -2
  165. package/build-module/query/index.js.map +1 -1
  166. package/build-module/query/variations.js +8 -1
  167. package/build-module/query/variations.js.map +1 -1
  168. package/build-module/query/view.js +30 -9
  169. package/build-module/query/view.js.map +1 -1
  170. package/build-module/search/index.js +0 -1
  171. package/build-module/search/index.js.map +1 -1
  172. package/build-module/table-of-contents/hooks.js +2 -2
  173. package/build-module/table-of-contents/hooks.js.map +1 -1
  174. package/build-module/template-part/edit/advanced-controls.js +1 -4
  175. package/build-module/template-part/edit/advanced-controls.js.map +1 -1
  176. package/build-module/template-part/edit/index.js +38 -16
  177. package/build-module/template-part/edit/index.js.map +1 -1
  178. package/build-module/video/edit.native.js +7 -2
  179. package/build-module/video/edit.native.js.map +1 -1
  180. package/build-module/video/transforms.js +17 -0
  181. package/build-module/video/transforms.js.map +1 -1
  182. package/build-style/common-rtl.css +4 -2
  183. package/build-style/common.css +4 -2
  184. package/build-style/cover/style-rtl.css +2 -4
  185. package/build-style/cover/style.css +2 -4
  186. package/build-style/editor-rtl.css +6 -4
  187. package/build-style/editor.css +6 -4
  188. package/build-style/gallery/style-rtl.css +2 -4
  189. package/build-style/gallery/style.css +2 -4
  190. package/build-style/image/editor-rtl.css +6 -0
  191. package/build-style/image/editor.css +6 -0
  192. package/build-style/page-list/editor-rtl.css +0 -4
  193. package/build-style/page-list/editor.css +0 -4
  194. package/build-style/pullquote/style-rtl.css +10 -1
  195. package/build-style/pullquote/style.css +10 -1
  196. package/build-style/search/style-rtl.css +2 -1
  197. package/build-style/search/style.css +2 -1
  198. package/build-style/style-rtl.css +20 -13
  199. package/build-style/style.css +20 -13
  200. package/build-style/video/style-rtl.css +1 -2
  201. package/build-style/video/style.css +1 -2
  202. package/package.json +34 -32
  203. package/src/avatar/edit.js +16 -18
  204. package/src/block/block.json +3 -0
  205. package/src/block/edit.js +102 -20
  206. package/src/block/{v1/edit.native.js → edit.native.js} +4 -4
  207. package/src/block/index.js +2 -3
  208. package/src/block/index.php +3 -31
  209. package/src/button/block.json +1 -0
  210. package/src/button/edit.js +76 -43
  211. package/src/button/save.js +3 -0
  212. package/src/buttons/test/__snapshots__/edit.native.js.snap +6 -0
  213. package/src/buttons/test/edit.native.js +49 -0
  214. package/src/cover/block.json +3 -0
  215. package/src/cover/edit/index.js +2 -1
  216. package/src/cover/edit/inspector-controls.js +14 -1
  217. package/src/cover/edit.native.js +1 -0
  218. package/src/cover/style.scss +2 -3
  219. package/src/embed/edit.js +3 -2
  220. package/src/file/block.json +0 -1
  221. package/src/file/index.php +11 -57
  222. package/src/footnotes/edit.js +2 -1
  223. package/src/footnotes/format.js +34 -31
  224. package/src/footnotes/index.php +20 -11
  225. package/src/gallery/index.php +0 -3
  226. package/src/group/block.json +1 -0
  227. package/src/heading/block.json +1 -0
  228. package/src/heading/edit.js +18 -14
  229. package/src/heading/edit.native.js +144 -0
  230. package/src/image/block.json +7 -3
  231. package/src/image/edit.js +19 -6
  232. package/src/image/editor.scss +6 -1
  233. package/src/image/image.js +101 -42
  234. package/src/image/index.js +6 -0
  235. package/src/image/index.php +14 -51
  236. package/src/more/index.js +6 -0
  237. package/src/navigation/block.json +0 -1
  238. package/src/navigation/edit/index.js +2 -2
  239. package/src/navigation/index.php +777 -28
  240. package/src/navigation-link/index.php +78 -16
  241. package/src/page-list/editor.scss +0 -4
  242. package/src/paragraph/block.json +1 -2
  243. package/src/paragraph/edit.js +23 -19
  244. package/src/post-content/edit.js +2 -2
  245. package/src/post-date/edit.js +38 -33
  246. package/src/post-navigation-link/block.json +8 -0
  247. package/src/post-navigation-link/edit.js +63 -1
  248. package/src/post-navigation-link/index.php +17 -3
  249. package/src/post-terms/index.php +13 -4
  250. package/src/pullquote/block.json +4 -0
  251. package/src/pullquote/style.scss +13 -1
  252. package/src/query/block.json +1 -2
  253. package/src/query/edit/inspector-controls/index.js +137 -146
  254. package/src/query/edit/query-content.js +9 -7
  255. package/src/query/edit/query-placeholder.js +11 -11
  256. package/src/query/index.php +33 -71
  257. package/src/query/variations.js +4 -0
  258. package/src/query/view.js +24 -19
  259. package/src/search/block.json +0 -1
  260. package/src/search/index.php +18 -36
  261. package/src/table-of-contents/hooks.js +2 -2
  262. package/src/template-part/edit/advanced-controls.js +2 -3
  263. package/src/template-part/edit/index.js +77 -50
  264. package/src/template-part/index.php +2 -2
  265. package/src/video/edit.native.js +5 -2
  266. package/src/video/test/edit.native.js +38 -0
  267. package/src/video/transforms.js +32 -0
  268. package/tsconfig.json +1 -0
  269. package/build/block/v1/edit.js +0 -116
  270. package/build/block/v1/edit.js.map +0 -1
  271. package/build/block/v1/edit.native.js.map +0 -1
  272. package/build-module/block/v1/edit.js +0 -108
  273. package/build-module/block/v1/edit.js.map +0 -1
  274. package/build-module/block/v1/edit.native.js.map +0 -1
  275. package/src/block/v1/edit.js +0 -163
@@ -12,6 +12,7 @@ import { formatListNumbered as icon } from '@wordpress/icons';
12
12
  import { insertObject } from '@wordpress/rich-text';
13
13
  import { RichTextToolbarButton, store as blockEditorStore, privateApis } from '@wordpress/block-editor';
14
14
  import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
15
+ import { store as coreDataStore } from '@wordpress/core-data';
15
16
  import { createBlock, store as blocksStore } from '@wordpress/blocks';
16
17
 
17
18
  /**
@@ -33,13 +34,14 @@ export const format = {
33
34
  },
34
35
  interactive: true,
35
36
  contentEditable: false,
36
- [usesContextKey]: ['postType'],
37
+ [usesContextKey]: ['postType', 'postId'],
37
38
  edit: function Edit({
38
39
  value,
39
40
  onChange,
40
41
  isObjectActive,
41
42
  context: {
42
- postType
43
+ postType,
44
+ postId
43
45
  }
44
46
  }) {
45
47
  const registry = useRegistry();
@@ -50,32 +52,28 @@ export const format = {
50
52
  getBlockName,
51
53
  getBlockParentsByBlockName
52
54
  } = registry.select(blockEditorStore);
53
- const hasFootnotesBlockType = useSelect(select => !!select(blocksStore).getBlockType('core/footnotes'), []);
54
- /*
55
- * This useSelect exists because we need to use its return value
56
- * outside the event callback.
57
- */
58
- const isBlockWithinPattern = useSelect(select => {
55
+ const isFootnotesSupported = useSelect(select => {
56
+ if (!select(blocksStore).getBlockType('core/footnotes')) {
57
+ return false;
58
+ }
59
+ const entityRecord = select(coreDataStore).getEntityRecord('postType', postType, postId);
60
+ if ('string' !== typeof entityRecord?.meta?.footnotes) {
61
+ return false;
62
+ }
63
+
64
+ // Checks if the selected block lives within a pattern.
59
65
  const {
60
66
  getBlockParentsByBlockName: _getBlockParentsByBlockName,
61
67
  getSelectedBlockClientId: _getSelectedBlockClientId
62
68
  } = select(blockEditorStore);
63
69
  const parentCoreBlocks = _getBlockParentsByBlockName(_getSelectedBlockClientId(), SYNCED_PATTERN_BLOCK_NAME);
64
- return parentCoreBlocks && parentCoreBlocks.length > 0;
65
- }, []);
70
+ return !parentCoreBlocks || parentCoreBlocks.length === 0;
71
+ }, [postType, postId]);
66
72
  const {
67
73
  selectionChange,
68
74
  insertBlock
69
75
  } = useDispatch(blockEditorStore);
70
- if (!hasFootnotesBlockType) {
71
- return null;
72
- }
73
- if (postType !== 'post' && postType !== 'page') {
74
- return null;
75
- }
76
-
77
- // Checks if the selected block lives within a pattern.
78
- if (isBlockWithinPattern) {
76
+ if (!isFootnotesSupported) {
79
77
  return null;
80
78
  }
81
79
  function onClick() {
@@ -1 +1 @@
1
- {"version":3,"names":["v4","createId","__","formatListNumbered","icon","insertObject","RichTextToolbarButton","store","blockEditorStore","privateApis","useSelect","useDispatch","useRegistry","createBlock","blocksStore","unlock","usesContextKey","formatName","POST_CONTENT_BLOCK_NAME","SYNCED_PATTERN_BLOCK_NAME","format","title","tagName","className","attributes","interactive","contentEditable","edit","Edit","value","onChange","isObjectActive","context","postType","registry","getSelectedBlockClientId","getBlocks","getBlockRootClientId","getBlockName","getBlockParentsByBlockName","select","hasFootnotesBlockType","getBlockType","isBlockWithinPattern","_getBlockParentsByBlockName","_getSelectedBlockClientId","parentCoreBlocks","length","selectionChange","insertBlock","onClick","batch","id","object","replacements","start","newValue","type","innerHTML","end","selectedClientId","parentPostContent","blocks","fnBlock","queue","block","shift","name","push","innerBlocks","rootClientId","undefined","clientId","createElement","isActive"],"sources":["@wordpress/block-library/src/footnotes/format.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { v4 as createId } from 'uuid';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { formatListNumbered as icon } from '@wordpress/icons';\nimport { insertObject } from '@wordpress/rich-text';\nimport {\n\tRichTextToolbarButton,\n\tstore as blockEditorStore,\n\tprivateApis,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch, useRegistry } from '@wordpress/data';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { usesContextKey } = unlock( privateApis );\n\nexport const formatName = 'core/footnote';\n\nconst POST_CONTENT_BLOCK_NAME = 'core/post-content';\nconst SYNCED_PATTERN_BLOCK_NAME = 'core/block';\n\nexport const format = {\n\ttitle: __( 'Footnote' ),\n\ttagName: 'sup',\n\tclassName: 'fn',\n\tattributes: {\n\t\t'data-fn': 'data-fn',\n\t},\n\tinteractive: true,\n\tcontentEditable: false,\n\t[ usesContextKey ]: [ 'postType' ],\n\tedit: function Edit( {\n\t\tvalue,\n\t\tonChange,\n\t\tisObjectActive,\n\t\tcontext: { postType },\n\t} ) {\n\t\tconst registry = useRegistry();\n\t\tconst {\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetBlocks,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockName,\n\t\t\tgetBlockParentsByBlockName,\n\t\t} = registry.select( blockEditorStore );\n\t\tconst hasFootnotesBlockType = useSelect(\n\t\t\t( select ) =>\n\t\t\t\t!! select( blocksStore ).getBlockType( 'core/footnotes' ),\n\t\t\t[]\n\t\t);\n\t\t/*\n\t\t * This useSelect exists because we need to use its return value\n\t\t * outside the event callback.\n\t\t */\n\t\tconst isBlockWithinPattern = useSelect( ( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockParentsByBlockName: _getBlockParentsByBlockName,\n\t\t\t\tgetSelectedBlockClientId: _getSelectedBlockClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst parentCoreBlocks = _getBlockParentsByBlockName(\n\t\t\t\t_getSelectedBlockClientId(),\n\t\t\t\tSYNCED_PATTERN_BLOCK_NAME\n\t\t\t);\n\t\t\treturn parentCoreBlocks && parentCoreBlocks.length > 0;\n\t\t}, [] );\n\n\t\tconst { selectionChange, insertBlock } =\n\t\t\tuseDispatch( blockEditorStore );\n\n\t\tif ( ! hasFootnotesBlockType ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( postType !== 'post' && postType !== 'page' ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Checks if the selected block lives within a pattern.\n\t\tif ( isBlockWithinPattern ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onClick() {\n\t\t\tregistry.batch( () => {\n\t\t\t\tlet id;\n\t\t\t\tif ( isObjectActive ) {\n\t\t\t\t\tconst object = value.replacements[ value.start ];\n\t\t\t\t\tid = object?.attributes?.[ 'data-fn' ];\n\t\t\t\t} else {\n\t\t\t\t\tid = createId();\n\t\t\t\t\tconst newValue = insertObject(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: formatName,\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t'data-fn': id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinnerHTML: `<a href=\"#${ id }\" id=\"${ id }-link\">*</a>`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvalue.end,\n\t\t\t\t\t\tvalue.end\n\t\t\t\t\t);\n\t\t\t\t\tnewValue.start = newValue.end - 1;\n\t\t\t\t\tonChange( newValue );\n\t\t\t\t}\n\n\t\t\t\tconst selectedClientId = getSelectedBlockClientId();\n\n\t\t\t\t/*\n\t\t\t\t * Attempts to find a common parent post content block.\n\t\t\t\t * This allows for locating blocks within a page edited in the site editor.\n\t\t\t\t */\n\t\t\t\tconst parentPostContent = getBlockParentsByBlockName(\n\t\t\t\t\tselectedClientId,\n\t\t\t\t\tPOST_CONTENT_BLOCK_NAME\n\t\t\t\t);\n\n\t\t\t\t// When called with a post content block, getBlocks will return\n\t\t\t\t// the block with controlled inner blocks included.\n\t\t\t\tconst blocks = parentPostContent.length\n\t\t\t\t\t? getBlocks( parentPostContent[ 0 ] )\n\t\t\t\t\t: getBlocks();\n\n\t\t\t\t// BFS search to find the first footnote block.\n\t\t\t\tlet fnBlock = null;\n\t\t\t\t{\n\t\t\t\t\tconst queue = [ ...blocks ];\n\t\t\t\t\twhile ( queue.length ) {\n\t\t\t\t\t\tconst block = queue.shift();\n\t\t\t\t\t\tif ( block.name === 'core/footnotes' ) {\n\t\t\t\t\t\t\tfnBlock = block;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqueue.push( ...block.innerBlocks );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Maybe this should all also be moved to the entity provider.\n\t\t\t\t// When there is no footnotes block in the post, create one and\n\t\t\t\t// insert it at the bottom.\n\t\t\t\tif ( ! fnBlock ) {\n\t\t\t\t\tlet rootClientId = getBlockRootClientId( selectedClientId );\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\trootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) !== POST_CONTENT_BLOCK_NAME\n\t\t\t\t\t) {\n\t\t\t\t\t\trootClientId = getBlockRootClientId( rootClientId );\n\t\t\t\t\t}\n\n\t\t\t\t\tfnBlock = createBlock( 'core/footnotes' );\n\n\t\t\t\t\tinsertBlock( fnBlock, undefined, rootClientId );\n\t\t\t\t}\n\n\t\t\t\tselectionChange( fnBlock.clientId, id, 0, 0 );\n\t\t\t} );\n\t\t}\n\n\t\treturn (\n\t\t\t<RichTextToolbarButton\n\t\t\t\ticon={ icon }\n\t\t\t\ttitle={ __( 'Footnote' ) }\n\t\t\t\tonClick={ onClick }\n\t\t\t\tisActive={ isObjectActive }\n\t\t\t/>\n\t\t);\n\t},\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["v4","createId","__","formatListNumbered","icon","insertObject","RichTextToolbarButton","store","blockEditorStore","privateApis","useSelect","useDispatch","useRegistry","coreDataStore","createBlock","blocksStore","unlock","usesContextKey","formatName","POST_CONTENT_BLOCK_NAME","SYNCED_PATTERN_BLOCK_NAME","format","title","tagName","className","attributes","interactive","contentEditable","edit","Edit","value","onChange","isObjectActive","context","postType","postId","registry","getSelectedBlockClientId","getBlocks","getBlockRootClientId","getBlockName","getBlockParentsByBlockName","select","isFootnotesSupported","getBlockType","entityRecord","getEntityRecord","meta","footnotes","_getBlockParentsByBlockName","_getSelectedBlockClientId","parentCoreBlocks","length","selectionChange","insertBlock","onClick","batch","id","object","replacements","start","newValue","type","innerHTML","end","selectedClientId","parentPostContent","blocks","fnBlock","queue","block","shift","name","push","innerBlocks","rootClientId","undefined","clientId","createElement","isActive"],"sources":["@wordpress/block-library/src/footnotes/format.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { v4 as createId } from 'uuid';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { formatListNumbered as icon } from '@wordpress/icons';\nimport { insertObject } from '@wordpress/rich-text';\nimport {\n\tRichTextToolbarButton,\n\tstore as blockEditorStore,\n\tprivateApis,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch, useRegistry } from '@wordpress/data';\nimport { store as coreDataStore } from '@wordpress/core-data';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { usesContextKey } = unlock( privateApis );\n\nexport const formatName = 'core/footnote';\n\nconst POST_CONTENT_BLOCK_NAME = 'core/post-content';\nconst SYNCED_PATTERN_BLOCK_NAME = 'core/block';\n\nexport const format = {\n\ttitle: __( 'Footnote' ),\n\ttagName: 'sup',\n\tclassName: 'fn',\n\tattributes: {\n\t\t'data-fn': 'data-fn',\n\t},\n\tinteractive: true,\n\tcontentEditable: false,\n\t[ usesContextKey ]: [ 'postType', 'postId' ],\n\tedit: function Edit( {\n\t\tvalue,\n\t\tonChange,\n\t\tisObjectActive,\n\t\tcontext: { postType, postId },\n\t} ) {\n\t\tconst registry = useRegistry();\n\t\tconst {\n\t\t\tgetSelectedBlockClientId,\n\t\t\tgetBlocks,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockName,\n\t\t\tgetBlockParentsByBlockName,\n\t\t} = registry.select( blockEditorStore );\n\t\tconst isFootnotesSupported = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tif (\n\t\t\t\t\t! select( blocksStore ).getBlockType( 'core/footnotes' )\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst entityRecord = select( coreDataStore ).getEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\tpostType,\n\t\t\t\t\tpostId\n\t\t\t\t);\n\n\t\t\t\tif ( 'string' !== typeof entityRecord?.meta?.footnotes ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Checks if the selected block lives within a pattern.\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockParentsByBlockName: _getBlockParentsByBlockName,\n\t\t\t\t\tgetSelectedBlockClientId: _getSelectedBlockClientId,\n\t\t\t\t} = select( blockEditorStore );\n\t\t\t\tconst parentCoreBlocks = _getBlockParentsByBlockName(\n\t\t\t\t\t_getSelectedBlockClientId(),\n\t\t\t\t\tSYNCED_PATTERN_BLOCK_NAME\n\t\t\t\t);\n\t\t\t\treturn ! parentCoreBlocks || parentCoreBlocks.length === 0;\n\t\t\t},\n\t\t\t[ postType, postId ]\n\t\t);\n\n\t\tconst { selectionChange, insertBlock } =\n\t\t\tuseDispatch( blockEditorStore );\n\n\t\tif ( ! isFootnotesSupported ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onClick() {\n\t\t\tregistry.batch( () => {\n\t\t\t\tlet id;\n\t\t\t\tif ( isObjectActive ) {\n\t\t\t\t\tconst object = value.replacements[ value.start ];\n\t\t\t\t\tid = object?.attributes?.[ 'data-fn' ];\n\t\t\t\t} else {\n\t\t\t\t\tid = createId();\n\t\t\t\t\tconst newValue = insertObject(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: formatName,\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t'data-fn': id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinnerHTML: `<a href=\"#${ id }\" id=\"${ id }-link\">*</a>`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvalue.end,\n\t\t\t\t\t\tvalue.end\n\t\t\t\t\t);\n\t\t\t\t\tnewValue.start = newValue.end - 1;\n\t\t\t\t\tonChange( newValue );\n\t\t\t\t}\n\n\t\t\t\tconst selectedClientId = getSelectedBlockClientId();\n\n\t\t\t\t/*\n\t\t\t\t * Attempts to find a common parent post content block.\n\t\t\t\t * This allows for locating blocks within a page edited in the site editor.\n\t\t\t\t */\n\t\t\t\tconst parentPostContent = getBlockParentsByBlockName(\n\t\t\t\t\tselectedClientId,\n\t\t\t\t\tPOST_CONTENT_BLOCK_NAME\n\t\t\t\t);\n\n\t\t\t\t// When called with a post content block, getBlocks will return\n\t\t\t\t// the block with controlled inner blocks included.\n\t\t\t\tconst blocks = parentPostContent.length\n\t\t\t\t\t? getBlocks( parentPostContent[ 0 ] )\n\t\t\t\t\t: getBlocks();\n\n\t\t\t\t// BFS search to find the first footnote block.\n\t\t\t\tlet fnBlock = null;\n\t\t\t\t{\n\t\t\t\t\tconst queue = [ ...blocks ];\n\t\t\t\t\twhile ( queue.length ) {\n\t\t\t\t\t\tconst block = queue.shift();\n\t\t\t\t\t\tif ( block.name === 'core/footnotes' ) {\n\t\t\t\t\t\t\tfnBlock = block;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqueue.push( ...block.innerBlocks );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Maybe this should all also be moved to the entity provider.\n\t\t\t\t// When there is no footnotes block in the post, create one and\n\t\t\t\t// insert it at the bottom.\n\t\t\t\tif ( ! fnBlock ) {\n\t\t\t\t\tlet rootClientId = getBlockRootClientId( selectedClientId );\n\n\t\t\t\t\twhile (\n\t\t\t\t\t\trootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) !== POST_CONTENT_BLOCK_NAME\n\t\t\t\t\t) {\n\t\t\t\t\t\trootClientId = getBlockRootClientId( rootClientId );\n\t\t\t\t\t}\n\n\t\t\t\t\tfnBlock = createBlock( 'core/footnotes' );\n\n\t\t\t\t\tinsertBlock( fnBlock, undefined, rootClientId );\n\t\t\t\t}\n\n\t\t\t\tselectionChange( fnBlock.clientId, id, 0, 0 );\n\t\t\t} );\n\t\t}\n\n\t\treturn (\n\t\t\t<RichTextToolbarButton\n\t\t\t\ticon={ icon }\n\t\t\t\ttitle={ __( 'Footnote' ) }\n\t\t\t\tonClick={ onClick }\n\t\t\t\tisActive={ isObjectActive }\n\t\t\t/>\n\t\t);\n\t},\n};\n"],"mappings":"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"}
@@ -67,6 +67,7 @@ const metadata = {
67
67
  }
68
68
  },
69
69
  dimensions: {
70
+ aspectRatio: true,
70
71
  minHeight: true
71
72
  },
72
73
  __experimentalBorder: {
@@ -1 +1 @@
1
- {"version":3,"names":["__","group","icon","initBlock","deprecated","edit","metadata","$schema","apiVersion","name","title","category","description","keywords","textdomain","attributes","tagName","type","templateLock","allowedBlocks","supports","__experimentalOnEnter","__experimentalOnMerge","__experimentalSettings","align","anchor","ariaLabel","html","background","backgroundImage","backgroundSize","__experimentalDefaultControls","color","gradients","heading","button","link","text","spacing","margin","padding","blockGap","dimensions","minHeight","__experimentalBorder","radius","style","width","position","sticky","typography","fontSize","lineHeight","__experimentalFontFamily","__experimentalFontWeight","__experimentalFontStyle","__experimentalTextTransform","__experimentalTextDecoration","__experimentalLetterSpacing","layout","allowSizingOnChildren","editorStyle","save","transforms","variations","settings","example","innerBlocks","customTextColor","content","init"],"sources":["@wordpress/block-library/src/group/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { group as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\nimport variations from './variations';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tstyle: {\n\t\t\t\tcolor: {\n\t\t\t\t\ttext: '#000000',\n\t\t\t\t\tbackground: '#ffffff',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tinnerBlocks: [\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#cf2e2e',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'One.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#ff6900',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Two.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#fcb900',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Three.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#00d084',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Four.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#0693e3',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Five.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#9b51e0',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Six.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\ttransforms,\n\tedit,\n\tsave,\n\tdeprecated,\n\tvariations,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"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"}
1
+ {"version":3,"names":["__","group","icon","initBlock","deprecated","edit","metadata","$schema","apiVersion","name","title","category","description","keywords","textdomain","attributes","tagName","type","templateLock","allowedBlocks","supports","__experimentalOnEnter","__experimentalOnMerge","__experimentalSettings","align","anchor","ariaLabel","html","background","backgroundImage","backgroundSize","__experimentalDefaultControls","color","gradients","heading","button","link","text","spacing","margin","padding","blockGap","dimensions","aspectRatio","minHeight","__experimentalBorder","radius","style","width","position","sticky","typography","fontSize","lineHeight","__experimentalFontFamily","__experimentalFontWeight","__experimentalFontStyle","__experimentalTextTransform","__experimentalTextDecoration","__experimentalLetterSpacing","layout","allowSizingOnChildren","editorStyle","save","transforms","variations","settings","example","innerBlocks","customTextColor","content","init"],"sources":["@wordpress/block-library/src/group/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { group as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\nimport variations from './variations';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tstyle: {\n\t\t\t\tcolor: {\n\t\t\t\t\ttext: '#000000',\n\t\t\t\t\tbackground: '#ffffff',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tinnerBlocks: [\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#cf2e2e',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'One.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#ff6900',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Two.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#fcb900',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Three.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#00d084',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Four.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#0693e3',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Five.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/paragraph',\n\t\t\t\tattributes: {\n\t\t\t\t\tcustomTextColor: '#9b51e0',\n\t\t\t\t\tfontSize: 'large',\n\t\t\t\t\tcontent: __( 'Six.' ),\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\ttransforms,\n\tedit,\n\tsave,\n\tdeprecated,\n\tvariations,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ import { __ } from '@wordpress/i18n';
11
11
  import { useEffect, Platform } from '@wordpress/element';
12
12
  import { useDispatch, useSelect } from '@wordpress/data';
13
13
  import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
14
- import { AlignmentControl, BlockControls, RichText, useBlockProps, store as blockEditorStore, HeadingLevelDropdown } from '@wordpress/block-editor';
14
+ import { AlignmentControl, BlockControls, RichText, useBlockProps, store as blockEditorStore, HeadingLevelDropdown, useBlockEditingMode } from '@wordpress/block-editor';
15
15
 
16
16
  /**
17
17
  * Internal dependencies
@@ -39,6 +39,7 @@ function HeadingEdit({
39
39
  }),
40
40
  style
41
41
  });
42
+ const blockEditingMode = useBlockEditingMode();
42
43
  const {
43
44
  canGenerateAnchors
44
45
  } = useSelect(select => {
@@ -82,7 +83,7 @@ function HeadingEdit({
82
83
  }
83
84
  setAttributes(newAttrs);
84
85
  };
85
- return createElement(Fragment, null, createElement(BlockControls, {
86
+ return createElement(Fragment, null, blockEditingMode === 'default' && createElement(BlockControls, {
86
87
  group: "block"
87
88
  }, createElement(HeadingLevelDropdown, {
88
89
  value: level,
@@ -1 +1 @@
1
- {"version":3,"names":["classnames","__","useEffect","Platform","useDispatch","useSelect","createBlock","getDefaultBlockName","AlignmentControl","BlockControls","RichText","useBlockProps","store","blockEditorStore","HeadingLevelDropdown","generateAnchor","setAnchor","HeadingEdit","attributes","setAttributes","mergeBlocks","onReplace","style","clientId","textAlign","content","level","placeholder","anchor","tagName","blockProps","className","canGenerateAnchors","select","getGlobalBlockCount","getSettings","settings","generateAnchors","__unstableMarkNextChangeAsNotPersistent","onContentChange","value","newAttrs","createElement","Fragment","group","onChange","newLevel","nextAlign","identifier","onMerge","onSplit","isOriginal","block","_getDefaultBlockName","onRemove","isNative","deleteEnter"],"sources":["@wordpress/block-library/src/heading/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, Platform } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\nimport {\n\tAlignmentControl,\n\tBlockControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tHeadingLevelDropdown,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { generateAnchor, setAnchor } from './autogenerate-anchors';\n\nfunction HeadingEdit( {\n\tattributes,\n\tsetAttributes,\n\tmergeBlocks,\n\tonReplace,\n\tstyle,\n\tclientId,\n} ) {\n\tconst { textAlign, content, level, placeholder, anchor } = attributes;\n\tconst tagName = 'h' + level;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t\tstyle,\n\t} );\n\n\tconst { canGenerateAnchors } = useSelect( ( select ) => {\n\t\tconst { getGlobalBlockCount, getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\n\t\treturn {\n\t\t\tcanGenerateAnchors:\n\t\t\t\t!! settings.generateAnchors ||\n\t\t\t\tgetGlobalBlockCount( 'core/table-of-contents' ) > 0,\n\t\t};\n\t}, [] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Initially set anchor for headings that have content but no anchor set.\n\t// This is used when transforming a block to heading, or for legacy anchors.\n\tuseEffect( () => {\n\t\tif ( ! canGenerateAnchors ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! anchor && content ) {\n\t\t\t// This side-effect should not create an undo level.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\tanchor: generateAnchor( clientId, content ),\n\t\t\t} );\n\t\t}\n\t\tsetAnchor( clientId, anchor );\n\n\t\t// Remove anchor map when block unmounts.\n\t\treturn () => setAnchor( clientId, null );\n\t}, [ anchor, content, clientId, canGenerateAnchors ] );\n\n\tconst onContentChange = ( value ) => {\n\t\tconst newAttrs = { content: value };\n\t\tif (\n\t\t\tcanGenerateAnchors &&\n\t\t\t( ! anchor ||\n\t\t\t\t! value ||\n\t\t\t\tgenerateAnchor( clientId, content ) === anchor )\n\t\t) {\n\t\t\tnewAttrs.anchor = generateAnchor( clientId, value );\n\t\t}\n\t\tsetAttributes( newAttrs );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<HeadingLevelDropdown\n\t\t\t\t\tvalue={ level }\n\t\t\t\t\tonChange={ ( newLevel ) =>\n\t\t\t\t\t\tsetAttributes( { level: newLevel } )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<AlignmentControl\n\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\tonChange={ ( nextAlign ) => {\n\t\t\t\t\t\tsetAttributes( { textAlign: nextAlign } );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<RichText\n\t\t\t\tidentifier=\"content\"\n\t\t\t\ttagName={ tagName }\n\t\t\t\tvalue={ content }\n\t\t\t\tonChange={ onContentChange }\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tonSplit={ ( value, isOriginal ) => {\n\t\t\t\t\tlet block;\n\n\t\t\t\t\tif ( isOriginal || value ) {\n\t\t\t\t\t\tblock = createBlock( 'core/heading', {\n\t\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t\tcontent: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblock = createBlock(\n\t\t\t\t\t\t\tgetDefaultBlockName() ?? 'core/heading'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isOriginal ) {\n\t\t\t\t\t\tblock.clientId = clientId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn block;\n\t\t\t\t} }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonRemove={ () => onReplace( [] ) }\n\t\t\t\tplaceholder={ placeholder || __( 'Heading' ) }\n\t\t\t\ttextAlign={ textAlign }\n\t\t\t\t{ ...( Platform.isNative && { deleteEnter: true } ) } // setup RichText on native mobile to delete the \"Enter\" key as it's handled by the JS/RN side\n\t\t\t\t{ ...blockProps }\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default HeadingEdit;\n"],"mappings":"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"}
1
+ {"version":3,"names":["classnames","__","useEffect","Platform","useDispatch","useSelect","createBlock","getDefaultBlockName","AlignmentControl","BlockControls","RichText","useBlockProps","store","blockEditorStore","HeadingLevelDropdown","useBlockEditingMode","generateAnchor","setAnchor","HeadingEdit","attributes","setAttributes","mergeBlocks","onReplace","style","clientId","textAlign","content","level","placeholder","anchor","tagName","blockProps","className","blockEditingMode","canGenerateAnchors","select","getGlobalBlockCount","getSettings","settings","generateAnchors","__unstableMarkNextChangeAsNotPersistent","onContentChange","value","newAttrs","createElement","Fragment","group","onChange","newLevel","nextAlign","identifier","onMerge","onSplit","isOriginal","block","_getDefaultBlockName","onRemove","isNative","deleteEnter"],"sources":["@wordpress/block-library/src/heading/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, Platform } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\nimport {\n\tAlignmentControl,\n\tBlockControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tHeadingLevelDropdown,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { generateAnchor, setAnchor } from './autogenerate-anchors';\n\nfunction HeadingEdit( {\n\tattributes,\n\tsetAttributes,\n\tmergeBlocks,\n\tonReplace,\n\tstyle,\n\tclientId,\n} ) {\n\tconst { textAlign, content, level, placeholder, anchor } = attributes;\n\tconst tagName = 'h' + level;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t\tstyle,\n\t} );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst { canGenerateAnchors } = useSelect( ( select ) => {\n\t\tconst { getGlobalBlockCount, getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\n\t\treturn {\n\t\t\tcanGenerateAnchors:\n\t\t\t\t!! settings.generateAnchors ||\n\t\t\t\tgetGlobalBlockCount( 'core/table-of-contents' ) > 0,\n\t\t};\n\t}, [] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Initially set anchor for headings that have content but no anchor set.\n\t// This is used when transforming a block to heading, or for legacy anchors.\n\tuseEffect( () => {\n\t\tif ( ! canGenerateAnchors ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! anchor && content ) {\n\t\t\t// This side-effect should not create an undo level.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\tanchor: generateAnchor( clientId, content ),\n\t\t\t} );\n\t\t}\n\t\tsetAnchor( clientId, anchor );\n\n\t\t// Remove anchor map when block unmounts.\n\t\treturn () => setAnchor( clientId, null );\n\t}, [ anchor, content, clientId, canGenerateAnchors ] );\n\n\tconst onContentChange = ( value ) => {\n\t\tconst newAttrs = { content: value };\n\t\tif (\n\t\t\tcanGenerateAnchors &&\n\t\t\t( ! anchor ||\n\t\t\t\t! value ||\n\t\t\t\tgenerateAnchor( clientId, content ) === anchor )\n\t\t) {\n\t\t\tnewAttrs.anchor = generateAnchor( clientId, value );\n\t\t}\n\t\tsetAttributes( newAttrs );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ blockEditingMode === 'default' && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<HeadingLevelDropdown\n\t\t\t\t\t\tvalue={ level }\n\t\t\t\t\t\tonChange={ ( newLevel ) =>\n\t\t\t\t\t\t\tsetAttributes( { level: newLevel } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t<AlignmentControl\n\t\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\t\tonChange={ ( nextAlign ) => {\n\t\t\t\t\t\t\tsetAttributes( { textAlign: nextAlign } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<RichText\n\t\t\t\tidentifier=\"content\"\n\t\t\t\ttagName={ tagName }\n\t\t\t\tvalue={ content }\n\t\t\t\tonChange={ onContentChange }\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tonSplit={ ( value, isOriginal ) => {\n\t\t\t\t\tlet block;\n\n\t\t\t\t\tif ( isOriginal || value ) {\n\t\t\t\t\t\tblock = createBlock( 'core/heading', {\n\t\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t\tcontent: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblock = createBlock(\n\t\t\t\t\t\t\tgetDefaultBlockName() ?? 'core/heading'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isOriginal ) {\n\t\t\t\t\t\tblock.clientId = clientId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn block;\n\t\t\t\t} }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonRemove={ () => onReplace( [] ) }\n\t\t\t\tplaceholder={ placeholder || __( 'Heading' ) }\n\t\t\t\ttextAlign={ textAlign }\n\t\t\t\t{ ...( Platform.isNative && { deleteEnter: true } ) } // setup RichText on native mobile to delete the \"Enter\" key as it's handled by the JS/RN side\n\t\t\t\t{ ...blockProps }\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default HeadingEdit;\n"],"mappings":";AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,YAAY;;AAEnC;AACA;AACA;AACA,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,oBAAoB;AACxD,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,WAAW,EAAEC,mBAAmB,QAAQ,mBAAmB;AACpE,SACCC,gBAAgB,EAChBC,aAAa,EACbC,QAAQ,EACRC,aAAa,EACbC,KAAK,IAAIC,gBAAgB,EACzBC,oBAAoB,EACpBC,mBAAmB,QACb,yBAAyB;;AAEhC;AACA;AACA;AACA,SAASC,cAAc,EAAEC,SAAS,QAAQ,wBAAwB;AAElE,SAASC,WAAWA,CAAE;EACrBC,UAAU;EACVC,aAAa;EACbC,WAAW;EACXC,SAAS;EACTC,KAAK;EACLC;AACD,CAAC,EAAG;EACH,MAAM;IAAEC,SAAS;IAAEC,OAAO;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAO,CAAC,GAAGV,UAAU;EACrE,MAAMW,OAAO,GAAG,GAAG,GAAGH,KAAK;EAC3B,MAAMI,UAAU,GAAGpB,aAAa,CAAE;IACjCqB,SAAS,EAAEhC,UAAU,CAAE;MACtB,CAAG,kBAAkByB,SAAW,EAAC,GAAIA;IACtC,CAAE,CAAC;IACHF;EACD,CAAE,CAAC;EACH,MAAMU,gBAAgB,GAAGlB,mBAAmB,CAAC,CAAC;EAE9C,MAAM;IAAEmB;EAAmB,CAAC,GAAG7B,SAAS,CAAI8B,MAAM,IAAM;IACvD,MAAM;MAAEC,mBAAmB;MAAEC;IAAY,CAAC,GAAGF,MAAM,CAAEtB,gBAAiB,CAAC;IACvE,MAAMyB,QAAQ,GAAGD,WAAW,CAAC,CAAC;IAE9B,OAAO;MACNH,kBAAkB,EACjB,CAAC,CAAEI,QAAQ,CAACC,eAAe,IAC3BH,mBAAmB,CAAE,wBAAyB,CAAC,GAAG;IACpD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAM;IAAEI;EAAwC,CAAC,GAChDpC,WAAW,CAAES,gBAAiB,CAAC;;EAEhC;EACA;EACAX,SAAS,CAAE,MAAM;IAChB,IAAK,CAAEgC,kBAAkB,EAAG;MAC3B;IACD;IAEA,IAAK,CAAEL,MAAM,IAAIH,OAAO,EAAG;MAC1B;MACAc,uCAAuC,CAAC,CAAC;MACzCpB,aAAa,CAAE;QACdS,MAAM,EAAEb,cAAc,CAAEQ,QAAQ,EAAEE,OAAQ;MAC3C,CAAE,CAAC;IACJ;IACAT,SAAS,CAAEO,QAAQ,EAAEK,MAAO,CAAC;;IAE7B;IACA,OAAO,MAAMZ,SAAS,CAAEO,QAAQ,EAAE,IAAK,CAAC;EACzC,CAAC,EAAE,CAAEK,MAAM,EAAEH,OAAO,EAAEF,QAAQ,EAAEU,kBAAkB,CAAG,CAAC;EAEtD,MAAMO,eAAe,GAAKC,KAAK,IAAM;IACpC,MAAMC,QAAQ,GAAG;MAAEjB,OAAO,EAAEgB;IAAM,CAAC;IACnC,IACCR,kBAAkB,KAChB,CAAEL,MAAM,IACT,CAAEa,KAAK,IACP1B,cAAc,CAAEQ,QAAQ,EAAEE,OAAQ,CAAC,KAAKG,MAAM,CAAE,EAChD;MACDc,QAAQ,CAACd,MAAM,GAAGb,cAAc,CAAEQ,QAAQ,EAAEkB,KAAM,CAAC;IACpD;IACAtB,aAAa,CAAEuB,QAAS,CAAC;EAC1B,CAAC;EAED,OACCC,aAAA,CAAAC,QAAA,QACGZ,gBAAgB,KAAK,SAAS,IAC/BW,aAAA,CAACnC,aAAa;IAACqC,KAAK,EAAC;EAAO,GAC3BF,aAAA,CAAC9B,oBAAoB;IACpB4B,KAAK,EAAGf,KAAO;IACfoB,QAAQ,EAAKC,QAAQ,IACpB5B,aAAa,CAAE;MAAEO,KAAK,EAAEqB;IAAS,CAAE;EACnC,CACD,CAAC,EACFJ,aAAA,CAACpC,gBAAgB;IAChBkC,KAAK,EAAGjB,SAAW;IACnBsB,QAAQ,EAAKE,SAAS,IAAM;MAC3B7B,aAAa,CAAE;QAAEK,SAAS,EAAEwB;MAAU,CAAE,CAAC;IAC1C;EAAG,CACH,CACa,CACf,EACDL,aAAA,CAAClC,QAAQ;IACRwC,UAAU,EAAC,SAAS;IACpBpB,OAAO,EAAGA,OAAS;IACnBY,KAAK,EAAGhB,OAAS;IACjBqB,QAAQ,EAAGN,eAAiB;IAC5BU,OAAO,EAAG9B,WAAa;IACvB+B,OAAO,EAAGA,CAAEV,KAAK,EAAEW,UAAU,KAAM;MAClC,IAAIC,KAAK;MAET,IAAKD,UAAU,IAAIX,KAAK,EAAG;QAC1BY,KAAK,GAAGhD,WAAW,CAAE,cAAc,EAAE;UACpC,GAAGa,UAAU;UACbO,OAAO,EAAEgB;QACV,CAAE,CAAC;MACJ,CAAC,MAAM;QAAA,IAAAa,oBAAA;QACND,KAAK,GAAGhD,WAAW,EAAAiD,oBAAA,GAClBhD,mBAAmB,CAAC,CAAC,cAAAgD,oBAAA,cAAAA,oBAAA,GAAI,cAC1B,CAAC;MACF;MAEA,IAAKF,UAAU,EAAG;QACjBC,KAAK,CAAC9B,QAAQ,GAAGA,QAAQ;MAC1B;MAEA,OAAO8B,KAAK;IACb,CAAG;IACHhC,SAAS,EAAGA,SAAW;IACvBkC,QAAQ,EAAGA,CAAA,KAAMlC,SAAS,CAAE,EAAG,CAAG;IAClCM,WAAW,EAAGA,WAAW,IAAI3B,EAAE,CAAE,SAAU,CAAG;IAC9CwB,SAAS,EAAGA,SAAW;IAAA,IAChBtB,QAAQ,CAACsD,QAAQ,IAAI;MAAEC,WAAW,EAAE;IAAK,CAAC;IAAA,GAC5C3B;EAAU,CACf,CACA,CAAC;AAEL;AAEA,eAAeb,WAAW"}
@@ -0,0 +1,132 @@
1
+ import { createElement, Fragment } from "react";
2
+ /**
3
+ * External dependencies
4
+ */
5
+ import classnames from 'classnames';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { __ } from '@wordpress/i18n';
11
+ import { useEffect, Platform } from '@wordpress/element';
12
+ import { useDispatch, useSelect } from '@wordpress/data';
13
+ import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
14
+ import { AlignmentControl, BlockControls, RichText, useBlockProps, store as blockEditorStore, HeadingLevelDropdown } from '@wordpress/block-editor';
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import { generateAnchor, setAnchor } from './autogenerate-anchors';
20
+ function HeadingEdit({
21
+ attributes,
22
+ setAttributes,
23
+ mergeBlocks,
24
+ onReplace,
25
+ style,
26
+ clientId
27
+ }) {
28
+ const {
29
+ textAlign,
30
+ content,
31
+ level,
32
+ placeholder,
33
+ anchor
34
+ } = attributes;
35
+ const tagName = 'h' + level;
36
+ const blockProps = useBlockProps({
37
+ className: classnames({
38
+ [`has-text-align-${textAlign}`]: textAlign
39
+ }),
40
+ style
41
+ });
42
+ const {
43
+ canGenerateAnchors
44
+ } = useSelect(select => {
45
+ const {
46
+ getGlobalBlockCount,
47
+ getSettings
48
+ } = select(blockEditorStore);
49
+ const settings = getSettings();
50
+ return {
51
+ canGenerateAnchors: !!settings.generateAnchors || getGlobalBlockCount('core/table-of-contents') > 0
52
+ };
53
+ }, []);
54
+ const {
55
+ __unstableMarkNextChangeAsNotPersistent
56
+ } = useDispatch(blockEditorStore);
57
+
58
+ // Initially set anchor for headings that have content but no anchor set.
59
+ // This is used when transforming a block to heading, or for legacy anchors.
60
+ useEffect(() => {
61
+ if (!canGenerateAnchors) {
62
+ return;
63
+ }
64
+ if (!anchor && content) {
65
+ // This side-effect should not create an undo level.
66
+ __unstableMarkNextChangeAsNotPersistent();
67
+ setAttributes({
68
+ anchor: generateAnchor(clientId, content)
69
+ });
70
+ }
71
+ setAnchor(clientId, anchor);
72
+
73
+ // Remove anchor map when block unmounts.
74
+ return () => setAnchor(clientId, null);
75
+ }, [anchor, content, clientId, canGenerateAnchors]);
76
+ const onContentChange = value => {
77
+ const newAttrs = {
78
+ content: value
79
+ };
80
+ if (canGenerateAnchors && (!anchor || !value || generateAnchor(clientId, content) === anchor)) {
81
+ newAttrs.anchor = generateAnchor(clientId, value);
82
+ }
83
+ setAttributes(newAttrs);
84
+ };
85
+ return createElement(Fragment, null, createElement(BlockControls, {
86
+ group: "block"
87
+ }, createElement(HeadingLevelDropdown, {
88
+ value: level,
89
+ onChange: newLevel => setAttributes({
90
+ level: newLevel
91
+ })
92
+ }), createElement(AlignmentControl, {
93
+ value: textAlign,
94
+ onChange: nextAlign => {
95
+ setAttributes({
96
+ textAlign: nextAlign
97
+ });
98
+ }
99
+ })), createElement(RichText, {
100
+ identifier: "content",
101
+ tagName: tagName,
102
+ value: content,
103
+ onChange: onContentChange,
104
+ onMerge: mergeBlocks,
105
+ onSplit: (value, isOriginal) => {
106
+ let block;
107
+ if (isOriginal || value) {
108
+ block = createBlock('core/heading', {
109
+ ...attributes,
110
+ content: value
111
+ });
112
+ } else {
113
+ var _getDefaultBlockName;
114
+ block = createBlock((_getDefaultBlockName = getDefaultBlockName()) !== null && _getDefaultBlockName !== void 0 ? _getDefaultBlockName : 'core/heading');
115
+ }
116
+ if (isOriginal) {
117
+ block.clientId = clientId;
118
+ }
119
+ return block;
120
+ },
121
+ onReplace: onReplace,
122
+ onRemove: () => onReplace([]),
123
+ placeholder: placeholder || __('Heading'),
124
+ textAlign: textAlign,
125
+ ...(Platform.isNative && {
126
+ deleteEnter: true
127
+ }),
128
+ ...blockProps
129
+ }));
130
+ }
131
+ export default HeadingEdit;
132
+ //# sourceMappingURL=edit.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["classnames","__","useEffect","Platform","useDispatch","useSelect","createBlock","getDefaultBlockName","AlignmentControl","BlockControls","RichText","useBlockProps","store","blockEditorStore","HeadingLevelDropdown","generateAnchor","setAnchor","HeadingEdit","attributes","setAttributes","mergeBlocks","onReplace","style","clientId","textAlign","content","level","placeholder","anchor","tagName","blockProps","className","canGenerateAnchors","select","getGlobalBlockCount","getSettings","settings","generateAnchors","__unstableMarkNextChangeAsNotPersistent","onContentChange","value","newAttrs","createElement","Fragment","group","onChange","newLevel","nextAlign","identifier","onMerge","onSplit","isOriginal","block","_getDefaultBlockName","onRemove","isNative","deleteEnter"],"sources":["@wordpress/block-library/src/heading/edit.native.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, Platform } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\nimport {\n\tAlignmentControl,\n\tBlockControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tHeadingLevelDropdown,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { generateAnchor, setAnchor } from './autogenerate-anchors';\n\nfunction HeadingEdit( {\n\tattributes,\n\tsetAttributes,\n\tmergeBlocks,\n\tonReplace,\n\tstyle,\n\tclientId,\n} ) {\n\tconst { textAlign, content, level, placeholder, anchor } = attributes;\n\tconst tagName = 'h' + level;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t\tstyle,\n\t} );\n\n\tconst { canGenerateAnchors } = useSelect( ( select ) => {\n\t\tconst { getGlobalBlockCount, getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\n\t\treturn {\n\t\t\tcanGenerateAnchors:\n\t\t\t\t!! settings.generateAnchors ||\n\t\t\t\tgetGlobalBlockCount( 'core/table-of-contents' ) > 0,\n\t\t};\n\t}, [] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Initially set anchor for headings that have content but no anchor set.\n\t// This is used when transforming a block to heading, or for legacy anchors.\n\tuseEffect( () => {\n\t\tif ( ! canGenerateAnchors ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! anchor && content ) {\n\t\t\t// This side-effect should not create an undo level.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\tanchor: generateAnchor( clientId, content ),\n\t\t\t} );\n\t\t}\n\t\tsetAnchor( clientId, anchor );\n\n\t\t// Remove anchor map when block unmounts.\n\t\treturn () => setAnchor( clientId, null );\n\t}, [ anchor, content, clientId, canGenerateAnchors ] );\n\n\tconst onContentChange = ( value ) => {\n\t\tconst newAttrs = { content: value };\n\t\tif (\n\t\t\tcanGenerateAnchors &&\n\t\t\t( ! anchor ||\n\t\t\t\t! value ||\n\t\t\t\tgenerateAnchor( clientId, content ) === anchor )\n\t\t) {\n\t\t\tnewAttrs.anchor = generateAnchor( clientId, value );\n\t\t}\n\t\tsetAttributes( newAttrs );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<HeadingLevelDropdown\n\t\t\t\t\tvalue={ level }\n\t\t\t\t\tonChange={ ( newLevel ) =>\n\t\t\t\t\t\tsetAttributes( { level: newLevel } )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<AlignmentControl\n\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\tonChange={ ( nextAlign ) => {\n\t\t\t\t\t\tsetAttributes( { textAlign: nextAlign } );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<RichText\n\t\t\t\tidentifier=\"content\"\n\t\t\t\ttagName={ tagName }\n\t\t\t\tvalue={ content }\n\t\t\t\tonChange={ onContentChange }\n\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\tonSplit={ ( value, isOriginal ) => {\n\t\t\t\t\tlet block;\n\n\t\t\t\t\tif ( isOriginal || value ) {\n\t\t\t\t\t\tblock = createBlock( 'core/heading', {\n\t\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t\tcontent: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblock = createBlock(\n\t\t\t\t\t\t\tgetDefaultBlockName() ?? 'core/heading'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isOriginal ) {\n\t\t\t\t\t\tblock.clientId = clientId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn block;\n\t\t\t\t} }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonRemove={ () => onReplace( [] ) }\n\t\t\t\tplaceholder={ placeholder || __( 'Heading' ) }\n\t\t\t\ttextAlign={ textAlign }\n\t\t\t\t{ ...( Platform.isNative && { deleteEnter: true } ) } // setup RichText on native mobile to delete the \"Enter\" key as it's handled by the JS/RN side\n\t\t\t\t{ ...blockProps }\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default HeadingEdit;\n"],"mappings":"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"}
@@ -19,6 +19,7 @@ const metadata = {
19
19
  description: "Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.",
20
20
  keywords: ["title", "subtitle"],
21
21
  textdomain: "default",
22
+ usesContext: ["pattern/overrides"],
22
23
  attributes: {
23
24
  textAlign: {
24
25
  type: "string"
@@ -1 +1 @@
1
- {"version":3,"names":["heading","icon","__","sprintf","initBlock","deprecated","edit","metadata","$schema","apiVersion","name","title","category","description","keywords","textdomain","attributes","textAlign","type","content","source","selector","__experimentalRole","level","placeholder","supports","align","anchor","className","color","gradients","link","__experimentalDefaultControls","background","text","spacing","margin","padding","typography","fontSize","lineHeight","__experimentalFontFamily","__experimentalFontStyle","__experimentalFontWeight","__experimentalLetterSpacing","__experimentalTextTransform","__experimentalTextDecoration","__experimentalWritingMode","__unstablePasteTextInline","__experimentalSlashInserter","editorStyle","style","save","transforms","settings","example","__experimentalLabel","context","customName","length","merge","attributesToMerge","init"],"sources":["@wordpress/block-library/src/heading/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { heading as icon } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tcontent: __( 'Code is Poetry' ),\n\t\t\tlevel: 2,\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst { content, level } = attributes;\n\n\t\tconst customName = attributes?.metadata?.name;\n\n\t\t// In the list view, use the block's content as the label.\n\t\t// If the content is empty, fall back to the default label.\n\t\tif ( context === 'list-view' && ( customName || content ) ) {\n\t\t\treturn attributes?.metadata?.name || content;\n\t\t}\n\n\t\tif ( context === 'accessibility' ) {\n\t\t\treturn ! content || content.length === 0\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. %s: heading level. */\n\t\t\t\t\t\t__( 'Level %s. Empty.' ),\n\t\t\t\t\t\tlevel\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. 1: heading level. 2: heading content. */\n\t\t\t\t\t\t__( 'Level %1$s. %2$s' ),\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tcontent\n\t\t\t\t );\n\t\t}\n\t},\n\ttransforms,\n\tdeprecated,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\tcontent:\n\t\t\t\t( attributes.content || '' ) +\n\t\t\t\t( attributesToMerge.content || '' ),\n\t\t};\n\t},\n\tedit,\n\tsave,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,IAAIC,IAAI,QAAQ,kBAAkB;AAClD,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;;AAE7C;AACA;AACA;AACA,OAAOC,SAAS,MAAM,qBAAqB;AAC3C,OAAOC,UAAU,MAAM,cAAc;AACrC,OAAOC,IAAI,MAAM,QAAQ;AAAC,MAAAC,QAAA;EAAAC,OAAA;EAAAC,UAAA;EAAAC,IAAA;EAAAC,KAAA;EAAAC,QAAA;EAAAC,WAAA;EAAAC,QAAA;EAAAC,UAAA;EAAAC,UAAA;IAAAC,SAAA;MAAAC,IAAA;IAAA;IAAAC,OAAA;MAAAD,IAAA;MAAAE,MAAA;MAAAC,QAAA;MAAAC,kBAAA;IAAA;IAAAC,KAAA;MAAAL,IAAA;MAAA;IAAA;IAAAM,WAAA;MAAAN,IAAA;IAAA;EAAA;EAAAO,QAAA;IAAAC,KAAA;IAAAC,MAAA;IAAAC,SAAA;IAAAC,KAAA;MAAAC,SAAA;MAAAC,IAAA;MAAAC,6BAAA;QAAAC,UAAA;QAAAC,IAAA;MAAA;IAAA;IAAAC,OAAA;MAAAC,MAAA;MAAAC,OAAA;MAAAL,6BAAA;QAAAI,MAAA;QAAAC,OAAA;MAAA;IAAA;IAAAC,UAAA;MAAAC,QAAA;MAAAC,UAAA;MAAAC,wBAAA;MAAAC,uBAAA;MAAAC,wBAAA;MAAAC,2BAAA;MAAAC,2BAAA;MAAAC,4BAAA;MAAAC,yBAAA;MAAAf,6BAAA;QAAAO,QAAA;MAAA;IAAA;IAAAS,yBAAA;IAAAC,2BAAA;EAAA;EAAAC,WAAA;EAAAC,KAAA;AAAA;AAE1B,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,UAAU,MAAM,cAAc;AAErC,MAAM;EAAE3C;AAAK,CAAC,GAAGH,QAAQ;AAEzB,SAASA,QAAQ,EAAEG,IAAI;AAEvB,OAAO,MAAM4C,QAAQ,GAAG;EACvBrD,IAAI;EACJsD,OAAO,EAAE;IACRvC,UAAU,EAAE;MACXG,OAAO,EAAEjB,EAAE,CAAE,gBAAiB,CAAC;MAC/BqB,KAAK,EAAE;IACR;EACD,CAAC;EACDiC,mBAAmBA,CAAExC,UAAU,EAAE;IAAEyC;EAAQ,CAAC,EAAG;IAC9C,MAAM;MAAEtC,OAAO;MAAEI;IAAM,CAAC,GAAGP,UAAU;IAErC,MAAM0C,UAAU,GAAG1C,UAAU,EAAET,QAAQ,EAAEG,IAAI;;IAE7C;IACA;IACA,IAAK+C,OAAO,KAAK,WAAW,KAAMC,UAAU,IAAIvC,OAAO,CAAE,EAAG;MAC3D,OAAOH,UAAU,EAAET,QAAQ,EAAEG,IAAI,IAAIS,OAAO;IAC7C;IAEA,IAAKsC,OAAO,KAAK,eAAe,EAAG;MAClC,OAAO,CAAEtC,OAAO,IAAIA,OAAO,CAACwC,MAAM,KAAK,CAAC,GACrCxD,OAAO,EACP;MACAD,EAAE,CAAE,kBAAmB,CAAC,EACxBqB,KACA,CAAC,GACDpB,OAAO,EACP;MACAD,EAAE,CAAE,kBAAmB,CAAC,EACxBqB,KAAK,EACLJ,OACA,CAAC;IACL;EACD,CAAC;EACDkC,UAAU;EACVhD,UAAU;EACVuD,KAAKA,CAAE5C,UAAU,EAAE6C,iBAAiB,EAAG;IACtC,OAAO;MACN1C,OAAO,EACN,CAAEH,UAAU,CAACG,OAAO,IAAI,EAAE,KACxB0C,iBAAiB,CAAC1C,OAAO,IAAI,EAAE;IACnC,CAAC;EACF,CAAC;EACDb,IAAI;EACJ8C;AACD,CAAC;AAED,OAAO,MAAMU,IAAI,GAAGA,CAAA,KAAM1D,SAAS,CAAE;EAAEM,IAAI;EAAEH,QAAQ;EAAE+C;AAAS,CAAE,CAAC"}
1
+ {"version":3,"names":["heading","icon","__","sprintf","initBlock","deprecated","edit","metadata","$schema","apiVersion","name","title","category","description","keywords","textdomain","usesContext","attributes","textAlign","type","content","source","selector","__experimentalRole","level","placeholder","supports","align","anchor","className","color","gradients","link","__experimentalDefaultControls","background","text","spacing","margin","padding","typography","fontSize","lineHeight","__experimentalFontFamily","__experimentalFontStyle","__experimentalFontWeight","__experimentalLetterSpacing","__experimentalTextTransform","__experimentalTextDecoration","__experimentalWritingMode","__unstablePasteTextInline","__experimentalSlashInserter","editorStyle","style","save","transforms","settings","example","__experimentalLabel","context","customName","length","merge","attributesToMerge","init"],"sources":["@wordpress/block-library/src/heading/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { heading as icon } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tcontent: __( 'Code is Poetry' ),\n\t\t\tlevel: 2,\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tconst { content, level } = attributes;\n\n\t\tconst customName = attributes?.metadata?.name;\n\n\t\t// In the list view, use the block's content as the label.\n\t\t// If the content is empty, fall back to the default label.\n\t\tif ( context === 'list-view' && ( customName || content ) ) {\n\t\t\treturn attributes?.metadata?.name || content;\n\t\t}\n\n\t\tif ( context === 'accessibility' ) {\n\t\t\treturn ! content || content.length === 0\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. %s: heading level. */\n\t\t\t\t\t\t__( 'Level %s. Empty.' ),\n\t\t\t\t\t\tlevel\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: accessibility text. 1: heading level. 2: heading content. */\n\t\t\t\t\t\t__( 'Level %1$s. %2$s' ),\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tcontent\n\t\t\t\t );\n\t\t}\n\t},\n\ttransforms,\n\tdeprecated,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\tcontent:\n\t\t\t\t( attributes.content || '' ) +\n\t\t\t\t( attributesToMerge.content || '' ),\n\t\t};\n\t},\n\tedit,\n\tsave,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,IAAIC,IAAI,QAAQ,kBAAkB;AAClD,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;;AAE7C;AACA;AACA;AACA,OAAOC,SAAS,MAAM,qBAAqB;AAC3C,OAAOC,UAAU,MAAM,cAAc;AACrC,OAAOC,IAAI,MAAM,QAAQ;AAAC,MAAAC,QAAA;EAAAC,OAAA;EAAAC,UAAA;EAAAC,IAAA;EAAAC,KAAA;EAAAC,QAAA;EAAAC,WAAA;EAAAC,QAAA;EAAAC,UAAA;EAAAC,WAAA;EAAAC,UAAA;IAAAC,SAAA;MAAAC,IAAA;IAAA;IAAAC,OAAA;MAAAD,IAAA;MAAAE,MAAA;MAAAC,QAAA;MAAAC,kBAAA;IAAA;IAAAC,KAAA;MAAAL,IAAA;MAAA;IAAA;IAAAM,WAAA;MAAAN,IAAA;IAAA;EAAA;EAAAO,QAAA;IAAAC,KAAA;IAAAC,MAAA;IAAAC,SAAA;IAAAC,KAAA;MAAAC,SAAA;MAAAC,IAAA;MAAAC,6BAAA;QAAAC,UAAA;QAAAC,IAAA;MAAA;IAAA;IAAAC,OAAA;MAAAC,MAAA;MAAAC,OAAA;MAAAL,6BAAA;QAAAI,MAAA;QAAAC,OAAA;MAAA;IAAA;IAAAC,UAAA;MAAAC,QAAA;MAAAC,UAAA;MAAAC,wBAAA;MAAAC,uBAAA;MAAAC,wBAAA;MAAAC,2BAAA;MAAAC,2BAAA;MAAAC,4BAAA;MAAAC,yBAAA;MAAAf,6BAAA;QAAAO,QAAA;MAAA;IAAA;IAAAS,yBAAA;IAAAC,2BAAA;EAAA;EAAAC,WAAA;EAAAC,KAAA;AAAA;AAE1B,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,UAAU,MAAM,cAAc;AAErC,MAAM;EAAE5C;AAAK,CAAC,GAAGH,QAAQ;AAEzB,SAASA,QAAQ,EAAEG,IAAI;AAEvB,OAAO,MAAM6C,QAAQ,GAAG;EACvBtD,IAAI;EACJuD,OAAO,EAAE;IACRvC,UAAU,EAAE;MACXG,OAAO,EAAElB,EAAE,CAAE,gBAAiB,CAAC;MAC/BsB,KAAK,EAAE;IACR;EACD,CAAC;EACDiC,mBAAmBA,CAAExC,UAAU,EAAE;IAAEyC;EAAQ,CAAC,EAAG;IAC9C,MAAM;MAAEtC,OAAO;MAAEI;IAAM,CAAC,GAAGP,UAAU;IAErC,MAAM0C,UAAU,GAAG1C,UAAU,EAAEV,QAAQ,EAAEG,IAAI;;IAE7C;IACA;IACA,IAAKgD,OAAO,KAAK,WAAW,KAAMC,UAAU,IAAIvC,OAAO,CAAE,EAAG;MAC3D,OAAOH,UAAU,EAAEV,QAAQ,EAAEG,IAAI,IAAIU,OAAO;IAC7C;IAEA,IAAKsC,OAAO,KAAK,eAAe,EAAG;MAClC,OAAO,CAAEtC,OAAO,IAAIA,OAAO,CAACwC,MAAM,KAAK,CAAC,GACrCzD,OAAO,EACP;MACAD,EAAE,CAAE,kBAAmB,CAAC,EACxBsB,KACA,CAAC,GACDrB,OAAO,EACP;MACAD,EAAE,CAAE,kBAAmB,CAAC,EACxBsB,KAAK,EACLJ,OACA,CAAC;IACL;EACD,CAAC;EACDkC,UAAU;EACVjD,UAAU;EACVwD,KAAKA,CAAE5C,UAAU,EAAE6C,iBAAiB,EAAG;IACtC,OAAO;MACN1C,OAAO,EACN,CAAEH,UAAU,CAACG,OAAO,IAAI,EAAE,KACxB0C,iBAAiB,CAAC1C,OAAO,IAAI,EAAE;IACnC,CAAC;EACF,CAAC;EACDd,IAAI;EACJ+C;AACD,CAAC;AAED,OAAO,MAAMU,IAAI,GAAGA,CAAA,KAAM3D,SAAS,CAAE;EAAEM,IAAI;EAAEH,QAAQ;EAAEgD;AAAS,CAAE,CAAC"}
@@ -13,7 +13,7 @@ import { useDispatch, useSelect } from '@wordpress/data';
13
13
  import { BlockIcon, MediaPlaceholder, useBlockProps, store as blockEditorStore, __experimentalUseBorderProps as useBorderProps, useBlockEditingMode } from '@wordpress/block-editor';
14
14
  import { useEffect, useRef, useState } from '@wordpress/element';
15
15
  import { __ } from '@wordpress/i18n';
16
- import { image as icon } from '@wordpress/icons';
16
+ import { image as icon, plugins as pluginsIcon } from '@wordpress/icons';
17
17
  import { store as noticesStore } from '@wordpress/notices';
18
18
 
19
19
  /**
@@ -86,7 +86,8 @@ export function ImageEdit({
86
86
  sizeSlug,
87
87
  aspectRatio,
88
88
  scale,
89
- align
89
+ align,
90
+ metadata
90
91
  } = attributes;
91
92
  const [temporaryURL, setTemporaryURL] = useState();
92
93
  const altRef = useRef();
@@ -293,15 +294,16 @@ export function ImageEdit({
293
294
  });
294
295
 
295
296
  // Much of this description is duplicated from MediaPlaceholder.
297
+ const isUrlAttributeConnected = !!metadata?.bindings?.url;
296
298
  const placeholder = content => {
297
299
  return createElement(Placeholder, {
298
300
  className: classnames('block-editor-media-placeholder', {
299
301
  [borderProps.className]: !!borderProps.className && !isSelected
300
302
  }),
301
303
  withIllustration: true,
302
- icon: icon,
304
+ icon: isUrlAttributeConnected ? pluginsIcon : icon,
303
305
  label: __('Image'),
304
- instructions: __('Upload an image file, pick one from your media library, or add one with a URL.'),
306
+ instructions: !isUrlAttributeConnected && __('Upload an image file, pick one from your media library, or add one with a URL.'),
305
307
  style: {
306
308
  aspectRatio: !(width && height) && aspectRatio ? aspectRatio : undefined,
307
309
  width: height && aspectRatio ? '100%' : width,
@@ -309,7 +311,9 @@ export function ImageEdit({
309
311
  objectFit: scale,
310
312
  ...borderProps.style
311
313
  }
312
- }, content);
314
+ }, isUrlAttributeConnected ? createElement("span", {
315
+ className: 'block-bindings-media-placeholder-message'
316
+ }, __('Connected to a custom field')) : content);
313
317
  };
314
318
  return createElement("figure", {
315
319
  ...blockProps
@@ -1 +1 @@
1
- {"version":3,"names":["classnames","getBlobByURL","isBlobURL","revokeBlobURL","Placeholder","useDispatch","useSelect","BlockIcon","MediaPlaceholder","useBlockProps","store","blockEditorStore","__experimentalUseBorderProps","useBorderProps","useBlockEditingMode","useEffect","useRef","useState","__","image","icon","noticesStore","Image","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","pickRelevantMediaFiles","size","imageProps","Object","fromEntries","entries","filter","key","includes","url","sizes","media_details","source_url","isTemporaryImage","id","isExternalImage","hasSize","_image$sizes$size","_image$media_details$","ImageEdit","attributes","setAttributes","isSelected","className","insertBlocksAfter","onReplace","context","clientId","alt","caption","width","height","sizeSlug","aspectRatio","scale","align","temporaryURL","setTemporaryURL","altRef","current","captionRef","__unstableMarkNextChangeAsNotPersistent","undefined","ref","imageDefaultSize","mediaUpload","select","getSettings","settings","blockEditingMode","createErrorNotice","onUploadError","message","type","src","onSelectImage","media","title","newSize","mediaAttributes","omittedCaption","restMediaAttributes","additionalAttributes","linkDestination","window","wp","view","defaultProps","link","href","onSelectURL","newURL","isTemp","file","filesList","onFileChange","img","allowedTypes","onError","isExternal","mediaPreview","createElement","borderProps","classes","style","keys","length","blockProps","placeholder","content","withIllustration","label","instructions","objectFit","containerRef","onSelect","accept","value","disableMediaButtons"],"sources":["@wordpress/block-library/src/image/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { Placeholder } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tBlockIcon,\n\tMediaPlaceholder,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalUseBorderProps as useBorderProps,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { image as icon } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport Image from './image';\n\n/**\n * Module constants\n */\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tALLOWED_MEDIA_TYPES,\n} from './constants';\n\nexport const pickRelevantMediaFiles = ( image, size ) => {\n\tconst imageProps = Object.fromEntries(\n\t\tObject.entries( image ?? {} ).filter( ( [ key ] ) =>\n\t\t\t[ 'alt', 'id', 'link', 'caption' ].includes( key )\n\t\t)\n\t);\n\n\timageProps.url =\n\t\timage?.sizes?.[ size ]?.url ||\n\t\timage?.media_details?.sizes?.[ size ]?.source_url ||\n\t\timage.url;\n\treturn imageProps;\n};\n\n/**\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\n * while the image is being uploaded and will not have an id yet allocated.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the URL a Blob URL\n */\nconst isTemporaryImage = ( id, url ) => ! id && isBlobURL( url );\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no\n * id and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nexport const isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\n/**\n * Checks if WP generated the specified image size. Size generation is skipped\n * when the image is smaller than the said size.\n *\n * @param {Object} image\n * @param {string} size\n *\n * @return {boolean} Whether or not it has default image size.\n */\nfunction hasSize( image, size ) {\n\treturn (\n\t\t'url' in ( image?.sizes?.[ size ] ?? {} ) ||\n\t\t'source_url' in ( image?.media_details?.sizes?.[ size ] ?? {} )\n\t);\n}\n\nexport function ImageEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tclassName,\n\tinsertBlocksAfter,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tsizeSlug,\n\t\taspectRatio,\n\t\tscale,\n\t\talign,\n\t} = attributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState();\n\n\tconst altRef = useRef();\n\tuseEffect( () => {\n\t\taltRef.current = alt;\n\t}, [ alt ] );\n\n\tconst captionRef = useRef();\n\tuseEffect( () => {\n\t\tcaptionRef.current = caption;\n\t}, [ caption ] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( [ 'wide', 'full' ].includes( align ) ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\taspectRatio: undefined,\n\t\t\t\tscale: undefined,\n\t\t\t} );\n\t\t}\n\t}, [ align ] );\n\n\tconst ref = useRef();\n\tconst { imageDefaultSize, mediaUpload } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\t\treturn {\n\t\t\timageDefaultSize: settings.imageDefaultSize,\n\t\t\tmediaUpload: settings.mediaUpload,\n\t\t};\n\t}, [] );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetAttributes( {\n\t\t\tsrc: undefined,\n\t\t\tid: undefined,\n\t\t\turl: undefined,\n\t\t} );\n\t\tsetTemporaryURL( undefined );\n\t}\n\n\tfunction onSelectImage( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tsetTemporaryURL();\n\n\t\t// Try to use the previous selected image size if its available\n\t\t// otherwise try the default image size or fallback to \"full\"\n\t\tlet newSize = 'full';\n\t\tif ( sizeSlug && hasSize( media, sizeSlug ) ) {\n\t\t\tnewSize = sizeSlug;\n\t\t} else if ( hasSize( media, imageDefaultSize ) ) {\n\t\t\tnewSize = imageDefaultSize;\n\t\t}\n\n\t\tlet mediaAttributes = pickRelevantMediaFiles( media, newSize );\n\n\t\t// If a caption text was meanwhile written by the user,\n\t\t// make sure the text is not overwritten by empty captions.\n\t\tif ( captionRef.current && ! mediaAttributes.caption ) {\n\t\t\tconst { caption: omittedCaption, ...restMediaAttributes } =\n\t\t\t\tmediaAttributes;\n\t\t\tmediaAttributes = restMediaAttributes;\n\t\t}\n\n\t\tlet additionalAttributes;\n\t\t// Reset the dimension attributes if changing to a different image.\n\t\tif ( ! media.id || media.id !== id ) {\n\t\t\tadditionalAttributes = {\n\t\t\t\tsizeSlug: newSize,\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Resolution\"\n\t\t\t// option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\t// Check if default link setting should be used.\n\t\tlet linkDestination = attributes.linkDestination;\n\t\tif ( ! linkDestination ) {\n\t\t\t// Use the WordPress option to determine the proper default.\n\t\t\t// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.\n\t\t\t// TODO: fix this in a follow up PR, requires updating media-text and ui component.\n\t\t\tswitch (\n\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\tLINK_DESTINATION_NONE\n\t\t\t) {\n\t\t\t\tcase 'file':\n\t\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'post':\n\t\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_NONE:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check if the image is linked to it's media.\n\t\tlet href;\n\t\tswitch ( linkDestination ) {\n\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\thref = media.url;\n\t\t\t\tbreak;\n\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\thref = media.link;\n\t\t\t\tbreak;\n\t\t}\n\t\tmediaAttributes.href = href;\n\n\t\tsetAttributes( {\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t\tlinkDestination,\n\t\t} );\n\t}\n\n\tfunction onSelectURL( newURL ) {\n\t\tif ( newURL !== url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: newURL,\n\t\t\t\tid: undefined,\n\t\t\t\tsizeSlug: imageDefaultSize,\n\t\t\t} );\n\t\t}\n\t}\n\n\tlet isTemp = isTemporaryImage( id, url );\n\n\t// Upload a temporary image on mount.\n\tuseEffect( () => {\n\t\tif ( ! isTemp ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = getBlobByURL( url );\n\n\t\tif ( file ) {\n\t\t\tmediaUpload( {\n\t\t\t\tfilesList: [ file ],\n\t\t\t\tonFileChange: ( [ img ] ) => {\n\t\t\t\t\tonSelectImage( img );\n\t\t\t\t},\n\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\tonError: ( message ) => {\n\t\t\t\t\tisTemp = false;\n\t\t\t\t\tonUploadError( message );\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\t// If an image is temporary, revoke the Blob url when it is uploaded (and is\n\t// no longer temporary).\n\tuseEffect( () => {\n\t\tif ( isTemp ) {\n\t\t\tsetTemporaryURL( url );\n\t\t\treturn;\n\t\t}\n\t\trevokeBlobURL( temporaryURL );\n\t}, [ isTemp, url ] );\n\n\tconst isExternal = isExternalImage( id, url );\n\tconst src = isExternal ? url : undefined;\n\tconst mediaPreview = !! url && (\n\t\t<img\n\t\t\talt={ __( 'Edit image' ) }\n\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\tclassName={ 'edit-image-preview' }\n\t\t\tsrc={ url }\n\t\t/>\n\t);\n\n\tconst borderProps = useBorderProps( attributes );\n\n\tconst classes = classnames( className, {\n\t\t'is-transient': temporaryURL,\n\t\t'is-resized': !! width || !! height,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'has-custom-border':\n\t\t\t!! borderProps.className ||\n\t\t\t( borderProps.style &&\n\t\t\t\tObject.keys( borderProps.style ).length > 0 ),\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref,\n\t\tclassName: classes,\n\t} );\n\n\t// Much of this description is duplicated from MediaPlaceholder.\n\tconst placeholder = ( content ) => {\n\t\treturn (\n\t\t\t<Placeholder\n\t\t\t\tclassName={ classnames( 'block-editor-media-placeholder', {\n\t\t\t\t\t[ borderProps.className ]:\n\t\t\t\t\t\t!! borderProps.className && ! isSelected,\n\t\t\t\t} ) }\n\t\t\t\twithIllustration={ true }\n\t\t\t\ticon={ icon }\n\t\t\t\tlabel={ __( 'Image' ) }\n\t\t\t\tinstructions={ __(\n\t\t\t\t\t'Upload an image file, pick one from your media library, or add one with a URL.'\n\t\t\t\t) }\n\t\t\t\tstyle={ {\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! ( width && height ) && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\twidth: height && aspectRatio ? '100%' : width,\n\t\t\t\t\theight: width && aspectRatio ? '100%' : height,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ content }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\treturn (\n\t\t<figure { ...blockProps }>\n\t\t\t<Image\n\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\tcontainerRef={ ref }\n\t\t\t\tcontext={ context }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tblockEditingMode={ blockEditingMode }\n\t\t\t/>\n\t\t\t<MediaPlaceholder\n\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvalue={ { id, src } }\n\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t/>\n\t\t</figure>\n\t);\n}\n\nexport default ImageEdit;\n"],"mappings":"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"}
1
+ {"version":3,"names":["classnames","getBlobByURL","isBlobURL","revokeBlobURL","Placeholder","useDispatch","useSelect","BlockIcon","MediaPlaceholder","useBlockProps","store","blockEditorStore","__experimentalUseBorderProps","useBorderProps","useBlockEditingMode","useEffect","useRef","useState","__","image","icon","plugins","pluginsIcon","noticesStore","Image","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","pickRelevantMediaFiles","size","imageProps","Object","fromEntries","entries","filter","key","includes","url","sizes","media_details","source_url","isTemporaryImage","id","isExternalImage","hasSize","_image$sizes$size","_image$media_details$","ImageEdit","attributes","setAttributes","isSelected","className","insertBlocksAfter","onReplace","context","clientId","alt","caption","width","height","sizeSlug","aspectRatio","scale","align","metadata","temporaryURL","setTemporaryURL","altRef","current","captionRef","__unstableMarkNextChangeAsNotPersistent","undefined","ref","imageDefaultSize","mediaUpload","select","getSettings","settings","blockEditingMode","createErrorNotice","onUploadError","message","type","src","onSelectImage","media","title","newSize","mediaAttributes","omittedCaption","restMediaAttributes","additionalAttributes","linkDestination","window","wp","view","defaultProps","link","href","onSelectURL","newURL","isTemp","file","filesList","onFileChange","img","allowedTypes","onError","isExternal","mediaPreview","createElement","borderProps","classes","style","keys","length","blockProps","isUrlAttributeConnected","bindings","placeholder","content","withIllustration","label","instructions","objectFit","containerRef","onSelect","accept","value","disableMediaButtons"],"sources":["@wordpress/block-library/src/image/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { Placeholder } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tBlockIcon,\n\tMediaPlaceholder,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalUseBorderProps as useBorderProps,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { image as icon, plugins as pluginsIcon } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport Image from './image';\n\n/**\n * Module constants\n */\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tALLOWED_MEDIA_TYPES,\n} from './constants';\n\nexport const pickRelevantMediaFiles = ( image, size ) => {\n\tconst imageProps = Object.fromEntries(\n\t\tObject.entries( image ?? {} ).filter( ( [ key ] ) =>\n\t\t\t[ 'alt', 'id', 'link', 'caption' ].includes( key )\n\t\t)\n\t);\n\n\timageProps.url =\n\t\timage?.sizes?.[ size ]?.url ||\n\t\timage?.media_details?.sizes?.[ size ]?.source_url ||\n\t\timage.url;\n\treturn imageProps;\n};\n\n/**\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\n * while the image is being uploaded and will not have an id yet allocated.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the URL a Blob URL\n */\nconst isTemporaryImage = ( id, url ) => ! id && isBlobURL( url );\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no\n * id and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nexport const isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\n/**\n * Checks if WP generated the specified image size. Size generation is skipped\n * when the image is smaller than the said size.\n *\n * @param {Object} image\n * @param {string} size\n *\n * @return {boolean} Whether or not it has default image size.\n */\nfunction hasSize( image, size ) {\n\treturn (\n\t\t'url' in ( image?.sizes?.[ size ] ?? {} ) ||\n\t\t'source_url' in ( image?.media_details?.sizes?.[ size ] ?? {} )\n\t);\n}\n\nexport function ImageEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tclassName,\n\tinsertBlocksAfter,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tsizeSlug,\n\t\taspectRatio,\n\t\tscale,\n\t\talign,\n\t\tmetadata,\n\t} = attributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState();\n\n\tconst altRef = useRef();\n\tuseEffect( () => {\n\t\taltRef.current = alt;\n\t}, [ alt ] );\n\n\tconst captionRef = useRef();\n\tuseEffect( () => {\n\t\tcaptionRef.current = caption;\n\t}, [ caption ] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( [ 'wide', 'full' ].includes( align ) ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\taspectRatio: undefined,\n\t\t\t\tscale: undefined,\n\t\t\t} );\n\t\t}\n\t}, [ align ] );\n\n\tconst ref = useRef();\n\tconst { imageDefaultSize, mediaUpload } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst settings = getSettings();\n\t\treturn {\n\t\t\timageDefaultSize: settings.imageDefaultSize,\n\t\t\tmediaUpload: settings.mediaUpload,\n\t\t};\n\t}, [] );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tfunction onUploadError( message ) {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetAttributes( {\n\t\t\tsrc: undefined,\n\t\t\tid: undefined,\n\t\t\turl: undefined,\n\t\t} );\n\t\tsetTemporaryURL( undefined );\n\t}\n\n\tfunction onSelectImage( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tsetTemporaryURL();\n\n\t\t// Try to use the previous selected image size if its available\n\t\t// otherwise try the default image size or fallback to \"full\"\n\t\tlet newSize = 'full';\n\t\tif ( sizeSlug && hasSize( media, sizeSlug ) ) {\n\t\t\tnewSize = sizeSlug;\n\t\t} else if ( hasSize( media, imageDefaultSize ) ) {\n\t\t\tnewSize = imageDefaultSize;\n\t\t}\n\n\t\tlet mediaAttributes = pickRelevantMediaFiles( media, newSize );\n\n\t\t// If a caption text was meanwhile written by the user,\n\t\t// make sure the text is not overwritten by empty captions.\n\t\tif ( captionRef.current && ! mediaAttributes.caption ) {\n\t\t\tconst { caption: omittedCaption, ...restMediaAttributes } =\n\t\t\t\tmediaAttributes;\n\t\t\tmediaAttributes = restMediaAttributes;\n\t\t}\n\n\t\tlet additionalAttributes;\n\t\t// Reset the dimension attributes if changing to a different image.\n\t\tif ( ! media.id || media.id !== id ) {\n\t\t\tadditionalAttributes = {\n\t\t\t\tsizeSlug: newSize,\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Resolution\"\n\t\t\t// option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\t// Check if default link setting should be used.\n\t\tlet linkDestination = attributes.linkDestination;\n\t\tif ( ! linkDestination ) {\n\t\t\t// Use the WordPress option to determine the proper default.\n\t\t\t// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.\n\t\t\t// TODO: fix this in a follow up PR, requires updating media-text and ui component.\n\t\t\tswitch (\n\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\tLINK_DESTINATION_NONE\n\t\t\t) {\n\t\t\t\tcase 'file':\n\t\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'post':\n\t\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_NONE:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check if the image is linked to it's media.\n\t\tlet href;\n\t\tswitch ( linkDestination ) {\n\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\thref = media.url;\n\t\t\t\tbreak;\n\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\thref = media.link;\n\t\t\t\tbreak;\n\t\t}\n\t\tmediaAttributes.href = href;\n\n\t\tsetAttributes( {\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t\tlinkDestination,\n\t\t} );\n\t}\n\n\tfunction onSelectURL( newURL ) {\n\t\tif ( newURL !== url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: newURL,\n\t\t\t\tid: undefined,\n\t\t\t\tsizeSlug: imageDefaultSize,\n\t\t\t} );\n\t\t}\n\t}\n\n\tlet isTemp = isTemporaryImage( id, url );\n\n\t// Upload a temporary image on mount.\n\tuseEffect( () => {\n\t\tif ( ! isTemp ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = getBlobByURL( url );\n\n\t\tif ( file ) {\n\t\t\tmediaUpload( {\n\t\t\t\tfilesList: [ file ],\n\t\t\t\tonFileChange: ( [ img ] ) => {\n\t\t\t\t\tonSelectImage( img );\n\t\t\t\t},\n\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\tonError: ( message ) => {\n\t\t\t\t\tisTemp = false;\n\t\t\t\t\tonUploadError( message );\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\t// If an image is temporary, revoke the Blob url when it is uploaded (and is\n\t// no longer temporary).\n\tuseEffect( () => {\n\t\tif ( isTemp ) {\n\t\t\tsetTemporaryURL( url );\n\t\t\treturn;\n\t\t}\n\t\trevokeBlobURL( temporaryURL );\n\t}, [ isTemp, url ] );\n\n\tconst isExternal = isExternalImage( id, url );\n\tconst src = isExternal ? url : undefined;\n\tconst mediaPreview = !! url && (\n\t\t<img\n\t\t\talt={ __( 'Edit image' ) }\n\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\tclassName={ 'edit-image-preview' }\n\t\t\tsrc={ url }\n\t\t/>\n\t);\n\n\tconst borderProps = useBorderProps( attributes );\n\n\tconst classes = classnames( className, {\n\t\t'is-transient': temporaryURL,\n\t\t'is-resized': !! width || !! height,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'has-custom-border':\n\t\t\t!! borderProps.className ||\n\t\t\t( borderProps.style &&\n\t\t\t\tObject.keys( borderProps.style ).length > 0 ),\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref,\n\t\tclassName: classes,\n\t} );\n\n\t// Much of this description is duplicated from MediaPlaceholder.\n\tconst isUrlAttributeConnected = !! metadata?.bindings?.url;\n\tconst placeholder = ( content ) => {\n\t\treturn (\n\t\t\t<Placeholder\n\t\t\t\tclassName={ classnames( 'block-editor-media-placeholder', {\n\t\t\t\t\t[ borderProps.className ]:\n\t\t\t\t\t\t!! borderProps.className && ! isSelected,\n\t\t\t\t} ) }\n\t\t\t\twithIllustration={ true }\n\t\t\t\ticon={ isUrlAttributeConnected ? pluginsIcon : icon }\n\t\t\t\tlabel={ __( 'Image' ) }\n\t\t\t\tinstructions={\n\t\t\t\t\t! isUrlAttributeConnected &&\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Upload an image file, pick one from your media library, or add one with a URL.'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tstyle={ {\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! ( width && height ) && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\twidth: height && aspectRatio ? '100%' : width,\n\t\t\t\t\theight: width && aspectRatio ? '100%' : height,\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ isUrlAttributeConnected ? (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ 'block-bindings-media-placeholder-message' }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Connected to a custom field' ) }\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\tcontent\n\t\t\t\t) }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\treturn (\n\t\t<figure { ...blockProps }>\n\t\t\t<Image\n\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\tonReplace={ onReplace }\n\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\tcontainerRef={ ref }\n\t\t\t\tcontext={ context }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tblockEditingMode={ blockEditingMode }\n\t\t\t/>\n\t\t\t<MediaPlaceholder\n\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvalue={ { id, src } }\n\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t/>\n\t\t</figure>\n\t);\n}\n\nexport default ImageEdit;\n"],"mappings":"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"}