@wordpress/block-editor 12.16.1-next.79a6196f.0 → 12.18.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 (376) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +32 -0
  3. package/build/components/block-draggable/index.js +11 -3
  4. package/build/components/block-draggable/index.js.map +1 -1
  5. package/build/components/block-edit/context.js +3 -1
  6. package/build/components/block-edit/context.js.map +1 -1
  7. package/build/components/block-edit/index.js +4 -2
  8. package/build/components/block-edit/index.js.map +1 -1
  9. package/build/components/block-editing-mode/index.js +6 -3
  10. package/build/components/block-editing-mode/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +5 -2
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/block.js +4 -3
  14. package/build/components/block-list/block.js.map +1 -1
  15. package/build/components/block-list/block.native.js +9 -5
  16. package/build/components/block-list/block.native.js.map +1 -1
  17. package/build/components/block-list/index.js +30 -4
  18. package/build/components/block-list/index.js.map +1 -1
  19. package/build/components/block-list/private-block-context.js +1 -1
  20. package/build/components/block-list/private-block-context.js.map +1 -1
  21. package/build/components/block-list/use-in-between-inserter.js +1 -1
  22. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  23. package/build/components/block-popover/inbetween.js +15 -3
  24. package/build/components/block-popover/inbetween.js.map +1 -1
  25. package/build/components/block-preview/auto.js +1 -1
  26. package/build/components/block-preview/auto.js.map +1 -1
  27. package/build/components/block-removal-warning-modal/index.js +3 -2
  28. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  29. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -4
  30. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  31. package/build/components/block-switcher/block-transformations-menu.js +12 -1
  32. package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
  33. package/build/components/block-switcher/index.js +119 -90
  34. package/build/components/block-switcher/index.js.map +1 -1
  35. package/build/components/block-tools/insertion-point.js +10 -3
  36. package/build/components/block-tools/insertion-point.js.map +1 -1
  37. package/build/components/font-sizes/fluid-utils.js +7 -1
  38. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  39. package/build/components/global-styles/border-panel.js +5 -14
  40. package/build/components/global-styles/border-panel.js.map +1 -1
  41. package/build/components/global-styles/effects-panel.js +7 -1
  42. package/build/components/global-styles/effects-panel.js.map +1 -1
  43. package/build/components/iframe/get-compatibility-styles.js +99 -0
  44. package/build/components/iframe/get-compatibility-styles.js.map +1 -0
  45. package/build/components/iframe/index.js +2 -3
  46. package/build/components/iframe/index.js.map +1 -1
  47. package/build/components/index.js +16 -2
  48. package/build/components/index.js.map +1 -1
  49. package/build/components/index.native.js +16 -2
  50. package/build/components/index.native.js.map +1 -1
  51. package/build/components/inspector-controls/groups.js +2 -0
  52. package/build/components/inspector-controls/groups.js.map +1 -1
  53. package/build/components/inspector-controls-tabs/styles-tab.js +3 -0
  54. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  55. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +3 -2
  56. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  57. package/build/components/link-control/link-preview.js +30 -26
  58. package/build/components/link-control/link-preview.js.map +1 -1
  59. package/build/components/link-control/search-input.js +1 -9
  60. package/build/components/link-control/search-input.js.map +1 -1
  61. package/build/components/list-view/block-contents.js +3 -1
  62. package/build/components/list-view/block-contents.js.map +1 -1
  63. package/build/components/list-view/block.js +10 -1
  64. package/build/components/list-view/block.js.map +1 -1
  65. package/build/components/list-view/branch.js +29 -8
  66. package/build/components/list-view/branch.js.map +1 -1
  67. package/build/components/list-view/drop-indicator.js +100 -32
  68. package/build/components/list-view/drop-indicator.js.map +1 -1
  69. package/build/components/list-view/index.js +52 -4
  70. package/build/components/list-view/index.js.map +1 -1
  71. package/build/components/list-view/leaf.js +2 -2
  72. package/build/components/list-view/leaf.js.map +1 -1
  73. package/build/components/list-view/use-list-view-block-indexes.js +30 -0
  74. package/build/components/list-view/use-list-view-block-indexes.js.map +1 -0
  75. package/build/components/list-view/use-list-view-drop-zone.js +56 -5
  76. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  77. package/build/components/list-view/utils.js +92 -0
  78. package/build/components/list-view/utils.js.map +1 -1
  79. package/build/components/provider/index.js +1 -1
  80. package/build/components/provider/index.js.map +1 -1
  81. package/build/components/recursion-provider/index.js +21 -0
  82. package/build/components/recursion-provider/index.js.map +1 -1
  83. package/build/components/rich-text/index.js +30 -6
  84. package/build/components/rich-text/index.js.map +1 -1
  85. package/build/components/rich-text/native/index.native.js +9 -9
  86. package/build/components/rich-text/native/index.native.js.map +1 -1
  87. package/build/components/use-block-drop-zone/index.js +30 -7
  88. package/build/components/use-block-drop-zone/index.js.map +1 -1
  89. package/build/components/use-on-block-drop/index.js +50 -8
  90. package/build/components/use-on-block-drop/index.js.map +1 -1
  91. package/build/hooks/block-hooks.js +5 -14
  92. package/build/hooks/block-hooks.js.map +1 -1
  93. package/build/hooks/content-lock-ui.js +17 -42
  94. package/build/hooks/content-lock-ui.js.map +1 -1
  95. package/build/hooks/effects.js +66 -0
  96. package/build/hooks/effects.js.map +1 -0
  97. package/build/hooks/index.js +14 -0
  98. package/build/hooks/index.js.map +1 -1
  99. package/build/hooks/index.native.js +13 -0
  100. package/build/hooks/index.native.js.map +1 -1
  101. package/build/hooks/style.js +6 -2
  102. package/build/hooks/style.js.map +1 -1
  103. package/build/hooks/supports.js +2 -1
  104. package/build/hooks/supports.js.map +1 -1
  105. package/build/hooks/typography.native.js +2 -2
  106. package/build/hooks/typography.native.js.map +1 -1
  107. package/build/hooks/use-bindings-attributes.js +115 -0
  108. package/build/hooks/use-bindings-attributes.js.map +1 -0
  109. package/build/hooks/use-shadow-props.js +46 -0
  110. package/build/hooks/use-shadow-props.js.map +1 -0
  111. package/build/hooks/utils.js +7 -6
  112. package/build/hooks/utils.js.map +1 -1
  113. package/build/index.js +14 -0
  114. package/build/index.js.map +1 -1
  115. package/build/store/actions.js +10 -6
  116. package/build/store/actions.js.map +1 -1
  117. package/build/store/index.js +2 -0
  118. package/build/store/index.js.map +1 -1
  119. package/build/store/private-actions.js +37 -0
  120. package/build/store/private-actions.js.map +1 -1
  121. package/build/store/private-selectors.js +60 -9
  122. package/build/store/private-selectors.js.map +1 -1
  123. package/build/store/reducer.js +44 -3
  124. package/build/store/reducer.js.map +1 -1
  125. package/build/store/resolvers.js +27 -0
  126. package/build/store/resolvers.js.map +1 -0
  127. package/build/store/selectors.js +94 -56
  128. package/build/store/selectors.js.map +1 -1
  129. package/build/store/utils.js +5 -26
  130. package/build/store/utils.js.map +1 -1
  131. package/build/utils/index.js +0 -16
  132. package/build/utils/index.js.map +1 -1
  133. package/build/utils/math.js +13 -0
  134. package/build/utils/math.js.map +1 -1
  135. package/build/utils/transform-styles/index.js +37 -27
  136. package/build/utils/transform-styles/index.js.map +1 -1
  137. package/build-module/components/block-draggable/index.js +11 -3
  138. package/build-module/components/block-draggable/index.js.map +1 -1
  139. package/build-module/components/block-edit/context.js +1 -0
  140. package/build-module/components/block-edit/context.js.map +1 -1
  141. package/build-module/components/block-edit/index.js +5 -3
  142. package/build-module/components/block-edit/index.js.map +1 -1
  143. package/build-module/components/block-editing-mode/index.js +7 -4
  144. package/build-module/components/block-editing-mode/index.js.map +1 -1
  145. package/build-module/components/block-inspector/index.js +5 -2
  146. package/build-module/components/block-inspector/index.js.map +1 -1
  147. package/build-module/components/block-list/block.js +6 -5
  148. package/build-module/components/block-list/block.js.map +1 -1
  149. package/build-module/components/block-list/block.native.js +11 -7
  150. package/build-module/components/block-list/block.native.js.map +1 -1
  151. package/build-module/components/block-list/index.js +31 -5
  152. package/build-module/components/block-list/index.js.map +1 -1
  153. package/build-module/components/block-list/private-block-context.js +1 -1
  154. package/build-module/components/block-list/private-block-context.js.map +1 -1
  155. package/build-module/components/block-list/use-in-between-inserter.js +1 -1
  156. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  157. package/build-module/components/block-popover/inbetween.js +15 -3
  158. package/build-module/components/block-popover/inbetween.js.map +1 -1
  159. package/build-module/components/block-preview/auto.js +3 -3
  160. package/build-module/components/block-preview/auto.js.map +1 -1
  161. package/build-module/components/block-removal-warning-modal/index.js +3 -2
  162. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  163. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -4
  164. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  165. package/build-module/components/block-switcher/block-transformations-menu.js +12 -1
  166. package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
  167. package/build-module/components/block-switcher/index.js +116 -86
  168. package/build-module/components/block-switcher/index.js.map +1 -1
  169. package/build-module/components/block-tools/insertion-point.js +10 -3
  170. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  171. package/build-module/components/font-sizes/fluid-utils.js +7 -1
  172. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  173. package/build-module/components/global-styles/border-panel.js +5 -14
  174. package/build-module/components/global-styles/border-panel.js.map +1 -1
  175. package/build-module/components/global-styles/effects-panel.js +7 -1
  176. package/build-module/components/global-styles/effects-panel.js.map +1 -1
  177. package/build-module/components/iframe/get-compatibility-styles.js +93 -0
  178. package/build-module/components/iframe/get-compatibility-styles.js.map +1 -0
  179. package/build-module/components/iframe/index.js +2 -3
  180. package/build-module/components/iframe/index.js.map +1 -1
  181. package/build-module/components/index.js +1 -1
  182. package/build-module/components/index.js.map +1 -1
  183. package/build-module/components/index.native.js +1 -1
  184. package/build-module/components/index.native.js.map +1 -1
  185. package/build-module/components/inspector-controls/groups.js +2 -0
  186. package/build-module/components/inspector-controls/groups.js.map +1 -1
  187. package/build-module/components/inspector-controls-tabs/styles-tab.js +3 -0
  188. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  189. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +3 -2
  190. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  191. package/build-module/components/link-control/link-preview.js +32 -28
  192. package/build-module/components/link-control/link-preview.js.map +1 -1
  193. package/build-module/components/link-control/search-input.js +1 -8
  194. package/build-module/components/link-control/search-input.js.map +1 -1
  195. package/build-module/components/list-view/block-contents.js +3 -1
  196. package/build-module/components/list-view/block-contents.js.map +1 -1
  197. package/build-module/components/list-view/block.js +10 -1
  198. package/build-module/components/list-view/block.js.map +1 -1
  199. package/build-module/components/list-view/branch.js +30 -9
  200. package/build-module/components/list-view/branch.js.map +1 -1
  201. package/build-module/components/list-view/drop-indicator.js +99 -32
  202. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  203. package/build-module/components/list-view/index.js +54 -6
  204. package/build-module/components/list-view/index.js.map +1 -1
  205. package/build-module/components/list-view/leaf.js +2 -2
  206. package/build-module/components/list-view/leaf.js.map +1 -1
  207. package/build-module/components/list-view/use-list-view-block-indexes.js +23 -0
  208. package/build-module/components/list-view/use-list-view-block-indexes.js.map +1 -0
  209. package/build-module/components/list-view/use-list-view-drop-zone.js +58 -7
  210. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  211. package/build-module/components/list-view/utils.js +91 -0
  212. package/build-module/components/list-view/utils.js.map +1 -1
  213. package/build-module/components/provider/index.js +1 -1
  214. package/build-module/components/provider/index.js.map +1 -1
  215. package/build-module/components/recursion-provider/index.js +17 -0
  216. package/build-module/components/recursion-provider/index.js.map +1 -1
  217. package/build-module/components/rich-text/index.js +30 -6
  218. package/build-module/components/rich-text/index.js.map +1 -1
  219. package/build-module/components/rich-text/native/index.native.js +9 -9
  220. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  221. package/build-module/components/use-block-drop-zone/index.js +31 -8
  222. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  223. package/build-module/components/use-on-block-drop/index.js +51 -9
  224. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  225. package/build-module/hooks/block-hooks.js +5 -14
  226. package/build-module/hooks/block-hooks.js.map +1 -1
  227. package/build-module/hooks/content-lock-ui.js +19 -43
  228. package/build-module/hooks/content-lock-ui.js.map +1 -1
  229. package/build-module/hooks/effects.js +51 -0
  230. package/build-module/hooks/effects.js.map +1 -0
  231. package/build-module/hooks/index.js +2 -0
  232. package/build-module/hooks/index.js.map +1 -1
  233. package/build-module/hooks/index.native.js +1 -0
  234. package/build-module/hooks/index.native.js.map +1 -1
  235. package/build-module/hooks/style.js +6 -2
  236. package/build-module/hooks/style.js.map +1 -1
  237. package/build-module/hooks/supports.js +2 -1
  238. package/build-module/hooks/supports.js.map +1 -1
  239. package/build-module/hooks/typography.native.js +2 -2
  240. package/build-module/hooks/typography.native.js.map +1 -1
  241. package/build-module/hooks/use-bindings-attributes.js +112 -0
  242. package/build-module/hooks/use-bindings-attributes.js.map +1 -0
  243. package/build-module/hooks/use-shadow-props.js +39 -0
  244. package/build-module/hooks/use-shadow-props.js.map +1 -0
  245. package/build-module/hooks/utils.js +9 -8
  246. package/build-module/hooks/utils.js.map +1 -1
  247. package/build-module/index.js +1 -1
  248. package/build-module/index.js.map +1 -1
  249. package/build-module/store/actions.js +10 -6
  250. package/build-module/store/actions.js.map +1 -1
  251. package/build-module/store/index.js +2 -0
  252. package/build-module/store/index.js.map +1 -1
  253. package/build-module/store/private-actions.js +35 -0
  254. package/build-module/store/private-actions.js.map +1 -1
  255. package/build-module/store/private-selectors.js +53 -8
  256. package/build-module/store/private-selectors.js.map +1 -1
  257. package/build-module/store/reducer.js +43 -3
  258. package/build-module/store/reducer.js.map +1 -1
  259. package/build-module/store/resolvers.js +20 -0
  260. package/build-module/store/resolvers.js.map +1 -0
  261. package/build-module/store/selectors.js +89 -52
  262. package/build-module/store/selectors.js.map +1 -1
  263. package/build-module/store/utils.js +3 -23
  264. package/build-module/store/utils.js.map +1 -1
  265. package/build-module/utils/index.js +0 -1
  266. package/build-module/utils/index.js.map +1 -1
  267. package/build-module/utils/math.js +12 -0
  268. package/build-module/utils/math.js.map +1 -1
  269. package/build-module/utils/transform-styles/index.js +36 -27
  270. package/build-module/utils/transform-styles/index.js.map +1 -1
  271. package/build-style/content-rtl.css +33 -16
  272. package/build-style/content.css +33 -16
  273. package/build-style/default-editor-styles-rtl.css +1 -1
  274. package/build-style/default-editor-styles.css +1 -1
  275. package/build-style/style-rtl.css +169 -114
  276. package/build-style/style.css +169 -114
  277. package/package.json +31 -31
  278. package/src/components/block-canvas/style.scss +8 -1
  279. package/src/components/block-draggable/index.js +16 -5
  280. package/src/components/block-edit/context.js +1 -0
  281. package/src/components/block-edit/index.js +4 -0
  282. package/src/components/block-editing-mode/index.js +12 -7
  283. package/src/components/block-inspector/index.js +5 -2
  284. package/src/components/block-list/block.js +5 -4
  285. package/src/components/block-list/block.native.js +13 -3
  286. package/src/components/block-list/content.scss +34 -5
  287. package/src/components/block-list/index.js +52 -16
  288. package/src/components/block-list/private-block-context.js +1 -1
  289. package/src/components/block-list/use-in-between-inserter.js +1 -2
  290. package/src/components/block-popover/inbetween.js +22 -2
  291. package/src/components/block-preview/auto.js +3 -3
  292. package/src/components/block-removal-warning-modal/index.js +3 -2
  293. package/src/components/block-settings-menu/block-settings-dropdown.js +2 -7
  294. package/src/components/block-switcher/block-transformations-menu.js +18 -1
  295. package/src/components/block-switcher/index.js +133 -111
  296. package/src/components/block-switcher/style.scss +6 -4
  297. package/src/components/block-switcher/test/index.js +113 -230
  298. package/src/components/block-toolbar/style.scss +22 -18
  299. package/src/components/block-tools/insertion-point.js +15 -2
  300. package/src/components/block-tools/style.scss +8 -7
  301. package/src/components/font-sizes/fluid-utils.js +8 -2
  302. package/src/components/font-sizes/test/fluid-utils.js +9 -0
  303. package/src/components/global-styles/border-panel.js +7 -17
  304. package/src/components/global-styles/effects-panel.js +16 -1
  305. package/src/components/iframe/get-compatibility-styles.js +120 -0
  306. package/src/components/iframe/index.js +2 -3
  307. package/src/components/index.js +4 -2
  308. package/src/components/index.native.js +4 -2
  309. package/src/components/inspector-controls/groups.js +2 -0
  310. package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
  311. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +2 -0
  312. package/src/components/link-control/link-preview.js +31 -55
  313. package/src/components/link-control/search-input.js +1 -9
  314. package/src/components/link-control/style.scss +31 -85
  315. package/src/components/link-control/test/index.js +2 -1
  316. package/src/components/list-view/block-contents.js +5 -1
  317. package/src/components/list-view/block.js +9 -0
  318. package/src/components/list-view/branch.js +30 -10
  319. package/src/components/list-view/drop-indicator.js +139 -46
  320. package/src/components/list-view/index.js +74 -3
  321. package/src/components/list-view/leaf.js +2 -2
  322. package/src/components/list-view/style.scss +102 -13
  323. package/src/components/list-view/test/use-list-view-drop-zone.js +4 -0
  324. package/src/components/list-view/test/utils.js +218 -1
  325. package/src/components/list-view/use-list-view-block-indexes.js +29 -0
  326. package/src/components/list-view/use-list-view-drop-zone.js +78 -6
  327. package/src/components/list-view/utils.js +116 -0
  328. package/src/components/provider/index.js +3 -1
  329. package/src/components/recursion-provider/README.md +2 -2
  330. package/src/components/recursion-provider/index.js +17 -0
  331. package/src/components/rich-text/index.js +48 -10
  332. package/src/components/rich-text/native/index.native.js +10 -10
  333. package/src/components/use-block-drop-zone/index.js +60 -19
  334. package/src/components/use-block-drop-zone/test/index.js +32 -61
  335. package/src/components/use-on-block-drop/index.js +92 -11
  336. package/src/hooks/block-hooks.js +5 -17
  337. package/src/hooks/content-lock-ui.js +15 -55
  338. package/src/hooks/effects.js +57 -0
  339. package/src/hooks/index.js +2 -0
  340. package/src/hooks/index.native.js +1 -0
  341. package/src/hooks/style.js +8 -0
  342. package/src/hooks/supports.js +2 -0
  343. package/src/hooks/test/effects.js +39 -0
  344. package/src/hooks/typography.native.js +2 -2
  345. package/src/hooks/use-bindings-attributes.js +148 -0
  346. package/src/hooks/use-shadow-props.js +37 -0
  347. package/src/hooks/utils.js +10 -6
  348. package/src/index.js +2 -0
  349. package/src/store/actions.js +9 -4
  350. package/src/store/index.js +2 -0
  351. package/src/store/private-actions.js +32 -0
  352. package/src/store/private-selectors.js +78 -21
  353. package/src/store/reducer.js +49 -2
  354. package/src/store/resolvers.js +17 -0
  355. package/src/store/selectors.js +169 -161
  356. package/src/store/test/registry-selectors.js +431 -0
  357. package/src/store/test/selectors.js +14 -400
  358. package/src/store/utils.js +10 -33
  359. package/src/style.scss +0 -1
  360. package/src/utils/index.js +0 -1
  361. package/src/utils/math.js +12 -0
  362. package/src/utils/transform-styles/index.js +52 -37
  363. package/tsconfig.tsbuildinfo +1 -1
  364. package/build/components/iframe/use-compatibility-styles.js +0 -100
  365. package/build/components/iframe/use-compatibility-styles.js.map +0 -1
  366. package/build/utils/block-variation-transforms.js +0 -42
  367. package/build/utils/block-variation-transforms.js.map +0 -1
  368. package/build-module/components/iframe/use-compatibility-styles.js +0 -94
  369. package/build-module/components/iframe/use-compatibility-styles.js.map +0 -1
  370. package/build-module/utils/block-variation-transforms.js +0 -35
  371. package/build-module/utils/block-variation-transforms.js.map +0 -1
  372. package/src/components/block-switcher/test/__snapshots__/index.js.snap +0 -116
  373. package/src/components/contrast-checker/style.scss +0 -3
  374. package/src/components/iframe/use-compatibility-styles.js +0 -122
  375. package/src/utils/block-variation-transforms.js +0 -38
  376. package/src/utils/test/block-variation-transforms.js +0 -94
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { getInlineStyles } from './style';
5
+
6
+ // This utility is intended to assist where the serialization of the shadow
7
+ // block support is being skipped for a block but the shadow related CSS classes
8
+ // & styles still need to be generated so they can be applied to inner elements.
9
+
10
+ /**
11
+ * Provides the CSS class names and inline styles for a block's shadow support
12
+ * attributes.
13
+ *
14
+ * @param {Object} attributes Block attributes.
15
+ * @return {Object} Shadow block support derived CSS classes & styles.
16
+ */
17
+ export function getShadowClassesAndStyles( attributes ) {
18
+ const shadow = attributes.style?.shadow || '';
19
+
20
+ return {
21
+ className: undefined,
22
+ style: getInlineStyles( { shadow } ),
23
+ };
24
+ }
25
+
26
+ /**
27
+ * Derives the shadow related props for a block from its shadow block support
28
+ * attributes.
29
+ *
30
+ * @param {Object} attributes Block attributes.
31
+ *
32
+ * @return {Object} ClassName & style props from shadow block support.
33
+ */
34
+ export function useShadowProps( attributes ) {
35
+ const shadowProps = getShadowClassesAndStyles( attributes );
36
+ return shadowProps;
37
+ }
@@ -2,9 +2,9 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { getBlockSupport } from '@wordpress/blocks';
5
- import { useMemo, useEffect, useId, useState } from '@wordpress/element';
5
+ import { memo, useMemo, useEffect, useId, useState } from '@wordpress/element';
6
6
  import { useDispatch } from '@wordpress/data';
7
- import { createHigherOrderComponent, pure } from '@wordpress/compose';
7
+ import { createHigherOrderComponent } from '@wordpress/compose';
8
8
  import { addFilter } from '@wordpress/hooks';
9
9
 
10
10
  /**
@@ -221,6 +221,7 @@ export function useBlockSettings( name, parentLayout ) {
221
221
  isTextEnabled,
222
222
  isHeadingEnabled,
223
223
  isButtonEnabled,
224
+ shadow,
224
225
  ] = useSettings(
225
226
  'background.backgroundImage',
226
227
  'background.backgroundSize',
@@ -268,7 +269,8 @@ export function useBlockSettings( name, parentLayout ) {
268
269
  'color.link',
269
270
  'color.text',
270
271
  'color.heading',
271
- 'color.button'
272
+ 'color.button',
273
+ 'shadow'
272
274
  );
273
275
 
274
276
  const rawSettings = useMemo( () => {
@@ -345,6 +347,7 @@ export function useBlockSettings( name, parentLayout ) {
345
347
  },
346
348
  layout,
347
349
  parentLayout,
350
+ shadow,
348
351
  };
349
352
  }, [
350
353
  backgroundImage,
@@ -395,6 +398,7 @@ export function useBlockSettings( name, parentLayout ) {
395
398
  isTextEnabled,
396
399
  isHeadingEnabled,
397
400
  isButtonEnabled,
401
+ shadow,
398
402
  ] );
399
403
 
400
404
  return useSettingsForBlockElement( rawSettings, name );
@@ -402,10 +406,10 @@ export function useBlockSettings( name, parentLayout ) {
402
406
 
403
407
  export function createBlockEditFilter( features ) {
404
408
  // We don't want block controls to re-render when typing inside a block.
405
- // `pure` will prevent re-renders unless props change, so only pass the
409
+ // `memo` will prevent re-renders unless props change, so only pass the
406
410
  // needed props and not the whole attributes object.
407
411
  features = features.map( ( settings ) => {
408
- return { ...settings, Edit: pure( settings.edit ) };
412
+ return { ...settings, Edit: memo( settings.edit ) };
409
413
  } );
410
414
  const withBlockEditHooks = createHigherOrderComponent(
411
415
  ( OriginalBlockEdit ) => ( props ) => {
@@ -488,7 +492,7 @@ function BlockProps( { index, useBlockProps, setAllWrapperProps, ...props } ) {
488
492
  return null;
489
493
  }
490
494
 
491
- const BlockPropsPure = pure( BlockProps );
495
+ const BlockPropsPure = memo( BlockProps );
492
496
 
493
497
  export function createBlockListBlockFilter( features ) {
494
498
  const withBlockListBlockHooks = createHigherOrderComponent(
package/src/index.js CHANGED
@@ -11,6 +11,8 @@ export {
11
11
  useCustomSides as __experimentalUseCustomSides,
12
12
  getSpacingClassesAndStyles as __experimentalGetSpacingClassesAndStyles,
13
13
  getGapCSSValue as __experimentalGetGapCSSValue,
14
+ getShadowClassesAndStyles as __experimentalGetShadowClassesAndStyles,
15
+ useShadowProps as __experimentalUseShadowProps,
14
16
  useCachedTruthy,
15
17
  } from './hooks';
16
18
  export * from './components';
@@ -640,13 +640,15 @@ export function showInsertionPoint(
640
640
  index,
641
641
  __unstableOptions = {}
642
642
  ) {
643
- const { __unstableWithInserter, operation } = __unstableOptions;
643
+ const { __unstableWithInserter, operation, nearestSide } =
644
+ __unstableOptions;
644
645
  return {
645
646
  type: 'SHOW_INSERTION_POINT',
646
647
  rootClientId,
647
648
  index,
648
649
  __unstableWithInserter,
649
650
  operation,
651
+ nearestSide,
650
652
  };
651
653
  }
652
654
  /**
@@ -1679,20 +1681,23 @@ export function setBlockVisibility( updates ) {
1679
1681
  }
1680
1682
 
1681
1683
  /**
1682
- * Action that sets whether a block is being temporaritly edited as blocks.
1684
+ * Action that sets whether a block is being temporarily edited as blocks.
1683
1685
  *
1684
1686
  * DO-NOT-USE in production.
1685
1687
  * This action is created for internal/experimental only usage and may be
1686
1688
  * removed anytime without any warning, causing breakage on any plugin or theme invoking it.
1687
1689
  *
1688
- * @param {?string} temporarilyEditingAsBlocks The block's clientId being temporaritly edited as blocks.
1690
+ * @param {?string} temporarilyEditingAsBlocks The block's clientId being temporarily edited as blocks.
1691
+ * @param {?string} focusModeToRevert The focus mode to revert after temporarily edit as blocks finishes.
1689
1692
  */
1690
1693
  export function __unstableSetTemporarilyEditingAsBlocks(
1691
- temporarilyEditingAsBlocks
1694
+ temporarilyEditingAsBlocks,
1695
+ focusModeToRevert
1692
1696
  ) {
1693
1697
  return {
1694
1698
  type: 'SET_TEMPORARILY_EDITING_AS_BLOCKS',
1695
1699
  temporarilyEditingAsBlocks,
1700
+ focusModeToRevert,
1696
1701
  };
1697
1702
  }
1698
1703
 
@@ -10,6 +10,7 @@ import reducer from './reducer';
10
10
  import * as selectors from './selectors';
11
11
  import * as privateActions from './private-actions';
12
12
  import * as privateSelectors from './private-selectors';
13
+ import * as resolvers from './resolvers';
13
14
  import * as actions from './actions';
14
15
  import { STORE_NAME } from './constants';
15
16
  import { unlock } from '../lock-unlock';
@@ -22,6 +23,7 @@ import { unlock } from '../lock-unlock';
22
23
  export const storeConfig = {
23
24
  reducer,
24
25
  selectors,
26
+ resolvers,
25
27
  actions,
26
28
  };
27
29
 
@@ -338,3 +338,35 @@ export function setLastFocus( lastFocus = null ) {
338
338
  lastFocus,
339
339
  };
340
340
  }
341
+
342
+ /**
343
+ * Action that stops temporarily editing as blocks.
344
+ *
345
+ * @param {string} clientId The block's clientId.
346
+ */
347
+ export function stopEditingAsBlocks( clientId ) {
348
+ return ( { select, dispatch } ) => {
349
+ const focusModeToRevert =
350
+ select.__unstableGetTemporarilyEditingFocusModeToRevert();
351
+ dispatch.__unstableMarkNextChangeAsNotPersistent();
352
+ dispatch.updateBlockAttributes( clientId, {
353
+ templateLock: 'contentOnly',
354
+ } );
355
+ dispatch.updateBlockListSettings( clientId, {
356
+ ...select.getBlockListSettings( clientId ),
357
+ templateLock: 'contentOnly',
358
+ } );
359
+ dispatch.updateSettings( { focusMode: focusModeToRevert } );
360
+ dispatch.__unstableSetTemporarilyEditingAsBlocks();
361
+ };
362
+ }
363
+
364
+ export function registerBlockBindingsSource( source ) {
365
+ return {
366
+ type: 'REGISTER_BLOCK_BINDINGS_SOURCE',
367
+ sourceName: source.name,
368
+ sourceLabel: source.label,
369
+ useSource: source.useSource,
370
+ lockAttributesEditing: source.lockAttributesEditing,
371
+ };
372
+ }
@@ -3,6 +3,11 @@
3
3
  */
4
4
  import createSelector from 'rememo';
5
5
 
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { createRegistrySelector } from '@wordpress/data';
10
+
6
11
  /**
7
12
  * Internal dependencies
8
13
  */
@@ -11,11 +16,12 @@ import {
11
16
  getBlockParents,
12
17
  getBlockEditingMode,
13
18
  getSettings,
14
- __experimentalGetParsedPattern,
15
19
  canInsertBlockType,
16
- __experimentalGetAllowedPatterns,
17
20
  } from './selectors';
18
- import { getUserPatterns, checkAllowListRecursive } from './utils';
21
+ import { checkAllowListRecursive, getAllPatternsDependants } from './utils';
22
+ import { INSERTER_PATTERN_TYPES } from '../components/inserter/block-patterns-tab/utils';
23
+ import { store } from './';
24
+ import { unlock } from '../lock-unlock';
19
25
 
20
26
  /**
21
27
  * Returns true if the block interface is hidden, or false otherwise.
@@ -242,6 +248,10 @@ export const getInserterMediaCategories = createSelector(
242
248
  ]
243
249
  );
244
250
 
251
+ export function getFetchedPatterns( state ) {
252
+ return state.blockPatterns;
253
+ }
254
+
245
255
  /**
246
256
  * Returns whether there is at least one allowed pattern for inner blocks children.
247
257
  * This is useful for deferring the parsing of all patterns until needed.
@@ -251,35 +261,74 @@ export const getInserterMediaCategories = createSelector(
251
261
  *
252
262
  * @return {boolean} If there is at least one allowed pattern.
253
263
  */
254
- export const hasAllowedPatterns = createSelector(
255
- ( state, rootClientId = null ) => {
256
- const patterns = state.settings.__experimentalBlockPatterns;
257
- const userPatterns = getUserPatterns( state );
258
- const { allowedBlockTypes } = getSettings( state );
259
- return [ ...userPatterns, ...patterns ].some(
260
- ( { name, inserter = true } ) => {
264
+ export const hasAllowedPatterns = createRegistrySelector( ( select ) =>
265
+ createSelector(
266
+ ( state, rootClientId = null ) => {
267
+ const { getAllPatterns, __experimentalGetParsedPattern } = unlock(
268
+ select( store )
269
+ );
270
+ const patterns = getAllPatterns();
271
+ const { allowedBlockTypes } = getSettings( state );
272
+ return patterns.some( ( { name, inserter = true } ) => {
261
273
  if ( ! inserter ) {
262
274
  return false;
263
275
  }
264
- const { blocks } = __experimentalGetParsedPattern(
265
- state,
266
- name
267
- );
276
+ const { blocks } = __experimentalGetParsedPattern( name );
268
277
  return (
269
278
  checkAllowListRecursive( blocks, allowedBlockTypes ) &&
270
279
  blocks.every( ( { name: blockName } ) =>
271
280
  canInsertBlockType( state, blockName, rootClientId )
272
281
  )
273
282
  );
283
+ } );
284
+ },
285
+ ( state, rootClientId ) => [
286
+ getAllPatternsDependants( state ),
287
+ state.settings.allowedBlockTypes,
288
+ state.settings.templateLock,
289
+ state.blockListSettings[ rootClientId ],
290
+ state.blocks.byClientId.get( rootClientId ),
291
+ ]
292
+ )
293
+ );
294
+
295
+ export const getAllPatterns = createRegistrySelector( ( select ) =>
296
+ createSelector( ( state ) => {
297
+ // This setting is left for back compat.
298
+ const {
299
+ __experimentalBlockPatterns = [],
300
+ __experimentalUserPatternCategories = [],
301
+ __experimentalReusableBlocks = [],
302
+ } = state.settings;
303
+ const userPatterns = ( __experimentalReusableBlocks ?? [] ).map(
304
+ ( userPattern ) => {
305
+ return {
306
+ name: `core/block/${ userPattern.id }`,
307
+ id: userPattern.id,
308
+ type: INSERTER_PATTERN_TYPES.user,
309
+ title: userPattern.title.raw,
310
+ categories: userPattern.wp_pattern_category.map(
311
+ ( catId ) => {
312
+ const category = (
313
+ __experimentalUserPatternCategories ?? []
314
+ ).find( ( { id } ) => id === catId );
315
+ return category ? category.slug : catId;
316
+ }
317
+ ),
318
+ content: userPattern.content.raw,
319
+ syncStatus: userPattern.wp_pattern_sync_status,
320
+ };
274
321
  }
275
322
  );
276
- },
277
- ( state, rootClientId ) => [
278
- ...__experimentalGetAllowedPatterns.getDependants(
279
- state,
280
- rootClientId
281
- ),
282
- ]
323
+ return [
324
+ ...userPatterns,
325
+ ...__experimentalBlockPatterns,
326
+ ...unlock( select( store ) ).getFetchedPatterns(),
327
+ ].filter(
328
+ ( x, index, arr ) =>
329
+ index === arr.findIndex( ( y ) => x.name === y.name )
330
+ );
331
+ }, getAllPatternsDependants )
283
332
  );
284
333
 
285
334
  /**
@@ -292,3 +341,11 @@ export const hasAllowedPatterns = createSelector(
292
341
  export function getLastFocus( state ) {
293
342
  return state.lastFocus;
294
343
  }
344
+
345
+ export function getAllBlockBindingsSources( state ) {
346
+ return state.blockBindingsSources;
347
+ }
348
+
349
+ export function getBlockBindingsSource( state, sourceName ) {
350
+ return state.blockBindingsSources[ sourceName ];
351
+ }
@@ -1599,13 +1599,19 @@ export function blocksMode( state = {}, action ) {
1599
1599
  export function insertionPoint( state = null, action ) {
1600
1600
  switch ( action.type ) {
1601
1601
  case 'SHOW_INSERTION_POINT': {
1602
- const { rootClientId, index, __unstableWithInserter, operation } =
1603
- action;
1602
+ const {
1603
+ rootClientId,
1604
+ index,
1605
+ __unstableWithInserter,
1606
+ operation,
1607
+ nearestSide,
1608
+ } = action;
1604
1609
  const nextState = {
1605
1610
  rootClientId,
1606
1611
  index,
1607
1612
  __unstableWithInserter,
1608
1613
  operation,
1614
+ nearestSide,
1609
1615
  };
1610
1616
 
1611
1617
  // Bail out updates if the states are the same.
@@ -1906,6 +1912,21 @@ export function temporarilyEditingAsBlocks( state = '', action ) {
1906
1912
  return state;
1907
1913
  }
1908
1914
 
1915
+ /**
1916
+ * Reducer returning the focus mode that should be used when temporarily edit as blocks finishes.
1917
+ *
1918
+ * @param {Object} state Current state.
1919
+ * @param {Object} action Dispatched action.
1920
+ *
1921
+ * @return {Object} Updated state.
1922
+ */
1923
+ export function temporarilyEditingFocusModeRevert( state = '', action ) {
1924
+ if ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {
1925
+ return action.focusModeToRevert;
1926
+ }
1927
+ return state;
1928
+ }
1929
+
1909
1930
  /**
1910
1931
  * Reducer returning a map of block client IDs to block editing modes.
1911
1932
  *
@@ -2002,6 +2023,29 @@ export function lastFocus( state = false, action ) {
2002
2023
  return state;
2003
2024
  }
2004
2025
 
2026
+ function blockBindingsSources( state = {}, action ) {
2027
+ if ( action.type === 'REGISTER_BLOCK_BINDINGS_SOURCE' ) {
2028
+ return {
2029
+ ...state,
2030
+ [ action.sourceName ]: {
2031
+ label: action.sourceLabel,
2032
+ useSource: action.useSource,
2033
+ lockAttributesEditing: action.lockAttributesEditing,
2034
+ },
2035
+ };
2036
+ }
2037
+ return state;
2038
+ }
2039
+
2040
+ function blockPatterns( state = [], action ) {
2041
+ switch ( action.type ) {
2042
+ case 'RECEIVE_BLOCK_PATTERNS':
2043
+ return action.patterns;
2044
+ }
2045
+
2046
+ return state;
2047
+ }
2048
+
2005
2049
  const combinedReducers = combineReducers( {
2006
2050
  blocks,
2007
2051
  isTyping,
@@ -2024,6 +2068,7 @@ const combinedReducers = combineReducers( {
2024
2068
  highlightedBlock,
2025
2069
  lastBlockInserted,
2026
2070
  temporarilyEditingAsBlocks,
2071
+ temporarilyEditingFocusModeRevert,
2027
2072
  blockVisibility,
2028
2073
  blockEditingModes,
2029
2074
  styleOverrides,
@@ -2031,6 +2076,8 @@ const combinedReducers = combineReducers( {
2031
2076
  blockRemovalRules,
2032
2077
  openedBlockSettingsMenu,
2033
2078
  registeredInserterMediaCategories,
2079
+ blockBindingsSources,
2080
+ blockPatterns,
2034
2081
  } );
2035
2082
 
2036
2083
  function withAutomaticChangeReset( reducer ) {
@@ -0,0 +1,17 @@
1
+ export const getFetchedPatterns =
2
+ () =>
3
+ async ( { dispatch, select } ) => {
4
+ const { __experimentalFetchBlockPatterns } = select.getSettings();
5
+ if ( ! __experimentalFetchBlockPatterns ) {
6
+ return [];
7
+ }
8
+ const patterns = await __experimentalFetchBlockPatterns();
9
+ dispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );
10
+ };
11
+
12
+ getFetchedPatterns.shouldInvalidate = ( action ) => {
13
+ return (
14
+ action.type === 'UPDATE_SETTINGS' &&
15
+ !! action.settings.__experimentalFetchBlockPatterns
16
+ );
17
+ };