@wordpress/block-editor 12.4.0 → 12.6.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 (524) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -0
  3. package/build/components/block-draggable/index.js +6 -3
  4. package/build/components/block-draggable/index.js.map +1 -1
  5. package/build/components/block-draggable/index.native.js +2 -2
  6. package/build/components/block-draggable/index.native.js.map +1 -1
  7. package/build/components/block-edit/edit.js +25 -13
  8. package/build/components/block-edit/edit.js.map +1 -1
  9. package/build/components/block-heading-level-dropdown/heading-level-icon.js +10 -2
  10. package/build/components/block-heading-level-dropdown/heading-level-icon.js.map +1 -1
  11. package/build/components/block-heading-level-dropdown/index.native.js +4 -3
  12. package/build/components/block-heading-level-dropdown/index.native.js.map +1 -1
  13. package/build/components/block-list/block-outline.native.js +14 -18
  14. package/build/components/block-list/block-outline.native.js.map +1 -1
  15. package/build/components/block-list/block.native.js +21 -42
  16. package/build/components/block-list/block.native.js.map +1 -1
  17. package/build/components/block-lock/toolbar.js +25 -6
  18. package/build/components/block-lock/toolbar.js.map +1 -1
  19. package/build/components/block-mover/index.native.js +1 -1
  20. package/build/components/block-mover/index.native.js.map +1 -1
  21. package/build/components/block-parent-selector/index.js +8 -5
  22. package/build/components/block-parent-selector/index.js.map +1 -1
  23. package/build/components/block-removal-warning-modal/index.js +15 -25
  24. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  25. package/build/components/block-settings/button.native.js +2 -2
  26. package/build/components/block-settings/button.native.js.map +1 -1
  27. package/build/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +10 -11
  28. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -0
  29. package/build/components/block-toolbar/index.js +12 -8
  30. package/build/components/block-toolbar/index.js.map +1 -1
  31. package/build/components/block-toolbar/index.native.js +62 -3
  32. package/build/components/block-toolbar/index.native.js.map +1 -1
  33. package/build/components/block-tools/block-contextual-toolbar.js +7 -11
  34. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  35. package/build/components/colors-gradients/control.js +4 -2
  36. package/build/components/colors-gradients/control.js.map +1 -1
  37. package/build/components/dimensions-tool/aspect-ratio-tool.js +99 -0
  38. package/build/components/dimensions-tool/aspect-ratio-tool.js.map +1 -0
  39. package/build/components/dimensions-tool/index.js +207 -0
  40. package/build/components/dimensions-tool/index.js.map +1 -0
  41. package/build/components/dimensions-tool/scale-tool.js +111 -0
  42. package/build/components/dimensions-tool/scale-tool.js.map +1 -0
  43. package/build/components/dimensions-tool/width-height-tool.js +125 -0
  44. package/build/components/dimensions-tool/width-height-tool.js.map +1 -0
  45. package/build/components/global-styles/color-panel.js +22 -16
  46. package/build/components/global-styles/color-panel.js.map +1 -1
  47. package/build/components/global-styles/dimensions-panel.js +13 -2
  48. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  49. package/build/components/global-styles/filters-panel.js +1 -1
  50. package/build/components/global-styles/filters-panel.js.map +1 -1
  51. package/build/components/global-styles/get-block-css-selector.js +4 -8
  52. package/build/components/global-styles/get-block-css-selector.js.map +1 -1
  53. package/build/components/global-styles/hooks.js +15 -25
  54. package/build/components/global-styles/hooks.js.map +1 -1
  55. package/build/components/global-styles/typography-panel.js +52 -5
  56. package/build/components/global-styles/typography-panel.js.map +1 -1
  57. package/build/components/global-styles/use-global-styles-output.js +12 -18
  58. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  59. package/build/components/global-styles/utils.js +6 -6
  60. package/build/components/global-styles/utils.js.map +1 -1
  61. package/build/components/iframe/index.js +36 -48
  62. package/build/components/iframe/index.js.map +1 -1
  63. package/build/components/iframe/use-compatibility-styles.js +5 -0
  64. package/build/components/iframe/use-compatibility-styles.js.map +1 -1
  65. package/build/components/image-editor/aspect-ratio-dropdown.js +1 -1
  66. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  67. package/build/components/image-editor/use-save-image.js +1 -2
  68. package/build/components/image-editor/use-save-image.js.map +1 -1
  69. package/build/components/image-size-control/index.js +6 -0
  70. package/build/components/image-size-control/index.js.map +1 -1
  71. package/build/components/index.js +9 -0
  72. package/build/components/index.js.map +1 -1
  73. package/build/components/inner-blocks/index.js +3 -1
  74. package/build/components/inner-blocks/index.js.map +1 -1
  75. package/build/components/inner-blocks/index.native.js +3 -1
  76. package/build/components/inner-blocks/index.native.js.map +1 -1
  77. package/build/components/inner-blocks/use-nested-settings-update.js +33 -7
  78. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  79. package/build/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  80. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  81. package/build/components/inserter/block-patterns-tab.js +7 -35
  82. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  83. package/build/components/inserter/hooks/use-block-types-state.js +3 -4
  84. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  85. package/build/components/inserter/hooks/use-patterns-state.js +9 -3
  86. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  87. package/build/components/inserter/index.js +2 -4
  88. package/build/components/inserter/index.js.map +1 -1
  89. package/build/components/inserter/index.native.js +21 -32
  90. package/build/components/inserter/index.native.js.map +1 -1
  91. package/build/components/inserter/media-tab/hooks.js +2 -21
  92. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  93. package/build/components/inserter/reusable-block-rename-hint.js +82 -0
  94. package/build/components/inserter/reusable-block-rename-hint.js.map +1 -0
  95. package/build/components/inserter/reusable-blocks-tab.js +6 -2
  96. package/build/components/inserter/reusable-blocks-tab.js.map +1 -1
  97. package/build/components/inserter/reusable-blocks-tab.native.js +2 -2
  98. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  99. package/build/components/inserter/tabs.native.js +1 -1
  100. package/build/components/inserter/tabs.native.js.map +1 -1
  101. package/build/components/inserter-draggable-blocks/index.js +9 -1
  102. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  103. package/build/components/link-control/constants.js +1 -1
  104. package/build/components/link-control/constants.js.map +1 -1
  105. package/build/components/link-control/index.js +21 -16
  106. package/build/components/link-control/index.js.map +1 -1
  107. package/build/components/link-control/search-create-button.js +5 -21
  108. package/build/components/link-control/search-create-button.js.map +1 -1
  109. package/build/components/link-control/search-input.js +4 -4
  110. package/build/components/link-control/search-input.js.map +1 -1
  111. package/build/components/link-control/search-item.js +13 -30
  112. package/build/components/link-control/search-item.js.map +1 -1
  113. package/build/components/link-control/search-results.js +2 -2
  114. package/build/components/link-control/search-results.js.map +1 -1
  115. package/build/components/link-control/settings-drawer.js +2 -3
  116. package/build/components/link-control/settings-drawer.js.map +1 -1
  117. package/build/components/list-view/appender.js +2 -6
  118. package/build/components/list-view/appender.js.map +1 -1
  119. package/build/components/list-view/use-list-view-client-ids.js +2 -2
  120. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  121. package/build/components/media-placeholder/index.native.js +65 -31
  122. package/build/components/media-placeholder/index.native.js.map +1 -1
  123. package/build/components/preview-options/index.js +2 -2
  124. package/build/components/preview-options/index.js.map +1 -1
  125. package/build/components/provider/index.js +5 -2
  126. package/build/components/provider/index.js.map +1 -1
  127. package/build/components/provider/use-block-sync.js +21 -0
  128. package/build/components/provider/use-block-sync.js.map +1 -1
  129. package/build/components/resolution-tool/index.js +55 -0
  130. package/build/components/resolution-tool/index.js.map +1 -0
  131. package/build/components/rich-text/content.js +0 -36
  132. package/build/components/rich-text/content.js.map +1 -1
  133. package/build/components/rich-text/get-rich-text-values.js +118 -0
  134. package/build/components/rich-text/get-rich-text-values.js.map +1 -0
  135. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  136. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  137. package/build/components/spacing-sizes-control/input-controls/axial.js +6 -2
  138. package/build/components/spacing-sizes-control/input-controls/axial.js.map +1 -1
  139. package/build/components/spacing-sizes-control/input-controls/separated.js +5 -1
  140. package/build/components/spacing-sizes-control/input-controls/separated.js.map +1 -1
  141. package/build/components/spacing-sizes-control/input-controls/single.js +5 -1
  142. package/build/components/spacing-sizes-control/input-controls/single.js.map +1 -1
  143. package/build/components/spacing-sizes-control/utils.js +1 -1
  144. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  145. package/build/components/url-input/index.js +4 -2
  146. package/build/components/url-input/index.js.map +1 -1
  147. package/build/components/use-block-display-information/index.js +7 -3
  148. package/build/components/use-block-display-information/index.js.map +1 -1
  149. package/build/components/use-block-drop-zone/index.native.js +49 -8
  150. package/build/components/use-block-drop-zone/index.native.js.map +1 -1
  151. package/build/components/use-setting/index.js +5 -9
  152. package/build/components/use-setting/index.js.map +1 -1
  153. package/build/components/writing-flow/use-tab-nav.js +10 -27
  154. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  155. package/build/components/writing-mode-control/index.js +70 -0
  156. package/build/components/writing-mode-control/index.js.map +1 -0
  157. package/build/hooks/behaviors.js +25 -20
  158. package/build/hooks/behaviors.js.map +1 -1
  159. package/build/hooks/margin.js +1 -1
  160. package/build/hooks/margin.js.map +1 -1
  161. package/build/hooks/padding.js +1 -1
  162. package/build/hooks/padding.js.map +1 -1
  163. package/build/hooks/supports.js +7 -1
  164. package/build/hooks/supports.js.map +1 -1
  165. package/build/hooks/typography.js +2 -1
  166. package/build/hooks/typography.js.map +1 -1
  167. package/build/hooks/utils.js +5 -9
  168. package/build/hooks/utils.js.map +1 -1
  169. package/build/private-apis.js +16 -3
  170. package/build/private-apis.js.map +1 -1
  171. package/build/private-apis.native.js +3 -0
  172. package/build/private-apis.native.js.map +1 -1
  173. package/build/store/actions.js +196 -2
  174. package/build/store/actions.js.map +1 -1
  175. package/build/store/defaults.js +1 -0
  176. package/build/store/defaults.js.map +1 -1
  177. package/build/store/index.js +10 -1
  178. package/build/store/index.js.map +1 -1
  179. package/build/store/private-actions.js +46 -40
  180. package/build/store/private-actions.js.map +1 -1
  181. package/build/store/private-selectors.js +8 -9
  182. package/build/store/private-selectors.js.map +1 -1
  183. package/build/store/reducer.js +22 -9
  184. package/build/store/reducer.js.map +1 -1
  185. package/build/store/selectors.js +52 -23
  186. package/build/store/selectors.js.map +1 -1
  187. package/build/utils/object.js +38 -2
  188. package/build/utils/object.js.map +1 -1
  189. package/build-module/components/block-draggable/index.js +6 -3
  190. package/build-module/components/block-draggable/index.js.map +1 -1
  191. package/build-module/components/block-draggable/index.native.js +2 -2
  192. package/build-module/components/block-draggable/index.native.js.map +1 -1
  193. package/build-module/components/block-edit/edit.js +27 -10
  194. package/build-module/components/block-edit/edit.js.map +1 -1
  195. package/build-module/components/block-heading-level-dropdown/heading-level-icon.js +9 -2
  196. package/build-module/components/block-heading-level-dropdown/heading-level-icon.js.map +1 -1
  197. package/build-module/components/block-heading-level-dropdown/index.native.js +4 -3
  198. package/build-module/components/block-heading-level-dropdown/index.native.js.map +1 -1
  199. package/build-module/components/block-list/block-outline.native.js +14 -18
  200. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  201. package/build-module/components/block-list/block.native.js +24 -43
  202. package/build-module/components/block-list/block.native.js.map +1 -1
  203. package/build-module/components/block-lock/toolbar.js +25 -7
  204. package/build-module/components/block-lock/toolbar.js.map +1 -1
  205. package/build-module/components/block-mover/index.native.js +3 -3
  206. package/build-module/components/block-mover/index.native.js.map +1 -1
  207. package/build-module/components/block-parent-selector/index.js +7 -5
  208. package/build-module/components/block-parent-selector/index.js.map +1 -1
  209. package/build-module/components/block-removal-warning-modal/index.js +17 -24
  210. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  211. package/build-module/components/block-settings/button.native.js +3 -3
  212. package/build-module/components/block-settings/button.native.js.map +1 -1
  213. package/build-module/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +13 -13
  214. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -0
  215. package/build-module/components/block-toolbar/index.js +12 -8
  216. package/build-module/components/block-toolbar/index.js.map +1 -1
  217. package/build-module/components/block-toolbar/index.native.js +60 -4
  218. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  219. package/build-module/components/block-tools/block-contextual-toolbar.js +8 -11
  220. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  221. package/build-module/components/colors-gradients/control.js +3 -2
  222. package/build-module/components/colors-gradients/control.js.map +1 -1
  223. package/build-module/components/dimensions-tool/aspect-ratio-tool.js +87 -0
  224. package/build-module/components/dimensions-tool/aspect-ratio-tool.js.map +1 -0
  225. package/build-module/components/dimensions-tool/index.js +195 -0
  226. package/build-module/components/dimensions-tool/index.js.map +1 -0
  227. package/build-module/components/dimensions-tool/scale-tool.js +103 -0
  228. package/build-module/components/dimensions-tool/scale-tool.js.map +1 -0
  229. package/build-module/components/dimensions-tool/width-height-tool.js +122 -0
  230. package/build-module/components/dimensions-tool/width-height-tool.js.map +1 -0
  231. package/build-module/components/global-styles/color-panel.js +22 -16
  232. package/build-module/components/global-styles/color-panel.js.map +1 -1
  233. package/build-module/components/global-styles/dimensions-panel.js +13 -2
  234. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  235. package/build-module/components/global-styles/filters-panel.js +2 -2
  236. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  237. package/build-module/components/global-styles/get-block-css-selector.js +4 -8
  238. package/build-module/components/global-styles/get-block-css-selector.js.map +1 -1
  239. package/build-module/components/global-styles/hooks.js +14 -24
  240. package/build-module/components/global-styles/hooks.js.map +1 -1
  241. package/build-module/components/global-styles/typography-panel.js +51 -5
  242. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  243. package/build-module/components/global-styles/use-global-styles-output.js +13 -18
  244. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  245. package/build-module/components/global-styles/utils.js +5 -5
  246. package/build-module/components/global-styles/utils.js.map +1 -1
  247. package/build-module/components/iframe/index.js +37 -49
  248. package/build-module/components/iframe/index.js.map +1 -1
  249. package/build-module/components/iframe/use-compatibility-styles.js +5 -0
  250. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -1
  251. package/build-module/components/image-editor/aspect-ratio-dropdown.js +1 -1
  252. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  253. package/build-module/components/image-editor/use-save-image.js +1 -2
  254. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  255. package/build-module/components/image-size-control/index.js +5 -0
  256. package/build-module/components/image-size-control/index.js.map +1 -1
  257. package/build-module/components/index.js +1 -0
  258. package/build-module/components/index.js.map +1 -1
  259. package/build-module/components/inner-blocks/index.js +3 -1
  260. package/build-module/components/inner-blocks/index.js.map +1 -1
  261. package/build-module/components/inner-blocks/index.native.js +3 -1
  262. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  263. package/build-module/components/inner-blocks/use-nested-settings-update.js +30 -7
  264. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  265. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  266. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  267. package/build-module/components/inserter/block-patterns-tab.js +7 -33
  268. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  269. package/build-module/components/inserter/hooks/use-block-types-state.js +3 -4
  270. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  271. package/build-module/components/inserter/hooks/use-patterns-state.js +9 -3
  272. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  273. package/build-module/components/inserter/index.js +2 -4
  274. package/build-module/components/inserter/index.js.map +1 -1
  275. package/build-module/components/inserter/index.native.js +22 -33
  276. package/build-module/components/inserter/index.native.js.map +1 -1
  277. package/build-module/components/inserter/media-tab/hooks.js +2 -21
  278. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  279. package/build-module/components/inserter/reusable-block-rename-hint.js +67 -0
  280. package/build-module/components/inserter/reusable-block-rename-hint.js.map +1 -0
  281. package/build-module/components/inserter/reusable-blocks-tab.js +5 -2
  282. package/build-module/components/inserter/reusable-blocks-tab.js.map +1 -1
  283. package/build-module/components/inserter/reusable-blocks-tab.native.js +2 -2
  284. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  285. package/build-module/components/inserter/tabs.native.js +1 -1
  286. package/build-module/components/inserter/tabs.native.js.map +1 -1
  287. package/build-module/components/inserter-draggable-blocks/index.js +9 -2
  288. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  289. package/build-module/components/link-control/constants.js +1 -1
  290. package/build-module/components/link-control/constants.js.map +1 -1
  291. package/build-module/components/link-control/index.js +21 -16
  292. package/build-module/components/link-control/index.js.map +1 -1
  293. package/build-module/components/link-control/search-create-button.js +7 -20
  294. package/build-module/components/link-control/search-create-button.js.map +1 -1
  295. package/build-module/components/link-control/search-input.js +4 -4
  296. package/build-module/components/link-control/search-input.js.map +1 -1
  297. package/build-module/components/link-control/search-item.js +14 -28
  298. package/build-module/components/link-control/search-item.js.map +1 -1
  299. package/build-module/components/link-control/search-results.js +3 -3
  300. package/build-module/components/link-control/search-results.js.map +1 -1
  301. package/build-module/components/link-control/settings-drawer.js +4 -5
  302. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  303. package/build-module/components/list-view/appender.js +2 -6
  304. package/build-module/components/list-view/appender.js.map +1 -1
  305. package/build-module/components/list-view/use-list-view-client-ids.js +2 -2
  306. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  307. package/build-module/components/media-placeholder/index.native.js +66 -33
  308. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  309. package/build-module/components/preview-options/index.js +2 -2
  310. package/build-module/components/preview-options/index.js.map +1 -1
  311. package/build-module/components/provider/index.js +5 -2
  312. package/build-module/components/provider/index.js.map +1 -1
  313. package/build-module/components/provider/use-block-sync.js +21 -0
  314. package/build-module/components/provider/use-block-sync.js.map +1 -1
  315. package/build-module/components/resolution-tool/index.js +45 -0
  316. package/build-module/components/resolution-tool/index.js.map +1 -0
  317. package/build-module/components/rich-text/content.js +1 -36
  318. package/build-module/components/rich-text/content.js.map +1 -1
  319. package/build-module/components/rich-text/get-rich-text-values.js +105 -0
  320. package/build-module/components/rich-text/get-rich-text-values.js.map +1 -0
  321. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  322. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  323. package/build-module/components/spacing-sizes-control/input-controls/axial.js +7 -3
  324. package/build-module/components/spacing-sizes-control/input-controls/axial.js.map +1 -1
  325. package/build-module/components/spacing-sizes-control/input-controls/separated.js +6 -2
  326. package/build-module/components/spacing-sizes-control/input-controls/separated.js.map +1 -1
  327. package/build-module/components/spacing-sizes-control/input-controls/single.js +6 -2
  328. package/build-module/components/spacing-sizes-control/input-controls/single.js.map +1 -1
  329. package/build-module/components/spacing-sizes-control/utils.js +1 -1
  330. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  331. package/build-module/components/url-input/index.js +4 -2
  332. package/build-module/components/url-input/index.js.map +1 -1
  333. package/build-module/components/use-block-display-information/index.js +7 -3
  334. package/build-module/components/use-block-display-information/index.js.map +1 -1
  335. package/build-module/components/use-block-drop-zone/index.native.js +50 -8
  336. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -1
  337. package/build-module/components/use-setting/index.js +5 -9
  338. package/build-module/components/use-setting/index.js.map +1 -1
  339. package/build-module/components/writing-flow/use-tab-nav.js +8 -26
  340. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  341. package/build-module/components/writing-mode-control/index.js +57 -0
  342. package/build-module/components/writing-mode-control/index.js.map +1 -0
  343. package/build-module/hooks/behaviors.js +26 -20
  344. package/build-module/hooks/behaviors.js.map +1 -1
  345. package/build-module/hooks/margin.js +1 -1
  346. package/build-module/hooks/margin.js.map +1 -1
  347. package/build-module/hooks/padding.js +1 -1
  348. package/build-module/hooks/padding.js.map +1 -1
  349. package/build-module/hooks/supports.js +7 -1
  350. package/build-module/hooks/supports.js.map +1 -1
  351. package/build-module/hooks/typography.js +2 -1
  352. package/build-module/hooks/typography.js.map +1 -1
  353. package/build-module/hooks/utils.js +6 -9
  354. package/build-module/hooks/utils.js.map +1 -1
  355. package/build-module/private-apis.js +11 -2
  356. package/build-module/private-apis.js.map +1 -1
  357. package/build-module/private-apis.native.js +2 -0
  358. package/build-module/private-apis.native.js.map +1 -1
  359. package/build-module/store/actions.js +193 -3
  360. package/build-module/store/actions.js.map +1 -1
  361. package/build-module/store/defaults.js +1 -0
  362. package/build-module/store/defaults.js.map +1 -1
  363. package/build-module/store/index.js +10 -1
  364. package/build-module/store/index.js.map +1 -1
  365. package/build-module/store/private-actions.js +45 -36
  366. package/build-module/store/private-actions.js.map +1 -1
  367. package/build-module/store/private-selectors.js +5 -5
  368. package/build-module/store/private-selectors.js.map +1 -1
  369. package/build-module/store/reducer.js +22 -9
  370. package/build-module/store/reducer.js.map +1 -1
  371. package/build-module/store/selectors.js +49 -21
  372. package/build-module/store/selectors.js.map +1 -1
  373. package/build-module/utils/object.js +34 -2
  374. package/build-module/utils/object.js.map +1 -1
  375. package/build-style/content-rtl.css +4 -0
  376. package/build-style/content.css +4 -0
  377. package/build-style/style-rtl.css +137 -129
  378. package/build-style/style.css +137 -129
  379. package/package.json +33 -32
  380. package/src/components/alignment-control/test/__snapshots__/index.js.snap +6 -6
  381. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +5 -5
  382. package/src/components/block-controls/README.md +89 -0
  383. package/src/components/block-draggable/index.js +13 -4
  384. package/src/components/block-draggable/index.native.js +7 -3
  385. package/src/components/block-draggable/style.scss +1 -0
  386. package/src/components/block-draggable/test/index.native.js +0 -54
  387. package/src/components/block-edit/edit.js +26 -9
  388. package/src/components/block-edit/test/edit.js +1 -1
  389. package/src/components/block-heading-level-dropdown/heading-level-icon.js +6 -1
  390. package/src/components/block-heading-level-dropdown/index.native.js +8 -4
  391. package/src/components/block-inspector/style.scss +2 -1
  392. package/src/components/block-list/block-outline.native.js +26 -25
  393. package/src/components/block-list/block.native.js +24 -38
  394. package/src/components/block-list/block.native.scss +18 -40
  395. package/src/components/block-list/style.native.scss +3 -3
  396. package/src/components/block-lock/toolbar.js +34 -6
  397. package/src/components/block-mover/index.native.js +3 -3
  398. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +16 -6
  399. package/src/components/block-parent-selector/index.js +13 -8
  400. package/src/components/block-removal-warning-modal/index.js +17 -33
  401. package/src/components/block-settings/button.native.js +12 -6
  402. package/src/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +19 -18
  403. package/src/components/block-toolbar/index.js +11 -9
  404. package/src/components/block-toolbar/index.native.js +86 -6
  405. package/src/components/{block-mobile-toolbar/test/block-actions-menu.native.js → block-toolbar/test/block-toolbar-menu.native.js} +20 -54
  406. package/src/components/block-toolbar/test/index.native.js +42 -0
  407. package/src/components/block-tools/block-contextual-toolbar.js +5 -11
  408. package/src/components/block-tools/style.scss +73 -26
  409. package/src/components/button-block-appender/styles.native.scss +2 -2
  410. package/src/components/caption/README.md +49 -0
  411. package/src/components/colors-gradients/control.js +3 -2
  412. package/src/components/default-block-appender/content.scss +11 -0
  413. package/src/components/dimensions-tool/aspect-ratio-tool.js +124 -0
  414. package/src/components/dimensions-tool/index.js +212 -0
  415. package/src/components/dimensions-tool/scale-tool.js +124 -0
  416. package/src/components/dimensions-tool/stories/aspect-ratio-tool.js +52 -0
  417. package/src/components/dimensions-tool/stories/index.js +54 -0
  418. package/src/components/dimensions-tool/stories/scale-tool.js +48 -0
  419. package/src/components/dimensions-tool/stories/width-height-tool.js +54 -0
  420. package/src/components/dimensions-tool/test/index.js +641 -0
  421. package/src/components/dimensions-tool/width-height-tool.js +113 -0
  422. package/src/components/font-family/README.md +71 -0
  423. package/src/components/global-styles/color-panel.js +24 -17
  424. package/src/components/global-styles/dimensions-panel.js +8 -2
  425. package/src/components/global-styles/filters-panel.js +2 -2
  426. package/src/components/global-styles/get-block-css-selector.js +5 -9
  427. package/src/components/global-styles/hooks.js +22 -26
  428. package/src/components/global-styles/typography-panel.js +57 -5
  429. package/src/components/global-styles/use-global-styles-output.js +36 -18
  430. package/src/components/global-styles/utils.js +15 -6
  431. package/src/components/iframe/index.js +30 -56
  432. package/src/components/iframe/use-compatibility-styles.js +5 -0
  433. package/src/components/image-editor/aspect-ratio-dropdown.js +1 -1
  434. package/src/components/image-editor/use-save-image.js +0 -1
  435. package/src/components/image-size-control/index.js +6 -0
  436. package/src/components/index.js +1 -0
  437. package/src/components/inner-blocks/README.md +10 -0
  438. package/src/components/inner-blocks/index.js +4 -0
  439. package/src/components/inner-blocks/index.native.js +4 -0
  440. package/src/components/inner-blocks/use-nested-settings-update.js +32 -5
  441. package/src/components/inserter/block-patterns-explorer/patterns-list.js +8 -2
  442. package/src/components/inserter/block-patterns-tab.js +8 -56
  443. package/src/components/inserter/hooks/use-block-types-state.js +3 -4
  444. package/src/components/inserter/hooks/use-patterns-state.js +35 -19
  445. package/src/components/inserter/index.js +2 -3
  446. package/src/components/inserter/index.native.js +17 -36
  447. package/src/components/inserter/media-tab/hooks.js +2 -22
  448. package/src/components/inserter/reusable-block-rename-hint.js +69 -0
  449. package/src/components/inserter/reusable-blocks-tab.js +5 -1
  450. package/src/components/inserter/reusable-blocks-tab.native.js +2 -2
  451. package/src/components/inserter/style.native.scss +10 -15
  452. package/src/components/inserter/style.scss +28 -0
  453. package/src/components/inserter/tabs.native.js +5 -1
  454. package/src/components/inserter-draggable-blocks/index.js +13 -2
  455. package/src/components/link-control/constants.js +1 -1
  456. package/src/components/link-control/index.js +36 -29
  457. package/src/components/link-control/search-create-button.js +8 -26
  458. package/src/components/link-control/search-input.js +4 -3
  459. package/src/components/link-control/search-item.js +21 -43
  460. package/src/components/link-control/search-results.js +48 -46
  461. package/src/components/link-control/settings-drawer.js +6 -5
  462. package/src/components/link-control/style.scss +58 -123
  463. package/src/components/link-control/test/index.js +161 -123
  464. package/src/components/list-view/appender.js +5 -6
  465. package/src/components/list-view/style.scss +1 -2
  466. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  467. package/src/components/media-placeholder/index.native.js +108 -59
  468. package/src/components/media-placeholder/styles.native.scss +59 -24
  469. package/src/components/media-replace-flow/test/index.js +1 -1
  470. package/src/components/panel-color-settings/README.md +98 -0
  471. package/src/components/preview-options/README.md +18 -17
  472. package/src/components/preview-options/index.js +2 -2
  473. package/src/components/provider/index.js +9 -2
  474. package/src/components/provider/test/use-block-sync.js +21 -6
  475. package/src/components/provider/use-block-sync.js +19 -0
  476. package/src/components/recursion-provider/README.md +101 -0
  477. package/src/components/resolution-tool/index.js +56 -0
  478. package/src/components/resolution-tool/stories/index.js +48 -0
  479. package/src/components/rich-text/content.js +1 -46
  480. package/src/components/rich-text/get-rich-text-values.js +105 -0
  481. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  482. package/src/components/spacing-sizes-control/input-controls/axial.js +17 -2
  483. package/src/components/spacing-sizes-control/input-controls/separated.js +17 -2
  484. package/src/components/spacing-sizes-control/input-controls/single.js +12 -2
  485. package/src/components/spacing-sizes-control/utils.js +1 -1
  486. package/src/components/text-transform-control/README.md +44 -0
  487. package/src/components/url-input/index.js +2 -0
  488. package/src/components/use-block-display-information/index.js +12 -5
  489. package/src/components/use-block-drop-zone/index.native.js +65 -28
  490. package/src/components/use-setting/index.js +8 -8
  491. package/src/components/writing-flow/use-tab-nav.js +10 -33
  492. package/src/components/writing-mode-control/index.js +68 -0
  493. package/src/components/writing-mode-control/style.scss +18 -0
  494. package/src/hooks/behaviors.js +25 -16
  495. package/src/hooks/margin.js +4 -1
  496. package/src/hooks/padding.js +4 -1
  497. package/src/hooks/supports.js +7 -0
  498. package/src/hooks/typography.js +2 -0
  499. package/src/hooks/utils.js +8 -7
  500. package/src/private-apis.js +13 -1
  501. package/src/private-apis.native.js +2 -0
  502. package/src/store/actions.js +195 -3
  503. package/src/store/defaults.js +1 -0
  504. package/src/store/index.js +10 -0
  505. package/src/store/private-actions.js +39 -39
  506. package/src/store/private-selectors.js +5 -8
  507. package/src/store/reducer.js +22 -9
  508. package/src/store/selectors.js +87 -25
  509. package/src/store/test/actions.js +114 -0
  510. package/src/store/test/private-actions.js +56 -0
  511. package/src/store/test/private-selectors.js +5 -5
  512. package/src/store/test/reducer.js +14 -7
  513. package/src/store/test/selectors.js +1 -1
  514. package/src/utils/object.js +32 -2
  515. package/src/utils/test/object.js +36 -0
  516. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +0 -1
  517. package/build/components/block-mobile-toolbar/index.native.js +0 -135
  518. package/build/components/block-mobile-toolbar/index.native.js.map +0 -1
  519. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +0 -1
  520. package/build-module/components/block-mobile-toolbar/index.native.js +0 -116
  521. package/build-module/components/block-mobile-toolbar/index.native.js.map +0 -1
  522. package/src/components/block-mobile-toolbar/index.native.js +0 -127
  523. package/src/components/block-mobile-toolbar/style.native.scss +0 -16
  524. /package/src/components/{block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap → block-toolbar/test/__snapshots__/block-toolbar-menu.native.js.snap} +0 -0
@@ -16,14 +16,14 @@ export default function useListViewClientIds( { blocks, rootClientId } ) {
16
16
  const {
17
17
  getDraggedBlockClientIds,
18
18
  getSelectedBlockClientIds,
19
- getListViewClientIdsTree,
19
+ getEnabledClientIdsTree,
20
20
  } = unlock( select( blockEditorStore ) );
21
21
 
22
22
  return {
23
23
  selectedClientIds: getSelectedBlockClientIds(),
24
24
  draggedClientIds: getDraggedBlockClientIds(),
25
25
  clientIdsTree:
26
- blocks ?? getListViewClientIdsTree( rootClientId ),
26
+ blocks ?? getEnabledClientIdsTree( rootClientId ),
27
27
  };
28
28
  },
29
29
  [ blocks, rootClientId ]
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { View, Text, TouchableWithoutFeedback } from 'react-native';
4
+ import { View, Text, TouchableOpacity } from 'react-native';
5
+ import { sentenceCase } from 'change-case';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
@@ -13,14 +14,15 @@ import {
13
14
  MEDIA_TYPE_VIDEO,
14
15
  MEDIA_TYPE_AUDIO,
15
16
  } from '@wordpress/block-editor';
16
- import { withPreferredColorScheme } from '@wordpress/compose';
17
- import { useRef } from '@wordpress/element';
17
+ import { usePreferredColorSchemeStyle } from '@wordpress/compose';
18
+ import { cloneElement, useCallback, useRef } from '@wordpress/element';
18
19
  import { Icon, plusCircleFilled } from '@wordpress/icons';
19
20
 
20
21
  /**
21
22
  * Internal dependencies
22
23
  */
23
24
  import styles from './styles.scss';
25
+ import { useBlockEditContext } from '../block-edit/context';
24
26
 
25
27
  const isMediaEqual = ( media1, media2 ) =>
26
28
  media1.id === media2.id || media1.url === media2.url;
@@ -35,10 +37,13 @@ const dedupMedia = ( media ) =>
35
37
  []
36
38
  );
37
39
 
40
+ const hitSlop = { top: 22, bottom: 22, left: 22, right: 22 };
41
+
38
42
  function MediaPlaceholder( props ) {
39
43
  const {
40
44
  addToGallery,
41
45
  allowedTypes = [],
46
+ className = '',
42
47
  labels = {},
43
48
  icon,
44
49
  onSelect,
@@ -46,7 +51,6 @@ function MediaPlaceholder( props ) {
46
51
  __experimentalOnlyMediaLibrary,
47
52
  isAppender,
48
53
  disableMediaButtons,
49
- getStylesFromColorScheme,
50
54
  multiple,
51
55
  value = [],
52
56
  children,
@@ -61,6 +65,16 @@ function MediaPlaceholder( props ) {
61
65
  const mediaRef = useRef( value );
62
66
  mediaRef.current = value;
63
67
 
68
+ const blockEditContext = useBlockEditContext();
69
+
70
+ const onButtonPress = useCallback(
71
+ ( open ) => ( event ) => {
72
+ onFocus?.( event );
73
+ open();
74
+ },
75
+ [ onFocus ]
76
+ );
77
+
64
78
  // Append and deduplicate media array for gallery use case.
65
79
  const setMedia =
66
80
  multiple && addToGallery
@@ -109,55 +123,104 @@ function MediaPlaceholder( props ) {
109
123
  accessibilityHint = __( 'Double tap to select an audio file' );
110
124
  }
111
125
 
112
- const emptyStateTitleStyle = getStylesFromColorScheme(
113
- styles.emptyStateTitle,
114
- styles.emptyStateTitleDark
126
+ const titleStyles = usePreferredColorSchemeStyle(
127
+ styles[ 'media-placeholder__header-title' ],
128
+ styles[ 'media-placeholder__header-title--dark' ]
115
129
  );
116
- const addMediaButtonStyle = getStylesFromColorScheme(
130
+ const addMediaButtonStyle = usePreferredColorSchemeStyle(
117
131
  styles.addMediaButton,
118
132
  styles.addMediaButtonDark
119
133
  );
134
+ const buttonStyles = usePreferredColorSchemeStyle(
135
+ styles[ 'media-placeholder__button' ],
136
+ styles[ 'media-placeholder__button--dark' ]
137
+ );
138
+ const emptyStateDescriptionStyles = usePreferredColorSchemeStyle(
139
+ styles.emptyStateDescription,
140
+ styles.emptyStateDescriptionDark
141
+ );
142
+ const iconStyles = usePreferredColorSchemeStyle(
143
+ styles[ 'media-placeholder__header-icon' ],
144
+ styles[ 'media-placeholder__header-icon--dark' ]
145
+ );
146
+ const placeholderIcon = cloneElement( icon, {
147
+ fill: iconStyles.fill,
148
+ } );
149
+ const accessibilityLabel = sprintf(
150
+ /* translators: accessibility text for the media block empty state. %s: media type */
151
+ __( '%s block. Empty' ),
152
+ placeholderTitle
153
+ );
120
154
 
121
- const renderContent = () => {
155
+ const renderContent = ( open ) => {
122
156
  if ( isAppender === undefined || ! isAppender ) {
123
157
  return (
124
158
  <>
125
- <View style={ styles.modalIcon }>{ icon }</View>
126
- <Text style={ emptyStateTitleStyle }>
127
- { placeholderTitle }
128
- </Text>
159
+ <View style={ styles[ 'media-placeholder__header' ] }>
160
+ <View style={ iconStyles }>{ placeholderIcon }</View>
161
+ <Text style={ titleStyles }>{ placeholderTitle }</Text>
162
+ </View>
129
163
  { children }
130
- <Text style={ styles.emptyStateDescription }>
131
- { instructions }
132
- </Text>
164
+ <TouchableOpacity
165
+ activeOpacity={ 0.5 }
166
+ accessibilityLabel={ accessibilityLabel }
167
+ style={ buttonStyles }
168
+ accessibilityRole={ 'button' }
169
+ accessibilityHint={ accessibilityHint }
170
+ hitSlop={ hitSlop }
171
+ onPress={ onButtonPress( open ) }
172
+ >
173
+ <Text style={ emptyStateDescriptionStyles }>
174
+ { sentenceCase( instructions ) }
175
+ </Text>
176
+ </TouchableOpacity>
133
177
  </>
134
178
  );
135
179
  } else if ( isAppender && ! disableMediaButtons ) {
136
180
  return (
137
- <View testID="media-placeholder-appender-icon">
138
- <Icon
139
- icon={ plusCircleFilled }
140
- style={ addMediaButtonStyle }
141
- color={ addMediaButtonStyle.color }
142
- size={ addMediaButtonStyle.size }
143
- />
144
- </View>
181
+ <TouchableOpacity
182
+ activeOpacity={ 0.5 }
183
+ accessibilityLabel={ accessibilityLabel }
184
+ style={ styles[ 'media-placeholder__appender' ] }
185
+ accessibilityRole={ 'button' }
186
+ accessibilityHint={ accessibilityHint }
187
+ hitSlop={ hitSlop }
188
+ onPress={ onButtonPress( open ) }
189
+ >
190
+ <View testID="media-placeholder-appender-icon">
191
+ <Icon
192
+ icon={ plusCircleFilled }
193
+ style={ addMediaButtonStyle }
194
+ color={ addMediaButtonStyle.color }
195
+ size={ addMediaButtonStyle.size }
196
+ />
197
+ </View>
198
+ </TouchableOpacity>
145
199
  );
146
200
  }
147
201
  };
148
202
 
149
- if ( isAppender && disableMediaButtons ) {
150
- return null;
151
- }
152
-
153
- const appenderStyle = getStylesFromColorScheme(
203
+ const appenderStyle = usePreferredColorSchemeStyle(
154
204
  styles.appender,
155
205
  styles.appenderDark
156
206
  );
157
- const emptyStateContainerStyle = getStylesFromColorScheme(
158
- styles.emptyStateContainer,
159
- styles.emptyStateContainerDark
207
+ const containerSelectedStyle = usePreferredColorSchemeStyle(
208
+ styles[ 'media-placeholder__container-selected' ],
209
+ styles[ 'media-placeholder__container-selected--dark' ]
160
210
  );
211
+ const containerStyle = [
212
+ usePreferredColorSchemeStyle(
213
+ styles[ 'media-placeholder__container' ],
214
+ styles[ 'media-placeholder__container--dark' ]
215
+ ),
216
+ blockEditContext?.isSelected &&
217
+ ! className.includes( 'no-block-outline' ) &&
218
+ containerSelectedStyle,
219
+ ];
220
+
221
+ if ( isAppender && disableMediaButtons ) {
222
+ return null;
223
+ }
161
224
 
162
225
  return (
163
226
  <View style={ { flex: 1 } }>
@@ -173,33 +236,19 @@ function MediaPlaceholder( props ) {
173
236
  autoOpen={ autoOpenMediaUpload }
174
237
  render={ ( { open, getMediaOptions } ) => {
175
238
  return (
176
- <TouchableWithoutFeedback
177
- accessibilityLabel={ sprintf(
178
- /* translators: accessibility text for the media block empty state. %s: media type */
179
- __( '%s block. Empty' ),
180
- placeholderTitle
181
- ) }
182
- accessibilityRole={ 'button' }
183
- accessibilityHint={ accessibilityHint }
184
- onPress={ ( event ) => {
185
- onFocus?.( event );
186
- open();
187
- } }
239
+ <View
240
+ style={ [
241
+ [
242
+ containerStyle,
243
+ height && { height },
244
+ backgroundColor && { backgroundColor },
245
+ ],
246
+ isAppender && appenderStyle,
247
+ ] }
188
248
  >
189
- <View
190
- style={ [
191
- [
192
- emptyStateContainerStyle,
193
- height && { height },
194
- backgroundColor && { backgroundColor },
195
- ],
196
- isAppender && appenderStyle,
197
- ] }
198
- >
199
- { getMediaOptions() }
200
- { ! hideContent && renderContent() }
201
- </View>
202
- </TouchableWithoutFeedback>
249
+ { getMediaOptions() }
250
+ { ! hideContent && renderContent( open ) }
251
+ </View>
203
252
  );
204
253
  } }
205
254
  />
@@ -207,4 +256,4 @@ function MediaPlaceholder( props ) {
207
256
  );
208
257
  }
209
258
 
210
- export default withPreferredColorScheme( MediaPlaceholder );
259
+ export default MediaPlaceholder;
@@ -1,50 +1,63 @@
1
- .emptyStateContainer {
1
+ .media-placeholder__container {
2
2
  flex: 1;
3
3
  height: 142;
4
4
  flex-direction: column;
5
5
  align-items: center;
6
6
  justify-content: center;
7
- background-color: $gray-lighten-30;
7
+ background-color: #e0e0e0; // $light-dim
8
8
  padding-left: 12;
9
9
  padding-right: 12;
10
10
  padding-top: 12;
11
11
  padding-bottom: 12;
12
- border-top-left-radius: 4;
13
- border-top-right-radius: 4;
14
- border-bottom-left-radius: 4;
15
- border-bottom-right-radius: 4;
12
+ border-top-left-radius: 2;
13
+ border-top-right-radius: 2;
14
+ border-bottom-left-radius: 2;
15
+ border-bottom-right-radius: 2;
16
16
  }
17
17
 
18
- .emptyStateContainerDark {
19
- background-color: $background-dark-secondary;
18
+ .media-placeholder__container--dark {
19
+ background-color: #1f1f1f; // $dark-dim
20
20
  }
21
21
 
22
- .emptyStateTitle {
23
- text-align: center;
24
- margin-top: 4;
25
- margin-bottom: 16;
26
- font-size: 14;
27
- color: #2e4453;
22
+ .media-placeholder__container-selected {
23
+ border-width: 2px;
24
+ border-color: $blue-40;
28
25
  }
29
26
 
30
- .emptyStateTitleDark {
31
- color: $white;
27
+ .media-placeholder__container-selected--dark {
28
+ border-color: $blue-50;
32
29
  }
33
30
 
34
31
  .emptyStateDescription {
35
- width: 100%;
36
32
  text-align: center;
37
- color: $blue-wordpress;
38
- font-size: 14;
39
- font-weight: 500;
33
+ color: $white;
34
+ font-size: 16;
35
+ font-weight: 400;
36
+ }
37
+
38
+ .emptyStateDescriptionDark {
39
+ color: $black;
40
40
  }
41
41
 
42
- .modalIcon {
42
+ .media-placeholder__header-icon {
43
43
  width: 24px;
44
44
  height: 24px;
45
- justify-content: center;
46
- align-items: center;
47
- fill: $gray-dark;
45
+ margin-right: $grid-unit;
46
+ fill: $light-secondary;
47
+ }
48
+
49
+ .media-placeholder__header-icon--dark {
50
+ fill: $dark-tertiary;
51
+ }
52
+
53
+ .media-placeholder__header-title {
54
+ text-align: center;
55
+ font-size: 16;
56
+ color: $light-secondary;
57
+ }
58
+
59
+ .media-placeholder__header-title--dark {
60
+ color: $dark-tertiary;
48
61
  }
49
62
 
50
63
  .appender {
@@ -71,3 +84,25 @@
71
84
  color: $background-dark-secondary;
72
85
  background-color: $gray-20;
73
86
  }
87
+
88
+ .media-placeholder__button {
89
+ background-color: $light-primary;
90
+ border-radius: 3px;
91
+ padding: $grid-unit $grid-unit-20;
92
+ }
93
+
94
+ .media-placeholder__button--dark {
95
+ background-color: $dark-primary;
96
+ }
97
+
98
+ .media-placeholder__header {
99
+ flex-direction: row;
100
+ align-items: center;
101
+ margin-top: 4;
102
+ margin-bottom: 16;
103
+ }
104
+
105
+ .media-placeholder__appender {
106
+ width: 100%;
107
+ align-items: center;
108
+ }
@@ -128,7 +128,7 @@ describe( 'General media replace flow', () => {
128
128
  );
129
129
 
130
130
  const mediaURLInput = screen.getByRole( 'combobox', {
131
- name: 'URL',
131
+ name: 'Link',
132
132
  expanded: false,
133
133
  } );
134
134
 
@@ -0,0 +1,98 @@
1
+ # PanelColorSettings
2
+
3
+ `PanelColorSettings` is a React component that renders a UI for managing various color settings.
4
+ It is essentially a wrapper around the `PanelColorGradientSettings` component, but specifically disables the gradient features.
5
+
6
+ ## Usage
7
+
8
+ ```jsx
9
+ /**
10
+ * WordPress dependencies
11
+ */
12
+ import { PanelColorSettings } from '@wordpress/block-editor';
13
+ import { useState } from '@wordpress/element';
14
+ import { __ } from '@wordpress/i18n';
15
+
16
+ // ...
17
+
18
+ const MyPanelColorSettings = () => {
19
+ const [ textColor, setTextColor ] = useState( { color: '#000' } );
20
+ const [ backgroundColor, setBackgroundColor ] = useState( {
21
+ color: '#fff',
22
+ } );
23
+ const [ overlayTextColor, setOverlayTextColor ] = useState( {
24
+ color: '#000',
25
+ } );
26
+ const [ overlayBackgroundColor, setOverlayBackgroundColor ] = useState( {
27
+ color: '#eee',
28
+ } );
29
+
30
+ return (
31
+ <PanelColorSettings
32
+ __experimentalIsRenderedInSidebar
33
+ title={ __( 'Color' ) }
34
+ colorSettings={ [
35
+ {
36
+ value: textColor.color,
37
+ onChange: setTextColor,
38
+ label: __( 'Text' ),
39
+ },
40
+ {
41
+ value: backgroundColor.color,
42
+ onChange: setBackgroundColor,
43
+ label: __( 'Background' ),
44
+ },
45
+ {
46
+ value: overlayTextColor.color,
47
+ onChange: setOverlayTextColor,
48
+ label: __( 'Submenu & overlay text' ),
49
+ },
50
+ {
51
+ value: overlayBackgroundColor.color,
52
+ onChange: setOverlayBackgroundColor,
53
+ label: __( 'Submenu & overlay background' ),
54
+ },
55
+ ] }
56
+ />
57
+ );
58
+ };
59
+
60
+ /// ...
61
+
62
+ <MyPanelColorSettings />;
63
+ ```
64
+
65
+ ## Props
66
+
67
+ The component accepts the following props:
68
+
69
+ ### colorSettings
70
+
71
+ A user-provided set of color settings.
72
+
73
+ - Type: `Array`
74
+ - Required: No
75
+
76
+ Colors settings are provided as an array of objects with the following schema:
77
+
78
+ | Property | Description | Type |
79
+ | -------- | --------------------------------- | -------- |
80
+ | value | The current color of the setting | string |
81
+ | onChange | Callback on change of the setting | Function |
82
+ | label | Label of the setting | string |
83
+
84
+ Additionally, the following `PanelColorGradientSettings` props are supported and directly passed down to the underlying `PanelColorGradientSettings` instance:
85
+
86
+ - `className` - added to the underlying `ToolsPanel` instance.
87
+ - `colors` - array of colors to be used.
88
+ - `gradients` - not recommended to be used since `PanelColorSettings` resets it.
89
+ - `disableCustomColors` - whether addition of custom colors is enabled
90
+ - `disableCustomGradients` - not recommended to be used since `PanelColorSettings` sets it.
91
+ - `children` - displayed below the underlying `PanelColorGradientSettings` instance.
92
+ - `settings` - not recommended to be used, since `PanelColorSettings` builds it from the `colorSettings` prop.
93
+ - `title` - title of the underlying `ToolsPanel`.
94
+ - `showTitle` - whether to show the title of the `ToolsPanel`.
95
+ - `__experimentalIsRenderedInSidebar`
96
+ - `enableAlpha` - whether to enable setting opacity when specifying a color.
97
+
98
+ Please refer to the `PanelColorGradientSettings` component for more information.
@@ -28,23 +28,24 @@ const MyPreviewOptions = () => (
28
28
  className="edit-post-post-preview-dropdown"
29
29
  deviceType={ deviceType }
30
30
  setDeviceType={ setPreviewDeviceType }
31
- >
32
- <MenuGroup>
33
- <div className="edit-post-header-preview__grouping-external">
34
- <PostPreviewButton
35
- className={ 'edit-post-header-preview__button-external' }
36
- role="menuitem"
37
- forceIsAutosaveable={ hasActiveMetaboxes }
38
- forcePreviewLink={ isSaving ? null : undefined }
39
- textContent={
40
- <>
41
- { __( 'Preview in new tab' ) }
42
- <Icon icon={ external } />
43
- </>
44
- }
45
- />
46
- </div>
47
- </MenuGroup>
31
+ > { ( { onClose } ) => (
32
+ <MenuGroup>
33
+ <div className="edit-post-header-preview__grouping-external">
34
+ <PostPreviewButton
35
+ className="edit-post-header-preview__button-external"
36
+ role="menuitem"
37
+ forceIsAutosaveable={ hasActiveMetaboxes }
38
+ textContent={
39
+ <>
40
+ { __( 'Preview in new tab' ) }
41
+ <Icon icon={ external } />
42
+ </>
43
+ }
44
+ onPreview={ onClose }
45
+ />
46
+ </div>
47
+ </MenuGroup>
48
+ ) }
48
49
  </PreviewOptions>
49
50
  );
50
51
  ```
@@ -54,7 +54,7 @@ export default function PreviewOptions( {
54
54
  icon={ deviceIcons[ deviceType.toLowerCase() ] }
55
55
  label={ label || __( 'Preview' ) }
56
56
  >
57
- { () => (
57
+ { ( renderProps ) => (
58
58
  <>
59
59
  <MenuGroup>
60
60
  <MenuItem
@@ -79,7 +79,7 @@ export default function PreviewOptions( {
79
79
  { __( 'Mobile' ) }
80
80
  </MenuItem>
81
81
  </MenuGroup>
82
- { children }
82
+ { children( renderProps ) }
83
83
  </>
84
84
  ) }
85
85
  </DropdownMenu>
@@ -28,9 +28,16 @@ export const ExperimentalBlockEditorProvider = withRegistryProvider(
28
28
  ...settings,
29
29
  __internalIsInitialized: true,
30
30
  },
31
- stripExperimentalSettings
31
+ {
32
+ stripExperimentalSettings,
33
+ reset: true,
34
+ }
32
35
  );
33
- }, [ settings ] );
36
+ }, [
37
+ settings,
38
+ stripExperimentalSettings,
39
+ __experimentalUpdateSettings,
40
+ ] );
34
41
 
35
42
  // Syncs the entity provider with changes in the block-editor store.
36
43
  useBlockSync( props );
@@ -48,7 +48,7 @@ describe( 'useBlockSync hook', () => {
48
48
  jest.clearAllMocks();
49
49
  } );
50
50
 
51
- it( 'resets the block-editor blocks when the controll value changes', async () => {
51
+ it( 'resets the block-editor blocks when the controlled value changes', async () => {
52
52
  const fakeBlocks = [];
53
53
  const resetBlocks = jest.spyOn( blockEditorActions, 'resetBlocks' );
54
54
  const replaceInnerBlocks = jest.spyOn(
@@ -58,7 +58,7 @@ describe( 'useBlockSync hook', () => {
58
58
  const onChange = jest.fn();
59
59
  const onInput = jest.fn();
60
60
 
61
- const { rerender } = render(
61
+ const { rerender, unmount } = render(
62
62
  <TestWrapper
63
63
  value={ fakeBlocks }
64
64
  onChange={ onChange }
@@ -88,9 +88,16 @@ describe( 'useBlockSync hook', () => {
88
88
  expect( onInput ).not.toHaveBeenCalled();
89
89
  expect( replaceInnerBlocks ).not.toHaveBeenCalled();
90
90
  expect( resetBlocks ).toHaveBeenCalledWith( testBlocks );
91
+
92
+ unmount();
93
+
94
+ expect( onChange ).not.toHaveBeenCalled();
95
+ expect( onInput ).not.toHaveBeenCalled();
96
+ expect( replaceInnerBlocks ).not.toHaveBeenCalled();
97
+ expect( resetBlocks ).toHaveBeenCalledWith( [] );
91
98
  } );
92
99
 
93
- it( 'replaces the inner blocks of a block when the control value changes if a clientId is passed', async () => {
100
+ it( 'replaces the inner blocks of a block when the controlled value changes if a clientId is passed', async () => {
94
101
  const fakeBlocks = [];
95
102
  const replaceInnerBlocks = jest.spyOn(
96
103
  blockEditorActions,
@@ -100,7 +107,7 @@ describe( 'useBlockSync hook', () => {
100
107
  const onChange = jest.fn();
101
108
  const onInput = jest.fn();
102
109
 
103
- const { rerender } = render(
110
+ const { rerender, unmount } = render(
104
111
  <TestWrapper
105
112
  clientId="test"
106
113
  value={ fakeBlocks }
@@ -138,8 +145,16 @@ describe( 'useBlockSync hook', () => {
138
145
  expect( onChange ).not.toHaveBeenCalled();
139
146
  expect( onInput ).not.toHaveBeenCalled();
140
147
  expect( resetBlocks ).not.toHaveBeenCalled();
141
- // We can't check the args because the blocks are cloned.
142
- expect( replaceInnerBlocks ).toHaveBeenCalled();
148
+ expect( replaceInnerBlocks ).toHaveBeenCalledWith( 'test', [
149
+ expect.objectContaining( { name: 'test/test-block' } ),
150
+ ] );
151
+
152
+ unmount();
153
+
154
+ expect( onChange ).not.toHaveBeenCalled();
155
+ expect( onInput ).not.toHaveBeenCalled();
156
+ expect( resetBlocks ).not.toHaveBeenCalled();
157
+ expect( replaceInnerBlocks ).toHaveBeenCalledWith( 'test', [] );
143
158
  } );
144
159
 
145
160
  it( 'does not add the controlled blocks to the block-editor store if the store already contains them', async () => {
@@ -134,6 +134,19 @@ export default function useBlockSync( {
134
134
  }
135
135
  };
136
136
 
137
+ // Clean up the changes made by setControlledBlocks() when the component
138
+ // containing useBlockSync() unmounts.
139
+ const unsetControlledBlocks = () => {
140
+ __unstableMarkNextChangeAsNotPersistent();
141
+ if ( clientId ) {
142
+ setHasControlledInnerBlocks( clientId, false );
143
+ __unstableMarkNextChangeAsNotPersistent();
144
+ replaceInnerBlocks( clientId, [] );
145
+ } else {
146
+ resetBlocks( [] );
147
+ }
148
+ };
149
+
137
150
  // Add a subscription to the block-editor registry to detect when changes
138
151
  // have been made. This lets us inform the data source of changes. This
139
152
  // is an effect so that the subscriber can run synchronously without
@@ -287,4 +300,10 @@ export default function useBlockSync( {
287
300
  unsubscribe();
288
301
  };
289
302
  }, [ registry, clientId ] );
303
+
304
+ useEffect( () => {
305
+ return () => {
306
+ unsetControlledBlocks();
307
+ };
308
+ }, [] );
290
309
  }