@wordpress/block-editor 8.5.7 → 9.1.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 (462) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +5 -2
  3. package/build/components/block-alignment-control/constants.js +48 -0
  4. package/build/components/block-alignment-control/constants.js.map +1 -0
  5. package/build/components/block-alignment-control/ui.js +9 -40
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +92 -0
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -0
  9. package/build/components/block-alignment-matrix-control/index.js +1 -6
  10. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  11. package/build/components/block-content-overlay/index.js +5 -74
  12. package/build/components/block-content-overlay/index.js.map +1 -1
  13. package/build/components/block-draggable/draggable-chip.native.js +64 -0
  14. package/build/components/block-draggable/draggable-chip.native.js.map +1 -0
  15. package/build/components/block-draggable/dropping-insertion-point.native.js +157 -0
  16. package/build/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  17. package/build/components/block-draggable/index.native.js +484 -0
  18. package/build/components/block-draggable/index.native.js.map +1 -0
  19. package/build/components/block-draggable/use-scroll-when-dragging.native.js +130 -0
  20. package/build/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  21. package/build/components/block-list/block-list-context.native.js +195 -0
  22. package/build/components/block-list/block-list-context.native.js.map +1 -0
  23. package/build/components/block-list/block-list-item-cell.native.js +67 -0
  24. package/build/components/block-list/block-list-item-cell.native.js.map +1 -0
  25. package/build/components/block-list/block-list-item.native.js +12 -9
  26. package/build/components/block-list/block-list-item.native.js.map +1 -1
  27. package/build/components/block-list/block.native.js +29 -6
  28. package/build/components/block-list/block.native.js.map +1 -1
  29. package/build/components/block-list/index.native.js +75 -23
  30. package/build/components/block-list/index.native.js.map +1 -1
  31. package/build/components/block-list/use-block-props/index.js +8 -4
  32. package/build/components/block-list/use-block-props/index.js.map +1 -1
  33. package/build/components/block-list/use-block-props/use-block-class-names.js +1 -7
  34. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  35. package/build/components/block-list/use-in-between-inserter.js +1 -1
  36. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  37. package/build/components/block-lock/modal.js +34 -4
  38. package/build/components/block-lock/modal.js.map +1 -1
  39. package/build/components/block-lock/toolbar.js +2 -1
  40. package/build/components/block-lock/toolbar.js.map +1 -1
  41. package/build/components/block-lock/use-block-lock.js +4 -1
  42. package/build/components/block-lock/use-block-lock.js.map +1 -1
  43. package/build/components/block-mobile-toolbar/index.native.js +9 -3
  44. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  45. package/build/components/block-mover/button.js +4 -4
  46. package/build/components/block-mover/button.js.map +1 -1
  47. package/build/components/block-mover/index.js +39 -65
  48. package/build/components/block-mover/index.js.map +1 -1
  49. package/build/components/block-mover/index.native.js +17 -4
  50. package/build/components/block-mover/index.native.js.map +1 -1
  51. package/build/components/block-navigation/dropdown.js +11 -5
  52. package/build/components/block-navigation/dropdown.js.map +1 -1
  53. package/build/components/block-popover/inbetween.js +191 -0
  54. package/build/components/block-popover/inbetween.js.map +1 -0
  55. package/build/components/block-popover/index.js +85 -0
  56. package/build/components/block-popover/index.js.map +1 -0
  57. package/build/components/{block-tools → block-popover}/use-popover-scroll.js +4 -1
  58. package/build/components/block-popover/use-popover-scroll.js.map +1 -0
  59. package/build/components/block-preview/index.js +1 -1
  60. package/build/components/block-preview/index.js.map +1 -1
  61. package/build/components/block-styles/index.js +1 -10
  62. package/build/components/block-styles/index.js.map +1 -1
  63. package/build/components/block-tools/back-compat.js +2 -2
  64. package/build/components/block-tools/back-compat.js.map +1 -1
  65. package/build/components/block-tools/block-selection-button.js +4 -2
  66. package/build/components/block-tools/block-selection-button.js.map +1 -1
  67. package/build/components/block-tools/index.js +5 -5
  68. package/build/components/block-tools/index.js.map +1 -1
  69. package/build/components/block-tools/insertion-point.js +14 -121
  70. package/build/components/block-tools/insertion-point.js.map +1 -1
  71. package/build/components/block-tools/selected-block-popover.js +216 -0
  72. package/build/components/block-tools/selected-block-popover.js.map +1 -0
  73. package/build/components/border-radius-control/input-controls.js +10 -3
  74. package/build/components/border-radius-control/input-controls.js.map +1 -1
  75. package/build/components/color-style-selector/index.js +9 -0
  76. package/build/components/color-style-selector/index.js.map +1 -1
  77. package/build/components/colors-gradients/dropdown.js +149 -44
  78. package/build/components/colors-gradients/dropdown.js.map +1 -1
  79. package/build/components/duotone-control/index.js +5 -1
  80. package/build/components/duotone-control/index.js.map +1 -1
  81. package/build/components/image-editor/use-save-image.js +3 -1
  82. package/build/components/image-editor/use-save-image.js.map +1 -1
  83. package/build/components/index.js +5 -23
  84. package/build/components/index.js.map +1 -1
  85. package/build/components/inserter/index.native.js +31 -9
  86. package/build/components/inserter/index.native.js.map +1 -1
  87. package/build/components/link-control/constants.js +11 -1
  88. package/build/components/link-control/constants.js.map +1 -1
  89. package/build/components/link-control/search-results.js +4 -3
  90. package/build/components/link-control/search-results.js.map +1 -1
  91. package/build/components/link-control/use-search-handler.js +4 -4
  92. package/build/components/link-control/use-search-handler.js.map +1 -1
  93. package/build/components/list-view/block.js +15 -15
  94. package/build/components/list-view/block.js.map +1 -1
  95. package/build/components/list-view/branch.js +9 -13
  96. package/build/components/list-view/branch.js.map +1 -1
  97. package/build/components/list-view/context.js +1 -4
  98. package/build/components/list-view/context.js.map +1 -1
  99. package/build/components/list-view/drop-indicator.js +0 -1
  100. package/build/components/list-view/drop-indicator.js.map +1 -1
  101. package/build/components/list-view/index.js +15 -32
  102. package/build/components/list-view/index.js.map +1 -1
  103. package/build/components/navigable-toolbar/index.js +12 -2
  104. package/build/components/navigable-toolbar/index.js.map +1 -1
  105. package/build/components/rich-text/format-toolbar-container.js +0 -1
  106. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  107. package/build/components/rich-text/index.js +1 -6
  108. package/build/components/rich-text/index.js.map +1 -1
  109. package/build/components/rich-text/index.native.js +0 -4
  110. package/build/components/rich-text/index.native.js.map +1 -1
  111. package/build/components/url-input/index.js +11 -4
  112. package/build/components/url-input/index.js.map +1 -1
  113. package/build/components/use-block-display-information/index.js +3 -1
  114. package/build/components/use-block-display-information/index.js.map +1 -1
  115. package/build/components/use-block-drop-zone/index.native.js +167 -0
  116. package/build/components/use-block-drop-zone/index.native.js.map +1 -0
  117. package/build/components/use-on-block-drop/index.native.js +95 -0
  118. package/build/components/use-on-block-drop/index.native.js.map +1 -0
  119. package/build/components/use-setting/index.js +42 -18
  120. package/build/components/use-setting/index.js.map +1 -1
  121. package/build/hooks/anchor.js.map +1 -1
  122. package/build/hooks/border.js +463 -44
  123. package/build/hooks/border.js.map +1 -1
  124. package/build/hooks/color-panel.js +14 -7
  125. package/build/hooks/color-panel.js.map +1 -1
  126. package/build/hooks/dimensions.js +2 -2
  127. package/build/hooks/dimensions.js.map +1 -1
  128. package/build/hooks/index.js +3 -1
  129. package/build/hooks/index.js.map +1 -1
  130. package/build/hooks/margin.js +64 -12
  131. package/build/hooks/margin.js.map +1 -1
  132. package/build/hooks/padding.js +60 -12
  133. package/build/hooks/padding.js.map +1 -1
  134. package/build/hooks/settings.js +32 -0
  135. package/build/hooks/settings.js.map +1 -0
  136. package/build/hooks/style.js +14 -13
  137. package/build/hooks/style.js.map +1 -1
  138. package/build/hooks/typography.js +6 -2
  139. package/build/hooks/typography.js.map +1 -1
  140. package/build/hooks/use-border-props.js +22 -32
  141. package/build/hooks/use-border-props.js.map +1 -1
  142. package/build/store/actions.js +14 -2
  143. package/build/store/actions.js.map +1 -1
  144. package/build/store/defaults.js +0 -1
  145. package/build/store/defaults.js.map +1 -1
  146. package/build/store/reducer.js +0 -26
  147. package/build/store/reducer.js.map +1 -1
  148. package/build/store/selectors.js +47 -15
  149. package/build/store/selectors.js.map +1 -1
  150. package/build-module/components/block-alignment-control/constants.js +36 -0
  151. package/build-module/components/block-alignment-control/constants.js.map +1 -0
  152. package/build-module/components/block-alignment-control/ui.js +4 -35
  153. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  154. package/build-module/components/block-alignment-control/ui.native.js +78 -0
  155. package/build-module/components/block-alignment-control/ui.native.js.map +1 -0
  156. package/build-module/components/block-alignment-matrix-control/index.js +1 -6
  157. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  158. package/build-module/components/block-content-overlay/index.js +4 -70
  159. package/build-module/components/block-content-overlay/index.js.map +1 -1
  160. package/build-module/components/block-draggable/draggable-chip.native.js +50 -0
  161. package/build-module/components/block-draggable/draggable-chip.native.js.map +1 -0
  162. package/build-module/components/block-draggable/dropping-insertion-point.native.js +137 -0
  163. package/build-module/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  164. package/build-module/components/block-draggable/index.native.js +449 -0
  165. package/build-module/components/block-draggable/index.native.js.map +1 -0
  166. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js +120 -0
  167. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  168. package/build-module/components/block-list/block-list-context.native.js +179 -0
  169. package/build-module/components/block-list/block-list-context.native.js.map +1 -0
  170. package/build-module/components/block-list/block-list-item-cell.native.js +59 -0
  171. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -0
  172. package/build-module/components/block-list/block-list-item.native.js +12 -9
  173. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  174. package/build-module/components/block-list/block.native.js +28 -6
  175. package/build-module/components/block-list/block.native.js.map +1 -1
  176. package/build-module/components/block-list/index.native.js +72 -23
  177. package/build-module/components/block-list/index.native.js.map +1 -1
  178. package/build-module/components/block-list/use-block-props/index.js +9 -5
  179. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  180. package/build-module/components/block-list/use-block-props/use-block-class-names.js +1 -7
  181. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  182. package/build-module/components/block-list/use-in-between-inserter.js +1 -1
  183. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  184. package/build-module/components/block-lock/modal.js +34 -5
  185. package/build-module/components/block-lock/modal.js.map +1 -1
  186. package/build-module/components/block-lock/toolbar.js +2 -1
  187. package/build-module/components/block-lock/toolbar.js.map +1 -1
  188. package/build-module/components/block-lock/use-block-lock.js +4 -1
  189. package/build-module/components/block-lock/use-block-lock.js.map +1 -1
  190. package/build-module/components/block-mobile-toolbar/index.native.js +8 -3
  191. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  192. package/build-module/components/block-mover/button.js +5 -5
  193. package/build-module/components/block-mover/button.js.map +1 -1
  194. package/build-module/components/block-mover/index.js +38 -63
  195. package/build-module/components/block-mover/index.js.map +1 -1
  196. package/build-module/components/block-mover/index.native.js +18 -5
  197. package/build-module/components/block-mover/index.native.js.map +1 -1
  198. package/build-module/components/block-navigation/dropdown.js +10 -5
  199. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  200. package/build-module/components/block-popover/inbetween.js +173 -0
  201. package/build-module/components/block-popover/inbetween.js.map +1 -0
  202. package/build-module/components/block-popover/index.js +72 -0
  203. package/build-module/components/block-popover/index.js.map +1 -0
  204. package/build-module/components/{block-tools → block-popover}/use-popover-scroll.js +3 -1
  205. package/build-module/components/block-popover/use-popover-scroll.js.map +1 -0
  206. package/build-module/components/block-preview/index.js +1 -1
  207. package/build-module/components/block-preview/index.js.map +1 -1
  208. package/build-module/components/block-styles/index.js +1 -9
  209. package/build-module/components/block-styles/index.js.map +1 -1
  210. package/build-module/components/block-tools/back-compat.js +1 -1
  211. package/build-module/components/block-tools/back-compat.js.map +1 -1
  212. package/build-module/components/block-tools/block-selection-button.js +3 -2
  213. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  214. package/build-module/components/block-tools/index.js +3 -3
  215. package/build-module/components/block-tools/index.js.map +1 -1
  216. package/build-module/components/block-tools/insertion-point.js +16 -121
  217. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  218. package/build-module/components/block-tools/selected-block-popover.js +199 -0
  219. package/build-module/components/block-tools/selected-block-popover.js.map +1 -0
  220. package/build-module/components/border-radius-control/input-controls.js +11 -4
  221. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  222. package/build-module/components/color-style-selector/index.js +6 -0
  223. package/build-module/components/color-style-selector/index.js.map +1 -1
  224. package/build-module/components/colors-gradients/dropdown.js +151 -46
  225. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  226. package/build-module/components/duotone-control/index.js +4 -1
  227. package/build-module/components/duotone-control/index.js.map +1 -1
  228. package/build-module/components/image-editor/use-save-image.js +2 -1
  229. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  230. package/build-module/components/index.js +1 -3
  231. package/build-module/components/index.js.map +1 -1
  232. package/build-module/components/inserter/index.native.js +32 -11
  233. package/build-module/components/inserter/index.native.js.map +1 -1
  234. package/build-module/components/link-control/constants.js +5 -0
  235. package/build-module/components/link-control/constants.js.map +1 -1
  236. package/build-module/components/link-control/search-results.js +3 -4
  237. package/build-module/components/link-control/search-results.js.map +1 -1
  238. package/build-module/components/link-control/use-search-handler.js +5 -5
  239. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  240. package/build-module/components/list-view/block.js +15 -16
  241. package/build-module/components/list-view/block.js.map +1 -1
  242. package/build-module/components/list-view/branch.js +9 -13
  243. package/build-module/components/list-view/branch.js.map +1 -1
  244. package/build-module/components/list-view/context.js +1 -4
  245. package/build-module/components/list-view/context.js.map +1 -1
  246. package/build-module/components/list-view/drop-indicator.js +0 -1
  247. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  248. package/build-module/components/list-view/index.js +15 -31
  249. package/build-module/components/list-view/index.js.map +1 -1
  250. package/build-module/components/navigable-toolbar/index.js +12 -2
  251. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  252. package/build-module/components/rich-text/format-toolbar-container.js +0 -1
  253. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  254. package/build-module/components/rich-text/index.js +1 -5
  255. package/build-module/components/rich-text/index.js.map +1 -1
  256. package/build-module/components/rich-text/index.native.js +0 -4
  257. package/build-module/components/rich-text/index.native.js.map +1 -1
  258. package/build-module/components/url-input/index.js +11 -4
  259. package/build-module/components/url-input/index.js.map +1 -1
  260. package/build-module/components/use-block-display-information/index.js +3 -1
  261. package/build-module/components/use-block-display-information/index.js.map +1 -1
  262. package/build-module/components/use-block-drop-zone/index.native.js +148 -0
  263. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -0
  264. package/build-module/components/use-on-block-drop/index.native.js +83 -0
  265. package/build-module/components/use-on-block-drop/index.native.js.map +1 -0
  266. package/build-module/components/use-setting/index.js +43 -19
  267. package/build-module/components/use-setting/index.js.map +1 -1
  268. package/build-module/hooks/anchor.js.map +1 -1
  269. package/build-module/hooks/border.js +453 -44
  270. package/build-module/hooks/border.js.map +1 -1
  271. package/build-module/hooks/color-panel.js +11 -6
  272. package/build-module/hooks/color-panel.js.map +1 -1
  273. package/build-module/hooks/dimensions.js +5 -5
  274. package/build-module/hooks/dimensions.js.map +1 -1
  275. package/build-module/hooks/index.js +2 -1
  276. package/build-module/hooks/index.js.map +1 -1
  277. package/build-module/hooks/margin.js +61 -13
  278. package/build-module/hooks/margin.js.map +1 -1
  279. package/build-module/hooks/padding.js +57 -13
  280. package/build-module/hooks/padding.js.map +1 -1
  281. package/build-module/hooks/settings.js +29 -0
  282. package/build-module/hooks/settings.js.map +1 -0
  283. package/build-module/hooks/style.js +15 -14
  284. package/build-module/hooks/style.js.map +1 -1
  285. package/build-module/hooks/typography.js +6 -2
  286. package/build-module/hooks/typography.js.map +1 -1
  287. package/build-module/hooks/use-border-props.js +21 -30
  288. package/build-module/hooks/use-border-props.js.map +1 -1
  289. package/build-module/store/actions.js +14 -2
  290. package/build-module/store/actions.js.map +1 -1
  291. package/build-module/store/defaults.js +0 -1
  292. package/build-module/store/defaults.js.map +1 -1
  293. package/build-module/store/reducer.js +0 -24
  294. package/build-module/store/reducer.js.map +1 -1
  295. package/build-module/store/selectors.js +44 -15
  296. package/build-module/store/selectors.js.map +1 -1
  297. package/build-style/style-rtl.css +148 -410
  298. package/build-style/style.css +148 -410
  299. package/package.json +28 -28
  300. package/src/components/block-alignment-control/constants.js +45 -0
  301. package/src/components/block-alignment-control/ui.js +69 -109
  302. package/src/components/block-alignment-control/ui.native.js +86 -0
  303. package/src/components/block-alignment-matrix-control/index.js +1 -5
  304. package/src/components/block-content-overlay/index.js +9 -79
  305. package/src/components/block-content-overlay/style.scss +2 -11
  306. package/src/components/block-draggable/draggable-chip.native.js +49 -0
  307. package/src/components/block-draggable/dropping-insertion-point.native.js +181 -0
  308. package/src/components/block-draggable/dropping-insertion-point.native.scss +8 -0
  309. package/src/components/block-draggable/index.native.js +458 -0
  310. package/src/components/block-draggable/style.native.scss +19 -0
  311. package/src/components/block-draggable/use-scroll-when-dragging.native.js +135 -0
  312. package/src/components/block-list/block-list-context.native.js +175 -0
  313. package/src/components/block-list/block-list-item-cell.native.js +49 -0
  314. package/src/components/block-list/block-list-item.native.js +7 -11
  315. package/src/components/block-list/block.native.js +38 -8
  316. package/src/components/block-list/index.native.js +54 -13
  317. package/src/components/block-list/style.scss +7 -18
  318. package/src/components/block-list/test/block-list-context.native.js +253 -0
  319. package/src/components/block-list/test/fixtures/block-list-context.native.js +79 -0
  320. package/src/components/block-list/use-block-props/index.js +10 -5
  321. package/src/components/block-list/use-block-props/use-block-class-names.js +1 -11
  322. package/src/components/block-list/use-in-between-inserter.js +1 -1
  323. package/src/components/block-lock/modal.js +42 -3
  324. package/src/components/block-lock/toolbar.js +2 -2
  325. package/src/components/block-lock/use-block-lock.js +4 -1
  326. package/src/components/block-mobile-toolbar/index.native.js +8 -1
  327. package/src/components/block-mover/button.js +5 -7
  328. package/src/components/block-mover/index.js +37 -60
  329. package/src/components/block-mover/index.native.js +22 -6
  330. package/src/components/block-mover/stories/index.js +110 -0
  331. package/src/components/block-mover/style.scss +48 -138
  332. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +6 -0
  333. package/src/components/block-navigation/dropdown.js +12 -8
  334. package/src/components/block-popover/README.md +41 -0
  335. package/src/components/block-popover/inbetween.js +188 -0
  336. package/src/components/block-popover/index.js +75 -0
  337. package/src/components/block-popover/style.scss +28 -0
  338. package/src/components/{block-tools → block-popover}/use-popover-scroll.js +3 -1
  339. package/src/components/block-preview/index.js +1 -4
  340. package/src/components/block-styles/index.js +1 -12
  341. package/src/components/block-switcher/style.scss +2 -43
  342. package/src/components/block-toolbar/style.scss +0 -12
  343. package/src/components/block-tools/back-compat.js +1 -1
  344. package/src/components/block-tools/block-selection-button.js +3 -1
  345. package/src/components/block-tools/index.js +6 -4
  346. package/src/components/block-tools/insertion-point.js +19 -152
  347. package/src/components/block-tools/{block-popover.js → selected-block-popover.js} +24 -151
  348. package/src/components/block-tools/style.scss +12 -135
  349. package/src/components/border-radius-control/input-controls.js +16 -8
  350. package/src/components/border-radius-control/style.scss +7 -3
  351. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  352. package/src/components/color-style-selector/index.js +18 -9
  353. package/src/components/colors-gradients/dropdown.js +156 -62
  354. package/src/components/colors-gradients/style.scss +51 -23
  355. package/src/components/default-block-appender/style.scss +1 -2
  356. package/src/components/duotone-control/index.js +8 -1
  357. package/src/components/duotone-control/style.scss +1 -7
  358. package/src/components/gradients/README.md +29 -0
  359. package/src/components/image-editor/use-save-image.js +2 -1
  360. package/src/components/image-size-control/README.md +1 -1
  361. package/src/components/index.js +1 -3
  362. package/src/components/inserter/index.native.js +60 -25
  363. package/src/components/inserter/style.native.scss +25 -3
  364. package/src/components/inserter/style.scss +2 -1
  365. package/src/components/link-control/constants.js +11 -0
  366. package/src/components/link-control/search-results.js +4 -5
  367. package/src/components/link-control/use-search-handler.js +11 -5
  368. package/src/components/list-view/block.js +24 -34
  369. package/src/components/list-view/branch.js +10 -20
  370. package/src/components/list-view/context.js +1 -4
  371. package/src/components/list-view/drop-indicator.js +0 -1
  372. package/src/components/list-view/index.js +11 -41
  373. package/src/components/list-view/style.scss +2 -1
  374. package/src/components/navigable-toolbar/README.md +16 -0
  375. package/src/components/navigable-toolbar/index.js +12 -2
  376. package/src/components/preview-options/style.scss +0 -4
  377. package/src/components/rich-text/format-toolbar-container.js +0 -1
  378. package/src/components/rich-text/index.js +1 -3
  379. package/src/components/rich-text/index.native.js +0 -4
  380. package/src/components/rich-text/style.scss +2 -8
  381. package/src/components/url-input/index.js +9 -4
  382. package/src/components/use-block-display-information/index.js +2 -0
  383. package/src/components/use-block-drop-zone/index.native.js +173 -0
  384. package/src/components/use-on-block-drop/index.native.js +119 -0
  385. package/src/components/use-setting/index.js +57 -21
  386. package/src/hooks/anchor.js +1 -1
  387. package/src/hooks/border.js +429 -72
  388. package/src/hooks/color-panel.js +13 -9
  389. package/src/hooks/color.scss +0 -62
  390. package/src/hooks/dimensions.js +44 -38
  391. package/src/hooks/index.js +2 -1
  392. package/src/hooks/margin.js +64 -15
  393. package/src/hooks/padding.js +60 -15
  394. package/src/hooks/padding.scss +12 -0
  395. package/src/hooks/settings.js +32 -0
  396. package/src/hooks/style.js +25 -39
  397. package/src/hooks/test/settings.js +48 -0
  398. package/src/hooks/typography.js +2 -0
  399. package/src/hooks/use-border-props.js +15 -32
  400. package/src/store/actions.js +14 -2
  401. package/src/store/defaults.js +0 -1
  402. package/src/store/reducer.js +0 -21
  403. package/src/store/selectors.js +46 -15
  404. package/src/store/test/actions.js +0 -18
  405. package/src/store/test/reducer.js +0 -19
  406. package/src/store/test/selectors.js +17 -19
  407. package/src/style.scss +2 -3
  408. package/tsconfig.tsbuildinfo +1 -1
  409. package/build/components/block-mobile-toolbar/index.js +0 -42
  410. package/build/components/block-mobile-toolbar/index.js.map +0 -1
  411. package/build/components/block-tools/block-popover.js +0 -327
  412. package/build/components/block-tools/block-popover.js.map +0 -1
  413. package/build/components/block-tools/use-popover-scroll.js.map +0 -1
  414. package/build/components/border-style-control/index.js +0 -60
  415. package/build/components/border-style-control/index.js.map +0 -1
  416. package/build/components/colors-gradients/tools-panel-color-dropdown.js +0 -89
  417. package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  418. package/build/components/list-view/appender.js +0 -93
  419. package/build/components/list-view/appender.js.map +0 -1
  420. package/build/components/list-view/list-item.js +0 -62
  421. package/build/components/list-view/list-item.js.map +0 -1
  422. package/build/components/rich-text/use-caret-in-format.js +0 -43
  423. package/build/components/rich-text/use-caret-in-format.js.map +0 -1
  424. package/build/hooks/border-color.js +0 -302
  425. package/build/hooks/border-color.js.map +0 -1
  426. package/build/hooks/border-style.js +0 -96
  427. package/build/hooks/border-style.js.map +0 -1
  428. package/build/hooks/border-width.js +0 -162
  429. package/build/hooks/border-width.js.map +0 -1
  430. package/build-module/components/block-mobile-toolbar/index.js +0 -31
  431. package/build-module/components/block-mobile-toolbar/index.js.map +0 -1
  432. package/build-module/components/block-tools/block-popover.js +0 -306
  433. package/build-module/components/block-tools/block-popover.js.map +0 -1
  434. package/build-module/components/block-tools/use-popover-scroll.js.map +0 -1
  435. package/build-module/components/border-style-control/index.js +0 -50
  436. package/build-module/components/border-style-control/index.js.map +0 -1
  437. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +0 -75
  438. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  439. package/build-module/components/list-view/appender.js +0 -76
  440. package/build-module/components/list-view/appender.js.map +0 -1
  441. package/build-module/components/list-view/list-item.js +0 -47
  442. package/build-module/components/list-view/list-item.js.map +0 -1
  443. package/build-module/components/rich-text/use-caret-in-format.js +0 -33
  444. package/build-module/components/rich-text/use-caret-in-format.js.map +0 -1
  445. package/build-module/hooks/border-color.js +0 -276
  446. package/build-module/hooks/border-color.js.map +0 -1
  447. package/build-module/hooks/border-style.js +0 -78
  448. package/build-module/hooks/border-style.js.map +0 -1
  449. package/build-module/hooks/border-width.js +0 -143
  450. package/build-module/hooks/border-width.js.map +0 -1
  451. package/src/components/block-alignment-matrix-control/style.scss +0 -10
  452. package/src/components/block-mobile-toolbar/index.js +0 -24
  453. package/src/components/block-mobile-toolbar/style.scss +0 -29
  454. package/src/components/border-style-control/index.js +0 -47
  455. package/src/components/border-style-control/style.scss +0 -18
  456. package/src/components/colors-gradients/tools-panel-color-dropdown.js +0 -85
  457. package/src/components/list-view/appender.js +0 -82
  458. package/src/components/list-view/list-item.js +0 -59
  459. package/src/components/rich-text/use-caret-in-format.js +0 -28
  460. package/src/hooks/border-color.js +0 -315
  461. package/src/hooks/border-style.js +0 -64
  462. package/src/hooks/border-width.js +0 -139
@@ -6,9 +6,10 @@ import { useState, useEffect } from '@wordpress/element';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
+ import ColorGradientSettingsDropdown from '../components/colors-gradients/dropdown';
9
10
  import ContrastChecker from '../components/contrast-checker';
10
- import ToolsPanelColorDropdown from '../components/colors-gradients/tools-panel-color-dropdown';
11
11
  import InspectorControls from '../components/inspector-controls';
12
+ import useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';
12
13
  import { __unstableUseBlockRef as useBlockRef } from '../components/block-list/use-block-props/use-block-refs';
13
14
 
14
15
  function getComputedStyle( node ) {
@@ -58,16 +59,19 @@ export default function ColorPanel( {
58
59
  setDetectedBackgroundColor( backgroundColor );
59
60
  } );
60
61
 
62
+ const colorGradientSettings = useMultipleOriginColorsAndGradients();
63
+
61
64
  return (
62
65
  <InspectorControls __experimentalGroup="color">
63
- { settings.map( ( setting, index ) => (
64
- <ToolsPanelColorDropdown
65
- key={ index }
66
- settings={ setting }
67
- panelId={ clientId }
68
- enableAlpha={ enableAlpha }
69
- />
70
- ) ) }
66
+ <ColorGradientSettingsDropdown
67
+ enableAlpha={ enableAlpha }
68
+ panelId={ clientId }
69
+ settings={ settings }
70
+ __experimentalIsItemGroup={ false }
71
+ __experimentalHasMultipleOrigins
72
+ __experimentalIsRenderedInSidebar
73
+ { ...colorGradientSettings }
74
+ />
71
75
  { enableContrastChecking && (
72
76
  <ContrastChecker
73
77
  backgroundColor={ detectedBackgroundColor }
@@ -20,66 +20,4 @@
20
20
  row-gap: 0;
21
21
  }
22
22
  }
23
-
24
- /**
25
- * The following styles replicate the separated border of the
26
- * `ItemGroup` component but allows for hidden items. This is because
27
- * to maintain the order of `ToolsPanel` controls, each `ToolsPanelItem`
28
- * must at least render a placeholder which would otherwise interfere
29
- * with the `:last-child` styles.
30
- */
31
- .block-editor-tools-panel-color-gradient-settings__item {
32
- padding: 0;
33
-
34
- // Border styles.
35
- border-left: 1px solid rgba(0, 0, 0, 0.1);
36
- border-right: 1px solid rgba(0, 0, 0, 0.1);
37
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
38
-
39
- &.first {
40
- border-top-left-radius: 2px;
41
- border-top-right-radius: 2px;
42
- border-top: 1px solid rgba(0, 0, 0, 0.1);
43
- }
44
-
45
- &.last {
46
- border-bottom-left-radius: 2px;
47
- border-bottom-right-radius: 2px;
48
- }
49
-
50
- > div,
51
- > div > button {
52
- border-radius: inherit;
53
- }
54
- }
55
-
56
- .block-editor-panel-color-gradient-settings__color-indicator {
57
- // Show a diagonal line (crossed out) for empty swatches.
58
- background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%);
59
- }
60
-
61
- /**
62
- * The following few styles fix the layout and spacing for the due to the
63
- * introduced wrapper element by the `Item` component.
64
- */
65
- .block-editor-tools-panel-color-dropdown {
66
- display: block;
67
- padding: 0;
68
-
69
- > button {
70
- height: 46px;
71
-
72
- &.is-open {
73
- background: $gray-100;
74
- color: var(--wp-admin-theme-color);
75
- }
76
- }
77
- }
78
-
79
- .color-block-support-panel__item-group {
80
- > div {
81
- grid-column: span 2;
82
- border-radius: inherit;
83
- }
84
- }
85
23
  }
@@ -19,6 +19,7 @@ import {
19
19
  } from './gap';
20
20
  import {
21
21
  MarginEdit,
22
+ MarginVisualizer,
22
23
  hasMarginSupport,
23
24
  hasMarginValue,
24
25
  resetMargin,
@@ -26,6 +27,7 @@ import {
26
27
  } from './margin';
27
28
  import {
28
29
  PaddingEdit,
30
+ PaddingVisualizer,
29
31
  hasPaddingSupport,
30
32
  hasPaddingValue,
31
33
  resetPadding,
@@ -71,44 +73,48 @@ export function DimensionsPanel( props ) {
71
73
  } );
72
74
 
73
75
  return (
74
- <InspectorControls __experimentalGroup="dimensions">
75
- { ! isPaddingDisabled && (
76
- <ToolsPanelItem
77
- hasValue={ () => hasPaddingValue( props ) }
78
- label={ __( 'Padding' ) }
79
- onDeselect={ () => resetPadding( props ) }
80
- resetAllFilter={ createResetAllFilter( 'padding' ) }
81
- isShownByDefault={ defaultSpacingControls?.padding }
82
- panelId={ props.clientId }
83
- >
84
- <PaddingEdit { ...props } />
85
- </ToolsPanelItem>
86
- ) }
87
- { ! isMarginDisabled && (
88
- <ToolsPanelItem
89
- hasValue={ () => hasMarginValue( props ) }
90
- label={ __( 'Margin' ) }
91
- onDeselect={ () => resetMargin( props ) }
92
- resetAllFilter={ createResetAllFilter( 'margin' ) }
93
- isShownByDefault={ defaultSpacingControls?.margin }
94
- panelId={ props.clientId }
95
- >
96
- <MarginEdit { ...props } />
97
- </ToolsPanelItem>
98
- ) }
99
- { ! isGapDisabled && (
100
- <ToolsPanelItem
101
- hasValue={ () => hasGapValue( props ) }
102
- label={ __( 'Block spacing' ) }
103
- onDeselect={ () => resetGap( props ) }
104
- resetAllFilter={ createResetAllFilter( 'blockGap' ) }
105
- isShownByDefault={ defaultSpacingControls?.blockGap }
106
- panelId={ props.clientId }
107
- >
108
- <GapEdit { ...props } />
109
- </ToolsPanelItem>
110
- ) }
111
- </InspectorControls>
76
+ <>
77
+ <InspectorControls __experimentalGroup="dimensions">
78
+ { ! isPaddingDisabled && (
79
+ <ToolsPanelItem
80
+ hasValue={ () => hasPaddingValue( props ) }
81
+ label={ __( 'Padding' ) }
82
+ onDeselect={ () => resetPadding( props ) }
83
+ resetAllFilter={ createResetAllFilter( 'padding' ) }
84
+ isShownByDefault={ defaultSpacingControls?.padding }
85
+ panelId={ props.clientId }
86
+ >
87
+ <PaddingEdit { ...props } />
88
+ </ToolsPanelItem>
89
+ ) }
90
+ { ! isMarginDisabled && (
91
+ <ToolsPanelItem
92
+ hasValue={ () => hasMarginValue( props ) }
93
+ label={ __( 'Margin' ) }
94
+ onDeselect={ () => resetMargin( props ) }
95
+ resetAllFilter={ createResetAllFilter( 'margin' ) }
96
+ isShownByDefault={ defaultSpacingControls?.margin }
97
+ panelId={ props.clientId }
98
+ >
99
+ <MarginEdit { ...props } />
100
+ </ToolsPanelItem>
101
+ ) }
102
+ { ! isGapDisabled && (
103
+ <ToolsPanelItem
104
+ hasValue={ () => hasGapValue( props ) }
105
+ label={ __( 'Block spacing' ) }
106
+ onDeselect={ () => resetGap( props ) }
107
+ resetAllFilter={ createResetAllFilter( 'blockGap' ) }
108
+ isShownByDefault={ defaultSpacingControls?.blockGap }
109
+ panelId={ props.clientId }
110
+ >
111
+ <GapEdit { ...props } />
112
+ </ToolsPanelItem>
113
+ ) }
114
+ </InspectorControls>
115
+ { ! isPaddingDisabled && <PaddingVisualizer { ...props } /> }
116
+ { ! isMarginDisabled && <MarginVisualizer { ...props } /> }
117
+ </>
112
118
  );
113
119
  }
114
120
 
@@ -8,10 +8,11 @@ import './anchor';
8
8
  import './custom-class-name';
9
9
  import './generated-class-name';
10
10
  import './style';
11
+ import './settings';
11
12
  import './color';
12
13
  import './duotone';
13
14
  import './font-size';
14
- import './border-color';
15
+ import './border';
15
16
  import './layout';
16
17
 
17
18
  export { useCustomSides } from './dimensions';
@@ -2,12 +2,19 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { Platform } from '@wordpress/element';
5
+ import {
6
+ Platform,
7
+ useMemo,
8
+ useRef,
9
+ useState,
10
+ useEffect,
11
+ } from '@wordpress/element';
6
12
  import { getBlockSupport } from '@wordpress/blocks';
7
13
  import {
8
14
  __experimentalUseCustomUnits as useCustomUnits,
9
15
  __experimentalBoxControl as BoxControl,
10
16
  } from '@wordpress/components';
17
+ import isShallowEqual from '@wordpress/is-shallow-equal';
11
18
 
12
19
  /**
13
20
  * Internal dependencies
@@ -20,6 +27,7 @@ import {
20
27
  useIsDimensionsSupportValid,
21
28
  } from './dimensions';
22
29
  import { cleanEmptyObject } from './utils';
30
+ import BlockPopover from '../components/block-popover';
23
31
 
24
32
  /**
25
33
  * Determines if there is margin support.
@@ -124,26 +132,12 @@ export function MarginEdit( props ) {
124
132
  } );
125
133
  };
126
134
 
127
- const onChangeShowVisualizer = ( next ) => {
128
- const newStyle = {
129
- ...style,
130
- visualizers: {
131
- margin: next,
132
- },
133
- };
134
-
135
- setAttributes( {
136
- style: cleanEmptyObject( newStyle ),
137
- } );
138
- };
139
-
140
135
  return Platform.select( {
141
136
  web: (
142
137
  <>
143
138
  <BoxControl
144
139
  values={ style?.spacing?.margin }
145
140
  onChange={ onChange }
146
- onChangeShowVisualizer={ onChangeShowVisualizer }
147
141
  label={ __( 'Margin' ) }
148
142
  sides={ sides }
149
143
  units={ units }
@@ -155,3 +149,58 @@ export function MarginEdit( props ) {
155
149
  native: null,
156
150
  } );
157
151
  }
152
+
153
+ export function MarginVisualizer( { clientId, attributes } ) {
154
+ const margin = attributes?.style?.spacing?.margin;
155
+ const style = useMemo( () => {
156
+ return {
157
+ borderTopWidth: margin?.top ?? 0,
158
+ borderRightWidth: margin?.right ?? 0,
159
+ borderBottomWidth: margin?.bottom ?? 0,
160
+ borderLeftWidth: margin?.left ?? 0,
161
+ top: margin?.top ? `-${ margin.top }` : 0,
162
+ right: margin?.right ? `-${ margin.right }` : 0,
163
+ bottom: margin?.bottom ? `-${ margin.bottom }` : 0,
164
+ left: margin?.left ? `-${ margin.left }` : 0,
165
+ };
166
+ }, [ margin ] );
167
+
168
+ const [ isActive, setIsActive ] = useState( false );
169
+ const valueRef = useRef( margin );
170
+ const timeoutRef = useRef();
171
+
172
+ const clearTimer = () => {
173
+ if ( timeoutRef.current ) {
174
+ window.clearTimeout( timeoutRef.current );
175
+ }
176
+ };
177
+
178
+ useEffect( () => {
179
+ if ( ! isShallowEqual( margin, valueRef.current ) ) {
180
+ setIsActive( true );
181
+ valueRef.current = margin;
182
+
183
+ clearTimer();
184
+
185
+ timeoutRef.current = setTimeout( () => {
186
+ setIsActive( false );
187
+ }, 400 );
188
+ }
189
+
190
+ return () => clearTimer();
191
+ }, [ margin ] );
192
+
193
+ if ( ! isActive ) {
194
+ return null;
195
+ }
196
+
197
+ return (
198
+ <BlockPopover
199
+ clientId={ clientId }
200
+ __unstableCoverTarget
201
+ __unstableRefreshSize={ margin }
202
+ >
203
+ <div className="block-editor__padding-visualizer" style={ style } />
204
+ </BlockPopover>
205
+ );
206
+ }
@@ -2,12 +2,19 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { Platform } from '@wordpress/element';
5
+ import {
6
+ Platform,
7
+ useState,
8
+ useRef,
9
+ useEffect,
10
+ useMemo,
11
+ } from '@wordpress/element';
6
12
  import { getBlockSupport } from '@wordpress/blocks';
7
13
  import {
8
14
  __experimentalUseCustomUnits as useCustomUnits,
9
15
  __experimentalBoxControl as BoxControl,
10
16
  } from '@wordpress/components';
17
+ import isShallowEqual from '@wordpress/is-shallow-equal';
11
18
 
12
19
  /**
13
20
  * Internal dependencies
@@ -20,6 +27,7 @@ import {
20
27
  useIsDimensionsSupportValid,
21
28
  } from './dimensions';
22
29
  import { cleanEmptyObject } from './utils';
30
+ import BlockPopover from '../components/block-popover';
23
31
 
24
32
  /**
25
33
  * Determines if there is padding support.
@@ -124,26 +132,12 @@ export function PaddingEdit( props ) {
124
132
  } );
125
133
  };
126
134
 
127
- const onChangeShowVisualizer = ( next ) => {
128
- const newStyle = {
129
- ...style,
130
- visualizers: {
131
- padding: next,
132
- },
133
- };
134
-
135
- setAttributes( {
136
- style: cleanEmptyObject( newStyle ),
137
- } );
138
- };
139
-
140
135
  return Platform.select( {
141
136
  web: (
142
137
  <>
143
138
  <BoxControl
144
139
  values={ style?.spacing?.padding }
145
140
  onChange={ onChange }
146
- onChangeShowVisualizer={ onChangeShowVisualizer }
147
141
  label={ __( 'Padding' ) }
148
142
  sides={ sides }
149
143
  units={ units }
@@ -155,3 +149,54 @@ export function PaddingEdit( props ) {
155
149
  native: null,
156
150
  } );
157
151
  }
152
+
153
+ export function PaddingVisualizer( { clientId, attributes } ) {
154
+ const padding = attributes?.style?.spacing?.padding;
155
+ const style = useMemo( () => {
156
+ return {
157
+ borderTopWidth: padding?.top ?? 0,
158
+ borderRightWidth: padding?.right ?? 0,
159
+ borderBottomWidth: padding?.bottom ?? 0,
160
+ borderLeftWidth: padding?.left ?? 0,
161
+ };
162
+ }, [ padding ] );
163
+
164
+ const [ isActive, setIsActive ] = useState( false );
165
+ const valueRef = useRef( padding );
166
+ const timeoutRef = useRef();
167
+
168
+ const clearTimer = () => {
169
+ if ( timeoutRef.current ) {
170
+ window.clearTimeout( timeoutRef.current );
171
+ }
172
+ };
173
+
174
+ useEffect( () => {
175
+ if ( ! isShallowEqual( padding, valueRef.current ) ) {
176
+ setIsActive( true );
177
+ valueRef.current = padding;
178
+
179
+ clearTimer();
180
+
181
+ timeoutRef.current = setTimeout( () => {
182
+ setIsActive( false );
183
+ }, 400 );
184
+ }
185
+
186
+ return () => clearTimer();
187
+ }, [ padding ] );
188
+
189
+ if ( ! isActive ) {
190
+ return null;
191
+ }
192
+
193
+ return (
194
+ <BlockPopover
195
+ clientId={ clientId }
196
+ __unstableCoverTarget
197
+ __unstableRefreshSize={ padding }
198
+ >
199
+ <div className="block-editor__padding-visualizer" style={ style } />
200
+ </BlockPopover>
201
+ );
202
+ }
@@ -0,0 +1,12 @@
1
+ .block-editor__padding-visualizer {
2
+ position: absolute;
3
+ top: 0;
4
+ bottom: 0;
5
+ left: 0;
6
+ right: 0;
7
+ opacity: 0.5;
8
+ border-color: var(--wp-admin-theme-color);
9
+ border-style: solid;
10
+ pointer-events: none;
11
+ box-sizing: border-box;
12
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { addFilter } from '@wordpress/hooks';
5
+ import { hasBlockSupport } from '@wordpress/blocks';
6
+
7
+ const hasSettingsSupport = ( blockType ) =>
8
+ hasBlockSupport( blockType, '__experimentalSettings', false );
9
+
10
+ function addAttribute( settings ) {
11
+ if ( ! hasSettingsSupport( settings ) ) {
12
+ return settings;
13
+ }
14
+
15
+ // Allow blocks to specify their own attribute definition with default values if needed.
16
+ if ( ! settings?.attributes?.settings ) {
17
+ settings.attributes = {
18
+ ...settings.attributes,
19
+ settings: {
20
+ type: 'object',
21
+ },
22
+ };
23
+ }
24
+
25
+ return settings;
26
+ }
27
+
28
+ addFilter(
29
+ 'blocks.registerBlockType',
30
+ 'core/settings/addAttribute',
31
+ addAttribute
32
+ );
@@ -1,18 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import {
5
- first,
6
- forEach,
7
- get,
8
- has,
9
- isEmpty,
10
- isString,
11
- kebabCase,
12
- map,
13
- omit,
14
- startsWith,
15
- } from 'lodash';
4
+ import { get, has, isEmpty, kebabCase, omit } from 'lodash';
16
5
  import classnames from 'classnames';
17
6
 
18
7
  /**
@@ -58,7 +47,7 @@ const VARIABLE_REFERENCE_PREFIX = 'var:';
58
47
  const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
59
48
  const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
60
49
  function compileStyleValue( uncompiledValue ) {
61
- if ( startsWith( uncompiledValue, VARIABLE_REFERENCE_PREFIX ) ) {
50
+ if ( uncompiledValue?.startsWith?.( VARIABLE_REFERENCE_PREFIX ) ) {
62
51
  const variable = uncompiledValue
63
52
  .slice( VARIABLE_REFERENCE_PREFIX.length )
64
53
  .split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )
@@ -82,13 +71,13 @@ export function getInlineStyles( styles = {} ) {
82
71
  const path = STYLE_PROPERTY[ propKey ].value;
83
72
  const subPaths = STYLE_PROPERTY[ propKey ].properties;
84
73
  // Ignore styles on elements because they are handled on the server.
85
- if ( has( styles, path ) && 'elements' !== first( path ) ) {
74
+ if ( has( styles, path ) && 'elements' !== path?.[ 0 ] ) {
86
75
  // Checking if style value is a string allows for shorthand css
87
76
  // option and backwards compatibility for border radius support.
88
77
  const styleValue = get( styles, path );
89
78
 
90
79
  if ( ! STYLE_PROPERTY[ propKey ].useEngine ) {
91
- if ( !! subPaths && ! isString( styleValue ) ) {
80
+ if ( !! subPaths && typeof styleValue !== 'string' ) {
92
81
  Object.entries( subPaths ).forEach( ( entry ) => {
93
82
  const [ name, subPath ] = entry;
94
83
  const value = get( styleValue, [ subPath ] );
@@ -108,11 +97,8 @@ export function getInlineStyles( styles = {} ) {
108
97
 
109
98
  // The goal is to move everything to server side generated engine styles
110
99
  // This is temporary as we absorb more and more styles into the engine.
111
- const extraRules = getCSSRules( styles, { selector: 'self' } );
100
+ const extraRules = getCSSRules( styles );
112
101
  extraRules.forEach( ( rule ) => {
113
- if ( rule.selector !== 'self' ) {
114
- throw "This style can't be added as inline style";
115
- }
116
102
  output[ rule.key ] = rule.value;
117
103
  } );
118
104
 
@@ -120,24 +106,25 @@ export function getInlineStyles( styles = {} ) {
120
106
  }
121
107
 
122
108
  function compileElementsStyles( selector, elements = {} ) {
123
- return map( elements, ( styles, element ) => {
124
- const elementStyles = getInlineStyles( styles );
125
- if ( ! isEmpty( elementStyles ) ) {
126
- // The .editor-styles-wrapper selector is required on elements styles. As it is
127
- // added to all other editor styles, not providing it causes reset and global
128
- // styles to override element styles because of higher specificity.
129
- return [
130
- `.editor-styles-wrapper .${ selector } ${ ELEMENTS[ element ] }{`,
131
- ...map(
132
- elementStyles,
133
- ( value, property ) =>
134
- `\t${ kebabCase( property ) }: ${ value };`
135
- ),
136
- '}',
137
- ].join( '\n' );
138
- }
139
- return '';
140
- } ).join( '\n' );
109
+ return Object.entries( elements )
110
+ .map( ( [ element, styles ] ) => {
111
+ const elementStyles = getInlineStyles( styles );
112
+ if ( ! isEmpty( elementStyles ) ) {
113
+ // The .editor-styles-wrapper selector is required on elements styles. As it is
114
+ // added to all other editor styles, not providing it causes reset and global
115
+ // styles to override element styles because of higher specificity.
116
+ return [
117
+ `.editor-styles-wrapper .${ selector } ${ ELEMENTS[ element ] }{`,
118
+ ...Object.entries( elementStyles ).map(
119
+ ( [ cssProperty, value ] ) =>
120
+ `\t${ kebabCase( cssProperty ) }: ${ value };`
121
+ ),
122
+ '}',
123
+ ].join( '\n' );
124
+ }
125
+ return '';
126
+ } )
127
+ .join( '\n' );
141
128
  }
142
129
 
143
130
  /**
@@ -235,8 +222,7 @@ export function addSaveProps(
235
222
  }
236
223
 
237
224
  let { style } = attributes;
238
-
239
- forEach( skipPaths, ( path, indicator ) => {
225
+ Object.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {
240
226
  const skipSerialization = getBlockSupport( blockType, indicator );
241
227
 
242
228
  if ( skipSerialization === true ) {
@@ -0,0 +1,48 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { applyFilters } from '@wordpress/hooks';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import '../settings';
10
+
11
+ describe( 'with settings', () => {
12
+ const blockSettings = {
13
+ save: () => <div className="default" />,
14
+ category: 'text',
15
+ title: 'block title',
16
+ };
17
+
18
+ describe( 'addAttribute', () => {
19
+ const addAttribute = applyFilters.bind(
20
+ null,
21
+ 'blocks.registerBlockType'
22
+ );
23
+
24
+ it( 'does not have settings att if settings block support is not enabled', () => {
25
+ const settings = addAttribute( {
26
+ ...blockSettings,
27
+ supports: {
28
+ __experimentalSettings: false,
29
+ },
30
+ } );
31
+
32
+ expect( settings.attributes ).toBe( undefined );
33
+ } );
34
+
35
+ it( 'has settings att if settings block supports is enabled', () => {
36
+ const settings = addAttribute( {
37
+ ...blockSettings,
38
+ supports: {
39
+ __experimentalSettings: true,
40
+ },
41
+ } );
42
+
43
+ expect( settings.attributes ).toStrictEqual( {
44
+ settings: { type: 'object' },
45
+ } );
46
+ } );
47
+ } );
48
+ } );
@@ -130,6 +130,7 @@ export function TypographyPanel( props ) {
130
130
  { ! isFontSizeDisabled && (
131
131
  <ToolsPanelItem
132
132
  hasValue={ () => hasFontSizeValue( props ) }
133
+ /* translators: Ensure translation is distinct from "Letter case" */
133
134
  label={ __( 'Font size' ) }
134
135
  onDeselect={ () => resetFontSize( props ) }
135
136
  isShownByDefault={ defaultControls?.fontSize }
@@ -205,6 +206,7 @@ export function TypographyPanel( props ) {
205
206
  <ToolsPanelItem
206
207
  className="single-column"
207
208
  hasValue={ () => hasTextTransformValue( props ) }
209
+ /* translators: Ensure translation is distinct from "Font size" */
208
210
  label={ __( 'Letter case' ) }
209
211
  onDeselect={ () => resetTextTransform( props ) }
210
212
  isShownByDefault={ defaultControls?.textTransform }