@wordpress/block-editor 12.24.0 → 12.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +1 -1
  3. package/build/components/alignment-control/ui.js +3 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-inspector/index.js +1 -1
  6. package/build/components/block-inspector/index.js.map +1 -1
  7. package/build/components/block-list/block.js +0 -9
  8. package/build/components/block-list/block.js.map +1 -1
  9. package/build/components/block-list/index.js +4 -3
  10. package/build/components/block-list/index.js.map +1 -1
  11. package/build/components/block-list/index.native.js +1 -9
  12. package/build/components/block-list/index.native.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +6 -6
  14. package/build/components/block-list/use-block-props/index.js.map +1 -1
  15. package/build/components/block-list/use-block-props/use-block-refs.js +17 -46
  16. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  17. package/build/components/block-list/use-block-props/use-is-hovered.js +10 -14
  18. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  19. package/build/components/block-mover/index.native.js +3 -1
  20. package/build/components/block-mover/index.native.js.map +1 -1
  21. package/build/components/block-settings-menu/block-settings-dropdown.js +0 -25
  22. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  23. package/build/components/block-switcher/pattern-transformations-menu.js +3 -1
  24. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  25. package/build/components/block-switcher/use-transformed-patterns.js +6 -2
  26. package/build/components/block-switcher/use-transformed-patterns.js.map +1 -1
  27. package/build/components/block-switcher/utils.js +15 -5
  28. package/build/components/block-switcher/utils.js.map +1 -1
  29. package/build/components/block-toolbar/use-has-block-toolbar.js +14 -9
  30. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  31. package/build/components/block-tools/index.js +3 -1
  32. package/build/components/block-tools/index.js.map +1 -1
  33. package/build/components/block-tools/use-show-block-tools.js +2 -5
  34. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  35. package/build/components/block-tools/zoom-out-mode-inserters.js +5 -1
  36. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  37. package/build/components/block-variation-picker/index.js +3 -2
  38. package/build/components/block-variation-picker/index.js.map +1 -1
  39. package/build/components/block-variation-transforms/index.js +3 -1
  40. package/build/components/block-variation-transforms/index.js.map +1 -1
  41. package/build/components/floating-toolbar/index.native.js +9 -5
  42. package/build/components/floating-toolbar/index.native.js.map +1 -1
  43. package/build/components/global-styles/background-panel.js +1 -1
  44. package/build/components/global-styles/background-panel.js.map +1 -1
  45. package/build/components/global-styles/color-panel.js +3 -1
  46. package/build/components/global-styles/color-panel.js.map +1 -1
  47. package/build/components/global-styles/dimensions-panel.js +16 -0
  48. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  49. package/build/components/global-styles/hooks.js +3 -2
  50. package/build/components/global-styles/hooks.js.map +1 -1
  51. package/build/components/global-styles/typography-panel.js +23 -23
  52. package/build/components/global-styles/typography-panel.js.map +1 -1
  53. package/build/components/global-styles/use-global-styles-output.js +149 -132
  54. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  55. package/build/components/global-styles/utils.js +45 -0
  56. package/build/components/global-styles/utils.js.map +1 -1
  57. package/build/components/inner-blocks/index.js +16 -2
  58. package/build/components/inner-blocks/index.js.map +1 -1
  59. package/build/components/inserter/block-patterns-tab/index.js +12 -31
  60. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  61. package/build/components/inserter/block-types-tab.js +4 -0
  62. package/build/components/inserter/block-types-tab.js.map +1 -1
  63. package/build/components/inserter/category-tabs/index.js +56 -0
  64. package/build/components/inserter/category-tabs/index.js.map +1 -0
  65. package/build/components/inserter/media-tab/index.js +2 -2
  66. package/build/components/inserter/media-tab/index.js.map +1 -1
  67. package/build/components/inserter/media-tab/media-panel.js +0 -25
  68. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  69. package/build/components/inserter/media-tab/media-preview.js +13 -3
  70. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  71. package/build/components/inserter/media-tab/media-tab.js +15 -29
  72. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  73. package/build/components/inserter/menu.js +59 -69
  74. package/build/components/inserter/menu.js.map +1 -1
  75. package/build/components/inserter/tabs.js +6 -6
  76. package/build/components/inserter/tabs.js.map +1 -1
  77. package/build/components/line-height-control/index.js +6 -2
  78. package/build/components/line-height-control/index.js.map +1 -1
  79. package/build/components/link-control/search-item.js +9 -3
  80. package/build/components/link-control/search-item.js.map +1 -1
  81. package/build/components/list-view/block-select-button.js +5 -170
  82. package/build/components/list-view/block-select-button.js.map +1 -1
  83. package/build/components/list-view/block.js +166 -14
  84. package/build/components/list-view/block.js.map +1 -1
  85. package/build/components/list-view/index.js +1 -1
  86. package/build/components/list-view/index.js.map +1 -1
  87. package/build/components/list-view/use-list-view-drop-zone.js +1 -1
  88. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  89. package/build/components/list-view/utils.js +3 -1
  90. package/build/components/list-view/utils.js.map +1 -1
  91. package/build/components/media-placeholder/index.js +3 -3
  92. package/build/components/media-placeholder/index.js.map +1 -1
  93. package/build/components/navigable-toolbar/index.js +3 -1
  94. package/build/components/navigable-toolbar/index.js.map +1 -1
  95. package/build/components/provider/block-refs-provider.js +3 -4
  96. package/build/components/provider/block-refs-provider.js.map +1 -1
  97. package/build/components/provider/use-block-sync.js +3 -12
  98. package/build/components/provider/use-block-sync.js.map +1 -1
  99. package/build/components/rich-text/event-listeners/before-input-rules.js +93 -0
  100. package/build/components/rich-text/event-listeners/before-input-rules.js.map +1 -0
  101. package/build/components/rich-text/event-listeners/delete.js +58 -0
  102. package/build/components/rich-text/event-listeners/delete.js.map +1 -0
  103. package/build/components/rich-text/event-listeners/enter.js +98 -0
  104. package/build/components/rich-text/event-listeners/enter.js.map +1 -0
  105. package/build/components/rich-text/event-listeners/firefox-compat.js +36 -0
  106. package/build/components/rich-text/event-listeners/firefox-compat.js.map +1 -0
  107. package/build/components/rich-text/event-listeners/index.js +44 -0
  108. package/build/components/rich-text/event-listeners/index.js.map +1 -0
  109. package/build/components/rich-text/event-listeners/input-events.js +22 -0
  110. package/build/components/rich-text/event-listeners/input-events.js.map +1 -0
  111. package/build/components/rich-text/event-listeners/input-rules.js +135 -0
  112. package/build/components/rich-text/event-listeners/input-rules.js.map +1 -0
  113. package/build/components/rich-text/event-listeners/insert-replacement-text.js +33 -0
  114. package/build/components/rich-text/event-listeners/insert-replacement-text.js.map +1 -0
  115. package/build/components/rich-text/event-listeners/paste-handler.js +146 -0
  116. package/build/components/rich-text/event-listeners/paste-handler.js.map +1 -0
  117. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.js +27 -0
  118. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.js.map +1 -0
  119. package/build/components/rich-text/event-listeners/shortcuts.js +22 -0
  120. package/build/components/rich-text/event-listeners/shortcuts.js.map +1 -0
  121. package/build/components/rich-text/event-listeners/undo-automatic-change.js +51 -0
  122. package/build/components/rich-text/event-listeners/undo-automatic-change.js.map +1 -0
  123. package/build/components/rich-text/index.js +11 -31
  124. package/build/components/rich-text/index.js.map +1 -1
  125. package/build/components/rich-text/index.native.js +13 -3
  126. package/build/components/rich-text/index.native.js.map +1 -1
  127. package/build/components/rich-text/multiline.js +6 -2
  128. package/build/components/rich-text/multiline.js.map +1 -1
  129. package/build/components/rich-text/native/index.native.js +12 -0
  130. package/build/components/rich-text/native/index.native.js.map +1 -1
  131. package/build/components/rich-text/use-format-types.js +8 -4
  132. package/build/components/rich-text/use-format-types.js.map +1 -1
  133. package/build/components/segmented-text-control/index.js +62 -0
  134. package/build/components/segmented-text-control/index.js.map +1 -0
  135. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -2
  136. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  137. package/build/components/text-alignment-control/index.js +76 -0
  138. package/build/components/text-alignment-control/index.js.map +1 -0
  139. package/build/components/text-decoration-control/index.js +21 -25
  140. package/build/components/text-decoration-control/index.js.map +1 -1
  141. package/build/components/text-transform-control/index.js +18 -22
  142. package/build/components/text-transform-control/index.js.map +1 -1
  143. package/build/components/use-block-display-information/index.js +9 -3
  144. package/build/components/use-block-display-information/index.js.map +1 -1
  145. package/build/components/use-on-block-drop/index.js +3 -1
  146. package/build/components/use-on-block-drop/index.js.map +1 -1
  147. package/build/components/writing-flow/use-drag-selection.js +3 -1
  148. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  149. package/build/components/writing-flow/use-tab-nav.js +3 -1
  150. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  151. package/build/components/writing-mode-control/index.js +16 -20
  152. package/build/components/writing-mode-control/index.js.map +1 -1
  153. package/build/hooks/duotone.js +3 -1
  154. package/build/hooks/duotone.js.map +1 -1
  155. package/build/hooks/utils.js +11 -6
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/private-apis.js +4 -2
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/actions.js +32 -8
  160. package/build/store/actions.js.map +1 -1
  161. package/build/store/private-selectors.js +27 -6
  162. package/build/store/private-selectors.js.map +1 -1
  163. package/build/store/reducer.js +11 -8
  164. package/build/store/reducer.js.map +1 -1
  165. package/build/store/selectors.js +21 -7
  166. package/build/store/selectors.js.map +1 -1
  167. package/build/utils/object.js +17 -0
  168. package/build/utils/object.js.map +1 -1
  169. package/build/utils/order-inserter-block-items.js +6 -2
  170. package/build/utils/order-inserter-block-items.js.map +1 -1
  171. package/build/utils/pasting.js +6 -2
  172. package/build/utils/pasting.js.map +1 -1
  173. package/build-module/components/alignment-control/ui.js +3 -1
  174. package/build-module/components/alignment-control/ui.js.map +1 -1
  175. package/build-module/components/block-inspector/index.js +1 -1
  176. package/build-module/components/block-inspector/index.js.map +1 -1
  177. package/build-module/components/block-list/block.js +0 -9
  178. package/build-module/components/block-list/block.js.map +1 -1
  179. package/build-module/components/block-list/index.js +4 -3
  180. package/build-module/components/block-list/index.js.map +1 -1
  181. package/build-module/components/block-list/index.native.js +1 -9
  182. package/build-module/components/block-list/index.native.js.map +1 -1
  183. package/build-module/components/block-list/use-block-props/index.js +6 -6
  184. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  185. package/build-module/components/block-list/use-block-props/use-block-refs.js +19 -48
  186. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  187. package/build-module/components/block-list/use-block-props/use-is-hovered.js +10 -14
  188. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  189. package/build-module/components/block-mover/index.native.js +3 -1
  190. package/build-module/components/block-mover/index.native.js.map +1 -1
  191. package/build-module/components/block-settings-menu/block-settings-dropdown.js +1 -26
  192. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  193. package/build-module/components/block-switcher/pattern-transformations-menu.js +3 -1
  194. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  195. package/build-module/components/block-switcher/use-transformed-patterns.js +6 -2
  196. package/build-module/components/block-switcher/use-transformed-patterns.js.map +1 -1
  197. package/build-module/components/block-switcher/utils.js +15 -5
  198. package/build-module/components/block-switcher/utils.js.map +1 -1
  199. package/build-module/components/block-toolbar/use-has-block-toolbar.js +14 -9
  200. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  201. package/build-module/components/block-tools/index.js +3 -1
  202. package/build-module/components/block-tools/index.js.map +1 -1
  203. package/build-module/components/block-tools/use-show-block-tools.js +2 -5
  204. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  205. package/build-module/components/block-tools/zoom-out-mode-inserters.js +5 -1
  206. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  207. package/build-module/components/block-variation-picker/index.js +3 -2
  208. package/build-module/components/block-variation-picker/index.js.map +1 -1
  209. package/build-module/components/block-variation-transforms/index.js +3 -1
  210. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  211. package/build-module/components/floating-toolbar/index.native.js +9 -5
  212. package/build-module/components/floating-toolbar/index.native.js.map +1 -1
  213. package/build-module/components/global-styles/background-panel.js +1 -1
  214. package/build-module/components/global-styles/background-panel.js.map +1 -1
  215. package/build-module/components/global-styles/color-panel.js +3 -1
  216. package/build-module/components/global-styles/color-panel.js.map +1 -1
  217. package/build-module/components/global-styles/dimensions-panel.js +17 -1
  218. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  219. package/build-module/components/global-styles/hooks.js +3 -2
  220. package/build-module/components/global-styles/hooks.js.map +1 -1
  221. package/build-module/components/global-styles/typography-panel.js +24 -24
  222. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  223. package/build-module/components/global-styles/use-global-styles-output.js +149 -132
  224. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  225. package/build-module/components/global-styles/utils.js +44 -0
  226. package/build-module/components/global-styles/utils.js.map +1 -1
  227. package/build-module/components/inner-blocks/index.js +16 -2
  228. package/build-module/components/inner-blocks/index.js.map +1 -1
  229. package/build-module/components/inserter/block-patterns-tab/index.js +13 -32
  230. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  231. package/build-module/components/inserter/block-types-tab.js +4 -0
  232. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  233. package/build-module/components/inserter/category-tabs/index.js +49 -0
  234. package/build-module/components/inserter/category-tabs/index.js.map +1 -0
  235. package/build-module/components/inserter/media-tab/index.js +1 -1
  236. package/build-module/components/inserter/media-tab/index.js.map +1 -1
  237. package/build-module/components/inserter/media-tab/media-panel.js +0 -24
  238. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  239. package/build-module/components/inserter/media-tab/media-preview.js +13 -3
  240. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  241. package/build-module/components/inserter/media-tab/media-tab.js +17 -31
  242. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  243. package/build-module/components/inserter/menu.js +61 -71
  244. package/build-module/components/inserter/menu.js.map +1 -1
  245. package/build-module/components/inserter/tabs.js +6 -6
  246. package/build-module/components/inserter/tabs.js.map +1 -1
  247. package/build-module/components/line-height-control/index.js +6 -2
  248. package/build-module/components/line-height-control/index.js.map +1 -1
  249. package/build-module/components/link-control/search-item.js +9 -3
  250. package/build-module/components/link-control/search-item.js.map +1 -1
  251. package/build-module/components/list-view/block-select-button.js +7 -172
  252. package/build-module/components/list-view/block-select-button.js.map +1 -1
  253. package/build-module/components/list-view/block.js +167 -15
  254. package/build-module/components/list-view/block.js.map +1 -1
  255. package/build-module/components/list-view/index.js +1 -1
  256. package/build-module/components/list-view/index.js.map +1 -1
  257. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -1
  258. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  259. package/build-module/components/list-view/utils.js +3 -1
  260. package/build-module/components/list-view/utils.js.map +1 -1
  261. package/build-module/components/media-placeholder/index.js +3 -3
  262. package/build-module/components/media-placeholder/index.js.map +1 -1
  263. package/build-module/components/navigable-toolbar/index.js +3 -1
  264. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  265. package/build-module/components/provider/block-refs-provider.js +3 -4
  266. package/build-module/components/provider/block-refs-provider.js.map +1 -1
  267. package/build-module/components/provider/use-block-sync.js +4 -13
  268. package/build-module/components/provider/use-block-sync.js.map +1 -1
  269. package/build-module/components/rich-text/event-listeners/before-input-rules.js +86 -0
  270. package/build-module/components/rich-text/event-listeners/before-input-rules.js.map +1 -0
  271. package/build-module/components/rich-text/event-listeners/delete.js +51 -0
  272. package/build-module/components/rich-text/event-listeners/delete.js.map +1 -0
  273. package/build-module/components/rich-text/event-listeners/enter.js +92 -0
  274. package/build-module/components/rich-text/event-listeners/enter.js.map +1 -0
  275. package/build-module/components/rich-text/event-listeners/firefox-compat.js +29 -0
  276. package/build-module/components/rich-text/event-listeners/firefox-compat.js.map +1 -0
  277. package/build-module/components/rich-text/event-listeners/index.js +36 -0
  278. package/build-module/components/rich-text/event-listeners/index.js.map +1 -0
  279. package/build-module/components/rich-text/event-listeners/input-events.js +15 -0
  280. package/build-module/components/rich-text/event-listeners/input-events.js.map +1 -0
  281. package/build-module/components/rich-text/event-listeners/input-rules.js +127 -0
  282. package/build-module/components/rich-text/event-listeners/input-rules.js.map +1 -0
  283. package/build-module/components/rich-text/event-listeners/insert-replacement-text.js +27 -0
  284. package/build-module/components/rich-text/event-listeners/insert-replacement-text.js.map +1 -0
  285. package/build-module/components/rich-text/event-listeners/paste-handler.js +142 -0
  286. package/build-module/components/rich-text/event-listeners/paste-handler.js.map +1 -0
  287. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js +21 -0
  288. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js.map +1 -0
  289. package/build-module/components/rich-text/event-listeners/shortcuts.js +15 -0
  290. package/build-module/components/rich-text/event-listeners/shortcuts.js.map +1 -0
  291. package/build-module/components/rich-text/event-listeners/undo-automatic-change.js +45 -0
  292. package/build-module/components/rich-text/event-listeners/undo-automatic-change.js.map +1 -0
  293. package/build-module/components/rich-text/index.js +12 -32
  294. package/build-module/components/rich-text/index.js.map +1 -1
  295. package/build-module/components/rich-text/index.native.js +13 -3
  296. package/build-module/components/rich-text/index.native.js.map +1 -1
  297. package/build-module/components/rich-text/multiline.js +6 -2
  298. package/build-module/components/rich-text/multiline.js.map +1 -1
  299. package/build-module/components/rich-text/native/index.native.js +12 -0
  300. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  301. package/build-module/components/rich-text/use-format-types.js +8 -4
  302. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  303. package/build-module/components/segmented-text-control/index.js +55 -0
  304. package/build-module/components/segmented-text-control/index.js.map +1 -0
  305. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -2
  306. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  307. package/build-module/components/text-alignment-control/index.js +68 -0
  308. package/build-module/components/text-alignment-control/index.js.map +1 -0
  309. package/build-module/components/text-decoration-control/index.js +21 -25
  310. package/build-module/components/text-decoration-control/index.js.map +1 -1
  311. package/build-module/components/text-transform-control/index.js +18 -22
  312. package/build-module/components/text-transform-control/index.js.map +1 -1
  313. package/build-module/components/use-block-display-information/index.js +9 -3
  314. package/build-module/components/use-block-display-information/index.js.map +1 -1
  315. package/build-module/components/use-on-block-drop/index.js +3 -1
  316. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  317. package/build-module/components/writing-flow/use-drag-selection.js +3 -1
  318. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  319. package/build-module/components/writing-flow/use-tab-nav.js +3 -1
  320. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  321. package/build-module/components/writing-mode-control/index.js +16 -20
  322. package/build-module/components/writing-mode-control/index.js.map +1 -1
  323. package/build-module/hooks/duotone.js +3 -1
  324. package/build-module/hooks/duotone.js.map +1 -1
  325. package/build-module/hooks/utils.js +11 -6
  326. package/build-module/hooks/utils.js.map +1 -1
  327. package/build-module/private-apis.js +4 -2
  328. package/build-module/private-apis.js.map +1 -1
  329. package/build-module/store/actions.js +32 -8
  330. package/build-module/store/actions.js.map +1 -1
  331. package/build-module/store/private-selectors.js +27 -5
  332. package/build-module/store/private-selectors.js.map +1 -1
  333. package/build-module/store/reducer.js +11 -8
  334. package/build-module/store/reducer.js.map +1 -1
  335. package/build-module/store/selectors.js +21 -7
  336. package/build-module/store/selectors.js.map +1 -1
  337. package/build-module/utils/object.js +16 -0
  338. package/build-module/utils/object.js.map +1 -1
  339. package/build-module/utils/order-inserter-block-items.js +6 -2
  340. package/build-module/utils/order-inserter-block-items.js.map +1 -1
  341. package/build-module/utils/pasting.js +6 -2
  342. package/build-module/utils/pasting.js.map +1 -1
  343. package/build-style/content-rtl.css +41 -68
  344. package/build-style/content.css +41 -68
  345. package/build-style/style-rtl.css +100 -199
  346. package/build-style/style.css +100 -199
  347. package/package.json +31 -31
  348. package/src/components/alignment-control/ui.js +3 -1
  349. package/src/components/block-bindings-toolbar-indicator/style.scss +1 -4
  350. package/src/components/block-canvas/style.scss +1 -3
  351. package/src/components/block-draggable/test/helpers.native.js +8 -8
  352. package/src/components/block-inspector/index.js +1 -2
  353. package/src/components/block-list/block.js +2 -13
  354. package/src/components/block-list/content.scss +9 -1
  355. package/src/components/block-list/index.js +4 -4
  356. package/src/components/block-list/index.native.js +1 -6
  357. package/src/components/block-list/use-block-props/index.js +12 -4
  358. package/src/components/block-list/use-block-props/use-block-refs.js +17 -57
  359. package/src/components/block-list/use-block-props/use-is-hovered.js +11 -16
  360. package/src/components/block-mover/index.native.js +3 -1
  361. package/src/components/block-patterns-list/style.scss +1 -3
  362. package/src/components/block-preview/style.scss +13 -15
  363. package/src/components/block-settings-menu/block-settings-dropdown.js +1 -51
  364. package/src/components/block-switcher/pattern-transformations-menu.js +3 -1
  365. package/src/components/block-switcher/use-transformed-patterns.js +6 -2
  366. package/src/components/block-switcher/utils.js +14 -5
  367. package/src/components/block-toolbar/style.scss +8 -11
  368. package/src/components/block-toolbar/use-has-block-toolbar.js +21 -16
  369. package/src/components/block-tools/index.js +3 -1
  370. package/src/components/block-tools/use-show-block-tools.js +36 -48
  371. package/src/components/block-tools/zoom-out-mode-inserters.js +5 -1
  372. package/src/components/block-variation-picker/content.scss +22 -72
  373. package/src/components/block-variation-picker/index.js +3 -2
  374. package/src/components/block-variation-transforms/index.js +3 -1
  375. package/src/components/floating-toolbar/index.native.js +5 -2
  376. package/src/components/global-styles/background-panel.js +1 -3
  377. package/src/components/global-styles/color-panel.js +3 -1
  378. package/src/components/global-styles/dimensions-panel.js +18 -1
  379. package/src/components/global-styles/hooks.js +2 -0
  380. package/src/components/global-styles/test/utils.js +21 -0
  381. package/src/components/global-styles/typography-panel.js +27 -23
  382. package/src/components/global-styles/use-global-styles-output.js +211 -187
  383. package/src/components/global-styles/utils.js +55 -0
  384. package/src/components/inner-blocks/index.js +14 -1
  385. package/src/components/inserter/block-patterns-tab/index.js +15 -65
  386. package/src/components/inserter/block-types-tab.js +5 -0
  387. package/src/components/inserter/category-tabs/index.js +74 -0
  388. package/src/components/inserter/media-tab/index.js +1 -1
  389. package/src/components/inserter/media-tab/media-panel.js +0 -22
  390. package/src/components/inserter/media-tab/media-preview.js +15 -7
  391. package/src/components/inserter/media-tab/media-tab.js +44 -83
  392. package/src/components/inserter/menu.js +139 -117
  393. package/src/components/inserter/style.scss +90 -170
  394. package/src/components/inserter/tabs.js +5 -13
  395. package/src/components/line-height-control/index.js +6 -2
  396. package/src/components/link-control/search-item.js +9 -3
  397. package/src/components/list-view/block-select-button.js +73 -266
  398. package/src/components/list-view/block.js +218 -28
  399. package/src/components/list-view/index.js +1 -1
  400. package/src/components/list-view/style.scss +20 -28
  401. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  402. package/src/components/list-view/utils.js +3 -1
  403. package/src/components/media-placeholder/content.scss +0 -11
  404. package/src/components/media-placeholder/index.js +3 -3
  405. package/src/components/navigable-toolbar/index.js +3 -1
  406. package/src/components/provider/block-refs-provider.js +3 -8
  407. package/src/components/provider/test/use-block-sync.js +7 -0
  408. package/src/components/provider/use-block-sync.js +3 -20
  409. package/src/components/rich-text/event-listeners/before-input-rules.js +92 -0
  410. package/src/components/rich-text/event-listeners/delete.js +53 -0
  411. package/src/components/rich-text/event-listeners/enter.js +104 -0
  412. package/src/components/rich-text/event-listeners/firefox-compat.js +31 -0
  413. package/src/components/rich-text/event-listeners/index.js +56 -0
  414. package/src/components/rich-text/event-listeners/input-events.js +13 -0
  415. package/src/components/rich-text/event-listeners/input-rules.js +146 -0
  416. package/src/components/rich-text/event-listeners/insert-replacement-text.js +28 -0
  417. package/src/components/rich-text/event-listeners/paste-handler.js +169 -0
  418. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +24 -0
  419. package/src/components/rich-text/event-listeners/shortcuts.js +13 -0
  420. package/src/components/rich-text/event-listeners/undo-automatic-change.js +45 -0
  421. package/src/components/rich-text/index.js +7 -34
  422. package/src/components/rich-text/index.native.js +11 -0
  423. package/src/components/rich-text/multiline.js +6 -2
  424. package/src/components/rich-text/native/index.native.js +11 -0
  425. package/src/components/rich-text/use-format-types.js +6 -2
  426. package/src/components/segmented-text-control/index.js +63 -0
  427. package/src/components/{writing-mode-control → segmented-text-control}/style.scss +2 -5
  428. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +16 -1
  429. package/src/components/text-alignment-control/index.js +91 -0
  430. package/src/components/text-alignment-control/stories/index.story.js +39 -0
  431. package/src/components/text-decoration-control/index.js +20 -33
  432. package/src/components/text-transform-control/index.js +17 -30
  433. package/src/components/use-block-display-information/index.js +9 -3
  434. package/src/components/use-on-block-drop/index.js +3 -1
  435. package/src/components/writing-flow/use-drag-selection.js +3 -1
  436. package/src/components/writing-flow/use-tab-nav.js +3 -1
  437. package/src/components/writing-mode-control/index.js +15 -28
  438. package/src/hooks/duotone.js +3 -1
  439. package/src/hooks/utils.js +16 -2
  440. package/src/private-apis.js +4 -2
  441. package/src/store/actions.js +36 -12
  442. package/src/store/private-selectors.js +28 -4
  443. package/src/store/reducer.js +13 -23
  444. package/src/store/selectors.js +20 -7
  445. package/src/style.scss +1 -2
  446. package/src/utils/object.js +16 -0
  447. package/src/utils/order-inserter-block-items.js +6 -2
  448. package/src/utils/pasting.js +6 -2
  449. package/build/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -54
  450. package/build/components/block-list/use-block-props/use-block-moving-mode-class-names.js.map +0 -1
  451. package/build/components/rich-text/use-before-input-rules.js +0 -98
  452. package/build/components/rich-text/use-before-input-rules.js.map +0 -1
  453. package/build/components/rich-text/use-delete.js +0 -64
  454. package/build/components/rich-text/use-delete.js.map +0 -1
  455. package/build/components/rich-text/use-enter.js +0 -109
  456. package/build/components/rich-text/use-enter.js.map +0 -1
  457. package/build/components/rich-text/use-firefox-compat.js +0 -44
  458. package/build/components/rich-text/use-firefox-compat.js.map +0 -1
  459. package/build/components/rich-text/use-input-events.js +0 -25
  460. package/build/components/rich-text/use-input-events.js.map +0 -1
  461. package/build/components/rich-text/use-input-rules.js +0 -139
  462. package/build/components/rich-text/use-input-rules.js.map +0 -1
  463. package/build/components/rich-text/use-insert-replacement-text.js +0 -38
  464. package/build/components/rich-text/use-insert-replacement-text.js.map +0 -1
  465. package/build/components/rich-text/use-paste-handler.js +0 -158
  466. package/build/components/rich-text/use-paste-handler.js.map +0 -1
  467. package/build/components/rich-text/use-remove-browser-shortcuts.js +0 -32
  468. package/build/components/rich-text/use-remove-browser-shortcuts.js.map +0 -1
  469. package/build/components/rich-text/use-shortcuts.js +0 -25
  470. package/build/components/rich-text/use-shortcuts.js.map +0 -1
  471. package/build/components/rich-text/use-undo-automatic-change.js +0 -53
  472. package/build/components/rich-text/use-undo-automatic-change.js.map +0 -1
  473. package/build-module/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -47
  474. package/build-module/components/block-list/use-block-props/use-block-moving-mode-class-names.js.map +0 -1
  475. package/build-module/components/rich-text/use-before-input-rules.js +0 -92
  476. package/build-module/components/rich-text/use-before-input-rules.js.map +0 -1
  477. package/build-module/components/rich-text/use-delete.js +0 -57
  478. package/build-module/components/rich-text/use-delete.js.map +0 -1
  479. package/build-module/components/rich-text/use-enter.js +0 -102
  480. package/build-module/components/rich-text/use-enter.js.map +0 -1
  481. package/build-module/components/rich-text/use-firefox-compat.js +0 -37
  482. package/build-module/components/rich-text/use-firefox-compat.js.map +0 -1
  483. package/build-module/components/rich-text/use-input-events.js +0 -18
  484. package/build-module/components/rich-text/use-input-events.js.map +0 -1
  485. package/build-module/components/rich-text/use-input-rules.js +0 -132
  486. package/build-module/components/rich-text/use-input-rules.js.map +0 -1
  487. package/build-module/components/rich-text/use-insert-replacement-text.js +0 -32
  488. package/build-module/components/rich-text/use-insert-replacement-text.js.map +0 -1
  489. package/build-module/components/rich-text/use-paste-handler.js +0 -152
  490. package/build-module/components/rich-text/use-paste-handler.js.map +0 -1
  491. package/build-module/components/rich-text/use-remove-browser-shortcuts.js +0 -26
  492. package/build-module/components/rich-text/use-remove-browser-shortcuts.js.map +0 -1
  493. package/build-module/components/rich-text/use-shortcuts.js +0 -18
  494. package/build-module/components/rich-text/use-shortcuts.js.map +0 -1
  495. package/build-module/components/rich-text/use-undo-automatic-change.js +0 -46
  496. package/build-module/components/rich-text/use-undo-automatic-change.js.map +0 -1
  497. package/src/components/block-list/use-block-props/use-block-moving-mode-class-names.js +0 -55
  498. package/src/components/rich-text/use-before-input-rules.js +0 -99
  499. package/src/components/rich-text/use-delete.js +0 -59
  500. package/src/components/rich-text/use-enter.js +0 -110
  501. package/src/components/rich-text/use-firefox-compat.js +0 -39
  502. package/src/components/rich-text/use-input-events.js +0 -19
  503. package/src/components/rich-text/use-input-rules.js +0 -150
  504. package/src/components/rich-text/use-insert-replacement-text.js +0 -31
  505. package/src/components/rich-text/use-paste-handler.js +0 -180
  506. package/src/components/rich-text/use-remove-browser-shortcuts.js +0 -29
  507. package/src/components/rich-text/use-shortcuts.js +0 -19
  508. package/src/components/rich-text/use-undo-automatic-change.js +0 -46
  509. package/src/components/text-decoration-control/style.scss +0 -18
  510. package/src/components/text-transform-control/style.scss +0 -18
@@ -0,0 +1,63 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { BaseControl, Button } from '@wordpress/components';
10
+
11
+ /**
12
+ * @typedef {Object} Option
13
+ * @property {string} label The label of the option.
14
+ * @property {string} value The value of the option.
15
+ * @property {string} icon The icon of the option.
16
+ */
17
+
18
+ /**
19
+ * Control to facilitate selecting a text style from a set of options.
20
+ *
21
+ * @param {Object} props Component props.
22
+ * @param {string} props.label A label for the option.
23
+ * @param {string} props.value Currently selected value.
24
+ * @param {Function} props.onChange Callback to handle onChange.
25
+ * @param {Option[]} props.options Array of options to display.
26
+ * @param {string} props.className Additional class name to apply.
27
+ *
28
+ * @return {Element} Element to render.
29
+ */
30
+ export default function SegmentedTextControl( {
31
+ label,
32
+ value,
33
+ options,
34
+ onChange,
35
+ className,
36
+ } ) {
37
+ return (
38
+ <fieldset
39
+ className={ classnames(
40
+ 'block-editor-segmented-text-control',
41
+ className
42
+ ) }
43
+ >
44
+ <BaseControl.VisualLabel as="legend">
45
+ { label }
46
+ </BaseControl.VisualLabel>
47
+ <div className="block-editor-segmented-text-control__buttons">
48
+ { options.map( ( option ) => {
49
+ return (
50
+ <Button
51
+ size="compact"
52
+ key={ option.value }
53
+ icon={ option.icon }
54
+ label={ option.label }
55
+ isPressed={ option.value === value }
56
+ onClick={ () => onChange( option.value ) }
57
+ />
58
+ );
59
+ } ) }
60
+ </div>
61
+ </fieldset>
62
+ );
63
+ }
@@ -1,18 +1,15 @@
1
- .block-editor-writing-mode-control {
1
+ .block-editor-segmented-text-control {
2
2
  border: 0;
3
3
  margin: 0;
4
4
  padding: 0;
5
5
 
6
- .block-editor-writing-mode-control__buttons {
6
+ .block-editor-segmented-text-control__buttons {
7
7
  // 4px of padding makes the row 40px high, same as an input.
8
8
  padding: $grid-unit-05 0;
9
9
  display: flex;
10
10
  }
11
11
 
12
12
  .components-button.has-icon {
13
- height: $grid-unit-40;
14
13
  margin-right: $grid-unit-05;
15
- min-width: $grid-unit-40;
16
- padding: 0;
17
14
  }
18
15
  }
@@ -92,6 +92,8 @@ export default function SpacingInputControl( {
92
92
  ! isValueSpacingPreset( value )
93
93
  );
94
94
 
95
+ const [ minValue, setMinValue ] = useState( minimumCustomValue );
96
+
95
97
  const previousValue = usePrevious( value );
96
98
  if (
97
99
  !! value &&
@@ -222,13 +224,26 @@ export default function SpacingInputControl( {
222
224
  }
223
225
  value={ currentValue }
224
226
  units={ units }
225
- min={ minimumCustomValue }
227
+ min={ minValue }
226
228
  placeholder={ allPlaceholder }
227
229
  disableUnits={ isMixed }
228
230
  label={ ariaLabel }
229
231
  hideLabelFromVision
230
232
  className="spacing-sizes-control__custom-value-input"
231
233
  size={ '__unstable-large' }
234
+ onDragStart={ () => {
235
+ if ( value?.charAt( 0 ) === '-' ) {
236
+ setMinValue( 0 );
237
+ }
238
+ } }
239
+ onDrag={ () => {
240
+ if ( value?.charAt( 0 ) === '-' ) {
241
+ setMinValue( 0 );
242
+ }
243
+ } }
244
+ onDragEnd={ () => {
245
+ setMinValue( minimumCustomValue );
246
+ } }
232
247
  />
233
248
  <RangeControl
234
249
  onMouseOver={ onMouseOver }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __ } from '@wordpress/i18n';
10
+ import {
11
+ alignLeft,
12
+ alignCenter,
13
+ alignRight,
14
+ alignJustify,
15
+ } from '@wordpress/icons';
16
+ import { useMemo } from '@wordpress/element';
17
+
18
+ /**
19
+ * Internal dependencies
20
+ */
21
+ import SegmentedTextControl from '../segmented-text-control';
22
+
23
+ const TEXT_ALIGNMENT_OPTIONS = [
24
+ {
25
+ label: __( 'Align text left' ),
26
+ value: 'left',
27
+ icon: alignLeft,
28
+ },
29
+ {
30
+ label: __( 'Align text center' ),
31
+ value: 'center',
32
+ icon: alignCenter,
33
+ },
34
+ {
35
+ label: __( 'Align text right' ),
36
+ value: 'right',
37
+ icon: alignRight,
38
+ },
39
+ {
40
+ label: __( 'Justify text' ),
41
+ value: 'justify',
42
+ icon: alignJustify,
43
+ },
44
+ ];
45
+
46
+ const DEFAULT_OPTIONS = [ 'left', 'center', 'right' ];
47
+
48
+ /**
49
+ * Control to facilitate text alignment selections.
50
+ *
51
+ * @param {Object} props Component props.
52
+ * @param {string} props.className Class name to add to the control.
53
+ * @param {string} props.value Currently selected text alignment.
54
+ * @param {Function} props.onChange Handles change in text alignment selection.
55
+ * @param {string[]} props.options Array of text alignment options to display.
56
+ *
57
+ * @return {Element} Text alignment control.
58
+ */
59
+ export default function TextAlignmentControl( {
60
+ className,
61
+ value,
62
+ onChange,
63
+ options = DEFAULT_OPTIONS,
64
+ } ) {
65
+ const validOptions = useMemo(
66
+ () =>
67
+ TEXT_ALIGNMENT_OPTIONS.filter( ( option ) =>
68
+ options.includes( option.value )
69
+ ),
70
+ [ options ]
71
+ );
72
+
73
+ if ( ! validOptions.length ) {
74
+ return null;
75
+ }
76
+
77
+ return (
78
+ <SegmentedTextControl
79
+ label={ __( 'Text alignment' ) }
80
+ options={ validOptions }
81
+ className={ classnames(
82
+ 'block-editor-text-alignment-control',
83
+ className
84
+ ) }
85
+ value={ value }
86
+ onChange={ ( newValue ) => {
87
+ onChange( newValue === value ? undefined : newValue );
88
+ } }
89
+ />
90
+ );
91
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useState } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import TextAlignmentControl from '../';
10
+
11
+ export default {
12
+ title: 'BlockEditor/TextAlignmentControl',
13
+ component: TextAlignmentControl,
14
+ argTypes: {
15
+ onChange: { action: 'onChange' },
16
+ className: { control: 'text' },
17
+ options: {
18
+ control: 'check',
19
+ options: [ 'left', 'center', 'right', 'justify' ],
20
+ },
21
+ value: { control: { type: null } },
22
+ },
23
+ };
24
+
25
+ const Template = ( { onChange, ...args } ) => {
26
+ const [ value, setValue ] = useState();
27
+ return (
28
+ <TextAlignmentControl
29
+ { ...args }
30
+ onChange={ ( ...changeArgs ) => {
31
+ onChange( ...changeArgs );
32
+ setValue( ...changeArgs );
33
+ } }
34
+ value={ value }
35
+ />
36
+ );
37
+ };
38
+
39
+ export const Default = Template.bind( {} );
@@ -6,23 +6,27 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { BaseControl, Button } from '@wordpress/components';
10
9
  import { reset, formatStrikethrough, formatUnderline } from '@wordpress/icons';
11
10
  import { __ } from '@wordpress/i18n';
12
11
 
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import SegmentedTextControl from '../segmented-text-control';
16
+
13
17
  const TEXT_DECORATIONS = [
14
18
  {
15
- name: __( 'None' ),
19
+ label: __( 'None' ),
16
20
  value: 'none',
17
21
  icon: reset,
18
22
  },
19
23
  {
20
- name: __( 'Underline' ),
24
+ label: __( 'Underline' ),
21
25
  value: 'underline',
22
26
  icon: formatUnderline,
23
27
  },
24
28
  {
25
- name: __( 'Strikethrough' ),
29
+ label: __( 'Strikethrough' ),
26
30
  value: 'line-through',
27
31
  icon: formatStrikethrough,
28
32
  },
@@ -31,10 +35,10 @@ const TEXT_DECORATIONS = [
31
35
  /**
32
36
  * Control to facilitate text decoration selections.
33
37
  *
34
- * @param {Object} props Component props.
35
- * @param {string} props.value Currently selected text decoration.
36
- * @param {Function} props.onChange Handles change in text decoration selection.
37
- * @param {string} [props.className] Additional class name to apply.
38
+ * @param {Object} props Component props.
39
+ * @param {string} props.value Currently selected text decoration.
40
+ * @param {Function} props.onChange Handles change in text decoration selection.
41
+ * @param {string} props.className Additional class name to apply.
38
42
  *
39
43
  * @return {Element} Text decoration control.
40
44
  */
@@ -44,34 +48,17 @@ export default function TextDecorationControl( {
44
48
  className,
45
49
  } ) {
46
50
  return (
47
- <fieldset
51
+ <SegmentedTextControl
52
+ label={ __( 'Decoration' ) }
53
+ options={ TEXT_DECORATIONS }
48
54
  className={ classnames(
49
55
  'block-editor-text-decoration-control',
50
56
  className
51
57
  ) }
52
- >
53
- <BaseControl.VisualLabel as="legend">
54
- { __( 'Decoration' ) }
55
- </BaseControl.VisualLabel>
56
- <div className="block-editor-text-decoration-control__buttons">
57
- { TEXT_DECORATIONS.map( ( textDecoration ) => {
58
- return (
59
- <Button
60
- key={ textDecoration.value }
61
- icon={ textDecoration.icon }
62
- label={ textDecoration.name }
63
- isPressed={ textDecoration.value === value }
64
- onClick={ () => {
65
- onChange(
66
- textDecoration.value === value
67
- ? undefined
68
- : textDecoration.value
69
- );
70
- } }
71
- />
72
- );
73
- } ) }
74
- </div>
75
- </fieldset>
58
+ value={ value }
59
+ onChange={ ( newValue ) => {
60
+ onChange( newValue === value ? undefined : newValue );
61
+ } }
62
+ />
76
63
  );
77
64
  }
@@ -6,7 +6,6 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { BaseControl, Button } from '@wordpress/components';
10
9
  import { __ } from '@wordpress/i18n';
11
10
  import {
12
11
  reset,
@@ -15,24 +14,29 @@ import {
15
14
  formatUppercase,
16
15
  } from '@wordpress/icons';
17
16
 
17
+ /**
18
+ * Internal dependencies
19
+ */
20
+ import SegmentedTextControl from '../segmented-text-control';
21
+
18
22
  const TEXT_TRANSFORMS = [
19
23
  {
20
- name: __( 'None' ),
24
+ label: __( 'None' ),
21
25
  value: 'none',
22
26
  icon: reset,
23
27
  },
24
28
  {
25
- name: __( 'Uppercase' ),
29
+ label: __( 'Uppercase' ),
26
30
  value: 'uppercase',
27
31
  icon: formatUppercase,
28
32
  },
29
33
  {
30
- name: __( 'Lowercase' ),
34
+ label: __( 'Lowercase' ),
31
35
  value: 'lowercase',
32
36
  icon: formatLowercase,
33
37
  },
34
38
  {
35
- name: __( 'Capitalize' ),
39
+ label: __( 'Capitalize' ),
36
40
  value: 'capitalize',
37
41
  icon: formatCapitalize,
38
42
  },
@@ -50,34 +54,17 @@ const TEXT_TRANSFORMS = [
50
54
  */
51
55
  export default function TextTransformControl( { className, value, onChange } ) {
52
56
  return (
53
- <fieldset
57
+ <SegmentedTextControl
58
+ label={ __( 'Letter case' ) }
59
+ options={ TEXT_TRANSFORMS }
54
60
  className={ classnames(
55
61
  'block-editor-text-transform-control',
56
62
  className
57
63
  ) }
58
- >
59
- <BaseControl.VisualLabel as="legend">
60
- { __( 'Letter case' ) }
61
- </BaseControl.VisualLabel>
62
- <div className="block-editor-text-transform-control__buttons">
63
- { TEXT_TRANSFORMS.map( ( textTransform ) => {
64
- return (
65
- <Button
66
- key={ textTransform.value }
67
- icon={ textTransform.icon }
68
- label={ textTransform.name }
69
- isPressed={ textTransform.value === value }
70
- onClick={ () => {
71
- onChange(
72
- textTransform.value === value
73
- ? undefined
74
- : textTransform.value
75
- );
76
- } }
77
- />
78
- );
79
- } ) }
80
- </div>
81
- </fieldset>
64
+ value={ value }
65
+ onChange={ ( newValue ) => {
66
+ onChange( newValue === value ? undefined : newValue );
67
+ } }
68
+ />
82
69
  );
83
70
  }
@@ -68,14 +68,18 @@ function getPositionTypeLabel( attributes ) {
68
68
  export default function useBlockDisplayInformation( clientId ) {
69
69
  return useSelect(
70
70
  ( select ) => {
71
- if ( ! clientId ) return null;
71
+ if ( ! clientId ) {
72
+ return null;
73
+ }
72
74
  const { getBlockName, getBlockAttributes } =
73
75
  select( blockEditorStore );
74
76
  const { getBlockType, getActiveBlockVariation } =
75
77
  select( blocksStore );
76
78
  const blockName = getBlockName( clientId );
77
79
  const blockType = getBlockType( blockName );
78
- if ( ! blockType ) return null;
80
+ if ( ! blockType ) {
81
+ return null;
82
+ }
79
83
  const attributes = getBlockAttributes( clientId );
80
84
  const match = getActiveBlockVariation( blockName, attributes );
81
85
  const isSynced =
@@ -95,7 +99,9 @@ export default function useBlockDisplayInformation( clientId ) {
95
99
  positionType: attributes?.style?.position?.type,
96
100
  name: attributes?.metadata?.name,
97
101
  };
98
- if ( ! match ) return blockTypeInfo;
102
+ if ( ! match ) {
103
+ return blockTypeInfo;
104
+ }
99
105
 
100
106
  return {
101
107
  isSynced,
@@ -252,7 +252,9 @@ export default function useOnBlockDrop(
252
252
  initialPosition = 0,
253
253
  clientIdsToReplace = []
254
254
  ) => {
255
- if ( ! Array.isArray( blocks ) ) blocks = [ blocks ];
255
+ if ( ! Array.isArray( blocks ) ) {
256
+ blocks = [ blocks ];
257
+ }
256
258
 
257
259
  const clientIds = getBlockOrder( targetRootClientId );
258
260
  const clientId = clientIds[ targetBlockIndex ];
@@ -18,7 +18,9 @@ import { store as blockEditorStore } from '../../store';
18
18
  function setContentEditableWrapper( node, value ) {
19
19
  node.contentEditable = value;
20
20
  // Firefox doesn't automatically move focus.
21
- if ( value ) node.focus();
21
+ if ( value ) {
22
+ node.focus();
23
+ }
22
24
  }
23
25
 
24
26
  /**
@@ -118,7 +118,9 @@ export default function useTabNav() {
118
118
  // do it again here because after clearing block selection,
119
119
  // focus land on the writing flow container and pressing Tab
120
120
  // will no longer send focus through the focus capture element.
121
- if ( event.target === node ) setNavigationMode( true );
121
+ if ( event.target === node ) {
122
+ setNavigationMode( true );
123
+ }
122
124
  return;
123
125
  }
124
126
 
@@ -6,18 +6,22 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { BaseControl, Button } from '@wordpress/components';
10
9
  import { __, isRTL } from '@wordpress/i18n';
11
10
  import { textHorizontal, textVertical } from '@wordpress/icons';
12
11
 
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import SegmentedTextControl from '../segmented-text-control';
16
+
13
17
  const WRITING_MODES = [
14
18
  {
15
- name: __( 'Horizontal' ),
19
+ label: __( 'Horizontal' ),
16
20
  value: 'horizontal-tb',
17
21
  icon: textHorizontal,
18
22
  },
19
23
  {
20
- name: __( 'Vertical' ),
24
+ label: __( 'Vertical' ),
21
25
  value: isRTL() ? 'vertical-lr' : 'vertical-rl',
22
26
  icon: textVertical,
23
27
  },
@@ -35,34 +39,17 @@ const WRITING_MODES = [
35
39
  */
36
40
  export default function WritingModeControl( { className, value, onChange } ) {
37
41
  return (
38
- <fieldset
42
+ <SegmentedTextControl
43
+ label={ __( 'Orientation' ) }
44
+ options={ WRITING_MODES }
39
45
  className={ classnames(
40
46
  'block-editor-writing-mode-control',
41
47
  className
42
48
  ) }
43
- >
44
- <BaseControl.VisualLabel as="legend">
45
- { __( 'Orientation' ) }
46
- </BaseControl.VisualLabel>
47
- <div className="block-editor-writing-mode-control__buttons">
48
- { WRITING_MODES.map( ( writingMode ) => {
49
- return (
50
- <Button
51
- key={ writingMode.value }
52
- icon={ writingMode.icon }
53
- label={ writingMode.name }
54
- isPressed={ writingMode.value === value }
55
- onClick={ () => {
56
- onChange(
57
- writingMode.value === value
58
- ? undefined
59
- : writingMode.value
60
- );
61
- } }
62
- />
63
- );
64
- } ) }
65
- </div>
66
- </fieldset>
49
+ value={ value }
50
+ onChange={ ( newValue ) => {
51
+ onChange( newValue === value ? undefined : newValue );
52
+ } }
53
+ />
67
54
  );
68
55
  }
@@ -291,7 +291,9 @@ function useDuotoneStyles( {
291
291
  const blockElement = useBlockElement( clientId );
292
292
 
293
293
  useEffect( () => {
294
- if ( ! isValidFilter ) return;
294
+ if ( ! isValidFilter ) {
295
+ return;
296
+ }
295
297
 
296
298
  // Safari does not always update the duotone filter when the duotone colors
297
299
  // are changed. When using Safari, force the block element to be repainted by
@@ -135,7 +135,13 @@ export function shouldSkipSerialization(
135
135
 
136
136
  const pendingStyleOverrides = new WeakMap();
137
137
 
138
- export function useStyleOverride( { id, css, assets, __unstableType } = {} ) {
138
+ export function useStyleOverride( {
139
+ id,
140
+ css,
141
+ assets,
142
+ __unstableType,
143
+ clientId,
144
+ } = {} ) {
139
145
  const { setStyleOverride, deleteStyleOverride } = unlock(
140
146
  useDispatch( blockEditorStore )
141
147
  );
@@ -143,7 +149,9 @@ export function useStyleOverride( { id, css, assets, __unstableType } = {} ) {
143
149
  const fallbackId = useId();
144
150
  useEffect( () => {
145
151
  // Unmount if there is CSS and assets are empty.
146
- if ( ! css && ! assets ) return;
152
+ if ( ! css && ! assets ) {
153
+ return;
154
+ }
147
155
 
148
156
  const _id = id || fallbackId;
149
157
  const override = {
@@ -151,6 +159,7 @@ export function useStyleOverride( { id, css, assets, __unstableType } = {} ) {
151
159
  css,
152
160
  assets,
153
161
  __unstableType,
162
+ clientId,
154
163
  };
155
164
  // Batch updates to style overrides to avoid triggering cascading renders
156
165
  // for each style override block included in a tree and optimize initial render.
@@ -187,6 +196,7 @@ export function useStyleOverride( { id, css, assets, __unstableType } = {} ) {
187
196
  }, [
188
197
  id,
189
198
  css,
199
+ clientId,
190
200
  assets,
191
201
  __unstableType,
192
202
  fallbackId,
@@ -213,6 +223,7 @@ export function useBlockSettings( name, parentLayout ) {
213
223
  customFontFamilies,
214
224
  defaultFontFamilies,
215
225
  themeFontFamilies,
226
+ defaultFontSizesEnabled,
216
227
  customFontSizes,
217
228
  defaultFontSizes,
218
229
  themeFontSizes,
@@ -265,6 +276,7 @@ export function useBlockSettings( name, parentLayout ) {
265
276
  'typography.fontFamilies.custom',
266
277
  'typography.fontFamilies.default',
267
278
  'typography.fontFamilies.theme',
279
+ 'typography.defaultFontSizes',
268
280
  'typography.fontSizes.custom',
269
281
  'typography.fontSizes.default',
270
282
  'typography.fontSizes.theme',
@@ -359,6 +371,7 @@ export function useBlockSettings( name, parentLayout ) {
359
371
  theme: themeFontSizes,
360
372
  },
361
373
  customFontSize,
374
+ defaultFontSizes: defaultFontSizesEnabled,
362
375
  fontStyle,
363
376
  fontWeight,
364
377
  lineHeight,
@@ -398,6 +411,7 @@ export function useBlockSettings( name, parentLayout ) {
398
411
  customFontFamilies,
399
412
  defaultFontFamilies,
400
413
  themeFontFamilies,
414
+ defaultFontSizesEnabled,
401
415
  customFontSizes,
402
416
  defaultFontSizes,
403
417
  themeFontSizes,
@@ -15,7 +15,7 @@ import {
15
15
  } from './components/inserter/search-items';
16
16
  import { PrivateListView } from './components/list-view';
17
17
  import BlockInfo from './components/block-info-slot-fill';
18
- import { useShowBlockTools } from './components/block-tools/use-show-block-tools';
18
+ import { useHasBlockToolbar } from './components/block-toolbar/use-has-block-toolbar';
19
19
  import { cleanEmptyObject, useStyleOverride } from './hooks/utils';
20
20
  import BlockQuickNavigation from './components/block-quick-navigation';
21
21
  import { LayoutStyle } from './components/block-list/layout';
@@ -23,6 +23,7 @@ import { BlockRemovalWarningModal } from './components/block-removal-warning-mod
23
23
  import { useLayoutClasses, useLayoutStyles } from './hooks';
24
24
  import DimensionsTool from './components/dimensions-tool';
25
25
  import ResolutionTool from './components/resolution-tool';
26
+ import TextAlignmentControl from './components/text-alignment-control';
26
27
  import {
27
28
  default as ReusableBlocksRenameHint,
28
29
  useReusableBlocksRenameHint,
@@ -56,7 +57,7 @@ lock( privateApis, {
56
57
  PrivateListView,
57
58
  ResizableBoxPopover,
58
59
  BlockInfo,
59
- useShowBlockTools,
60
+ useHasBlockToolbar,
60
61
  cleanEmptyObject,
61
62
  useStyleOverride,
62
63
  BlockQuickNavigation,
@@ -66,6 +67,7 @@ lock( privateApis, {
66
67
  useLayoutStyles,
67
68
  DimensionsTool,
68
69
  ResolutionTool,
70
+ TextAlignmentControl,
69
71
  ReusableBlocksRenameHint,
70
72
  useReusableBlocksRenameHint,
71
73
  usesContextKey,