@wordpress/block-editor 11.8.0 → 12.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 (454) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +16 -4
  3. package/build/components/block-controls/slot.js +12 -4
  4. package/build/components/block-controls/slot.js.map +1 -1
  5. package/build/components/block-controls/slot.native.js +10 -1
  6. package/build/components/block-controls/slot.native.js.map +1 -1
  7. package/build/components/block-draggable/index.js +11 -7
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  10. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  11. package/build/components/block-info-slot-fill/index.js +47 -0
  12. package/build/components/block-info-slot-fill/index.js.map +1 -0
  13. package/build/components/block-inspector/index.js +4 -2
  14. package/build/components/block-inspector/index.js.map +1 -1
  15. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  16. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  17. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  18. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  19. package/build/components/block-list/block-list-item.native.js +158 -195
  20. package/build/components/block-list/block-list-item.native.js.map +1 -1
  21. package/build/components/block-list/block-outline.native.js +57 -0
  22. package/build/components/block-list/block-outline.native.js.map +1 -0
  23. package/build/components/block-list/block.native.js +343 -300
  24. package/build/components/block-list/block.native.js.map +1 -1
  25. package/build/components/block-list/index.native.js +202 -298
  26. package/build/components/block-list/index.native.js.map +1 -1
  27. package/build/components/block-list/insertion-point.native.js +4 -2
  28. package/build/components/block-list/insertion-point.native.js.map +1 -1
  29. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  30. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +15 -4
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-toolbar/index.js +2 -1
  36. package/build/components/block-toolbar/index.js.map +1 -1
  37. package/build/components/block-tools/block-contextual-toolbar.js +40 -11
  38. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  39. package/build/components/block-tools/selected-block-popover.js +8 -30
  40. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  41. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  42. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  43. package/build/components/editor-styles/index.js +4 -3
  44. package/build/components/editor-styles/index.js.map +1 -1
  45. package/build/components/font-sizes/fluid-utils.js +21 -14
  46. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  47. package/build/components/global-styles/advanced-panel.js +86 -0
  48. package/build/components/global-styles/advanced-panel.js.map +1 -0
  49. package/build/components/global-styles/border-panel.js +2 -32
  50. package/build/components/global-styles/border-panel.js.map +1 -1
  51. package/build/components/global-styles/color-panel.js +16 -13
  52. package/build/components/global-styles/color-panel.js.map +1 -1
  53. package/build/components/global-styles/color-panel.native.js +174 -0
  54. package/build/components/global-styles/color-panel.native.js.map +1 -0
  55. package/build/components/global-styles/dimensions-panel.js +12 -12
  56. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  57. package/build/components/global-styles/effects-panel.js +1 -1
  58. package/build/components/global-styles/effects-panel.js.map +1 -1
  59. package/build/components/global-styles/filters-panel.js +78 -14
  60. package/build/components/global-styles/filters-panel.js.map +1 -1
  61. package/build/components/global-styles/hooks.js +1 -2
  62. package/build/components/global-styles/hooks.js.map +1 -1
  63. package/build/components/global-styles/index.js +24 -0
  64. package/build/components/global-styles/index.js.map +1 -1
  65. package/build/components/global-styles/typography-panel.js +10 -10
  66. package/build/components/global-styles/typography-panel.js.map +1 -1
  67. package/build/components/global-styles/use-global-styles-output.js +114 -81
  68. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  69. package/build/components/global-styles/utils.js +30 -0
  70. package/build/components/global-styles/utils.js.map +1 -1
  71. package/build/components/image-editor/use-save-image.js +24 -8
  72. package/build/components/image-editor/use-save-image.js.map +1 -1
  73. package/build/components/index.js +7 -0
  74. package/build/components/index.js.map +1 -1
  75. package/build/components/inserter/block-types-tab.js +12 -7
  76. package/build/components/inserter/block-types-tab.js.map +1 -1
  77. package/build/components/inserter/index.js +2 -1
  78. package/build/components/inserter/index.js.map +1 -1
  79. package/build/components/inserter-draggable-blocks/index.js +5 -0
  80. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  81. package/build/components/inspector-controls/fill.js +1 -1
  82. package/build/components/inspector-controls/fill.js.map +1 -1
  83. package/build/components/inspector-controls/fill.native.js +1 -1
  84. package/build/components/inspector-controls/fill.native.js.map +1 -1
  85. package/build/components/inspector-controls/groups.js +2 -0
  86. package/build/components/inspector-controls/groups.js.map +1 -1
  87. package/build/components/inspector-controls/slot.js +3 -6
  88. package/build/components/inspector-controls/slot.js.map +1 -1
  89. package/build/components/inspector-controls/slot.native.js +1 -1
  90. package/build/components/inspector-controls/slot.native.js.map +1 -1
  91. package/build/components/inspector-controls-tabs/styles-tab.js +2 -0
  92. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  93. package/build/components/line-height-control/index.js +7 -2
  94. package/build/components/line-height-control/index.js.map +1 -1
  95. package/build/components/link-control/use-internal-input-value.js +9 -8
  96. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  97. package/build/components/list-view/block-contents.js +7 -2
  98. package/build/components/list-view/block-contents.js.map +1 -1
  99. package/build/components/list-view/block-select-button.js +9 -3
  100. package/build/components/list-view/block-select-button.js.map +1 -1
  101. package/build/components/list-view/block.js +16 -25
  102. package/build/components/list-view/block.js.map +1 -1
  103. package/build/components/list-view/drop-indicator.js +37 -10
  104. package/build/components/list-view/drop-indicator.js.map +1 -1
  105. package/build/components/list-view/index.js +38 -18
  106. package/build/components/list-view/index.js.map +1 -1
  107. package/build/components/list-view/leaf.js +2 -1
  108. package/build/components/list-view/leaf.js.map +1 -1
  109. package/build/components/list-view/use-block-selection.js +1 -1
  110. package/build/components/list-view/use-block-selection.js.map +1 -1
  111. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  112. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  113. package/build/components/media-placeholder/index.js +68 -7
  114. package/build/components/media-placeholder/index.js.map +1 -1
  115. package/build/components/media-replace-flow/index.js +5 -5
  116. package/build/components/media-replace-flow/index.js.map +1 -1
  117. package/build/components/multi-selection-inspector/index.js +2 -2
  118. package/build/components/multi-selection-inspector/index.js.map +1 -1
  119. package/build/components/navigable-toolbar/index.js +12 -4
  120. package/build/components/navigable-toolbar/index.js.map +1 -1
  121. package/build/components/off-canvas-editor/appender.js +2 -7
  122. package/build/components/off-canvas-editor/appender.js.map +1 -1
  123. package/build/components/off-canvas-editor/leaf-more-menu.js +3 -1
  124. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  125. package/build/components/preview-options/index.js +6 -1
  126. package/build/components/preview-options/index.js.map +1 -1
  127. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  128. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  129. package/build/components/url-input/index.js +1 -2
  130. package/build/components/url-input/index.js.map +1 -1
  131. package/build/hooks/align.js +1 -1
  132. package/build/hooks/align.js.map +1 -1
  133. package/build/hooks/border.js +1 -1
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color.js +1 -1
  136. package/build/hooks/color.js.map +1 -1
  137. package/build/hooks/content-lock-ui.js +8 -12
  138. package/build/hooks/content-lock-ui.js.map +1 -1
  139. package/build/hooks/duotone.js +29 -4
  140. package/build/hooks/duotone.js.map +1 -1
  141. package/build/hooks/index.native.js +8 -0
  142. package/build/hooks/index.native.js.map +1 -1
  143. package/build/hooks/layout.js +2 -2
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/position.js +1 -1
  146. package/build/hooks/position.js.map +1 -1
  147. package/build/hooks/style.js +1 -1
  148. package/build/hooks/style.js.map +1 -1
  149. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  150. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  151. package/build/hooks/use-typography-props.js +14 -10
  152. package/build/hooks/use-typography-props.js.map +1 -1
  153. package/build/hooks/utils.js +15 -3
  154. package/build/hooks/utils.js.map +1 -1
  155. package/build/index.native.js +31 -0
  156. package/build/index.native.js.map +1 -0
  157. package/build/private-apis.js +10 -1
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/actions.js +7 -0
  160. package/build/store/actions.js.map +1 -1
  161. package/build/utils/object.js +5 -5
  162. package/build/utils/object.js.map +1 -1
  163. package/build/utils/transform-styles/index.js +2 -2
  164. package/build/utils/transform-styles/index.js.map +1 -1
  165. package/build/utils/use-should-contextual-toolbar-show.js +72 -0
  166. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -0
  167. package/build-module/components/block-controls/slot.js +11 -4
  168. package/build-module/components/block-controls/slot.js.map +1 -1
  169. package/build-module/components/block-controls/slot.native.js +9 -1
  170. package/build-module/components/block-controls/slot.native.js.map +1 -1
  171. package/build-module/components/block-draggable/index.js +10 -6
  172. package/build-module/components/block-draggable/index.js.map +1 -1
  173. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  174. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  175. package/build-module/components/block-info-slot-fill/index.js +34 -0
  176. package/build-module/components/block-info-slot-fill/index.js.map +1 -0
  177. package/build-module/components/block-inspector/index.js +3 -2
  178. package/build-module/components/block-inspector/index.js.map +1 -1
  179. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  180. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  181. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  182. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  183. package/build-module/components/block-list/block-list-item.native.js +160 -190
  184. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  185. package/build-module/components/block-list/block-outline.native.js +44 -0
  186. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  187. package/build-module/components/block-list/block.native.js +341 -299
  188. package/build-module/components/block-list/block.native.js.map +1 -1
  189. package/build-module/components/block-list/index.native.js +203 -293
  190. package/build-module/components/block-list/index.native.js.map +1 -1
  191. package/build-module/components/block-list/insertion-point.native.js +4 -2
  192. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  193. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  194. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  195. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  196. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  197. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  198. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  199. package/build-module/components/block-toolbar/index.js +2 -1
  200. package/build-module/components/block-toolbar/index.js.map +1 -1
  201. package/build-module/components/block-tools/block-contextual-toolbar.js +37 -11
  202. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  203. package/build-module/components/block-tools/selected-block-popover.js +8 -29
  204. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  205. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  206. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  207. package/build-module/components/editor-styles/index.js +4 -3
  208. package/build-module/components/editor-styles/index.js.map +1 -1
  209. package/build-module/components/font-sizes/fluid-utils.js +21 -14
  210. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  211. package/build-module/components/global-styles/advanced-panel.js +74 -0
  212. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  213. package/build-module/components/global-styles/border-panel.js +2 -32
  214. package/build-module/components/global-styles/border-panel.js.map +1 -1
  215. package/build-module/components/global-styles/color-panel.js +18 -15
  216. package/build-module/components/global-styles/color-panel.js.map +1 -1
  217. package/build-module/components/global-styles/color-panel.native.js +150 -0
  218. package/build-module/components/global-styles/color-panel.native.js.map +1 -0
  219. package/build-module/components/global-styles/dimensions-panel.js +13 -13
  220. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  221. package/build-module/components/global-styles/effects-panel.js +2 -2
  222. package/build-module/components/global-styles/effects-panel.js.map +1 -1
  223. package/build-module/components/global-styles/filters-panel.js +78 -16
  224. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  225. package/build-module/components/global-styles/hooks.js +1 -2
  226. package/build-module/components/global-styles/hooks.js.map +1 -1
  227. package/build-module/components/global-styles/index.js +3 -1
  228. package/build-module/components/global-styles/index.js.map +1 -1
  229. package/build-module/components/global-styles/typography-panel.js +11 -11
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/global-styles/use-global-styles-output.js +112 -81
  232. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  233. package/build-module/components/global-styles/utils.js +25 -0
  234. package/build-module/components/global-styles/utils.js.map +1 -1
  235. package/build-module/components/image-editor/use-save-image.js +24 -8
  236. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  237. package/build-module/components/index.js +1 -1
  238. package/build-module/components/index.js.map +1 -1
  239. package/build-module/components/inserter/block-types-tab.js +12 -6
  240. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  241. package/build-module/components/inserter/index.js +2 -1
  242. package/build-module/components/inserter/index.js.map +1 -1
  243. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  244. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  245. package/build-module/components/inspector-controls/fill.js +1 -1
  246. package/build-module/components/inspector-controls/fill.js.map +1 -1
  247. package/build-module/components/inspector-controls/fill.native.js +1 -1
  248. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  249. package/build-module/components/inspector-controls/groups.js +2 -0
  250. package/build-module/components/inspector-controls/groups.js.map +1 -1
  251. package/build-module/components/inspector-controls/slot.js +4 -7
  252. package/build-module/components/inspector-controls/slot.js.map +1 -1
  253. package/build-module/components/inspector-controls/slot.native.js +1 -1
  254. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  255. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -0
  256. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  257. package/build-module/components/line-height-control/index.js +7 -2
  258. package/build-module/components/line-height-control/index.js.map +1 -1
  259. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  260. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  261. package/build-module/components/list-view/block-contents.js +7 -3
  262. package/build-module/components/list-view/block-contents.js.map +1 -1
  263. package/build-module/components/list-view/block-select-button.js +9 -3
  264. package/build-module/components/list-view/block-select-button.js.map +1 -1
  265. package/build-module/components/list-view/block.js +18 -26
  266. package/build-module/components/list-view/block.js.map +1 -1
  267. package/build-module/components/list-view/drop-indicator.js +36 -10
  268. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  269. package/build-module/components/list-view/index.js +39 -19
  270. package/build-module/components/list-view/index.js.map +1 -1
  271. package/build-module/components/list-view/leaf.js +2 -1
  272. package/build-module/components/list-view/leaf.js.map +1 -1
  273. package/build-module/components/list-view/use-block-selection.js +1 -1
  274. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  275. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  276. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  277. package/build-module/components/media-placeholder/index.js +66 -7
  278. package/build-module/components/media-placeholder/index.js.map +1 -1
  279. package/build-module/components/media-replace-flow/index.js +5 -5
  280. package/build-module/components/media-replace-flow/index.js.map +1 -1
  281. package/build-module/components/multi-selection-inspector/index.js +2 -2
  282. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  283. package/build-module/components/navigable-toolbar/index.js +12 -4
  284. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  285. package/build-module/components/off-canvas-editor/appender.js +1 -5
  286. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  287. package/build-module/components/off-canvas-editor/leaf-more-menu.js +3 -1
  288. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  289. package/build-module/components/preview-options/index.js +7 -2
  290. package/build-module/components/preview-options/index.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  292. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  293. package/build-module/components/url-input/index.js +1 -2
  294. package/build-module/components/url-input/index.js.map +1 -1
  295. package/build-module/hooks/align.js +1 -1
  296. package/build-module/hooks/align.js.map +1 -1
  297. package/build-module/hooks/border.js +1 -1
  298. package/build-module/hooks/border.js.map +1 -1
  299. package/build-module/hooks/color.js +1 -1
  300. package/build-module/hooks/color.js.map +1 -1
  301. package/build-module/hooks/content-lock-ui.js +8 -11
  302. package/build-module/hooks/content-lock-ui.js.map +1 -1
  303. package/build-module/hooks/duotone.js +28 -5
  304. package/build-module/hooks/duotone.js.map +1 -1
  305. package/build-module/hooks/index.native.js +1 -0
  306. package/build-module/hooks/index.native.js.map +1 -1
  307. package/build-module/hooks/layout.js +2 -2
  308. package/build-module/hooks/layout.js.map +1 -1
  309. package/build-module/hooks/position.js +1 -1
  310. package/build-module/hooks/position.js.map +1 -1
  311. package/build-module/hooks/style.js +1 -1
  312. package/build-module/hooks/style.js.map +1 -1
  313. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  314. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  315. package/build-module/hooks/use-typography-props.js +14 -10
  316. package/build-module/hooks/use-typography-props.js.map +1 -1
  317. package/build-module/hooks/utils.js +16 -4
  318. package/build-module/hooks/utils.js.map +1 -1
  319. package/build-module/index.native.js +6 -0
  320. package/build-module/index.native.js.map +1 -0
  321. package/build-module/private-apis.js +7 -1
  322. package/build-module/private-apis.js.map +1 -1
  323. package/build-module/store/actions.js +7 -0
  324. package/build-module/store/actions.js.map +1 -1
  325. package/build-module/utils/object.js +4 -4
  326. package/build-module/utils/object.js.map +1 -1
  327. package/build-module/utils/transform-styles/index.js +2 -2
  328. package/build-module/utils/transform-styles/index.js.map +1 -1
  329. package/build-module/utils/use-should-contextual-toolbar-show.js +60 -0
  330. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -0
  331. package/build-style/content-rtl.css +9 -7
  332. package/build-style/content.css +9 -7
  333. package/build-style/style-rtl.css +257 -56
  334. package/build-style/style.css +257 -56
  335. package/package.json +32 -32
  336. package/src/components/block-breadcrumb/style.scss +2 -1
  337. package/src/components/block-controls/slot.js +8 -4
  338. package/src/components/block-controls/slot.native.js +6 -1
  339. package/src/components/block-draggable/index.js +10 -6
  340. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  341. package/src/components/block-info-slot-fill/index.js +24 -0
  342. package/src/components/block-inspector/index.js +3 -0
  343. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  344. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  345. package/src/components/block-list/block-list-item.native.js +180 -208
  346. package/src/components/block-list/block-outline.native.js +58 -0
  347. package/src/components/block-list/block.native.js +564 -524
  348. package/src/components/block-list/content.scss +16 -16
  349. package/src/components/block-list/index.native.js +229 -298
  350. package/src/components/block-list/insertion-point.native.js +2 -2
  351. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  352. package/src/components/block-list/test/index.native.js +205 -0
  353. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -1
  354. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +9 -9
  355. package/src/components/block-mover/style.scss +10 -4
  356. package/src/components/block-mover/test/index.native.js +4 -4
  357. package/src/components/block-pattern-setup/style.scss +1 -4
  358. package/src/components/block-patterns-list/style.scss +1 -4
  359. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  360. package/src/components/block-settings-menu-controls/index.js +24 -4
  361. package/src/components/block-styles/style.scss +4 -4
  362. package/src/components/block-toolbar/index.js +4 -3
  363. package/src/components/block-toolbar/style.scss +56 -33
  364. package/src/components/block-tools/block-contextual-toolbar.js +64 -15
  365. package/src/components/block-tools/selected-block-popover.js +11 -46
  366. package/src/components/block-tools/style.scss +165 -3
  367. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  368. package/src/components/editor-styles/index.js +9 -5
  369. package/src/components/font-sizes/fluid-utils.js +31 -14
  370. package/src/components/font-sizes/test/fluid-utils.js +5 -16
  371. package/src/components/global-styles/advanced-panel.js +82 -0
  372. package/src/components/global-styles/border-panel.js +1 -30
  373. package/src/components/global-styles/color-panel.js +19 -14
  374. package/src/components/global-styles/color-panel.native.js +207 -0
  375. package/src/components/global-styles/dimensions-panel.js +23 -13
  376. package/src/components/global-styles/effects-panel.js +2 -2
  377. package/src/components/global-styles/filters-panel.js +90 -17
  378. package/src/components/global-styles/hooks.js +1 -5
  379. package/src/components/global-styles/index.js +6 -1
  380. package/src/components/global-styles/style.scss +16 -1
  381. package/src/components/global-styles/test/typography-utils.js +63 -22
  382. package/src/components/global-styles/test/use-global-styles-output.js +126 -4
  383. package/src/components/global-styles/test/utils.js +57 -1
  384. package/src/components/global-styles/typography-panel.js +38 -12
  385. package/src/components/global-styles/use-global-styles-output.js +85 -67
  386. package/src/components/global-styles/utils.js +27 -0
  387. package/src/components/image-editor/use-save-image.js +20 -9
  388. package/src/components/index.js +1 -0
  389. package/src/components/inserter/block-types-tab.js +9 -6
  390. package/src/components/inserter/index.js +1 -1
  391. package/src/components/inserter-draggable-blocks/index.js +4 -0
  392. package/src/components/inspector-controls/fill.js +1 -1
  393. package/src/components/inspector-controls/fill.native.js +1 -1
  394. package/src/components/inspector-controls/groups.js +2 -0
  395. package/src/components/inspector-controls/slot.js +4 -9
  396. package/src/components/inspector-controls/slot.native.js +1 -1
  397. package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
  398. package/src/components/line-height-control/index.js +7 -2
  399. package/src/components/line-height-control/stories/index.js +1 -1
  400. package/src/components/link-control/test/index.js +42 -0
  401. package/src/components/link-control/use-internal-input-value.js +8 -7
  402. package/src/components/list-view/block-contents.js +26 -20
  403. package/src/components/list-view/block-select-button.js +11 -2
  404. package/src/components/list-view/block.js +28 -33
  405. package/src/components/list-view/drop-indicator.js +67 -22
  406. package/src/components/list-view/index.js +33 -14
  407. package/src/components/list-view/leaf.js +1 -0
  408. package/src/components/list-view/style.scss +18 -3
  409. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  410. package/src/components/list-view/use-block-selection.js +1 -1
  411. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  412. package/src/components/media-placeholder/index.js +74 -1
  413. package/src/components/media-replace-flow/README.md +3 -2
  414. package/src/components/media-replace-flow/index.js +4 -5
  415. package/src/components/multi-selection-inspector/index.js +2 -2
  416. package/src/components/navigable-toolbar/index.js +12 -3
  417. package/src/components/off-canvas-editor/appender.js +1 -4
  418. package/src/components/off-canvas-editor/leaf-more-menu.js +2 -1
  419. package/src/components/preview-options/index.js +9 -2
  420. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  421. package/src/components/url-input/index.js +1 -2
  422. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -3
  423. package/src/hooks/align.js +2 -1
  424. package/src/hooks/border.js +2 -1
  425. package/src/hooks/color.js +2 -1
  426. package/src/hooks/content-lock-ui.js +3 -15
  427. package/src/hooks/duotone.js +47 -25
  428. package/src/hooks/index.native.js +1 -0
  429. package/src/hooks/layout.js +4 -2
  430. package/src/hooks/position.js +2 -1
  431. package/src/hooks/style.js +2 -1
  432. package/src/hooks/test/anchor.js +113 -0
  433. package/src/hooks/test/color.js +0 -9
  434. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  435. package/src/hooks/test/use-typography-props.js +49 -4
  436. package/src/hooks/test/utils.js +20 -101
  437. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  438. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  439. package/src/hooks/use-typography-props.js +10 -11
  440. package/src/hooks/utils.js +20 -3
  441. package/src/index.native.js +6 -0
  442. package/src/private-apis.js +6 -0
  443. package/src/store/actions.js +7 -0
  444. package/src/utils/object.js +4 -4
  445. package/src/utils/test/object.js +21 -21
  446. package/src/utils/transform-styles/index.js +2 -2
  447. package/src/utils/use-should-contextual-toolbar-show.js +85 -0
  448. package/tsconfig.json +2 -0
  449. package/tsconfig.tsbuildinfo +1 -1
  450. package/build/hooks/color-panel.native.js +0 -77
  451. package/build/hooks/color-panel.native.js.map +0 -1
  452. package/build-module/hooks/color-panel.native.js +0 -62
  453. package/build-module/hooks/color-panel.native.js.map +0 -1
  454. package/src/hooks/color-panel.native.js +0 -63
@@ -1,357 +1,396 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import { createElement } from "@wordpress/element";
3
2
 
4
3
  /**
5
4
  * External dependencies
6
5
  */
7
- import { View, Text, TouchableWithoutFeedback, Dimensions } from 'react-native';
6
+ import { Pressable, useWindowDimensions, View } from 'react-native';
8
7
  /**
9
8
  * WordPress dependencies
10
9
  */
11
10
 
12
- import { Component, createRef, useMemo } from '@wordpress/element';
11
+ import { useCallback, useMemo, useRef, useState } from '@wordpress/element';
13
12
  import { GlobalStylesContext, getMergedGlobalStyles, useMobileGlobalStylesColors, alignmentHelpers, useGlobalStyles } from '@wordpress/components';
14
- import { withDispatch, withSelect } from '@wordpress/data';
15
- import { compose, withPreferredColorScheme } from '@wordpress/compose';
16
- import { getBlockType, __experimentalGetAccessibleBlockLabel as getAccessibleBlockLabel, switchToBlockType, getDefaultBlockName, isUnmodifiedBlock } from '@wordpress/blocks';
17
- import { useSetting } from '@wordpress/block-editor';
13
+ import { __experimentalGetAccessibleBlockLabel as getAccessibleBlockLabel, getBlockType, getDefaultBlockName, isUnmodifiedBlock, isUnmodifiedDefaultBlock, switchToBlockType } from '@wordpress/blocks';
14
+ import { useDispatch, useSelect, withDispatch, withSelect } from '@wordpress/data';
15
+ import { compose, ifCondition, pure } from '@wordpress/compose';
18
16
  /**
19
17
  * Internal dependencies
20
18
  */
21
19
 
22
- import styles from './block.scss';
23
20
  import BlockEdit from '../block-edit';
21
+ import BlockDraggable from '../block-draggable';
24
22
  import BlockInvalidWarning from './block-invalid-warning';
25
23
  import BlockMobileToolbar from '../block-mobile-toolbar';
24
+ import BlockOutline from './block-outline';
25
+ import styles from './block.scss';
26
26
  import { store as blockEditorStore } from '../../store';
27
- import BlockDraggable from '../block-draggable';
28
27
  import { useLayout } from './layout';
29
- const emptyArray = [];
28
+ import useSetting from '../use-setting';
29
+ const emptyArray = []; // Helper function to memoize the wrapperProps since getEditWrapperProps always returns a new reference.
30
+
31
+ const wrapperPropsCache = new WeakMap();
32
+ const emptyObj = {};
33
+
34
+ function getWrapperProps(value, getWrapperPropsFunction) {
35
+ if (!getWrapperPropsFunction) {
36
+ return emptyObj;
37
+ }
30
38
 
31
- function BlockForType(_ref) {
39
+ const cachedValue = wrapperPropsCache.get(value);
40
+
41
+ if (!cachedValue) {
42
+ const wrapperProps = getWrapperPropsFunction(value);
43
+ wrapperPropsCache.set(value, wrapperProps);
44
+ return wrapperProps;
45
+ }
46
+
47
+ return cachedValue;
48
+ }
49
+
50
+ function BlockWrapper(_ref) {
32
51
  let {
33
- attributes,
52
+ accessibilityLabel,
53
+ align,
54
+ blockWidth,
55
+ children,
34
56
  clientId,
35
- contentStyle,
36
- getBlockWidth,
37
- insertBlocksAfter,
57
+ draggingClientId,
58
+ draggingEnabled,
59
+ isDescendentBlockSelected,
60
+ isParentSelected,
38
61
  isSelected,
39
- onMerge,
40
- name,
41
- onBlockFocus,
42
- onChange,
62
+ isStackedHorizontally,
63
+ isTouchable,
64
+ marginHorizontal,
65
+ marginVertical,
43
66
  onDeleteBlock,
44
- onReplace,
45
- parentWidth,
46
- parentBlockAlignment,
47
- wrapperProps,
48
- blockWidth,
49
- baseGlobalStyles
67
+ onFocus
50
68
  } = _ref;
51
- const defaultColors = useMobileGlobalStylesColors();
52
- const fontSizes = useSetting('typography.fontSizes') || emptyArray;
53
- const globalStyle = useGlobalStyles();
54
- const mergedStyle = useMemo(() => {
55
- return getMergedGlobalStyles(baseGlobalStyles, globalStyle, wrapperProps.style, attributes, defaultColors, name, fontSizes);
56
- }, [defaultColors, globalStyle, // I couldn't simply use attributes and wrapperProps.styles as a dependency because they are almost always a new reference.
57
- // Thanks to the JSON.stringify we check if the value is the same instead of reference.
58
- JSON.stringify(wrapperProps.style), JSON.stringify(Object.fromEntries(Object.entries(attributes !== null && attributes !== void 0 ? attributes : {}).filter(_ref2 => {
59
- let [key] = _ref2;
60
- return GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes(key);
61
- })))]);
62
- const parentLayout = useLayout();
63
- return createElement(GlobalStylesContext.Provider, {
64
- value: mergedStyle
65
- }, createElement(BlockEdit, {
66
- name: name,
69
+ const {
70
+ width: screenWidth
71
+ } = useWindowDimensions();
72
+ const anchorNodeRef = useRef();
73
+ const {
74
+ isFullWidth
75
+ } = alignmentHelpers;
76
+ const isScreenWidthEqual = blockWidth === screenWidth;
77
+ const isFullWidthToolbar = isFullWidth(align) || isScreenWidthEqual;
78
+ const blockWrapperStyles = {
79
+ flex: 1
80
+ };
81
+ const blockWrapperStyle = [blockWrapperStyles, {
82
+ marginVertical,
83
+ marginHorizontal
84
+ }];
85
+ const accessible = !(isSelected || isDescendentBlockSelected);
86
+ return createElement(Pressable, {
87
+ accessibilityLabel: accessibilityLabel,
88
+ accessibilityRole: "button",
89
+ accessible: accessible,
90
+ disabled: !isTouchable,
91
+ onPress: onFocus,
92
+ style: blockWrapperStyle
93
+ }, createElement(BlockOutline, {
67
94
  isSelected: isSelected,
68
- attributes: attributes,
69
- setAttributes: onChange,
70
- onFocus: onBlockFocus,
71
- onReplace: onReplace,
72
- insertBlocksAfter: insertBlocksAfter,
73
- mergeBlocks: onMerge // Block level styles.
74
- ,
75
- wrapperProps: wrapperProps // Inherited styles merged with block level styles.
76
- ,
77
- style: mergedStyle,
95
+ isParentSelected: isParentSelected,
96
+ screenWidth: screenWidth
97
+ }), createElement(BlockDraggable, {
78
98
  clientId: clientId,
79
- parentWidth: parentWidth,
80
- contentStyle: contentStyle,
81
- onDeleteBlock: onDeleteBlock,
99
+ draggingClientId: draggingClientId,
100
+ enabled: draggingEnabled,
101
+ testID: "draggable-trigger-content"
102
+ }, children), createElement(View, {
103
+ style: styles.neutralToolbar,
104
+ ref: anchorNodeRef
105
+ }, isSelected && createElement(BlockMobileToolbar, {
106
+ anchorNodeRef: anchorNodeRef.current,
82
107
  blockWidth: blockWidth,
83
- parentBlockAlignment: parentBlockAlignment,
84
- __unstableParentLayout: parentLayout
85
- }), createElement(View, {
86
- onLayout: getBlockWidth
87
- }));
108
+ clientId: clientId,
109
+ draggingClientId: draggingClientId,
110
+ isFullWidth: isFullWidthToolbar,
111
+ isStackedHorizontally: isStackedHorizontally,
112
+ onDelete: onDeleteBlock
113
+ })));
88
114
  }
89
115
 
90
- class BlockListBlock extends Component {
91
- constructor() {
92
- super(...arguments);
93
- this.insertBlocksAfter = this.insertBlocksAfter.bind(this);
94
- this.onFocus = this.onFocus.bind(this);
95
- this.getBlockWidth = this.getBlockWidth.bind(this);
96
- this.state = {
97
- blockWidth: this.props.blockWidth - 2 * this.props.marginHorizontal
98
- };
99
- this.anchorNodeRef = createRef();
100
- }
116
+ function BlockListBlock(_ref2) {
117
+ let {
118
+ attributes,
119
+ blockWidth: blockWrapperWidth,
120
+ canRemove,
121
+ clientId,
122
+ contentStyle,
123
+ isLocked,
124
+ isSelected,
125
+ isSelectionEnabled,
126
+ isStackedHorizontally,
127
+ isValid,
128
+ marginHorizontal,
129
+ marginVertical,
130
+ name,
131
+ onDeleteBlock,
132
+ onInsertBlocksAfter,
133
+ onMerge,
134
+ onReplace,
135
+ parentBlockAlignment,
136
+ parentWidth,
137
+ rootClientId,
138
+ setAttributes,
139
+ toggleSelection
140
+ } = _ref2;
141
+ const {
142
+ baseGlobalStyles,
143
+ blockType,
144
+ draggingClientId,
145
+ draggingEnabled,
146
+ firstToSelectId,
147
+ isDescendantOfParentSelected,
148
+ isDescendentBlockSelected,
149
+ isParentSelected,
150
+ order
151
+ } = useSelect(select => {
152
+ var _getSettings;
101
153
 
102
- onFocus() {
103
154
  const {
104
- firstToSelectId,
105
- isSelected,
106
- onSelect
107
- } = this.props;
155
+ getBlockCount,
156
+ getBlockHierarchyRootClientId,
157
+ getBlockIndex,
158
+ getBlockParents,
159
+ getLowestCommonAncestorWithSelectedBlock,
160
+ getSelectedBlockClientId,
161
+ getSettings,
162
+ hasSelectedInnerBlock
163
+ } = select(blockEditorStore);
164
+ const currentBlockType = getBlockType(name || 'core/missing');
165
+ const blockOrder = getBlockIndex(clientId);
166
+ const descendentBlockSelected = hasSelectedInnerBlock(clientId, true);
167
+ const selectedBlockClientId = getSelectedBlockClientId();
168
+ const parents = getBlockParents(clientId, true);
169
+ const parentSelected = // Set false as a default value to prevent re-render when it's changed from null to false.
170
+ (selectedBlockClientId || false) && selectedBlockClientId === rootClientId;
171
+ const selectedParents = clientId ? parents : [];
172
+ const descendantOfParentSelected = selectedParents.includes(rootClientId);
173
+ const hasInnerBlocks = getBlockCount(clientId) > 0;
174
+ const commonAncestor = getLowestCommonAncestorWithSelectedBlock(clientId);
175
+ const commonAncestorIndex = parents.indexOf(commonAncestor) - 1;
176
+ const firstBlockToSelectId = commonAncestor ? parents[commonAncestorIndex] : parents[parents.length - 1]; // For blocks with inner blocks, we only enable the dragging in the nested
177
+ // blocks if any of them are selected. This way we prevent the long-press
178
+ // gesture from being disabled for elements within the block UI.
179
+
180
+ const isDraggingEnabled = !hasInnerBlocks || isSelected || !descendentBlockSelected; // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
181
+ // will be the top in the hierarchy.
182
+
183
+ const currentDraggingClientId = getBlockHierarchyRootClientId(clientId);
184
+ const globalStylesBaseStyles = (_getSettings = getSettings()) === null || _getSettings === void 0 ? void 0 : _getSettings.__experimentalGlobalStylesBaseStyles;
185
+ return {
186
+ baseGlobalStyles: globalStylesBaseStyles,
187
+ blockType: currentBlockType,
188
+ draggingClientId: currentDraggingClientId,
189
+ draggingEnabled: isDraggingEnabled,
190
+ firstToSelectId: firstBlockToSelectId,
191
+ isDescendantOfParentSelected: descendantOfParentSelected,
192
+ isDescendentBlockSelected: descendentBlockSelected,
193
+ isParentSelected: parentSelected,
194
+ order: blockOrder
195
+ };
196
+ }, [clientId, isSelected, name, rootClientId]);
197
+ const {
198
+ removeBlock,
199
+ selectBlock
200
+ } = useDispatch(blockEditorStore);
201
+ const initialBlockWidth = blockWrapperWidth - 2 * marginHorizontal;
202
+ const [blockWidth, setBlockWidth] = useState(initialBlockWidth);
203
+ const parentLayout = useLayout() || {};
204
+ const defaultColors = useMobileGlobalStylesColors();
205
+ const globalStyle = useGlobalStyles();
206
+ const fontSizes = useSetting('typography.fontSizes') || emptyArray;
207
+ const onRemove = useCallback(() => removeBlock(clientId), [clientId, removeBlock]);
208
+ const onFocus = useCallback(() => {
209
+ const blockId = firstToSelectId !== null && firstToSelectId !== void 0 ? firstToSelectId : clientId;
108
210
 
109
211
  if (!isSelected) {
110
- onSelect(firstToSelectId);
212
+ selectBlock(blockId);
111
213
  }
112
- }
113
-
114
- insertBlocksAfter(blocks) {
115
- this.props.onInsertBlocks(blocks, this.props.order + 1);
116
-
117
- if (blocks[0]) {
118
- // Focus on the first block inserted.
119
- this.props.onSelect(blocks[0].clientId);
120
- }
121
- }
122
-
123
- getBlockWidth(_ref3) {
214
+ }, [selectBlock, clientId, firstToSelectId, isSelected]);
215
+ const onLayout = useCallback(_ref3 => {
124
216
  let {
125
217
  nativeEvent
126
218
  } = _ref3;
127
- const {
128
- layout
129
- } = nativeEvent;
130
- const {
131
- blockWidth
132
- } = this.state;
133
- const layoutWidth = Math.floor(layout.width);
219
+ const layoutWidth = Math.floor(nativeEvent.layout.width);
134
220
 
135
221
  if (!blockWidth || !layoutWidth) {
136
222
  return;
137
223
  }
138
224
 
139
225
  if (blockWidth !== layoutWidth) {
140
- this.setState({
141
- blockWidth: layoutWidth
142
- });
143
- }
144
- }
145
-
146
- getBlockForType() {
147
- const {
148
- blockWidth
149
- } = this.state;
150
- return createElement(BlockForType, _extends({}, this.props, {
151
- onBlockFocus: this.onFocus,
152
- insertBlocksAfter: this.insertBlocksAfter,
153
- getBlockWidth: this.getBlockWidth,
154
- blockWidth: blockWidth
155
- }));
156
- }
157
-
158
- renderBlockTitle() {
159
- return createElement(View, {
160
- style: styles.blockTitle
161
- }, createElement(Text, null, "BlockType: ", this.props.name));
162
- }
163
-
164
- render() {
165
- const {
166
- attributes,
167
- blockType,
168
- clientId,
169
- icon,
170
- isSelected,
171
- isValid,
172
- order,
173
- title,
174
- isDimmed,
175
- isTouchable,
176
- onDeleteBlock,
177
- isStackedHorizontally,
178
- isParentSelected,
179
- getStylesFromColorScheme,
180
- marginVertical,
181
- marginHorizontal,
182
- isInnerBlockSelected,
183
- name,
184
- draggingEnabled,
185
- draggingClientId
186
- } = this.props;
187
-
188
- if (!attributes || !blockType) {
189
- return null;
226
+ setBlockWidth(layoutWidth);
190
227
  }
228
+ }, [blockWidth, setBlockWidth]); // Block level styles.
191
229
 
192
- const {
193
- blockWidth
194
- } = this.state;
195
- const {
196
- align
197
- } = attributes;
198
- const accessibilityLabel = getAccessibleBlockLabel(blockType, attributes, order + 1);
199
- const {
200
- isFullWidth,
201
- isContainerRelated
202
- } = alignmentHelpers;
203
- const isFocused = isSelected || isInnerBlockSelected;
204
- const screenWidth = Math.floor(Dimensions.get('window').width);
205
- const isScreenWidthEqual = blockWidth === screenWidth;
206
- const isScreenWidthWider = blockWidth < screenWidth;
207
- const isFullWidthToolbar = isFullWidth(align) || isScreenWidthEqual;
208
- return createElement(TouchableWithoutFeedback, {
209
- onPress: this.onFocus,
210
- accessible: !isFocused,
211
- accessibilityRole: 'button',
212
- disabled: isFocused
213
- }, createElement(View, {
214
- style: {
215
- flex: 1
216
- },
217
- accessibilityLabel: accessibilityLabel
218
- }, createElement(View, {
219
- pointerEvents: isTouchable ? 'auto' : 'box-only',
220
- accessibilityLabel: accessibilityLabel,
221
- style: [{
222
- marginVertical,
223
- marginHorizontal,
224
- flex: 1
225
- }, isDimmed && styles.dimmed]
226
- }, isSelected && createElement(View, {
227
- pointerEvents: "box-none",
228
- style: [styles.solidBorder, isFullWidth(align) && isScreenWidthWider && styles.borderFullWidth, isFullWidth(align) && isContainerRelated(name) && isScreenWidthWider && styles.containerBorderFullWidth, getStylesFromColorScheme(styles.solidBorderColor, styles.solidBorderColorDark)]
229
- }), isParentSelected && createElement(View, {
230
- style: [styles.dashedBorder, getStylesFromColorScheme(styles.dashedBorderColor, styles.dashedBorderColorDark)]
231
- }), createElement(BlockDraggable, {
232
- clientId: clientId,
233
- draggingClientId: draggingClientId,
234
- enabled: draggingEnabled,
235
- testID: "draggable-trigger-content"
236
- }, () => isValid ? this.getBlockForType() : createElement(BlockInvalidWarning, {
237
- blockTitle: title,
238
- icon: icon,
239
- clientId: clientId
240
- })), createElement(View, {
241
- style: styles.neutralToolbar,
242
- ref: this.anchorNodeRef
243
- }, isSelected && createElement(BlockMobileToolbar, {
244
- clientId: clientId,
245
- onDelete: onDeleteBlock,
246
- isStackedHorizontally: isStackedHorizontally,
247
- blockWidth: blockWidth,
248
- anchorNodeRef: this.anchorNodeRef.current,
249
- isFullWidth: isFullWidthToolbar,
250
- draggingClientId: draggingClientId
251
- })))));
252
- }
253
-
254
- } // Helper function to memoize the wrapperProps since getEditWrapperProps always returns a new reference.
255
-
230
+ const wrapperProps = getWrapperProps(attributes, blockType.getEditWrapperProps); // Inherited styles merged with block level styles.
256
231
 
257
- const wrapperPropsCache = new WeakMap();
258
- const emptyObj = {};
259
-
260
- function getWrapperProps(value, getWrapperPropsFunction) {
261
- if (!getWrapperPropsFunction) {
262
- return emptyObj;
263
- }
264
-
265
- const cachedValue = wrapperPropsCache.get(value);
266
-
267
- if (!cachedValue) {
268
- const wrapperProps = getWrapperPropsFunction(value);
269
- wrapperPropsCache.set(value, wrapperProps);
270
- return wrapperProps;
271
- }
272
-
273
- return cachedValue;
232
+ const mergedStyle = useMemo(() => {
233
+ return getMergedGlobalStyles(baseGlobalStyles, globalStyle, wrapperProps.style, attributes, defaultColors, name, fontSizes); // eslint-disable-next-line react-hooks/exhaustive-deps
234
+ }, [// It is crucial to keep the dependencies array minimal to prevent unnecessary calls that could negatively impact performance.
235
+ // JSON.stringify is used for the following purposes:
236
+ // 1. To create a single, comparable value from the globalStyle, wrapperProps.style, and attributes objects. This allows useMemo to
237
+ // efficiently determine if a change has occurred in any of these objects.
238
+ // 2. To filter the attributes object, ensuring that only the relevant attributes (included in
239
+ // GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES) are considered as dependencies. This reduces the likelihood of
240
+ // unnecessary useMemo calls when other, unrelated attributes change.
241
+ // eslint-disable-next-line react-hooks/exhaustive-deps
242
+ JSON.stringify(globalStyle), // eslint-disable-next-line react-hooks/exhaustive-deps
243
+ JSON.stringify(wrapperProps.style), // eslint-disable-next-line react-hooks/exhaustive-deps
244
+ JSON.stringify(Object.fromEntries(Object.entries(attributes !== null && attributes !== void 0 ? attributes : {}).filter(_ref4 => {
245
+ let [key] = _ref4;
246
+ return GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes(key);
247
+ })))]);
248
+ const {
249
+ align
250
+ } = attributes;
251
+ const isFocused = isSelected || isDescendentBlockSelected;
252
+ const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || !rootClientId;
253
+ const accessibilityLabel = getAccessibleBlockLabel(blockType, attributes, order + 1);
254
+ return createElement(BlockWrapper, {
255
+ accessibilityLabel: accessibilityLabel,
256
+ align: align,
257
+ blockWidth: blockWidth,
258
+ clientId: clientId,
259
+ draggingClientId: draggingClientId,
260
+ draggingEnabled: draggingEnabled,
261
+ isFocused: isFocused,
262
+ isDescendentBlockSelected: isDescendentBlockSelected,
263
+ isParentSelected: isParentSelected,
264
+ isSelected: isSelected,
265
+ isStackedHorizontally: isStackedHorizontally,
266
+ isTouchable: isTouchable,
267
+ marginHorizontal: marginHorizontal,
268
+ marginVertical: marginVertical,
269
+ onDeleteBlock: onDeleteBlock,
270
+ onFocus: onFocus
271
+ }, () => !isValid ? createElement(BlockInvalidWarning, {
272
+ clientId: clientId
273
+ }) : createElement(GlobalStylesContext.Provider, {
274
+ value: mergedStyle
275
+ }, createElement(BlockEdit, {
276
+ attributes: attributes,
277
+ blockWidth: blockWidth,
278
+ clientId: clientId,
279
+ contentStyle: contentStyle,
280
+ insertBlocksAfter: isLocked ? undefined : onInsertBlocksAfter,
281
+ isSelected: isSelected,
282
+ isSelectionEnabled: isSelectionEnabled,
283
+ mergeBlocks: canRemove ? onMerge : undefined,
284
+ name: name,
285
+ onFocus: onFocus,
286
+ onRemove: canRemove ? onRemove : undefined,
287
+ onReplace: canRemove ? onReplace : undefined,
288
+ parentBlockAlignment: parentBlockAlignment,
289
+ parentWidth: parentWidth,
290
+ setAttributes: setAttributes,
291
+ style: mergedStyle,
292
+ toggleSelection: toggleSelection,
293
+ __unstableParentLayout: Object.keys(parentLayout).length ? parentLayout : undefined,
294
+ wrapperProps: wrapperProps
295
+ }), createElement(View, {
296
+ onLayout: onLayout
297
+ })));
274
298
  }
275
299
 
276
- export default compose([withSelect((select, _ref4) => {
277
- var _getSettings;
278
-
300
+ const applyWithSelect = withSelect((select, _ref5) => {
279
301
  let {
280
- clientId
281
- } = _ref4;
302
+ clientId,
303
+ rootClientId
304
+ } = _ref5;
282
305
  const {
283
- getBlockIndex,
284
- getBlockCount,
285
- getSettings,
286
306
  isBlockSelected,
287
- getBlock,
288
- getSelectedBlockClientId,
289
- getLowestCommonAncestorWithSelectedBlock,
290
- getBlockParents,
291
- hasSelectedInnerBlock,
292
- getBlockHierarchyRootClientId
307
+ getBlockMode,
308
+ isSelectionEnabled,
309
+ getTemplateLock,
310
+ __unstableGetBlockWithoutInnerBlocks,
311
+ canRemoveBlock,
312
+ canMoveBlock
293
313
  } = select(blockEditorStore);
294
- const order = getBlockIndex(clientId);
314
+
315
+ const block = __unstableGetBlockWithoutInnerBlocks(clientId);
316
+
295
317
  const isSelected = isBlockSelected(clientId);
296
- const isInnerBlockSelected = hasSelectedInnerBlock(clientId);
297
- const block = getBlock(clientId);
318
+ const templateLock = getTemplateLock(rootClientId);
319
+ const canRemove = canRemoveBlock(clientId, rootClientId);
320
+ const canMove = canMoveBlock(clientId, rootClientId); // The fallback to `{}` is a temporary fix.
321
+ // This function should never be called when a block is not present in
322
+ // the state. It happens now because the order in withSelect rendering
323
+ // is not correct.
324
+
298
325
  const {
299
326
  name,
300
327
  attributes,
301
328
  isValid
302
- } = block || {};
303
- const blockType = getBlockType(name || 'core/missing');
304
- const title = blockType === null || blockType === void 0 ? void 0 : blockType.title;
305
- const icon = blockType === null || blockType === void 0 ? void 0 : blockType.icon;
306
- const parents = getBlockParents(clientId, true);
307
- const parentId = parents[0] || '';
308
- const selectedBlockClientId = getSelectedBlockClientId();
309
- const commonAncestor = getLowestCommonAncestorWithSelectedBlock(clientId);
310
- const commonAncestorIndex = parents.indexOf(commonAncestor) - 1;
311
- const firstToSelectId = commonAncestor ? parents[commonAncestorIndex] : parents[parents.length - 1];
312
- const isParentSelected = // Set false as a default value to prevent re-render when it's changed from null to false.
313
- (selectedBlockClientId || false) && selectedBlockClientId === parentId;
314
- const selectedParents = selectedBlockClientId ? getBlockParents(selectedBlockClientId) : [];
315
- const isDescendantOfParentSelected = selectedParents.includes(parentId);
316
- const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
317
- const baseGlobalStyles = (_getSettings = getSettings()) === null || _getSettings === void 0 ? void 0 : _getSettings.__experimentalGlobalStylesBaseStyles;
318
- const hasInnerBlocks = getBlockCount(clientId) > 0; // For blocks with inner blocks, we only enable the dragging in the nested
319
- // blocks if any of them are selected. This way we prevent the long-press
320
- // gesture from being disabled for elements within the block UI.
321
-
322
- const draggingEnabled = !hasInnerBlocks || isSelected || !hasSelectedInnerBlock(clientId, true); // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
323
- // will be the top in the hierarchy.
324
-
325
- const draggingClientId = getBlockHierarchyRootClientId(clientId);
329
+ } = block || {}; // Do not add new properties here, use `useSelect` instead to avoid
330
+ // leaking new props to the public API (editor.BlockListBlock filter).
331
+
326
332
  return {
327
- icon,
328
- name: name || 'core/missing',
329
- order,
330
- title,
333
+ mode: getBlockMode(clientId),
334
+ isSelectionEnabled: isSelectionEnabled(),
335
+ isLocked: !!templateLock,
336
+ canRemove,
337
+ canMove,
338
+ // Users of the editor.BlockListBlock filter used to be able to
339
+ // access the block prop.
340
+ // Ideally these blocks would rely on the clientId prop only.
341
+ // This is kept for backward compatibility reasons.
342
+ block,
343
+ name,
331
344
  attributes,
332
- blockType,
333
- draggingClientId,
334
- draggingEnabled,
335
- isSelected,
336
- isInnerBlockSelected,
337
345
  isValid,
338
- isParentSelected,
339
- firstToSelectId,
340
- isTouchable,
341
- baseGlobalStyles,
342
- wrapperProps: getWrapperProps(attributes, blockType.getEditWrapperProps)
346
+ isSelected
343
347
  };
344
- }), withDispatch((dispatch, ownProps, registry) => {
348
+ });
349
+ const applyWithDispatch = withDispatch((dispatch, ownProps, registry) => {
345
350
  const {
351
+ updateBlockAttributes,
346
352
  insertBlocks,
347
353
  mergeBlocks,
348
354
  replaceBlocks,
349
- selectBlock,
350
- updateBlockAttributes,
355
+ toggleSelection,
356
+ __unstableMarkLastChangeAsPersistent,
351
357
  moveBlocksToPosition,
352
358
  removeBlock
353
- } = dispatch(blockEditorStore);
359
+ } = dispatch(blockEditorStore); // Do not add new properties here, use `useDispatch` instead to avoid
360
+ // leaking new props to the public API (editor.BlockListBlock filter).
361
+
354
362
  return {
363
+ setAttributes(newAttributes) {
364
+ const {
365
+ getMultiSelectedBlockClientIds
366
+ } = registry.select(blockEditorStore);
367
+ const multiSelectedBlockClientIds = getMultiSelectedBlockClientIds();
368
+ const {
369
+ clientId
370
+ } = ownProps;
371
+ const clientIds = multiSelectedBlockClientIds.length ? multiSelectedBlockClientIds : [clientId];
372
+ updateBlockAttributes(clientIds, newAttributes);
373
+ },
374
+
375
+ onInsertBlocks(blocks, index) {
376
+ const {
377
+ rootClientId
378
+ } = ownProps;
379
+ insertBlocks(blocks, index, rootClientId);
380
+ },
381
+
382
+ onInsertBlocksAfter(blocks) {
383
+ const {
384
+ clientId,
385
+ rootClientId
386
+ } = ownProps;
387
+ const {
388
+ getBlockIndex
389
+ } = registry.select(blockEditorStore);
390
+ const index = getBlockIndex(clientId);
391
+ insertBlocks(blocks, index + 1, rootClientId);
392
+ },
393
+
355
394
  onMerge(forward) {
356
395
  const {
357
396
  clientId,
@@ -472,24 +511,27 @@ export default compose([withSelect((select, _ref4) => {
472
511
  }
473
512
  },
474
513
 
475
- onInsertBlocks(blocks, index) {
476
- insertBlocks(blocks, index, ownProps.rootClientId);
477
- },
478
-
479
- onSelect() {
480
- let clientId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ownProps.clientId;
481
- let initialPosition = arguments.length > 1 ? arguments[1] : undefined;
482
- selectBlock(clientId, initialPosition);
483
- },
514
+ onReplace(blocks, indexToSelect, initialPosition) {
515
+ if (blocks.length && !isUnmodifiedDefaultBlock(blocks[blocks.length - 1])) {
516
+ __unstableMarkLastChangeAsPersistent();
517
+ }
484
518
 
485
- onChange: attributes => {
486
- updateBlockAttributes(ownProps.clientId, attributes);
519
+ replaceBlocks([ownProps.clientId], blocks, indexToSelect, initialPosition);
487
520
  },
488
521
 
489
- onReplace(blocks, indexToSelect) {
490
- replaceBlocks([ownProps.clientId], blocks, indexToSelect);
522
+ toggleSelection(selectionEnabled) {
523
+ toggleSelection(selectionEnabled);
491
524
  }
492
525
 
493
526
  };
494
- }), withPreferredColorScheme])(BlockListBlock);
527
+ });
528
+ export default compose(pure, applyWithSelect, applyWithDispatch, // Block is sometimes not mounted at the right time, causing it be undefined
529
+ // see issue for more info
530
+ // https://github.com/WordPress/gutenberg/issues/17013
531
+ ifCondition(_ref6 => {
532
+ let {
533
+ block
534
+ } = _ref6;
535
+ return !!block;
536
+ }))(BlockListBlock);
495
537
  //# sourceMappingURL=block.native.js.map