@wordpress/block-editor 15.23.0 → 16.0.1-next.v.202607070741.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 (363) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/build/autocompleters/block.cjs +10 -2
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/background-image-control/index.cjs +0 -2
  5. package/build/components/background-image-control/index.cjs.map +2 -2
  6. package/build/components/block-inspector/edit-contents.cjs +3 -0
  7. package/build/components/block-inspector/edit-contents.cjs.map +3 -3
  8. package/build/components/block-inspector/index.cjs +2 -3
  9. package/build/components/block-inspector/index.cjs.map +2 -2
  10. package/build/components/block-list/block-invalid-warning.cjs +8 -19
  11. package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
  12. package/build/components/block-styles/use-styles-for-block.cjs +2 -1
  13. package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
  14. package/build/components/block-title/use-block-display-title.cjs +7 -2
  15. package/build/components/block-title/use-block-display-title.cjs.map +2 -2
  16. package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
  17. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  18. package/build/components/block-variation-transforms/index.cjs +0 -1
  19. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  20. package/build/components/child-layout-control/index.cjs +0 -2
  21. package/build/components/child-layout-control/index.cjs.map +2 -2
  22. package/build/components/colors-gradients/control.cjs +5 -5
  23. package/build/components/colors-gradients/control.cjs.map +2 -2
  24. package/build/components/date-format-picker/index.cjs +0 -1
  25. package/build/components/date-format-picker/index.cjs.map +2 -2
  26. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
  27. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
  28. package/build/components/dimensions-tool/scale-tool.cjs +0 -1
  29. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  30. package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
  31. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  32. package/build/components/font-appearance-control/index.cjs +6 -25
  33. package/build/components/font-appearance-control/index.cjs.map +3 -3
  34. package/build/components/font-family/index.cjs +6 -15
  35. package/build/components/font-family/index.cjs.map +3 -3
  36. package/build/components/font-sizes/font-size-picker.cjs +1 -2
  37. package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
  38. package/build/components/global-styles/border-panel.cjs +0 -1
  39. package/build/components/global-styles/border-panel.cjs.map +2 -2
  40. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  41. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  42. package/build/components/global-styles/typography-panel.cjs +4 -10
  43. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  44. package/build/components/height-control/index.cjs +0 -2
  45. package/build/components/height-control/index.cjs.map +2 -2
  46. package/build/components/html-element-control/index.cjs +0 -1
  47. package/build/components/html-element-control/index.cjs.map +2 -2
  48. package/build/components/image-editor/index.cjs +5 -0
  49. package/build/components/image-editor/index.cjs.map +3 -3
  50. package/build/components/image-editor/zoom-dropdown.cjs +0 -1
  51. package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
  52. package/build/components/image-size-control/index.cjs +1 -3
  53. package/build/components/image-size-control/index.cjs.map +2 -2
  54. package/build/components/inner-content/index.cjs +107 -0
  55. package/build/components/inner-content/index.cjs.map +7 -0
  56. package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
  57. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  58. package/build/components/inserter/media-tab/hooks.cjs +34 -6
  59. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  60. package/build/components/inserter/media-tab/media-list.cjs +3 -1
  61. package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
  62. package/build/components/inserter/media-tab/media-panel.cjs +224 -27
  63. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  64. package/build/components/inserter/media-tab/media-preview.cjs +32 -17
  65. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  66. package/build/components/inserter/media-tab/media-tab.cjs +26 -6
  67. package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
  68. package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
  69. package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
  70. package/build/components/inserter/no-results.cjs +2 -2
  71. package/build/components/inserter/no-results.cjs.map +2 -2
  72. package/build/components/inserter/preview-panel.cjs +2 -1
  73. package/build/components/inserter/preview-panel.cjs.map +2 -2
  74. package/build/components/inserter-list-item/index.cjs +8 -2
  75. package/build/components/inserter-list-item/index.cjs.map +2 -2
  76. package/build/components/letter-spacing-control/index.cjs +0 -24
  77. package/build/components/letter-spacing-control/index.cjs.map +3 -3
  78. package/build/components/line-height-control/index.cjs +7 -22
  79. package/build/components/line-height-control/index.cjs.map +3 -3
  80. package/build/components/list-view/block-select-button.cjs +90 -84
  81. package/build/components/list-view/block-select-button.cjs.map +2 -2
  82. package/build/components/list-view/block.cjs +51 -20
  83. package/build/components/list-view/block.cjs.map +2 -2
  84. package/build/components/list-view/expander.cjs +1 -1
  85. package/build/components/list-view/expander.cjs.map +2 -2
  86. package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
  87. package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
  88. package/build/components/observe-typing/index.cjs +4 -3
  89. package/build/components/observe-typing/index.cjs.map +2 -2
  90. package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
  91. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  92. package/build/components/preset-input-control/index.cjs +1 -3
  93. package/build/components/preset-input-control/index.cjs.map +2 -2
  94. package/build/components/resolution-tool/index.cjs +1 -2
  95. package/build/components/resolution-tool/index.cjs.map +2 -2
  96. package/build/components/text-alignment-control/index.cjs +0 -1
  97. package/build/components/text-alignment-control/index.cjs.map +2 -2
  98. package/build/components/text-decoration-control/index.cjs +0 -1
  99. package/build/components/text-decoration-control/index.cjs.map +2 -2
  100. package/build/components/text-indent-control/index.cjs +0 -8
  101. package/build/components/text-indent-control/index.cjs.map +2 -2
  102. package/build/components/text-transform-control/index.cjs +0 -1
  103. package/build/components/text-transform-control/index.cjs.map +2 -2
  104. package/build/components/use-block-display-information/index.cjs +10 -8
  105. package/build/components/use-block-display-information/index.cjs.map +2 -2
  106. package/build/components/use-on-block-drop/index.cjs +3 -7
  107. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  108. package/build/components/writing-mode-control/index.cjs +0 -1
  109. package/build/components/writing-mode-control/index.cjs.map +2 -2
  110. package/build/hooks/font-size.cjs +1 -2
  111. package/build/hooks/font-size.cjs.map +2 -2
  112. package/build/hooks/layout.cjs +5 -3
  113. package/build/hooks/layout.cjs.map +2 -2
  114. package/build/hooks/position.cjs +36 -16
  115. package/build/hooks/position.cjs.map +2 -2
  116. package/build/hooks/states.cjs +6 -9
  117. package/build/hooks/states.cjs.map +2 -2
  118. package/build/layouts/constrained.cjs +21 -21
  119. package/build/layouts/constrained.cjs.map +2 -2
  120. package/build/layouts/flex.cjs +0 -3
  121. package/build/layouts/flex.cjs.map +2 -2
  122. package/build/layouts/grid.cjs +51 -9
  123. package/build/layouts/grid.cjs.map +2 -2
  124. package/build/private-apis.cjs +4 -1
  125. package/build/private-apis.cjs.map +3 -3
  126. package/build/store/actions.cjs.map +2 -2
  127. package/build/store/private-keys.cjs +3 -0
  128. package/build/store/private-keys.cjs.map +2 -2
  129. package/build/store/private-selectors.cjs +72 -4
  130. package/build/store/private-selectors.cjs.map +2 -2
  131. package/build/store/selectors.cjs +13 -0
  132. package/build/store/selectors.cjs.map +2 -2
  133. package/build-module/autocompleters/block.mjs +10 -2
  134. package/build-module/autocompleters/block.mjs.map +2 -2
  135. package/build-module/components/background-image-control/index.mjs +0 -2
  136. package/build-module/components/background-image-control/index.mjs.map +2 -2
  137. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  138. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  139. package/build-module/components/block-inspector/index.mjs +2 -3
  140. package/build-module/components/block-inspector/index.mjs.map +2 -2
  141. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  142. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  143. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  144. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  145. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  146. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  147. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  148. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  149. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  150. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  151. package/build-module/components/child-layout-control/index.mjs +0 -2
  152. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  153. package/build-module/components/colors-gradients/control.mjs +5 -5
  154. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  155. package/build-module/components/date-format-picker/index.mjs +0 -1
  156. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  157. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  158. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  159. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  160. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  161. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  162. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  163. package/build-module/components/font-appearance-control/index.mjs +6 -15
  164. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  165. package/build-module/components/font-family/index.mjs +6 -15
  166. package/build-module/components/font-family/index.mjs.map +2 -2
  167. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  168. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  169. package/build-module/components/global-styles/border-panel.mjs +0 -1
  170. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  171. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  172. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  173. package/build-module/components/global-styles/typography-panel.mjs +4 -10
  174. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  175. package/build-module/components/height-control/index.mjs +0 -2
  176. package/build-module/components/height-control/index.mjs.map +2 -2
  177. package/build-module/components/html-element-control/index.mjs +0 -1
  178. package/build-module/components/html-element-control/index.mjs.map +2 -2
  179. package/build-module/components/image-editor/index.mjs +5 -0
  180. package/build-module/components/image-editor/index.mjs.map +2 -2
  181. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  182. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  183. package/build-module/components/image-size-control/index.mjs +1 -3
  184. package/build-module/components/image-size-control/index.mjs.map +2 -2
  185. package/build-module/components/inner-content/index.mjs +82 -0
  186. package/build-module/components/inner-content/index.mjs.map +7 -0
  187. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  188. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  189. package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
  190. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  191. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  192. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  193. package/build-module/components/inserter/media-tab/media-panel.mjs +227 -30
  194. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  195. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  196. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  197. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  198. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  199. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  200. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  201. package/build-module/components/inserter/no-results.mjs +2 -2
  202. package/build-module/components/inserter/no-results.mjs.map +2 -2
  203. package/build-module/components/inserter/preview-panel.mjs +2 -1
  204. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  205. package/build-module/components/inserter-list-item/index.mjs +8 -2
  206. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  207. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  208. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  209. package/build-module/components/line-height-control/index.mjs +7 -12
  210. package/build-module/components/line-height-control/index.mjs.map +2 -2
  211. package/build-module/components/list-view/block-select-button.mjs +90 -84
  212. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  213. package/build-module/components/list-view/block.mjs +51 -20
  214. package/build-module/components/list-view/block.mjs.map +2 -2
  215. package/build-module/components/list-view/expander.mjs +1 -1
  216. package/build-module/components/list-view/expander.mjs.map +2 -2
  217. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  218. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  219. package/build-module/components/observe-typing/index.mjs +4 -3
  220. package/build-module/components/observe-typing/index.mjs.map +2 -2
  221. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  222. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  223. package/build-module/components/preset-input-control/index.mjs +1 -3
  224. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  225. package/build-module/components/resolution-tool/index.mjs +1 -2
  226. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  227. package/build-module/components/text-alignment-control/index.mjs +0 -1
  228. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  229. package/build-module/components/text-decoration-control/index.mjs +0 -1
  230. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  231. package/build-module/components/text-indent-control/index.mjs +0 -8
  232. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  233. package/build-module/components/text-transform-control/index.mjs +0 -1
  234. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  235. package/build-module/components/use-block-display-information/index.mjs +10 -8
  236. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  237. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  238. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  239. package/build-module/components/writing-mode-control/index.mjs +0 -1
  240. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  241. package/build-module/hooks/font-size.mjs +1 -2
  242. package/build-module/hooks/font-size.mjs.map +2 -2
  243. package/build-module/hooks/layout.mjs +4 -3
  244. package/build-module/hooks/layout.mjs.map +2 -2
  245. package/build-module/hooks/position.mjs +38 -18
  246. package/build-module/hooks/position.mjs.map +2 -2
  247. package/build-module/hooks/states.mjs +6 -9
  248. package/build-module/hooks/states.mjs.map +2 -2
  249. package/build-module/layouts/constrained.mjs +21 -21
  250. package/build-module/layouts/constrained.mjs.map +2 -2
  251. package/build-module/layouts/flex.mjs +0 -3
  252. package/build-module/layouts/flex.mjs.map +2 -2
  253. package/build-module/layouts/grid.mjs +52 -9
  254. package/build-module/layouts/grid.mjs.map +2 -2
  255. package/build-module/private-apis.mjs +5 -1
  256. package/build-module/private-apis.mjs.map +2 -2
  257. package/build-module/store/actions.mjs.map +2 -2
  258. package/build-module/store/private-keys.mjs +2 -0
  259. package/build-module/store/private-keys.mjs.map +2 -2
  260. package/build-module/store/private-selectors.mjs +71 -4
  261. package/build-module/store/private-selectors.mjs.map +2 -2
  262. package/build-module/store/selectors.mjs +13 -0
  263. package/build-module/store/selectors.mjs.map +2 -2
  264. package/build-style/content-rtl.css +11 -5
  265. package/build-style/content.css +11 -5
  266. package/build-style/style-rtl.css +113 -3
  267. package/build-style/style.css +113 -3
  268. package/package.json +43 -41
  269. package/src/autocompleters/block.js +10 -3
  270. package/src/autocompleters/test/block.js +53 -0
  271. package/src/components/background-image-control/index.js +0 -2
  272. package/src/components/block-inspector/edit-contents.js +5 -1
  273. package/src/components/block-inspector/index.js +3 -2
  274. package/src/components/block-list/block-invalid-warning.js +8 -19
  275. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  276. package/src/components/block-styles/use-styles-for-block.js +1 -0
  277. package/src/components/block-title/use-block-display-title.js +7 -2
  278. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  279. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  280. package/src/components/block-variation-transforms/index.js +0 -1
  281. package/src/components/child-layout-control/index.js +0 -2
  282. package/src/components/color-palette/test/__snapshots__/control.js.snap +11 -106
  283. package/src/components/colors-gradients/control.js +4 -4
  284. package/src/components/colors-gradients/style.scss +2 -2
  285. package/src/components/date-format-picker/index.js +0 -1
  286. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  287. package/src/components/dimensions-tool/scale-tool.js +0 -1
  288. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  289. package/src/components/font-appearance-control/index.js +6 -19
  290. package/src/components/font-family/README.md +0 -9
  291. package/src/components/font-family/index.js +6 -19
  292. package/src/components/font-family/stories/index.story.jsx +0 -1
  293. package/src/components/font-sizes/font-size-picker.js +0 -1
  294. package/src/components/global-styles/border-panel.js +0 -1
  295. package/src/components/global-styles/dimensions-panel.js +0 -3
  296. package/src/components/global-styles/typography-panel.js +0 -6
  297. package/src/components/height-control/index.js +0 -2
  298. package/src/components/html-element-control/index.js +0 -1
  299. package/src/components/iframe/content.scss +3 -3
  300. package/src/components/image-editor/index.js +22 -0
  301. package/src/components/image-editor/zoom-dropdown.js +0 -1
  302. package/src/components/image-size-control/index.js +0 -2
  303. package/src/components/inner-content/index.js +119 -0
  304. package/src/components/inner-content/test/index.js +81 -0
  305. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  306. package/src/components/inserter/media-tab/hooks.js +59 -9
  307. package/src/components/inserter/media-tab/media-list.js +2 -0
  308. package/src/components/inserter/media-tab/media-panel.js +256 -17
  309. package/src/components/inserter/media-tab/media-preview.js +34 -17
  310. package/src/components/inserter/media-tab/media-tab.js +20 -2
  311. package/src/components/inserter/media-tab/test/hooks.js +204 -0
  312. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  313. package/src/components/inserter/no-results.js +2 -2
  314. package/src/components/inserter/preview-panel.js +1 -0
  315. package/src/components/inserter/style.scss +110 -1
  316. package/src/components/inserter-list-item/index.js +8 -2
  317. package/src/components/letter-spacing-control/README.md +0 -8
  318. package/src/components/letter-spacing-control/index.js +5 -23
  319. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  320. package/src/components/line-height-control/README.md +0 -8
  321. package/src/components/line-height-control/index.js +7 -16
  322. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  323. package/src/components/line-height-control/test/index.js +1 -7
  324. package/src/components/link-picker/test/index.js +3 -1
  325. package/src/components/list-view/block-select-button.js +5 -1
  326. package/src/components/list-view/block.js +57 -20
  327. package/src/components/list-view/expander.js +5 -1
  328. package/src/components/list-view/style.scss +19 -0
  329. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  330. package/src/components/observe-typing/index.js +9 -4
  331. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  332. package/src/components/preset-input-control/index.js +0 -2
  333. package/src/components/resolution-tool/index.js +0 -1
  334. package/src/components/responsive-block-control/test/index.js +1 -5
  335. package/src/components/text-alignment-control/index.js +0 -1
  336. package/src/components/text-decoration-control/index.js +0 -1
  337. package/src/components/text-indent-control/index.js +7 -16
  338. package/src/components/text-transform-control/index.js +0 -1
  339. package/src/components/use-block-display-information/index.js +9 -13
  340. package/src/components/use-block-display-information/test/index.js +47 -9
  341. package/src/components/use-on-block-drop/index.js +4 -7
  342. package/src/components/writing-mode-control/index.js +0 -1
  343. package/src/hooks/block-hooks.scss +15 -0
  344. package/src/hooks/font-size.js +0 -1
  345. package/src/hooks/layout.js +5 -4
  346. package/src/hooks/position.js +44 -23
  347. package/src/hooks/states.js +6 -12
  348. package/src/hooks/test/cross-origin-isolation.js +0 -4
  349. package/src/hooks/test/layout.js +75 -1
  350. package/src/layouts/constrained.js +51 -28
  351. package/src/layouts/flex.js +0 -3
  352. package/src/layouts/grid.js +59 -7
  353. package/src/layouts/test/constrained.js +91 -0
  354. package/src/layouts/test/grid.js +71 -0
  355. package/src/private-apis.js +4 -0
  356. package/src/store/actions.js +1 -0
  357. package/src/store/private-keys.js +1 -0
  358. package/src/store/private-selectors.js +141 -4
  359. package/src/store/selectors.js +41 -0
  360. package/src/store/test/private-selectors.js +422 -0
  361. package/src/store/test/reducer.js +11 -11
  362. package/src/store/test/selectors.js +133 -0
  363. package/src/style.scss +1 -0
@@ -49,6 +49,5 @@ export const Default = {
49
49
  slug: 'system-font',
50
50
  },
51
51
  ],
52
- __next40pxDefaultSize: true,
53
52
  },
54
53
  };
@@ -19,7 +19,6 @@ function FontSizePicker( props ) {
19
19
  { ...props }
20
20
  fontSizes={ fontSizes }
21
21
  disableCustomFontSizes={ ! customFontSize }
22
- __next40pxDefaultSize
23
22
  />
24
23
  );
25
24
  }
@@ -279,7 +279,6 @@ export default function BorderPanel( {
279
279
  popoverPlacement="left-start"
280
280
  value={ border }
281
281
  __experimentalIsRenderedInSidebar
282
- size="__unstable-large"
283
282
  hideLabelFromVision={ ! hasShadowControl }
284
283
  label={ __( 'Border' ) }
285
284
  />
@@ -544,7 +544,6 @@ export default function DimensionsPanel( {
544
544
  panelId={ panelId }
545
545
  >
546
546
  <UnitControl
547
- __next40pxDefaultSize
548
547
  label={ __( 'Content width' ) }
549
548
  labelPosition="top"
550
549
  value={ contentSizeValue || '' }
@@ -571,7 +570,6 @@ export default function DimensionsPanel( {
571
570
  panelId={ panelId }
572
571
  >
573
572
  <UnitControl
574
- __next40pxDefaultSize
575
573
  label={ __( 'Wide width' ) }
576
574
  labelPosition="top"
577
575
  value={ wideSizeValue || '' }
@@ -710,7 +708,6 @@ export default function DimensionsPanel( {
710
708
  />
711
709
  ) : (
712
710
  <UnitControl
713
- __next40pxDefaultSize
714
711
  label={ __( 'Block spacing' ) }
715
712
  min={ 0 }
716
713
  onChange={ setGapValue }
@@ -605,7 +605,6 @@ export default function TypographyPanel( {
605
605
  fontFamilies={ fontFamilies }
606
606
  value={ fontFamily }
607
607
  onChange={ setFontFamily }
608
- size="__unstable-large"
609
608
  />
610
609
  </ToolsPanelItem>
611
610
  ) }
@@ -625,7 +624,6 @@ export default function TypographyPanel( {
625
624
  disableCustomFontSizes={ disableCustomFontSizes }
626
625
  withReset={ false }
627
626
  withSlider
628
- size="__unstable-large"
629
627
  />
630
628
  </ToolsPanelItem>
631
629
  ) }
@@ -646,7 +644,6 @@ export default function TypographyPanel( {
646
644
  hasFontStyles={ hasFontStyles }
647
645
  hasFontWeights={ hasFontWeights }
648
646
  fontFamilyFaces={ fontFamilyFaces }
649
- size="__unstable-large"
650
647
  />
651
648
  </ToolsPanelItem>
652
649
  ) }
@@ -663,7 +660,6 @@ export default function TypographyPanel( {
663
660
  __unstableInputWidth="auto"
664
661
  value={ lineHeight }
665
662
  onChange={ setLineHeight }
666
- size="__unstable-large"
667
663
  />
668
664
  </ToolsPanelItem>
669
665
  ) }
@@ -679,7 +675,6 @@ export default function TypographyPanel( {
679
675
  <LetterSpacingControl
680
676
  value={ letterSpacing }
681
677
  onChange={ setLetterSpacing }
682
- size="__unstable-large"
683
678
  __unstableInputWidth="auto"
684
679
  />
685
680
  </ToolsPanelItem>
@@ -695,7 +690,6 @@ export default function TypographyPanel( {
695
690
  <TextIndentControl
696
691
  value={ textIndent }
697
692
  onChange={ setTextIndentValue }
698
- size="__unstable-large"
699
693
  __unstableInputWidth="auto"
700
694
  withSlider
701
695
  hasBottomMargin={ isGlobalStyles }
@@ -164,7 +164,6 @@ export default function HeightControl( {
164
164
  onChange={ onChange }
165
165
  onUnitChange={ handleUnitChange }
166
166
  min={ 0 }
167
- size="__unstable-large"
168
167
  label={ label }
169
168
  hideLabelFromVision
170
169
  />
@@ -172,7 +171,6 @@ export default function HeightControl( {
172
171
  <FlexItem isBlock>
173
172
  <Spacer marginX={ 2 } marginBottom={ 0 }>
174
173
  <RangeControl
175
- __next40pxDefaultSize
176
174
  value={ customRangeValue }
177
175
  min={ 0 }
178
176
  max={
@@ -88,7 +88,6 @@ export default function HTMLElementControl( {
88
88
  return (
89
89
  <VStack spacing={ 2 } className="block-editor-html-element-control">
90
90
  <SelectControl
91
- __next40pxDefaultSize
92
91
  label={ __( 'HTML element' ) }
93
92
  options={ modifiedOptions }
94
93
  value={ tagName }
@@ -18,8 +18,8 @@
18
18
  }
19
19
 
20
20
  &.zoom-out-animation {
21
- $scroll-top: var(--wp-block-editor-iframe-zoom-out-scroll-top, 0);
22
- $scroll-top-next: var(--wp-block-editor-iframe-zoom-out-scroll-top-next, 0);
21
+ $scroll-top: var(--wp-block-editor-iframe-zoom-out-scroll-top, 0px);
22
+ $scroll-top-next: var(--wp-block-editor-iframe-zoom-out-scroll-top-next, 0px);
23
23
  $overflow-behavior: var(--wp-block-editor-iframe-zoom-out-overflow-behavior, scroll);
24
24
 
25
25
  position: fixed;
@@ -34,7 +34,7 @@
34
34
 
35
35
  &.is-zoomed-out {
36
36
  $scale: var(--wp-block-editor-iframe-zoom-out-scale, 1);
37
- $frame-size: var(--wp-block-editor-iframe-zoom-out-frame-size, 0);
37
+ $frame-size: var(--wp-block-editor-iframe-zoom-out-frame-size, 0px);
38
38
  $inner-height: var(--wp-block-editor-iframe-zoom-out-inner-height);
39
39
  $content-height: var(--wp-block-editor-iframe-zoom-out-content-height);
40
40
  $scale-container-width: var(--wp-block-editor-iframe-zoom-out-scale-container-width);
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { ToolbarGroup, ToolbarItem } from '@wordpress/components';
5
+ import deprecated from '@wordpress/deprecated';
5
6
  import { ImageCropperProvider } from '@wordpress/image-cropper';
6
7
 
7
8
  /**
@@ -15,6 +16,22 @@ import ZoomDropdown from './zoom-dropdown';
15
16
  import RotationButton from './rotation-button';
16
17
  import FormControls from './form-controls';
17
18
 
19
+ /**
20
+ * @deprecated since 7.1. The Media Editor modal is now the default crop
21
+ * experience for core blocks. This component (exported as
22
+ * `__experimentalImageEditor`) will be removed in a future major release.
23
+ *
24
+ * @param {Object} root0 Component props.
25
+ * @param {number} root0.id Media attachment ID.
26
+ * @param {string} root0.url Media URL.
27
+ * @param {number} root0.width Rendered image width.
28
+ * @param {number} root0.height Rendered image height.
29
+ * @param {number} root0.naturalHeight Natural image height.
30
+ * @param {number} root0.naturalWidth Natural image width.
31
+ * @param {Function} root0.onSaveImage Callback to save image attributes.
32
+ * @param {Function} root0.onFinishEditing Callback when editing finishes.
33
+ * @param {Object} root0.borderProps Border classes and styles.
34
+ */
18
35
  export default function ImageEditor( {
19
36
  id,
20
37
  url,
@@ -26,6 +43,11 @@ export default function ImageEditor( {
26
43
  onFinishEditing,
27
44
  borderProps,
28
45
  } ) {
46
+ deprecated( 'wp.blockEditor.__experimentalImageEditor', {
47
+ since: '7.1',
48
+ hint: 'The Media Editor modal is now the default crop experience for core blocks. This component will be removed in a future major release.',
49
+ } );
50
+
29
51
  return (
30
52
  <ImageCropperProvider>
31
53
  <ImageEditingProvider
@@ -34,7 +34,6 @@ export default function ZoomDropdown() {
34
34
  renderContent={ () => (
35
35
  <DropdownContentWrapper paddingSize="medium">
36
36
  <RangeControl
37
- __next40pxDefaultSize
38
37
  label={ __( 'Zoom' ) }
39
38
  min={ MIN_ZOOM }
40
39
  max={ MAX_ZOOM }
@@ -96,7 +96,6 @@ export default function ImageSizeControl( {
96
96
  options={ imageSizeOptions }
97
97
  onChange={ onChangeImage }
98
98
  help={ imageSizeHelp }
99
- size="__unstable-large"
100
99
  />
101
100
  ) }
102
101
  { isResizable && (
@@ -127,7 +126,6 @@ export default function ImageSizeControl( {
127
126
  onChange={ handleUpdateDimensions }
128
127
  value={ selectedValue }
129
128
  isBlock
130
- __next40pxDefaultSize
131
129
  >
132
130
  { IMAGE_SIZE_PRESETS.map( ( scale ) => {
133
131
  return (
@@ -0,0 +1,119 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ createPortal,
6
+ useLayoutEffect,
7
+ useMemo,
8
+ useRef,
9
+ useState,
10
+ } from '@wordpress/element';
11
+ import { AsyncModeProvider, useSelect } from '@wordpress/data';
12
+ import { safeHTML } from '@wordpress/dom';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { store as blockEditorStore } from '../../store';
18
+ import BlockListBlock from '../block-list/block';
19
+ import { LayoutProvider } from '../block-list/layout';
20
+
21
+ const SLOT_TAG_NAME = 'wp-inner-block-slot';
22
+
23
+ // The static markup surrounding the inner blocks is arbitrary HTML the block
24
+ // editor doesn't manage, so it provides no layout context: no alignments are
25
+ // available to the inner blocks.
26
+ const LAYOUT = { type: 'default', alignments: [] };
27
+
28
+ /**
29
+ * Renders the static HTML fragments of a block with the `innerContent`
30
+ * support, mounting each inner block at the position of its `null`
31
+ * placeholder within the static markup.
32
+ *
33
+ * Unlike `InnerBlocks`, the rendered blocks are not a contiguous list: they
34
+ * live at arbitrary positions inside markup the block editor doesn't manage.
35
+ * The static fragments are sanitized with `safeHTML` before being injected
36
+ * into the canvas — the same treatment block save content receives elsewhere
37
+ * in the editor — and the inner blocks are portalled into placeholder
38
+ * elements. Inner blocks are locked: they can be edited in place but not
39
+ * moved, removed, or added to.
40
+ *
41
+ * @param {Object} props Component props.
42
+ * @param {string} props.clientId Client ID of the block whose inner content
43
+ * should be rendered.
44
+ */
45
+ export default function InnerContent( { clientId } ) {
46
+ const { innerContent, order, selectedClientIds } = useSelect(
47
+ ( select ) => {
48
+ const { getBlock, getBlockOrder, getSelectedBlockClientIds } =
49
+ select( blockEditorStore );
50
+ return {
51
+ innerContent: getBlock( clientId )?.innerContent,
52
+ order: getBlockOrder( clientId ),
53
+ selectedClientIds: getSelectedBlockClientIds(),
54
+ };
55
+ },
56
+ [ clientId ]
57
+ );
58
+ const html = useMemo( () => {
59
+ let slotIndex = 0;
60
+ return ( innerContent ?? [] )
61
+ .map( ( item ) =>
62
+ item === null
63
+ ? `<${ SLOT_TAG_NAME } data-slot-index="${ slotIndex++ }" style="display: contents"></${ SLOT_TAG_NAME }>`
64
+ : item
65
+ )
66
+ .join( '' );
67
+ }, [ innerContent ] );
68
+
69
+ const containerRef = useRef();
70
+ const [ slots, setSlots ] = useState( [] );
71
+
72
+ useLayoutEffect( () => {
73
+ const container = containerRef.current;
74
+
75
+ // Sanitize before injecting into the canvas: `safeHTML` removes
76
+ // `<script>` elements and inline event handlers, matching how block
77
+ // save content is rendered elsewhere in the editor.
78
+ container.innerHTML = safeHTML( html );
79
+
80
+ setSlots(
81
+ Array.from( container.querySelectorAll( SLOT_TAG_NAME ) ).sort(
82
+ ( a, b ) =>
83
+ Number( a.dataset.slotIndex ) -
84
+ Number( b.dataset.slotIndex )
85
+ )
86
+ );
87
+ }, [ html ] );
88
+
89
+ return (
90
+ <LayoutProvider value={ LAYOUT }>
91
+ <div
92
+ ref={ containerRef }
93
+ className="block-editor-inner-content"
94
+ style={ { display: 'contents' } }
95
+ />
96
+ { order.map( ( childClientId, index ) =>
97
+ slots[ index ]
98
+ ? createPortal(
99
+ // Render the selected block synchronously, as the block list does.
100
+ <AsyncModeProvider
101
+ value={
102
+ ! selectedClientIds.includes(
103
+ childClientId
104
+ )
105
+ }
106
+ >
107
+ <BlockListBlock
108
+ rootClientId={ clientId }
109
+ clientId={ childClientId }
110
+ />
111
+ </AsyncModeProvider>,
112
+ slots[ index ],
113
+ childClientId
114
+ )
115
+ : null
116
+ ) }
117
+ </LayoutProvider>
118
+ );
119
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render } from '@testing-library/react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import {
10
+ createBlock,
11
+ registerBlockType,
12
+ unregisterBlockType,
13
+ } from '@wordpress/blocks';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import InnerContent from '../';
19
+ import { BlockEditorProvider } from '../../provider';
20
+
21
+ const BLOCK_NAME = 'core/html';
22
+
23
+ // These tests inspect the raw injected DOM to verify the static markup is
24
+ // sanitized before being added to the editor canvas, so direct node access is
25
+ // intentional.
26
+ /* eslint-disable testing-library/no-node-access, testing-library/no-container, testing-library/render-result-naming-convention */
27
+
28
+ function renderWithInnerContent( innerContent ) {
29
+ const block = createBlock( BLOCK_NAME, {}, [], innerContent );
30
+ const { container } = render(
31
+ <BlockEditorProvider value={ [ block ] }>
32
+ <InnerContent clientId={ block.clientId } />
33
+ </BlockEditorProvider>
34
+ );
35
+ return container.querySelector( '.block-editor-inner-content' );
36
+ }
37
+
38
+ describe( 'InnerContent', () => {
39
+ beforeAll( () => {
40
+ registerBlockType( BLOCK_NAME, {
41
+ apiVersion: 3,
42
+ title: 'Custom HTML',
43
+ category: 'text',
44
+ save: () => null,
45
+ } );
46
+ } );
47
+
48
+ afterAll( () => {
49
+ unregisterBlockType( BLOCK_NAME );
50
+ } );
51
+
52
+ it( 'renders the static fragments into the canvas', () => {
53
+ const root = renderWithInnerContent( [
54
+ '<div class="banner"><h1>Static heading</h1></div>',
55
+ ] );
56
+
57
+ expect( root.querySelector( 'h1' ) ).toHaveTextContent(
58
+ 'Static heading'
59
+ );
60
+ } );
61
+
62
+ it( 'strips script elements from the static fragments', () => {
63
+ const root = renderWithInnerContent( [
64
+ '<div><script>window.__innerContentRan = true;</script>Safe</div>',
65
+ ] );
66
+
67
+ expect( root.querySelector( 'script' ) ).toBeNull();
68
+ expect( root ).toHaveTextContent( 'Safe' );
69
+ } );
70
+
71
+ it( 'strips inline event handlers from the static fragments', () => {
72
+ const root = renderWithInnerContent( [
73
+ '<button onclick="alert(1)">Click</button>',
74
+ ] );
75
+
76
+ expect( root.querySelector( '[onclick]' ) ).toBeNull();
77
+ expect( root.querySelector( 'button' ) ).toHaveTextContent( 'Click' );
78
+ } );
79
+ } );
80
+
81
+ /* eslint-enable testing-library/no-node-access, testing-library/no-container, testing-library/render-result-naming-convention */
@@ -54,7 +54,14 @@ const useBlockTypesState = ( rootClientId, onInsert, isQuick ) => {
54
54
 
55
55
  const onSelectItem = useCallback(
56
56
  (
57
- { name, initialAttributes, innerBlocks, syncStatus, content },
57
+ {
58
+ name,
59
+ initialAttributes,
60
+ innerBlocks,
61
+ innerContent,
62
+ syncStatus,
63
+ content,
64
+ },
58
65
  shouldFocusBlock
59
66
  ) => {
60
67
  const destinationClientId = getClosestAllowedInsertionPoint(
@@ -85,7 +92,8 @@ const useBlockTypesState = ( rootClientId, onInsert, isQuick ) => {
85
92
  : createBlock(
86
93
  name,
87
94
  initialAttributes,
88
- createBlocksFromInnerBlocksTemplate( innerBlocks )
95
+ createBlocksFromInnerBlocksTemplate( innerBlocks ),
96
+ innerContent
89
97
  );
90
98
  onInsert(
91
99
  insertedBlock,
@@ -17,11 +17,13 @@ import { unlock } from '../../../lock-unlock';
17
17
  * Fetches media items based on the provided category.
18
18
  * Each media category is responsible for providing a `fetch` function.
19
19
  *
20
- * @param {Object} category The media category to fetch results for.
21
- * @param {InserterMediaRequest} query The query args to use for the request.
20
+ * @param {Object} category The media category to fetch results for.
21
+ * @param {InserterMediaRequest} query The query args to use for the request.
22
+ * @param {any} refreshKey Optional value that, when changed, forces
23
+ * a refetch (e.g. after attaching/detaching).
22
24
  * @return {InserterMediaItem[]} The media results.
23
25
  */
24
- export function useMediaResults( category, query = {} ) {
26
+ export function useMediaResults( category, query = {}, refreshKey ) {
25
27
  const [ mediaList, setMediaList ] = useState();
26
28
  const [ isLoading, setIsLoading ] = useState( false );
27
29
  // We need to keep track of the last request made because
@@ -32,25 +34,70 @@ export function useMediaResults( category, query = {} ) {
32
34
  // requests, but we don't for now as it involves adding support
33
35
  // for this to `core-data` package.
34
36
  const lastRequestRef = useRef();
37
+ const lastQueryKeyRef = useRef();
38
+ const lastFetchRef = useRef();
35
39
  useEffect( () => {
36
40
  ( async () => {
37
41
  const key = JSON.stringify( {
38
42
  category: category.name,
39
43
  ...query,
40
44
  } );
41
- lastRequestRef.current = key;
45
+ // Unique token so identical-query refreshes can't apply stale results.
46
+ const request = {};
47
+ lastRequestRef.current = request;
42
48
  setIsLoading( true );
43
- setMediaList( [] ); // Empty the previous results.
49
+ // Only clear the previous results when the category source or query
50
+ // changes, not on a manual refresh (a `refreshKey` bump after
51
+ // attach/detach). Keeping them lets the panel dim the existing grid
52
+ // during the refetch instead of blanking it.
53
+ if (
54
+ lastQueryKeyRef.current !== key ||
55
+ lastFetchRef.current !== category.fetch
56
+ ) {
57
+ setMediaList( [] );
58
+ }
59
+ lastQueryKeyRef.current = key;
60
+ lastFetchRef.current = category.fetch;
44
61
  const _media = await category.fetch?.( query );
45
- if ( key === lastRequestRef.current ) {
62
+ if ( request === lastRequestRef.current ) {
46
63
  setMediaList( _media );
47
64
  setIsLoading( false );
48
65
  }
49
66
  } )();
50
- }, [ category.name, ...Object.values( query ) ] );
67
+ }, [
68
+ category.name,
69
+ category.fetch,
70
+ ...Object.values( query ),
71
+ refreshKey,
72
+ ] );
51
73
  return { mediaList, isLoading };
52
74
  }
53
75
 
76
+ /**
77
+ * Delays surfacing a loading state until a request has been in flight for
78
+ * `delay` ms, so brief operations (e.g. a quick attach/detach refetch) don't
79
+ * flash a loading indicator at all. Mirrors the DataViews `useDelayedLoading`
80
+ * hook.
81
+ *
82
+ * @param {boolean} isLoading Whether a request is currently in flight.
83
+ * @param {number} delay Milliseconds to wait before showing the loader.
84
+ * @return {boolean} Whether the loading state should be shown yet.
85
+ */
86
+ export function useDelayedLoading( isLoading, delay = 400 ) {
87
+ const [ showLoading, setShowLoading ] = useState( false );
88
+ useEffect( () => {
89
+ if ( ! isLoading ) {
90
+ return undefined;
91
+ }
92
+ const timeout = setTimeout( () => setShowLoading( true ), delay );
93
+ return () => {
94
+ clearTimeout( timeout );
95
+ setShowLoading( false );
96
+ };
97
+ }, [ isLoading, delay ] );
98
+ return showLoading;
99
+ }
100
+
54
101
  export function useMediaCategories( rootClientId ) {
55
102
  const [ categories, setCategories ] = useState( [] );
56
103
 
@@ -110,7 +157,9 @@ export function useMediaCategories( rootClientId ) {
110
157
  );
111
158
  // We need to filter out categories that don't have any media items or
112
159
  // whose corresponding block type is not allowed to be inserted, based
113
- // on the category's `mediaType`.
160
+ // on the category's `mediaType`. A category that provides an
161
+ // `emptyMessage` stays in the list even when empty, so it can show
162
+ // that message (e.g. Attachments, to expose its "Attach" action).
114
163
  const canInsertMediaType = {
115
164
  image: canInsertImage,
116
165
  video: canInsertVideo,
@@ -119,7 +168,8 @@ export function useMediaCategories( rootClientId ) {
119
168
  inserterMediaCategories.forEach( ( category ) => {
120
169
  if (
121
170
  canInsertMediaType[ category.mediaType ] &&
122
- categoriesHaveMedia.get( category.name )
171
+ ( categoriesHaveMedia.get( category.name ) ||
172
+ category.emptyMessage )
123
173
  ) {
124
174
  _categories.push( category );
125
175
  }
@@ -13,6 +13,7 @@ function MediaList( {
13
13
  mediaList,
14
14
  category,
15
15
  onClick,
16
+ onDetach,
16
17
  label = __( 'Media List' ),
17
18
  } ) {
18
19
  return (
@@ -27,6 +28,7 @@ function MediaList( {
27
28
  media={ media }
28
29
  category={ category }
29
30
  onClick={ onClick }
31
+ onDetach={ onDetach }
30
32
  />
31
33
  ) ) }
32
34
  </Composite>