@wordpress/block-library 8.24.0 → 8.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/audio/edit.js +7 -52
  3. package/build/audio/edit.js.map +1 -1
  4. package/build/audio/edit.native.js +1 -1
  5. package/build/audio/edit.native.js.map +1 -1
  6. package/build/audio/index.js +2 -2
  7. package/build/block/edit.js +102 -11
  8. package/build/block/edit.js.map +1 -1
  9. package/build/block/index.js +3 -2
  10. package/build/block/index.js.map +1 -1
  11. package/build/block/v1/edit.js +116 -0
  12. package/build/block/v1/edit.js.map +1 -0
  13. package/build/block/{edit.native.js → v1/edit.native.js} +2 -2
  14. package/build/block/v1/edit.native.js.map +1 -0
  15. package/build/button/index.js +2 -2
  16. package/build/button/save.js +1 -1
  17. package/build/button/save.js.map +1 -1
  18. package/build/code/edit.native.js +13 -14
  19. package/build/code/edit.native.js.map +1 -1
  20. package/build/code/index.js +2 -2
  21. package/build/code/save.js +6 -2
  22. package/build/code/save.js.map +1 -1
  23. package/build/details/index.js +2 -2
  24. package/build/embed/deprecated.js +2 -2
  25. package/build/embed/embed-preview.native.js +1 -1
  26. package/build/embed/embed-preview.native.js.map +1 -1
  27. package/build/embed/icons.js +1 -1
  28. package/build/embed/icons.js.map +1 -1
  29. package/build/embed/index.js +2 -2
  30. package/build/embed/transforms.js +2 -2
  31. package/build/embed/util.js +2 -2
  32. package/build/file/edit.js +1 -1
  33. package/build/file/edit.js.map +1 -1
  34. package/build/file/edit.native.js +1 -1
  35. package/build/file/edit.native.js.map +1 -1
  36. package/build/file/index.js +4 -4
  37. package/build/file/save.js +4 -1
  38. package/build/file/save.js.map +1 -1
  39. package/build/form-input/deprecated.js +147 -0
  40. package/build/form-input/deprecated.js.map +1 -0
  41. package/build/form-input/edit.js +1 -1
  42. package/build/form-input/edit.js.map +1 -1
  43. package/build/form-input/index.js +4 -2
  44. package/build/form-input/index.js.map +1 -1
  45. package/build/form-input/save.js +7 -9
  46. package/build/form-input/save.js.map +1 -1
  47. package/build/gallery/edit.js +2 -41
  48. package/build/gallery/edit.js.map +1 -1
  49. package/build/gallery/gallery.js +18 -24
  50. package/build/gallery/gallery.js.map +1 -1
  51. package/build/gallery/gallery.native.js +1 -1
  52. package/build/gallery/gallery.native.js.map +1 -1
  53. package/build/gallery/index.js +4 -4
  54. package/build/gallery/v1/gallery.native.js +1 -1
  55. package/build/gallery/v1/gallery.native.js.map +1 -1
  56. package/build/group/edit.js +6 -1
  57. package/build/group/edit.js.map +1 -1
  58. package/build/heading/index.js +3 -6
  59. package/build/heading/index.js.map +1 -1
  60. package/build/image/edit.native.js +1 -1
  61. package/build/image/edit.native.js.map +1 -1
  62. package/build/image/image.js +14 -51
  63. package/build/image/image.js.map +1 -1
  64. package/build/image/index.js +2 -2
  65. package/build/image/save.js +3 -1
  66. package/build/image/save.js.map +1 -1
  67. package/build/list-item/index.js +10 -3
  68. package/build/list-item/index.js.map +1 -1
  69. package/build/navigation/edit/index.js +1 -1
  70. package/build/navigation/edit/index.js.map +1 -1
  71. package/build/page-list/convert-to-links-modal.js +2 -2
  72. package/build/page-list/convert-to-links-modal.js.map +1 -1
  73. package/build/paragraph/edit.js +54 -32
  74. package/build/paragraph/edit.js.map +1 -1
  75. package/build/paragraph/index.js +2 -3
  76. package/build/paragraph/index.js.map +1 -1
  77. package/build/paragraph/transforms.js +2 -3
  78. package/build/paragraph/transforms.js.map +1 -1
  79. package/build/post-title/index.js +1 -3
  80. package/build/post-title/index.js.map +1 -1
  81. package/build/preformatted/index.js +2 -3
  82. package/build/preformatted/index.js.map +1 -1
  83. package/build/pullquote/index.js +5 -7
  84. package/build/pullquote/index.js.map +1 -1
  85. package/build/query/edit/inspector-controls/taxonomy-controls.js +2 -0
  86. package/build/query/edit/inspector-controls/taxonomy-controls.js.map +1 -1
  87. package/build/query-title/index.js +1 -3
  88. package/build/query-title/index.js.map +1 -1
  89. package/build/quote/index.js +3 -5
  90. package/build/quote/index.js.map +1 -1
  91. package/build/quote/transforms.js +7 -6
  92. package/build/quote/transforms.js.map +1 -1
  93. package/build/site-title/index.js +1 -5
  94. package/build/site-title/index.js.map +1 -1
  95. package/build/social-link/icons/gravatar.js +22 -0
  96. package/build/social-link/icons/gravatar.js.map +1 -0
  97. package/build/social-link/icons/index.js +11 -0
  98. package/build/social-link/icons/index.js.map +1 -1
  99. package/build/social-link/variations.js +7 -0
  100. package/build/social-link/variations.js.map +1 -1
  101. package/build/table/edit.js +3 -1
  102. package/build/table/edit.js.map +1 -1
  103. package/build/table/index.js +9 -10
  104. package/build/table/index.js.map +1 -1
  105. package/build/table-of-contents/edit.js +2 -2
  106. package/build/table-of-contents/edit.js.map +1 -1
  107. package/build/table-of-contents/index.js +5 -2
  108. package/build/table-of-contents/index.js.map +1 -1
  109. package/build/utils/caption.js +90 -0
  110. package/build/utils/caption.js.map +1 -0
  111. package/build/utils/remove-anchor-tag.js +2 -1
  112. package/build/utils/remove-anchor-tag.js.map +1 -1
  113. package/build/verse/index.js +3 -5
  114. package/build/verse/index.js.map +1 -1
  115. package/build/video/deprecated.js +2 -2
  116. package/build/video/edit.js +8 -52
  117. package/build/video/edit.js.map +1 -1
  118. package/build/video/edit.native.js +1 -1
  119. package/build/video/edit.native.js.map +1 -1
  120. package/build/video/index.js +2 -2
  121. package/build-module/audio/edit.js +11 -56
  122. package/build-module/audio/edit.js.map +1 -1
  123. package/build-module/audio/edit.native.js +2 -2
  124. package/build-module/audio/edit.native.js.map +1 -1
  125. package/build-module/audio/index.js +2 -2
  126. package/build-module/block/edit.js +104 -13
  127. package/build-module/block/edit.js.map +1 -1
  128. package/build-module/block/index.js +3 -2
  129. package/build-module/block/index.js.map +1 -1
  130. package/build-module/block/v1/edit.js +108 -0
  131. package/build-module/block/v1/edit.js.map +1 -0
  132. package/build-module/block/{edit.native.js → v1/edit.native.js} +2 -2
  133. package/build-module/block/v1/edit.native.js.map +1 -0
  134. package/build-module/button/index.js +2 -2
  135. package/build-module/button/save.js +1 -1
  136. package/build-module/button/save.js.map +1 -1
  137. package/build-module/code/edit.native.js +14 -16
  138. package/build-module/code/edit.native.js.map +1 -1
  139. package/build-module/code/index.js +2 -2
  140. package/build-module/code/save.js +6 -2
  141. package/build-module/code/save.js.map +1 -1
  142. package/build-module/details/index.js +2 -2
  143. package/build-module/embed/deprecated.js +2 -2
  144. package/build-module/embed/embed-preview.native.js +2 -2
  145. package/build-module/embed/embed-preview.native.js.map +1 -1
  146. package/build-module/embed/icons.js +1 -1
  147. package/build-module/embed/icons.js.map +1 -1
  148. package/build-module/embed/index.js +2 -2
  149. package/build-module/embed/transforms.js +2 -2
  150. package/build-module/embed/util.js +2 -2
  151. package/build-module/file/edit.js +1 -1
  152. package/build-module/file/edit.js.map +1 -1
  153. package/build-module/file/edit.native.js +1 -1
  154. package/build-module/file/edit.native.js.map +1 -1
  155. package/build-module/file/index.js +4 -4
  156. package/build-module/file/save.js +4 -1
  157. package/build-module/file/save.js.map +1 -1
  158. package/build-module/form-input/deprecated.js +138 -0
  159. package/build-module/form-input/deprecated.js.map +1 -0
  160. package/build-module/form-input/edit.js +1 -1
  161. package/build-module/form-input/edit.js.map +1 -1
  162. package/build-module/form-input/index.js +4 -2
  163. package/build-module/form-input/index.js.map +1 -1
  164. package/build-module/form-input/save.js +8 -10
  165. package/build-module/form-input/save.js.map +1 -1
  166. package/build-module/gallery/edit.js +5 -44
  167. package/build-module/gallery/edit.js.map +1 -1
  168. package/build-module/gallery/gallery.js +17 -21
  169. package/build-module/gallery/gallery.js.map +1 -1
  170. package/build-module/gallery/gallery.native.js +2 -2
  171. package/build-module/gallery/gallery.native.js.map +1 -1
  172. package/build-module/gallery/index.js +4 -4
  173. package/build-module/gallery/v1/gallery.native.js +2 -2
  174. package/build-module/gallery/v1/gallery.native.js.map +1 -1
  175. package/build-module/group/edit.js +6 -1
  176. package/build-module/group/edit.js.map +1 -1
  177. package/build-module/heading/index.js +3 -6
  178. package/build-module/heading/index.js.map +1 -1
  179. package/build-module/image/edit.native.js +2 -2
  180. package/build-module/image/edit.native.js.map +1 -1
  181. package/build-module/image/image.js +19 -56
  182. package/build-module/image/image.js.map +1 -1
  183. package/build-module/image/index.js +2 -2
  184. package/build-module/image/save.js +3 -1
  185. package/build-module/image/save.js.map +1 -1
  186. package/build-module/list-item/index.js +10 -3
  187. package/build-module/list-item/index.js.map +1 -1
  188. package/build-module/navigation/edit/index.js +2 -2
  189. package/build-module/navigation/edit/index.js.map +1 -1
  190. package/build-module/page-list/convert-to-links-modal.js +2 -2
  191. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  192. package/build-module/paragraph/edit.js +54 -32
  193. package/build-module/paragraph/edit.js.map +1 -1
  194. package/build-module/paragraph/index.js +2 -3
  195. package/build-module/paragraph/index.js.map +1 -1
  196. package/build-module/paragraph/transforms.js +2 -3
  197. package/build-module/paragraph/transforms.js.map +1 -1
  198. package/build-module/post-title/index.js +1 -3
  199. package/build-module/post-title/index.js.map +1 -1
  200. package/build-module/preformatted/index.js +2 -3
  201. package/build-module/preformatted/index.js.map +1 -1
  202. package/build-module/pullquote/index.js +5 -7
  203. package/build-module/pullquote/index.js.map +1 -1
  204. package/build-module/query/edit/inspector-controls/taxonomy-controls.js +2 -0
  205. package/build-module/query/edit/inspector-controls/taxonomy-controls.js.map +1 -1
  206. package/build-module/query-title/index.js +1 -3
  207. package/build-module/query-title/index.js.map +1 -1
  208. package/build-module/quote/index.js +3 -5
  209. package/build-module/quote/index.js.map +1 -1
  210. package/build-module/quote/transforms.js +7 -6
  211. package/build-module/quote/transforms.js.map +1 -1
  212. package/build-module/site-title/index.js +1 -5
  213. package/build-module/site-title/index.js.map +1 -1
  214. package/build-module/social-link/icons/gravatar.js +14 -0
  215. package/build-module/social-link/icons/gravatar.js.map +1 -0
  216. package/build-module/social-link/icons/index.js +1 -0
  217. package/build-module/social-link/icons/index.js.map +1 -1
  218. package/build-module/social-link/variations.js +8 -1
  219. package/build-module/social-link/variations.js.map +1 -1
  220. package/build-module/table/edit.js +3 -1
  221. package/build-module/table/edit.js.map +1 -1
  222. package/build-module/table/index.js +9 -10
  223. package/build-module/table/index.js.map +1 -1
  224. package/build-module/table-of-contents/edit.js +1 -1
  225. package/build-module/table-of-contents/edit.js.map +1 -1
  226. package/build-module/table-of-contents/index.js +5 -1
  227. package/build-module/table-of-contents/index.js.map +1 -1
  228. package/build-module/utils/caption.js +82 -0
  229. package/build-module/utils/caption.js.map +1 -0
  230. package/build-module/utils/remove-anchor-tag.js +2 -1
  231. package/build-module/utils/remove-anchor-tag.js.map +1 -1
  232. package/build-module/verse/index.js +3 -5
  233. package/build-module/verse/index.js.map +1 -1
  234. package/build-module/video/deprecated.js +2 -2
  235. package/build-module/video/edit.js +13 -57
  236. package/build-module/video/edit.js.map +1 -1
  237. package/build-module/video/edit.native.js +2 -2
  238. package/build-module/video/edit.native.js.map +1 -1
  239. package/build-module/video/index.js +2 -2
  240. package/build-style/editor-rtl.css +1 -11
  241. package/build-style/editor.css +1 -11
  242. package/build-style/social-links/style-rtl.css +14 -2
  243. package/build-style/social-links/style.css +14 -2
  244. package/build-style/style-rtl.css +14 -2
  245. package/build-style/style.css +14 -2
  246. package/build-style/table/editor-rtl.css +1 -11
  247. package/build-style/table/editor.css +1 -11
  248. package/package.json +32 -32
  249. package/src/audio/block.json +2 -2
  250. package/src/audio/edit.js +11 -74
  251. package/src/audio/edit.native.js +2 -1
  252. package/src/block/edit.js +143 -16
  253. package/src/block/index.js +3 -2
  254. package/src/block/index.php +48 -0
  255. package/src/block/v1/edit.js +163 -0
  256. package/src/block/{edit.native.js → v1/edit.native.js} +2 -2
  257. package/src/button/block.json +2 -2
  258. package/src/button/save.js +1 -1
  259. package/src/code/block.json +2 -2
  260. package/src/code/edit.native.js +11 -13
  261. package/src/code/save.js +4 -1
  262. package/src/code/test/edit.native.js +2 -2
  263. package/src/cover/test/edit.native.js +7 -1
  264. package/src/details/block.json +2 -2
  265. package/src/embed/block.json +2 -2
  266. package/src/embed/embed-preview.native.js +2 -1
  267. package/src/embed/icons.js +1 -1
  268. package/src/file/block.json +4 -4
  269. package/src/file/edit.js +1 -1
  270. package/src/file/edit.native.js +1 -1
  271. package/src/file/save.js +5 -1
  272. package/src/form-input/block.json +2 -2
  273. package/src/form-input/deprecated.js +142 -0
  274. package/src/form-input/edit.js +1 -1
  275. package/src/form-input/index.js +2 -0
  276. package/src/form-input/save.js +27 -24
  277. package/src/gallery/block.json +4 -4
  278. package/src/gallery/edit.js +4 -59
  279. package/src/gallery/gallery.js +19 -36
  280. package/src/gallery/gallery.native.js +6 -2
  281. package/src/gallery/v1/gallery.native.js +2 -1
  282. package/src/group/edit.js +4 -1
  283. package/src/heading/block.json +3 -6
  284. package/src/image/block.json +2 -2
  285. package/src/image/edit.native.js +2 -3
  286. package/src/image/image.js +24 -93
  287. package/src/image/save.js +3 -1
  288. package/src/list-item/block.json +10 -3
  289. package/src/navigation/edit/index.js +7 -2
  290. package/src/navigation/index.php +1 -1
  291. package/src/navigation-link/test/__snapshots__/hooks.js.snap +6 -3
  292. package/src/page-list/convert-to-links-modal.js +2 -2
  293. package/src/paragraph/block.json +2 -3
  294. package/src/paragraph/edit.js +53 -40
  295. package/src/post-title/block.json +1 -3
  296. package/src/preformatted/block.json +2 -3
  297. package/src/pullquote/block.json +5 -7
  298. package/src/query/edit/inspector-controls/taxonomy-controls.js +2 -0
  299. package/src/query-title/block.json +1 -3
  300. package/src/quote/block.json +3 -5
  301. package/src/quote/transforms.js +12 -11
  302. package/src/site-title/block.json +1 -5
  303. package/src/social-link/icons/gravatar.js +10 -0
  304. package/src/social-link/icons/index.js +1 -0
  305. package/src/social-link/index.php +4 -0
  306. package/src/social-link/socials-with-bg.scss +5 -0
  307. package/src/social-link/socials-without-bg.scss +4 -0
  308. package/src/social-link/variations.js +7 -0
  309. package/src/social-links/style.scss +14 -8
  310. package/src/table/block.json +9 -10
  311. package/src/table/edit.js +3 -1
  312. package/src/table/editor.scss +1 -14
  313. package/src/table-of-contents/edit.js +1 -1
  314. package/src/table-of-contents/index.js +5 -1
  315. package/src/utils/caption.js +108 -0
  316. package/src/utils/remove-anchor-tag.js +2 -1
  317. package/src/verse/block.json +3 -5
  318. package/src/video/block.json +2 -2
  319. package/src/video/edit.js +12 -74
  320. package/src/video/edit.native.js +2 -1
  321. package/build/block/edit.native.js.map +0 -1
  322. package/build/table-of-contents/icon.js +0 -22
  323. package/build/table-of-contents/icon.js.map +0 -1
  324. package/build-module/block/edit.native.js.map +0 -1
  325. package/build-module/table-of-contents/icon.js +0 -15
  326. package/build-module/table-of-contents/icon.js.map +0 -1
  327. package/src/table-of-contents/icon.js +0 -18
@@ -1 +1 @@
1
- {"version":3,"names":["TouchableWithoutFeedback","View","PanelBody","SelectControl","ToggleControl","ToolbarButton","ToolbarGroup","AudioPlayer","BlockCaption","BlockControls","BlockIcon","InspectorControls","MediaPlaceholder","MediaUpload","MediaUploadProgress","store","blockEditorStore","__","_x","sprintf","audio","icon","replace","useState","useDispatch","useSelect","noticesStore","isURL","getProtocol","styles","ALLOWED_MEDIA_TYPES","AudioEdit","attributes","setAttributes","isSelected","insertBlocksAfter","onFocus","onBlur","clientId","id","autoplay","loop","preload","src","isCaptionSelected","setIsCaptionSelected","onFileChange","mediaId","mediaUrl","wasBlockJustInserted","select","createErrorNotice","toggleAttribute","attribute","newValue","onSelectURL","newSrc","test","undefined","onSelectAudio","media","url","onAudioPress","onFocusCaption","createElement","onSelect","accept","allowedTypes","value","autoOpenMediaUpload","getBlockControls","open","title","onClick","getBlockUI","getMediaOptions","onFinishMediaUploadWithSuccess","onMediaUploadStateReset","containerStyle","progressContainer","progressBarStyle","progressBar","spinnerStyle","spinner","renderContent","isUploadInProgress","isUploadFailed","retryMessage","Fragment","accessible","onPress","disabled","label","onChange","checked","help","options","hideCancelButton","isReplacingMedia","render","accessibilityLabelCreator","caption"],"sources":["@wordpress/block-library/src/audio/edit.native.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { TouchableWithoutFeedback } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { View } from '@wordpress/primitives';\nimport {\n\tPanelBody,\n\tSelectControl,\n\tToggleControl,\n\tToolbarButton,\n\tToolbarGroup,\n\tAudioPlayer,\n} from '@wordpress/components';\nimport {\n\tBlockCaption,\n\tBlockControls,\n\tBlockIcon,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaUpload,\n\tMediaUploadProgress,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { audio as icon, replace } from '@wordpress/icons';\nimport { useState } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { isURL, getProtocol } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport styles from './style.scss';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\n\nfunction AudioEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonFocus,\n\tonBlur,\n\tclientId,\n} ) {\n\tconst { id, autoplay, loop, preload, src } = attributes;\n\n\tconst [ isCaptionSelected, setIsCaptionSelected ] = useState( false );\n\n\tconst onFileChange = ( { mediaId, mediaUrl } ) => {\n\t\tsetAttributes( { id: mediaId, src: mediaUrl } );\n\t};\n\n\tconst { wasBlockJustInserted } = useSelect( ( select ) => ( {\n\t\twasBlockJustInserted: select( blockEditorStore ).wasBlockJustInserted(\n\t\t\tclientId,\n\t\t\t'inserter_menu'\n\t\t),\n\t} ) );\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tfunction toggleAttribute( attribute ) {\n\t\treturn ( newValue ) => {\n\t\t\tsetAttributes( { [ attribute ]: newValue } );\n\t\t};\n\t}\n\n\tfunction onSelectURL( newSrc ) {\n\t\tif ( newSrc !== src ) {\n\t\t\tif ( isURL( newSrc ) && /^https?:/.test( getProtocol( newSrc ) ) ) {\n\t\t\t\tsetAttributes( { src: newSrc, id: undefined } );\n\t\t\t} else {\n\t\t\t\tcreateErrorNotice( __( 'Invalid URL. Audio file not found.' ) );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onSelectAudio( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\t// In this case there was an error and we should continue in the editing state\n\t\t\t// previous attributes should be removed because they may be temporary blob urls.\n\t\t\tsetAttributes( { src: undefined, id: undefined } );\n\t\t\treturn;\n\t\t}\n\t\t// Sets the block's attribute and updates the edit component from the\n\t\t// selected media, then switches off the editing UI.\n\t\tsetAttributes( { src: media.url, id: media.id } );\n\t}\n\n\tfunction onAudioPress() {\n\t\tsetIsCaptionSelected( false );\n\t}\n\n\tfunction onFocusCaption() {\n\t\tif ( ! isCaptionSelected ) {\n\t\t\tsetIsCaptionSelected( true );\n\t\t}\n\t}\n\n\tif ( ! src ) {\n\t\treturn (\n\t\t\t<View>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tvalue={ attributes }\n\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\tautoOpenMediaUpload={ isSelected && wasBlockJustInserted }\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\tfunction getBlockControls( open ) {\n\t\treturn (\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ttitle={ __( 'Replace audio' ) }\n\t\t\t\t\t\ticon={ replace }\n\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t);\n\t}\n\n\tfunction getBlockUI( open, getMediaOptions ) {\n\t\treturn (\n\t\t\t<MediaUploadProgress\n\t\t\t\tmediaId={ id }\n\t\t\t\tonFinishMediaUploadWithSuccess={ onFileChange }\n\t\t\t\tonMediaUploadStateReset={ onFileChange }\n\t\t\t\tcontainerStyle={ styles.progressContainer }\n\t\t\t\tprogressBarStyle={ styles.progressBar }\n\t\t\t\tspinnerStyle={ styles.spinner }\n\t\t\t\trenderContent={ ( {\n\t\t\t\t\tisUploadInProgress,\n\t\t\t\t\tisUploadFailed,\n\t\t\t\t\tretryMessage,\n\t\t\t\t} ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isCaptionSelected &&\n\t\t\t\t\t\t\t\t! isUploadInProgress &&\n\t\t\t\t\t\t\t\tgetBlockControls( open ) }\n\t\t\t\t\t\t\t{ getMediaOptions() }\n\t\t\t\t\t\t\t<AudioPlayer\n\t\t\t\t\t\t\t\tisUploadInProgress={ isUploadInProgress }\n\t\t\t\t\t\t\t\tisUploadFailed={ isUploadFailed }\n\t\t\t\t\t\t\t\tretryMessage={ retryMessage }\n\t\t\t\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TouchableWithoutFeedback\n\t\t\taccessible={ ! isSelected }\n\t\t\tonPress={ onAudioPress }\n\t\t\tdisabled={ ! isSelected }\n\t\t>\n\t\t\t<View>\n\t\t\t\t<InspectorControls>\n\t\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Autoplay' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'autoplay' ) }\n\t\t\t\t\t\t\tchecked={ autoplay }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Autoplay may cause usability issues for some users.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Loop' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'loop' ) }\n\t\t\t\t\t\t\tchecked={ loop }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t'Preload',\n\t\t\t\t\t\t\t\t'noun; Audio block parameter'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ preload || '' }\n\t\t\t\t\t\t\t// `undefined` is required for the preload attribute to be unset.\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tpreload: value || undefined,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{ value: '', label: __( 'Browser default' ) },\n\t\t\t\t\t\t\t\t{ value: 'auto', label: __( 'Auto' ) },\n\t\t\t\t\t\t\t\t{ value: 'metadata', label: __( 'Metadata' ) },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvalue: 'none',\n\t\t\t\t\t\t\t\t\tlabel: _x( 'None', '\"Preload\" value' ),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\thideCancelButton={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t</InspectorControls>\n\t\t\t\t<MediaUpload\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tisReplacingMedia={ true }\n\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\trender={ ( { open, getMediaOptions } ) => {\n\t\t\t\t\t\treturn getBlockUI( open, getMediaOptions );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<BlockCaption\n\t\t\t\t\taccessible={ true }\n\t\t\t\t\taccessibilityLabelCreator={ ( caption ) =>\n\t\t\t\t\t\t! caption\n\t\t\t\t\t\t\t? /* translators: accessibility text. Empty Audio caption. */\n\t\t\t\t\t\t\t __( 'Audio caption. Empty' )\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: accessibility text. %s: Audio caption. */\n\t\t\t\t\t\t\t\t\t__( 'Audio caption. %s' ),\n\t\t\t\t\t\t\t\t\tcaption\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisSelected={ isCaptionSelected }\n\t\t\t\t\tonFocus={ onFocusCaption }\n\t\t\t\t\tonBlur={ onBlur }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t/>\n\t\t\t</View>\n\t\t</TouchableWithoutFeedback>\n\t);\n}\nexport default AudioEdit;\n"],"mappings":"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"}
1
+ {"version":3,"names":["TouchableWithoutFeedback","View","PanelBody","SelectControl","ToggleControl","ToolbarButton","ToolbarGroup","AudioPlayer","BlockCaption","BlockControls","BlockIcon","InspectorControls","MediaPlaceholder","MediaUpload","MediaUploadProgress","RichText","store","blockEditorStore","__","_x","sprintf","audio","icon","replace","useState","useDispatch","useSelect","noticesStore","isURL","getProtocol","styles","ALLOWED_MEDIA_TYPES","AudioEdit","attributes","setAttributes","isSelected","insertBlocksAfter","onFocus","onBlur","clientId","id","autoplay","loop","preload","src","isCaptionSelected","setIsCaptionSelected","onFileChange","mediaId","mediaUrl","wasBlockJustInserted","select","createErrorNotice","toggleAttribute","attribute","newValue","onSelectURL","newSrc","test","undefined","onSelectAudio","media","url","onAudioPress","onFocusCaption","createElement","onSelect","accept","allowedTypes","value","autoOpenMediaUpload","getBlockControls","open","title","onClick","getBlockUI","getMediaOptions","onFinishMediaUploadWithSuccess","onMediaUploadStateReset","containerStyle","progressContainer","progressBarStyle","progressBar","spinnerStyle","spinner","renderContent","isUploadInProgress","isUploadFailed","retryMessage","Fragment","accessible","onPress","disabled","label","onChange","checked","help","options","hideCancelButton","isReplacingMedia","render","accessibilityLabelCreator","caption","isEmpty"],"sources":["@wordpress/block-library/src/audio/edit.native.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { TouchableWithoutFeedback } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { View } from '@wordpress/primitives';\nimport {\n\tPanelBody,\n\tSelectControl,\n\tToggleControl,\n\tToolbarButton,\n\tToolbarGroup,\n\tAudioPlayer,\n} from '@wordpress/components';\nimport {\n\tBlockCaption,\n\tBlockControls,\n\tBlockIcon,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaUpload,\n\tMediaUploadProgress,\n\tRichText,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { audio as icon, replace } from '@wordpress/icons';\nimport { useState } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { isURL, getProtocol } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport styles from './style.scss';\n\nconst ALLOWED_MEDIA_TYPES = [ 'audio' ];\n\nfunction AudioEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonFocus,\n\tonBlur,\n\tclientId,\n} ) {\n\tconst { id, autoplay, loop, preload, src } = attributes;\n\n\tconst [ isCaptionSelected, setIsCaptionSelected ] = useState( false );\n\n\tconst onFileChange = ( { mediaId, mediaUrl } ) => {\n\t\tsetAttributes( { id: mediaId, src: mediaUrl } );\n\t};\n\n\tconst { wasBlockJustInserted } = useSelect( ( select ) => ( {\n\t\twasBlockJustInserted: select( blockEditorStore ).wasBlockJustInserted(\n\t\t\tclientId,\n\t\t\t'inserter_menu'\n\t\t),\n\t} ) );\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tfunction toggleAttribute( attribute ) {\n\t\treturn ( newValue ) => {\n\t\t\tsetAttributes( { [ attribute ]: newValue } );\n\t\t};\n\t}\n\n\tfunction onSelectURL( newSrc ) {\n\t\tif ( newSrc !== src ) {\n\t\t\tif ( isURL( newSrc ) && /^https?:/.test( getProtocol( newSrc ) ) ) {\n\t\t\t\tsetAttributes( { src: newSrc, id: undefined } );\n\t\t\t} else {\n\t\t\t\tcreateErrorNotice( __( 'Invalid URL. Audio file not found.' ) );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onSelectAudio( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\t// In this case there was an error and we should continue in the editing state\n\t\t\t// previous attributes should be removed because they may be temporary blob urls.\n\t\t\tsetAttributes( { src: undefined, id: undefined } );\n\t\t\treturn;\n\t\t}\n\t\t// Sets the block's attribute and updates the edit component from the\n\t\t// selected media, then switches off the editing UI.\n\t\tsetAttributes( { src: media.url, id: media.id } );\n\t}\n\n\tfunction onAudioPress() {\n\t\tsetIsCaptionSelected( false );\n\t}\n\n\tfunction onFocusCaption() {\n\t\tif ( ! isCaptionSelected ) {\n\t\t\tsetIsCaptionSelected( true );\n\t\t}\n\t}\n\n\tif ( ! src ) {\n\t\treturn (\n\t\t\t<View>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\taccept=\"audio/*\"\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tvalue={ attributes }\n\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\tautoOpenMediaUpload={ isSelected && wasBlockJustInserted }\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\tfunction getBlockControls( open ) {\n\t\treturn (\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ttitle={ __( 'Replace audio' ) }\n\t\t\t\t\t\ticon={ replace }\n\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t);\n\t}\n\n\tfunction getBlockUI( open, getMediaOptions ) {\n\t\treturn (\n\t\t\t<MediaUploadProgress\n\t\t\t\tmediaId={ id }\n\t\t\t\tonFinishMediaUploadWithSuccess={ onFileChange }\n\t\t\t\tonMediaUploadStateReset={ onFileChange }\n\t\t\t\tcontainerStyle={ styles.progressContainer }\n\t\t\t\tprogressBarStyle={ styles.progressBar }\n\t\t\t\tspinnerStyle={ styles.spinner }\n\t\t\t\trenderContent={ ( {\n\t\t\t\t\tisUploadInProgress,\n\t\t\t\t\tisUploadFailed,\n\t\t\t\t\tretryMessage,\n\t\t\t\t} ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isCaptionSelected &&\n\t\t\t\t\t\t\t\t! isUploadInProgress &&\n\t\t\t\t\t\t\t\tgetBlockControls( open ) }\n\t\t\t\t\t\t\t{ getMediaOptions() }\n\t\t\t\t\t\t\t<AudioPlayer\n\t\t\t\t\t\t\t\tisUploadInProgress={ isUploadInProgress }\n\t\t\t\t\t\t\t\tisUploadFailed={ isUploadFailed }\n\t\t\t\t\t\t\t\tretryMessage={ retryMessage }\n\t\t\t\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TouchableWithoutFeedback\n\t\t\taccessible={ ! isSelected }\n\t\t\tonPress={ onAudioPress }\n\t\t\tdisabled={ ! isSelected }\n\t\t>\n\t\t\t<View>\n\t\t\t\t<InspectorControls>\n\t\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Autoplay' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'autoplay' ) }\n\t\t\t\t\t\t\tchecked={ autoplay }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Autoplay may cause usability issues for some users.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Loop' ) }\n\t\t\t\t\t\t\tonChange={ toggleAttribute( 'loop' ) }\n\t\t\t\t\t\t\tchecked={ loop }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t'Preload',\n\t\t\t\t\t\t\t\t'noun; Audio block parameter'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ preload || '' }\n\t\t\t\t\t\t\t// `undefined` is required for the preload attribute to be unset.\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tpreload: value || undefined,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t\t{ value: '', label: __( 'Browser default' ) },\n\t\t\t\t\t\t\t\t{ value: 'auto', label: __( 'Auto' ) },\n\t\t\t\t\t\t\t\t{ value: 'metadata', label: __( 'Metadata' ) },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvalue: 'none',\n\t\t\t\t\t\t\t\t\tlabel: _x( 'None', '\"Preload\" value' ),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\thideCancelButton={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t</InspectorControls>\n\t\t\t\t<MediaUpload\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tisReplacingMedia={ true }\n\t\t\t\t\tonSelect={ onSelectAudio }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\trender={ ( { open, getMediaOptions } ) => {\n\t\t\t\t\t\treturn getBlockUI( open, getMediaOptions );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<BlockCaption\n\t\t\t\t\taccessible={ true }\n\t\t\t\t\taccessibilityLabelCreator={ ( caption ) =>\n\t\t\t\t\t\tRichText.isEmpty( caption )\n\t\t\t\t\t\t\t? /* translators: accessibility text. Empty Audio caption. */\n\t\t\t\t\t\t\t __( 'Audio caption. Empty' )\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: accessibility text. %s: Audio caption. */\n\t\t\t\t\t\t\t\t\t__( 'Audio caption. %s' ),\n\t\t\t\t\t\t\t\t\tcaption\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisSelected={ isCaptionSelected }\n\t\t\t\t\tonFocus={ onFocusCaption }\n\t\t\t\t\tonBlur={ onBlur }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t/>\n\t\t\t</View>\n\t\t</TouchableWithoutFeedback>\n\t);\n}\nexport default AudioEdit;\n"],"mappings":"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"}
@@ -27,8 +27,8 @@ const metadata = {
27
27
  __experimentalRole: "content"
28
28
  },
29
29
  caption: {
30
- type: "string",
31
- source: "html",
30
+ type: "rich-text",
31
+ source: "rich-text",
32
32
  selector: "figcaption",
33
33
  __experimentalRole: "content"
34
34
  },
@@ -7,11 +7,13 @@ import classnames from 'classnames';
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import { useEntityBlockEditor, useEntityProp, useEntityRecord } from '@wordpress/core-data';
10
+ import { useRegistry, useSelect, useDispatch } from '@wordpress/data';
11
+ import { useRef, useMemo, useEffect } from '@wordpress/element';
12
+ import { useEntityProp, useEntityRecord } from '@wordpress/core-data';
11
13
  import { Placeholder, Spinner, TextControl, PanelBody } from '@wordpress/components';
12
14
  import { __ } from '@wordpress/i18n';
13
- import { useInnerBlocksProps, __experimentalRecursionProvider as RecursionProvider, __experimentalUseHasRecursion as useHasRecursion, InnerBlocks, InspectorControls, useBlockProps, Warning, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
14
- import { useRef, useMemo } from '@wordpress/element';
15
+ import { useInnerBlocksProps, __experimentalRecursionProvider as RecursionProvider, __experimentalUseHasRecursion as useHasRecursion, InnerBlocks, InspectorControls, useBlockProps, Warning, privateApis as blockEditorPrivateApis, store as blockEditorStore } from '@wordpress/block-editor';
16
+ import { getBlockSupport, parse } from '@wordpress/blocks';
15
17
 
16
18
  /**
17
19
  * Internal dependencies
@@ -20,6 +22,12 @@ import { unlock } from '../lock-unlock';
20
22
  const {
21
23
  useLayoutClasses
22
24
  } = unlock(blockEditorPrivateApis);
25
+ function isPartiallySynced(block) {
26
+ return !!getBlockSupport(block.name, '__experimentalConnections', false) && !!block.attributes.connections?.attributes && Object.values(block.attributes.connections.attributes).some(connection => connection.source === 'pattern_attributes');
27
+ }
28
+ function getPartiallySyncedAttributes(block) {
29
+ return Object.entries(block.attributes.connections.attributes).filter(([, connection]) => connection.source === 'pattern_attributes').map(([attributeKey]) => attributeKey);
30
+ }
23
31
  const fullAlignments = ['full', 'wide', 'left', 'right'];
24
32
  const useInferredLayout = (blocks, parentLayout) => {
25
33
  const initialInferredAlignmentRef = useRef();
@@ -45,27 +53,90 @@ const useInferredLayout = (blocks, parentLayout) => {
45
53
  };
46
54
  }, [blocks, parentLayout]);
47
55
  };
56
+ function applyInitialOverrides(blocks, overrides = {}, defaultValues) {
57
+ return blocks.map(block => {
58
+ const innerBlocks = applyInitialOverrides(block.innerBlocks, overrides, defaultValues);
59
+ const blockId = block.attributes.metadata?.id;
60
+ if (!isPartiallySynced(block) || !blockId) return {
61
+ ...block,
62
+ innerBlocks
63
+ };
64
+ const attributes = getPartiallySyncedAttributes(block);
65
+ const newAttributes = {
66
+ ...block.attributes
67
+ };
68
+ for (const attributeKey of attributes) {
69
+ defaultValues[blockId] = block.attributes[attributeKey];
70
+ if (overrides[blockId]) {
71
+ newAttributes[attributeKey] = overrides[blockId];
72
+ }
73
+ }
74
+ return {
75
+ ...block,
76
+ attributes: newAttributes,
77
+ innerBlocks
78
+ };
79
+ });
80
+ }
81
+ function getOverridesFromBlocks(blocks, defaultValues) {
82
+ /** @type {Record<string, unknown>} */
83
+ const overrides = {};
84
+ for (const block of blocks) {
85
+ Object.assign(overrides, getOverridesFromBlocks(block.innerBlocks, defaultValues));
86
+ const blockId = block.attributes.metadata?.id;
87
+ if (!isPartiallySynced(block) || !blockId) continue;
88
+ const attributes = getPartiallySyncedAttributes(block);
89
+ for (const attributeKey of attributes) {
90
+ if (block.attributes[attributeKey] !== defaultValues[blockId]) {
91
+ overrides[blockId] = block.attributes[attributeKey];
92
+ }
93
+ }
94
+ }
95
+ return Object.keys(overrides).length > 0 ? overrides : undefined;
96
+ }
48
97
  export default function ReusableBlockEdit({
49
98
  name,
50
99
  attributes: {
51
- ref
100
+ ref,
101
+ overrides
52
102
  },
53
- __unstableParentLayout: parentLayout
103
+ __unstableParentLayout: parentLayout,
104
+ clientId: patternClientId
54
105
  }) {
106
+ const registry = useRegistry();
55
107
  const hasAlreadyRendered = useHasRecursion(ref);
56
108
  const {
57
109
  record,
58
110
  hasResolved
59
111
  } = useEntityRecord('postType', 'wp_block', ref);
60
112
  const isMissing = hasResolved && !record;
61
- const [blocks, onInput, onChange] = useEntityBlockEditor('postType', 'wp_block', {
62
- id: ref
63
- });
113
+ const initialOverrides = useRef(overrides);
114
+ const defaultValuesRef = useRef({});
115
+ const {
116
+ replaceInnerBlocks,
117
+ __unstableMarkNextChangeAsNotPersistent,
118
+ setBlockEditingMode
119
+ } = useDispatch(blockEditorStore);
120
+ const {
121
+ getBlockEditingMode
122
+ } = useSelect(blockEditorStore);
123
+ useEffect(() => {
124
+ if (!record?.content?.raw) return;
125
+ const initialBlocks = parse(record.content.raw);
126
+ const editingMode = getBlockEditingMode(patternClientId);
127
+ registry.batch(() => {
128
+ setBlockEditingMode(patternClientId, 'default');
129
+ __unstableMarkNextChangeAsNotPersistent();
130
+ replaceInnerBlocks(patternClientId, applyInitialOverrides(initialBlocks, initialOverrides.current, defaultValuesRef.current));
131
+ setBlockEditingMode(patternClientId, editingMode);
132
+ });
133
+ }, [__unstableMarkNextChangeAsNotPersistent, patternClientId, record, replaceInnerBlocks, registry, getBlockEditingMode, setBlockEditingMode]);
134
+ const innerBlocks = useSelect(select => select(blockEditorStore).getBlocks(patternClientId), [patternClientId]);
64
135
  const [title, setTitle] = useEntityProp('postType', 'wp_block', 'title', ref);
65
136
  const {
66
137
  alignment,
67
138
  layout
68
- } = useInferredLayout(blocks, parentLayout);
139
+ } = useInferredLayout(innerBlocks, parentLayout);
69
140
  const layoutClasses = useLayoutClasses({
70
141
  layout
71
142
  }, name);
@@ -75,12 +146,32 @@ export default function ReusableBlockEdit({
75
146
  })
76
147
  });
77
148
  const innerBlocksProps = useInnerBlocksProps(blockProps, {
78
- value: blocks,
79
149
  layout,
80
- onInput,
81
- onChange,
82
- renderAppender: blocks?.length ? undefined : InnerBlocks.ButtonBlockAppender
150
+ renderAppender: innerBlocks?.length ? undefined : InnerBlocks.ButtonBlockAppender
83
151
  });
152
+
153
+ // Sync the `overrides` attribute from the updated blocks.
154
+ // `syncDerivedBlockAttributes` is an action that just like `updateBlockAttributes`
155
+ // but won't create an undo level.
156
+ // This can be abstracted into a `useSyncDerivedAttributes` hook if needed.
157
+ useEffect(() => {
158
+ const {
159
+ getBlocks
160
+ } = registry.select(blockEditorStore);
161
+ const {
162
+ syncDerivedBlockAttributes
163
+ } = unlock(registry.dispatch(blockEditorStore));
164
+ let prevBlocks = getBlocks(patternClientId);
165
+ return registry.subscribe(() => {
166
+ const blocks = getBlocks(patternClientId);
167
+ if (blocks !== prevBlocks) {
168
+ prevBlocks = blocks;
169
+ syncDerivedBlockAttributes(patternClientId, {
170
+ overrides: getOverridesFromBlocks(blocks, defaultValuesRef.current)
171
+ });
172
+ }
173
+ }, blockEditorStore);
174
+ }, [patternClientId, registry]);
84
175
  let children = null;
85
176
  if (hasAlreadyRendered) {
86
177
  children = createElement(Warning, null, __('Block cannot be rendered inside itself.'));
@@ -1 +1 @@
1
- {"version":3,"names":["classnames","useEntityBlockEditor","useEntityProp","useEntityRecord","Placeholder","Spinner","TextControl","PanelBody","__","useInnerBlocksProps","__experimentalRecursionProvider","RecursionProvider","__experimentalUseHasRecursion","useHasRecursion","InnerBlocks","InspectorControls","useBlockProps","Warning","privateApis","blockEditorPrivateApis","useRef","useMemo","unlock","useLayoutClasses","fullAlignments","useInferredLayout","blocks","parentLayout","initialInferredAlignmentRef","length","alignment","current","undefined","isConstrained","type","hasFullAlignment","some","block","includes","attributes","align","layout","ReusableBlockEdit","name","ref","__unstableParentLayout","hasAlreadyRendered","record","hasResolved","isMissing","onInput","onChange","id","title","setTitle","layoutClasses","blockProps","className","innerBlocksProps","value","renderAppender","ButtonBlockAppender","children","createElement","uniqueId","label","__nextHasNoMarginBottom","__next40pxDefaultSize"],"sources":["@wordpress/block-library/src/block/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseEntityBlockEditor,\n\tuseEntityProp,\n\tuseEntityRecord,\n} from '@wordpress/core-data';\nimport {\n\tPlaceholder,\n\tSpinner,\n\tTextControl,\n\tPanelBody,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseInnerBlocksProps,\n\t__experimentalRecursionProvider as RecursionProvider,\n\t__experimentalUseHasRecursion as useHasRecursion,\n\tInnerBlocks,\n\tInspectorControls,\n\tuseBlockProps,\n\tWarning,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useRef, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { useLayoutClasses } = unlock( blockEditorPrivateApis );\nconst fullAlignments = [ 'full', 'wide', 'left', 'right' ];\n\nconst useInferredLayout = ( blocks, parentLayout ) => {\n\tconst initialInferredAlignmentRef = useRef();\n\n\treturn useMemo( () => {\n\t\t// Exit early if the pattern's blocks haven't loaded yet.\n\t\tif ( ! blocks?.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet alignment = initialInferredAlignmentRef.current;\n\n\t\t// Only track the initial alignment so that temporarily removed\n\t\t// alignments can be reapplied.\n\t\tif ( alignment === undefined ) {\n\t\t\tconst isConstrained = parentLayout?.type === 'constrained';\n\t\t\tconst hasFullAlignment = blocks.some( ( block ) =>\n\t\t\t\tfullAlignments.includes( block.attributes.align )\n\t\t\t);\n\n\t\t\talignment = isConstrained && hasFullAlignment ? 'full' : null;\n\t\t\tinitialInferredAlignmentRef.current = alignment;\n\t\t}\n\n\t\tconst layout = alignment ? parentLayout : undefined;\n\n\t\treturn { alignment, layout };\n\t}, [ blocks, parentLayout ] );\n};\n\nexport default function ReusableBlockEdit( {\n\tname,\n\tattributes: { ref },\n\t__unstableParentLayout: parentLayout,\n} ) {\n\tconst hasAlreadyRendered = useHasRecursion( ref );\n\tconst { record, hasResolved } = useEntityRecord(\n\t\t'postType',\n\t\t'wp_block',\n\t\tref\n\t);\n\tconst isMissing = hasResolved && ! record;\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\t'wp_block',\n\t\t{ id: ref }\n\t);\n\n\tconst [ title, setTitle ] = useEntityProp(\n\t\t'postType',\n\t\t'wp_block',\n\t\t'title',\n\t\tref\n\t);\n\n\tconst { alignment, layout } = useInferredLayout( blocks, parentLayout );\n\tconst layoutClasses = useLayoutClasses( { layout }, name );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames(\n\t\t\t'block-library-block__reusable-block-container',\n\t\t\tlayout && layoutClasses,\n\t\t\t{ [ `align${ alignment }` ]: alignment }\n\t\t),\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tvalue: blocks,\n\t\tlayout,\n\t\tonInput,\n\t\tonChange,\n\t\trenderAppender: blocks?.length\n\t\t\t? undefined\n\t\t\t: InnerBlocks.ButtonBlockAppender,\n\t} );\n\n\tlet children = null;\n\tif ( hasAlreadyRendered ) {\n\t\tchildren = (\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n\n\tif ( isMissing ) {\n\t\tchildren = (\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block has been deleted or is unavailable.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n\n\tif ( ! hasResolved ) {\n\t\tchildren = (\n\t\t\t<Placeholder>\n\t\t\t\t<Spinner />\n\t\t\t</Placeholder>\n\t\t);\n\t}\n\n\treturn (\n\t\t<RecursionProvider uniqueId={ ref }>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ children === null ? (\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t) : (\n\t\t\t\t<div { ...blockProps }>{ children }</div>\n\t\t\t) }\n\t\t</RecursionProvider>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["classnames","useRegistry","useSelect","useDispatch","useRef","useMemo","useEffect","useEntityProp","useEntityRecord","Placeholder","Spinner","TextControl","PanelBody","__","useInnerBlocksProps","__experimentalRecursionProvider","RecursionProvider","__experimentalUseHasRecursion","useHasRecursion","InnerBlocks","InspectorControls","useBlockProps","Warning","privateApis","blockEditorPrivateApis","store","blockEditorStore","getBlockSupport","parse","unlock","useLayoutClasses","isPartiallySynced","block","name","attributes","connections","Object","values","some","connection","source","getPartiallySyncedAttributes","entries","filter","map","attributeKey","fullAlignments","useInferredLayout","blocks","parentLayout","initialInferredAlignmentRef","length","alignment","current","undefined","isConstrained","type","hasFullAlignment","includes","align","layout","applyInitialOverrides","overrides","defaultValues","innerBlocks","blockId","metadata","id","newAttributes","getOverridesFromBlocks","assign","keys","ReusableBlockEdit","ref","__unstableParentLayout","clientId","patternClientId","registry","hasAlreadyRendered","record","hasResolved","isMissing","initialOverrides","defaultValuesRef","replaceInnerBlocks","__unstableMarkNextChangeAsNotPersistent","setBlockEditingMode","getBlockEditingMode","content","raw","initialBlocks","editingMode","batch","select","getBlocks","title","setTitle","layoutClasses","blockProps","className","innerBlocksProps","renderAppender","ButtonBlockAppender","syncDerivedBlockAttributes","dispatch","prevBlocks","subscribe","children","createElement","uniqueId","label","value","onChange","__nextHasNoMarginBottom","__next40pxDefaultSize"],"sources":["@wordpress/block-library/src/block/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useRegistry, useSelect, useDispatch } from '@wordpress/data';\nimport { useRef, useMemo, useEffect } from '@wordpress/element';\nimport { useEntityProp, useEntityRecord } from '@wordpress/core-data';\nimport {\n\tPlaceholder,\n\tSpinner,\n\tTextControl,\n\tPanelBody,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseInnerBlocksProps,\n\t__experimentalRecursionProvider as RecursionProvider,\n\t__experimentalUseHasRecursion as useHasRecursion,\n\tInnerBlocks,\n\tInspectorControls,\n\tuseBlockProps,\n\tWarning,\n\tprivateApis as blockEditorPrivateApis,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { getBlockSupport, parse } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { useLayoutClasses } = unlock( blockEditorPrivateApis );\n\nfunction isPartiallySynced( block ) {\n\treturn (\n\t\t!! getBlockSupport( block.name, '__experimentalConnections', false ) &&\n\t\t!! block.attributes.connections?.attributes &&\n\t\tObject.values( block.attributes.connections.attributes ).some(\n\t\t\t( connection ) => connection.source === 'pattern_attributes'\n\t\t)\n\t);\n}\nfunction getPartiallySyncedAttributes( block ) {\n\treturn Object.entries( block.attributes.connections.attributes )\n\t\t.filter(\n\t\t\t( [ , connection ] ) => connection.source === 'pattern_attributes'\n\t\t)\n\t\t.map( ( [ attributeKey ] ) => attributeKey );\n}\n\nconst fullAlignments = [ 'full', 'wide', 'left', 'right' ];\n\nconst useInferredLayout = ( blocks, parentLayout ) => {\n\tconst initialInferredAlignmentRef = useRef();\n\n\treturn useMemo( () => {\n\t\t// Exit early if the pattern's blocks haven't loaded yet.\n\t\tif ( ! blocks?.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet alignment = initialInferredAlignmentRef.current;\n\n\t\t// Only track the initial alignment so that temporarily removed\n\t\t// alignments can be reapplied.\n\t\tif ( alignment === undefined ) {\n\t\t\tconst isConstrained = parentLayout?.type === 'constrained';\n\t\t\tconst hasFullAlignment = blocks.some( ( block ) =>\n\t\t\t\tfullAlignments.includes( block.attributes.align )\n\t\t\t);\n\n\t\t\talignment = isConstrained && hasFullAlignment ? 'full' : null;\n\t\t\tinitialInferredAlignmentRef.current = alignment;\n\t\t}\n\n\t\tconst layout = alignment ? parentLayout : undefined;\n\n\t\treturn { alignment, layout };\n\t}, [ blocks, parentLayout ] );\n};\n\nfunction applyInitialOverrides( blocks, overrides = {}, defaultValues ) {\n\treturn blocks.map( ( block ) => {\n\t\tconst innerBlocks = applyInitialOverrides(\n\t\t\tblock.innerBlocks,\n\t\t\toverrides,\n\t\t\tdefaultValues\n\t\t);\n\t\tconst blockId = block.attributes.metadata?.id;\n\t\tif ( ! isPartiallySynced( block ) || ! blockId )\n\t\t\treturn { ...block, innerBlocks };\n\t\tconst attributes = getPartiallySyncedAttributes( block );\n\t\tconst newAttributes = { ...block.attributes };\n\t\tfor ( const attributeKey of attributes ) {\n\t\t\tdefaultValues[ blockId ] = block.attributes[ attributeKey ];\n\t\t\tif ( overrides[ blockId ] ) {\n\t\t\t\tnewAttributes[ attributeKey ] = overrides[ blockId ];\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...block,\n\t\t\tattributes: newAttributes,\n\t\t\tinnerBlocks,\n\t\t};\n\t} );\n}\n\nfunction getOverridesFromBlocks( blocks, defaultValues ) {\n\t/** @type {Record<string, unknown>} */\n\tconst overrides = {};\n\tfor ( const block of blocks ) {\n\t\tObject.assign(\n\t\t\toverrides,\n\t\t\tgetOverridesFromBlocks( block.innerBlocks, defaultValues )\n\t\t);\n\t\tconst blockId = block.attributes.metadata?.id;\n\t\tif ( ! isPartiallySynced( block ) || ! blockId ) continue;\n\t\tconst attributes = getPartiallySyncedAttributes( block );\n\t\tfor ( const attributeKey of attributes ) {\n\t\t\tif (\n\t\t\t\tblock.attributes[ attributeKey ] !== defaultValues[ blockId ]\n\t\t\t) {\n\t\t\t\toverrides[ blockId ] = block.attributes[ attributeKey ];\n\t\t\t}\n\t\t}\n\t}\n\treturn Object.keys( overrides ).length > 0 ? overrides : undefined;\n}\n\nexport default function ReusableBlockEdit( {\n\tname,\n\tattributes: { ref, overrides },\n\t__unstableParentLayout: parentLayout,\n\tclientId: patternClientId,\n} ) {\n\tconst registry = useRegistry();\n\tconst hasAlreadyRendered = useHasRecursion( ref );\n\tconst { record, hasResolved } = useEntityRecord(\n\t\t'postType',\n\t\t'wp_block',\n\t\tref\n\t);\n\tconst isMissing = hasResolved && ! record;\n\tconst initialOverrides = useRef( overrides );\n\tconst defaultValuesRef = useRef( {} );\n\tconst {\n\t\treplaceInnerBlocks,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tsetBlockEditingMode,\n\t} = useDispatch( blockEditorStore );\n\tconst { getBlockEditingMode } = useSelect( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( ! record?.content?.raw ) return;\n\t\tconst initialBlocks = parse( record.content.raw );\n\n\t\tconst editingMode = getBlockEditingMode( patternClientId );\n\t\tregistry.batch( () => {\n\t\t\tsetBlockEditingMode( patternClientId, 'default' );\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\treplaceInnerBlocks(\n\t\t\t\tpatternClientId,\n\t\t\t\tapplyInitialOverrides(\n\t\t\t\t\tinitialBlocks,\n\t\t\t\t\tinitialOverrides.current,\n\t\t\t\t\tdefaultValuesRef.current\n\t\t\t\t)\n\t\t\t);\n\t\t\tsetBlockEditingMode( patternClientId, editingMode );\n\t\t} );\n\t}, [\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tpatternClientId,\n\t\trecord,\n\t\treplaceInnerBlocks,\n\t\tregistry,\n\t\tgetBlockEditingMode,\n\t\tsetBlockEditingMode,\n\t] );\n\n\tconst innerBlocks = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlocks( patternClientId ),\n\t\t[ patternClientId ]\n\t);\n\n\tconst [ title, setTitle ] = useEntityProp(\n\t\t'postType',\n\t\t'wp_block',\n\t\t'title',\n\t\tref\n\t);\n\n\tconst { alignment, layout } = useInferredLayout(\n\t\tinnerBlocks,\n\t\tparentLayout\n\t);\n\tconst layoutClasses = useLayoutClasses( { layout }, name );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames(\n\t\t\t'block-library-block__reusable-block-container',\n\t\t\tlayout && layoutClasses,\n\t\t\t{ [ `align${ alignment }` ]: alignment }\n\t\t),\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tlayout,\n\t\trenderAppender: innerBlocks?.length\n\t\t\t? undefined\n\t\t\t: InnerBlocks.ButtonBlockAppender,\n\t} );\n\n\t// Sync the `overrides` attribute from the updated blocks.\n\t// `syncDerivedBlockAttributes` is an action that just like `updateBlockAttributes`\n\t// but won't create an undo level.\n\t// This can be abstracted into a `useSyncDerivedAttributes` hook if needed.\n\tuseEffect( () => {\n\t\tconst { getBlocks } = registry.select( blockEditorStore );\n\t\tconst { syncDerivedBlockAttributes } = unlock(\n\t\t\tregistry.dispatch( blockEditorStore )\n\t\t);\n\t\tlet prevBlocks = getBlocks( patternClientId );\n\t\treturn registry.subscribe( () => {\n\t\t\tconst blocks = getBlocks( patternClientId );\n\t\t\tif ( blocks !== prevBlocks ) {\n\t\t\t\tprevBlocks = blocks;\n\t\t\t\tsyncDerivedBlockAttributes( patternClientId, {\n\t\t\t\t\toverrides: getOverridesFromBlocks(\n\t\t\t\t\t\tblocks,\n\t\t\t\t\t\tdefaultValuesRef.current\n\t\t\t\t\t),\n\t\t\t\t} );\n\t\t\t}\n\t\t}, blockEditorStore );\n\t}, [ patternClientId, registry ] );\n\n\tlet children = null;\n\n\tif ( hasAlreadyRendered ) {\n\t\tchildren = (\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n\n\tif ( isMissing ) {\n\t\tchildren = (\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block has been deleted or is unavailable.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n\n\tif ( ! hasResolved ) {\n\t\tchildren = (\n\t\t\t<Placeholder>\n\t\t\t\t<Spinner />\n\t\t\t</Placeholder>\n\t\t);\n\t}\n\n\treturn (\n\t\t<RecursionProvider uniqueId={ ref }>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ children === null ? (\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t) : (\n\t\t\t\t<div { ...blockProps }>{ children }</div>\n\t\t\t) }\n\t\t</RecursionProvider>\n\t);\n}\n"],"mappings":"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"}
@@ -28,13 +28,14 @@ const metadata = {
28
28
  renaming: false
29
29
  }
30
30
  };
31
- import edit from './edit';
31
+ import editV1 from './v1/edit';
32
+ import editV2 from './edit';
32
33
  const {
33
34
  name
34
35
  } = metadata;
35
36
  export { metadata, name };
36
37
  export const settings = {
37
- edit,
38
+ edit: window.__experimentalPatternPartialSyncing ? editV2 : editV1,
38
39
  icon
39
40
  };
40
41
  export const init = () => initBlock({
@@ -1 +1 @@
1
- {"version":3,"names":["symbol","icon","initBlock","metadata","$schema","apiVersion","name","title","category","description","keywords","textdomain","attributes","ref","type","supports","customClassName","html","inserter","renaming","edit","settings","init"],"sources":["@wordpress/block-library/src/block/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { symbol as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\tedit,\n\ticon,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,MAAM,IAAIC,IAAI,QAAQ,kBAAkB;;AAEjD;AACA;AACA;AACA,OAAOC,SAAS,MAAM,qBAAqB;AAAC,MAAAC,QAAA;EAAAC,OAAA;EAAAC,UAAA;EAAAC,IAAA;EAAAC,KAAA;EAAAC,QAAA;EAAAC,WAAA;EAAAC,QAAA;EAAAC,UAAA;EAAAC,UAAA;IAAAC,GAAA;MAAAC,IAAA;IAAA;EAAA;EAAAC,QAAA;IAAAC,eAAA;IAAAC,IAAA;IAAAC,QAAA;IAAAC,QAAA;EAAA;AAAA;AAE5C,OAAOC,IAAI,MAAM,QAAQ;AAEzB,MAAM;EAAEd;AAAK,CAAC,GAAGH,QAAQ;AAEzB,SAASA,QAAQ,EAAEG,IAAI;AAEvB,OAAO,MAAMe,QAAQ,GAAG;EACvBD,IAAI;EACJnB;AACD,CAAC;AAED,OAAO,MAAMqB,IAAI,GAAGA,CAAA,KAAMpB,SAAS,CAAE;EAAEI,IAAI;EAAEH,QAAQ;EAAEkB;AAAS,CAAE,CAAC"}
1
+ {"version":3,"names":["symbol","icon","initBlock","metadata","$schema","apiVersion","name","title","category","description","keywords","textdomain","attributes","ref","type","supports","customClassName","html","inserter","renaming","editV1","editV2","settings","edit","window","__experimentalPatternPartialSyncing","init"],"sources":["@wordpress/block-library/src/block/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { symbol as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport editV1 from './v1/edit';\nimport editV2 from './edit';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\tedit: window.__experimentalPatternPartialSyncing ? editV2 : editV1,\n\ticon,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,MAAM,IAAIC,IAAI,QAAQ,kBAAkB;;AAEjD;AACA;AACA;AACA,OAAOC,SAAS,MAAM,qBAAqB;AAAC,MAAAC,QAAA;EAAAC,OAAA;EAAAC,UAAA;EAAAC,IAAA;EAAAC,KAAA;EAAAC,QAAA;EAAAC,WAAA;EAAAC,QAAA;EAAAC,UAAA;EAAAC,UAAA;IAAAC,GAAA;MAAAC,IAAA;IAAA;EAAA;EAAAC,QAAA;IAAAC,eAAA;IAAAC,IAAA;IAAAC,QAAA;IAAAC,QAAA;EAAA;AAAA;AAE5C,OAAOC,MAAM,MAAM,WAAW;AAC9B,OAAOC,MAAM,MAAM,QAAQ;AAE3B,MAAM;EAAEf;AAAK,CAAC,GAAGH,QAAQ;AAEzB,SAASA,QAAQ,EAAEG,IAAI;AAEvB,OAAO,MAAMgB,QAAQ,GAAG;EACvBC,IAAI,EAAEC,MAAM,CAACC,mCAAmC,GAAGJ,MAAM,GAAGD,MAAM;EAClEnB;AACD,CAAC;AAED,OAAO,MAAMyB,IAAI,GAAGA,CAAA,KAAMxB,SAAS,CAAE;EAAEI,IAAI;EAAEH,QAAQ;EAAEmB;AAAS,CAAE,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { createElement } from "react";
2
+ /**
3
+ * External dependencies
4
+ */
5
+ import classnames from 'classnames';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useEntityBlockEditor, useEntityProp, useEntityRecord } from '@wordpress/core-data';
11
+ import { Placeholder, Spinner, TextControl, PanelBody } from '@wordpress/components';
12
+ import { __ } from '@wordpress/i18n';
13
+ import { useInnerBlocksProps, __experimentalRecursionProvider as RecursionProvider, __experimentalUseHasRecursion as useHasRecursion, InnerBlocks, InspectorControls, useBlockProps, Warning, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
14
+ import { useRef, useMemo } from '@wordpress/element';
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import { unlock } from '../../lock-unlock';
20
+ const {
21
+ useLayoutClasses
22
+ } = unlock(blockEditorPrivateApis);
23
+ const fullAlignments = ['full', 'wide', 'left', 'right'];
24
+ const useInferredLayout = (blocks, parentLayout) => {
25
+ const initialInferredAlignmentRef = useRef();
26
+ return useMemo(() => {
27
+ // Exit early if the pattern's blocks haven't loaded yet.
28
+ if (!blocks?.length) {
29
+ return {};
30
+ }
31
+ let alignment = initialInferredAlignmentRef.current;
32
+
33
+ // Only track the initial alignment so that temporarily removed
34
+ // alignments can be reapplied.
35
+ if (alignment === undefined) {
36
+ const isConstrained = parentLayout?.type === 'constrained';
37
+ const hasFullAlignment = blocks.some(block => fullAlignments.includes(block.attributes.align));
38
+ alignment = isConstrained && hasFullAlignment ? 'full' : null;
39
+ initialInferredAlignmentRef.current = alignment;
40
+ }
41
+ const layout = alignment ? parentLayout : undefined;
42
+ return {
43
+ alignment,
44
+ layout
45
+ };
46
+ }, [blocks, parentLayout]);
47
+ };
48
+ export default function ReusableBlockEdit({
49
+ name,
50
+ attributes: {
51
+ ref
52
+ },
53
+ __unstableParentLayout: parentLayout
54
+ }) {
55
+ const hasAlreadyRendered = useHasRecursion(ref);
56
+ const {
57
+ record,
58
+ hasResolved
59
+ } = useEntityRecord('postType', 'wp_block', ref);
60
+ const isMissing = hasResolved && !record;
61
+ const [blocks, onInput, onChange] = useEntityBlockEditor('postType', 'wp_block', {
62
+ id: ref
63
+ });
64
+ const [title, setTitle] = useEntityProp('postType', 'wp_block', 'title', ref);
65
+ const {
66
+ alignment,
67
+ layout
68
+ } = useInferredLayout(blocks, parentLayout);
69
+ const layoutClasses = useLayoutClasses({
70
+ layout
71
+ }, name);
72
+ const blockProps = useBlockProps({
73
+ className: classnames('block-library-block__reusable-block-container', layout && layoutClasses, {
74
+ [`align${alignment}`]: alignment
75
+ })
76
+ });
77
+ const innerBlocksProps = useInnerBlocksProps(blockProps, {
78
+ value: blocks,
79
+ layout,
80
+ onInput,
81
+ onChange,
82
+ renderAppender: blocks?.length ? undefined : InnerBlocks.ButtonBlockAppender
83
+ });
84
+ let children = null;
85
+ if (hasAlreadyRendered) {
86
+ children = createElement(Warning, null, __('Block cannot be rendered inside itself.'));
87
+ }
88
+ if (isMissing) {
89
+ children = createElement(Warning, null, __('Block has been deleted or is unavailable.'));
90
+ }
91
+ if (!hasResolved) {
92
+ children = createElement(Placeholder, null, createElement(Spinner, null));
93
+ }
94
+ return createElement(RecursionProvider, {
95
+ uniqueId: ref
96
+ }, createElement(InspectorControls, null, createElement(PanelBody, null, createElement(TextControl, {
97
+ label: __('Name'),
98
+ value: title,
99
+ onChange: setTitle,
100
+ __nextHasNoMarginBottom: true,
101
+ __next40pxDefaultSize: true
102
+ }))), children === null ? createElement("div", {
103
+ ...innerBlocksProps
104
+ }) : createElement("div", {
105
+ ...blockProps
106
+ }, children));
107
+ }
108
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["classnames","useEntityBlockEditor","useEntityProp","useEntityRecord","Placeholder","Spinner","TextControl","PanelBody","__","useInnerBlocksProps","__experimentalRecursionProvider","RecursionProvider","__experimentalUseHasRecursion","useHasRecursion","InnerBlocks","InspectorControls","useBlockProps","Warning","privateApis","blockEditorPrivateApis","useRef","useMemo","unlock","useLayoutClasses","fullAlignments","useInferredLayout","blocks","parentLayout","initialInferredAlignmentRef","length","alignment","current","undefined","isConstrained","type","hasFullAlignment","some","block","includes","attributes","align","layout","ReusableBlockEdit","name","ref","__unstableParentLayout","hasAlreadyRendered","record","hasResolved","isMissing","onInput","onChange","id","title","setTitle","layoutClasses","blockProps","className","innerBlocksProps","value","renderAppender","ButtonBlockAppender","children","createElement","uniqueId","label","__nextHasNoMarginBottom","__next40pxDefaultSize"],"sources":["@wordpress/block-library/src/block/v1/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseEntityBlockEditor,\n\tuseEntityProp,\n\tuseEntityRecord,\n} from '@wordpress/core-data';\nimport {\n\tPlaceholder,\n\tSpinner,\n\tTextControl,\n\tPanelBody,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseInnerBlocksProps,\n\t__experimentalRecursionProvider as RecursionProvider,\n\t__experimentalUseHasRecursion as useHasRecursion,\n\tInnerBlocks,\n\tInspectorControls,\n\tuseBlockProps,\n\tWarning,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useRef, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { useLayoutClasses } = unlock( blockEditorPrivateApis );\nconst fullAlignments = [ 'full', 'wide', 'left', 'right' ];\n\nconst useInferredLayout = ( blocks, parentLayout ) => {\n\tconst initialInferredAlignmentRef = useRef();\n\n\treturn useMemo( () => {\n\t\t// Exit early if the pattern's blocks haven't loaded yet.\n\t\tif ( ! blocks?.length ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tlet alignment = initialInferredAlignmentRef.current;\n\n\t\t// Only track the initial alignment so that temporarily removed\n\t\t// alignments can be reapplied.\n\t\tif ( alignment === undefined ) {\n\t\t\tconst isConstrained = parentLayout?.type === 'constrained';\n\t\t\tconst hasFullAlignment = blocks.some( ( block ) =>\n\t\t\t\tfullAlignments.includes( block.attributes.align )\n\t\t\t);\n\n\t\t\talignment = isConstrained && hasFullAlignment ? 'full' : null;\n\t\t\tinitialInferredAlignmentRef.current = alignment;\n\t\t}\n\n\t\tconst layout = alignment ? parentLayout : undefined;\n\n\t\treturn { alignment, layout };\n\t}, [ blocks, parentLayout ] );\n};\n\nexport default function ReusableBlockEdit( {\n\tname,\n\tattributes: { ref },\n\t__unstableParentLayout: parentLayout,\n} ) {\n\tconst hasAlreadyRendered = useHasRecursion( ref );\n\tconst { record, hasResolved } = useEntityRecord(\n\t\t'postType',\n\t\t'wp_block',\n\t\tref\n\t);\n\tconst isMissing = hasResolved && ! record;\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\t'wp_block',\n\t\t{ id: ref }\n\t);\n\n\tconst [ title, setTitle ] = useEntityProp(\n\t\t'postType',\n\t\t'wp_block',\n\t\t'title',\n\t\tref\n\t);\n\n\tconst { alignment, layout } = useInferredLayout( blocks, parentLayout );\n\tconst layoutClasses = useLayoutClasses( { layout }, name );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames(\n\t\t\t'block-library-block__reusable-block-container',\n\t\t\tlayout && layoutClasses,\n\t\t\t{ [ `align${ alignment }` ]: alignment }\n\t\t),\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tvalue: blocks,\n\t\tlayout,\n\t\tonInput,\n\t\tonChange,\n\t\trenderAppender: blocks?.length\n\t\t\t? undefined\n\t\t\t: InnerBlocks.ButtonBlockAppender,\n\t} );\n\n\tlet children = null;\n\n\tif ( hasAlreadyRendered ) {\n\t\tchildren = (\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n\n\tif ( isMissing ) {\n\t\tchildren = (\n\t\t\t<Warning>\n\t\t\t\t{ __( 'Block has been deleted or is unavailable.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n\n\tif ( ! hasResolved ) {\n\t\tchildren = (\n\t\t\t<Placeholder>\n\t\t\t\t<Spinner />\n\t\t\t</Placeholder>\n\t\t);\n\t}\n\n\treturn (\n\t\t<RecursionProvider uniqueId={ ref }>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ children === null ? (\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t) : (\n\t\t\t\t<div { ...blockProps }>{ children }</div>\n\t\t\t) }\n\t\t</RecursionProvider>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,YAAY;;AAEnC;AACA;AACA;AACA,SACCC,oBAAoB,EACpBC,aAAa,EACbC,eAAe,QACT,sBAAsB;AAC7B,SACCC,WAAW,EACXC,OAAO,EACPC,WAAW,EACXC,SAAS,QACH,uBAAuB;AAC9B,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SACCC,mBAAmB,EACnBC,+BAA+B,IAAIC,iBAAiB,EACpDC,6BAA6B,IAAIC,eAAe,EAChDC,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,OAAO,EACPC,WAAW,IAAIC,sBAAsB,QAC/B,yBAAyB;AAChC,SAASC,MAAM,EAAEC,OAAO,QAAQ,oBAAoB;;AAEpD;AACA;AACA;AACA,SAASC,MAAM,QAAQ,mBAAmB;AAE1C,MAAM;EAAEC;AAAiB,CAAC,GAAGD,MAAM,CAAEH,sBAAuB,CAAC;AAC7D,MAAMK,cAAc,GAAG,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAE;AAE1D,MAAMC,iBAAiB,GAAGA,CAAEC,MAAM,EAAEC,YAAY,KAAM;EACrD,MAAMC,2BAA2B,GAAGR,MAAM,CAAC,CAAC;EAE5C,OAAOC,OAAO,CAAE,MAAM;IACrB;IACA,IAAK,CAAEK,MAAM,EAAEG,MAAM,EAAG;MACvB,OAAO,CAAC,CAAC;IACV;IAEA,IAAIC,SAAS,GAAGF,2BAA2B,CAACG,OAAO;;IAEnD;IACA;IACA,IAAKD,SAAS,KAAKE,SAAS,EAAG;MAC9B,MAAMC,aAAa,GAAGN,YAAY,EAAEO,IAAI,KAAK,aAAa;MAC1D,MAAMC,gBAAgB,GAAGT,MAAM,CAACU,IAAI,CAAIC,KAAK,IAC5Cb,cAAc,CAACc,QAAQ,CAAED,KAAK,CAACE,UAAU,CAACC,KAAM,CACjD,CAAC;MAEDV,SAAS,GAAGG,aAAa,IAAIE,gBAAgB,GAAG,MAAM,GAAG,IAAI;MAC7DP,2BAA2B,CAACG,OAAO,GAAGD,SAAS;IAChD;IAEA,MAAMW,MAAM,GAAGX,SAAS,GAAGH,YAAY,GAAGK,SAAS;IAEnD,OAAO;MAAEF,SAAS;MAAEW;IAAO,CAAC;EAC7B,CAAC,EAAE,CAAEf,MAAM,EAAEC,YAAY,CAAG,CAAC;AAC9B,CAAC;AAED,eAAe,SAASe,iBAAiBA,CAAE;EAC1CC,IAAI;EACJJ,UAAU,EAAE;IAAEK;EAAI,CAAC;EACnBC,sBAAsB,EAAElB;AACzB,CAAC,EAAG;EACH,MAAMmB,kBAAkB,GAAGjC,eAAe,CAAE+B,GAAI,CAAC;EACjD,MAAM;IAAEG,MAAM;IAAEC;EAAY,CAAC,GAAG7C,eAAe,CAC9C,UAAU,EACV,UAAU,EACVyC,GACD,CAAC;EACD,MAAMK,SAAS,GAAGD,WAAW,IAAI,CAAED,MAAM;EAEzC,MAAM,CAAErB,MAAM,EAAEwB,OAAO,EAAEC,QAAQ,CAAE,GAAGlD,oBAAoB,CACzD,UAAU,EACV,UAAU,EACV;IAAEmD,EAAE,EAAER;EAAI,CACX,CAAC;EAED,MAAM,CAAES,KAAK,EAAEC,QAAQ,CAAE,GAAGpD,aAAa,CACxC,UAAU,EACV,UAAU,EACV,OAAO,EACP0C,GACD,CAAC;EAED,MAAM;IAAEd,SAAS;IAAEW;EAAO,CAAC,GAAGhB,iBAAiB,CAAEC,MAAM,EAAEC,YAAa,CAAC;EACvE,MAAM4B,aAAa,GAAGhC,gBAAgB,CAAE;IAAEkB;EAAO,CAAC,EAAEE,IAAK,CAAC;EAE1D,MAAMa,UAAU,GAAGxC,aAAa,CAAE;IACjCyC,SAAS,EAAEzD,UAAU,CACpB,+CAA+C,EAC/CyC,MAAM,IAAIc,aAAa,EACvB;MAAE,CAAG,QAAQzB,SAAW,EAAC,GAAIA;IAAU,CACxC;EACD,CAAE,CAAC;EAEH,MAAM4B,gBAAgB,GAAGjD,mBAAmB,CAAE+C,UAAU,EAAE;IACzDG,KAAK,EAAEjC,MAAM;IACbe,MAAM;IACNS,OAAO;IACPC,QAAQ;IACRS,cAAc,EAAElC,MAAM,EAAEG,MAAM,GAC3BG,SAAS,GACTlB,WAAW,CAAC+C;EAChB,CAAE,CAAC;EAEH,IAAIC,QAAQ,GAAG,IAAI;EAEnB,IAAKhB,kBAAkB,EAAG;IACzBgB,QAAQ,GACPC,aAAA,CAAC9C,OAAO,QACLT,EAAE,CAAE,yCAA0C,CACxC,CACT;EACF;EAEA,IAAKyC,SAAS,EAAG;IAChBa,QAAQ,GACPC,aAAA,CAAC9C,OAAO,QACLT,EAAE,CAAE,2CAA4C,CAC1C,CACT;EACF;EAEA,IAAK,CAAEwC,WAAW,EAAG;IACpBc,QAAQ,GACPC,aAAA,CAAC3D,WAAW,QACX2D,aAAA,CAAC1D,OAAO,MAAE,CACE,CACb;EACF;EAEA,OACC0D,aAAA,CAACpD,iBAAiB;IAACqD,QAAQ,EAAGpB;EAAK,GAClCmB,aAAA,CAAChD,iBAAiB,QACjBgD,aAAA,CAACxD,SAAS,QACTwD,aAAA,CAACzD,WAAW;IACX2D,KAAK,EAAGzD,EAAE,CAAE,MAAO,CAAG;IACtBmD,KAAK,EAAGN,KAAO;IACfF,QAAQ,EAAGG,QAAU;IACrBY,uBAAuB;IACvBC,qBAAqB;EAAA,CACrB,CACS,CACO,CAAC,EAClBL,QAAQ,KAAK,IAAI,GAClBC,aAAA;IAAA,GAAUL;EAAgB,CAAI,CAAC,GAE/BK,aAAA;IAAA,GAAUP;EAAU,GAAKM,QAAe,CAEvB,CAAC;AAEtB"}
@@ -22,8 +22,8 @@ import { store as noticesStore } from '@wordpress/notices';
22
22
  /**
23
23
  * Internal dependencies
24
24
  */
25
- import styles from './editor.scss';
26
- import EditTitle from './edit-title';
25
+ import styles from '../editor.scss';
26
+ import EditTitle from '../edit-title';
27
27
  export default function ReusableBlockEdit({
28
28
  attributes: {
29
29
  ref
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ActivityIndicator","Platform","Text","TouchableWithoutFeedback","View","useState","useCallback","useEntityBlockEditor","useEntityProp","store","coreStore","BottomSheet","Icon","Disabled","TextControl","useSelect","useDispatch","__","sprintf","__experimentalRecursionProvider","RecursionProvider","__experimentalUseHasRecursion","useHasRecursion","InnerBlocks","Warning","blockEditorStore","usePreferredColorSchemeStyle","help","reusableBlocksStore","editorStore","noticesStore","styles","EditTitle","ReusableBlockEdit","attributes","ref","clientId","isSelected","hasAlreadyRendered","showHelp","setShowHelp","infoTextStyle","infoText","infoTextDark","infoTitleStyle","infoTitle","infoTitleDark","infoSheetIconStyle","infoSheetIcon","infoSheetIconDark","infoDescriptionStyle","infoDescription","infoDescriptionDark","actionButtonStyle","actionButton","actionButtonDark","spinnerStyle","spinner","spinnerDark","hasResolved","isEditing","isMissing","select","persistedBlock","getEntityRecord","hasResolvedBlock","hasFinishedResolution","getBlockCount","__experimentalIsEditingReusableBlock","innerBlockCount","hostAppNamespace","getEditorSettings","createSuccessNotice","__experimentalConvertBlockToStatic","convertBlockToStatic","clearSelectedBlock","blocks","onInput","onChange","id","title","openSheet","closeSheet","onConvertToRegularBlocks","successNotice","setImmediate","renderSheet","OS","createElement","isVisible","hideHeader","onClose","style","infoContainer","icon","color","size","label","separatorType","onPress","labelStyle","message","animating","element","value","uniqueId","disabled","accessibilityLabel","accessibilityRole","accessibilityHint"],"sources":["@wordpress/block-library/src/block/v1/edit.native.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tActivityIndicator,\n\tPlatform,\n\tText,\n\tTouchableWithoutFeedback,\n\tView,\n} from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useCallback } from '@wordpress/element';\nimport {\n\tuseEntityBlockEditor,\n\tuseEntityProp,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport {\n\tBottomSheet,\n\tIcon,\n\tDisabled,\n\tTextControl,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\t__experimentalRecursionProvider as RecursionProvider,\n\t__experimentalUseHasRecursion as useHasRecursion,\n\tInnerBlocks,\n\tWarning,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { usePreferredColorSchemeStyle } from '@wordpress/compose';\nimport { help } from '@wordpress/icons';\nimport { store as reusableBlocksStore } from '@wordpress/reusable-blocks';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport styles from '../editor.scss';\nimport EditTitle from '../edit-title';\n\nexport default function ReusableBlockEdit( {\n\tattributes: { ref },\n\tclientId,\n\tisSelected,\n} ) {\n\tconst hasAlreadyRendered = useHasRecursion( ref );\n\n\tconst [ showHelp, setShowHelp ] = useState( false );\n\tconst infoTextStyle = usePreferredColorSchemeStyle(\n\t\tstyles.infoText,\n\t\tstyles.infoTextDark\n\t);\n\tconst infoTitleStyle = usePreferredColorSchemeStyle(\n\t\tstyles.infoTitle,\n\t\tstyles.infoTitleDark\n\t);\n\tconst infoSheetIconStyle = usePreferredColorSchemeStyle(\n\t\tstyles.infoSheetIcon,\n\t\tstyles.infoSheetIconDark\n\t);\n\tconst infoDescriptionStyle = usePreferredColorSchemeStyle(\n\t\tstyles.infoDescription,\n\t\tstyles.infoDescriptionDark\n\t);\n\tconst actionButtonStyle = usePreferredColorSchemeStyle(\n\t\tstyles.actionButton,\n\t\tstyles.actionButtonDark\n\t);\n\tconst spinnerStyle = usePreferredColorSchemeStyle(\n\t\tstyles.spinner,\n\t\tstyles.spinnerDark\n\t);\n\n\tconst { hasResolved, isEditing, isMissing } = useSelect(\n\t\t( select ) => {\n\t\t\tconst persistedBlock = select( coreStore ).getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\tref\n\t\t\t);\n\t\t\tconst hasResolvedBlock = select( coreStore ).hasFinishedResolution(\n\t\t\t\t'getEntityRecord',\n\t\t\t\t[ 'postType', 'wp_block', ref ]\n\t\t\t);\n\n\t\t\tconst { getBlockCount } = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\thasResolved: hasResolvedBlock,\n\t\t\t\tisEditing:\n\t\t\t\t\tselect(\n\t\t\t\t\t\treusableBlocksStore\n\t\t\t\t\t).__experimentalIsEditingReusableBlock( clientId ),\n\t\t\t\tisMissing: hasResolvedBlock && ! persistedBlock,\n\t\t\t\tinnerBlockCount: getBlockCount( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ ref, clientId ]\n\t);\n\tconst hostAppNamespace = useSelect(\n\t\t( select ) =>\n\t\t\tselect( editorStore ).getEditorSettings().hostAppNamespace,\n\t\t[]\n\t);\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst { __experimentalConvertBlockToStatic: convertBlockToStatic } =\n\t\tuseDispatch( reusableBlocksStore );\n\tconst { clearSelectedBlock } = useDispatch( blockEditorStore );\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\t'wp_block',\n\t\t{ id: ref }\n\t);\n\n\tconst [ title ] = useEntityProp( 'postType', 'wp_block', 'title', ref );\n\n\tfunction openSheet() {\n\t\tsetShowHelp( true );\n\t}\n\n\tfunction closeSheet() {\n\t\tsetShowHelp( false );\n\t}\n\n\tconst onConvertToRegularBlocks = useCallback( () => {\n\t\t/* translators: %s: name of the synced block */\n\t\tconst successNotice = __( '%s detached' );\n\t\tcreateSuccessNotice( sprintf( successNotice, title ) );\n\n\t\tclearSelectedBlock();\n\t\t// Convert action is executed at the end of the current JavaScript execution block\n\t\t// to prevent issues related to undo/redo actions.\n\t\tsetImmediate( () => convertBlockToStatic( clientId ) );\n\t}, [ title, clientId ] );\n\n\tfunction renderSheet() {\n\t\tconst infoTitle =\n\t\t\tPlatform.OS === 'android'\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %s: name of the host app (e.g. WordPress) */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Editing synced patterns is not yet supported on %s for Android'\n\t\t\t\t\t\t),\n\t\t\t\t\t\thostAppNamespace\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: name of the host app (e.g. WordPress) */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Editing synced patterns is not yet supported on %s for iOS'\n\t\t\t\t\t\t),\n\t\t\t\t\t\thostAppNamespace\n\t\t\t\t );\n\n\t\treturn (\n\t\t\t<BottomSheet\n\t\t\t\tisVisible={ showHelp }\n\t\t\t\thideHeader\n\t\t\t\tonClose={ closeSheet }\n\t\t\t>\n\t\t\t\t<View style={ styles.infoContainer }>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={ help }\n\t\t\t\t\t\tcolor={ infoSheetIconStyle.color }\n\t\t\t\t\t\tsize={ styles.infoSheetIcon.size }\n\t\t\t\t\t/>\n\t\t\t\t\t<Text style={ [ infoTextStyle, infoTitleStyle ] }>\n\t\t\t\t\t\t{ infoTitle }\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text style={ [ infoTextStyle, infoDescriptionStyle ] }>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Alternatively, you can detach and edit this block separately by tapping “Detach”.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Text>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Detach' ) }\n\t\t\t\t\t\tseparatorType=\"topFullWidth\"\n\t\t\t\t\t\tonPress={ onConvertToRegularBlocks }\n\t\t\t\t\t\tlabelStyle={ actionButtonStyle }\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t</BottomSheet>\n\t\t);\n\t}\n\n\tif ( hasAlreadyRendered ) {\n\t\treturn (\n\t\t\t<Warning\n\t\t\t\tmessage={ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ( isMissing ) {\n\t\treturn (\n\t\t\t<Warning\n\t\t\t\tmessage={ __( 'Block has been deleted or is unavailable.' ) }\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ( ! hasResolved ) {\n\t\treturn (\n\t\t\t<View style={ spinnerStyle }>\n\t\t\t\t<ActivityIndicator animating />\n\t\t\t</View>\n\t\t);\n\t}\n\n\tlet element = (\n\t\t<InnerBlocks\n\t\t\tvalue={ blocks }\n\t\t\tonChange={ onChange }\n\t\t\tonInput={ onInput }\n\t\t/>\n\t);\n\n\tif ( ! isEditing ) {\n\t\telement = <Disabled>{ element }</Disabled>;\n\t}\n\n\treturn (\n\t\t<RecursionProvider uniqueId={ ref }>\n\t\t\t<TouchableWithoutFeedback\n\t\t\t\tdisabled={ ! isSelected }\n\t\t\t\taccessibilityLabel={ __( 'Help button' ) }\n\t\t\t\taccessibilityRole={ 'button' }\n\t\t\t\taccessibilityHint={ __( 'Tap here to show help' ) }\n\t\t\t\tonPress={ openSheet }\n\t\t\t>\n\t\t\t\t<View>\n\t\t\t\t\t{ isSelected && <EditTitle title={ title } /> }\n\t\t\t\t\t{ element }\n\t\t\t\t\t{ renderSheet() }\n\t\t\t\t</View>\n\t\t\t</TouchableWithoutFeedback>\n\t\t</RecursionProvider>\n\t);\n}\n"],"mappings":"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"}
@@ -48,8 +48,8 @@ const metadata = {
48
48
  __experimentalRole: "content"
49
49
  },
50
50
  text: {
51
- type: "string",
52
- source: "html",
51
+ type: "rich-text",
52
+ source: "rich-text",
53
53
  selector: "a,button",
54
54
  __experimentalRole: "content"
55
55
  },
@@ -25,7 +25,7 @@ export default function save({
25
25
  url,
26
26
  width
27
27
  } = attributes;
28
- if (!text) {
28
+ if (RichText.isEmpty(text)) {
29
29
  return null;
30
30
  }
31
31
  const TagName = tagName || 'a';
@@ -1 +1 @@
1
- {"version":3,"names":["classnames","RichText","useBlockProps","__experimentalGetBorderClassesAndStyles","getBorderClassesAndStyles","__experimentalGetColorClassesAndStyles","getColorClassesAndStyles","__experimentalGetSpacingClassesAndStyles","getSpacingClassesAndStyles","__experimentalGetElementClassName","save","attributes","className","tagName","type","textAlign","fontSize","linkTarget","rel","style","text","title","url","width","TagName","isButtonTag","buttonType","borderProps","colorProps","spacingProps","buttonClasses","border","radius","buttonStyle","wrapperClasses","typography","createElement","Content","href","value","target"],"sources":["@wordpress/block-library/src/button/save.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,\n\t__experimentalGetColorClassesAndStyles as getColorClassesAndStyles,\n\t__experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,\n\t__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\n\nexport default function save( { attributes, className } ) {\n\tconst {\n\t\ttagName,\n\t\ttype,\n\t\ttextAlign,\n\t\tfontSize,\n\t\tlinkTarget,\n\t\trel,\n\t\tstyle,\n\t\ttext,\n\t\ttitle,\n\t\turl,\n\t\twidth,\n\t} = attributes;\n\n\tif ( ! text ) {\n\t\treturn null;\n\t}\n\n\tconst TagName = tagName || 'a';\n\tconst isButtonTag = 'button' === TagName;\n\tconst buttonType = type || 'button';\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\tconst colorProps = getColorClassesAndStyles( attributes );\n\tconst spacingProps = getSpacingClassesAndStyles( attributes );\n\tconst buttonClasses = classnames(\n\t\t'wp-block-button__link',\n\t\tcolorProps.className,\n\t\tborderProps.className,\n\t\t{\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t\t// For backwards compatibility add style that isn't provided via\n\t\t\t// block support.\n\t\t\t'no-border-radius': style?.border?.radius === 0,\n\t\t},\n\t\t__experimentalGetElementClassName( 'button' )\n\t);\n\tconst buttonStyle = {\n\t\t...borderProps.style,\n\t\t...colorProps.style,\n\t\t...spacingProps.style,\n\t};\n\n\t// The use of a `title` attribute here is soft-deprecated, but still applied\n\t// if it had already been assigned, for the sake of backward-compatibility.\n\t// A title will no longer be assigned for new or updated button block links.\n\n\tconst wrapperClasses = classnames( className, {\n\t\t[ `has-custom-width wp-block-button__width-${ width }` ]: width,\n\t\t[ `has-custom-font-size` ]: fontSize || style?.typography?.fontSize,\n\t} );\n\n\treturn (\n\t\t<div { ...useBlockProps.save( { className: wrapperClasses } ) }>\n\t\t\t<RichText.Content\n\t\t\t\ttagName={ TagName }\n\t\t\t\ttype={ isButtonTag ? buttonType : null }\n\t\t\t\tclassName={ buttonClasses }\n\t\t\t\thref={ isButtonTag ? null : url }\n\t\t\t\ttitle={ title }\n\t\t\t\tstyle={ buttonStyle }\n\t\t\t\tvalue={ text }\n\t\t\t\ttarget={ isButtonTag ? null : linkTarget }\n\t\t\t\trel={ isButtonTag ? null : rel }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,YAAY;;AAEnC;AACA;AACA;AACA,SACCC,QAAQ,EACRC,aAAa,EACbC,uCAAuC,IAAIC,yBAAyB,EACpEC,sCAAsC,IAAIC,wBAAwB,EAClEC,wCAAwC,IAAIC,0BAA0B,EACtEC,iCAAiC,QAC3B,yBAAyB;AAEhC,eAAe,SAASC,IAAIA,CAAE;EAAEC,UAAU;EAAEC;AAAU,CAAC,EAAG;EACzD,MAAM;IACLC,OAAO;IACPC,IAAI;IACJC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACVC,GAAG;IACHC,KAAK;IACLC,IAAI;IACJC,KAAK;IACLC,GAAG;IACHC;EACD,CAAC,GAAGZ,UAAU;EAEd,IAAK,CAAES,IAAI,EAAG;IACb,OAAO,IAAI;EACZ;EAEA,MAAMI,OAAO,GAAGX,OAAO,IAAI,GAAG;EAC9B,MAAMY,WAAW,GAAG,QAAQ,KAAKD,OAAO;EACxC,MAAME,UAAU,GAAGZ,IAAI,IAAI,QAAQ;EACnC,MAAMa,WAAW,GAAGvB,yBAAyB,CAAEO,UAAW,CAAC;EAC3D,MAAMiB,UAAU,GAAGtB,wBAAwB,CAAEK,UAAW,CAAC;EACzD,MAAMkB,YAAY,GAAGrB,0BAA0B,CAAEG,UAAW,CAAC;EAC7D,MAAMmB,aAAa,GAAG9B,UAAU,CAC/B,uBAAuB,EACvB4B,UAAU,CAAChB,SAAS,EACpBe,WAAW,CAACf,SAAS,EACrB;IACC,CAAG,kBAAkBG,SAAW,EAAC,GAAIA,SAAS;IAC9C;IACA;IACA,kBAAkB,EAAEI,KAAK,EAAEY,MAAM,EAAEC,MAAM,KAAK;EAC/C,CAAC,EACDvB,iCAAiC,CAAE,QAAS,CAC7C,CAAC;EACD,MAAMwB,WAAW,GAAG;IACnB,GAAGN,WAAW,CAACR,KAAK;IACpB,GAAGS,UAAU,CAACT,KAAK;IACnB,GAAGU,YAAY,CAACV;EACjB,CAAC;;EAED;EACA;EACA;;EAEA,MAAMe,cAAc,GAAGlC,UAAU,CAAEY,SAAS,EAAE;IAC7C,CAAG,2CAA2CW,KAAO,EAAC,GAAIA,KAAK;IAC/D,CAAG,sBAAqB,GAAIP,QAAQ,IAAIG,KAAK,EAAEgB,UAAU,EAAEnB;EAC5D,CAAE,CAAC;EAEH,OACCoB,aAAA;IAAA,GAAUlC,aAAa,CAACQ,IAAI,CAAE;MAAEE,SAAS,EAAEsB;IAAe,CAAE;EAAC,GAC5DE,aAAA,CAACnC,QAAQ,CAACoC,OAAO;IAChBxB,OAAO,EAAGW,OAAS;IACnBV,IAAI,EAAGW,WAAW,GAAGC,UAAU,GAAG,IAAM;IACxCd,SAAS,EAAGkB,aAAe;IAC3BQ,IAAI,EAAGb,WAAW,GAAG,IAAI,GAAGH,GAAK;IACjCD,KAAK,EAAGA,KAAO;IACfF,KAAK,EAAGc,WAAa;IACrBM,KAAK,EAAGnB,IAAM;IACdoB,MAAM,EAAGf,WAAW,GAAG,IAAI,GAAGR,UAAY;IAC1CC,GAAG,EAAGO,WAAW,GAAG,IAAI,GAAGP;EAAK,CAChC,CACG,CAAC;AAER"}
1
+ {"version":3,"names":["classnames","RichText","useBlockProps","__experimentalGetBorderClassesAndStyles","getBorderClassesAndStyles","__experimentalGetColorClassesAndStyles","getColorClassesAndStyles","__experimentalGetSpacingClassesAndStyles","getSpacingClassesAndStyles","__experimentalGetElementClassName","save","attributes","className","tagName","type","textAlign","fontSize","linkTarget","rel","style","text","title","url","width","isEmpty","TagName","isButtonTag","buttonType","borderProps","colorProps","spacingProps","buttonClasses","border","radius","buttonStyle","wrapperClasses","typography","createElement","Content","href","value","target"],"sources":["@wordpress/block-library/src/button/save.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,\n\t__experimentalGetColorClassesAndStyles as getColorClassesAndStyles,\n\t__experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,\n\t__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\n\nexport default function save( { attributes, className } ) {\n\tconst {\n\t\ttagName,\n\t\ttype,\n\t\ttextAlign,\n\t\tfontSize,\n\t\tlinkTarget,\n\t\trel,\n\t\tstyle,\n\t\ttext,\n\t\ttitle,\n\t\turl,\n\t\twidth,\n\t} = attributes;\n\n\tif ( RichText.isEmpty( text ) ) {\n\t\treturn null;\n\t}\n\n\tconst TagName = tagName || 'a';\n\tconst isButtonTag = 'button' === TagName;\n\tconst buttonType = type || 'button';\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\tconst colorProps = getColorClassesAndStyles( attributes );\n\tconst spacingProps = getSpacingClassesAndStyles( attributes );\n\tconst buttonClasses = classnames(\n\t\t'wp-block-button__link',\n\t\tcolorProps.className,\n\t\tborderProps.className,\n\t\t{\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t\t// For backwards compatibility add style that isn't provided via\n\t\t\t// block support.\n\t\t\t'no-border-radius': style?.border?.radius === 0,\n\t\t},\n\t\t__experimentalGetElementClassName( 'button' )\n\t);\n\tconst buttonStyle = {\n\t\t...borderProps.style,\n\t\t...colorProps.style,\n\t\t...spacingProps.style,\n\t};\n\n\t// The use of a `title` attribute here is soft-deprecated, but still applied\n\t// if it had already been assigned, for the sake of backward-compatibility.\n\t// A title will no longer be assigned for new or updated button block links.\n\n\tconst wrapperClasses = classnames( className, {\n\t\t[ `has-custom-width wp-block-button__width-${ width }` ]: width,\n\t\t[ `has-custom-font-size` ]: fontSize || style?.typography?.fontSize,\n\t} );\n\n\treturn (\n\t\t<div { ...useBlockProps.save( { className: wrapperClasses } ) }>\n\t\t\t<RichText.Content\n\t\t\t\ttagName={ TagName }\n\t\t\t\ttype={ isButtonTag ? buttonType : null }\n\t\t\t\tclassName={ buttonClasses }\n\t\t\t\thref={ isButtonTag ? null : url }\n\t\t\t\ttitle={ title }\n\t\t\t\tstyle={ buttonStyle }\n\t\t\t\tvalue={ text }\n\t\t\t\ttarget={ isButtonTag ? null : linkTarget }\n\t\t\t\trel={ isButtonTag ? null : rel }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,YAAY;;AAEnC;AACA;AACA;AACA,SACCC,QAAQ,EACRC,aAAa,EACbC,uCAAuC,IAAIC,yBAAyB,EACpEC,sCAAsC,IAAIC,wBAAwB,EAClEC,wCAAwC,IAAIC,0BAA0B,EACtEC,iCAAiC,QAC3B,yBAAyB;AAEhC,eAAe,SAASC,IAAIA,CAAE;EAAEC,UAAU;EAAEC;AAAU,CAAC,EAAG;EACzD,MAAM;IACLC,OAAO;IACPC,IAAI;IACJC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACVC,GAAG;IACHC,KAAK;IACLC,IAAI;IACJC,KAAK;IACLC,GAAG;IACHC;EACD,CAAC,GAAGZ,UAAU;EAEd,IAAKV,QAAQ,CAACuB,OAAO,CAAEJ,IAAK,CAAC,EAAG;IAC/B,OAAO,IAAI;EACZ;EAEA,MAAMK,OAAO,GAAGZ,OAAO,IAAI,GAAG;EAC9B,MAAMa,WAAW,GAAG,QAAQ,KAAKD,OAAO;EACxC,MAAME,UAAU,GAAGb,IAAI,IAAI,QAAQ;EACnC,MAAMc,WAAW,GAAGxB,yBAAyB,CAAEO,UAAW,CAAC;EAC3D,MAAMkB,UAAU,GAAGvB,wBAAwB,CAAEK,UAAW,CAAC;EACzD,MAAMmB,YAAY,GAAGtB,0BAA0B,CAAEG,UAAW,CAAC;EAC7D,MAAMoB,aAAa,GAAG/B,UAAU,CAC/B,uBAAuB,EACvB6B,UAAU,CAACjB,SAAS,EACpBgB,WAAW,CAAChB,SAAS,EACrB;IACC,CAAG,kBAAkBG,SAAW,EAAC,GAAIA,SAAS;IAC9C;IACA;IACA,kBAAkB,EAAEI,KAAK,EAAEa,MAAM,EAAEC,MAAM,KAAK;EAC/C,CAAC,EACDxB,iCAAiC,CAAE,QAAS,CAC7C,CAAC;EACD,MAAMyB,WAAW,GAAG;IACnB,GAAGN,WAAW,CAACT,KAAK;IACpB,GAAGU,UAAU,CAACV,KAAK;IACnB,GAAGW,YAAY,CAACX;EACjB,CAAC;;EAED;EACA;EACA;;EAEA,MAAMgB,cAAc,GAAGnC,UAAU,CAAEY,SAAS,EAAE;IAC7C,CAAG,2CAA2CW,KAAO,EAAC,GAAIA,KAAK;IAC/D,CAAG,sBAAqB,GAAIP,QAAQ,IAAIG,KAAK,EAAEiB,UAAU,EAAEpB;EAC5D,CAAE,CAAC;EAEH,OACCqB,aAAA;IAAA,GAAUnC,aAAa,CAACQ,IAAI,CAAE;MAAEE,SAAS,EAAEuB;IAAe,CAAE;EAAC,GAC5DE,aAAA,CAACpC,QAAQ,CAACqC,OAAO;IAChBzB,OAAO,EAAGY,OAAS;IACnBX,IAAI,EAAGY,WAAW,GAAGC,UAAU,GAAG,IAAM;IACxCf,SAAS,EAAGmB,aAAe;IAC3BQ,IAAI,EAAGb,WAAW,GAAG,IAAI,GAAGJ,GAAK;IACjCD,KAAK,EAAGA,KAAO;IACfF,KAAK,EAAGe,WAAa;IACrBM,KAAK,EAAGpB,IAAM;IACdqB,MAAM,EAAGf,WAAW,GAAG,IAAI,GAAGT,UAAY;IAC1CC,GAAG,EAAGQ,WAAW,GAAG,IAAI,GAAGR;EAAK,CAChC,CACG,CAAC;AAER"}