@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
@@ -0,0 +1,113 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import styled from '@emotion/styled';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import {
10
+ __experimentalToolsPanelItem as ToolsPanelItem,
11
+ __experimentalUnitControl as UnitControl,
12
+ } from '@wordpress/components';
13
+ import { __ } from '@wordpress/i18n';
14
+
15
+ const SingleColumnToolsPanelItem = styled( ToolsPanelItem )`
16
+ grid-column: span 1;
17
+ `;
18
+
19
+ /**
20
+ * @typedef {import('@wordpress/components/build-types/unit-control/types').WPUnitControlUnit} WPUnitControlUnit
21
+ */
22
+
23
+ /**
24
+ * @typedef {Object} WidthHeightToolValue
25
+ * @property {string} [width] Width CSS value.
26
+ * @property {string} [height] Height CSS value.
27
+ */
28
+
29
+ /**
30
+ * @callback WidthHeightToolOnChange
31
+ * @param {WidthHeightToolValue} nextValue Next dimensions value.
32
+ * @return {void}
33
+ */
34
+
35
+ /**
36
+ * @typedef {Object} WidthHeightToolProps
37
+ * @property {string} [panelId] ID of the panel that contains the controls.
38
+ * @property {WidthHeightToolValue} [value] Current dimensions values.
39
+ * @property {WidthHeightToolOnChange} [onChange] Callback to update the dimensions values.
40
+ * @property {WPUnitControlUnit[]} [units] Units options.
41
+ * @property {boolean} [isShownByDefault] Whether the panel is shown by default.
42
+ */
43
+
44
+ /**
45
+ * Component that renders controls to edit the dimensions of an image or container.
46
+ *
47
+ * @param {WidthHeightToolProps} props The component props.
48
+ *
49
+ * @return {import('@wordpress/element').WPElement} The width and height tool.
50
+ */
51
+ export default function WidthHeightTool( {
52
+ panelId,
53
+ value = {},
54
+ onChange = () => {},
55
+ units,
56
+ isShownByDefault = true,
57
+ } ) {
58
+ // null, undefined, and 'auto' all represent the default value.
59
+ const width = value.width === 'auto' ? '' : value.width ?? '';
60
+ const height = value.height === 'auto' ? '' : value.height ?? '';
61
+
62
+ const onDimensionChange = ( dimension ) => ( nextDimension ) => {
63
+ const nextValue = { ...value };
64
+ // Empty strings or undefined may be passed and both represent removing the value.
65
+ if ( ! nextDimension ) {
66
+ delete nextValue[ dimension ];
67
+ } else {
68
+ nextValue[ dimension ] = nextDimension;
69
+ }
70
+ onChange( nextValue );
71
+ };
72
+
73
+ return (
74
+ <>
75
+ <SingleColumnToolsPanelItem
76
+ label={ __( 'Width' ) }
77
+ isShownByDefault={ isShownByDefault }
78
+ hasValue={ () => width !== '' }
79
+ onDeselect={ onDimensionChange( 'width' ) }
80
+ panelId={ panelId }
81
+ >
82
+ <UnitControl
83
+ label={ __( 'Width' ) }
84
+ placeholder={ __( 'Auto' ) }
85
+ labelPosition="top"
86
+ units={ units }
87
+ min={ 0 }
88
+ value={ width }
89
+ onChange={ onDimensionChange( 'width' ) }
90
+ size={ '__unstable-large' }
91
+ />
92
+ </SingleColumnToolsPanelItem>
93
+ <SingleColumnToolsPanelItem
94
+ label={ __( 'Height' ) }
95
+ isShownByDefault={ isShownByDefault }
96
+ hasValue={ () => height !== '' }
97
+ onDeselect={ onDimensionChange( 'height' ) }
98
+ panelId={ panelId }
99
+ >
100
+ <UnitControl
101
+ label={ __( 'Height' ) }
102
+ placeholder={ __( 'Auto' ) }
103
+ labelPosition="top"
104
+ units={ units }
105
+ min={ 0 }
106
+ value={ height }
107
+ onChange={ onDimensionChange( 'height' ) }
108
+ size={ '__unstable-large' }
109
+ />
110
+ </SingleColumnToolsPanelItem>
111
+ </>
112
+ );
113
+ }
@@ -0,0 +1,71 @@
1
+ # FontFamilyControl
2
+
3
+ FontFamilyControl is a React component that renders a UI that allows users to select a font family.
4
+ The component renders a user interface that allows the user to select from a set of predefined font families as defined by the `typography.fontFamilies` presets.
5
+ Optionally, you can provide a `fontFamilies` prop that overrides the predefined font families.
6
+
7
+ ![FontFamilyControl component preview](https://i.imgur.com/blS5iA3.png)
8
+
9
+ ## Usage
10
+
11
+ ```jsx
12
+ import { FontFamilyControl } from '@wordpress/block-editor';
13
+ import { useState } from '@wordpress/element';
14
+ import { __ } from '@wordpress/i18n';
15
+
16
+ // ...
17
+
18
+ const MyFontFamilyControl = () => {
19
+ const [ fontFamily, setFontFamily ] = useState( '' );
20
+
21
+ return (
22
+ <FontFamilyControl
23
+ value={ fontFamily }
24
+ onChange={ ( newFontFamily ) => {
25
+ setFontFamily( newFontFamily );
26
+ } }
27
+ />
28
+ );
29
+ };
30
+
31
+ /// ...
32
+
33
+ <MyFontFamilyControl />
34
+ ```
35
+
36
+ ## Props
37
+
38
+ The component accepts the following props:
39
+
40
+ ### onChange
41
+
42
+ A function that receives the new font family value.
43
+ If onChange is called without any parameter, it should reset the value, attending to what reset means in that context, e.g., set the font family to undefined or set the font family a starting value.
44
+
45
+ - Type: `function`
46
+ - Required: Yes
47
+
48
+ ### fontFamilies
49
+
50
+ A user-provided set of font families.
51
+ Optional, used in case we want to override the predefined ones coming from presets.
52
+
53
+ - Type: `Array`
54
+ - Required: No
55
+
56
+ The font families are provided as an array of objects with the following schema:
57
+
58
+ | Property | Description | Type |
59
+ | ---------- | ----------------------------------------- | ------ |
60
+ | fontFamily | Font family, as used in CSS. | string |
61
+ | name | Optional display name of the font family. | string |
62
+
63
+ ### value
64
+
65
+ The current font family value.
66
+
67
+ - Type: `String`
68
+ - Required: No
69
+ - Default: ''
70
+
71
+ The rest of the props are passed down to the underlying `<SelectControl />` instance.
@@ -35,7 +35,7 @@ export function useHasColorPanel( settings ) {
35
35
  const hasBackgroundPanel = useHasBackgroundPanel( settings );
36
36
  const hasLinkPanel = useHasLinkPanel( settings );
37
37
  const hasHeadingPanel = useHasHeadingPanel( settings );
38
- const hasButtonPanel = useHasHeadingPanel( settings );
38
+ const hasButtonPanel = useHasButtonPanel( settings );
39
39
  const hasCaptionPanel = useHasCaptionPanel( settings );
40
40
 
41
41
  return (
@@ -328,22 +328,6 @@ export default function ColorPanel( {
328
328
  : gradientValue;
329
329
  };
330
330
 
331
- // Text Color
332
- const showTextPanel = useHasTextPanel( settings );
333
- const textColor = decodeValue( inheritedValue?.color?.text );
334
- const userTextColor = decodeValue( value?.color?.text );
335
- const hasTextColor = () => !! userTextColor;
336
- const setTextColor = ( newColor ) => {
337
- onChange(
338
- setImmutably(
339
- value,
340
- [ 'color', 'text' ],
341
- encodeColorValue( newColor )
342
- )
343
- );
344
- };
345
- const resetTextColor = () => setTextColor( undefined );
346
-
347
331
  // BackgroundColor
348
332
  const showBackgroundPanel = useHasBackgroundPanel( settings );
349
333
  const backgroundColor = decodeValue( inheritedValue?.color?.background );
@@ -424,6 +408,29 @@ export default function ColorPanel( {
424
408
  onChange( newValue );
425
409
  };
426
410
 
411
+ // Text Color
412
+ const showTextPanel = useHasTextPanel( settings );
413
+ const textColor = decodeValue( inheritedValue?.color?.text );
414
+ const userTextColor = decodeValue( value?.color?.text );
415
+ const hasTextColor = () => !! userTextColor;
416
+ const setTextColor = ( newColor ) => {
417
+ let changedObject = setImmutably(
418
+ value,
419
+ [ 'color', 'text' ],
420
+ encodeColorValue( newColor )
421
+ );
422
+ if ( textColor === linkColor ) {
423
+ changedObject = setImmutably(
424
+ changedObject,
425
+ [ 'elements', 'link', 'color', 'text' ],
426
+ encodeColorValue( newColor )
427
+ );
428
+ }
429
+
430
+ onChange( changedObject );
431
+ };
432
+ const resetTextColor = () => setTextColor( undefined );
433
+
427
434
  // Elements
428
435
  const elements = [
429
436
  {
@@ -207,18 +207,24 @@ export default function DimensionsPanel( {
207
207
  // in global styles but not in block inspector.
208
208
  includeLayoutControls = false,
209
209
  } ) {
210
+ const { dimensions, spacing } = settings;
211
+
210
212
  const decodeValue = ( rawValue ) => {
211
213
  if ( rawValue && typeof rawValue === 'object' ) {
212
214
  return Object.keys( rawValue ).reduce( ( acc, key ) => {
213
215
  acc[ key ] = getValueFromVariable(
214
- { settings },
216
+ { settings: { dimensions, spacing } },
215
217
  '',
216
218
  rawValue[ key ]
217
219
  );
218
220
  return acc;
219
221
  }, {} );
220
222
  }
221
- return getValueFromVariable( { settings }, '', rawValue );
223
+ return getValueFromVariable(
224
+ { settings: { dimensions, spacing } },
225
+ '',
226
+ rawValue
227
+ );
222
228
  };
223
229
 
224
230
  const showSpacingPresetsControl = useHasSpacingPresets( settings );
@@ -22,7 +22,7 @@ import {
22
22
  Flex,
23
23
  FlexItem,
24
24
  } from '@wordpress/components';
25
- import { __ } from '@wordpress/i18n';
25
+ import { __, _x } from '@wordpress/i18n';
26
26
  import { useCallback, useMemo } from '@wordpress/element';
27
27
 
28
28
  /**
@@ -77,7 +77,7 @@ function FiltersToolsPanel( {
77
77
 
78
78
  return (
79
79
  <ToolsPanel
80
- label={ __( 'Filters' ) }
80
+ label={ _x( 'Filters', 'Name for applying graphical effects' ) }
81
81
  resetAll={ resetAll }
82
82
  panelId={ panelId }
83
83
  >
@@ -1,12 +1,8 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { get } from 'lodash';
5
-
6
1
  /**
7
2
  * Internal dependencies
8
3
  */
9
4
  import { scopeSelector } from './utils';
5
+ import { getValueFromObjectPath } from '../../utils/object';
10
6
 
11
7
  /**
12
8
  * Determine the CSS selector for the block type and target provided, returning
@@ -69,15 +65,15 @@ export function getBlockCSSSelector(
69
65
  if ( hasSelectors ) {
70
66
  // Get selector from either `feature.root` or shorthand path.
71
67
  const featureSelector =
72
- get( selectors, `${ path }.root`, null ) ||
73
- get( selectors, path, null );
68
+ getValueFromObjectPath( selectors, `${ path }.root`, null ) ||
69
+ getValueFromObjectPath( selectors, path, null );
74
70
 
75
71
  // Return feature selector if found or any available fallback.
76
72
  return featureSelector || fallbackSelector;
77
73
  }
78
74
 
79
75
  // Try getting old experimental supports selector value.
80
- const featureSelector = get(
76
+ const featureSelector = getValueFromObjectPath(
81
77
  supports,
82
78
  `${ path }.__experimentalSelector`,
83
79
  null
@@ -98,7 +94,7 @@ export function getBlockCSSSelector(
98
94
 
99
95
  // Use selectors API if available.
100
96
  if ( hasSelectors ) {
101
- subfeatureSelector = get( selectors, path, null );
97
+ subfeatureSelector = getValueFromObjectPath( selectors, path, null );
102
98
  }
103
99
 
104
100
  // Only return if we have a subfeature selector.
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import fastDeepEqual from 'fast-deep-equal/es6';
5
- import { get, set } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -16,6 +15,7 @@ import { _x } from '@wordpress/i18n';
16
15
  * Internal dependencies
17
16
  */
18
17
  import { getValueFromVariable, getPresetVariableFromValue } from './utils';
18
+ import { getValueFromObjectPath, setImmutably } from '../../utils/object';
19
19
  import { GlobalStylesContext } from './context';
20
20
  import { unlock } from '../../lock-unlock';
21
21
 
@@ -71,6 +71,7 @@ const VALID_SETTINGS = [
71
71
  'typography.textColumns',
72
72
  'typography.textDecoration',
73
73
  'typography.textTransform',
74
+ 'typography.writingMode',
74
75
  ];
75
76
 
76
77
  export const useGlobalStylesReset = () => {
@@ -102,20 +103,21 @@ export function useGlobalSetting( propertyPath, blockName, source = 'all' ) {
102
103
 
103
104
  if ( propertyPath ) {
104
105
  return (
105
- get( configToUse, contextualPath ) ??
106
- get( configToUse, globalPath )
106
+ getValueFromObjectPath( configToUse, contextualPath ) ??
107
+ getValueFromObjectPath( configToUse, globalPath )
107
108
  );
108
109
  }
109
110
 
110
- const result = {};
111
+ let result = {};
111
112
  VALID_SETTINGS.forEach( ( setting ) => {
112
113
  const value =
113
- get(
114
+ getValueFromObjectPath(
114
115
  configToUse,
115
116
  `settings${ appendedBlockPath }.${ setting }`
116
- ) ?? get( configToUse, `settings.${ setting }` );
117
+ ) ??
118
+ getValueFromObjectPath( configToUse, `settings.${ setting }` );
117
119
  if ( value ) {
118
- set( result, setting, value );
120
+ result = setImmutably( result, setting.split( '.' ), value );
119
121
  }
120
122
  } );
121
123
  return result;
@@ -129,13 +131,9 @@ export function useGlobalSetting( propertyPath, blockName, source = 'all' ) {
129
131
  ] );
130
132
 
131
133
  const setSetting = ( newValue ) => {
132
- setUserConfig( ( currentConfig ) => {
133
- // Deep clone `currentConfig` to avoid mutating it later.
134
- const newUserConfig = JSON.parse( JSON.stringify( currentConfig ) );
135
- set( newUserConfig, contextualPath, newValue );
136
-
137
- return newUserConfig;
138
- } );
134
+ setUserConfig( ( currentConfig ) =>
135
+ setImmutably( currentConfig, contextualPath.split( '.' ), newValue )
136
+ );
139
137
  };
140
138
 
141
139
  return [ settingValue, setSetting ];
@@ -159,12 +157,10 @@ export function useGlobalStyle(
159
157
  : `styles.blocks.${ blockName }${ appendedPath }`;
160
158
 
161
159
  const setStyle = ( newValue ) => {
162
- setUserConfig( ( currentConfig ) => {
163
- // Deep clone `currentConfig` to avoid mutating it later.
164
- const newUserConfig = JSON.parse( JSON.stringify( currentConfig ) );
165
- set(
166
- newUserConfig,
167
- finalPath,
160
+ setUserConfig( ( currentConfig ) =>
161
+ setImmutably(
162
+ currentConfig,
163
+ finalPath.split( '.' ),
168
164
  shouldDecodeEncode
169
165
  ? getPresetVariableFromValue(
170
166
  mergedConfig.settings,
@@ -173,27 +169,26 @@ export function useGlobalStyle(
173
169
  newValue
174
170
  )
175
171
  : newValue
176
- );
177
- return newUserConfig;
178
- } );
172
+ )
173
+ );
179
174
  };
180
175
 
181
176
  let rawResult, result;
182
177
  switch ( source ) {
183
178
  case 'all':
184
- rawResult = get( mergedConfig, finalPath );
179
+ rawResult = getValueFromObjectPath( mergedConfig, finalPath );
185
180
  result = shouldDecodeEncode
186
181
  ? getValueFromVariable( mergedConfig, blockName, rawResult )
187
182
  : rawResult;
188
183
  break;
189
184
  case 'user':
190
- rawResult = get( userConfig, finalPath );
185
+ rawResult = getValueFromObjectPath( userConfig, finalPath );
191
186
  result = shouldDecodeEncode
192
187
  ? getValueFromVariable( mergedConfig, blockName, rawResult )
193
188
  : rawResult;
194
189
  break;
195
190
  case 'base':
196
- rawResult = get( baseConfig, finalPath );
191
+ rawResult = getValueFromObjectPath( baseConfig, finalPath );
197
192
  result = shouldDecodeEncode
198
193
  ? getValueFromVariable( baseConfig, blockName, rawResult )
199
194
  : rawResult;
@@ -292,6 +287,7 @@ export function useSettingsForBlockElement(
292
287
  'letterSpacing',
293
288
  'textTransform',
294
289
  'textDecoration',
290
+ 'writingMode',
295
291
  ].forEach( ( key ) => {
296
292
  if ( ! supportedStyles.includes( key ) ) {
297
293
  updatedSettings.typography = {
@@ -19,6 +19,7 @@ import LineHeightControl from '../line-height-control';
19
19
  import LetterSpacingControl from '../letter-spacing-control';
20
20
  import TextTransformControl from '../text-transform-control';
21
21
  import TextDecorationControl from '../text-decoration-control';
22
+ import WritingModeControl from '../writing-mode-control';
22
23
  import { getValueFromVariable } from './utils';
23
24
  import { setImmutably } from '../../utils/object';
24
25
 
@@ -32,6 +33,7 @@ export function useHasTypographyPanel( settings ) {
32
33
  const hasLetterSpacing = useHasLetterSpacingControl( settings );
33
34
  const hasTextTransform = useHasTextTransformControl( settings );
34
35
  const hasTextDecoration = useHasTextDecorationControl( settings );
36
+ const hasWritingMode = useHasWritingModeControl( settings );
35
37
  const hasTextColumns = useHasTextColumnsControl( settings );
36
38
  const hasFontSize = useHasFontSizeControl( settings );
37
39
 
@@ -43,6 +45,7 @@ export function useHasTypographyPanel( settings ) {
43
45
  hasTextTransform ||
44
46
  hasFontSize ||
45
47
  hasTextDecoration ||
48
+ hasWritingMode ||
46
49
  hasTextColumns
47
50
  );
48
51
  }
@@ -103,10 +106,29 @@ function useHasTextDecorationControl( settings ) {
103
106
  return settings?.typography?.textDecoration;
104
107
  }
105
108
 
109
+ function useHasWritingModeControl( settings ) {
110
+ return settings?.typography?.writingMode;
111
+ }
112
+
106
113
  function useHasTextColumnsControl( settings ) {
107
114
  return settings?.typography?.textColumns;
108
115
  }
109
116
 
117
+ function getUniqueFontSizesBySlug( settings ) {
118
+ const fontSizesPerOrigin = settings?.typography?.fontSizes ?? {};
119
+ const fontSizes = []
120
+ .concat( fontSizesPerOrigin?.custom ?? [] )
121
+ .concat( fontSizesPerOrigin?.theme ?? [] )
122
+ .concat( fontSizesPerOrigin.default ?? [] );
123
+
124
+ return fontSizes.reduce( ( acc, currentSize ) => {
125
+ if ( ! acc.some( ( { slug } ) => slug === currentSize.slug ) ) {
126
+ acc.push( currentSize );
127
+ }
128
+ return acc;
129
+ }, [] );
130
+ }
131
+
110
132
  function TypographyToolsPanel( {
111
133
  resetAllFilter,
112
134
  onChange,
@@ -138,6 +160,7 @@ const DEFAULT_CONTROLS = {
138
160
  letterSpacing: true,
139
161
  textTransform: true,
140
162
  textDecoration: true,
163
+ writingMode: true,
141
164
  textColumns: true,
142
165
  };
143
166
 
@@ -181,11 +204,8 @@ export default function TypographyPanel( {
181
204
  // Font Size
182
205
  const hasFontSizeEnabled = useHasFontSizeControl( settings );
183
206
  const disableCustomFontSizes = ! settings?.typography?.customFontSize;
184
- const fontSizesPerOrigin = settings?.typography?.fontSizes ?? {};
185
- const fontSizes = []
186
- .concat( fontSizesPerOrigin?.custom ?? [] )
187
- .concat( fontSizesPerOrigin?.theme ?? [] )
188
- .concat( fontSizesPerOrigin.default ?? [] );
207
+ const fontSizes = getUniqueFontSizesBySlug( settings );
208
+
189
209
  const fontSize = decodeValue( inheritedValue?.typography?.fontSize );
190
210
  const setFontSize = ( newValue, metadata ) => {
191
211
  const actualValue = !! metadata?.slug
@@ -310,6 +330,21 @@ export default function TypographyPanel( {
310
330
  const hasTextDecoration = () => !! value?.typography?.textDecoration;
311
331
  const resetTextDecoration = () => setTextDecoration( undefined );
312
332
 
333
+ // Text Orientation
334
+ const hasWritingModeControl = useHasWritingModeControl( settings );
335
+ const writingMode = decodeValue( inheritedValue?.typography?.writingMode );
336
+ const setWritingMode = ( newValue ) => {
337
+ onChange(
338
+ setImmutably(
339
+ value,
340
+ [ 'typography', 'writingMode' ],
341
+ newValue || undefined
342
+ )
343
+ );
344
+ };
345
+ const hasWritingMode = () => !! value?.typography?.writingMode;
346
+ const resetWritingMode = () => setWritingMode( undefined );
347
+
313
348
  const resetAllFilter = useCallback( ( previousValue ) => {
314
349
  return {
315
350
  ...previousValue,
@@ -456,6 +491,23 @@ export default function TypographyPanel( {
456
491
  />
457
492
  </ToolsPanelItem>
458
493
  ) }
494
+ { hasWritingModeControl && (
495
+ <ToolsPanelItem
496
+ className="single-column"
497
+ label={ __( 'Text orientation' ) }
498
+ hasValue={ hasWritingMode }
499
+ onDeselect={ resetWritingMode }
500
+ isShownByDefault={ defaultControls.writingMode }
501
+ panelId={ panelId }
502
+ >
503
+ <WritingModeControl
504
+ value={ writingMode }
505
+ onChange={ setWritingMode }
506
+ size="__unstable-large"
507
+ __nextHasNoMarginBottom
508
+ />
509
+ </ToolsPanelItem>
510
+ ) }
459
511
  { hasTextTransformControl && (
460
512
  <ToolsPanelItem
461
513
  label={ __( 'Letter case' ) }