@wordpress/block-editor 10.5.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (716) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +2 -1
  3. package/build/autocompleters/block.js +2 -6
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/autocompleters/link.js +2 -0
  6. package/build/autocompleters/link.js.map +1 -1
  7. package/build/components/alignment-control/ui.js +1 -7
  8. package/build/components/alignment-control/ui.js.map +1 -1
  9. package/build/components/block-alignment-control/use-available-alignments.js +4 -3
  10. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  11. package/build/components/block-card/index.js +51 -3
  12. package/build/components/block-card/index.js.map +1 -1
  13. package/build/components/block-draggable/index.native.js +46 -39
  14. package/build/components/block-draggable/index.native.js.map +1 -1
  15. package/build/components/block-edit/edit.js +4 -3
  16. package/build/components/block-edit/edit.js.map +1 -1
  17. package/build/components/block-edit/edit.native.js +4 -7
  18. package/build/components/block-edit/edit.native.js.map +1 -1
  19. package/build/components/block-icon/index.js +4 -2
  20. package/build/components/block-icon/index.js.map +1 -1
  21. package/build/components/block-inspector/index.js +90 -37
  22. package/build/components/block-inspector/index.js.map +1 -1
  23. package/build/components/block-list/block-list-context.native.js +5 -8
  24. package/build/components/block-list/block-list-context.native.js.map +1 -1
  25. package/build/components/block-list/block.js +55 -24
  26. package/build/components/block-list/block.js.map +1 -1
  27. package/build/components/block-list/block.native.js +61 -28
  28. package/build/components/block-list/block.native.js.map +1 -1
  29. package/build/components/block-list-appender/index.js +46 -34
  30. package/build/components/block-list-appender/index.js.map +1 -1
  31. package/build/components/block-list-appender/index.native.js +39 -34
  32. package/build/components/block-list-appender/index.native.js.map +1 -1
  33. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +30 -22
  34. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  35. package/build/components/block-mobile-toolbar/index.native.js +1 -1
  36. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  37. package/build/components/block-pattern-setup/index.js +16 -8
  38. package/build/components/block-pattern-setup/index.js.map +1 -1
  39. package/build/components/block-patterns-list/index.js +33 -11
  40. package/build/components/block-patterns-list/index.js.map +1 -1
  41. package/build/components/block-preview/auto.js +9 -3
  42. package/build/components/block-preview/auto.js.map +1 -1
  43. package/build/components/block-preview/index.js +5 -9
  44. package/build/components/block-preview/index.js.map +1 -1
  45. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -2
  46. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  47. package/build/components/block-styles/index.native.js +1 -3
  48. package/build/components/block-styles/index.native.js.map +1 -1
  49. package/build/components/block-styles/utils.js +7 -10
  50. package/build/components/block-styles/utils.js.map +1 -1
  51. package/build/components/block-toolbar/index.js +5 -1
  52. package/build/components/block-toolbar/index.js.map +1 -1
  53. package/build/components/block-toolbar/index.native.js +6 -8
  54. package/build/components/block-toolbar/index.native.js.map +1 -1
  55. package/build/components/block-tools/insertion-point.js +8 -49
  56. package/build/components/block-tools/insertion-point.js.map +1 -1
  57. package/build/components/block-tools/selected-block-popover.js +1 -3
  58. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  59. package/build/components/block-variation-picker/index.js +2 -3
  60. package/build/components/block-variation-picker/index.js.map +1 -1
  61. package/build/components/colors/utils.js +2 -6
  62. package/build/components/colors/utils.js.map +1 -1
  63. package/build/components/colors-gradients/control.js +0 -3
  64. package/build/components/colors-gradients/control.js.map +1 -1
  65. package/build/components/colors-gradients/dropdown.js +0 -2
  66. package/build/components/colors-gradients/dropdown.js.map +1 -1
  67. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -19
  68. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  69. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -3
  70. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  71. package/build/components/copy-handler/index.js +37 -9
  72. package/build/components/copy-handler/index.js.map +1 -1
  73. package/build/components/font-sizes/fluid-utils.js +5 -2
  74. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  75. package/build/components/font-sizes/utils.js +10 -4
  76. package/build/components/font-sizes/utils.js.map +1 -1
  77. package/build/components/font-sizes/with-font-sizes.js +11 -6
  78. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  79. package/build/components/gradients/use-gradient.js +2 -8
  80. package/build/components/gradients/use-gradient.js.map +1 -1
  81. package/build/components/height-control/index.js +115 -0
  82. package/build/components/height-control/index.js.map +1 -0
  83. package/build/components/iframe/index.js +22 -101
  84. package/build/components/iframe/index.js.map +1 -1
  85. package/build/components/iframe/use-compatibility-styles.js +93 -0
  86. package/build/components/iframe/use-compatibility-styles.js.map +1 -0
  87. package/build/components/image-editor/use-save-image.js +2 -0
  88. package/build/components/image-editor/use-save-image.js.map +1 -1
  89. package/build/components/image-editor/zoom-dropdown.js +1 -0
  90. package/build/components/image-editor/zoom-dropdown.js.map +1 -1
  91. package/build/components/index.js +9 -0
  92. package/build/components/index.js.map +1 -1
  93. package/build/components/inner-blocks/index.js +25 -7
  94. package/build/components/inner-blocks/index.js.map +1 -1
  95. package/build/components/inner-blocks/use-inner-block-template-sync.js +25 -10
  96. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  97. package/build/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  98. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  99. package/build/components/inserter/block-patterns-tab.js +25 -46
  100. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  101. package/build/components/inserter/block-types-tab.js +3 -1
  102. package/build/components/inserter/block-types-tab.js.map +1 -1
  103. package/build/components/inserter/hooks/use-debounced-input.js +27 -0
  104. package/build/components/inserter/hooks/use-debounced-input.js.map +1 -0
  105. package/build/components/inserter/hooks/use-insertion-point.js +4 -3
  106. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  107. package/build/components/inserter/index.js +20 -6
  108. package/build/components/inserter/index.js.map +1 -1
  109. package/build/components/inserter/index.native.js +3 -4
  110. package/build/components/inserter/index.native.js.map +1 -1
  111. package/build/components/inserter/media-tab/hooks.js +106 -0
  112. package/build/components/inserter/media-tab/hooks.js.map +1 -0
  113. package/build/components/inserter/media-tab/index.js +32 -0
  114. package/build/components/inserter/media-tab/index.js.map +1 -0
  115. package/build/components/inserter/media-tab/media-list.js +100 -0
  116. package/build/components/inserter/media-tab/media-list.js.map +1 -0
  117. package/build/components/inserter/media-tab/media-panel.js +96 -0
  118. package/build/components/inserter/media-tab/media-panel.js.map +1 -0
  119. package/build/components/inserter/media-tab/media-tab.js +120 -0
  120. package/build/components/inserter/media-tab/media-tab.js.map +1 -0
  121. package/build/components/inserter/media-tab/utils.js +54 -0
  122. package/build/components/inserter/media-tab/utils.js.map +1 -0
  123. package/build/components/inserter/menu.js +35 -12
  124. package/build/components/inserter/menu.js.map +1 -1
  125. package/build/components/inserter/mobile-tab-navigation.js +70 -0
  126. package/build/components/inserter/mobile-tab-navigation.js.map +1 -0
  127. package/build/components/inserter/quick-inserter.js +7 -3
  128. package/build/components/inserter/quick-inserter.js.map +1 -1
  129. package/build/components/inserter/search-items.js +15 -14
  130. package/build/components/inserter/search-items.js.map +1 -1
  131. package/build/components/inserter/search-results.js +7 -3
  132. package/build/components/inserter/search-results.js.map +1 -1
  133. package/build/components/inserter/tabs.js +16 -2
  134. package/build/components/inserter/tabs.js.map +1 -1
  135. package/build/components/inserter-list-item/index.js +4 -1
  136. package/build/components/inserter-list-item/index.js.map +1 -1
  137. package/build/components/inspector-controls/groups.js +2 -0
  138. package/build/components/inspector-controls/groups.js.map +1 -1
  139. package/build/components/inspector-controls-tabs/advanced-controls-panel.js +46 -0
  140. package/build/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -0
  141. package/build/components/inspector-controls-tabs/index.js +71 -0
  142. package/build/components/inspector-controls-tabs/index.js.map +1 -0
  143. package/build/components/inspector-controls-tabs/settings-tab.js +28 -0
  144. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -0
  145. package/build/components/inspector-controls-tabs/styles-tab.js +61 -0
  146. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -0
  147. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +97 -0
  148. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -0
  149. package/build/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +18 -0
  150. package/build/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js.map +1 -0
  151. package/build/components/inspector-controls-tabs/utils.js +37 -0
  152. package/build/components/inspector-controls-tabs/utils.js.map +1 -0
  153. package/build/components/link-control/index.js +1 -0
  154. package/build/components/link-control/index.js.map +1 -1
  155. package/build/components/link-control/search-input.js +0 -1
  156. package/build/components/link-control/search-input.js.map +1 -1
  157. package/build/components/link-control/use-internal-input-value.js +3 -3
  158. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  159. package/build/components/list-view/block-select-button.js +1 -1
  160. package/build/components/list-view/block-select-button.js.map +1 -1
  161. package/build/components/list-view/block.js +5 -2
  162. package/build/components/list-view/block.js.map +1 -1
  163. package/build/components/list-view/branch.js +13 -12
  164. package/build/components/list-view/branch.js.map +1 -1
  165. package/build/components/media-upload/index.native.js +2 -3
  166. package/build/components/media-upload/index.native.js.map +1 -1
  167. package/build/components/off-canvas-editor/appender.js +99 -0
  168. package/build/components/off-canvas-editor/appender.js.map +1 -0
  169. package/build/components/off-canvas-editor/block-edit-button.js +50 -0
  170. package/build/components/off-canvas-editor/block-edit-button.js.map +1 -0
  171. package/build/components/off-canvas-editor/block-select-button.js +3 -2
  172. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  173. package/build/components/off-canvas-editor/block.js +82 -38
  174. package/build/components/off-canvas-editor/block.js.map +1 -1
  175. package/build/components/off-canvas-editor/branch.js +3 -5
  176. package/build/components/off-canvas-editor/branch.js.map +1 -1
  177. package/build/components/off-canvas-editor/index.js +24 -11
  178. package/build/components/off-canvas-editor/index.js.map +1 -1
  179. package/build/components/off-canvas-editor/leaf.js +1 -1
  180. package/build/components/off-canvas-editor/leaf.js.map +1 -1
  181. package/build/components/off-canvas-editor/link-ui.js +185 -0
  182. package/build/components/off-canvas-editor/link-ui.js.map +1 -0
  183. package/build/components/off-canvas-editor/update-attributes.js +108 -0
  184. package/build/components/off-canvas-editor/update-attributes.js.map +1 -0
  185. package/build/components/off-canvas-editor/use-inserted-block.js +58 -0
  186. package/build/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  187. package/build/components/responsive-block-control/label.js.map +1 -1
  188. package/build/components/rich-text/format-edit.js +12 -10
  189. package/build/components/rich-text/format-edit.js.map +1 -1
  190. package/build/components/rich-text/format-toolbar/index.js +8 -4
  191. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  192. package/build/components/rich-text/index.js +3 -3
  193. package/build/components/rich-text/index.js.map +1 -1
  194. package/build/components/rich-text/index.native.js +0 -2
  195. package/build/components/rich-text/index.native.js.map +1 -1
  196. package/build/components/rich-text/use-insert-replacement-text.js +43 -0
  197. package/build/components/rich-text/use-insert-replacement-text.js.map +1 -0
  198. package/build/components/rich-text/use-paste-handler.js +21 -12
  199. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  200. package/build/components/rich-text/use-undo-automatic-change.js +9 -1
  201. package/build/components/rich-text/use-undo-automatic-change.js.map +1 -1
  202. package/build/components/rich-text/utils.js +1 -19
  203. package/build/components/rich-text/utils.js.map +1 -1
  204. package/build/components/spacing-sizes-control/index.js +0 -1
  205. package/build/components/spacing-sizes-control/index.js.map +1 -1
  206. package/build/components/spacing-sizes-control/spacing-input-control.js +12 -3
  207. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  208. package/build/components/spacing-sizes-control/utils.js +1 -1
  209. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  210. package/build/components/typewriter/index.js +1 -1
  211. package/build/components/typewriter/index.js.map +1 -1
  212. package/build/components/ungroup-button/index.native.js +4 -2
  213. package/build/components/ungroup-button/index.native.js.map +1 -1
  214. package/build/components/url-input/index.js +46 -43
  215. package/build/components/url-input/index.js.map +1 -1
  216. package/build/components/url-popover/image-url-input-ui.js +2 -2
  217. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  218. package/build/components/use-block-display-information/index.js +8 -4
  219. package/build/components/use-block-display-information/index.js.map +1 -1
  220. package/build/components/use-setting/index.js +9 -1
  221. package/build/components/use-setting/index.js.map +1 -1
  222. package/build/components/writing-flow/index.js +1 -1
  223. package/build/components/writing-flow/index.js.map +1 -1
  224. package/build/hooks/border.js +0 -1
  225. package/build/hooks/border.js.map +1 -1
  226. package/build/hooks/child-layout.js +209 -0
  227. package/build/hooks/child-layout.js.map +1 -0
  228. package/build/hooks/color-panel.js +0 -1
  229. package/build/hooks/color-panel.js.map +1 -1
  230. package/build/hooks/color.js +1 -2
  231. package/build/hooks/color.js.map +1 -1
  232. package/build/hooks/content-lock-ui.js +1 -1
  233. package/build/hooks/content-lock-ui.js.map +1 -1
  234. package/build/hooks/dimensions.js +25 -7
  235. package/build/hooks/dimensions.js.map +1 -1
  236. package/build/hooks/font-family.js +4 -4
  237. package/build/hooks/font-family.js.map +1 -1
  238. package/build/hooks/font-size.js +5 -3
  239. package/build/hooks/font-size.js.map +1 -1
  240. package/build/hooks/layout.js +57 -1
  241. package/build/hooks/layout.js.map +1 -1
  242. package/build/hooks/min-height.js +4 -10
  243. package/build/hooks/min-height.js.map +1 -1
  244. package/build/hooks/use-typography-props.js +11 -8
  245. package/build/hooks/use-typography-props.js.map +1 -1
  246. package/build/store/reducer.js +411 -274
  247. package/build/store/reducer.js.map +1 -1
  248. package/build/store/selectors.js +58 -48
  249. package/build/store/selectors.js.map +1 -1
  250. package/build/utils/pasting.js +6 -11
  251. package/build/utils/pasting.js.map +1 -1
  252. package/build/utils/sorting.js +63 -0
  253. package/build/utils/sorting.js.map +1 -0
  254. package/build-module/autocompleters/block.js +2 -6
  255. package/build-module/autocompleters/block.js.map +1 -1
  256. package/build-module/autocompleters/link.js +2 -0
  257. package/build-module/autocompleters/link.js.map +1 -1
  258. package/build-module/components/alignment-control/ui.js +1 -6
  259. package/build-module/components/alignment-control/ui.js.map +1 -1
  260. package/build-module/components/block-alignment-control/use-available-alignments.js +4 -3
  261. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  262. package/build-module/components/block-card/index.js +45 -3
  263. package/build-module/components/block-card/index.js.map +1 -1
  264. package/build-module/components/block-draggable/index.native.js +40 -31
  265. package/build-module/components/block-draggable/index.native.js.map +1 -1
  266. package/build-module/components/block-edit/edit.js +4 -2
  267. package/build-module/components/block-edit/edit.js.map +1 -1
  268. package/build-module/components/block-edit/edit.native.js +4 -6
  269. package/build-module/components/block-edit/edit.native.js.map +1 -1
  270. package/build-module/components/block-icon/index.js +4 -2
  271. package/build-module/components/block-icon/index.js.map +1 -1
  272. package/build-module/components/block-inspector/index.js +87 -34
  273. package/build-module/components/block-inspector/index.js.map +1 -1
  274. package/build-module/components/block-list/block-list-context.native.js +5 -8
  275. package/build-module/components/block-list/block-list-context.native.js.map +1 -1
  276. package/build-module/components/block-list/block.js +55 -25
  277. package/build-module/components/block-list/block.js.map +1 -1
  278. package/build-module/components/block-list/block.native.js +61 -28
  279. package/build-module/components/block-list/block.native.js.map +1 -1
  280. package/build-module/components/block-list-appender/index.js +46 -34
  281. package/build-module/components/block-list-appender/index.js.map +1 -1
  282. package/build-module/components/block-list-appender/index.native.js +39 -32
  283. package/build-module/components/block-list-appender/index.native.js.map +1 -1
  284. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +31 -24
  285. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  286. package/build-module/components/block-mobile-toolbar/index.native.js +1 -1
  287. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  288. package/build-module/components/block-pattern-setup/index.js +16 -8
  289. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  290. package/build-module/components/block-patterns-list/index.js +35 -13
  291. package/build-module/components/block-patterns-list/index.js.map +1 -1
  292. package/build-module/components/block-preview/auto.js +9 -3
  293. package/build-module/components/block-preview/auto.js.map +1 -1
  294. package/build-module/components/block-preview/index.js +5 -8
  295. package/build-module/components/block-preview/index.js.map +1 -1
  296. package/build-module/components/block-settings-menu/block-settings-dropdown.js +5 -2
  297. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  298. package/build-module/components/block-styles/index.native.js +1 -2
  299. package/build-module/components/block-styles/index.native.js.map +1 -1
  300. package/build-module/components/block-styles/utils.js +7 -9
  301. package/build-module/components/block-styles/utils.js.map +1 -1
  302. package/build-module/components/block-toolbar/index.js +6 -2
  303. package/build-module/components/block-toolbar/index.js.map +1 -1
  304. package/build-module/components/block-toolbar/index.native.js +6 -8
  305. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  306. package/build-module/components/block-tools/insertion-point.js +8 -49
  307. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  308. package/build-module/components/block-tools/selected-block-popover.js +1 -2
  309. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  310. package/build-module/components/block-variation-picker/index.js +2 -3
  311. package/build-module/components/block-variation-picker/index.js.map +1 -1
  312. package/build-module/components/colors/utils.js +3 -7
  313. package/build-module/components/colors/utils.js.map +1 -1
  314. package/build-module/components/colors-gradients/control.js +0 -3
  315. package/build-module/components/colors-gradients/control.js.map +1 -1
  316. package/build-module/components/colors-gradients/dropdown.js +0 -2
  317. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  318. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +4 -19
  319. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  320. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  321. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  322. package/build-module/components/copy-handler/index.js +38 -10
  323. package/build-module/components/copy-handler/index.js.map +1 -1
  324. package/build-module/components/font-sizes/fluid-utils.js +5 -2
  325. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  326. package/build-module/components/font-sizes/utils.js +11 -5
  327. package/build-module/components/font-sizes/utils.js.map +1 -1
  328. package/build-module/components/font-sizes/with-font-sizes.js +12 -7
  329. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  330. package/build-module/components/gradients/use-gradient.js +2 -7
  331. package/build-module/components/gradients/use-gradient.js.map +1 -1
  332. package/build-module/components/height-control/index.js +103 -0
  333. package/build-module/components/height-control/index.js.map +1 -0
  334. package/build-module/components/iframe/index.js +21 -101
  335. package/build-module/components/iframe/index.js.map +1 -1
  336. package/build-module/components/iframe/use-compatibility-styles.js +85 -0
  337. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -0
  338. package/build-module/components/image-editor/use-save-image.js +2 -0
  339. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  340. package/build-module/components/image-editor/zoom-dropdown.js +1 -0
  341. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -1
  342. package/build-module/components/index.js +1 -0
  343. package/build-module/components/index.js.map +1 -1
  344. package/build-module/components/inner-blocks/index.js +27 -9
  345. package/build-module/components/inner-blocks/index.js.map +1 -1
  346. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +23 -10
  347. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  348. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  349. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  350. package/build-module/components/inserter/block-patterns-tab.js +27 -49
  351. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  352. package/build-module/components/inserter/block-types-tab.js +3 -2
  353. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  354. package/build-module/components/inserter/hooks/use-debounced-input.js +18 -0
  355. package/build-module/components/inserter/hooks/use-debounced-input.js.map +1 -0
  356. package/build-module/components/inserter/hooks/use-insertion-point.js +4 -3
  357. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  358. package/build-module/components/inserter/index.js +20 -6
  359. package/build-module/components/inserter/index.js.map +1 -1
  360. package/build-module/components/inserter/index.native.js +3 -5
  361. package/build-module/components/inserter/index.native.js.map +1 -1
  362. package/build-module/components/inserter/media-tab/hooks.js +92 -0
  363. package/build-module/components/inserter/media-tab/hooks.js.map +1 -0
  364. package/build-module/components/inserter/media-tab/index.js +4 -0
  365. package/build-module/components/inserter/media-tab/index.js.map +1 -0
  366. package/build-module/components/inserter/media-tab/media-list.js +86 -0
  367. package/build-module/components/inserter/media-tab/media-list.js.map +1 -0
  368. package/build-module/components/inserter/media-tab/media-panel.js +77 -0
  369. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -0
  370. package/build-module/components/inserter/media-tab/media-tab.js +100 -0
  371. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -0
  372. package/build-module/components/inserter/media-tab/utils.js +45 -0
  373. package/build-module/components/inserter/media-tab/utils.js.map +1 -0
  374. package/build-module/components/inserter/menu.js +33 -12
  375. package/build-module/components/inserter/menu.js.map +1 -1
  376. package/build-module/components/inserter/mobile-tab-navigation.js +61 -0
  377. package/build-module/components/inserter/mobile-tab-navigation.js.map +1 -0
  378. package/build-module/components/inserter/quick-inserter.js +7 -3
  379. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  380. package/build-module/components/inserter/search-items.js +15 -13
  381. package/build-module/components/inserter/search-items.js.map +1 -1
  382. package/build-module/components/inserter/search-results.js +7 -4
  383. package/build-module/components/inserter/search-results.js.map +1 -1
  384. package/build-module/components/inserter/tabs.js +15 -2
  385. package/build-module/components/inserter/tabs.js.map +1 -1
  386. package/build-module/components/inserter-list-item/index.js +5 -2
  387. package/build-module/components/inserter-list-item/index.js.map +1 -1
  388. package/build-module/components/inspector-controls/groups.js +2 -0
  389. package/build-module/components/inspector-controls/groups.js.map +1 -1
  390. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js +32 -0
  391. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -0
  392. package/build-module/components/inspector-controls-tabs/index.js +56 -0
  393. package/build-module/components/inspector-controls-tabs/index.js.map +1 -0
  394. package/build-module/components/inspector-controls-tabs/settings-tab.js +17 -0
  395. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -0
  396. package/build-module/components/inspector-controls-tabs/styles-tab.js +46 -0
  397. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -0
  398. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +81 -0
  399. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -0
  400. package/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +8 -0
  401. package/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js.map +1 -0
  402. package/build-module/components/inspector-controls-tabs/utils.js +26 -0
  403. package/build-module/components/inspector-controls-tabs/utils.js.map +1 -0
  404. package/build-module/components/link-control/index.js +1 -0
  405. package/build-module/components/link-control/index.js.map +1 -1
  406. package/build-module/components/link-control/search-input.js +0 -1
  407. package/build-module/components/link-control/search-input.js.map +1 -1
  408. package/build-module/components/link-control/use-internal-input-value.js +3 -3
  409. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  410. package/build-module/components/list-view/block-select-button.js +1 -1
  411. package/build-module/components/list-view/block-select-button.js.map +1 -1
  412. package/build-module/components/list-view/block.js +5 -2
  413. package/build-module/components/list-view/block.js.map +1 -1
  414. package/build-module/components/list-view/branch.js +12 -11
  415. package/build-module/components/list-view/branch.js.map +1 -1
  416. package/build-module/components/media-upload/index.native.js +2 -4
  417. package/build-module/components/media-upload/index.native.js.map +1 -1
  418. package/build-module/components/off-canvas-editor/appender.js +83 -0
  419. package/build-module/components/off-canvas-editor/appender.js.map +1 -0
  420. package/build-module/components/off-canvas-editor/block-edit-button.js +35 -0
  421. package/build-module/components/off-canvas-editor/block-edit-button.js.map +1 -0
  422. package/build-module/components/off-canvas-editor/block-select-button.js +3 -2
  423. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  424. package/build-module/components/off-canvas-editor/block.js +83 -41
  425. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  426. package/build-module/components/off-canvas-editor/branch.js +3 -4
  427. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  428. package/build-module/components/off-canvas-editor/index.js +24 -12
  429. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  430. package/build-module/components/off-canvas-editor/leaf.js +1 -1
  431. package/build-module/components/off-canvas-editor/leaf.js.map +1 -1
  432. package/build-module/components/off-canvas-editor/link-ui.js +165 -0
  433. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -0
  434. package/build-module/components/off-canvas-editor/update-attributes.js +97 -0
  435. package/build-module/components/off-canvas-editor/update-attributes.js.map +1 -0
  436. package/build-module/components/off-canvas-editor/use-inserted-block.js +47 -0
  437. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  438. package/build-module/components/responsive-block-control/label.js +1 -2
  439. package/build-module/components/responsive-block-control/label.js.map +1 -1
  440. package/build-module/components/rich-text/format-edit.js +12 -9
  441. package/build-module/components/rich-text/format-edit.js.map +1 -1
  442. package/build-module/components/rich-text/format-toolbar/index.js +6 -2
  443. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  444. package/build-module/components/rich-text/index.js +2 -3
  445. package/build-module/components/rich-text/index.js.map +1 -1
  446. package/build-module/components/rich-text/index.native.js +0 -2
  447. package/build-module/components/rich-text/index.native.js.map +1 -1
  448. package/build-module/components/rich-text/use-insert-replacement-text.js +33 -0
  449. package/build-module/components/rich-text/use-insert-replacement-text.js.map +1 -0
  450. package/build-module/components/rich-text/use-paste-handler.js +22 -12
  451. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  452. package/build-module/components/rich-text/use-undo-automatic-change.js +9 -1
  453. package/build-module/components/rich-text/use-undo-automatic-change.js.map +1 -1
  454. package/build-module/components/rich-text/utils.js +1 -16
  455. package/build-module/components/rich-text/utils.js.map +1 -1
  456. package/build-module/components/spacing-sizes-control/index.js +0 -1
  457. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  458. package/build-module/components/spacing-sizes-control/spacing-input-control.js +12 -3
  459. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  460. package/build-module/components/spacing-sizes-control/utils.js +1 -1
  461. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  462. package/build-module/components/typewriter/index.js +1 -1
  463. package/build-module/components/typewriter/index.js.map +1 -1
  464. package/build-module/components/ungroup-button/index.native.js +3 -2
  465. package/build-module/components/ungroup-button/index.native.js.map +1 -1
  466. package/build-module/components/url-input/index.js +46 -43
  467. package/build-module/components/url-input/index.js.map +1 -1
  468. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  469. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  470. package/build-module/components/use-block-display-information/index.js +9 -5
  471. package/build-module/components/use-block-display-information/index.js.map +1 -1
  472. package/build-module/components/use-setting/index.js +8 -1
  473. package/build-module/components/use-setting/index.js.map +1 -1
  474. package/build-module/components/writing-flow/index.js +1 -1
  475. package/build-module/components/writing-flow/index.js.map +1 -1
  476. package/build-module/hooks/border.js +0 -1
  477. package/build-module/hooks/border.js.map +1 -1
  478. package/build-module/hooks/child-layout.js +189 -0
  479. package/build-module/hooks/child-layout.js.map +1 -0
  480. package/build-module/hooks/color-panel.js +0 -1
  481. package/build-module/hooks/color-panel.js.map +1 -1
  482. package/build-module/hooks/color.js +1 -2
  483. package/build-module/hooks/color.js.map +1 -1
  484. package/build-module/hooks/content-lock-ui.js +1 -1
  485. package/build-module/hooks/content-lock-ui.js.map +1 -1
  486. package/build-module/hooks/dimensions.js +25 -8
  487. package/build-module/hooks/dimensions.js.map +1 -1
  488. package/build-module/hooks/font-family.js +5 -5
  489. package/build-module/hooks/font-family.js.map +1 -1
  490. package/build-module/hooks/font-size.js +5 -3
  491. package/build-module/hooks/font-size.js.map +1 -1
  492. package/build-module/hooks/layout.js +55 -0
  493. package/build-module/hooks/layout.js.map +1 -1
  494. package/build-module/hooks/min-height.js +3 -9
  495. package/build-module/hooks/min-height.js.map +1 -1
  496. package/build-module/hooks/use-typography-props.js +11 -8
  497. package/build-module/hooks/use-typography-props.js.map +1 -1
  498. package/build-module/store/reducer.js +409 -274
  499. package/build-module/store/reducer.js.map +1 -1
  500. package/build-module/store/selectors.js +55 -48
  501. package/build-module/store/selectors.js.map +1 -1
  502. package/build-module/utils/pasting.js +6 -10
  503. package/build-module/utils/pasting.js.map +1 -1
  504. package/build-module/utils/sorting.js +56 -0
  505. package/build-module/utils/sorting.js.map +1 -0
  506. package/build-style/content-rtl.css +701 -0
  507. package/build-style/content.css +701 -0
  508. package/build-style/default-editor-styles-rtl.css +17 -3
  509. package/build-style/default-editor-styles.css +17 -3
  510. package/build-style/style-rtl.css +313 -665
  511. package/build-style/style.css +313 -665
  512. package/package.json +32 -30
  513. package/src/autocompleters/block.js +2 -6
  514. package/src/autocompleters/link.js +2 -0
  515. package/src/components/alignment-control/test/index.js +6 -1
  516. package/src/components/alignment-control/ui.js +1 -7
  517. package/src/components/block-alignment-control/test/index.js +6 -1
  518. package/src/components/block-alignment-control/use-available-alignments.js +4 -3
  519. package/src/components/block-card/index.js +46 -2
  520. package/src/components/block-card/style.scss +4 -0
  521. package/src/components/block-content-overlay/{style.scss → content.scss} +7 -1
  522. package/src/components/block-draggable/content.scss +20 -0
  523. package/src/components/block-draggable/index.native.js +54 -40
  524. package/src/components/block-draggable/style.scss +0 -21
  525. package/src/components/block-draggable/test/helpers.native.js +7 -9
  526. package/src/components/block-draggable/test/index.native.js +35 -45
  527. package/src/components/block-edit/edit.js +5 -2
  528. package/src/components/block-edit/edit.native.js +5 -6
  529. package/src/components/block-icon/index.js +4 -2
  530. package/src/components/block-icon/test/index.js +9 -5
  531. package/src/components/block-inspector/index.js +173 -85
  532. package/src/components/block-inspector/style.scss +16 -1
  533. package/src/components/block-list/block-list-context.native.js +5 -8
  534. package/src/components/block-list/block.js +74 -23
  535. package/src/components/block-list/block.native.js +78 -23
  536. package/src/components/block-list/{style.scss → content.scss} +1 -15
  537. package/src/components/block-list-appender/{style.scss → content.scss} +0 -0
  538. package/src/components/block-list-appender/index.js +65 -54
  539. package/src/components/block-list-appender/index.native.js +45 -34
  540. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +42 -28
  541. package/src/components/block-mobile-toolbar/index.native.js +1 -1
  542. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +125 -0
  543. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +439 -0
  544. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +42 -2
  545. package/src/components/block-mover/test/index.native.js +157 -1
  546. package/src/components/block-pattern-setup/index.js +17 -7
  547. package/src/components/block-pattern-setup/style.scss +29 -1
  548. package/src/components/block-patterns-list/index.js +47 -24
  549. package/src/components/block-preview/README.md +15 -10
  550. package/src/components/block-preview/auto.js +7 -1
  551. package/src/components/block-preview/content.scss +4 -0
  552. package/src/components/block-preview/index.js +7 -12
  553. package/src/components/block-preview/style.scss +0 -7
  554. package/src/components/block-preview/test/index.js +18 -35
  555. package/src/components/block-selection-clearer/test/index.js +12 -12
  556. package/src/components/block-settings-menu/block-settings-dropdown.js +32 -20
  557. package/src/components/block-styles/index.native.js +1 -2
  558. package/src/components/block-styles/utils.js +5 -7
  559. package/src/components/block-switcher/test/index.js +6 -1
  560. package/src/components/block-toolbar/index.js +12 -5
  561. package/src/components/block-toolbar/index.native.js +8 -11
  562. package/src/components/block-toolbar/style.scss +10 -0
  563. package/src/components/block-tools/insertion-point.js +3 -47
  564. package/src/components/block-tools/selected-block-popover.js +1 -3
  565. package/src/components/block-tools/style.scss +12 -5
  566. package/src/components/block-variation-picker/index.js +6 -5
  567. package/src/components/block-vertical-alignment-control/test/index.js +6 -1
  568. package/src/components/colors/test/with-colors.js +2 -0
  569. package/src/components/colors/utils.js +5 -3
  570. package/src/components/colors-gradients/control.js +0 -7
  571. package/src/components/colors-gradients/dropdown.js +0 -2
  572. package/src/components/colors-gradients/panel-color-gradient-settings.js +4 -22
  573. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  574. package/src/components/copy-handler/index.js +53 -7
  575. package/src/components/default-block-appender/{style.scss → content.scss} +0 -0
  576. package/src/components/default-block-appender/test/index.js +2 -0
  577. package/src/components/font-sizes/fluid-utils.js +7 -1
  578. package/src/components/font-sizes/utils.js +5 -3
  579. package/src/components/font-sizes/with-font-sizes.js +4 -4
  580. package/src/components/gradients/use-gradient.js +2 -7
  581. package/src/components/height-control/index.js +123 -0
  582. package/src/components/height-control/stories/index.js +21 -0
  583. package/src/components/height-control/style.scss +5 -0
  584. package/src/components/iframe/index.js +33 -121
  585. package/src/components/iframe/use-compatibility-styles.js +95 -0
  586. package/src/components/image-editor/use-save-image.js +2 -0
  587. package/src/components/image-editor/zoom-dropdown.js +1 -0
  588. package/src/components/image-size-control/test/index.js +147 -79
  589. package/src/components/index.js +1 -0
  590. package/src/components/inner-blocks/{style.scss → content.scss} +0 -0
  591. package/src/components/inner-blocks/index.js +26 -7
  592. package/src/components/inner-blocks/use-inner-block-template-sync.js +28 -10
  593. package/src/components/inserter/block-patterns-explorer/sidebar.js +1 -0
  594. package/src/components/inserter/block-patterns-tab.js +28 -71
  595. package/src/components/inserter/block-types-tab.js +3 -2
  596. package/src/components/inserter/hooks/use-debounced-input.js +17 -0
  597. package/src/components/inserter/hooks/use-insertion-point.js +3 -2
  598. package/src/components/inserter/index.js +24 -3
  599. package/src/components/inserter/index.native.js +1 -1
  600. package/src/components/inserter/media-tab/hooks.js +89 -0
  601. package/src/components/inserter/media-tab/index.js +3 -0
  602. package/src/components/inserter/media-tab/media-list.js +93 -0
  603. package/src/components/inserter/media-tab/media-panel.js +83 -0
  604. package/src/components/inserter/media-tab/media-tab.js +135 -0
  605. package/src/components/inserter/media-tab/utils.js +37 -0
  606. package/src/components/inserter/menu.js +55 -13
  607. package/src/components/inserter/mobile-tab-navigation.js +85 -0
  608. package/src/components/inserter/quick-inserter.js +4 -0
  609. package/src/components/inserter/search-items.js +1 -2
  610. package/src/components/inserter/search-results.js +5 -2
  611. package/src/components/inserter/stories/index.js +1 -1
  612. package/src/components/inserter/stories/{fixtures.js → utils/fixtures.js} +0 -0
  613. package/src/components/inserter/style.scss +176 -11
  614. package/src/components/inserter/tabs.js +12 -1
  615. package/src/components/inserter-list-item/index.js +11 -1
  616. package/src/components/inserter-list-item/style.scss +26 -0
  617. package/src/components/inspector-controls/groups.js +2 -0
  618. package/src/components/inspector-controls-tabs/advanced-controls-panel.js +37 -0
  619. package/src/components/inspector-controls-tabs/index.js +62 -0
  620. package/src/components/inspector-controls-tabs/settings-tab.js +18 -0
  621. package/src/components/inspector-controls-tabs/styles-tab.js +51 -0
  622. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +89 -0
  623. package/src/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js +9 -0
  624. package/src/components/inspector-controls-tabs/utils.js +28 -0
  625. package/src/components/line-height-control/test/index.js +5 -5
  626. package/src/components/link-control/README.md +1 -1
  627. package/src/components/link-control/index.js +1 -0
  628. package/src/components/link-control/search-input.js +0 -1
  629. package/src/components/link-control/test/index.js +204 -403
  630. package/src/components/link-control/use-internal-input-value.js +3 -3
  631. package/src/components/list-view/block-select-button.js +1 -1
  632. package/src/components/list-view/block.js +3 -0
  633. package/src/components/list-view/branch.js +10 -8
  634. package/src/components/list-view/style.scss +21 -16
  635. package/src/components/media-placeholder/{style.scss → content.scss} +0 -0
  636. package/src/components/media-replace-flow/test/index.js +39 -9
  637. package/src/components/media-upload/test/index.native.js +2 -0
  638. package/src/components/off-canvas-editor/appender.js +98 -0
  639. package/src/components/off-canvas-editor/block-edit-button.js +27 -0
  640. package/src/components/off-canvas-editor/block-select-button.js +6 -2
  641. package/src/components/off-canvas-editor/block.js +160 -77
  642. package/src/components/off-canvas-editor/branch.js +3 -5
  643. package/src/components/off-canvas-editor/index.js +68 -33
  644. package/src/components/off-canvas-editor/leaf.js +5 -1
  645. package/src/components/off-canvas-editor/link-ui.js +166 -0
  646. package/src/components/off-canvas-editor/style.scss +19 -386
  647. package/src/components/off-canvas-editor/test/use-inserted-block.js +108 -0
  648. package/src/components/off-canvas-editor/update-attributes.js +99 -0
  649. package/src/components/off-canvas-editor/use-inserted-block.js +47 -0
  650. package/src/components/plain-text/{style.scss → content.scss} +0 -0
  651. package/src/components/recursion-provider/test/index.js +27 -29
  652. package/src/components/responsive-block-control/label.js +2 -3
  653. package/src/components/responsive-block-control/test/index.js +4 -2
  654. package/src/components/rich-text/content.scss +42 -0
  655. package/src/components/rich-text/format-edit.js +6 -10
  656. package/src/components/rich-text/format-toolbar/index.js +6 -4
  657. package/src/components/rich-text/index.js +3 -2
  658. package/src/components/rich-text/index.native.js +0 -2
  659. package/src/components/rich-text/style.scss +0 -43
  660. package/src/components/rich-text/use-insert-replacement-text.js +31 -0
  661. package/src/components/rich-text/use-paste-handler.js +33 -14
  662. package/src/components/rich-text/use-undo-automatic-change.js +7 -1
  663. package/src/components/rich-text/utils.js +2 -21
  664. package/src/components/spacing-sizes-control/index.js +0 -1
  665. package/src/components/spacing-sizes-control/spacing-input-control.js +9 -0
  666. package/src/components/spacing-sizes-control/utils.js +1 -1
  667. package/src/components/typewriter/index.js +3 -1
  668. package/src/components/ungroup-button/index.native.js +6 -2
  669. package/src/components/url-input/index.js +57 -73
  670. package/src/components/url-input/test/button.js +2 -0
  671. package/src/components/url-popover/image-url-input-ui.js +5 -4
  672. package/src/components/url-popover/test/__snapshots__/index.js.snap +8 -6
  673. package/src/components/url-popover/test/index.js +37 -9
  674. package/src/components/use-block-display-information/index.js +14 -5
  675. package/src/components/use-setting/index.js +13 -1
  676. package/src/components/use-setting/test/index.js +99 -0
  677. package/src/components/warning/test/index.js +2 -0
  678. package/src/components/writing-flow/index.js +1 -1
  679. package/src/content.scss +10 -0
  680. package/src/hooks/border.js +0 -1
  681. package/src/hooks/child-layout.js +190 -0
  682. package/src/hooks/color-panel.js +0 -1
  683. package/src/hooks/color.js +0 -2
  684. package/src/hooks/content-lock-ui.js +1 -1
  685. package/src/hooks/dimensions.js +45 -7
  686. package/src/hooks/font-family.js +3 -5
  687. package/src/hooks/font-size.js +13 -4
  688. package/src/hooks/layout.js +60 -0
  689. package/src/hooks/min-height.js +2 -19
  690. package/src/hooks/test/use-typography-props.js +26 -0
  691. package/src/hooks/use-typography-props.js +15 -7
  692. package/src/store/reducer.js +471 -428
  693. package/src/store/selectors.js +57 -59
  694. package/src/store/test/performance.js +71 -0
  695. package/src/store/test/reducer.js +623 -491
  696. package/src/store/test/selectors.js +1820 -1306
  697. package/src/style.scss +4 -7
  698. package/src/utils/pasting.js +3 -9
  699. package/src/utils/sorting.js +54 -0
  700. package/src/utils/test/sorting.js +49 -0
  701. package/tsconfig.tsbuildinfo +1 -1
  702. package/build/components/block-preview/live.js +0 -30
  703. package/build/components/block-preview/live.js.map +0 -1
  704. package/build/components/colors-gradients/use-common-single-multiple-selects.js +0 -21
  705. package/build/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  706. package/build/components/rich-text/file-paste-handler.js +0 -21
  707. package/build/components/rich-text/file-paste-handler.js.map +0 -1
  708. package/build-module/components/block-preview/live.js +0 -20
  709. package/build-module/components/block-preview/live.js.map +0 -1
  710. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  711. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  712. package/build-module/components/rich-text/file-paste-handler.js +0 -13
  713. package/build-module/components/rich-text/file-paste-handler.js.map +0 -1
  714. package/src/components/block-preview/live.js +0 -19
  715. package/src/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  716. package/src/components/rich-text/file-paste-handler.js +0 -13
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { omit, mapValues, isEqual, isEmpty } from 'lodash';
4
+ import fastDeepEqual from 'fast-deep-equal/es6';
5
5
  /**
6
6
  * WordPress dependencies
7
7
  */
@@ -31,16 +31,18 @@ const identity = x => x;
31
31
 
32
32
  function mapBlockOrder(blocks) {
33
33
  let rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
34
- const result = {
35
- [rootClientId]: []
36
- };
34
+ const result = new Map();
35
+ const current = [];
36
+ result.set(rootClientId, current);
37
37
  blocks.forEach(block => {
38
38
  const {
39
39
  clientId,
40
40
  innerBlocks
41
41
  } = block;
42
- result[rootClientId].push(clientId);
43
- Object.assign(result, mapBlockOrder(innerBlocks, clientId));
42
+ current.push(clientId);
43
+ mapBlockOrder(innerBlocks, clientId).forEach((order, subClientId) => {
44
+ result.set(subClientId, order);
45
+ });
44
46
  });
45
47
  return result;
46
48
  }
@@ -57,9 +59,25 @@ function mapBlockOrder(blocks) {
57
59
 
58
60
  function mapBlockParents(blocks) {
59
61
  let rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
60
- return blocks.reduce((result, block) => Object.assign(result, {
61
- [block.clientId]: rootClientId
62
- }, mapBlockParents(block.innerBlocks, block.clientId)), {});
62
+ const result = [];
63
+ const stack = [[rootClientId, blocks]];
64
+
65
+ while (stack.length) {
66
+ const [parent, currentBlocks] = stack.shift();
67
+ currentBlocks.forEach(_ref => {
68
+ let {
69
+ innerBlocks,
70
+ ...block
71
+ } = _ref;
72
+ result.push([block.clientId, parent]);
73
+
74
+ if (innerBlocks !== null && innerBlocks !== void 0 && innerBlocks.length) {
75
+ stack.push([block.clientId, innerBlocks]);
76
+ }
77
+ });
78
+ }
79
+
80
+ return result;
63
81
  }
64
82
  /**
65
83
  * Helper method to iterate through all blocks, recursing into inner blocks,
@@ -69,12 +87,28 @@ function mapBlockParents(blocks) {
69
87
  * @param {Array} blocks Blocks to flatten.
70
88
  * @param {Function} transform Transforming function to be applied to each block.
71
89
  *
72
- * @return {Object} Flattened object.
90
+ * @return {Array} Flattened object.
73
91
  */
74
92
 
75
93
 
76
94
  function flattenBlocks(blocks) {
77
95
  let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity;
96
+ const result = [];
97
+ const stack = [...blocks];
98
+
99
+ while (stack.length) {
100
+ const {
101
+ innerBlocks,
102
+ ...block
103
+ } = stack.shift();
104
+ stack.push(...innerBlocks);
105
+ result.push([block.clientId, transform(block)]);
106
+ }
107
+
108
+ return result;
109
+ }
110
+
111
+ function getFlattenedClientIds(blocks) {
78
112
  const result = {};
79
113
  const stack = [...blocks];
80
114
 
@@ -84,7 +118,7 @@ function flattenBlocks(blocks) {
84
118
  ...block
85
119
  } = stack.shift();
86
120
  stack.push(...innerBlocks);
87
- result[block.clientId] = transform(block);
121
+ result[block.clientId] = true;
88
122
  }
89
123
 
90
124
  return result;
@@ -96,12 +130,18 @@ function flattenBlocks(blocks) {
96
130
  *
97
131
  * @param {Array} blocks Blocks to flatten.
98
132
  *
99
- * @return {Object} Flattened block attributes object.
133
+ * @return {Array} Flattened block attributes object.
100
134
  */
101
135
 
102
136
 
103
137
  function getFlattenedBlocksWithoutAttributes(blocks) {
104
- return flattenBlocks(blocks, block => omit(block, 'attributes'));
138
+ return flattenBlocks(blocks, block => {
139
+ const {
140
+ attributes,
141
+ ...restBlock
142
+ } = block;
143
+ return restBlock;
144
+ });
105
145
  }
106
146
  /**
107
147
  * Given an array of blocks, returns an object containing all block attributes,
@@ -110,32 +150,13 @@ function getFlattenedBlocksWithoutAttributes(blocks) {
110
150
  *
111
151
  * @param {Array} blocks Blocks to flatten.
112
152
  *
113
- * @return {Object} Flattened block attributes object.
153
+ * @return {Array} Flattened block attributes object.
114
154
  */
115
155
 
116
156
 
117
157
  function getFlattenedBlockAttributes(blocks) {
118
158
  return flattenBlocks(blocks, block => block.attributes);
119
159
  }
120
- /**
121
- * Returns an object against which it is safe to perform mutating operations,
122
- * given the original object and its current working copy.
123
- *
124
- * @param {Object} original Original object.
125
- * @param {Object} working Working object.
126
- *
127
- * @return {Object} Mutation-safe object.
128
- */
129
-
130
-
131
- function getMutateSafeObject(original, working) {
132
- if (original === working) {
133
- return { ...original
134
- };
135
- }
136
-
137
- return working;
138
- }
139
160
  /**
140
161
  * Returns true if the two object arguments have the same keys, or false
141
162
  * otherwise.
@@ -148,7 +169,7 @@ function getMutateSafeObject(original, working) {
148
169
 
149
170
 
150
171
  export function hasSameKeys(a, b) {
151
- return isEqual(Object.keys(a), Object.keys(b));
172
+ return fastDeepEqual(Object.keys(a), Object.keys(b));
152
173
  }
153
174
  /**
154
175
  * Returns true if, given the currently dispatching action and the previously
@@ -162,11 +183,11 @@ export function hasSameKeys(a, b) {
162
183
  */
163
184
 
164
185
  export function isUpdatingSameBlockAttribute(action, lastAction) {
165
- return action.type === 'UPDATE_BLOCK_ATTRIBUTES' && lastAction !== undefined && lastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' && isEqual(action.clientIds, lastAction.clientIds) && hasSameKeys(action.attributes, lastAction.attributes);
186
+ return action.type === 'UPDATE_BLOCK_ATTRIBUTES' && lastAction !== undefined && lastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' && fastDeepEqual(action.clientIds, lastAction.clientIds) && hasSameKeys(action.attributes, lastAction.attributes);
166
187
  }
167
188
 
168
- function buildBlockTree(state, blocks) {
169
- const result = {};
189
+ function updateBlockTreeForBlocks(state, blocks) {
190
+ const treeToUpdate = state.tree;
170
191
  const stack = [...blocks];
171
192
  const flattenedBlocks = [...blocks];
172
193
 
@@ -178,26 +199,25 @@ function buildBlockTree(state, blocks) {
178
199
 
179
200
 
180
201
  for (const block of flattenedBlocks) {
181
- result[block.clientId] = {};
202
+ treeToUpdate.set(block.clientId, {});
182
203
  }
183
204
 
184
205
  for (const block of flattenedBlocks) {
185
- result[block.clientId] = Object.assign(result[block.clientId], { ...state.byClientId[block.clientId],
186
- attributes: state.attributes[block.clientId],
187
- innerBlocks: block.innerBlocks.map(subBlock => result[subBlock.clientId])
188
- });
206
+ treeToUpdate.set(block.clientId, Object.assign(treeToUpdate.get(block.clientId), { ...state.byClientId.get(block.clientId),
207
+ attributes: state.attributes.get(block.clientId),
208
+ innerBlocks: block.innerBlocks.map(subBlock => treeToUpdate.get(subBlock.clientId))
209
+ }));
189
210
  }
190
-
191
- return result;
192
211
  }
193
212
 
194
- function updateParentInnerBlocksInTree(state, tree, updatedClientIds) {
195
- let updateChildrenOfUpdatedClientIds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
213
+ function updateParentInnerBlocksInTree(state, updatedClientIds) {
214
+ let updateChildrenOfUpdatedClientIds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
215
+ const treeToUpdate = state.tree;
196
216
  const uncontrolledParents = new Set([]);
197
217
  const controlledParents = new Set();
198
218
 
199
219
  for (const clientId of updatedClientIds) {
200
- let current = updateChildrenOfUpdatedClientIds ? clientId : state.parents[clientId];
220
+ let current = updateChildrenOfUpdatedClientIds ? clientId : state.parents.get(clientId);
201
221
 
202
222
  do {
203
223
  if (state.controlledInnerBlocks[current]) {
@@ -208,7 +228,7 @@ function updateParentInnerBlocksInTree(state, tree, updatedClientIds) {
208
228
  } else {
209
229
  // Else continue traversing up through parents.
210
230
  uncontrolledParents.add(current);
211
- current = state.parents[current];
231
+ current = state.parents.get(current);
212
232
  }
213
233
  } while (current !== undefined);
214
234
  } // To make sure the order of assignments doesn't matter,
@@ -216,23 +236,21 @@ function updateParentInnerBlocksInTree(state, tree, updatedClientIds) {
216
236
 
217
237
 
218
238
  for (const clientId of uncontrolledParents) {
219
- tree[clientId] = { ...tree[clientId]
220
- };
239
+ treeToUpdate.set(clientId, { ...treeToUpdate.get(clientId)
240
+ });
221
241
  }
222
242
 
223
243
  for (const clientId of uncontrolledParents) {
224
- tree[clientId].innerBlocks = (state.order[clientId] || []).map(subClientId => tree[subClientId]);
244
+ treeToUpdate.get(clientId).innerBlocks = (state.order.get(clientId) || []).map(subClientId => treeToUpdate.get(subClientId));
225
245
  } // Controlled parent blocks, need a dedicated key for their inner blocks
226
246
  // to be used when doing getBlocks( controlledBlockClientId ).
227
247
 
228
248
 
229
249
  for (const clientId of controlledParents) {
230
- tree['controlled||' + clientId] = {
231
- innerBlocks: (state.order[clientId] || []).map(subClientId => tree[subClientId])
232
- };
250
+ treeToUpdate.set('controlled||' + clientId, {
251
+ innerBlocks: (state.order.get(clientId) || []).map(subClientId => treeToUpdate.get(subClientId))
252
+ });
233
253
  }
234
-
235
- return tree;
236
254
  }
237
255
  /**
238
256
  * Higher-order reducer intended to compute full block objects key for each block in the post.
@@ -254,61 +272,61 @@ const withBlockTree = reducer => function () {
254
272
  return state;
255
273
  }
256
274
 
257
- newState.tree = state.tree ? state.tree : {};
275
+ newState.tree = state.tree ? state.tree : new Map();
258
276
 
259
277
  switch (action.type) {
260
278
  case 'RECEIVE_BLOCKS':
261
279
  case 'INSERT_BLOCKS':
262
280
  {
263
- const subTree = buildBlockTree(newState, action.blocks);
264
- newState.tree = updateParentInnerBlocksInTree(newState, { ...newState.tree,
265
- ...subTree
266
- }, action.rootClientId ? [action.rootClientId] : [''], true);
281
+ newState.tree = new Map(newState.tree);
282
+ updateBlockTreeForBlocks(newState, action.blocks);
283
+ updateParentInnerBlocksInTree(newState, action.rootClientId ? [action.rootClientId] : [''], true);
267
284
  break;
268
285
  }
269
286
 
270
287
  case 'UPDATE_BLOCK':
271
- newState.tree = updateParentInnerBlocksInTree(newState, { ...newState.tree,
272
- [action.clientId]: { ...newState.tree[action.clientId],
273
- ...newState.byClientId[action.clientId],
274
- attributes: newState.attributes[action.clientId]
275
- }
276
- }, [action.clientId], false);
288
+ newState.tree = new Map(newState.tree);
289
+ newState.tree.set(action.clientId, { ...newState.tree.get(action.clientId),
290
+ ...newState.byClientId.get(action.clientId),
291
+ attributes: newState.attributes.get(action.clientId)
292
+ });
293
+ updateParentInnerBlocksInTree(newState, [action.clientId], false);
277
294
  break;
278
295
 
279
296
  case 'UPDATE_BLOCK_ATTRIBUTES':
280
297
  {
281
- const newSubTree = action.clientIds.reduce((result, clientId) => {
282
- result[clientId] = { ...newState.tree[clientId],
283
- attributes: newState.attributes[clientId]
284
- };
285
- return result;
286
- }, {});
287
- newState.tree = updateParentInnerBlocksInTree(newState, { ...newState.tree,
288
- ...newSubTree
289
- }, action.clientIds, false);
298
+ newState.tree = new Map(newState.tree);
299
+ action.clientIds.forEach(clientId => {
300
+ newState.tree.set(clientId, { ...newState.tree.get(clientId),
301
+ attributes: newState.attributes.get(clientId)
302
+ });
303
+ });
304
+ updateParentInnerBlocksInTree(newState, action.clientIds, false);
290
305
  break;
291
306
  }
292
307
 
293
308
  case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
294
309
  {
295
- const subTree = buildBlockTree(newState, action.blocks);
296
- newState.tree = updateParentInnerBlocksInTree(newState, { ...omit(newState.tree, action.replacedClientIds.concat( // Controlled inner blocks are only removed
297
- // if the block doesn't move to another position
298
- // otherwise their content will be lost.
299
- action.replacedClientIds.filter(clientId => !subTree[clientId]).map(clientId => 'controlled||' + clientId))),
300
- ...subTree
301
- }, action.blocks.map(b => b.clientId), false); // If there are no replaced blocks, it means we're removing blocks so we need to update their parent.
310
+ const inserterClientIds = getFlattenedClientIds(action.blocks);
311
+ newState.tree = new Map(newState.tree);
312
+ action.replacedClientIds.concat( // Controlled inner blocks are only removed
313
+ // if the block doesn't move to another position
314
+ // otherwise their content will be lost.
315
+ action.replacedClientIds.filter(clientId => !inserterClientIds[clientId]).map(clientId => 'controlled||' + clientId)).forEach(key => {
316
+ newState.tree.delete(key);
317
+ });
318
+ updateBlockTreeForBlocks(newState, action.blocks);
319
+ updateParentInnerBlocksInTree(newState, action.blocks.map(b => b.clientId), false); // If there are no replaced blocks, it means we're removing blocks so we need to update their parent.
302
320
 
303
321
  const parentsOfRemovedBlocks = [];
304
322
 
305
323
  for (const clientId of action.clientIds) {
306
- if (state.parents[clientId] !== undefined && (state.parents[clientId] === '' || newState.byClientId[state.parents[clientId]])) {
307
- parentsOfRemovedBlocks.push(state.parents[clientId]);
324
+ if (state.parents.get(clientId) !== undefined && (state.parents.get(clientId) === '' || newState.byClientId.get(state.parents.get(clientId)))) {
325
+ parentsOfRemovedBlocks.push(state.parents.get(clientId));
308
326
  }
309
327
  }
310
328
 
311
- newState.tree = updateParentInnerBlocksInTree(newState, newState.tree, parentsOfRemovedBlocks, true);
329
+ updateParentInnerBlocksInTree(newState, parentsOfRemovedBlocks, true);
312
330
  break;
313
331
  }
314
332
 
@@ -316,12 +334,16 @@ const withBlockTree = reducer => function () {
316
334
  const parentsOfRemovedBlocks = [];
317
335
 
318
336
  for (const clientId of action.clientIds) {
319
- if (state.parents[clientId] !== undefined && (state.parents[clientId] === '' || newState.byClientId[state.parents[clientId]])) {
320
- parentsOfRemovedBlocks.push(state.parents[clientId]);
337
+ if (state.parents.get(clientId) !== undefined && (state.parents.get(clientId) === '' || newState.byClientId.get(state.parents.get(clientId)))) {
338
+ parentsOfRemovedBlocks.push(state.parents.get(clientId));
321
339
  }
322
340
  }
323
341
 
324
- newState.tree = updateParentInnerBlocksInTree(newState, omit(newState.tree, action.removedClientIds.concat(action.removedClientIds.map(clientId => 'controlled||' + clientId))), parentsOfRemovedBlocks, true);
342
+ newState.tree = new Map(newState.tree);
343
+ action.removedClientIds.concat(action.removedClientIds.map(clientId => 'controlled||' + clientId)).forEach(key => {
344
+ newState.tree.delete(key);
345
+ });
346
+ updateParentInnerBlocksInTree(newState, parentsOfRemovedBlocks, true);
325
347
  break;
326
348
 
327
349
  case 'MOVE_BLOCKS_TO_POSITION':
@@ -338,7 +360,8 @@ const withBlockTree = reducer => function () {
338
360
  updatedBlockUids.push(action.toRootClientId);
339
361
  }
340
362
 
341
- newState.tree = updateParentInnerBlocksInTree(newState, newState.tree, updatedBlockUids, true);
363
+ newState.tree = new Map(newState.tree);
364
+ updateParentInnerBlocksInTree(newState, updatedBlockUids, true);
342
365
  break;
343
366
  }
344
367
 
@@ -346,28 +369,27 @@ const withBlockTree = reducer => function () {
346
369
  case 'MOVE_BLOCKS_DOWN':
347
370
  {
348
371
  const updatedBlockUids = [action.rootClientId ? action.rootClientId : ''];
349
- newState.tree = updateParentInnerBlocksInTree(newState, newState.tree, updatedBlockUids, true);
372
+ newState.tree = new Map(newState.tree);
373
+ updateParentInnerBlocksInTree(newState, updatedBlockUids, true);
350
374
  break;
351
375
  }
352
376
 
353
377
  case 'SAVE_REUSABLE_BLOCK_SUCCESS':
354
378
  {
355
- const updatedBlockUids = Object.entries(newState.attributes).filter(_ref => {
356
- let [clientId, attributes] = _ref;
357
- return newState.byClientId[clientId].name === 'core/block' && attributes.ref === action.updatedId;
358
- }).map(_ref2 => {
359
- let [clientId] = _ref2;
360
- return clientId;
379
+ const updatedBlockUids = [];
380
+ newState.attributes.forEach((attributes, clientId) => {
381
+ if (newState.byClientId.get(clientId).name === 'core/block' && attributes.ref === action.updatedId) {
382
+ updatedBlockUids.push(clientId);
383
+ }
384
+ });
385
+ newState.tree = new Map(newState.tree);
386
+ updatedBlockUids.forEach(clientId => {
387
+ newState.tree.set(clientId, { ...newState.byClientId.get(clientId),
388
+ attributes: newState.attributes.get(clientId),
389
+ innerBlocks: newState.tree.get(clientId).innerBlocks
390
+ });
361
391
  });
362
- newState.tree = updateParentInnerBlocksInTree(newState, { ...newState.tree,
363
- ...updatedBlockUids.reduce((result, clientId) => {
364
- result[clientId] = { ...newState.byClientId[clientId],
365
- attributes: newState.attributes[clientId],
366
- innerBlocks: newState.tree[clientId].innerBlocks
367
- };
368
- return result;
369
- }, {})
370
- }, updatedBlockUids, false);
392
+ updateParentInnerBlocksInTree(newState, updatedBlockUids, false);
371
393
  }
372
394
  }
373
395
 
@@ -464,7 +486,7 @@ const withInnerBlocksRemoveCascade = reducer => (state, action) => {
464
486
  let result = clientIds;
465
487
 
466
488
  for (let i = 0; i < result.length; i++) {
467
- if (!state.order[result[i]] || action.keepControlledInnerBlocks && action.keepControlledInnerBlocks[result[i]]) {
489
+ if (!state.order.get(result[i]) || action.keepControlledInnerBlocks && action.keepControlledInnerBlocks[result[i]]) {
468
490
  continue;
469
491
  }
470
492
 
@@ -472,7 +494,7 @@ const withInnerBlocksRemoveCascade = reducer => (state, action) => {
472
494
  result = [...result];
473
495
  }
474
496
 
475
- result.push(...state.order[result[i]]);
497
+ result.push(...state.order.get(result[i]));
476
498
  }
477
499
 
478
500
  return result;
@@ -513,19 +535,17 @@ const withInnerBlocksRemoveCascade = reducer => (state, action) => {
513
535
  const withBlockReset = reducer => (state, action) => {
514
536
  if (action.type === 'RESET_BLOCKS') {
515
537
  const newState = { ...state,
516
- byClientId: getFlattenedBlocksWithoutAttributes(action.blocks),
517
- attributes: getFlattenedBlockAttributes(action.blocks),
538
+ byClientId: new Map(getFlattenedBlocksWithoutAttributes(action.blocks)),
539
+ attributes: new Map(getFlattenedBlockAttributes(action.blocks)),
518
540
  order: mapBlockOrder(action.blocks),
519
- parents: mapBlockParents(action.blocks),
541
+ parents: new Map(mapBlockParents(action.blocks)),
520
542
  controlledInnerBlocks: {}
521
543
  };
522
- const subTree = buildBlockTree(newState, action.blocks);
523
- newState.tree = { ...subTree,
524
- // Root.
525
- '': {
526
- innerBlocks: action.blocks.map(subBlock => subTree[subBlock.clientId])
527
- }
528
- };
544
+ newState.tree = new Map(state === null || state === void 0 ? void 0 : state.tree);
545
+ updateBlockTreeForBlocks(newState, action.blocks);
546
+ newState.tree.set('', {
547
+ innerBlocks: action.blocks.map(subBlock => newState.tree.get(subBlock.clientId))
548
+ });
529
549
  return newState;
530
550
  }
531
551
 
@@ -578,11 +598,11 @@ const withReplaceInnerBlocks = reducer => (state, action) => {
578
598
 
579
599
  let stateAfterBlocksRemoval = state;
580
600
 
581
- if (state.order[action.rootClientId]) {
601
+ if (state.order.get(action.rootClientId)) {
582
602
  stateAfterBlocksRemoval = reducer(stateAfterBlocksRemoval, {
583
603
  type: 'REMOVE_BLOCKS',
584
604
  keepControlledInnerBlocks: nestedControllers,
585
- clientIds: state.order[action.rootClientId]
605
+ clientIds: state.order.get(action.rootClientId)
586
606
  });
587
607
  }
588
608
 
@@ -596,26 +616,21 @@ const withReplaceInnerBlocks = reducer => (state, action) => {
596
616
  // preserve their block order. Otherwise, an inner block controller's blocks
597
617
  // will be deleted entirely from its entity.
598
618
 
599
- stateAfterInsert.order = { ...stateAfterInsert.order,
600
- ...Object.keys(nestedControllers).reduce((result, key) => {
601
- if (state.order[key]) {
602
- result[key] = state.order[key];
603
- }
604
-
605
- return result;
606
- }, {})
607
- };
608
- stateAfterInsert.tree = { ...stateAfterInsert.tree,
609
- ...Object.keys(nestedControllers).reduce((result, _key) => {
610
- const key = `controlled||${_key}`;
611
-
612
- if (state.tree[key]) {
613
- result[key] = state.tree[key];
614
- }
619
+ const stateAfterInsertOrder = new Map(stateAfterInsert.order);
620
+ Object.keys(nestedControllers).forEach(key => {
621
+ if (state.order.get(key)) {
622
+ stateAfterInsertOrder.set(key, state.order.get(key));
623
+ }
624
+ });
625
+ stateAfterInsert.order = stateAfterInsertOrder;
626
+ stateAfterInsert.tree = new Map(stateAfterInsert.tree);
627
+ Object.keys(nestedControllers).forEach(_key => {
628
+ const key = `controlled||${_key}`;
615
629
 
616
- return result;
617
- }, {})
618
- };
630
+ if (state.tree.has(key)) {
631
+ stateAfterInsert.tree.set(key, state.tree.get(key));
632
+ }
633
+ });
619
634
  }
620
635
 
621
636
  return stateAfterInsert;
@@ -645,18 +660,17 @@ const withSaveReusableBlock = reducer => (state, action) => {
645
660
 
646
661
  state = { ...state
647
662
  };
648
- state.attributes = mapValues(state.attributes, (attributes, clientId) => {
663
+ state.attributes = new Map(state.attributes);
664
+ state.attributes.forEach((attributes, clientId) => {
649
665
  const {
650
666
  name
651
- } = state.byClientId[clientId];
667
+ } = state.byClientId.get(clientId);
652
668
 
653
669
  if (name === 'core/block' && attributes.ref === id) {
654
- return { ...attributes,
670
+ state.attributes.set(clientId, { ...attributes,
655
671
  ref: updatedId
656
- };
672
+ });
657
673
  }
658
-
659
- return attributes;
660
674
  });
661
675
  }
662
676
 
@@ -699,137 +713,205 @@ export const blocks = pipe(combineReducers, withSaveReusableBlock, // Needs to b
699
713
  withBlockTree, // Needs to be before withInnerBlocksRemoveCascade.
700
714
  withInnerBlocksRemoveCascade, withReplaceInnerBlocks, // Needs to be after withInnerBlocksRemoveCascade.
701
715
  withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetControlledBlocks)({
716
+ // The state is using a Map instead of a plain object for performance reasons.
717
+ // You can run the "./test/performance.js" unit test to check the impact
718
+ // code changes can have on this reducer.
702
719
  byClientId() {
703
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
720
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();
704
721
  let action = arguments.length > 1 ? arguments[1] : undefined;
705
722
 
706
723
  switch (action.type) {
707
724
  case 'RECEIVE_BLOCKS':
708
725
  case 'INSERT_BLOCKS':
709
- return { ...state,
710
- ...getFlattenedBlocksWithoutAttributes(action.blocks)
711
- };
726
+ {
727
+ const newState = new Map(state);
728
+ getFlattenedBlocksWithoutAttributes(action.blocks).forEach(_ref2 => {
729
+ let [key, value] = _ref2;
730
+ newState.set(key, value);
731
+ });
732
+ return newState;
733
+ }
712
734
 
713
735
  case 'UPDATE_BLOCK':
714
- // Ignore updates if block isn't known.
715
- if (!state[action.clientId]) {
716
- return state;
717
- } // Do nothing if only attributes change.
736
+ {
737
+ // Ignore updates if block isn't known.
738
+ if (!state.has(action.clientId)) {
739
+ return state;
740
+ } // Do nothing if only attributes change.
718
741
 
719
742
 
720
- const changes = omit(action.updates, 'attributes');
743
+ const {
744
+ attributes,
745
+ ...changes
746
+ } = action.updates;
721
747
 
722
- if (isEmpty(changes)) {
723
- return state;
724
- }
748
+ if (Object.values(changes).length === 0) {
749
+ return state;
750
+ }
725
751
 
726
- return { ...state,
727
- [action.clientId]: { ...state[action.clientId],
752
+ const newState = new Map(state);
753
+ newState.set(action.clientId, { ...state.get(action.clientId),
728
754
  ...changes
729
- }
730
- };
755
+ });
756
+ return newState;
757
+ }
731
758
 
732
759
  case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
733
- if (!action.blocks) {
734
- return state;
735
- }
760
+ {
761
+ if (!action.blocks) {
762
+ return state;
763
+ }
736
764
 
737
- return { ...omit(state, action.replacedClientIds),
738
- ...getFlattenedBlocksWithoutAttributes(action.blocks)
739
- };
765
+ const newState = new Map(state);
766
+ action.replacedClientIds.forEach(clientId => {
767
+ newState.delete(clientId);
768
+ });
769
+ getFlattenedBlocksWithoutAttributes(action.blocks).forEach(_ref3 => {
770
+ let [key, value] = _ref3;
771
+ newState.set(key, value);
772
+ });
773
+ return newState;
774
+ }
740
775
 
741
776
  case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
742
- return omit(state, action.removedClientIds);
777
+ {
778
+ const newState = new Map(state);
779
+ action.removedClientIds.forEach(clientId => {
780
+ newState.delete(clientId);
781
+ });
782
+ return newState;
783
+ }
743
784
  }
744
785
 
745
786
  return state;
746
787
  },
747
788
 
789
+ // The state is using a Map instead of a plain object for performance reasons.
790
+ // You can run the "./test/performance.js" unit test to check the impact
791
+ // code changes can have on this reducer.
748
792
  attributes() {
749
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
793
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();
750
794
  let action = arguments.length > 1 ? arguments[1] : undefined;
751
795
 
752
796
  switch (action.type) {
753
797
  case 'RECEIVE_BLOCKS':
754
798
  case 'INSERT_BLOCKS':
755
- return { ...state,
756
- ...getFlattenedBlockAttributes(action.blocks)
757
- };
799
+ {
800
+ const newState = new Map(state);
801
+ getFlattenedBlockAttributes(action.blocks).forEach(_ref4 => {
802
+ let [key, value] = _ref4;
803
+ newState.set(key, value);
804
+ });
805
+ return newState;
806
+ }
758
807
 
759
808
  case 'UPDATE_BLOCK':
760
- // Ignore updates if block isn't known or there are no attribute changes.
761
- if (!state[action.clientId] || !action.updates.attributes) {
762
- return state;
763
- }
809
+ {
810
+ // Ignore updates if block isn't known or there are no attribute changes.
811
+ if (!state.get(action.clientId) || !action.updates.attributes) {
812
+ return state;
813
+ }
764
814
 
765
- return { ...state,
766
- [action.clientId]: { ...state[action.clientId],
815
+ const newState = new Map(state);
816
+ newState.set(action.clientId, { ...state.get(action.clientId),
767
817
  ...action.updates.attributes
768
- }
769
- };
818
+ });
819
+ return newState;
820
+ }
770
821
 
771
822
  case 'UPDATE_BLOCK_ATTRIBUTES':
772
823
  {
773
824
  // Avoid a state change if none of the block IDs are known.
774
- if (action.clientIds.every(id => !state[id])) {
825
+ if (action.clientIds.every(id => !state.get(id))) {
775
826
  return state;
776
827
  }
777
828
 
778
- const next = action.clientIds.reduce((accumulator, id) => {
779
- var _action$attributes;
829
+ let hasChange = false;
830
+ const newState = new Map(state);
780
831
 
781
- return { ...accumulator,
782
- [id]: Object.entries(action.uniqueByBlock ? action.attributes[id] : (_action$attributes = action.attributes) !== null && _action$attributes !== void 0 ? _action$attributes : {}).reduce((result, _ref3) => {
783
- let [key, value] = _ref3;
832
+ for (const clientId of action.clientIds) {
833
+ var _action$attributes;
784
834
 
785
- // Consider as updates only changed values.
786
- if (value !== result[key]) {
787
- result = getMutateSafeObject(state[id], result);
788
- result[key] = value;
789
- }
835
+ const updatedAttributeEntries = Object.entries(action.uniqueByBlock ? action.attributes[clientId] : (_action$attributes = action.attributes) !== null && _action$attributes !== void 0 ? _action$attributes : {});
790
836
 
791
- return result;
792
- }, state[id])
793
- };
794
- }, {});
837
+ if (updatedAttributeEntries.length === 0) {
838
+ continue;
839
+ }
795
840
 
796
- if (action.clientIds.every(id => next[id] === state[id])) {
797
- return state;
841
+ let hasUpdatedAttributes = false;
842
+ const existingAttributes = state.get(clientId);
843
+ const newAttributes = {};
844
+ updatedAttributeEntries.forEach(_ref5 => {
845
+ let [key, value] = _ref5;
846
+
847
+ if (existingAttributes[key] !== value) {
848
+ hasUpdatedAttributes = true;
849
+ newAttributes[key] = value;
850
+ }
851
+ });
852
+ hasChange = hasChange || hasUpdatedAttributes;
853
+
854
+ if (hasUpdatedAttributes) {
855
+ newState.set(clientId, { ...existingAttributes,
856
+ ...newAttributes
857
+ });
858
+ }
798
859
  }
799
860
 
800
- return { ...state,
801
- ...next
802
- };
861
+ return hasChange ? newState : state;
803
862
  }
804
863
 
805
864
  case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
806
- if (!action.blocks) {
807
- return state;
808
- }
865
+ {
866
+ if (!action.blocks) {
867
+ return state;
868
+ }
809
869
 
810
- return { ...omit(state, action.replacedClientIds),
811
- ...getFlattenedBlockAttributes(action.blocks)
812
- };
870
+ const newState = new Map(state);
871
+ action.replacedClientIds.forEach(clientId => {
872
+ newState.delete(clientId);
873
+ });
874
+ getFlattenedBlockAttributes(action.blocks).forEach(_ref6 => {
875
+ let [key, value] = _ref6;
876
+ newState.set(key, value);
877
+ });
878
+ return newState;
879
+ }
813
880
 
814
881
  case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
815
- return omit(state, action.removedClientIds);
882
+ {
883
+ const newState = new Map(state);
884
+ action.removedClientIds.forEach(clientId => {
885
+ newState.delete(clientId);
886
+ });
887
+ return newState;
888
+ }
816
889
  }
817
890
 
818
891
  return state;
819
892
  },
820
893
 
894
+ // The state is using a Map instead of a plain object for performance reasons.
895
+ // You can run the "./test/performance.js" unit test to check the impact
896
+ // code changes can have on this reducer.
821
897
  order() {
822
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
898
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();
823
899
  let action = arguments.length > 1 ? arguments[1] : undefined;
824
900
 
825
901
  switch (action.type) {
826
902
  case 'RECEIVE_BLOCKS':
827
903
  {
904
+ var _state$get;
905
+
828
906
  const blockOrder = mapBlockOrder(action.blocks);
829
- return { ...state,
830
- ...omit(blockOrder, ''),
831
- '': ((state === null || state === void 0 ? void 0 : state['']) || []).concat(blockOrder[''])
832
- };
907
+ const newState = new Map(state);
908
+ blockOrder.forEach((order, clientId) => {
909
+ if (clientId !== '') {
910
+ newState.set(clientId, order);
911
+ }
912
+ });
913
+ newState.set('', ((_state$get = state.get('')) !== null && _state$get !== void 0 ? _state$get : []).concat(blockOrder['']));
914
+ return newState;
833
915
  }
834
916
 
835
917
  case 'INSERT_BLOCKS':
@@ -837,20 +919,22 @@ withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetCont
837
919
  const {
838
920
  rootClientId = ''
839
921
  } = action;
840
- const subState = state[rootClientId] || [];
922
+ const subState = state.get(rootClientId) || [];
841
923
  const mappedBlocks = mapBlockOrder(action.blocks, rootClientId);
842
924
  const {
843
925
  index = subState.length
844
926
  } = action;
845
- return { ...state,
846
- ...mappedBlocks,
847
- [rootClientId]: insertAt(subState, mappedBlocks[rootClientId], index)
848
- };
927
+ const newState = new Map(state);
928
+ mappedBlocks.forEach((order, clientId) => {
929
+ newState.set(clientId, order);
930
+ });
931
+ newState.set(rootClientId, insertAt(subState, mappedBlocks.get(rootClientId), index));
932
+ return newState;
849
933
  }
850
934
 
851
935
  case 'MOVE_BLOCKS_TO_POSITION':
852
936
  {
853
- var _state$fromRootClient, _state$fromRootClient2;
937
+ var _state$get$filter, _state$get2;
854
938
 
855
939
  const {
856
940
  fromRootClientId = '',
@@ -858,22 +942,22 @@ withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetCont
858
942
  clientIds
859
943
  } = action;
860
944
  const {
861
- index = state[toRootClientId].length
945
+ index = state.get(toRootClientId).length
862
946
  } = action; // Moving inside the same parent block.
863
947
 
864
948
  if (fromRootClientId === toRootClientId) {
865
- const subState = state[toRootClientId];
949
+ const subState = state.get(toRootClientId);
866
950
  const fromIndex = subState.indexOf(clientIds[0]);
867
- return { ...state,
868
- [toRootClientId]: moveTo(state[toRootClientId], fromIndex, index, clientIds.length)
869
- };
951
+ const newState = new Map(state);
952
+ newState.set(toRootClientId, moveTo(state.get(toRootClientId), fromIndex, index, clientIds.length));
953
+ return newState;
870
954
  } // Moving from a parent block to another.
871
955
 
872
956
 
873
- return { ...state,
874
- [fromRootClientId]: (_state$fromRootClient = (_state$fromRootClient2 = state[fromRootClientId]) === null || _state$fromRootClient2 === void 0 ? void 0 : _state$fromRootClient2.filter(id => !clientIds.includes(id))) !== null && _state$fromRootClient !== void 0 ? _state$fromRootClient : [],
875
- [toRootClientId]: insertAt(state[toRootClientId], clientIds, index)
876
- };
957
+ const newState = new Map(state);
958
+ newState.set(fromRootClientId, (_state$get$filter = (_state$get2 = state.get(fromRootClientId)) === null || _state$get2 === void 0 ? void 0 : _state$get2.filter(id => !clientIds.includes(id))) !== null && _state$get$filter !== void 0 ? _state$get$filter : []);
959
+ newState.set(toRootClientId, insertAt(state.get(toRootClientId), clientIds, index));
960
+ return newState;
877
961
  }
878
962
 
879
963
  case 'MOVE_BLOCKS_UP':
@@ -883,16 +967,16 @@ withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetCont
883
967
  rootClientId = ''
884
968
  } = action;
885
969
  const firstClientId = clientIds[0];
886
- const subState = state[rootClientId];
970
+ const subState = state.get(rootClientId);
887
971
 
888
972
  if (!subState.length || firstClientId === subState[0]) {
889
973
  return state;
890
974
  }
891
975
 
892
976
  const firstIndex = subState.indexOf(firstClientId);
893
- return { ...state,
894
- [rootClientId]: moveTo(subState, firstIndex, firstIndex - 1, clientIds.length)
895
- };
977
+ const newState = new Map(state);
978
+ newState.set(rootClientId, moveTo(subState, firstIndex, firstIndex - 1, clientIds.length));
979
+ return newState;
896
980
  }
897
981
 
898
982
  case 'MOVE_BLOCKS_DOWN':
@@ -903,16 +987,16 @@ withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetCont
903
987
  } = action;
904
988
  const firstClientId = clientIds[0];
905
989
  const lastClientId = clientIds[clientIds.length - 1];
906
- const subState = state[rootClientId];
990
+ const subState = state.get(rootClientId);
907
991
 
908
992
  if (!subState.length || lastClientId === subState[subState.length - 1]) {
909
993
  return state;
910
994
  }
911
995
 
912
996
  const firstIndex = subState.indexOf(firstClientId);
913
- return { ...state,
914
- [rootClientId]: moveTo(subState, firstIndex, firstIndex + 1, clientIds.length)
915
- };
997
+ const newState = new Map(state);
998
+ newState.set(rootClientId, moveTo(subState, firstIndex, firstIndex + 1, clientIds.length));
999
+ return newState;
916
1000
  }
917
1001
 
918
1002
  case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
@@ -926,29 +1010,50 @@ withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetCont
926
1010
  }
927
1011
 
928
1012
  const mappedBlocks = mapBlockOrder(action.blocks);
929
- return pipe([nextState => omit(nextState, action.replacedClientIds), nextState => ({ ...nextState,
930
- ...omit(mappedBlocks, '')
931
- }), nextState => mapValues(nextState, subState => Object.values(subState).reduce((result, clientId) => {
932
- if (clientId === clientIds[0]) {
933
- return [...result, ...mappedBlocks['']];
1013
+ const newState = new Map(state);
1014
+ action.replacedClientIds.forEach(clientId => {
1015
+ newState.delete(clientId);
1016
+ });
1017
+ mappedBlocks.forEach((order, clientId) => {
1018
+ if (clientId !== '') {
1019
+ newState.set(clientId, order);
934
1020
  }
935
-
936
- if (clientIds.indexOf(clientId) === -1) {
937
- result.push(clientId);
938
- }
939
-
940
- return result;
941
- }, []))])(state);
1021
+ });
1022
+ newState.forEach((order, clientId) => {
1023
+ const newSubOrder = Object.values(order).reduce((result, subClientId) => {
1024
+ if (subClientId === clientIds[0]) {
1025
+ return [...result, ...mappedBlocks.get('')];
1026
+ }
1027
+
1028
+ if (clientIds.indexOf(subClientId) === -1) {
1029
+ result.push(subClientId);
1030
+ }
1031
+
1032
+ return result;
1033
+ }, []);
1034
+ newState.set(clientId, newSubOrder);
1035
+ });
1036
+ return newState;
942
1037
  }
943
1038
 
944
1039
  case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
945
- return pipe([// Remove inner block ordering for removed blocks.
946
- nextState => omit(nextState, action.removedClientIds), // Remove deleted blocks from other blocks' orderings.
947
- nextState => mapValues(nextState, subState => {
948
- var _subState$filter;
1040
+ {
1041
+ const newState = new Map(state); // Remove inner block ordering for removed blocks.
949
1042
 
950
- return (_subState$filter = subState === null || subState === void 0 ? void 0 : subState.filter(id => !action.removedClientIds.includes(id))) !== null && _subState$filter !== void 0 ? _subState$filter : [];
951
- })])(state);
1043
+ action.removedClientIds.forEach(clientId => {
1044
+ newState.delete(clientId);
1045
+ });
1046
+ newState.forEach((order, clientId) => {
1047
+ var _order$filter;
1048
+
1049
+ const newSubOrder = (_order$filter = order === null || order === void 0 ? void 0 : order.filter(id => !action.removedClientIds.includes(id))) !== null && _order$filter !== void 0 ? _order$filter : [];
1050
+
1051
+ if (newSubOrder.length !== order.length) {
1052
+ newState.set(clientId, newSubOrder);
1053
+ }
1054
+ });
1055
+ return newState;
1056
+ }
952
1057
  }
953
1058
 
954
1059
  return state;
@@ -957,37 +1062,60 @@ withBlockReset, withPersistentBlockChange, withIgnoredBlockChange, withResetCont
957
1062
  // While technically redundant data as the inverse of `order`, it serves as
958
1063
  // an optimization for the selectors which derive the ancestry of a block.
959
1064
  parents() {
960
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1065
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();
961
1066
  let action = arguments.length > 1 ? arguments[1] : undefined;
962
1067
 
963
1068
  switch (action.type) {
964
1069
  case 'RECEIVE_BLOCKS':
965
- return { ...state,
966
- ...mapBlockParents(action.blocks)
967
- };
1070
+ {
1071
+ const newState = new Map(state);
1072
+ mapBlockParents(action.blocks).forEach(_ref7 => {
1073
+ let [key, value] = _ref7;
1074
+ newState.set(key, value);
1075
+ });
1076
+ return newState;
1077
+ }
968
1078
 
969
1079
  case 'INSERT_BLOCKS':
970
- return { ...state,
971
- ...mapBlockParents(action.blocks, action.rootClientId || '')
972
- };
1080
+ {
1081
+ const newState = new Map(state);
1082
+ mapBlockParents(action.blocks, action.rootClientId || '').forEach(_ref8 => {
1083
+ let [key, value] = _ref8;
1084
+ newState.set(key, value);
1085
+ });
1086
+ return newState;
1087
+ }
973
1088
 
974
1089
  case 'MOVE_BLOCKS_TO_POSITION':
975
1090
  {
976
- return { ...state,
977
- ...action.clientIds.reduce((accumulator, id) => {
978
- accumulator[id] = action.toRootClientId || '';
979
- return accumulator;
980
- }, {})
981
- };
1091
+ const newState = new Map(state);
1092
+ action.clientIds.forEach(id => {
1093
+ newState.set(id, action.toRootClientId || '');
1094
+ });
1095
+ return newState;
982
1096
  }
983
1097
 
984
1098
  case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
985
- return { ...omit(state, action.replacedClientIds),
986
- ...mapBlockParents(action.blocks, state[action.clientIds[0]])
987
- };
1099
+ {
1100
+ const newState = new Map(state);
1101
+ action.replacedClientIds.forEach(clientId => {
1102
+ newState.delete(clientId);
1103
+ });
1104
+ mapBlockParents(action.blocks, state.get(action.clientIds[0])).forEach(_ref9 => {
1105
+ let [key, value] = _ref9;
1106
+ newState.set(key, value);
1107
+ });
1108
+ return newState;
1109
+ }
988
1110
 
989
1111
  case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
990
- return omit(state, action.removedClientIds);
1112
+ {
1113
+ const newState = new Map(state);
1114
+ action.removedClientIds.forEach(clientId => {
1115
+ newState.delete(clientId);
1116
+ });
1117
+ return newState;
1118
+ }
991
1119
  }
992
1120
 
993
1121
  return state;
@@ -1388,7 +1516,7 @@ export function insertionPoint() {
1388
1516
  operation
1389
1517
  }; // Bail out updates if the states are the same.
1390
1518
 
1391
- return isEqual(state, nextState) ? state : nextState;
1519
+ return fastDeepEqual(state, nextState) ? state : nextState;
1392
1520
  }
1393
1521
 
1394
1522
  case 'HIDE_INSERTION_POINT':
@@ -1511,7 +1639,10 @@ export const blockListSettings = function () {
1511
1639
  case 'REPLACE_BLOCKS':
1512
1640
  case 'REMOVE_BLOCKS':
1513
1641
  {
1514
- return omit(state, action.clientIds);
1642
+ return Object.fromEntries(Object.entries(state).filter(_ref10 => {
1643
+ let [id] = _ref10;
1644
+ return !action.clientIds.includes(id);
1645
+ }));
1515
1646
  }
1516
1647
 
1517
1648
  case 'UPDATE_BLOCK_LIST_SETTINGS':
@@ -1522,13 +1653,17 @@ export const blockListSettings = function () {
1522
1653
 
1523
1654
  if (!action.settings) {
1524
1655
  if (state.hasOwnProperty(clientId)) {
1525
- return omit(state, clientId);
1656
+ const {
1657
+ [clientId]: removedBlock,
1658
+ ...restBlocks
1659
+ } = state;
1660
+ return restBlocks;
1526
1661
  }
1527
1662
 
1528
1663
  return state;
1529
1664
  }
1530
1665
 
1531
- if (isEqual(state[clientId], action.settings)) {
1666
+ if (fastDeepEqual(state[clientId], action.settings)) {
1532
1667
  return state;
1533
1668
  }
1534
1669