@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
@@ -9,34 +9,34 @@ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
12
  var _reactNative = require("react-native");
15
13
 
16
14
  var _components = require("@wordpress/components");
17
15
 
18
- var _data = require("@wordpress/data");
19
-
20
- var _compose = require("@wordpress/compose");
21
-
22
16
  var _blocks = require("@wordpress/blocks");
23
17
 
24
- var _blockEditor = require("@wordpress/block-editor");
18
+ var _data = require("@wordpress/data");
25
19
 
26
- var _block = _interopRequireDefault(require("./block.scss"));
20
+ var _compose = require("@wordpress/compose");
27
21
 
28
22
  var _blockEdit = _interopRequireDefault(require("../block-edit"));
29
23
 
24
+ var _blockDraggable = _interopRequireDefault(require("../block-draggable"));
25
+
30
26
  var _blockInvalidWarning = _interopRequireDefault(require("./block-invalid-warning"));
31
27
 
32
28
  var _blockMobileToolbar = _interopRequireDefault(require("../block-mobile-toolbar"));
33
29
 
34
- var _store = require("../../store");
30
+ var _blockOutline = _interopRequireDefault(require("./block-outline"));
35
31
 
36
- var _blockDraggable = _interopRequireDefault(require("../block-draggable"));
32
+ var _block = _interopRequireDefault(require("./block.scss"));
33
+
34
+ var _store = require("../../store");
37
35
 
38
36
  var _layout = require("./layout");
39
37
 
38
+ var _useSetting = _interopRequireDefault(require("../use-setting"));
39
+
40
40
  /**
41
41
  * External dependencies
42
42
  */
@@ -48,332 +48,371 @@ var _layout = require("./layout");
48
48
  /**
49
49
  * Internal dependencies
50
50
  */
51
- const emptyArray = [];
51
+ const emptyArray = []; // Helper function to memoize the wrapperProps since getEditWrapperProps always returns a new reference.
52
+
53
+ const wrapperPropsCache = new WeakMap();
54
+ const emptyObj = {};
55
+
56
+ function getWrapperProps(value, getWrapperPropsFunction) {
57
+ if (!getWrapperPropsFunction) {
58
+ return emptyObj;
59
+ }
60
+
61
+ const cachedValue = wrapperPropsCache.get(value);
62
+
63
+ if (!cachedValue) {
64
+ const wrapperProps = getWrapperPropsFunction(value);
65
+ wrapperPropsCache.set(value, wrapperProps);
66
+ return wrapperProps;
67
+ }
52
68
 
53
- function BlockForType(_ref) {
69
+ return cachedValue;
70
+ }
71
+
72
+ function BlockWrapper(_ref) {
54
73
  let {
55
- attributes,
74
+ accessibilityLabel,
75
+ align,
76
+ blockWidth,
77
+ children,
56
78
  clientId,
57
- contentStyle,
58
- getBlockWidth,
59
- insertBlocksAfter,
79
+ draggingClientId,
80
+ draggingEnabled,
81
+ isDescendentBlockSelected,
82
+ isParentSelected,
60
83
  isSelected,
61
- onMerge,
62
- name,
63
- onBlockFocus,
64
- onChange,
84
+ isStackedHorizontally,
85
+ isTouchable,
86
+ marginHorizontal,
87
+ marginVertical,
65
88
  onDeleteBlock,
66
- onReplace,
67
- parentWidth,
68
- parentBlockAlignment,
69
- wrapperProps,
70
- blockWidth,
71
- baseGlobalStyles
89
+ onFocus
72
90
  } = _ref;
73
- const defaultColors = (0, _components.useMobileGlobalStylesColors)();
74
- const fontSizes = (0, _blockEditor.useSetting)('typography.fontSizes') || emptyArray;
75
- const globalStyle = (0, _components.useGlobalStyles)();
76
- const mergedStyle = (0, _element.useMemo)(() => {
77
- return (0, _components.getMergedGlobalStyles)(baseGlobalStyles, globalStyle, wrapperProps.style, attributes, defaultColors, name, fontSizes);
78
- }, [defaultColors, globalStyle, // I couldn't simply use attributes and wrapperProps.styles as a dependency because they are almost always a new reference.
79
- // Thanks to the JSON.stringify we check if the value is the same instead of reference.
80
- JSON.stringify(wrapperProps.style), JSON.stringify(Object.fromEntries(Object.entries(attributes !== null && attributes !== void 0 ? attributes : {}).filter(_ref2 => {
81
- let [key] = _ref2;
82
- return _components.GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes(key);
83
- })))]);
84
- const parentLayout = (0, _layout.useLayout)();
85
- return (0, _element.createElement)(_components.GlobalStylesContext.Provider, {
86
- value: mergedStyle
87
- }, (0, _element.createElement)(_blockEdit.default, {
88
- name: name,
91
+ const {
92
+ width: screenWidth
93
+ } = (0, _reactNative.useWindowDimensions)();
94
+ const anchorNodeRef = (0, _element.useRef)();
95
+ const {
96
+ isFullWidth
97
+ } = _components.alignmentHelpers;
98
+ const isScreenWidthEqual = blockWidth === screenWidth;
99
+ const isFullWidthToolbar = isFullWidth(align) || isScreenWidthEqual;
100
+ const blockWrapperStyles = {
101
+ flex: 1
102
+ };
103
+ const blockWrapperStyle = [blockWrapperStyles, {
104
+ marginVertical,
105
+ marginHorizontal
106
+ }];
107
+ const accessible = !(isSelected || isDescendentBlockSelected);
108
+ return (0, _element.createElement)(_reactNative.Pressable, {
109
+ accessibilityLabel: accessibilityLabel,
110
+ accessibilityRole: "button",
111
+ accessible: accessible,
112
+ disabled: !isTouchable,
113
+ onPress: onFocus,
114
+ style: blockWrapperStyle
115
+ }, (0, _element.createElement)(_blockOutline.default, {
89
116
  isSelected: isSelected,
90
- attributes: attributes,
91
- setAttributes: onChange,
92
- onFocus: onBlockFocus,
93
- onReplace: onReplace,
94
- insertBlocksAfter: insertBlocksAfter,
95
- mergeBlocks: onMerge // Block level styles.
96
- ,
97
- wrapperProps: wrapperProps // Inherited styles merged with block level styles.
98
- ,
99
- style: mergedStyle,
117
+ isParentSelected: isParentSelected,
118
+ screenWidth: screenWidth
119
+ }), (0, _element.createElement)(_blockDraggable.default, {
100
120
  clientId: clientId,
101
- parentWidth: parentWidth,
102
- contentStyle: contentStyle,
103
- onDeleteBlock: onDeleteBlock,
121
+ draggingClientId: draggingClientId,
122
+ enabled: draggingEnabled,
123
+ testID: "draggable-trigger-content"
124
+ }, children), (0, _element.createElement)(_reactNative.View, {
125
+ style: _block.default.neutralToolbar,
126
+ ref: anchorNodeRef
127
+ }, isSelected && (0, _element.createElement)(_blockMobileToolbar.default, {
128
+ anchorNodeRef: anchorNodeRef.current,
104
129
  blockWidth: blockWidth,
105
- parentBlockAlignment: parentBlockAlignment,
106
- __unstableParentLayout: parentLayout
107
- }), (0, _element.createElement)(_reactNative.View, {
108
- onLayout: getBlockWidth
109
- }));
130
+ clientId: clientId,
131
+ draggingClientId: draggingClientId,
132
+ isFullWidth: isFullWidthToolbar,
133
+ isStackedHorizontally: isStackedHorizontally,
134
+ onDelete: onDeleteBlock
135
+ })));
110
136
  }
111
137
 
112
- class BlockListBlock extends _element.Component {
113
- constructor() {
114
- super(...arguments);
115
- this.insertBlocksAfter = this.insertBlocksAfter.bind(this);
116
- this.onFocus = this.onFocus.bind(this);
117
- this.getBlockWidth = this.getBlockWidth.bind(this);
118
- this.state = {
119
- blockWidth: this.props.blockWidth - 2 * this.props.marginHorizontal
120
- };
121
- this.anchorNodeRef = (0, _element.createRef)();
122
- }
138
+ function BlockListBlock(_ref2) {
139
+ let {
140
+ attributes,
141
+ blockWidth: blockWrapperWidth,
142
+ canRemove,
143
+ clientId,
144
+ contentStyle,
145
+ isLocked,
146
+ isSelected,
147
+ isSelectionEnabled,
148
+ isStackedHorizontally,
149
+ isValid,
150
+ marginHorizontal,
151
+ marginVertical,
152
+ name,
153
+ onDeleteBlock,
154
+ onInsertBlocksAfter,
155
+ onMerge,
156
+ onReplace,
157
+ parentBlockAlignment,
158
+ parentWidth,
159
+ rootClientId,
160
+ setAttributes,
161
+ toggleSelection
162
+ } = _ref2;
163
+ const {
164
+ baseGlobalStyles,
165
+ blockType,
166
+ draggingClientId,
167
+ draggingEnabled,
168
+ firstToSelectId,
169
+ isDescendantOfParentSelected,
170
+ isDescendentBlockSelected,
171
+ isParentSelected,
172
+ order
173
+ } = (0, _data.useSelect)(select => {
174
+ var _getSettings;
123
175
 
124
- onFocus() {
125
176
  const {
126
- firstToSelectId,
127
- isSelected,
128
- onSelect
129
- } = this.props;
177
+ getBlockCount,
178
+ getBlockHierarchyRootClientId,
179
+ getBlockIndex,
180
+ getBlockParents,
181
+ getLowestCommonAncestorWithSelectedBlock,
182
+ getSelectedBlockClientId,
183
+ getSettings,
184
+ hasSelectedInnerBlock
185
+ } = select(_store.store);
186
+ const currentBlockType = (0, _blocks.getBlockType)(name || 'core/missing');
187
+ const blockOrder = getBlockIndex(clientId);
188
+ const descendentBlockSelected = hasSelectedInnerBlock(clientId, true);
189
+ const selectedBlockClientId = getSelectedBlockClientId();
190
+ const parents = getBlockParents(clientId, true);
191
+ const parentSelected = // Set false as a default value to prevent re-render when it's changed from null to false.
192
+ (selectedBlockClientId || false) && selectedBlockClientId === rootClientId;
193
+ const selectedParents = clientId ? parents : [];
194
+ const descendantOfParentSelected = selectedParents.includes(rootClientId);
195
+ const hasInnerBlocks = getBlockCount(clientId) > 0;
196
+ const commonAncestor = getLowestCommonAncestorWithSelectedBlock(clientId);
197
+ const commonAncestorIndex = parents.indexOf(commonAncestor) - 1;
198
+ const firstBlockToSelectId = commonAncestor ? parents[commonAncestorIndex] : parents[parents.length - 1]; // For blocks with inner blocks, we only enable the dragging in the nested
199
+ // blocks if any of them are selected. This way we prevent the long-press
200
+ // gesture from being disabled for elements within the block UI.
201
+
202
+ const isDraggingEnabled = !hasInnerBlocks || isSelected || !descendentBlockSelected; // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
203
+ // will be the top in the hierarchy.
204
+
205
+ const currentDraggingClientId = getBlockHierarchyRootClientId(clientId);
206
+ const globalStylesBaseStyles = (_getSettings = getSettings()) === null || _getSettings === void 0 ? void 0 : _getSettings.__experimentalGlobalStylesBaseStyles;
207
+ return {
208
+ baseGlobalStyles: globalStylesBaseStyles,
209
+ blockType: currentBlockType,
210
+ draggingClientId: currentDraggingClientId,
211
+ draggingEnabled: isDraggingEnabled,
212
+ firstToSelectId: firstBlockToSelectId,
213
+ isDescendantOfParentSelected: descendantOfParentSelected,
214
+ isDescendentBlockSelected: descendentBlockSelected,
215
+ isParentSelected: parentSelected,
216
+ order: blockOrder
217
+ };
218
+ }, [clientId, isSelected, name, rootClientId]);
219
+ const {
220
+ removeBlock,
221
+ selectBlock
222
+ } = (0, _data.useDispatch)(_store.store);
223
+ const initialBlockWidth = blockWrapperWidth - 2 * marginHorizontal;
224
+ const [blockWidth, setBlockWidth] = (0, _element.useState)(initialBlockWidth);
225
+ const parentLayout = (0, _layout.useLayout)() || {};
226
+ const defaultColors = (0, _components.useMobileGlobalStylesColors)();
227
+ const globalStyle = (0, _components.useGlobalStyles)();
228
+ const fontSizes = (0, _useSetting.default)('typography.fontSizes') || emptyArray;
229
+ const onRemove = (0, _element.useCallback)(() => removeBlock(clientId), [clientId, removeBlock]);
230
+ const onFocus = (0, _element.useCallback)(() => {
231
+ const blockId = firstToSelectId !== null && firstToSelectId !== void 0 ? firstToSelectId : clientId;
130
232
 
131
233
  if (!isSelected) {
132
- onSelect(firstToSelectId);
133
- }
134
- }
135
-
136
- insertBlocksAfter(blocks) {
137
- this.props.onInsertBlocks(blocks, this.props.order + 1);
138
-
139
- if (blocks[0]) {
140
- // Focus on the first block inserted.
141
- this.props.onSelect(blocks[0].clientId);
234
+ selectBlock(blockId);
142
235
  }
143
- }
144
-
145
- getBlockWidth(_ref3) {
236
+ }, [selectBlock, clientId, firstToSelectId, isSelected]);
237
+ const onLayout = (0, _element.useCallback)(_ref3 => {
146
238
  let {
147
239
  nativeEvent
148
240
  } = _ref3;
149
- const {
150
- layout
151
- } = nativeEvent;
152
- const {
153
- blockWidth
154
- } = this.state;
155
- const layoutWidth = Math.floor(layout.width);
241
+ const layoutWidth = Math.floor(nativeEvent.layout.width);
156
242
 
157
243
  if (!blockWidth || !layoutWidth) {
158
244
  return;
159
245
  }
160
246
 
161
247
  if (blockWidth !== layoutWidth) {
162
- this.setState({
163
- blockWidth: layoutWidth
164
- });
248
+ setBlockWidth(layoutWidth);
165
249
  }
166
- }
167
-
168
- getBlockForType() {
169
- const {
170
- blockWidth
171
- } = this.state;
172
- return (0, _element.createElement)(BlockForType, (0, _extends2.default)({}, this.props, {
173
- onBlockFocus: this.onFocus,
174
- insertBlocksAfter: this.insertBlocksAfter,
175
- getBlockWidth: this.getBlockWidth,
176
- blockWidth: blockWidth
177
- }));
178
- }
179
-
180
- renderBlockTitle() {
181
- return (0, _element.createElement)(_reactNative.View, {
182
- style: _block.default.blockTitle
183
- }, (0, _element.createElement)(_reactNative.Text, null, "BlockType: ", this.props.name));
184
- }
185
-
186
- render() {
187
- const {
188
- attributes,
189
- blockType,
190
- clientId,
191
- icon,
192
- isSelected,
193
- isValid,
194
- order,
195
- title,
196
- isDimmed,
197
- isTouchable,
198
- onDeleteBlock,
199
- isStackedHorizontally,
200
- isParentSelected,
201
- getStylesFromColorScheme,
202
- marginVertical,
203
- marginHorizontal,
204
- isInnerBlockSelected,
205
- name,
206
- draggingEnabled,
207
- draggingClientId
208
- } = this.props;
209
-
210
- if (!attributes || !blockType) {
211
- return null;
212
- }
213
-
214
- const {
215
- blockWidth
216
- } = this.state;
217
- const {
218
- align
219
- } = attributes;
220
- const accessibilityLabel = (0, _blocks.__experimentalGetAccessibleBlockLabel)(blockType, attributes, order + 1);
221
- const {
222
- isFullWidth,
223
- isContainerRelated
224
- } = _components.alignmentHelpers;
225
- const isFocused = isSelected || isInnerBlockSelected;
226
- const screenWidth = Math.floor(_reactNative.Dimensions.get('window').width);
227
- const isScreenWidthEqual = blockWidth === screenWidth;
228
- const isScreenWidthWider = blockWidth < screenWidth;
229
- const isFullWidthToolbar = isFullWidth(align) || isScreenWidthEqual;
230
- return (0, _element.createElement)(_reactNative.TouchableWithoutFeedback, {
231
- onPress: this.onFocus,
232
- accessible: !isFocused,
233
- accessibilityRole: 'button',
234
- disabled: isFocused
235
- }, (0, _element.createElement)(_reactNative.View, {
236
- style: {
237
- flex: 1
238
- },
239
- accessibilityLabel: accessibilityLabel
240
- }, (0, _element.createElement)(_reactNative.View, {
241
- pointerEvents: isTouchable ? 'auto' : 'box-only',
242
- accessibilityLabel: accessibilityLabel,
243
- style: [{
244
- marginVertical,
245
- marginHorizontal,
246
- flex: 1
247
- }, isDimmed && _block.default.dimmed]
248
- }, isSelected && (0, _element.createElement)(_reactNative.View, {
249
- pointerEvents: "box-none",
250
- style: [_block.default.solidBorder, isFullWidth(align) && isScreenWidthWider && _block.default.borderFullWidth, isFullWidth(align) && isContainerRelated(name) && isScreenWidthWider && _block.default.containerBorderFullWidth, getStylesFromColorScheme(_block.default.solidBorderColor, _block.default.solidBorderColorDark)]
251
- }), isParentSelected && (0, _element.createElement)(_reactNative.View, {
252
- style: [_block.default.dashedBorder, getStylesFromColorScheme(_block.default.dashedBorderColor, _block.default.dashedBorderColorDark)]
253
- }), (0, _element.createElement)(_blockDraggable.default, {
254
- clientId: clientId,
255
- draggingClientId: draggingClientId,
256
- enabled: draggingEnabled,
257
- testID: "draggable-trigger-content"
258
- }, () => isValid ? this.getBlockForType() : (0, _element.createElement)(_blockInvalidWarning.default, {
259
- blockTitle: title,
260
- icon: icon,
261
- clientId: clientId
262
- })), (0, _element.createElement)(_reactNative.View, {
263
- style: _block.default.neutralToolbar,
264
- ref: this.anchorNodeRef
265
- }, isSelected && (0, _element.createElement)(_blockMobileToolbar.default, {
266
- clientId: clientId,
267
- onDelete: onDeleteBlock,
268
- isStackedHorizontally: isStackedHorizontally,
269
- blockWidth: blockWidth,
270
- anchorNodeRef: this.anchorNodeRef.current,
271
- isFullWidth: isFullWidthToolbar,
272
- draggingClientId: draggingClientId
273
- })))));
274
- }
275
-
276
- } // Helper function to memoize the wrapperProps since getEditWrapperProps always returns a new reference.
277
-
278
-
279
- const wrapperPropsCache = new WeakMap();
280
- const emptyObj = {};
281
-
282
- function getWrapperProps(value, getWrapperPropsFunction) {
283
- if (!getWrapperPropsFunction) {
284
- return emptyObj;
285
- }
286
-
287
- const cachedValue = wrapperPropsCache.get(value);
250
+ }, [blockWidth, setBlockWidth]); // Block level styles.
288
251
 
289
- if (!cachedValue) {
290
- const wrapperProps = getWrapperPropsFunction(value);
291
- wrapperPropsCache.set(value, wrapperProps);
292
- return wrapperProps;
293
- }
252
+ const wrapperProps = getWrapperProps(attributes, blockType.getEditWrapperProps); // Inherited styles merged with block level styles.
294
253
 
295
- return cachedValue;
254
+ const mergedStyle = (0, _element.useMemo)(() => {
255
+ return (0, _components.getMergedGlobalStyles)(baseGlobalStyles, globalStyle, wrapperProps.style, attributes, defaultColors, name, fontSizes); // eslint-disable-next-line react-hooks/exhaustive-deps
256
+ }, [// It is crucial to keep the dependencies array minimal to prevent unnecessary calls that could negatively impact performance.
257
+ // JSON.stringify is used for the following purposes:
258
+ // 1. To create a single, comparable value from the globalStyle, wrapperProps.style, and attributes objects. This allows useMemo to
259
+ // efficiently determine if a change has occurred in any of these objects.
260
+ // 2. To filter the attributes object, ensuring that only the relevant attributes (included in
261
+ // GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES) are considered as dependencies. This reduces the likelihood of
262
+ // unnecessary useMemo calls when other, unrelated attributes change.
263
+ // eslint-disable-next-line react-hooks/exhaustive-deps
264
+ JSON.stringify(globalStyle), // eslint-disable-next-line react-hooks/exhaustive-deps
265
+ JSON.stringify(wrapperProps.style), // eslint-disable-next-line react-hooks/exhaustive-deps
266
+ JSON.stringify(Object.fromEntries(Object.entries(attributes !== null && attributes !== void 0 ? attributes : {}).filter(_ref4 => {
267
+ let [key] = _ref4;
268
+ return _components.GlobalStylesContext.BLOCK_STYLE_ATTRIBUTES.includes(key);
269
+ })))]);
270
+ const {
271
+ align
272
+ } = attributes;
273
+ const isFocused = isSelected || isDescendentBlockSelected;
274
+ const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || !rootClientId;
275
+ const accessibilityLabel = (0, _blocks.__experimentalGetAccessibleBlockLabel)(blockType, attributes, order + 1);
276
+ return (0, _element.createElement)(BlockWrapper, {
277
+ accessibilityLabel: accessibilityLabel,
278
+ align: align,
279
+ blockWidth: blockWidth,
280
+ clientId: clientId,
281
+ draggingClientId: draggingClientId,
282
+ draggingEnabled: draggingEnabled,
283
+ isFocused: isFocused,
284
+ isDescendentBlockSelected: isDescendentBlockSelected,
285
+ isParentSelected: isParentSelected,
286
+ isSelected: isSelected,
287
+ isStackedHorizontally: isStackedHorizontally,
288
+ isTouchable: isTouchable,
289
+ marginHorizontal: marginHorizontal,
290
+ marginVertical: marginVertical,
291
+ onDeleteBlock: onDeleteBlock,
292
+ onFocus: onFocus
293
+ }, () => !isValid ? (0, _element.createElement)(_blockInvalidWarning.default, {
294
+ clientId: clientId
295
+ }) : (0, _element.createElement)(_components.GlobalStylesContext.Provider, {
296
+ value: mergedStyle
297
+ }, (0, _element.createElement)(_blockEdit.default, {
298
+ attributes: attributes,
299
+ blockWidth: blockWidth,
300
+ clientId: clientId,
301
+ contentStyle: contentStyle,
302
+ insertBlocksAfter: isLocked ? undefined : onInsertBlocksAfter,
303
+ isSelected: isSelected,
304
+ isSelectionEnabled: isSelectionEnabled,
305
+ mergeBlocks: canRemove ? onMerge : undefined,
306
+ name: name,
307
+ onFocus: onFocus,
308
+ onRemove: canRemove ? onRemove : undefined,
309
+ onReplace: canRemove ? onReplace : undefined,
310
+ parentBlockAlignment: parentBlockAlignment,
311
+ parentWidth: parentWidth,
312
+ setAttributes: setAttributes,
313
+ style: mergedStyle,
314
+ toggleSelection: toggleSelection,
315
+ __unstableParentLayout: Object.keys(parentLayout).length ? parentLayout : undefined,
316
+ wrapperProps: wrapperProps
317
+ }), (0, _element.createElement)(_reactNative.View, {
318
+ onLayout: onLayout
319
+ })));
296
320
  }
297
321
 
298
- var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
299
- var _getSettings;
300
-
322
+ const applyWithSelect = (0, _data.withSelect)((select, _ref5) => {
301
323
  let {
302
- clientId
303
- } = _ref4;
324
+ clientId,
325
+ rootClientId
326
+ } = _ref5;
304
327
  const {
305
- getBlockIndex,
306
- getBlockCount,
307
- getSettings,
308
328
  isBlockSelected,
309
- getBlock,
310
- getSelectedBlockClientId,
311
- getLowestCommonAncestorWithSelectedBlock,
312
- getBlockParents,
313
- hasSelectedInnerBlock,
314
- getBlockHierarchyRootClientId
329
+ getBlockMode,
330
+ isSelectionEnabled,
331
+ getTemplateLock,
332
+ __unstableGetBlockWithoutInnerBlocks,
333
+ canRemoveBlock,
334
+ canMoveBlock
315
335
  } = select(_store.store);
316
- const order = getBlockIndex(clientId);
336
+
337
+ const block = __unstableGetBlockWithoutInnerBlocks(clientId);
338
+
317
339
  const isSelected = isBlockSelected(clientId);
318
- const isInnerBlockSelected = hasSelectedInnerBlock(clientId);
319
- const block = getBlock(clientId);
340
+ const templateLock = getTemplateLock(rootClientId);
341
+ const canRemove = canRemoveBlock(clientId, rootClientId);
342
+ const canMove = canMoveBlock(clientId, rootClientId); // The fallback to `{}` is a temporary fix.
343
+ // This function should never be called when a block is not present in
344
+ // the state. It happens now because the order in withSelect rendering
345
+ // is not correct.
346
+
320
347
  const {
321
348
  name,
322
349
  attributes,
323
350
  isValid
324
- } = block || {};
325
- const blockType = (0, _blocks.getBlockType)(name || 'core/missing');
326
- const title = blockType === null || blockType === void 0 ? void 0 : blockType.title;
327
- const icon = blockType === null || blockType === void 0 ? void 0 : blockType.icon;
328
- const parents = getBlockParents(clientId, true);
329
- const parentId = parents[0] || '';
330
- const selectedBlockClientId = getSelectedBlockClientId();
331
- const commonAncestor = getLowestCommonAncestorWithSelectedBlock(clientId);
332
- const commonAncestorIndex = parents.indexOf(commonAncestor) - 1;
333
- const firstToSelectId = commonAncestor ? parents[commonAncestorIndex] : parents[parents.length - 1];
334
- const isParentSelected = // Set false as a default value to prevent re-render when it's changed from null to false.
335
- (selectedBlockClientId || false) && selectedBlockClientId === parentId;
336
- const selectedParents = selectedBlockClientId ? getBlockParents(selectedBlockClientId) : [];
337
- const isDescendantOfParentSelected = selectedParents.includes(parentId);
338
- const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
339
- const baseGlobalStyles = (_getSettings = getSettings()) === null || _getSettings === void 0 ? void 0 : _getSettings.__experimentalGlobalStylesBaseStyles;
340
- const hasInnerBlocks = getBlockCount(clientId) > 0; // For blocks with inner blocks, we only enable the dragging in the nested
341
- // blocks if any of them are selected. This way we prevent the long-press
342
- // gesture from being disabled for elements within the block UI.
343
-
344
- const draggingEnabled = !hasInnerBlocks || isSelected || !hasSelectedInnerBlock(clientId, true); // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
345
- // will be the top in the hierarchy.
346
-
347
- const draggingClientId = getBlockHierarchyRootClientId(clientId);
351
+ } = block || {}; // Do not add new properties here, use `useSelect` instead to avoid
352
+ // leaking new props to the public API (editor.BlockListBlock filter).
353
+
348
354
  return {
349
- icon,
350
- name: name || 'core/missing',
351
- order,
352
- title,
355
+ mode: getBlockMode(clientId),
356
+ isSelectionEnabled: isSelectionEnabled(),
357
+ isLocked: !!templateLock,
358
+ canRemove,
359
+ canMove,
360
+ // Users of the editor.BlockListBlock filter used to be able to
361
+ // access the block prop.
362
+ // Ideally these blocks would rely on the clientId prop only.
363
+ // This is kept for backward compatibility reasons.
364
+ block,
365
+ name,
353
366
  attributes,
354
- blockType,
355
- draggingClientId,
356
- draggingEnabled,
357
- isSelected,
358
- isInnerBlockSelected,
359
367
  isValid,
360
- isParentSelected,
361
- firstToSelectId,
362
- isTouchable,
363
- baseGlobalStyles,
364
- wrapperProps: getWrapperProps(attributes, blockType.getEditWrapperProps)
368
+ isSelected
365
369
  };
366
- }), (0, _data.withDispatch)((dispatch, ownProps, registry) => {
370
+ });
371
+ const applyWithDispatch = (0, _data.withDispatch)((dispatch, ownProps, registry) => {
367
372
  const {
373
+ updateBlockAttributes,
368
374
  insertBlocks,
369
375
  mergeBlocks,
370
376
  replaceBlocks,
371
- selectBlock,
372
- updateBlockAttributes,
377
+ toggleSelection,
378
+ __unstableMarkLastChangeAsPersistent,
373
379
  moveBlocksToPosition,
374
380
  removeBlock
375
- } = dispatch(_store.store);
381
+ } = dispatch(_store.store); // Do not add new properties here, use `useDispatch` instead to avoid
382
+ // leaking new props to the public API (editor.BlockListBlock filter).
383
+
376
384
  return {
385
+ setAttributes(newAttributes) {
386
+ const {
387
+ getMultiSelectedBlockClientIds
388
+ } = registry.select(_store.store);
389
+ const multiSelectedBlockClientIds = getMultiSelectedBlockClientIds();
390
+ const {
391
+ clientId
392
+ } = ownProps;
393
+ const clientIds = multiSelectedBlockClientIds.length ? multiSelectedBlockClientIds : [clientId];
394
+ updateBlockAttributes(clientIds, newAttributes);
395
+ },
396
+
397
+ onInsertBlocks(blocks, index) {
398
+ const {
399
+ rootClientId
400
+ } = ownProps;
401
+ insertBlocks(blocks, index, rootClientId);
402
+ },
403
+
404
+ onInsertBlocksAfter(blocks) {
405
+ const {
406
+ clientId,
407
+ rootClientId
408
+ } = ownProps;
409
+ const {
410
+ getBlockIndex
411
+ } = registry.select(_store.store);
412
+ const index = getBlockIndex(clientId);
413
+ insertBlocks(blocks, index + 1, rootClientId);
414
+ },
415
+
377
416
  onMerge(forward) {
378
417
  const {
379
418
  clientId,
@@ -494,26 +533,30 @@ var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
494
533
  }
495
534
  },
496
535
 
497
- onInsertBlocks(blocks, index) {
498
- insertBlocks(blocks, index, ownProps.rootClientId);
499
- },
500
-
501
- onSelect() {
502
- let clientId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ownProps.clientId;
503
- let initialPosition = arguments.length > 1 ? arguments[1] : undefined;
504
- selectBlock(clientId, initialPosition);
505
- },
536
+ onReplace(blocks, indexToSelect, initialPosition) {
537
+ if (blocks.length && !(0, _blocks.isUnmodifiedDefaultBlock)(blocks[blocks.length - 1])) {
538
+ __unstableMarkLastChangeAsPersistent();
539
+ }
506
540
 
507
- onChange: attributes => {
508
- updateBlockAttributes(ownProps.clientId, attributes);
541
+ replaceBlocks([ownProps.clientId], blocks, indexToSelect, initialPosition);
509
542
  },
510
543
 
511
- onReplace(blocks, indexToSelect) {
512
- replaceBlocks([ownProps.clientId], blocks, indexToSelect);
544
+ toggleSelection(selectionEnabled) {
545
+ toggleSelection(selectionEnabled);
513
546
  }
514
547
 
515
548
  };
516
- }), _compose.withPreferredColorScheme])(BlockListBlock);
549
+ });
550
+
551
+ var _default = (0, _compose.compose)(_compose.pure, applyWithSelect, applyWithDispatch, // Block is sometimes not mounted at the right time, causing it be undefined
552
+ // see issue for more info
553
+ // https://github.com/WordPress/gutenberg/issues/17013
554
+ (0, _compose.ifCondition)(_ref6 => {
555
+ let {
556
+ block
557
+ } = _ref6;
558
+ return !!block;
559
+ }))(BlockListBlock);
517
560
 
518
561
  exports.default = _default;
519
562
  //# sourceMappingURL=block.native.js.map