@wordpress/block-editor 7.0.2 → 8.0.1

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 (801) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +45 -1
  3. package/build/components/autocomplete/index.js +1 -1
  4. package/build/components/autocomplete/index.js.map +1 -1
  5. package/build/components/block-actions/index.js +8 -4
  6. package/build/components/block-actions/index.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.js +61 -14
  8. package/build/components/block-alignment-control/ui.js.map +1 -1
  9. package/build/components/block-alignment-control/use-available-alignments.js +25 -3
  10. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  11. package/build/components/block-controls/fill.js +2 -2
  12. package/build/components/block-controls/fill.js.map +1 -1
  13. package/build/components/block-controls/hook.js +3 -3
  14. package/build/components/block-controls/hook.js.map +1 -1
  15. package/build/components/block-icon/index.js +5 -1
  16. package/build/components/block-icon/index.js.map +1 -1
  17. package/build/components/block-icon/index.native.js +9 -11
  18. package/build/components/block-icon/index.native.js.map +1 -1
  19. package/build/components/block-inspector/index.js +8 -0
  20. package/build/components/block-inspector/index.js.map +1 -1
  21. package/build/components/block-list/block-html.js +5 -0
  22. package/build/components/block-list/block-html.js.map +1 -1
  23. package/build/components/block-list/block.js +12 -5
  24. package/build/components/block-list/block.js.map +1 -1
  25. package/build/components/block-list/block.native.js +4 -3
  26. package/build/components/block-list/block.native.js.map +1 -1
  27. package/build/components/block-list/index.native.js +1 -1
  28. package/build/components/block-list/index.native.js.map +1 -1
  29. package/build/components/block-list/use-block-props/use-multi-selection.js +21 -8
  30. package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  31. package/build/components/block-list-appender/index.js +9 -1
  32. package/build/components/block-list-appender/index.js.map +1 -1
  33. package/build/components/block-mover/index.js +4 -4
  34. package/build/components/block-mover/index.js.map +1 -1
  35. package/build/components/block-mover/index.native.js +4 -4
  36. package/build/components/block-mover/index.native.js.map +1 -1
  37. package/build/components/block-navigation/dropdown.js +0 -1
  38. package/build/components/block-navigation/dropdown.js.map +1 -1
  39. package/build/components/block-patterns-list/index.js +1 -8
  40. package/build/components/block-patterns-list/index.js.map +1 -1
  41. package/build/components/block-preview/auto.js +1 -1
  42. package/build/components/block-preview/auto.js.map +1 -1
  43. package/build/components/block-settings/container.native.js +5 -2
  44. package/build/components/block-settings/container.native.js.map +1 -1
  45. package/build/components/block-settings-menu/block-settings-dropdown.js +26 -5
  46. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  47. package/build/components/block-settings-menu-controls/index.js +10 -3
  48. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  49. package/build/components/block-styles/preview.native.js +2 -2
  50. package/build/components/block-styles/preview.native.js.map +1 -1
  51. package/build/components/block-switcher/block-styles-menu.js +1 -1
  52. package/build/components/block-switcher/block-styles-menu.js.map +1 -1
  53. package/build/components/block-switcher/index.js +10 -3
  54. package/build/components/block-switcher/index.js.map +1 -1
  55. package/build/components/block-title/index.js +3 -2
  56. package/build/components/block-title/index.js.map +1 -1
  57. package/build/components/block-tools/block-popover.js +2 -4
  58. package/build/components/block-tools/block-popover.js.map +1 -1
  59. package/build/components/block-tools/index.js +4 -1
  60. package/build/components/block-tools/index.js.map +1 -1
  61. package/build/components/block-tools/insertion-point.js +96 -7
  62. package/build/components/block-tools/insertion-point.js.map +1 -1
  63. package/build/components/border-radius-control/index.js.map +1 -1
  64. package/build/components/border-radius-control/utils.js +17 -8
  65. package/build/components/border-radius-control/utils.js.map +1 -1
  66. package/build/components/colors/utils.js +11 -3
  67. package/build/components/colors/utils.js.map +1 -1
  68. package/build/components/colors-gradients/control.js +22 -57
  69. package/build/components/colors-gradients/control.js.map +1 -1
  70. package/build/components/colors-gradients/panel-color-gradient-settings.js +83 -7
  71. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  72. package/build/components/contrast-checker/index.js +18 -12
  73. package/build/components/contrast-checker/index.js.map +1 -1
  74. package/build/components/copy-handler/index.js +9 -3
  75. package/build/components/copy-handler/index.js.map +1 -1
  76. package/build/components/default-block-appender/index.js +2 -2
  77. package/build/components/default-block-appender/index.js.map +1 -1
  78. package/build/components/duotone-control/index.js +41 -39
  79. package/build/components/duotone-control/index.js.map +1 -1
  80. package/build/components/editor-styles/index.js +9 -3
  81. package/build/components/editor-styles/index.js.map +1 -1
  82. package/build/components/font-appearance-control/index.js +32 -21
  83. package/build/components/font-appearance-control/index.js.map +1 -1
  84. package/build/components/iframe/index.js +6 -4
  85. package/build/components/iframe/index.js.map +1 -1
  86. package/build/components/image-editor/aspect-ratio-dropdown.js +126 -0
  87. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -0
  88. package/build/components/image-editor/constants.js +16 -0
  89. package/build/components/image-editor/constants.js.map +1 -0
  90. package/build/components/image-editor/context.js +59 -0
  91. package/build/components/image-editor/context.js.map +1 -0
  92. package/build/components/image-editor/cropper.js +83 -0
  93. package/build/components/image-editor/cropper.js.map +1 -0
  94. package/build/components/image-editor/form-controls.js +36 -0
  95. package/build/components/image-editor/form-controls.js.map +1 -0
  96. package/build/components/image-editor/index.js +60 -0
  97. package/build/components/image-editor/index.js.map +1 -0
  98. package/build/components/image-editor/rotation-button.js +37 -0
  99. package/build/components/image-editor/rotation-button.js.map +1 -0
  100. package/build/components/image-editor/use-save-image.js +84 -0
  101. package/build/components/image-editor/use-save-image.js.map +1 -0
  102. package/build/components/image-editor/use-transform-image.js +135 -0
  103. package/build/components/image-editor/use-transform-image.js.map +1 -0
  104. package/build/components/image-editor/zoom-dropdown.js +55 -0
  105. package/build/components/image-editor/zoom-dropdown.js.map +1 -0
  106. package/build/components/image-size-control/use-dimension-handler.js +14 -3
  107. package/build/components/image-size-control/use-dimension-handler.js.map +1 -1
  108. package/build/components/index.js +36 -20
  109. package/build/components/index.js.map +1 -1
  110. package/build/components/index.native.js +2 -2
  111. package/build/components/index.native.js.map +1 -1
  112. package/build/components/inner-blocks/button-block-appender.js +11 -1
  113. package/build/components/inner-blocks/button-block-appender.js.map +1 -1
  114. package/build/components/inner-blocks/index.js +8 -5
  115. package/build/components/inner-blocks/index.js.map +1 -1
  116. package/build/components/inner-blocks/index.native.js +4 -3
  117. package/build/components/inner-blocks/index.native.js.map +1 -1
  118. package/build/components/inner-blocks/use-nested-settings-update.js +24 -13
  119. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  120. package/build/components/inserter/block-patterns-explorer/explorer.js +62 -0
  121. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  122. package/build/components/inserter/block-patterns-explorer/patterns-list.js +111 -0
  123. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  124. package/build/components/inserter/block-patterns-explorer/sidebar.js +78 -0
  125. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  126. package/build/components/inserter/block-patterns-tab.js +74 -35
  127. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  128. package/build/components/inserter/block-types-tab.native.js +3 -11
  129. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  130. package/build/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  131. package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  132. package/build/components/inserter/hooks/use-clipboard-block.native.js +5 -4
  133. package/build/components/inserter/hooks/use-clipboard-block.native.js.map +1 -1
  134. package/build/components/inserter/index.js +12 -4
  135. package/build/components/inserter/index.js.map +1 -1
  136. package/build/components/inserter/index.native.js +1 -7
  137. package/build/components/inserter/index.native.js.map +1 -1
  138. package/build/components/inserter/library.js +2 -0
  139. package/build/components/inserter/library.js.map +1 -1
  140. package/build/components/inserter/menu.js +2 -1
  141. package/build/components/inserter/menu.js.map +1 -1
  142. package/build/components/inserter/menu.native.js +11 -15
  143. package/build/components/inserter/menu.native.js.map +1 -1
  144. package/build/components/inserter/pattern-panel.js +19 -10
  145. package/build/components/inserter/pattern-panel.js.map +1 -1
  146. package/build/components/inserter/preview-panel.js +1 -1
  147. package/build/components/inserter/preview-panel.js.map +1 -1
  148. package/build/components/inserter/quick-inserter.js +2 -1
  149. package/build/components/inserter/quick-inserter.js.map +1 -1
  150. package/build/components/inserter/reusable-blocks-tab.native.js +5 -6
  151. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  152. package/build/components/inserter/search-results.native.js +6 -11
  153. package/build/components/inserter/search-results.native.js.map +1 -1
  154. package/build/components/inserter/utils.native.js +44 -0
  155. package/build/components/inserter/utils.native.js.map +1 -0
  156. package/build/components/inspector-controls/block-support-slot-container.js +28 -0
  157. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -0
  158. package/build/components/inspector-controls/block-support-tools-panel.js +78 -0
  159. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -0
  160. package/build/components/inspector-controls/fill.js +16 -1
  161. package/build/components/inspector-controls/fill.js.map +1 -1
  162. package/build/components/inspector-controls/groups.js +5 -1
  163. package/build/components/inspector-controls/groups.js.map +1 -1
  164. package/build/components/inspector-controls/slot.js +15 -0
  165. package/build/components/inspector-controls/slot.js.map +1 -1
  166. package/build/components/letter-spacing-control/index.js +9 -6
  167. package/build/components/letter-spacing-control/index.js.map +1 -1
  168. package/build/components/link-control/index.js +93 -34
  169. package/build/components/link-control/index.js.map +1 -1
  170. package/build/components/link-control/link-preview.js +45 -15
  171. package/build/components/link-control/link-preview.js.map +1 -1
  172. package/build/components/link-control/search-input.js +25 -7
  173. package/build/components/link-control/search-input.js.map +1 -1
  174. package/build/components/list-view/block-contents.js +1 -20
  175. package/build/components/list-view/block-contents.js.map +1 -1
  176. package/build/components/list-view/block.js +54 -69
  177. package/build/components/list-view/block.js.map +1 -1
  178. package/build/components/list-view/branch.js +102 -76
  179. package/build/components/list-view/branch.js.map +1 -1
  180. package/build/components/list-view/index.js +45 -20
  181. package/build/components/list-view/index.js.map +1 -1
  182. package/build/components/list-view/leaf.js +2 -2
  183. package/build/components/list-view/leaf.js.map +1 -1
  184. package/build/components/list-view/list-item.js +3 -2
  185. package/build/components/list-view/list-item.js.map +1 -1
  186. package/build/components/list-view/use-list-view-client-ids.js +13 -54
  187. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  188. package/build/components/media-placeholder/index.js +29 -20
  189. package/build/components/media-placeholder/index.js.map +1 -1
  190. package/build/components/media-replace-flow/index.js +5 -3
  191. package/build/components/media-replace-flow/index.js.map +1 -1
  192. package/build/components/navigable-toolbar/index.js +1 -4
  193. package/build/components/navigable-toolbar/index.js.map +1 -1
  194. package/build/components/observe-typing/index.js +1 -1
  195. package/build/components/observe-typing/index.js.map +1 -1
  196. package/build/components/plain-text/index.native.js +30 -1
  197. package/build/components/plain-text/index.native.js.map +1 -1
  198. package/build/components/rich-text/embed-handler-picker.native.js +66 -0
  199. package/build/components/rich-text/embed-handler-picker.native.js.map +1 -0
  200. package/build/components/rich-text/format-edit.js +28 -2
  201. package/build/components/rich-text/format-edit.js.map +1 -1
  202. package/build/components/rich-text/format-toolbar/index.js +32 -11
  203. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  204. package/build/components/rich-text/index.js +5 -1
  205. package/build/components/rich-text/index.js.map +1 -1
  206. package/build/components/rich-text/index.native.js +41 -2
  207. package/build/components/rich-text/index.native.js.map +1 -1
  208. package/build/components/rich-text/use-paste-handler.js +28 -9
  209. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  210. package/build/components/rich-text/utils.js +22 -0
  211. package/build/components/rich-text/utils.js.map +1 -1
  212. package/build/components/typewriter/index.js +1 -1
  213. package/build/components/typewriter/index.js.map +1 -1
  214. package/build/components/url-input/index.js +25 -11
  215. package/build/components/url-input/index.js.map +1 -1
  216. package/build/components/use-moving-animation/index.js +13 -10
  217. package/build/components/use-moving-animation/index.js.map +1 -1
  218. package/build/components/use-on-block-drop/index.js +2 -1
  219. package/build/components/use-on-block-drop/index.js.map +1 -1
  220. package/build/components/use-setting/index.js +48 -9
  221. package/build/components/use-setting/index.js.map +1 -1
  222. package/build/components/writing-flow/use-multi-selection.js +6 -0
  223. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  224. package/build/components/writing-flow/use-tab-nav.js +10 -1
  225. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  226. package/build/hooks/align.js +13 -10
  227. package/build/hooks/align.js.map +1 -1
  228. package/build/hooks/anchor.js +1 -1
  229. package/build/hooks/anchor.js.map +1 -1
  230. package/build/hooks/border.js +5 -5
  231. package/build/hooks/border.js.map +1 -1
  232. package/build/hooks/color-panel.js +5 -2
  233. package/build/hooks/color-panel.js.map +1 -1
  234. package/build/hooks/color.js +1 -1
  235. package/build/hooks/color.js.map +1 -1
  236. package/build/hooks/dimensions.js +23 -27
  237. package/build/hooks/dimensions.js.map +1 -1
  238. package/build/hooks/duotone.js +60 -16
  239. package/build/hooks/duotone.js.map +1 -1
  240. package/build/hooks/font-appearance.js +49 -6
  241. package/build/hooks/font-appearance.js.map +1 -1
  242. package/build/hooks/font-family.js +123 -32
  243. package/build/hooks/font-family.js.map +1 -1
  244. package/build/hooks/font-size.js +51 -9
  245. package/build/hooks/font-size.js.map +1 -1
  246. package/build/hooks/gap.js +2 -1
  247. package/build/hooks/gap.js.map +1 -1
  248. package/build/hooks/index.js +10 -0
  249. package/build/hooks/index.js.map +1 -1
  250. package/build/hooks/index.native.js +8 -0
  251. package/build/hooks/index.native.js.map +1 -1
  252. package/build/hooks/letter-spacing.js +44 -7
  253. package/build/hooks/letter-spacing.js.map +1 -1
  254. package/build/hooks/line-height.js +45 -8
  255. package/build/hooks/line-height.js.map +1 -1
  256. package/build/hooks/lock.js +43 -0
  257. package/build/hooks/lock.js.map +1 -0
  258. package/build/hooks/margin.js +1 -1
  259. package/build/hooks/margin.js.map +1 -1
  260. package/build/hooks/padding.js +1 -1
  261. package/build/hooks/padding.js.map +1 -1
  262. package/build/hooks/style.js +7 -4
  263. package/build/hooks/style.js.map +1 -1
  264. package/build/hooks/text-decoration.js +42 -6
  265. package/build/hooks/text-decoration.js.map +1 -1
  266. package/build/hooks/text-transform.js +42 -6
  267. package/build/hooks/text-transform.js.map +1 -1
  268. package/build/hooks/typography.js +108 -8
  269. package/build/hooks/typography.js.map +1 -1
  270. package/build/hooks/use-cached-truthy.js +29 -0
  271. package/build/hooks/use-cached-truthy.js.map +1 -0
  272. package/build/index.js +7 -0
  273. package/build/index.js.map +1 -1
  274. package/build/layouts/flex.js +160 -34
  275. package/build/layouts/flex.js.map +1 -1
  276. package/build/layouts/flow.js +75 -8
  277. package/build/layouts/flow.js.map +1 -1
  278. package/build/store/actions.js +323 -265
  279. package/build/store/actions.js.map +1 -1
  280. package/build/store/defaults.native.js +13 -1
  281. package/build/store/defaults.native.js.map +1 -1
  282. package/build/store/index.js +1 -3
  283. package/build/store/index.js.map +1 -1
  284. package/build/store/reducer.js +33 -22
  285. package/build/store/reducer.js.map +1 -1
  286. package/build/store/selectors.js +172 -38
  287. package/build/store/selectors.js.map +1 -1
  288. package/build/utils/index.js +10 -1
  289. package/build/utils/index.js.map +1 -1
  290. package/build/utils/parse-css-unit-to-px.js +51 -1
  291. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  292. package/build/utils/transform-styles/transforms/wrap.js +16 -0
  293. package/build/utils/transform-styles/transforms/wrap.js.map +1 -1
  294. package/build-module/components/autocomplete/index.js +2 -2
  295. package/build-module/components/autocomplete/index.js.map +1 -1
  296. package/build-module/components/block-actions/index.js +8 -4
  297. package/build-module/components/block-actions/index.js.map +1 -1
  298. package/build-module/components/block-alignment-control/ui.js +64 -17
  299. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  300. package/build-module/components/block-alignment-control/use-available-alignments.js +25 -3
  301. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  302. package/build-module/components/block-controls/fill.js +2 -2
  303. package/build-module/components/block-controls/fill.js.map +1 -1
  304. package/build-module/components/block-controls/hook.js +3 -3
  305. package/build-module/components/block-controls/hook.js.map +1 -1
  306. package/build-module/components/block-icon/index.js +5 -1
  307. package/build-module/components/block-icon/index.js.map +1 -1
  308. package/build-module/components/block-icon/index.native.js +10 -11
  309. package/build-module/components/block-icon/index.native.js.map +1 -1
  310. package/build-module/components/block-inspector/index.js +8 -0
  311. package/build-module/components/block-inspector/index.js.map +1 -1
  312. package/build-module/components/block-list/block-html.js +5 -0
  313. package/build-module/components/block-list/block-html.js.map +1 -1
  314. package/build-module/components/block-list/block.js +12 -5
  315. package/build-module/components/block-list/block.js.map +1 -1
  316. package/build-module/components/block-list/block.native.js +4 -3
  317. package/build-module/components/block-list/block.native.js.map +1 -1
  318. package/build-module/components/block-list/index.native.js +1 -1
  319. package/build-module/components/block-list/index.native.js.map +1 -1
  320. package/build-module/components/block-list/use-block-props/use-multi-selection.js +21 -8
  321. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  322. package/build-module/components/block-list-appender/index.js +9 -1
  323. package/build-module/components/block-list-appender/index.js.map +1 -1
  324. package/build-module/components/block-mover/index.js +4 -4
  325. package/build-module/components/block-mover/index.js.map +1 -1
  326. package/build-module/components/block-mover/index.native.js +4 -4
  327. package/build-module/components/block-mover/index.native.js.map +1 -1
  328. package/build-module/components/block-navigation/dropdown.js +0 -1
  329. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  330. package/build-module/components/block-patterns-list/index.js +1 -6
  331. package/build-module/components/block-patterns-list/index.js.map +1 -1
  332. package/build-module/components/block-preview/auto.js +1 -1
  333. package/build-module/components/block-preview/auto.js.map +1 -1
  334. package/build-module/components/block-settings/container.native.js +6 -3
  335. package/build-module/components/block-settings/container.native.js.map +1 -1
  336. package/build-module/components/block-settings-menu/block-settings-dropdown.js +28 -7
  337. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  338. package/build-module/components/block-settings-menu-controls/index.js +10 -3
  339. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  340. package/build-module/components/block-styles/preview.native.js +2 -2
  341. package/build-module/components/block-styles/preview.native.js.map +1 -1
  342. package/build-module/components/block-switcher/block-styles-menu.js +1 -1
  343. package/build-module/components/block-switcher/block-styles-menu.js.map +1 -1
  344. package/build-module/components/block-switcher/index.js +10 -3
  345. package/build-module/components/block-switcher/index.js.map +1 -1
  346. package/build-module/components/block-title/index.js +3 -2
  347. package/build-module/components/block-title/index.js.map +1 -1
  348. package/build-module/components/block-tools/block-popover.js +3 -5
  349. package/build-module/components/block-tools/block-popover.js.map +1 -1
  350. package/build-module/components/block-tools/index.js +4 -1
  351. package/build-module/components/block-tools/index.js.map +1 -1
  352. package/build-module/components/block-tools/insertion-point.js +96 -8
  353. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  354. package/build-module/components/border-radius-control/index.js.map +1 -1
  355. package/build-module/components/border-radius-control/utils.js +16 -9
  356. package/build-module/components/border-radius-control/utils.js.map +1 -1
  357. package/build-module/components/colors/utils.js +9 -3
  358. package/build-module/components/colors/utils.js.map +1 -1
  359. package/build-module/components/colors-gradients/control.js +26 -63
  360. package/build-module/components/colors-gradients/control.js.map +1 -1
  361. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +84 -7
  362. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  363. package/build-module/components/contrast-checker/index.js +13 -10
  364. package/build-module/components/contrast-checker/index.js.map +1 -1
  365. package/build-module/components/copy-handler/index.js +9 -3
  366. package/build-module/components/copy-handler/index.js.map +1 -1
  367. package/build-module/components/default-block-appender/index.js +2 -2
  368. package/build-module/components/default-block-appender/index.js.map +1 -1
  369. package/build-module/components/duotone-control/index.js +43 -39
  370. package/build-module/components/duotone-control/index.js.map +1 -1
  371. package/build-module/components/editor-styles/index.js +7 -3
  372. package/build-module/components/editor-styles/index.js.map +1 -1
  373. package/build-module/components/font-appearance-control/index.js +28 -21
  374. package/build-module/components/font-appearance-control/index.js.map +1 -1
  375. package/build-module/components/iframe/index.js +6 -4
  376. package/build-module/components/iframe/index.js.map +1 -1
  377. package/build-module/components/image-editor/aspect-ratio-dropdown.js +115 -0
  378. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -0
  379. package/build-module/components/image-editor/constants.js +7 -0
  380. package/build-module/components/image-editor/constants.js.map +1 -0
  381. package/build-module/components/image-editor/context.js +44 -0
  382. package/build-module/components/image-editor/context.js.map +1 -0
  383. package/build-module/components/image-editor/cropper.js +69 -0
  384. package/build-module/components/image-editor/cropper.js.map +1 -0
  385. package/build-module/components/image-editor/form-controls.js +26 -0
  386. package/build-module/components/image-editor/form-controls.js.map +1 -0
  387. package/build-module/components/image-editor/index.js +37 -0
  388. package/build-module/components/image-editor/index.js.map +1 -0
  389. package/build-module/components/image-editor/rotation-button.js +26 -0
  390. package/build-module/components/image-editor/rotation-button.js.map +1 -0
  391. package/build-module/components/image-editor/use-save-image.js +70 -0
  392. package/build-module/components/image-editor/use-save-image.js.map +1 -0
  393. package/build-module/components/image-editor/use-transform-image.js +127 -0
  394. package/build-module/components/image-editor/use-transform-image.js.map +1 -0
  395. package/build-module/components/image-editor/zoom-dropdown.js +43 -0
  396. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -0
  397. package/build-module/components/image-size-control/use-dimension-handler.js +13 -2
  398. package/build-module/components/image-size-control/use-dimension-handler.js.map +1 -1
  399. package/build-module/components/index.js +4 -3
  400. package/build-module/components/index.js.map +1 -1
  401. package/build-module/components/index.native.js +1 -1
  402. package/build-module/components/index.native.js.map +1 -1
  403. package/build-module/components/inner-blocks/button-block-appender.js +10 -1
  404. package/build-module/components/inner-blocks/button-block-appender.js.map +1 -1
  405. package/build-module/components/inner-blocks/index.js +9 -6
  406. package/build-module/components/inner-blocks/index.js.map +1 -1
  407. package/build-module/components/inner-blocks/index.native.js +5 -4
  408. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  409. package/build-module/components/inner-blocks/use-nested-settings-update.js +24 -13
  410. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  411. package/build-module/components/inserter/block-patterns-explorer/explorer.js +50 -0
  412. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  413. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +92 -0
  414. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  415. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +69 -0
  416. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  417. package/build-module/components/inserter/block-patterns-tab.js +75 -36
  418. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  419. package/build-module/components/inserter/block-types-tab.native.js +2 -10
  420. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  421. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  422. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  423. package/build-module/components/inserter/hooks/use-clipboard-block.native.js +5 -4
  424. package/build-module/components/inserter/hooks/use-clipboard-block.native.js.map +1 -1
  425. package/build-module/components/inserter/index.js +12 -4
  426. package/build-module/components/inserter/index.js.map +1 -1
  427. package/build-module/components/inserter/index.native.js +1 -7
  428. package/build-module/components/inserter/index.native.js.map +1 -1
  429. package/build-module/components/inserter/library.js +2 -0
  430. package/build-module/components/inserter/library.js.map +1 -1
  431. package/build-module/components/inserter/menu.js +2 -1
  432. package/build-module/components/inserter/menu.js.map +1 -1
  433. package/build-module/components/inserter/menu.native.js +10 -15
  434. package/build-module/components/inserter/menu.native.js.map +1 -1
  435. package/build-module/components/inserter/pattern-panel.js +21 -13
  436. package/build-module/components/inserter/pattern-panel.js.map +1 -1
  437. package/build-module/components/inserter/preview-panel.js +1 -1
  438. package/build-module/components/inserter/preview-panel.js.map +1 -1
  439. package/build-module/components/inserter/quick-inserter.js +2 -1
  440. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  441. package/build-module/components/inserter/reusable-blocks-tab.native.js +4 -5
  442. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  443. package/build-module/components/inserter/search-results.native.js +5 -10
  444. package/build-module/components/inserter/search-results.native.js.map +1 -1
  445. package/build-module/components/inserter/utils.native.js +35 -0
  446. package/build-module/components/inserter/utils.native.js.map +1 -0
  447. package/build-module/components/inspector-controls/block-support-slot-container.js +18 -0
  448. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -0
  449. package/build-module/components/inspector-controls/block-support-tools-panel.js +67 -0
  450. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -0
  451. package/build-module/components/inspector-controls/fill.js +16 -2
  452. package/build-module/components/inspector-controls/fill.js.map +1 -1
  453. package/build-module/components/inspector-controls/groups.js +5 -1
  454. package/build-module/components/inspector-controls/groups.js.map +1 -1
  455. package/build-module/components/inspector-controls/slot.js +13 -0
  456. package/build-module/components/inspector-controls/slot.js.map +1 -1
  457. package/build-module/components/letter-spacing-control/index.js +9 -6
  458. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  459. package/build-module/components/link-control/index.js +93 -35
  460. package/build-module/components/link-control/index.js.map +1 -1
  461. package/build-module/components/link-control/link-preview.js +46 -17
  462. package/build-module/components/link-control/link-preview.js.map +1 -1
  463. package/build-module/components/link-control/search-input.js +24 -7
  464. package/build-module/components/link-control/search-input.js.map +1 -1
  465. package/build-module/components/list-view/block-contents.js +1 -18
  466. package/build-module/components/list-view/block-contents.js.map +1 -1
  467. package/build-module/components/list-view/block.js +56 -71
  468. package/build-module/components/list-view/block.js.map +1 -1
  469. package/build-module/components/list-view/branch.js +102 -78
  470. package/build-module/components/list-view/branch.js.map +1 -1
  471. package/build-module/components/list-view/index.js +48 -23
  472. package/build-module/components/list-view/index.js.map +1 -1
  473. package/build-module/components/list-view/leaf.js +2 -2
  474. package/build-module/components/list-view/leaf.js.map +1 -1
  475. package/build-module/components/list-view/list-item.js +3 -2
  476. package/build-module/components/list-view/list-item.js.map +1 -1
  477. package/build-module/components/list-view/use-list-view-client-ids.js +13 -54
  478. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  479. package/build-module/components/media-placeholder/index.js +29 -20
  480. package/build-module/components/media-placeholder/index.js.map +1 -1
  481. package/build-module/components/media-replace-flow/index.js +5 -3
  482. package/build-module/components/media-replace-flow/index.js.map +1 -1
  483. package/build-module/components/navigable-toolbar/index.js +1 -4
  484. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  485. package/build-module/components/observe-typing/index.js +1 -1
  486. package/build-module/components/observe-typing/index.js.map +1 -1
  487. package/build-module/components/plain-text/index.native.js +29 -2
  488. package/build-module/components/plain-text/index.native.js.map +1 -1
  489. package/build-module/components/rich-text/embed-handler-picker.native.js +54 -0
  490. package/build-module/components/rich-text/embed-handler-picker.native.js.map +1 -0
  491. package/build-module/components/rich-text/format-edit.js +28 -3
  492. package/build-module/components/rich-text/format-edit.js.map +1 -1
  493. package/build-module/components/rich-text/format-toolbar/index.js +29 -11
  494. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  495. package/build-module/components/rich-text/index.js +4 -1
  496. package/build-module/components/rich-text/index.js.map +1 -1
  497. package/build-module/components/rich-text/index.native.js +41 -3
  498. package/build-module/components/rich-text/index.native.js.map +1 -1
  499. package/build-module/components/rich-text/use-paste-handler.js +28 -9
  500. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  501. package/build-module/components/rich-text/utils.js +20 -0
  502. package/build-module/components/rich-text/utils.js.map +1 -1
  503. package/build-module/components/typewriter/index.js +1 -1
  504. package/build-module/components/typewriter/index.js.map +1 -1
  505. package/build-module/components/url-input/index.js +25 -11
  506. package/build-module/components/url-input/index.js.map +1 -1
  507. package/build-module/components/use-moving-animation/index.js +13 -10
  508. package/build-module/components/use-moving-animation/index.js.map +1 -1
  509. package/build-module/components/use-on-block-drop/index.js +3 -2
  510. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  511. package/build-module/components/use-setting/index.js +48 -9
  512. package/build-module/components/use-setting/index.js.map +1 -1
  513. package/build-module/components/writing-flow/use-multi-selection.js +6 -0
  514. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  515. package/build-module/components/writing-flow/use-tab-nav.js +10 -1
  516. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  517. package/build-module/hooks/align.js +13 -10
  518. package/build-module/hooks/align.js.map +1 -1
  519. package/build-module/hooks/anchor.js +1 -1
  520. package/build-module/hooks/anchor.js.map +1 -1
  521. package/build-module/hooks/border.js +5 -5
  522. package/build-module/hooks/border.js.map +1 -1
  523. package/build-module/hooks/color-panel.js +6 -3
  524. package/build-module/hooks/color-panel.js.map +1 -1
  525. package/build-module/hooks/color.js +1 -1
  526. package/build-module/hooks/color.js.map +1 -1
  527. package/build-module/hooks/dimensions.js +24 -27
  528. package/build-module/hooks/dimensions.js.map +1 -1
  529. package/build-module/hooks/duotone.js +59 -16
  530. package/build-module/hooks/duotone.js.map +1 -1
  531. package/build-module/hooks/font-appearance.js +45 -6
  532. package/build-module/hooks/font-appearance.js.map +1 -1
  533. package/build-module/hooks/font-family.js +117 -33
  534. package/build-module/hooks/font-family.js.map +1 -1
  535. package/build-module/hooks/font-size.js +47 -9
  536. package/build-module/hooks/font-size.js.map +1 -1
  537. package/build-module/hooks/gap.js +2 -1
  538. package/build-module/hooks/gap.js.map +1 -1
  539. package/build-module/hooks/index.js +2 -0
  540. package/build-module/hooks/index.js.map +1 -1
  541. package/build-module/hooks/index.native.js +1 -0
  542. package/build-module/hooks/index.native.js.map +1 -1
  543. package/build-module/hooks/letter-spacing.js +40 -7
  544. package/build-module/hooks/letter-spacing.js.map +1 -1
  545. package/build-module/hooks/line-height.js +41 -8
  546. package/build-module/hooks/line-height.js.map +1 -1
  547. package/build-module/hooks/lock.js +33 -0
  548. package/build-module/hooks/lock.js.map +1 -0
  549. package/build-module/hooks/margin.js +1 -1
  550. package/build-module/hooks/margin.js.map +1 -1
  551. package/build-module/hooks/padding.js +1 -1
  552. package/build-module/hooks/padding.js.map +1 -1
  553. package/build-module/hooks/style.js +7 -4
  554. package/build-module/hooks/style.js.map +1 -1
  555. package/build-module/hooks/text-decoration.js +38 -6
  556. package/build-module/hooks/text-decoration.js.map +1 -1
  557. package/build-module/hooks/text-transform.js +38 -6
  558. package/build-module/hooks/text-transform.js.map +1 -1
  559. package/build-module/hooks/typography.js +117 -17
  560. package/build-module/hooks/typography.js.map +1 -1
  561. package/build-module/hooks/use-cached-truthy.js +21 -0
  562. package/build-module/hooks/use-cached-truthy.js.map +1 -0
  563. package/build-module/index.js +1 -1
  564. package/build-module/index.js.map +1 -1
  565. package/build-module/layouts/flex.js +163 -38
  566. package/build-module/layouts/flex.js.map +1 -1
  567. package/build-module/layouts/flow.js +74 -8
  568. package/build-module/layouts/flow.js.map +1 -1
  569. package/build-module/store/actions.js +286 -241
  570. package/build-module/store/actions.js.map +1 -1
  571. package/build-module/store/defaults.native.js +12 -1
  572. package/build-module/store/defaults.native.js.map +1 -1
  573. package/build-module/store/index.js +1 -2
  574. package/build-module/store/index.js.map +1 -1
  575. package/build-module/store/reducer.js +33 -22
  576. package/build-module/store/reducer.js.map +1 -1
  577. package/build-module/store/selectors.js +160 -34
  578. package/build-module/store/selectors.js.map +1 -1
  579. package/build-module/utils/index.js +1 -0
  580. package/build-module/utils/index.js.map +1 -1
  581. package/build-module/utils/parse-css-unit-to-px.js +48 -1
  582. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  583. package/build-module/utils/transform-styles/transforms/wrap.js +16 -0
  584. package/build-module/utils/transform-styles/transforms/wrap.js.map +1 -1
  585. package/build-style/style-rtl.css +267 -144
  586. package/build-style/style.css +267 -144
  587. package/package.json +28 -27
  588. package/src/components/autocomplete/index.js +5 -2
  589. package/src/components/block-actions/index.js +9 -5
  590. package/src/components/block-alignment-control/style.scss +5 -0
  591. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +15 -1
  592. package/src/components/block-alignment-control/test/index.native.js +37 -0
  593. package/src/components/block-alignment-control/ui.js +98 -27
  594. package/src/components/block-alignment-control/use-available-alignments.js +31 -10
  595. package/src/components/block-controls/fill.js +5 -2
  596. package/src/components/block-controls/hook.js +3 -3
  597. package/src/components/block-draggable/style.scss +19 -4
  598. package/src/components/block-icon/index.js +4 -1
  599. package/src/components/block-icon/index.native.js +10 -16
  600. package/src/components/block-inspector/index.js +10 -0
  601. package/src/components/block-list/block-html.js +5 -0
  602. package/src/components/block-list/block.js +11 -3
  603. package/src/components/block-list/block.native.js +5 -3
  604. package/src/components/block-list/index.native.js +1 -1
  605. package/src/components/block-list/style.scss +15 -0
  606. package/src/components/block-list/use-block-props/use-multi-selection.js +27 -7
  607. package/src/components/block-list-appender/index.js +8 -0
  608. package/src/components/block-mover/index.js +4 -4
  609. package/src/components/block-mover/index.native.js +4 -4
  610. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +10 -6
  611. package/src/components/block-mover/test/index.native.js +26 -28
  612. package/src/components/block-navigation/dropdown.js +0 -1
  613. package/src/components/block-patterns-list/index.js +1 -8
  614. package/src/components/block-patterns-list/style.scss +22 -12
  615. package/src/components/block-preview/README.md +1 -1
  616. package/src/components/block-preview/auto.js +1 -1
  617. package/src/components/block-preview/style.scss +0 -17
  618. package/src/components/block-settings/container.native.js +7 -0
  619. package/src/components/block-settings-menu/block-settings-dropdown.js +26 -13
  620. package/src/components/block-settings-menu-controls/index.js +9 -6
  621. package/src/components/block-styles/preview.native.js +2 -2
  622. package/src/components/block-switcher/block-styles-menu.js +1 -1
  623. package/src/components/block-switcher/index.js +7 -3
  624. package/src/components/block-switcher/test/__snapshots__/index.js.snap +1 -1
  625. package/src/components/block-switcher/test/index.js +3 -0
  626. package/src/components/block-title/index.js +5 -2
  627. package/src/components/block-tools/block-popover.js +3 -5
  628. package/src/components/block-tools/index.js +5 -2
  629. package/src/components/block-tools/insertion-point.js +97 -9
  630. package/src/components/block-tools/style.scss +4 -35
  631. package/src/components/block-types-list/style.scss +0 -3
  632. package/src/components/border-radius-control/index.js +1 -0
  633. package/src/components/border-radius-control/test/utils.js +216 -0
  634. package/src/components/border-radius-control/utils.js +18 -10
  635. package/src/components/color-palette/test/__snapshots__/control.js.snap +128 -71
  636. package/src/components/colors/test/utils.js +41 -0
  637. package/src/components/colors/utils.js +9 -5
  638. package/src/components/colors-gradients/control.js +70 -110
  639. package/src/components/colors-gradients/panel-color-gradient-settings.js +79 -7
  640. package/src/components/colors-gradients/style.scss +10 -18
  641. package/src/components/colors-gradients/test/control.js +41 -66
  642. package/src/components/contrast-checker/index.js +14 -10
  643. package/src/components/copy-handler/index.js +6 -1
  644. package/src/components/default-block-appender/index.js +2 -2
  645. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +3 -3
  646. package/src/components/duotone-control/index.js +49 -41
  647. package/src/components/duotone-control/style.scss +27 -12
  648. package/src/components/editor-styles/index.js +7 -4
  649. package/src/components/font-appearance-control/index.js +41 -33
  650. package/src/components/font-appearance-control/style.scss +1 -1
  651. package/src/components/iframe/index.js +4 -4
  652. package/src/components/image-editor/aspect-ratio-dropdown.js +129 -0
  653. package/src/components/image-editor/constants.js +6 -0
  654. package/src/components/image-editor/context.js +56 -0
  655. package/src/components/image-editor/cropper.js +74 -0
  656. package/src/components/image-editor/form-controls.js +22 -0
  657. package/src/components/image-editor/index.js +52 -0
  658. package/src/components/image-editor/rotation-button.js +24 -0
  659. package/src/components/image-editor/use-save-image.js +97 -0
  660. package/src/components/image-editor/use-transform-image.js +162 -0
  661. package/src/components/image-editor/zoom-dropdown.js +40 -0
  662. package/src/components/image-size-control/use-dimension-handler.js +18 -1
  663. package/src/components/index.js +7 -6
  664. package/src/components/index.native.js +1 -4
  665. package/src/components/inner-blocks/button-block-appender.js +9 -0
  666. package/src/components/inner-blocks/index.js +8 -4
  667. package/src/components/inner-blocks/index.native.js +7 -4
  668. package/src/components/inner-blocks/use-nested-settings-update.js +26 -11
  669. package/src/components/inserter/block-patterns-explorer/explorer.js +50 -0
  670. package/src/components/inserter/block-patterns-explorer/patterns-list.js +122 -0
  671. package/src/components/inserter/block-patterns-explorer/sidebar.js +73 -0
  672. package/src/components/inserter/block-patterns-tab.js +107 -73
  673. package/src/components/inserter/block-types-tab.native.js +3 -15
  674. package/src/components/inserter/hooks/use-block-type-impressions.native.js +14 -21
  675. package/src/components/inserter/hooks/use-clipboard-block.native.js +3 -2
  676. package/src/components/inserter/index.js +15 -3
  677. package/src/components/inserter/index.native.js +2 -19
  678. package/src/components/inserter/library.js +2 -0
  679. package/src/components/inserter/menu.js +4 -1
  680. package/src/components/inserter/menu.native.js +9 -14
  681. package/src/components/inserter/pattern-panel.js +33 -16
  682. package/src/components/inserter/preview-panel.js +1 -1
  683. package/src/components/inserter/quick-inserter.js +1 -1
  684. package/src/components/inserter/reusable-blocks-tab.native.js +4 -6
  685. package/src/components/inserter/search-results.native.js +5 -15
  686. package/src/components/inserter/style.scss +80 -16
  687. package/src/components/inserter/test/block-types-tab.native.js +1 -1
  688. package/src/components/inserter/test/fixtures/index.native.js +12 -0
  689. package/src/components/inserter/utils.native.js +35 -0
  690. package/src/components/inserter-list-item/style.scss +4 -2
  691. package/src/components/inspector-controls/block-support-slot-container.js +10 -0
  692. package/src/components/inspector-controls/block-support-tools-panel.js +60 -0
  693. package/src/components/inspector-controls/fill.js +23 -2
  694. package/src/components/inspector-controls/groups.js +8 -0
  695. package/src/components/inspector-controls/slot.js +15 -0
  696. package/src/components/letter-spacing-control/index.js +12 -6
  697. package/src/components/link-control/README.md +47 -14
  698. package/src/components/link-control/index.js +102 -31
  699. package/src/components/link-control/link-preview.js +53 -20
  700. package/src/components/link-control/search-input.js +21 -7
  701. package/src/components/link-control/style.scss +66 -19
  702. package/src/components/link-control/test/index.js +311 -4
  703. package/src/components/list-view/block-contents.js +17 -38
  704. package/src/components/list-view/block.js +73 -84
  705. package/src/components/list-view/branch.js +123 -94
  706. package/src/components/list-view/index.js +82 -30
  707. package/src/components/list-view/leaf.js +2 -2
  708. package/src/components/list-view/list-item.js +5 -4
  709. package/src/components/list-view/style.scss +70 -33
  710. package/src/components/list-view/use-list-view-client-ids.js +9 -68
  711. package/src/components/media-placeholder/index.js +26 -19
  712. package/src/components/media-replace-flow/README.md +7 -0
  713. package/src/components/media-replace-flow/index.js +4 -1
  714. package/src/components/media-upload/README.md +1 -1
  715. package/src/components/navigable-toolbar/index.js +1 -4
  716. package/src/components/observe-typing/index.js +3 -2
  717. package/src/components/plain-text/index.native.js +26 -4
  718. package/src/components/rich-text/embed-handler-picker.native.js +68 -0
  719. package/src/components/rich-text/format-edit.js +36 -2
  720. package/src/components/rich-text/format-toolbar/index.js +25 -6
  721. package/src/components/rich-text/index.js +12 -8
  722. package/src/components/rich-text/index.native.js +35 -1
  723. package/src/components/rich-text/use-paste-handler.js +30 -12
  724. package/src/components/rich-text/utils.js +16 -0
  725. package/src/components/skip-to-selected-block/README.md +39 -0
  726. package/src/components/typewriter/index.js +3 -2
  727. package/src/components/url-input/index.js +26 -10
  728. package/src/components/use-moving-animation/index.js +9 -8
  729. package/src/components/use-on-block-drop/index.js +5 -1
  730. package/src/components/use-setting/index.js +49 -11
  731. package/src/components/writing-flow/use-multi-selection.js +6 -0
  732. package/src/components/writing-flow/use-tab-nav.js +17 -3
  733. package/src/hooks/align.js +19 -10
  734. package/src/hooks/anchor.js +2 -2
  735. package/src/hooks/border.js +8 -11
  736. package/src/hooks/color-panel.js +4 -1
  737. package/src/hooks/color.js +7 -4
  738. package/src/hooks/dimensions.js +48 -59
  739. package/src/hooks/duotone.js +68 -19
  740. package/src/hooks/font-appearance.js +38 -7
  741. package/src/hooks/font-family.js +129 -33
  742. package/src/hooks/font-size.js +42 -6
  743. package/src/hooks/gap.js +2 -1
  744. package/src/hooks/index.js +2 -0
  745. package/src/hooks/index.native.js +1 -0
  746. package/src/hooks/layout.scss +8 -0
  747. package/src/hooks/letter-spacing.js +35 -7
  748. package/src/hooks/line-height.js +37 -9
  749. package/src/hooks/lock.js +34 -0
  750. package/src/hooks/margin.js +1 -1
  751. package/src/hooks/padding.js +1 -1
  752. package/src/hooks/style.js +15 -11
  753. package/src/hooks/text-decoration.js +34 -6
  754. package/src/hooks/text-transform.js +34 -6
  755. package/src/hooks/typography.js +165 -15
  756. package/src/hooks/typography.scss +16 -0
  757. package/src/hooks/use-cached-truthy.js +20 -0
  758. package/src/index.js +1 -0
  759. package/src/layouts/flex.js +179 -50
  760. package/src/layouts/flow.js +54 -8
  761. package/src/store/actions.js +239 -377
  762. package/src/store/defaults.native.js +12 -0
  763. package/src/store/index.js +1 -2
  764. package/src/store/reducer.js +54 -18
  765. package/src/store/selectors.js +173 -47
  766. package/src/store/test/actions.js +407 -705
  767. package/src/store/test/reducer.js +22 -54
  768. package/src/store/test/selectors.js +79 -21
  769. package/src/style.scss +2 -1
  770. package/src/utils/index.js +1 -0
  771. package/src/utils/parse-css-unit-to-px.js +43 -1
  772. package/src/utils/test/parse-css-unit-to-px.js +148 -165
  773. package/src/utils/transform-styles/transforms/test/wrap.js +1 -1
  774. package/src/utils/transform-styles/transforms/wrap.js +16 -0
  775. package/tsconfig.tsbuildinfo +1 -1
  776. package/build/components/duotone-control/duotone-picker-popover.js +0 -44
  777. package/build/components/duotone-control/duotone-picker-popover.js.map +0 -1
  778. package/build/components/list-view/block-slot.js +0 -121
  779. package/build/components/list-view/block-slot.js.map +0 -1
  780. package/build/components/list-view/editor.js +0 -35
  781. package/build/components/list-view/editor.js.map +0 -1
  782. package/build/components/text-decoration-and-transform/index.js +0 -39
  783. package/build/components/text-decoration-and-transform/index.js.map +0 -1
  784. package/build/store/controls.js +0 -44
  785. package/build/store/controls.js.map +0 -1
  786. package/build-module/components/duotone-control/duotone-picker-popover.js +0 -35
  787. package/build-module/components/duotone-control/duotone-picker-popover.js.map +0 -1
  788. package/build-module/components/list-view/block-slot.js +0 -96
  789. package/build-module/components/list-view/block-slot.js.map +0 -1
  790. package/build-module/components/list-view/editor.js +0 -25
  791. package/build-module/components/list-view/editor.js.map +0 -1
  792. package/build-module/components/text-decoration-and-transform/index.js +0 -30
  793. package/build-module/components/text-decoration-and-transform/index.js.map +0 -1
  794. package/build-module/store/controls.js +0 -32
  795. package/build-module/store/controls.js.map +0 -1
  796. package/src/components/duotone-control/duotone-picker-popover.js +0 -36
  797. package/src/components/list-view/block-slot.js +0 -120
  798. package/src/components/list-view/editor.js +0 -29
  799. package/src/components/text-decoration-and-transform/index.js +0 -36
  800. package/src/components/text-decoration-and-transform/style.scss +0 -3
  801. package/src/store/controls.js +0 -39
@@ -9,56 +9,57 @@ import { castArray, findKey, first, isObject, last, some } from 'lodash';
9
9
  import { cloneBlock, __experimentalCloneSanitizedBlock, createBlock, doBlocksMatchTemplate, getBlockType, getDefaultBlockName, hasBlockSupport, switchToBlockType, synchronizeBlocksWithTemplate } from '@wordpress/blocks';
10
10
  import { speak } from '@wordpress/a11y';
11
11
  import { __, _n, sprintf } from '@wordpress/i18n';
12
- import { controls } from '@wordpress/data';
13
12
  import { create, insert, remove, toHTMLString } from '@wordpress/rich-text';
14
13
  import deprecated from '@wordpress/deprecated';
15
14
  /**
16
- * Internal dependencies
17
- */
18
-
19
- import { __unstableMarkAutomaticChangeFinalControl } from '../store/controls';
20
- import { STORE_NAME as blockEditorStoreName } from './constants';
21
- /**
22
- * Generator which will yield a default block insert action if there
23
- * are no other blocks at the root of the editor. This generator should be used
15
+ * Action which will insert a default block insert action if there
16
+ * are no other blocks at the root of the editor. This action should be used
24
17
  * in actions which may result in no blocks remaining in the editor (removal,
25
18
  * replacement, etc).
26
19
  */
27
20
 
28
- function* ensureDefaultBlock() {
29
- const count = yield controls.select(blockEditorStoreName, 'getBlockCount'); // To avoid a focus loss when removing the last block, assure there is
21
+ const ensureDefaultBlock = () => ({
22
+ select,
23
+ dispatch
24
+ }) => {
25
+ // To avoid a focus loss when removing the last block, assure there is
30
26
  // always a default block if the last of the blocks have been removed.
27
+ const count = select.getBlockCount();
31
28
 
32
- if (count === 0) {
33
- const {
34
- __unstableHasCustomAppender
35
- } = yield controls.select(blockEditorStoreName, 'getSettings'); // If there's an custom appender, don't insert default block.
36
- // We have to remember to manually move the focus elsewhere to
37
- // prevent it from being lost though.
29
+ if (count > 0) {
30
+ return;
31
+ } // If there's an custom appender, don't insert default block.
32
+ // We have to remember to manually move the focus elsewhere to
33
+ // prevent it from being lost though.
38
34
 
39
- if (__unstableHasCustomAppender) {
40
- return;
41
- }
42
35
 
43
- return yield insertDefaultBlock();
36
+ const {
37
+ __unstableHasCustomAppender
38
+ } = select.getSettings();
39
+
40
+ if (__unstableHasCustomAppender) {
41
+ return;
44
42
  }
45
- }
43
+
44
+ dispatch.insertDefaultBlock();
45
+ };
46
46
  /**
47
- * Returns an action object used in signalling that blocks state should be
48
- * reset to the specified array of blocks, taking precedence over any other
49
- * content reflected as an edit in state.
47
+ * Action that resets blocks state to the specified array of blocks, taking precedence
48
+ * over any other content reflected as an edit in state.
50
49
  *
51
50
  * @param {Array} blocks Array of blocks.
52
51
  */
53
52
 
54
53
 
55
- export function* resetBlocks(blocks) {
56
- yield {
54
+ export const resetBlocks = blocks => ({
55
+ dispatch
56
+ }) => {
57
+ dispatch({
57
58
  type: 'RESET_BLOCKS',
58
59
  blocks
59
- };
60
- return yield* validateBlocksToTemplate(blocks);
61
- }
60
+ });
61
+ dispatch(validateBlocksToTemplate(blocks));
62
+ };
62
63
  /**
63
64
  * Block validity is a function of blocks state (at the point of a
64
65
  * reset) and the template setting. As a compromise to its placement
@@ -68,20 +69,23 @@ export function* resetBlocks(blocks) {
68
69
  * @param {Array} blocks Array of blocks.
69
70
  */
70
71
 
71
- export function* validateBlocksToTemplate(blocks) {
72
- const template = yield controls.select(blockEditorStoreName, 'getTemplate');
73
- const templateLock = yield controls.select(blockEditorStoreName, 'getTemplateLock'); // Unlocked templates are considered always valid because they act
72
+ export const validateBlocksToTemplate = blocks => ({
73
+ select,
74
+ dispatch
75
+ }) => {
76
+ const template = select.getTemplate();
77
+ const templateLock = select.getTemplateLock(); // Unlocked templates are considered always valid because they act
74
78
  // as default values only.
75
79
 
76
80
  const isBlocksValidToTemplate = !template || templateLock !== 'all' || doBlocksMatchTemplate(blocks, template); // Update if validity has changed.
77
81
 
78
- const isValidTemplate = yield controls.select(blockEditorStoreName, 'isValidTemplate');
82
+ const isValidTemplate = select.isValidTemplate();
79
83
 
80
84
  if (isBlocksValidToTemplate !== isValidTemplate) {
81
- yield setTemplateValidity(isBlocksValidToTemplate);
85
+ dispatch.setTemplateValidity(isBlocksValidToTemplate);
82
86
  return isBlocksValidToTemplate;
83
87
  }
84
- }
88
+ };
85
89
  /**
86
90
  * A block selection object.
87
91
  *
@@ -93,6 +97,8 @@ export function* validateBlocksToTemplate(blocks) {
93
97
  * text value. See `wp.richText.create`.
94
98
  */
95
99
 
100
+ /* eslint-disable jsdoc/valid-types */
101
+
96
102
  /**
97
103
  * Returns an action object used in signalling that selection state should be
98
104
  * reset to the specified selection.
@@ -105,6 +111,7 @@ export function* validateBlocksToTemplate(blocks) {
105
111
  */
106
112
 
107
113
  export function resetSelection(selectionStart, selectionEnd, initialPosition) {
114
+ /* eslint-enable jsdoc/valid-types */
108
115
  return {
109
116
  type: 'RESET_SELECTION',
110
117
  selectionStart,
@@ -135,8 +142,7 @@ export function receiveBlocks(blocks) {
135
142
  };
136
143
  }
137
144
  /**
138
- * Returns an action object used in signalling that the multiple blocks'
139
- * attributes with the specified client IDs have been updated.
145
+ * Action that updates attributes of multiple blocks with the specified client IDs.
140
146
  *
141
147
  * @param {string|string[]} clientIds Block client IDs.
142
148
  * @param {Object} attributes Block attributes to be merged. Should be keyed by clientIds if
@@ -154,8 +160,7 @@ export function updateBlockAttributes(clientIds, attributes, uniqueByBlock = fal
154
160
  };
155
161
  }
156
162
  /**
157
- * Returns an action object used in signalling that the block with the
158
- * specified client ID has been updated.
163
+ * Action that updates the block with the specified client ID.
159
164
  *
160
165
  * @param {string} clientId Block client ID.
161
166
  * @param {Object} updates Block attributes to be merged.
@@ -170,6 +175,8 @@ export function updateBlock(clientId, updates) {
170
175
  updates
171
176
  };
172
177
  }
178
+ /* eslint-disable jsdoc/valid-types */
179
+
173
180
  /**
174
181
  * Returns an action object used in signalling that the block with the
175
182
  * specified client ID has been selected, optionally accepting a position
@@ -184,6 +191,7 @@ export function updateBlock(clientId, updates) {
184
191
  */
185
192
 
186
193
  export function selectBlock(clientId, initialPosition = 0) {
194
+ /* eslint-enable jsdoc/valid-types */
187
195
  return {
188
196
  type: 'SELECT_BLOCK',
189
197
  initialPosition,
@@ -197,14 +205,16 @@ export function selectBlock(clientId, initialPosition = 0) {
197
205
  * @param {string} clientId Block client ID.
198
206
  */
199
207
 
200
- export function* selectPreviousBlock(clientId) {
201
- const previousBlockClientId = yield controls.select(blockEditorStoreName, 'getPreviousBlockClientId', clientId);
208
+ export const selectPreviousBlock = clientId => ({
209
+ select,
210
+ dispatch
211
+ }) => {
212
+ const previousBlockClientId = select.getPreviousBlockClientId(clientId);
202
213
 
203
214
  if (previousBlockClientId) {
204
- yield selectBlock(previousBlockClientId, -1);
205
- return [previousBlockClientId];
215
+ dispatch.selectBlock(previousBlockClientId, -1);
206
216
  }
207
- }
217
+ };
208
218
  /**
209
219
  * Yields action objects used in signalling that the block following the given
210
220
  * clientId should be selected.
@@ -212,16 +222,18 @@ export function* selectPreviousBlock(clientId) {
212
222
  * @param {string} clientId Block client ID.
213
223
  */
214
224
 
215
- export function* selectNextBlock(clientId) {
216
- const nextBlockClientId = yield controls.select(blockEditorStoreName, 'getNextBlockClientId', clientId);
225
+ export const selectNextBlock = clientId => ({
226
+ select,
227
+ dispatch
228
+ }) => {
229
+ const nextBlockClientId = select.getNextBlockClientId(clientId);
217
230
 
218
231
  if (nextBlockClientId) {
219
- yield selectBlock(nextBlockClientId);
220
- return [nextBlockClientId];
232
+ dispatch.selectBlock(nextBlockClientId);
221
233
  }
222
- }
234
+ };
223
235
  /**
224
- * Returns an action object used in signalling that a block multi-selection has started.
236
+ * Action that starts block multi-selection.
225
237
  *
226
238
  * @return {Object} Action object.
227
239
  */
@@ -232,7 +244,7 @@ export function startMultiSelect() {
232
244
  };
233
245
  }
234
246
  /**
235
- * Returns an action object used in signalling that block multi-selection stopped.
247
+ * Action that stops block multi-selection.
236
248
  *
237
249
  * @return {Object} Action object.
238
250
  */
@@ -243,32 +255,35 @@ export function stopMultiSelect() {
243
255
  };
244
256
  }
245
257
  /**
246
- * Returns an action object used in signalling that block multi-selection changed.
258
+ * Action that changes block multi-selection.
247
259
  *
248
260
  * @param {string} start First block of the multi selection.
249
261
  * @param {string} end Last block of the multiselection.
250
262
  */
251
263
 
252
- export function* multiSelect(start, end) {
253
- const startBlockRootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', start);
254
- const endBlockRootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', end); // Only allow block multi-selections at the same level.
264
+ export const multiSelect = (start, end) => ({
265
+ select,
266
+ dispatch
267
+ }) => {
268
+ const startBlockRootClientId = select.getBlockRootClientId(start);
269
+ const endBlockRootClientId = select.getBlockRootClientId(end); // Only allow block multi-selections at the same level.
255
270
 
256
271
  if (startBlockRootClientId !== endBlockRootClientId) {
257
272
  return;
258
273
  }
259
274
 
260
- yield {
275
+ dispatch({
261
276
  type: 'MULTI_SELECT',
262
277
  start,
263
278
  end
264
- };
265
- const blockCount = yield controls.select(blockEditorStoreName, 'getSelectedBlockCount');
279
+ });
280
+ const blockCount = select.getSelectedBlockCount();
266
281
  speak(sprintf(
267
282
  /* translators: %s: number of selected blocks */
268
283
  _n('%s block selected.', '%s blocks selected.', blockCount), blockCount), 'assertive');
269
- }
284
+ };
270
285
  /**
271
- * Returns an action object used in signalling that the block selection is cleared.
286
+ * Action that clears the block selection.
272
287
  *
273
288
  * @return {Object} Action object.
274
289
  */
@@ -279,7 +294,7 @@ export function clearSelectedBlock() {
279
294
  };
280
295
  }
281
296
  /**
282
- * Returns an action object that enables or disables block selection.
297
+ * Action that enables or disables block selection.
283
298
  *
284
299
  * @param {boolean} [isSelectionEnabled=true] Whether block selection should
285
300
  * be enabled.
@@ -328,9 +343,10 @@ function getBlocksWithDefaultStylesApplied(blocks, blockEditorSettings) {
328
343
  };
329
344
  });
330
345
  }
346
+ /* eslint-disable jsdoc/valid-types */
347
+
331
348
  /**
332
- * Returns an action object signalling that a blocks should be replaced with
333
- * one or more replacement blocks.
349
+ * Action that replaces given blocks with one or more replacement blocks.
334
350
  *
335
351
  * @param {(string|string[])} clientIds Block client ID(s) to replace.
336
352
  * @param {(Object|Object[])} blocks Replacement block(s).
@@ -338,25 +354,29 @@ function getBlocksWithDefaultStylesApplied(blocks, blockEditorSettings) {
338
354
  * @param {0|-1|null} initialPosition Index of caret after in the selected block after the operation.
339
355
  * @param {?Object} meta Optional Meta values to be passed to the action object.
340
356
  *
341
- * @yield {Object} Action object.
357
+ * @return {Object} Action object.
342
358
  */
343
359
 
344
360
 
345
- export function* replaceBlocks(clientIds, blocks, indexToSelect, initialPosition = 0, meta) {
361
+ export const replaceBlocks = (clientIds, blocks, indexToSelect, initialPosition = 0, meta) => ({
362
+ select,
363
+ dispatch
364
+ }) => {
365
+ /* eslint-enable jsdoc/valid-types */
346
366
  clientIds = castArray(clientIds);
347
- blocks = getBlocksWithDefaultStylesApplied(castArray(blocks), yield controls.select(blockEditorStoreName, 'getSettings'));
348
- const rootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', first(clientIds)); // Replace is valid if the new blocks can be inserted in the root block.
367
+ blocks = getBlocksWithDefaultStylesApplied(castArray(blocks), select.getSettings());
368
+ const rootClientId = select.getBlockRootClientId(first(clientIds)); // Replace is valid if the new blocks can be inserted in the root block.
349
369
 
350
370
  for (let index = 0; index < blocks.length; index++) {
351
371
  const block = blocks[index];
352
- const canInsertBlock = yield controls.select(blockEditorStoreName, 'canInsertBlockType', block.name, rootClientId);
372
+ const canInsertBlock = select.canInsertBlockType(block.name, rootClientId);
353
373
 
354
374
  if (!canInsertBlock) {
355
375
  return;
356
376
  }
357
377
  }
358
378
 
359
- yield {
379
+ dispatch({
360
380
  type: 'REPLACE_BLOCKS',
361
381
  clientIds,
362
382
  blocks,
@@ -364,12 +384,11 @@ export function* replaceBlocks(clientIds, blocks, indexToSelect, initialPosition
364
384
  indexToSelect,
365
385
  initialPosition,
366
386
  meta
367
- };
368
- yield* ensureDefaultBlock();
369
- }
387
+ });
388
+ dispatch(ensureDefaultBlock());
389
+ };
370
390
  /**
371
- * Returns an action object signalling that a single block should be replaced
372
- * with one or more replacement blocks.
391
+ * Action that replaces a single block with one or more replacement blocks.
373
392
  *
374
393
  * @param {(string|string[])} clientId Block client ID to replace.
375
394
  * @param {(Object|Object[])} block Replacement block(s).
@@ -389,82 +408,83 @@ export function replaceBlock(clientId, block) {
389
408
  * @return {Function} Action creator.
390
409
  */
391
410
 
392
- function createOnMove(type) {
393
- return (clientIds, rootClientId) => {
394
- return {
395
- clientIds: castArray(clientIds),
396
- type,
397
- rootClientId
398
- };
399
- };
400
- }
411
+ const createOnMove = type => (clientIds, rootClientId) => ({
412
+ select,
413
+ dispatch
414
+ }) => {
415
+ // If one of the blocks is locked or the parent is locked, we cannot move any block.
416
+ const canMoveBlocks = select.canMoveBlocks(clientIds, rootClientId);
417
+
418
+ if (!canMoveBlocks) {
419
+ return;
420
+ }
421
+
422
+ dispatch({
423
+ type,
424
+ clientIds: castArray(clientIds),
425
+ rootClientId
426
+ });
427
+ };
401
428
 
402
429
  export const moveBlocksDown = createOnMove('MOVE_BLOCKS_DOWN');
403
430
  export const moveBlocksUp = createOnMove('MOVE_BLOCKS_UP');
404
431
  /**
405
- * Returns an action object signalling that the given blocks should be moved to
406
- * a new position.
432
+ * Action that moves given blocks to a new position.
407
433
  *
408
434
  * @param {?string} clientIds The client IDs of the blocks.
409
435
  * @param {?string} fromRootClientId Root client ID source.
410
436
  * @param {?string} toRootClientId Root client ID destination.
411
437
  * @param {number} index The index to move the blocks to.
412
- *
413
- * @yield {Object} Action object.
414
438
  */
415
439
 
416
- export function* moveBlocksToPosition(clientIds, fromRootClientId = '', toRootClientId = '', index) {
417
- const templateLock = yield controls.select(blockEditorStoreName, 'getTemplateLock', fromRootClientId); // If locking is equal to all on the original clientId (fromRootClientId),
418
- // it is not possible to move the block to any other position.
440
+ export const moveBlocksToPosition = (clientIds, fromRootClientId = '', toRootClientId = '', index) => ({
441
+ select,
442
+ dispatch
443
+ }) => {
444
+ const canMoveBlocks = select.canMoveBlocks(clientIds, fromRootClientId); // If one of the blocks is locked or the parent is locked, we cannot move any block.
419
445
 
420
- if (templateLock === 'all') {
446
+ if (!canMoveBlocks) {
421
447
  return;
448
+ } // If moving inside the same root block the move is always possible.
449
+
450
+
451
+ if (fromRootClientId !== toRootClientId) {
452
+ const canRemoveBlocks = select.canRemoveBlocks(clientIds, fromRootClientId); // If we're moving to another block, it means we're deleting blocks from
453
+ // the original block, so we need to check if removing is possible.
454
+
455
+ if (!canRemoveBlocks) {
456
+ return;
457
+ }
458
+
459
+ const canInsertBlocks = select.canInsertBlocks(clientIds, toRootClientId); // If moving to other parent block, the move is possible if we can insert a block of the same type inside the new parent block.
460
+
461
+ if (!canInsertBlocks) {
462
+ return;
463
+ }
422
464
  }
423
465
 
424
- const action = {
466
+ dispatch({
425
467
  type: 'MOVE_BLOCKS_TO_POSITION',
426
468
  fromRootClientId,
427
469
  toRootClientId,
428
470
  clientIds,
429
471
  index
430
- }; // If moving inside the same root block the move is always possible.
431
-
432
- if (fromRootClientId === toRootClientId) {
433
- yield action;
434
- return;
435
- } // If templateLock is insert we can not remove the block from the parent.
436
- // Given that here we know that we are moving the block to a different
437
- // parent, the move should not be possible if the condition is true.
438
-
439
-
440
- if (templateLock === 'insert') {
441
- return;
442
- }
443
-
444
- const canInsertBlocks = yield controls.select(blockEditorStoreName, 'canInsertBlocks', clientIds, toRootClientId); // If moving to other parent block, the move is possible if we can insert a block of the same type inside the new parent block.
445
-
446
- if (canInsertBlocks) {
447
- yield action;
448
- }
449
- }
472
+ });
473
+ };
450
474
  /**
451
- * Returns an action object signalling that the given block should be moved to a
452
- * new position.
475
+ * Action that moves given block to a new position.
453
476
  *
454
477
  * @param {?string} clientId The client ID of the block.
455
478
  * @param {?string} fromRootClientId Root client ID source.
456
479
  * @param {?string} toRootClientId Root client ID destination.
457
480
  * @param {number} index The index to move the block to.
458
- *
459
- * @yield {Object} Action object.
460
481
  */
461
482
 
462
- export function* moveBlockToPosition(clientId, fromRootClientId = '', toRootClientId = '', index) {
463
- yield moveBlocksToPosition([clientId], fromRootClientId, toRootClientId, index);
483
+ export function moveBlockToPosition(clientId, fromRootClientId = '', toRootClientId = '', index) {
484
+ return moveBlocksToPosition([clientId], fromRootClientId, toRootClientId, index);
464
485
  }
465
486
  /**
466
- * Returns an action object used in signalling that a single block should be
467
- * inserted, optionally at a specific index respective a root block list.
487
+ * Action that inserts a single block, optionally at a specific index respective a root block list.
468
488
  *
469
489
  * @param {Object} block Block object to insert.
470
490
  * @param {?number} index Index at which block should be inserted.
@@ -475,12 +495,13 @@ export function* moveBlockToPosition(clientId, fromRootClientId = '', toRootClie
475
495
  * @return {Object} Action object.
476
496
  */
477
497
 
478
- export function insertBlock(block, index, rootClientId, updateSelection = true, meta) {
498
+ export function insertBlock(block, index, rootClientId, updateSelection, meta) {
479
499
  return insertBlocks([block], index, rootClientId, updateSelection, 0, meta);
480
500
  }
501
+ /* eslint-disable jsdoc/valid-types */
502
+
481
503
  /**
482
- * Returns an action object used in signalling that an array of blocks should
483
- * be inserted, optionally at a specific index respective a root block list.
504
+ * Action that inserts an array of blocks, optionally at a specific index respective a root block list.
484
505
  *
485
506
  * @param {Object[]} blocks Block objects to insert.
486
507
  * @param {?number} index Index at which block should be inserted.
@@ -491,7 +512,11 @@ export function insertBlock(block, index, rootClientId, updateSelection = true,
491
512
  * @return {Object} Action object.
492
513
  */
493
514
 
494
- export function* insertBlocks(blocks, index, rootClientId, updateSelection = true, initialPosition = 0, meta) {
515
+ export const insertBlocks = (blocks, index, rootClientId, updateSelection = true, initialPosition = 0, meta) => ({
516
+ select,
517
+ dispatch
518
+ }) => {
519
+ /* eslint-enable jsdoc/valid-types */
495
520
  if (isObject(initialPosition)) {
496
521
  meta = initialPosition;
497
522
  initialPosition = 0;
@@ -502,11 +527,11 @@ export function* insertBlocks(blocks, index, rootClientId, updateSelection = tru
502
527
  });
503
528
  }
504
529
 
505
- blocks = getBlocksWithDefaultStylesApplied(castArray(blocks), yield controls.select(blockEditorStoreName, 'getSettings'));
530
+ blocks = getBlocksWithDefaultStylesApplied(castArray(blocks), select.getSettings());
506
531
  const allowedBlocks = [];
507
532
 
508
533
  for (const block of blocks) {
509
- const isValid = yield controls.select(blockEditorStoreName, 'canInsertBlockType', block.name, rootClientId);
534
+ const isValid = select.canInsertBlockType(block.name, rootClientId);
510
535
 
511
536
  if (isValid) {
512
537
  allowedBlocks.push(block);
@@ -514,7 +539,7 @@ export function* insertBlocks(blocks, index, rootClientId, updateSelection = tru
514
539
  }
515
540
 
516
541
  if (allowedBlocks.length) {
517
- return {
542
+ dispatch({
518
543
  type: 'INSERT_BLOCKS',
519
544
  blocks: allowedBlocks,
520
545
  index,
@@ -523,12 +548,11 @@ export function* insertBlocks(blocks, index, rootClientId, updateSelection = tru
523
548
  updateSelection,
524
549
  initialPosition: updateSelection ? initialPosition : null,
525
550
  meta
526
- };
551
+ });
527
552
  }
528
- }
553
+ };
529
554
  /**
530
- * Returns an action object used in signalling that the insertion point should
531
- * be shown.
555
+ * Action that shows the insertion point.
532
556
  *
533
557
  * @param {?string} rootClientId Optional root client ID of block list on
534
558
  * which to insert.
@@ -550,7 +574,7 @@ export function showInsertionPoint(rootClientId, index, __unstableOptions = {})
550
574
  };
551
575
  }
552
576
  /**
553
- * Returns an action object hiding the insertion point.
577
+ * Action that hides the insertion point.
554
578
  *
555
579
  * @return {Object} Action object.
556
580
  */
@@ -561,7 +585,7 @@ export function hideInsertionPoint() {
561
585
  };
562
586
  }
563
587
  /**
564
- * Returns an action object resetting the template validity.
588
+ * Action that resets the template validity.
565
589
  *
566
590
  * @param {boolean} isValid template validity flag.
567
591
  *
@@ -575,49 +599,55 @@ export function setTemplateValidity(isValid) {
575
599
  };
576
600
  }
577
601
  /**
578
- * Returns an action object synchronize the template with the list of blocks
602
+ * Action that synchronizes the template with the list of blocks.
579
603
  *
580
604
  * @return {Object} Action object.
581
605
  */
582
606
 
583
- export function* synchronizeTemplate() {
584
- yield {
607
+ export const synchronizeTemplate = () => ({
608
+ select,
609
+ dispatch
610
+ }) => {
611
+ dispatch({
585
612
  type: 'SYNCHRONIZE_TEMPLATE'
586
- };
587
- const blocks = yield controls.select(blockEditorStoreName, 'getBlocks');
588
- const template = yield controls.select(blockEditorStoreName, 'getTemplate');
613
+ });
614
+ const blocks = select.getBlocks();
615
+ const template = select.getTemplate();
589
616
  const updatedBlockList = synchronizeBlocksWithTemplate(blocks, template);
590
- return yield resetBlocks(updatedBlockList);
591
- }
617
+ dispatch.resetBlocks(updatedBlockList);
618
+ };
592
619
  /**
593
- * Returns an action object used in signalling that two blocks should be merged
620
+ * Action that merges two blocks.
594
621
  *
595
622
  * @param {string} firstBlockClientId Client ID of the first block to merge.
596
623
  * @param {string} secondBlockClientId Client ID of the second block to merge.
597
624
  */
598
625
 
599
- export function* mergeBlocks(firstBlockClientId, secondBlockClientId) {
626
+ export const mergeBlocks = (firstBlockClientId, secondBlockClientId) => ({
627
+ select,
628
+ dispatch
629
+ }) => {
600
630
  const blocks = [firstBlockClientId, secondBlockClientId];
601
- yield {
631
+ dispatch({
602
632
  type: 'MERGE_BLOCKS',
603
633
  blocks
604
- };
634
+ });
605
635
  const [clientIdA, clientIdB] = blocks;
606
- const blockA = yield controls.select(blockEditorStoreName, 'getBlock', clientIdA);
636
+ const blockA = select.getBlock(clientIdA);
607
637
  const blockAType = getBlockType(blockA.name); // Only focus the previous block if it's not mergeable
608
638
 
609
- if (!blockAType.merge) {
610
- yield selectBlock(blockA.clientId);
639
+ if (blockAType && !blockAType.merge) {
640
+ dispatch.selectBlock(blockA.clientId);
611
641
  return;
612
642
  }
613
643
 
614
- const blockB = yield controls.select(blockEditorStoreName, 'getBlock', clientIdB);
644
+ const blockB = select.getBlock(clientIdB);
615
645
  const blockBType = getBlockType(blockB.name);
616
646
  const {
617
647
  clientId,
618
648
  attributeKey,
619
649
  offset
620
- } = yield controls.select(blockEditorStoreName, 'getSelectionStart');
650
+ } = select.getSelectionStart();
621
651
  const selectedBlockType = clientId === clientIdA ? blockAType : blockBType;
622
652
  const attributeDefinition = selectedBlockType.attributes[attributeKey];
623
653
  const canRestoreTextSelection = (clientId === clientIdA || clientId === clientIdB) && attributeKey !== undefined && offset !== undefined && // We cannot restore text selection if the RichText identifier
@@ -695,16 +725,16 @@ export function* mergeBlocks(firstBlockClientId, secondBlockClientId) {
695
725
  preserveWhiteSpace
696
726
  });
697
727
  updatedAttributes[newAttributeKey] = newHtml;
698
- yield selectionChange(blockA.clientId, newAttributeKey, newOffset, newOffset);
728
+ dispatch.selectionChange(blockA.clientId, newAttributeKey, newOffset, newOffset);
699
729
  }
700
730
 
701
- yield* replaceBlocks([blockA.clientId, blockB.clientId], [{ ...blockA,
731
+ dispatch.replaceBlocks([blockA.clientId, blockB.clientId], [{ ...blockA,
702
732
  attributes: { ...blockA.attributes,
703
733
  ...updatedAttributes
704
734
  }
705
735
  }, ...blocksWithTheSameType.slice(1)], 0 // If we don't pass the `indexToSelect` it will default to the last block.
706
736
  );
707
- }
737
+ };
708
738
  /**
709
739
  * Yields action objects used in signalling that the blocks corresponding to
710
740
  * the set of specified client IDs are to be removed.
@@ -714,36 +744,34 @@ export function* mergeBlocks(firstBlockClientId, secondBlockClientId) {
714
744
  * selected when a block is removed.
715
745
  */
716
746
 
717
- export function* removeBlocks(clientIds, selectPrevious = true) {
747
+ export const removeBlocks = (clientIds, selectPrevious = true) => ({
748
+ select,
749
+ dispatch
750
+ }) => {
718
751
  if (!clientIds || !clientIds.length) {
719
752
  return;
720
753
  }
721
754
 
722
755
  clientIds = castArray(clientIds);
723
- const rootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', clientIds[0]);
724
- const isLocked = yield controls.select(blockEditorStoreName, 'getTemplateLock', rootClientId);
756
+ const rootClientId = select.getBlockRootClientId(clientIds[0]);
757
+ const canRemoveBlocks = select.canRemoveBlocks(clientIds, rootClientId);
725
758
 
726
- if (isLocked) {
759
+ if (!canRemoveBlocks) {
727
760
  return;
728
761
  }
729
762
 
730
- let previousBlockId;
731
-
732
763
  if (selectPrevious) {
733
- previousBlockId = yield selectPreviousBlock(clientIds[0]);
734
- } else {
735
- previousBlockId = yield controls.select(blockEditorStoreName, 'getPreviousBlockClientId', clientIds[0]);
764
+ dispatch.selectPreviousBlock(clientIds[0]);
736
765
  }
737
766
 
738
- yield {
767
+ dispatch({
739
768
  type: 'REMOVE_BLOCKS',
740
769
  clientIds
741
- }; // To avoid a focus loss when removing the last block, assure there is
770
+ }); // To avoid a focus loss when removing the last block, assure there is
742
771
  // always a default block if the last of the blocks have been removed.
743
772
 
744
- const defaultBlockId = yield* ensureDefaultBlock();
745
- return [previousBlockId || defaultBlockId];
746
- }
773
+ dispatch(ensureDefaultBlock());
774
+ };
747
775
  /**
748
776
  * Returns an action object used in signalling that the block with the
749
777
  * specified client ID is to be removed.
@@ -758,6 +786,8 @@ export function* removeBlocks(clientIds, selectPrevious = true) {
758
786
  export function removeBlock(clientId, selectPrevious) {
759
787
  return removeBlocks([clientId], selectPrevious);
760
788
  }
789
+ /* eslint-disable jsdoc/valid-types */
790
+
761
791
  /**
762
792
  * Returns an action object used in signalling that the inner blocks with the
763
793
  * specified client ID should be replaced.
@@ -770,6 +800,7 @@ export function removeBlock(clientId, selectPrevious) {
770
800
  */
771
801
 
772
802
  export function replaceInnerBlocks(rootClientId, blocks, updateSelection = false, initialPosition = 0) {
803
+ /* eslint-enable jsdoc/valid-types */
773
804
  return {
774
805
  type: 'REPLACE_INNER_BLOCKS',
775
806
  rootClientId,
@@ -864,8 +895,7 @@ export function exitFormattedText() {
864
895
  };
865
896
  }
866
897
  /**
867
- * Returns an action object used in signalling that the user caret has changed
868
- * position.
898
+ * Action that changes the position of the user caret.
869
899
  *
870
900
  * @param {string} clientId The selected block client ID.
871
901
  * @param {string} attributeKey The selected block attribute key.
@@ -885,8 +915,7 @@ export function selectionChange(clientId, attributeKey, startOffset, endOffset)
885
915
  };
886
916
  }
887
917
  /**
888
- * Returns an action object used in signalling that a new block of the default
889
- * type should be added to the block list.
918
+ * Action that adds a new block of the default type to the block list.
890
919
  *
891
920
  * @param {?Object} attributes Optional attributes of the block to assign.
892
921
  * @param {?string} rootClientId Optional root client ID of block list on which
@@ -908,7 +937,7 @@ export function insertDefaultBlock(attributes, rootClientId, index) {
908
937
  return insertBlock(block, index, rootClientId);
909
938
  }
910
939
  /**
911
- * Returns an action object that changes the nested settings of a given block.
940
+ * Action that changes the nested settings of a given block.
912
941
  *
913
942
  * @param {string} clientId Client ID of the block whose nested setting are
914
943
  * being received.
@@ -925,7 +954,7 @@ export function updateBlockListSettings(clientId, settings) {
925
954
  };
926
955
  }
927
956
  /**
928
- * Returns an action object used in signalling that the block editor settings have been updated.
957
+ * Action that updates the block editor settings.
929
958
  *
930
959
  * @param {Object} settings Updated settings
931
960
  *
@@ -939,7 +968,7 @@ export function updateSettings(settings) {
939
968
  };
940
969
  }
941
970
  /**
942
- * Returns an action object used in signalling that a temporary reusable blocks have been saved
971
+ * Action that signals that a temporary reusable block has been saved
943
972
  * in order to switch its temporary id with the real id.
944
973
  *
945
974
  * @param {string} id Reusable block's id.
@@ -956,7 +985,7 @@ export function __unstableSaveReusableBlock(id, updatedId) {
956
985
  };
957
986
  }
958
987
  /**
959
- * Returns an action object used in signalling that the last block change should be marked explicitly as persistent.
988
+ * Action that marks the last block change explicitly as persistent.
960
989
  *
961
990
  * @return {Object} Action object.
962
991
  */
@@ -967,7 +996,7 @@ export function __unstableMarkLastChangeAsPersistent() {
967
996
  };
968
997
  }
969
998
  /**
970
- * Returns an action object used in signalling that the next block change should be marked explicitly as not persistent.
999
+ * Action that signals that the next block change should be marked explicitly as not persistent.
971
1000
  *
972
1001
  * @return {Object} Action object.
973
1002
  */
@@ -978,138 +1007,156 @@ export function __unstableMarkNextChangeAsNotPersistent() {
978
1007
  };
979
1008
  }
980
1009
  /**
981
- * Returns an action object used in signalling that the last block change is
982
- * an automatic change, meaning it was not performed by the user, and can be
983
- * undone using the `Escape` and `Backspace` keys. This action must be called
984
- * after the change was made, and any actions that are a consequence of it, so
985
- * it is recommended to be called at the next idle period to ensure all
1010
+ * Action that marks the last block change as an automatic change, meaning it was not
1011
+ * performed by the user, and can be undone using the `Escape` and `Backspace` keys.
1012
+ * This action must be called after the change was made, and any actions that are a
1013
+ * consequence of it, so it is recommended to be called at the next idle period to ensure all
986
1014
  * selection changes have been recorded.
987
1015
  */
988
1016
 
989
- export function* __unstableMarkAutomaticChange() {
990
- yield {
1017
+ export const __unstableMarkAutomaticChange = () => ({
1018
+ dispatch
1019
+ }) => {
1020
+ dispatch({
991
1021
  type: 'MARK_AUTOMATIC_CHANGE'
992
- };
993
- yield __unstableMarkAutomaticChangeFinalControl();
994
- }
995
- export function __unstableMarkAutomaticChangeFinal() {
996
- return {
997
- type: 'MARK_AUTOMATIC_CHANGE_FINAL'
998
- };
999
- }
1022
+ });
1023
+ const {
1024
+ requestIdleCallback = cb => setTimeout(cb, 100)
1025
+ } = window;
1026
+ requestIdleCallback(() => {
1027
+ dispatch({
1028
+ type: 'MARK_AUTOMATIC_CHANGE_FINAL'
1029
+ });
1030
+ });
1031
+ };
1000
1032
  /**
1001
- * Generators that triggers an action used to enable or disable the navigation mode.
1033
+ * Action that enables or disables the navigation mode.
1002
1034
  *
1003
1035
  * @param {string} isNavigationMode Enable/Disable navigation mode.
1004
1036
  */
1005
1037
 
1006
- export function* setNavigationMode(isNavigationMode = true) {
1007
- yield {
1038
+ export const setNavigationMode = (isNavigationMode = true) => ({
1039
+ dispatch
1040
+ }) => {
1041
+ dispatch({
1008
1042
  type: 'SET_NAVIGATION_MODE',
1009
1043
  isNavigationMode
1010
- };
1044
+ });
1011
1045
 
1012
1046
  if (isNavigationMode) {
1013
1047
  speak(__('You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.'));
1014
1048
  } else {
1015
1049
  speak(__('You are currently in edit mode. To return to the navigation mode, press Escape.'));
1016
1050
  }
1017
- }
1051
+ };
1018
1052
  /**
1019
- * Generator that triggers an action used to enable or disable the block moving mode.
1053
+ * Action that enables or disables the block moving mode.
1020
1054
  *
1021
1055
  * @param {string|null} hasBlockMovingClientId Enable/Disable block moving mode.
1022
1056
  */
1023
1057
 
1024
- export function* setBlockMovingClientId(hasBlockMovingClientId = null) {
1025
- yield {
1058
+ export const setBlockMovingClientId = (hasBlockMovingClientId = null) => ({
1059
+ dispatch
1060
+ }) => {
1061
+ dispatch({
1026
1062
  type: 'SET_BLOCK_MOVING_MODE',
1027
1063
  hasBlockMovingClientId
1028
- };
1064
+ });
1029
1065
 
1030
1066
  if (hasBlockMovingClientId) {
1031
1067
  speak(__('Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.'));
1032
1068
  }
1033
- }
1069
+ };
1034
1070
  /**
1035
- * Generator that triggers an action used to duplicate a list of blocks.
1071
+ * Action that duplicates a list of blocks.
1036
1072
  *
1037
1073
  * @param {string[]} clientIds
1038
1074
  * @param {boolean} updateSelection
1039
1075
  */
1040
1076
 
1041
- export function* duplicateBlocks(clientIds, updateSelection = true) {
1042
- if (!clientIds && !clientIds.length) {
1077
+ export const duplicateBlocks = (clientIds, updateSelection = true) => ({
1078
+ select,
1079
+ dispatch
1080
+ }) => {
1081
+ if (!clientIds || !clientIds.length) {
1043
1082
  return;
1044
- }
1083
+ } // Return early if blocks don't exist.
1084
+
1045
1085
 
1046
- const blocks = yield controls.select(blockEditorStoreName, 'getBlocksByClientId', clientIds);
1047
- const rootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', clientIds[0]); // Return early if blocks don't exist.
1086
+ const blocks = select.getBlocksByClientId(clientIds);
1048
1087
 
1049
1088
  if (some(blocks, block => !block)) {
1050
1089
  return;
1051
- }
1090
+ } // Return early if blocks don't support multiple usage.
1052
1091
 
1053
- const blockNames = blocks.map(block => block.name); // Return early if blocks don't support multiple usage.
1054
1092
 
1055
- if (some(blockNames, blockName => !hasBlockSupport(blockName, 'multiple', true))) {
1093
+ const blockNames = blocks.map(block => block.name);
1094
+
1095
+ if (blockNames.some(blockName => !hasBlockSupport(blockName, 'multiple', true))) {
1056
1096
  return;
1057
1097
  }
1058
1098
 
1059
- const lastSelectedIndex = yield controls.select(blockEditorStoreName, 'getBlockIndex', last(castArray(clientIds)), rootClientId);
1099
+ const rootClientId = select.getBlockRootClientId(clientIds[0]);
1100
+ const lastSelectedIndex = select.getBlockIndex(last(castArray(clientIds)), rootClientId);
1060
1101
  const clonedBlocks = blocks.map(block => __experimentalCloneSanitizedBlock(block));
1061
- yield insertBlocks(clonedBlocks, lastSelectedIndex + 1, rootClientId, updateSelection);
1102
+ dispatch.insertBlocks(clonedBlocks, lastSelectedIndex + 1, rootClientId, updateSelection);
1062
1103
 
1063
1104
  if (clonedBlocks.length > 1 && updateSelection) {
1064
- yield multiSelect(first(clonedBlocks).clientId, last(clonedBlocks).clientId);
1105
+ dispatch.multiSelect(first(clonedBlocks).clientId, last(clonedBlocks).clientId);
1065
1106
  }
1066
1107
 
1067
1108
  return clonedBlocks.map(block => block.clientId);
1068
- }
1109
+ };
1069
1110
  /**
1070
- * Generator used to insert an empty block after a given block.
1111
+ * Action that inserts an empty block before a given block.
1071
1112
  *
1072
1113
  * @param {string} clientId
1073
1114
  */
1074
1115
 
1075
- export function* insertBeforeBlock(clientId) {
1116
+ export const insertBeforeBlock = clientId => ({
1117
+ select,
1118
+ dispatch
1119
+ }) => {
1076
1120
  if (!clientId) {
1077
1121
  return;
1078
1122
  }
1079
1123
 
1080
- const rootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', clientId);
1081
- const isLocked = yield controls.select(blockEditorStoreName, 'getTemplateLock', rootClientId);
1124
+ const rootClientId = select.getBlockRootClientId(clientId);
1125
+ const isLocked = select.getTemplateLock(rootClientId);
1082
1126
 
1083
1127
  if (isLocked) {
1084
1128
  return;
1085
1129
  }
1086
1130
 
1087
- const firstSelectedIndex = yield controls.select(blockEditorStoreName, 'getBlockIndex', clientId, rootClientId);
1088
- return yield insertDefaultBlock({}, rootClientId, firstSelectedIndex);
1089
- }
1131
+ const firstSelectedIndex = select.getBlockIndex(clientId, rootClientId);
1132
+ return dispatch.insertDefaultBlock({}, rootClientId, firstSelectedIndex);
1133
+ };
1090
1134
  /**
1091
- * Generator used to insert an empty block before a given block.
1135
+ * Action that inserts an empty block after a given block.
1092
1136
  *
1093
1137
  * @param {string} clientId
1094
1138
  */
1095
1139
 
1096
- export function* insertAfterBlock(clientId) {
1140
+ export const insertAfterBlock = clientId => ({
1141
+ select,
1142
+ dispatch
1143
+ }) => {
1097
1144
  if (!clientId) {
1098
1145
  return;
1099
1146
  }
1100
1147
 
1101
- const rootClientId = yield controls.select(blockEditorStoreName, 'getBlockRootClientId', clientId);
1102
- const isLocked = yield controls.select(blockEditorStoreName, 'getTemplateLock', rootClientId);
1148
+ const rootClientId = select.getBlockRootClientId(clientId);
1149
+ const isLocked = select.getTemplateLock(rootClientId);
1103
1150
 
1104
1151
  if (isLocked) {
1105
1152
  return;
1106
1153
  }
1107
1154
 
1108
- const firstSelectedIndex = yield controls.select(blockEditorStoreName, 'getBlockIndex', clientId, rootClientId);
1109
- return yield insertDefaultBlock({}, rootClientId, firstSelectedIndex + 1);
1110
- }
1155
+ const firstSelectedIndex = select.getBlockIndex(clientId, rootClientId);
1156
+ return dispatch.insertDefaultBlock({}, rootClientId, firstSelectedIndex + 1);
1157
+ };
1111
1158
  /**
1112
- * Returns an action object that toggles the highlighted block state.
1159
+ * Action that toggles the highlighted block state.
1113
1160
  *
1114
1161
  * @param {string} clientId The block's clientId.
1115
1162
  * @param {boolean} isHighlighted The highlight state.
@@ -1123,22 +1170,20 @@ export function toggleBlockHighlight(clientId, isHighlighted) {
1123
1170
  };
1124
1171
  }
1125
1172
  /**
1126
- * Yields action objects used in signalling that the block corresponding to the
1127
- * given clientId should appear to "flash" by rhythmically highlighting it.
1173
+ * Action that "flashes" the block with a given `clientId` by rhythmically highlighting it.
1128
1174
  *
1129
1175
  * @param {string} clientId Target block client ID.
1130
1176
  */
1131
1177
 
1132
- export function* flashBlock(clientId) {
1133
- yield toggleBlockHighlight(clientId, true);
1134
- yield {
1135
- type: 'SLEEP',
1136
- duration: 150
1137
- };
1138
- yield toggleBlockHighlight(clientId, false);
1139
- }
1178
+ export const flashBlock = clientId => async ({
1179
+ dispatch
1180
+ }) => {
1181
+ dispatch(toggleBlockHighlight(clientId, true));
1182
+ await new Promise(resolve => setTimeout(resolve, 150));
1183
+ dispatch(toggleBlockHighlight(clientId, false));
1184
+ };
1140
1185
  /**
1141
- * Returns an action object that sets whether the block has controlled innerblocks.
1186
+ * Action that sets whether a block has controlled inner blocks.
1142
1187
  *
1143
1188
  * @param {string} clientId The block's clientId.
1144
1189
  * @param {boolean} hasControlledInnerBlocks True if the block's inner blocks are controlled.