@wordpress/block-library 8.26.0 → 8.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/avatar/edit.js +2 -2
  3. package/build/avatar/edit.js.map +1 -1
  4. package/build/block/edit.js +76 -13
  5. package/build/block/edit.js.map +1 -1
  6. package/build/block/{v1/edit.native.js → edit.native.js} +4 -4
  7. package/build/block/edit.native.js.map +1 -0
  8. package/build/block/index.js +5 -3
  9. package/build/block/index.js.map +1 -1
  10. package/build/button/edit.js +24 -6
  11. package/build/button/edit.js.map +1 -1
  12. package/build/button/index.js +1 -0
  13. package/build/button/index.js.map +1 -1
  14. package/build/button/save.js +3 -1
  15. package/build/button/save.js.map +1 -1
  16. package/build/cover/edit/index.js +2 -1
  17. package/build/cover/edit/index.js.map +1 -1
  18. package/build/cover/edit/inspector-controls.js +13 -1
  19. package/build/cover/edit/inspector-controls.js.map +1 -1
  20. package/build/cover/edit.native.js +1 -0
  21. package/build/cover/edit.native.js.map +1 -1
  22. package/build/cover/index.js +3 -0
  23. package/build/cover/index.js.map +1 -1
  24. package/build/embed/edit.js +3 -2
  25. package/build/embed/edit.js.map +1 -1
  26. package/build/file/index.js +0 -1
  27. package/build/file/index.js.map +1 -1
  28. package/build/footnotes/edit.js +2 -1
  29. package/build/footnotes/edit.js.map +1 -1
  30. package/build/footnotes/format.js +17 -19
  31. package/build/footnotes/format.js.map +1 -1
  32. package/build/group/index.js +1 -0
  33. package/build/group/index.js.map +1 -1
  34. package/build/heading/edit.js +2 -1
  35. package/build/heading/edit.js.map +1 -1
  36. package/build/heading/edit.native.js +141 -0
  37. package/build/heading/edit.native.js.map +1 -0
  38. package/build/heading/index.js +1 -0
  39. package/build/heading/index.js.map +1 -1
  40. package/build/image/edit.js +8 -4
  41. package/build/image/edit.js.map +1 -1
  42. package/build/image/image.js +33 -7
  43. package/build/image/image.js.map +1 -1
  44. package/build/image/index.js +6 -3
  45. package/build/image/index.js.map +1 -1
  46. package/build/more/index.js +4 -0
  47. package/build/more/index.js.map +1 -1
  48. package/build/navigation/edit/index.js +2 -2
  49. package/build/navigation/edit/index.js.map +1 -1
  50. package/build/navigation/index.js +0 -1
  51. package/build/navigation/index.js.map +1 -1
  52. package/build/paragraph/edit.js +2 -1
  53. package/build/paragraph/edit.js.map +1 -1
  54. package/build/paragraph/index.js +1 -2
  55. package/build/paragraph/index.js.map +1 -1
  56. package/build/paragraph/transforms.js +1 -2
  57. package/build/paragraph/transforms.js.map +1 -1
  58. package/build/post-content/edit.js +2 -2
  59. package/build/post-content/edit.js.map +1 -1
  60. package/build/post-date/edit.js +1 -1
  61. package/build/post-date/edit.js.map +1 -1
  62. package/build/post-navigation-link/edit.js +43 -2
  63. package/build/post-navigation-link/edit.js.map +1 -1
  64. package/build/post-navigation-link/index.js +8 -0
  65. package/build/post-navigation-link/index.js.map +1 -1
  66. package/build/pullquote/index.js +4 -0
  67. package/build/pullquote/index.js.map +1 -1
  68. package/build/query/edit/inspector-controls/index.js +3 -3
  69. package/build/query/edit/inspector-controls/index.js.map +1 -1
  70. package/build/query/edit/query-content.js +2 -2
  71. package/build/query/edit/query-content.js.map +1 -1
  72. package/build/query/edit/query-placeholder.js +6 -7
  73. package/build/query/edit/query-placeholder.js.map +1 -1
  74. package/build/query/index.js +1 -2
  75. package/build/query/index.js.map +1 -1
  76. package/build/query/variations.js +8 -1
  77. package/build/query/variations.js.map +1 -1
  78. package/build/query/view.js +31 -12
  79. package/build/query/view.js.map +1 -1
  80. package/build/search/index.js +0 -1
  81. package/build/search/index.js.map +1 -1
  82. package/build/table-of-contents/hooks.js +2 -2
  83. package/build/table-of-contents/hooks.js.map +1 -1
  84. package/build/template-part/edit/advanced-controls.js +1 -4
  85. package/build/template-part/edit/advanced-controls.js.map +1 -1
  86. package/build/template-part/edit/index.js +39 -17
  87. package/build/template-part/edit/index.js.map +1 -1
  88. package/build/video/edit.native.js +7 -2
  89. package/build/video/edit.native.js.map +1 -1
  90. package/build/video/transforms.js +17 -0
  91. package/build/video/transforms.js.map +1 -1
  92. package/build-module/avatar/edit.js +2 -2
  93. package/build-module/avatar/edit.js.map +1 -1
  94. package/build-module/block/edit.js +76 -13
  95. package/build-module/block/edit.js.map +1 -1
  96. package/build-module/block/{v1/edit.native.js → edit.native.js} +3 -3
  97. package/build-module/block/edit.native.js.map +1 -0
  98. package/build-module/block/index.js +5 -3
  99. package/build-module/block/index.js.map +1 -1
  100. package/build-module/button/edit.js +25 -7
  101. package/build-module/button/edit.js.map +1 -1
  102. package/build-module/button/index.js +1 -0
  103. package/build-module/button/index.js.map +1 -1
  104. package/build-module/button/save.js +4 -2
  105. package/build-module/button/save.js.map +1 -1
  106. package/build-module/cover/edit/index.js +2 -1
  107. package/build-module/cover/edit/index.js.map +1 -1
  108. package/build-module/cover/edit/inspector-controls.js +14 -2
  109. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  110. package/build-module/cover/edit.native.js +1 -0
  111. package/build-module/cover/edit.native.js.map +1 -1
  112. package/build-module/cover/index.js +3 -0
  113. package/build-module/cover/index.js.map +1 -1
  114. package/build-module/embed/edit.js +3 -2
  115. package/build-module/embed/edit.js.map +1 -1
  116. package/build-module/file/index.js +0 -1
  117. package/build-module/file/index.js.map +1 -1
  118. package/build-module/footnotes/edit.js +2 -1
  119. package/build-module/footnotes/edit.js.map +1 -1
  120. package/build-module/footnotes/format.js +17 -19
  121. package/build-module/footnotes/format.js.map +1 -1
  122. package/build-module/group/index.js +1 -0
  123. package/build-module/group/index.js.map +1 -1
  124. package/build-module/heading/edit.js +3 -2
  125. package/build-module/heading/edit.js.map +1 -1
  126. package/build-module/heading/edit.native.js +132 -0
  127. package/build-module/heading/edit.native.js.map +1 -0
  128. package/build-module/heading/index.js +1 -0
  129. package/build-module/heading/index.js.map +1 -1
  130. package/build-module/image/edit.js +9 -5
  131. package/build-module/image/edit.js.map +1 -1
  132. package/build-module/image/image.js +33 -7
  133. package/build-module/image/image.js.map +1 -1
  134. package/build-module/image/index.js +6 -3
  135. package/build-module/image/index.js.map +1 -1
  136. package/build-module/more/index.js +4 -0
  137. package/build-module/more/index.js.map +1 -1
  138. package/build-module/navigation/edit/index.js +1 -1
  139. package/build-module/navigation/edit/index.js.map +1 -1
  140. package/build-module/navigation/index.js +0 -1
  141. package/build-module/navigation/index.js.map +1 -1
  142. package/build-module/paragraph/edit.js +3 -2
  143. package/build-module/paragraph/edit.js.map +1 -1
  144. package/build-module/paragraph/index.js +1 -2
  145. package/build-module/paragraph/index.js.map +1 -1
  146. package/build-module/paragraph/transforms.js +1 -2
  147. package/build-module/paragraph/transforms.js.map +1 -1
  148. package/build-module/post-content/edit.js +1 -1
  149. package/build-module/post-content/edit.js.map +1 -1
  150. package/build-module/post-date/edit.js +1 -1
  151. package/build-module/post-date/edit.js.map +1 -1
  152. package/build-module/post-navigation-link/edit.js +44 -3
  153. package/build-module/post-navigation-link/edit.js.map +1 -1
  154. package/build-module/post-navigation-link/index.js +8 -0
  155. package/build-module/post-navigation-link/index.js.map +1 -1
  156. package/build-module/pullquote/index.js +4 -0
  157. package/build-module/pullquote/index.js.map +1 -1
  158. package/build-module/query/edit/inspector-controls/index.js +4 -4
  159. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  160. package/build-module/query/edit/query-content.js +2 -2
  161. package/build-module/query/edit/query-content.js.map +1 -1
  162. package/build-module/query/edit/query-placeholder.js +7 -8
  163. package/build-module/query/edit/query-placeholder.js.map +1 -1
  164. package/build-module/query/index.js +1 -2
  165. package/build-module/query/index.js.map +1 -1
  166. package/build-module/query/variations.js +8 -1
  167. package/build-module/query/variations.js.map +1 -1
  168. package/build-module/query/view.js +30 -9
  169. package/build-module/query/view.js.map +1 -1
  170. package/build-module/search/index.js +0 -1
  171. package/build-module/search/index.js.map +1 -1
  172. package/build-module/table-of-contents/hooks.js +2 -2
  173. package/build-module/table-of-contents/hooks.js.map +1 -1
  174. package/build-module/template-part/edit/advanced-controls.js +1 -4
  175. package/build-module/template-part/edit/advanced-controls.js.map +1 -1
  176. package/build-module/template-part/edit/index.js +38 -16
  177. package/build-module/template-part/edit/index.js.map +1 -1
  178. package/build-module/video/edit.native.js +7 -2
  179. package/build-module/video/edit.native.js.map +1 -1
  180. package/build-module/video/transforms.js +17 -0
  181. package/build-module/video/transforms.js.map +1 -1
  182. package/build-style/common-rtl.css +4 -2
  183. package/build-style/common.css +4 -2
  184. package/build-style/cover/style-rtl.css +2 -4
  185. package/build-style/cover/style.css +2 -4
  186. package/build-style/editor-rtl.css +6 -4
  187. package/build-style/editor.css +6 -4
  188. package/build-style/gallery/style-rtl.css +2 -4
  189. package/build-style/gallery/style.css +2 -4
  190. package/build-style/image/editor-rtl.css +6 -0
  191. package/build-style/image/editor.css +6 -0
  192. package/build-style/page-list/editor-rtl.css +0 -4
  193. package/build-style/page-list/editor.css +0 -4
  194. package/build-style/pullquote/style-rtl.css +10 -1
  195. package/build-style/pullquote/style.css +10 -1
  196. package/build-style/search/style-rtl.css +2 -1
  197. package/build-style/search/style.css +2 -1
  198. package/build-style/style-rtl.css +20 -13
  199. package/build-style/style.css +20 -13
  200. package/build-style/video/style-rtl.css +1 -2
  201. package/build-style/video/style.css +1 -2
  202. package/package.json +34 -32
  203. package/src/avatar/edit.js +16 -18
  204. package/src/block/block.json +3 -0
  205. package/src/block/edit.js +102 -20
  206. package/src/block/{v1/edit.native.js → edit.native.js} +4 -4
  207. package/src/block/index.js +2 -3
  208. package/src/block/index.php +3 -31
  209. package/src/button/block.json +1 -0
  210. package/src/button/edit.js +76 -43
  211. package/src/button/save.js +3 -0
  212. package/src/buttons/test/__snapshots__/edit.native.js.snap +6 -0
  213. package/src/buttons/test/edit.native.js +49 -0
  214. package/src/cover/block.json +3 -0
  215. package/src/cover/edit/index.js +2 -1
  216. package/src/cover/edit/inspector-controls.js +14 -1
  217. package/src/cover/edit.native.js +1 -0
  218. package/src/cover/style.scss +2 -3
  219. package/src/embed/edit.js +3 -2
  220. package/src/file/block.json +0 -1
  221. package/src/file/index.php +11 -57
  222. package/src/footnotes/edit.js +2 -1
  223. package/src/footnotes/format.js +34 -31
  224. package/src/footnotes/index.php +20 -11
  225. package/src/gallery/index.php +0 -3
  226. package/src/group/block.json +1 -0
  227. package/src/heading/block.json +1 -0
  228. package/src/heading/edit.js +18 -14
  229. package/src/heading/edit.native.js +144 -0
  230. package/src/image/block.json +7 -3
  231. package/src/image/edit.js +19 -6
  232. package/src/image/editor.scss +6 -1
  233. package/src/image/image.js +101 -42
  234. package/src/image/index.js +6 -0
  235. package/src/image/index.php +14 -51
  236. package/src/more/index.js +6 -0
  237. package/src/navigation/block.json +0 -1
  238. package/src/navigation/edit/index.js +2 -2
  239. package/src/navigation/index.php +777 -28
  240. package/src/navigation-link/index.php +78 -16
  241. package/src/page-list/editor.scss +0 -4
  242. package/src/paragraph/block.json +1 -2
  243. package/src/paragraph/edit.js +23 -19
  244. package/src/post-content/edit.js +2 -2
  245. package/src/post-date/edit.js +38 -33
  246. package/src/post-navigation-link/block.json +8 -0
  247. package/src/post-navigation-link/edit.js +63 -1
  248. package/src/post-navigation-link/index.php +17 -3
  249. package/src/post-terms/index.php +13 -4
  250. package/src/pullquote/block.json +4 -0
  251. package/src/pullquote/style.scss +13 -1
  252. package/src/query/block.json +1 -2
  253. package/src/query/edit/inspector-controls/index.js +137 -146
  254. package/src/query/edit/query-content.js +9 -7
  255. package/src/query/edit/query-placeholder.js +11 -11
  256. package/src/query/index.php +33 -71
  257. package/src/query/variations.js +4 -0
  258. package/src/query/view.js +24 -19
  259. package/src/search/block.json +0 -1
  260. package/src/search/index.php +18 -36
  261. package/src/table-of-contents/hooks.js +2 -2
  262. package/src/template-part/edit/advanced-controls.js +2 -3
  263. package/src/template-part/edit/index.js +77 -50
  264. package/src/template-part/index.php +2 -2
  265. package/src/video/edit.native.js +5 -2
  266. package/src/video/test/edit.native.js +38 -0
  267. package/src/video/transforms.js +32 -0
  268. package/tsconfig.json +1 -0
  269. package/build/block/v1/edit.js +0 -116
  270. package/build/block/v1/edit.js.map +0 -1
  271. package/build/block/v1/edit.native.js.map +0 -1
  272. package/build-module/block/v1/edit.js +0 -108
  273. package/build-module/block/v1/edit.js.map +0 -1
  274. package/build-module/block/v1/edit.native.js.map +0 -1
  275. package/src/block/v1/edit.js +0 -163
@@ -618,8 +618,7 @@
618
618
  justify-content: center;
619
619
  align-items: center;
620
620
  padding: 1em;
621
- overflow: hidden;
622
- overflow: clip;
621
+ overflow-x: clip;
623
622
  box-sizing: border-box;
624
623
  /*rtl:raw: direction: ltr; */
625
624
  /**
@@ -930,8 +929,7 @@
930
929
  height: 100%;
931
930
  max-width: none;
932
931
  max-height: none;
933
- -o-object-fit: cover;
934
- object-fit: cover;
932
+ object-fit: cover;
935
933
  outline: none;
936
934
  border: none;
937
935
  box-shadow: none;
@@ -1288,8 +1286,7 @@ textarea.wp-block-form-input__input {
1288
1286
  width: 100%;
1289
1287
  height: 100%;
1290
1288
  flex: 1;
1291
- -o-object-fit: cover;
1292
- object-fit: cover;
1289
+ object-fit: cover;
1293
1290
  }
1294
1291
  .wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image, .wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item,
1295
1292
  .blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,
@@ -1511,8 +1508,7 @@ figure.wp-block-gallery.has-nested-images {
1511
1508
  width: 100%;
1512
1509
  flex: 1 0 0%;
1513
1510
  height: 100%;
1514
- -o-object-fit: cover;
1515
- object-fit: cover;
1511
+ object-fit: cover;
1516
1512
  }
1517
1513
  .wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image) {
1518
1514
  width: 100%;
@@ -3002,7 +2998,7 @@ p.has-text-align-left[style*="writing-mode:vertical-lr"] {
3002
2998
  }
3003
2999
 
3004
3000
  .wp-block-pullquote {
3005
- padding: 3em 0;
3001
+ padding: 4em 0;
3006
3002
  text-align: center;
3007
3003
  overflow-wrap: break-word;
3008
3004
  box-sizing: border-box;
@@ -3012,6 +3008,15 @@ p.has-text-align-left[style*="writing-mode:vertical-lr"] {
3012
3008
  .wp-block-pullquote cite {
3013
3009
  color: inherit;
3014
3010
  }
3011
+ .wp-block-pullquote blockquote {
3012
+ margin: 0;
3013
+ }
3014
+ .wp-block-pullquote p {
3015
+ margin-top: 0;
3016
+ }
3017
+ .wp-block-pullquote p:last-child {
3018
+ margin-bottom: 0;
3019
+ }
3015
3020
  .wp-block-pullquote.alignleft, .wp-block-pullquote.alignright {
3016
3021
  max-width: 420px;
3017
3022
  }
@@ -3283,7 +3288,8 @@ ul.wp-block-rss.is-grid li {
3283
3288
  min-width: 3rem;
3284
3289
  border: 1px solid #949494;
3285
3290
  text-decoration: unset !important;
3286
- appearance: initial;
3291
+ -webkit-appearance: initial;
3292
+ appearance: initial;
3287
3293
  }
3288
3294
 
3289
3295
  .wp-block-search.wp-block-search__button-only .wp-block-search__button {
@@ -4033,8 +4039,7 @@ pre.wp-block-verse {
4033
4039
  }
4034
4040
  @supports (position: sticky) {
4035
4041
  .wp-block-video [poster] {
4036
- -o-object-fit: cover;
4037
- object-fit: cover;
4042
+ object-fit: cover;
4038
4043
  }
4039
4044
  }
4040
4045
  .wp-block-video.aligncenter {
@@ -4173,6 +4178,7 @@ a[data-fn].fn::after {
4173
4178
  .screen-reader-text {
4174
4179
  border: 0;
4175
4180
  clip: rect(1px, 1px, 1px, 1px);
4181
+ -webkit-clip-path: inset(50%);
4176
4182
  clip-path: inset(50%);
4177
4183
  height: 1px;
4178
4184
  margin: -1px;
@@ -4186,7 +4192,8 @@ a[data-fn].fn::after {
4186
4192
  .screen-reader-text:focus {
4187
4193
  background-color: #ddd;
4188
4194
  clip: auto !important;
4189
- clip-path: none;
4195
+ -webkit-clip-path: none;
4196
+ clip-path: none;
4190
4197
  color: #444;
4191
4198
  display: block;
4192
4199
  font-size: 1em;
@@ -95,8 +95,7 @@
95
95
  }
96
96
  @supports (position: sticky) {
97
97
  .wp-block-video [poster] {
98
- -o-object-fit: cover;
99
- object-fit: cover;
98
+ object-fit: cover;
100
99
  }
101
100
  }
102
101
  .wp-block-video.aligncenter {
@@ -95,8 +95,7 @@
95
95
  }
96
96
  @supports (position: sticky) {
97
97
  .wp-block-video [poster] {
98
- -o-object-fit: cover;
99
- object-fit: cover;
98
+ object-fit: cover;
100
99
  }
101
100
  }
102
101
  .wp-block-video.aligncenter {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "8.26.0",
3
+ "version": "8.27.1",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -31,36 +31,38 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@babel/runtime": "^7.16.0",
34
- "@wordpress/a11y": "^3.49.0",
35
- "@wordpress/api-fetch": "^6.46.0",
36
- "@wordpress/autop": "^3.49.0",
37
- "@wordpress/blob": "^3.49.0",
38
- "@wordpress/block-editor": "^12.17.0",
39
- "@wordpress/blocks": "^12.26.0",
40
- "@wordpress/components": "^25.15.0",
41
- "@wordpress/compose": "^6.26.0",
42
- "@wordpress/core-data": "^6.26.0",
43
- "@wordpress/data": "^9.19.0",
44
- "@wordpress/date": "^4.49.0",
45
- "@wordpress/deprecated": "^3.49.0",
46
- "@wordpress/dom": "^3.49.0",
47
- "@wordpress/element": "^5.26.0",
48
- "@wordpress/escape-html": "^2.49.0",
49
- "@wordpress/hooks": "^3.49.0",
50
- "@wordpress/html-entities": "^3.49.0",
51
- "@wordpress/i18n": "^4.49.0",
52
- "@wordpress/icons": "^9.40.0",
53
- "@wordpress/interactivity": "^3.2.0",
54
- "@wordpress/keycodes": "^3.49.0",
55
- "@wordpress/notices": "^4.17.0",
56
- "@wordpress/primitives": "^3.47.0",
57
- "@wordpress/private-apis": "^0.31.0",
58
- "@wordpress/reusable-blocks": "^4.26.0",
59
- "@wordpress/rich-text": "^6.26.0",
60
- "@wordpress/server-side-render": "^4.26.0",
61
- "@wordpress/url": "^3.50.0",
62
- "@wordpress/viewport": "^5.26.0",
63
- "@wordpress/wordcount": "^3.49.0",
34
+ "@wordpress/a11y": "^3.50.0",
35
+ "@wordpress/api-fetch": "^6.47.0",
36
+ "@wordpress/autop": "^3.50.0",
37
+ "@wordpress/blob": "^3.50.0",
38
+ "@wordpress/block-editor": "^12.18.1",
39
+ "@wordpress/blocks": "^12.27.1",
40
+ "@wordpress/components": "^25.16.0",
41
+ "@wordpress/compose": "^6.27.0",
42
+ "@wordpress/core-data": "^6.27.1",
43
+ "@wordpress/data": "^9.20.0",
44
+ "@wordpress/date": "^4.50.0",
45
+ "@wordpress/deprecated": "^3.50.0",
46
+ "@wordpress/dom": "^3.50.0",
47
+ "@wordpress/element": "^5.27.0",
48
+ "@wordpress/escape-html": "^2.50.0",
49
+ "@wordpress/hooks": "^3.50.0",
50
+ "@wordpress/html-entities": "^3.50.0",
51
+ "@wordpress/i18n": "^4.50.0",
52
+ "@wordpress/icons": "^9.41.0",
53
+ "@wordpress/interactivity": "^4.0.0",
54
+ "@wordpress/interactivity-router": "^1.0.0",
55
+ "@wordpress/keycodes": "^3.50.0",
56
+ "@wordpress/notices": "^4.18.0",
57
+ "@wordpress/patterns": "^1.11.1",
58
+ "@wordpress/primitives": "^3.48.0",
59
+ "@wordpress/private-apis": "^0.32.0",
60
+ "@wordpress/reusable-blocks": "^4.27.1",
61
+ "@wordpress/rich-text": "^6.27.0",
62
+ "@wordpress/server-side-render": "^4.27.1",
63
+ "@wordpress/url": "^3.51.0",
64
+ "@wordpress/viewport": "^5.27.0",
65
+ "@wordpress/wordcount": "^3.50.0",
64
66
  "change-case": "^4.1.2",
65
67
  "classnames": "^2.3.1",
66
68
  "colord": "^2.7.0",
@@ -78,5 +80,5 @@
78
80
  "publishConfig": {
79
81
  "access": "public"
80
82
  },
81
- "gitHead": "5e6f9caa205d3bfdbac131952b7bf9c6ec60569b"
83
+ "gitHead": "c2f6d07ffab7d68b9ac3c423ce7e11af91f6e45e"
82
84
  }
@@ -192,22 +192,12 @@ const UserEdit = ( { attributes, context, setAttributes, isSelected } ) => {
192
192
  avatar={ avatar }
193
193
  setAttributes={ setAttributes }
194
194
  />
195
- <div>
196
- { attributes.isLink ? (
197
- <a
198
- href="#avatar-pseudo-link"
199
- className="wp-block-avatar__link"
200
- onClick={ ( event ) => event.preventDefault() }
201
- >
202
- <ResizableAvatar
203
- attributes={ attributes }
204
- avatar={ avatar }
205
- blockProps={ blockProps }
206
- isSelected={ isSelected }
207
- setAttributes={ setAttributes }
208
- />
209
- </a>
210
- ) : (
195
+ { attributes.isLink ? (
196
+ <a
197
+ href="#avatar-pseudo-link"
198
+ className="wp-block-avatar__link"
199
+ onClick={ ( event ) => event.preventDefault() }
200
+ >
211
201
  <ResizableAvatar
212
202
  attributes={ attributes }
213
203
  avatar={ avatar }
@@ -215,8 +205,16 @@ const UserEdit = ( { attributes, context, setAttributes, isSelected } ) => {
215
205
  isSelected={ isSelected }
216
206
  setAttributes={ setAttributes }
217
207
  />
218
- ) }
219
- </div>
208
+ </a>
209
+ ) : (
210
+ <ResizableAvatar
211
+ attributes={ attributes }
212
+ avatar={ avatar }
213
+ blockProps={ blockProps }
214
+ isSelected={ isSelected }
215
+ setAttributes={ setAttributes }
216
+ />
217
+ ) }
220
218
  </>
221
219
  );
222
220
  };
@@ -10,6 +10,9 @@
10
10
  "attributes": {
11
11
  "ref": {
12
12
  "type": "number"
13
+ },
14
+ "overrides": {
15
+ "type": "object"
13
16
  }
14
17
  },
15
18
  "supports": {
package/src/block/edit.js CHANGED
@@ -18,8 +18,8 @@ import {
18
18
  import { __ } from '@wordpress/i18n';
19
19
  import {
20
20
  useInnerBlocksProps,
21
- __experimentalRecursionProvider as RecursionProvider,
22
- __experimentalUseHasRecursion as useHasRecursion,
21
+ RecursionProvider,
22
+ useHasRecursion,
23
23
  InnerBlocks,
24
24
  useBlockProps,
25
25
  Warning,
@@ -27,7 +27,8 @@ import {
27
27
  store as blockEditorStore,
28
28
  BlockControls,
29
29
  } from '@wordpress/block-editor';
30
- import { getBlockSupport, parse, cloneBlock } from '@wordpress/blocks';
30
+ import { privateApis as patternsPrivateApis } from '@wordpress/patterns';
31
+ import { parse, cloneBlock } from '@wordpress/blocks';
31
32
 
32
33
  /**
33
34
  * Internal dependencies
@@ -35,20 +36,23 @@ import { getBlockSupport, parse, cloneBlock } from '@wordpress/blocks';
35
36
  import { unlock } from '../lock-unlock';
36
37
 
37
38
  const { useLayoutClasses } = unlock( blockEditorPrivateApis );
39
+ const { PARTIAL_SYNCING_SUPPORTED_BLOCKS } = unlock( patternsPrivateApis );
38
40
 
39
41
  function isPartiallySynced( block ) {
40
42
  return (
41
- !! getBlockSupport( block.name, '__experimentalConnections', false ) &&
42
- !! block.attributes.connections?.attributes &&
43
- Object.values( block.attributes.connections.attributes ).some(
44
- ( connection ) => connection.source === 'pattern_attributes'
43
+ Object.keys( PARTIAL_SYNCING_SUPPORTED_BLOCKS ).includes(
44
+ block.name
45
+ ) &&
46
+ !! block.attributes.metadata?.bindings &&
47
+ Object.values( block.attributes.metadata.bindings ).some(
48
+ ( binding ) => binding.source.name === 'pattern_attributes'
45
49
  )
46
50
  );
47
51
  }
48
52
  function getPartiallySyncedAttributes( block ) {
49
- return Object.entries( block.attributes.connections.attributes )
53
+ return Object.entries( block.attributes.metadata.bindings )
50
54
  .filter(
51
- ( [ , connection ] ) => connection.source === 'pattern_attributes'
55
+ ( [ , binding ] ) => binding.source.name === 'pattern_attributes'
52
56
  )
53
57
  .map( ( [ attributeKey ] ) => attributeKey );
54
58
  }
@@ -84,6 +88,26 @@ const useInferredLayout = ( blocks, parentLayout ) => {
84
88
  }, [ blocks, parentLayout ] );
85
89
  };
86
90
 
91
+ /**
92
+ * Enum for patch operations.
93
+ * We use integers here to minimize the size of the serialized data.
94
+ * This has to be deserialized accordingly on the server side.
95
+ * See block-bindings/sources/pattern.php
96
+ */
97
+ const PATCH_OPERATIONS = {
98
+ /** @type {0} */
99
+ Remove: 0,
100
+ /** @type {1} */
101
+ Replace: 1,
102
+ // Other operations are reserved for future use. (e.g. Add)
103
+ };
104
+
105
+ /**
106
+ * @typedef {[typeof PATCH_OPERATIONS.Remove]} RemovePatch
107
+ * @typedef {[typeof PATCH_OPERATIONS.Replace, unknown]} ReplacePatch
108
+ * @typedef {RemovePatch | ReplacePatch} OverridePatch
109
+ */
110
+
87
111
  function applyInitialOverrides( blocks, overrides = {}, defaultValues ) {
88
112
  return blocks.map( ( block ) => {
89
113
  const innerBlocks = applyInitialOverrides(
@@ -100,9 +124,15 @@ function applyInitialOverrides( blocks, overrides = {}, defaultValues ) {
100
124
  defaultValues[ blockId ] ??= {};
101
125
  defaultValues[ blockId ][ attributeKey ] =
102
126
  block.attributes[ attributeKey ];
103
- if ( overrides[ blockId ] ) {
104
- newAttributes[ attributeKey ] =
105
- overrides[ blockId ][ attributeKey ];
127
+ /** @type {OverridePatch} */
128
+ const overrideAttribute = overrides[ blockId ]?.[ attributeKey ];
129
+ if ( ! overrideAttribute ) {
130
+ continue;
131
+ }
132
+ if ( overrideAttribute[ 0 ] === PATCH_OPERATIONS.Remove ) {
133
+ delete newAttributes[ attributeKey ];
134
+ } else if ( overrideAttribute[ 0 ] === PATCH_OPERATIONS.Replace ) {
135
+ newAttributes[ attributeKey ] = overrideAttribute[ 1 ];
106
136
  }
107
137
  }
108
138
  return {
@@ -114,13 +144,14 @@ function applyInitialOverrides( blocks, overrides = {}, defaultValues ) {
114
144
  }
115
145
 
116
146
  function getOverridesFromBlocks( blocks, defaultValues ) {
117
- /** @type {Record<string, Record<string, unknown>>} */
147
+ /** @type {Record<string, Record<string, OverridePatch>>} */
118
148
  const overrides = {};
119
149
  for ( const block of blocks ) {
120
150
  Object.assign(
121
151
  overrides,
122
152
  getOverridesFromBlocks( block.innerBlocks, defaultValues )
123
153
  );
154
+ /** @type {string} */
124
155
  const blockId = block.attributes.metadata?.id;
125
156
  if ( ! isPartiallySynced( block ) || ! blockId ) continue;
126
157
  const attributes = getPartiallySyncedAttributes( block );
@@ -130,8 +161,23 @@ function getOverridesFromBlocks( blocks, defaultValues ) {
130
161
  defaultValues[ blockId ][ attributeKey ]
131
162
  ) {
132
163
  overrides[ blockId ] ??= {};
133
- overrides[ blockId ][ attributeKey ] =
134
- block.attributes[ attributeKey ];
164
+ /**
165
+ * Create a patch operation for the binding attribute.
166
+ * We use a tuple here to minimize the size of the serialized data.
167
+ * The first item is the operation type, the second item is the value if any.
168
+ */
169
+ if ( block.attributes[ attributeKey ] === undefined ) {
170
+ /** @type {RemovePatch} */
171
+ overrides[ blockId ][ attributeKey ] = [
172
+ PATCH_OPERATIONS.Remove,
173
+ ];
174
+ } else {
175
+ /** @type {ReplacePatch} */
176
+ overrides[ blockId ][ attributeKey ] = [
177
+ PATCH_OPERATIONS.Replace,
178
+ block.attributes[ attributeKey ],
179
+ ];
180
+ }
135
181
  }
136
182
  }
137
183
  }
@@ -147,6 +193,13 @@ function setBlockEditMode( setEditMode, blocks, mode ) {
147
193
  } );
148
194
  }
149
195
 
196
+ function getHasOverridableBlocks( blocks ) {
197
+ return blocks.some( ( block ) => {
198
+ if ( isPartiallySynced( block ) ) return true;
199
+ return getHasOverridableBlocks( block.innerBlocks );
200
+ } );
201
+ }
202
+
150
203
  export default function ReusableBlockEdit( {
151
204
  name,
152
205
  attributes: { ref, overrides },
@@ -208,15 +261,23 @@ export default function ReusableBlockEdit( {
208
261
  [ innerBlocks, setBlockEditingMode ]
209
262
  );
210
263
 
211
- // Apply the initial overrides from the pattern block to the inner blocks.
212
- useEffect( () => {
213
- const initialBlocks =
264
+ const hasOverridableBlocks = useMemo(
265
+ () => getHasOverridableBlocks( innerBlocks ),
266
+ [ innerBlocks ]
267
+ );
268
+
269
+ const initialBlocks = useMemo(
270
+ () =>
214
271
  // Clone the blocks to generate new client IDs.
215
272
  editedRecord.blocks?.map( ( block ) => cloneBlock( block ) ) ??
216
273
  ( editedRecord.content && typeof editedRecord.content !== 'function'
217
274
  ? parse( editedRecord.content )
218
- : [] );
275
+ : [] ),
276
+ [ editedRecord.blocks, editedRecord.content ]
277
+ );
219
278
 
279
+ // Apply the initial overrides from the pattern block to the inner blocks.
280
+ useEffect( () => {
220
281
  defaultValuesRef.current = {};
221
282
  const editingMode = getBlockEditingMode( patternClientId );
222
283
  // Replace the contents of the blocks with the overrides.
@@ -237,7 +298,7 @@ export default function ReusableBlockEdit( {
237
298
  }, [
238
299
  __unstableMarkNextChangeAsNotPersistent,
239
300
  patternClientId,
240
- editedRecord,
301
+ initialBlocks,
241
302
  replaceInnerBlocks,
242
303
  registry,
243
304
  getBlockEditingMode,
@@ -293,6 +354,12 @@ export default function ReusableBlockEdit( {
293
354
  editOriginalProps.onClick( event );
294
355
  };
295
356
 
357
+ const resetOverrides = () => {
358
+ if ( overrides ) {
359
+ replaceInnerBlocks( patternClientId, initialBlocks );
360
+ }
361
+ };
362
+
296
363
  let children = null;
297
364
 
298
365
  if ( hasAlreadyRendered ) {
@@ -333,6 +400,21 @@ export default function ReusableBlockEdit( {
333
400
  </ToolbarGroup>
334
401
  </BlockControls>
335
402
  ) }
403
+
404
+ { hasOverridableBlocks && (
405
+ <BlockControls>
406
+ <ToolbarGroup>
407
+ <ToolbarButton
408
+ onClick={ resetOverrides }
409
+ disabled={ ! overrides }
410
+ __experimentalIsFocusable
411
+ >
412
+ { __( 'Reset to original' ) }
413
+ </ToolbarButton>
414
+ </ToolbarGroup>
415
+ </BlockControls>
416
+ ) }
417
+
336
418
  { children === null ? (
337
419
  <div { ...innerBlocksProps } />
338
420
  ) : (
@@ -27,8 +27,8 @@ import {
27
27
  import { useSelect, useDispatch } from '@wordpress/data';
28
28
  import { __, sprintf } from '@wordpress/i18n';
29
29
  import {
30
- __experimentalRecursionProvider as RecursionProvider,
31
- __experimentalUseHasRecursion as useHasRecursion,
30
+ RecursionProvider,
31
+ useHasRecursion,
32
32
  InnerBlocks,
33
33
  Warning,
34
34
  store as blockEditorStore,
@@ -42,8 +42,8 @@ import { store as noticesStore } from '@wordpress/notices';
42
42
  /**
43
43
  * Internal dependencies
44
44
  */
45
- import styles from '../editor.scss';
46
- import EditTitle from '../edit-title';
45
+ import styles from './editor.scss';
46
+ import EditTitle from './edit-title';
47
47
 
48
48
  export default function ReusableBlockEdit( {
49
49
  attributes: { ref },
@@ -8,15 +8,14 @@ import { symbol as icon } from '@wordpress/icons';
8
8
  */
9
9
  import initBlock from '../utils/init-block';
10
10
  import metadata from './block.json';
11
- import editV1 from './v1/edit';
12
- import editV2 from './edit';
11
+ import edit from './edit';
13
12
 
14
13
  const { name } = metadata;
15
14
 
16
15
  export { metadata, name };
17
16
 
18
17
  export const settings = {
19
- edit: window.__experimentalPatternPartialSyncing ? editV2 : editV1,
18
+ edit,
20
19
  icon,
21
20
  };
22
21
 
@@ -46,17 +46,14 @@ function render_block_core_block( $attributes ) {
46
46
  $content = $wp_embed->run_shortcode( $reusable_block->post_content );
47
47
  $content = $wp_embed->autoembed( $content );
48
48
 
49
- $gutenberg_experiments = get_option( 'gutenberg-experiments' );
50
- $has_partial_synced_overrides = $gutenberg_experiments
51
- && array_key_exists( 'gutenberg-pattern-partial-syncing', $gutenberg_experiments )
52
- && isset( $attributes['overrides'] );
49
+ $has_pattern_overrides = isset( $attributes['overrides'] );
53
50
 
54
51
  /**
55
52
  * We set the `pattern/overrides` context through the `render_block_context`
56
53
  * filter so that it is available when a pattern's inner blocks are
57
54
  * rendering via do_blocks given it only receives the inner content.
58
55
  */
59
- if ( $has_partial_synced_overrides ) {
56
+ if ( $has_pattern_overrides ) {
60
57
  $filter_block_context = static function ( $context ) use ( $attributes ) {
61
58
  $context['pattern/overrides'] = $attributes['overrides'];
62
59
  return $context;
@@ -67,7 +64,7 @@ function render_block_core_block( $attributes ) {
67
64
  $content = do_blocks( $content );
68
65
  unset( $seen_refs[ $attributes['ref'] ] );
69
66
 
70
- if ( $has_partial_synced_overrides ) {
67
+ if ( $has_pattern_overrides ) {
71
68
  remove_filter( 'render_block_context', $filter_block_context, 1 );
72
69
  }
73
70
 
@@ -86,28 +83,3 @@ function register_block_core_block() {
86
83
  );
87
84
  }
88
85
  add_action( 'init', 'register_block_core_block' );
89
-
90
- $gutenberg_experiments = get_option( 'gutenberg-experiments' );
91
- if ( $gutenberg_experiments && array_key_exists( 'gutenberg-pattern-partial-syncing', $gutenberg_experiments ) ) {
92
- /**
93
- * Registers the overrides attribute for core/block.
94
- *
95
- * @param array $args Array of arguments for registering a block type.
96
- * @param string $block_name Block name including namespace.
97
- * @return array $args
98
- */
99
- function register_block_core_block_args( $args, $block_name ) {
100
- if ( 'core/block' === $block_name ) {
101
- $args['attributes'] = array_merge(
102
- $args['attributes'],
103
- array(
104
- 'overrides' => array(
105
- 'type' => 'object',
106
- ),
107
- )
108
- );
109
- }
110
- return $args;
111
- }
112
- add_filter( 'register_block_type_args', 'register_block_core_block_args', 10, 2 );
113
- }
@@ -8,6 +8,7 @@
8
8
  "description": "Prompt visitors to take action with a button-style link.",
9
9
  "keywords": [ "link" ],
10
10
  "textdomain": "default",
11
+ "usesContext": [ "pattern/overrides" ],
11
12
  "attributes": {
12
13
  "tagName": {
13
14
  "type": "string",