@wordpress/block-editor 15.23.0 → 16.0.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 (684) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/build/autocompleters/block.cjs +10 -2
  3. package/build/autocompleters/block.cjs.map +2 -2
  4. package/build/components/background-image-control/index.cjs +0 -2
  5. package/build/components/background-image-control/index.cjs.map +2 -2
  6. package/build/components/block-canvas/index.cjs +6 -1
  7. package/build/components/block-canvas/index.cjs.map +2 -2
  8. package/build/components/block-controls/groups.cjs +3 -1
  9. package/build/components/block-controls/groups.cjs.map +2 -2
  10. package/build/components/block-edit/edit.cjs +10 -18
  11. package/build/components/block-edit/edit.cjs.map +2 -2
  12. package/build/components/block-inspector/edit-contents.cjs +3 -0
  13. package/build/components/block-inspector/edit-contents.cjs.map +3 -3
  14. package/build/components/block-inspector/index.cjs +2 -3
  15. package/build/components/block-inspector/index.cjs.map +2 -2
  16. package/build/components/block-list/block-invalid-warning.cjs +8 -19
  17. package/build/components/block-list/block-invalid-warning.cjs.map +2 -2
  18. package/build/components/block-list/block.cjs +9 -3
  19. package/build/components/block-list/block.cjs.map +3 -3
  20. package/build/components/block-list/index.cjs +1 -3
  21. package/build/components/block-list/index.cjs.map +2 -2
  22. package/build/components/block-list/use-block-props/index.cjs +3 -1
  23. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  24. package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
  25. package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
  26. package/build/components/block-list/use-block-props/use-focus-handler.cjs +12 -4
  27. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +2 -2
  28. package/build/components/block-styles/use-styles-for-block.cjs +2 -1
  29. package/build/components/block-styles/use-styles-for-block.cjs.map +2 -2
  30. package/build/components/block-title/use-block-display-title.cjs +7 -2
  31. package/build/components/block-title/use-block-display-title.cjs.map +2 -2
  32. package/build/components/block-toolbar/block-toolbar-icon.cjs +10 -14
  33. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  34. package/build/components/block-toolbar/index.cjs +43 -24
  35. package/build/components/block-toolbar/index.cjs.map +2 -2
  36. package/build/components/block-tools/index.cjs +7 -2
  37. package/build/components/block-tools/index.cjs.map +2 -2
  38. package/build/components/block-variation-transforms/index.cjs +0 -1
  39. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  40. package/build/components/block-visibility/modal.cjs +20 -6
  41. package/build/components/block-visibility/modal.cjs.map +2 -2
  42. package/build/components/block-visibility/use-block-visibility.cjs +16 -6
  43. package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
  44. package/build/components/block-visibility/utils.cjs +15 -2
  45. package/build/components/block-visibility/utils.cjs.map +3 -3
  46. package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
  47. package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
  48. package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
  49. package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
  50. package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
  51. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  52. package/build/components/child-layout-control/index.cjs +0 -6
  53. package/build/components/child-layout-control/index.cjs.map +2 -2
  54. package/build/components/colors-gradients/control.cjs +5 -5
  55. package/build/components/colors-gradients/control.cjs.map +2 -2
  56. package/build/components/date-format-picker/index.cjs +0 -1
  57. package/build/components/date-format-picker/index.cjs.map +2 -2
  58. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +1 -2
  59. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +2 -2
  60. package/build/components/dimensions-tool/scale-tool.cjs +0 -1
  61. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  62. package/build/components/dimensions-tool/width-height-tool.cjs +2 -4
  63. package/build/components/dimensions-tool/width-height-tool.cjs.map +2 -2
  64. package/build/components/font-appearance-control/index.cjs +6 -25
  65. package/build/components/font-appearance-control/index.cjs.map +3 -3
  66. package/build/components/font-family/index.cjs +6 -15
  67. package/build/components/font-family/index.cjs.map +3 -3
  68. package/build/components/font-sizes/font-size-picker.cjs +1 -2
  69. package/build/components/font-sizes/font-size-picker.cjs.map +2 -2
  70. package/build/components/global-styles/border-panel.cjs +0 -1
  71. package/build/components/global-styles/border-panel.cjs.map +2 -2
  72. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  73. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  74. package/build/components/global-styles/state-control-badges.cjs +39 -3
  75. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  76. package/build/components/global-styles/typography-panel.cjs +4 -11
  77. package/build/components/global-styles/typography-panel.cjs.map +2 -2
  78. package/build/components/height-control/index.cjs +0 -2
  79. package/build/components/height-control/index.cjs.map +2 -2
  80. package/build/components/html-element-control/index.cjs +0 -1
  81. package/build/components/html-element-control/index.cjs.map +2 -2
  82. package/build/components/image-editor/index.cjs +5 -0
  83. package/build/components/image-editor/index.cjs.map +3 -3
  84. package/build/components/image-editor/zoom-dropdown.cjs +0 -1
  85. package/build/components/image-editor/zoom-dropdown.cjs.map +2 -2
  86. package/build/components/image-size-control/index.cjs +3 -7
  87. package/build/components/image-size-control/index.cjs.map +2 -2
  88. package/build/components/inner-content/index.cjs +107 -0
  89. package/build/components/inner-content/index.cjs.map +7 -0
  90. package/build/components/inserter/hooks/use-block-types-state.cjs +10 -2
  91. package/build/components/inserter/hooks/use-block-types-state.cjs.map +2 -2
  92. package/build/components/inserter/media-tab/hooks.cjs +67 -12
  93. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  94. package/build/components/inserter/media-tab/media-list.cjs +3 -1
  95. package/build/components/inserter/media-tab/media-list.cjs.map +2 -2
  96. package/build/components/inserter/media-tab/media-panel.cjs +287 -28
  97. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  98. package/build/components/inserter/media-tab/media-preview.cjs +32 -17
  99. package/build/components/inserter/media-tab/media-preview.cjs.map +2 -2
  100. package/build/components/inserter/media-tab/media-tab.cjs +26 -6
  101. package/build/components/inserter/media-tab/media-tab.cjs.map +2 -2
  102. package/build/components/inserter/mobile-tab-navigation.cjs +6 -1
  103. package/build/components/inserter/mobile-tab-navigation.cjs.map +2 -2
  104. package/build/components/inserter/no-results.cjs +2 -2
  105. package/build/components/inserter/no-results.cjs.map +2 -2
  106. package/build/components/inserter/preview-panel.cjs +2 -1
  107. package/build/components/inserter/preview-panel.cjs.map +2 -2
  108. package/build/components/inserter-list-item/index.cjs +8 -2
  109. package/build/components/inserter-list-item/index.cjs.map +2 -2
  110. package/build/components/keyboard-shortcuts/index.cjs +19 -11
  111. package/build/components/keyboard-shortcuts/index.cjs.map +2 -2
  112. package/build/components/letter-spacing-control/index.cjs +0 -24
  113. package/build/components/letter-spacing-control/index.cjs.map +3 -3
  114. package/build/components/line-height-control/index.cjs +6 -22
  115. package/build/components/line-height-control/index.cjs.map +3 -3
  116. package/build/components/list-view/block-select-button.cjs +90 -84
  117. package/build/components/list-view/block-select-button.cjs.map +2 -2
  118. package/build/components/list-view/block.cjs +61 -21
  119. package/build/components/list-view/block.cjs.map +2 -2
  120. package/build/components/list-view/expander.cjs +1 -1
  121. package/build/components/list-view/expander.cjs.map +2 -2
  122. package/build/components/list-view/use-list-view-client-ids.cjs +2 -2
  123. package/build/components/list-view/use-list-view-client-ids.cjs.map +2 -2
  124. package/build/components/media-placeholder/index.cjs +0 -1
  125. package/build/components/media-placeholder/index.cjs.map +2 -2
  126. package/build/components/observe-typing/index.cjs +4 -3
  127. package/build/components/observe-typing/index.cjs.map +2 -2
  128. package/build/components/preset-input-control/custom-value-controls.cjs +1 -3
  129. package/build/components/preset-input-control/custom-value-controls.cjs.map +2 -2
  130. package/build/components/preset-input-control/index.cjs +1 -3
  131. package/build/components/preset-input-control/index.cjs.map +2 -2
  132. package/build/components/resolution-tool/index.cjs +1 -2
  133. package/build/components/resolution-tool/index.cjs.map +2 -2
  134. package/build/components/rich-text/event-listeners/before-input-rules.cjs +3 -4
  135. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  136. package/build/components/rich-text/event-listeners/delete.cjs +2 -3
  137. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  138. package/build/components/rich-text/event-listeners/enter.cjs +3 -2
  139. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  140. package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
  141. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  142. package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
  143. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  144. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
  145. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  146. package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
  147. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  148. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
  149. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  150. package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
  151. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  152. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
  153. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  154. package/build/components/rich-text/index.cjs +66 -17
  155. package/build/components/rich-text/index.cjs.map +2 -2
  156. package/build/components/text-alignment-control/index.cjs +0 -1
  157. package/build/components/text-alignment-control/index.cjs.map +2 -2
  158. package/build/components/text-decoration-control/index.cjs +0 -1
  159. package/build/components/text-decoration-control/index.cjs.map +2 -2
  160. package/build/components/text-indent-control/index.cjs +0 -8
  161. package/build/components/text-indent-control/index.cjs.map +2 -2
  162. package/build/components/text-transform-control/index.cjs +0 -1
  163. package/build/components/text-transform-control/index.cjs.map +2 -2
  164. package/build/components/typewriter/index.cjs +129 -136
  165. package/build/components/typewriter/index.cjs.map +3 -3
  166. package/build/components/use-block-commands/index.cjs +21 -17
  167. package/build/components/use-block-commands/index.cjs.map +2 -2
  168. package/build/components/use-block-display-information/index.cjs +10 -8
  169. package/build/components/use-block-display-information/index.cjs.map +2 -2
  170. package/build/components/use-on-block-drop/index.cjs +3 -7
  171. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  172. package/build/components/writing-flow/index.cjs +12 -1
  173. package/build/components/writing-flow/index.cjs.map +3 -3
  174. package/build/components/writing-flow/use-arrow-nav.cjs +18 -5
  175. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  176. package/build/components/writing-flow/use-click-selection.cjs +2 -2
  177. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  178. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  179. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  180. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  181. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  182. package/build/components/writing-flow/use-editable-root.cjs +112 -0
  183. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  184. package/build/components/writing-flow/use-home-end.cjs +64 -0
  185. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  186. package/build/components/writing-flow/use-input.cjs +15 -5
  187. package/build/components/writing-flow/use-input.cjs.map +2 -2
  188. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  189. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  190. package/build/components/writing-flow/use-select-all.cjs +14 -2
  191. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  192. package/build/components/writing-flow/use-selection-observer.cjs +126 -20
  193. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  194. package/build/components/writing-flow/utils.cjs +39 -2
  195. package/build/components/writing-flow/utils.cjs.map +2 -2
  196. package/build/components/writing-mode-control/index.cjs +0 -1
  197. package/build/components/writing-mode-control/index.cjs.map +2 -2
  198. package/build/hooks/background.cjs +3 -2
  199. package/build/hooks/background.cjs.map +2 -2
  200. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  201. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  202. package/build/hooks/elements.cjs +1 -1
  203. package/build/hooks/elements.cjs.map +2 -2
  204. package/build/hooks/font-size.cjs +1 -2
  205. package/build/hooks/font-size.cjs.map +2 -2
  206. package/build/hooks/grid-visualizer.cjs +5 -3
  207. package/build/hooks/grid-visualizer.cjs.map +2 -2
  208. package/build/hooks/layout-child.cjs +22 -12
  209. package/build/hooks/layout-child.cjs.map +3 -3
  210. package/build/hooks/layout.cjs +33 -16
  211. package/build/hooks/layout.cjs.map +3 -3
  212. package/build/hooks/position.cjs +36 -16
  213. package/build/hooks/position.cjs.map +2 -2
  214. package/build/hooks/states.cjs +29 -12
  215. package/build/hooks/states.cjs.map +3 -3
  216. package/build/hooks/style.cjs +31 -9
  217. package/build/hooks/style.cjs.map +3 -3
  218. package/build/hooks/text-align.cjs +36 -6
  219. package/build/hooks/text-align.cjs.map +3 -3
  220. package/build/hooks/typography.cjs +1 -1
  221. package/build/hooks/typography.cjs.map +2 -2
  222. package/build/layouts/constrained.cjs +35 -27
  223. package/build/layouts/constrained.cjs.map +2 -2
  224. package/build/layouts/flex.cjs +27 -22
  225. package/build/layouts/flex.cjs.map +2 -2
  226. package/build/layouts/grid.cjs +51 -11
  227. package/build/layouts/grid.cjs.map +2 -2
  228. package/build/private-apis.cjs +4 -1
  229. package/build/private-apis.cjs.map +3 -3
  230. package/build/store/actions.cjs +2 -2
  231. package/build/store/actions.cjs.map +2 -2
  232. package/build/store/private-keys.cjs +3 -0
  233. package/build/store/private-keys.cjs.map +2 -2
  234. package/build/store/private-selectors.cjs +85 -6
  235. package/build/store/private-selectors.cjs.map +3 -3
  236. package/build/store/selectors.cjs +13 -0
  237. package/build/store/selectors.cjs.map +2 -2
  238. package/build/utils/block-bindings.cjs +29 -0
  239. package/build/utils/block-bindings.cjs.map +2 -2
  240. package/build/utils/dom.cjs +14 -0
  241. package/build/utils/dom.cjs.map +2 -2
  242. package/build-module/autocompleters/block.mjs +10 -2
  243. package/build-module/autocompleters/block.mjs.map +2 -2
  244. package/build-module/components/background-image-control/index.mjs +0 -2
  245. package/build-module/components/background-image-control/index.mjs.map +2 -2
  246. package/build-module/components/block-canvas/index.mjs +7 -2
  247. package/build-module/components/block-canvas/index.mjs.map +2 -2
  248. package/build-module/components/block-controls/groups.mjs +3 -1
  249. package/build-module/components/block-controls/groups.mjs.map +2 -2
  250. package/build-module/components/block-edit/edit.mjs +11 -18
  251. package/build-module/components/block-edit/edit.mjs.map +2 -2
  252. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  253. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  254. package/build-module/components/block-inspector/index.mjs +2 -3
  255. package/build-module/components/block-inspector/index.mjs.map +2 -2
  256. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  257. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  258. package/build-module/components/block-list/block.mjs +9 -3
  259. package/build-module/components/block-list/block.mjs.map +3 -3
  260. package/build-module/components/block-list/index.mjs +1 -3
  261. package/build-module/components/block-list/index.mjs.map +2 -2
  262. package/build-module/components/block-list/use-block-props/index.mjs +3 -1
  263. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  264. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  265. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  266. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +12 -4
  267. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  268. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  269. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  270. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  271. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  272. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  273. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  274. package/build-module/components/block-toolbar/index.mjs +43 -24
  275. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  276. package/build-module/components/block-tools/index.mjs +7 -2
  277. package/build-module/components/block-tools/index.mjs.map +2 -2
  278. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  279. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  280. package/build-module/components/block-visibility/modal.mjs +22 -10
  281. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  282. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  283. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  284. package/build-module/components/block-visibility/utils.mjs +18 -3
  285. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  286. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  287. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  288. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  289. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  290. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  291. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  292. package/build-module/components/child-layout-control/index.mjs +0 -6
  293. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  294. package/build-module/components/colors-gradients/control.mjs +5 -5
  295. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  296. package/build-module/components/date-format-picker/index.mjs +0 -1
  297. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  298. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  299. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  300. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  301. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  302. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  303. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  304. package/build-module/components/font-appearance-control/index.mjs +6 -15
  305. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  306. package/build-module/components/font-family/index.mjs +6 -15
  307. package/build-module/components/font-family/index.mjs.map +2 -2
  308. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  309. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  310. package/build-module/components/global-styles/border-panel.mjs +0 -1
  311. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  312. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  313. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  314. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  315. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  316. package/build-module/components/global-styles/typography-panel.mjs +4 -11
  317. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  318. package/build-module/components/height-control/index.mjs +0 -2
  319. package/build-module/components/height-control/index.mjs.map +2 -2
  320. package/build-module/components/html-element-control/index.mjs +0 -1
  321. package/build-module/components/html-element-control/index.mjs.map +2 -2
  322. package/build-module/components/image-editor/index.mjs +5 -0
  323. package/build-module/components/image-editor/index.mjs.map +2 -2
  324. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  325. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  326. package/build-module/components/image-size-control/index.mjs +3 -7
  327. package/build-module/components/image-size-control/index.mjs.map +2 -2
  328. package/build-module/components/inner-content/index.mjs +82 -0
  329. package/build-module/components/inner-content/index.mjs.map +7 -0
  330. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  331. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  332. package/build-module/components/inserter/media-tab/hooks.mjs +66 -12
  333. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  334. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  335. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  336. package/build-module/components/inserter/media-tab/media-panel.mjs +297 -32
  337. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  338. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  339. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  340. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  341. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  342. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  343. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  344. package/build-module/components/inserter/no-results.mjs +2 -2
  345. package/build-module/components/inserter/no-results.mjs.map +2 -2
  346. package/build-module/components/inserter/preview-panel.mjs +2 -1
  347. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  348. package/build-module/components/inserter-list-item/index.mjs +8 -2
  349. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  350. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  351. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  352. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  353. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  354. package/build-module/components/line-height-control/index.mjs +6 -12
  355. package/build-module/components/line-height-control/index.mjs.map +2 -2
  356. package/build-module/components/list-view/block-select-button.mjs +90 -84
  357. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  358. package/build-module/components/list-view/block.mjs +61 -21
  359. package/build-module/components/list-view/block.mjs.map +2 -2
  360. package/build-module/components/list-view/expander.mjs +1 -1
  361. package/build-module/components/list-view/expander.mjs.map +2 -2
  362. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  363. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  364. package/build-module/components/media-placeholder/index.mjs +0 -1
  365. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  366. package/build-module/components/observe-typing/index.mjs +4 -3
  367. package/build-module/components/observe-typing/index.mjs.map +2 -2
  368. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  369. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  370. package/build-module/components/preset-input-control/index.mjs +1 -3
  371. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  372. package/build-module/components/resolution-tool/index.mjs +1 -2
  373. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  374. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  375. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  376. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  377. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  378. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  379. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  380. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  381. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  382. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  383. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  384. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  385. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  386. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  387. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  388. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  389. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  390. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  391. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  392. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  393. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  394. package/build-module/components/rich-text/index.mjs +64 -13
  395. package/build-module/components/rich-text/index.mjs.map +2 -2
  396. package/build-module/components/text-alignment-control/index.mjs +0 -1
  397. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  398. package/build-module/components/text-decoration-control/index.mjs +0 -1
  399. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  400. package/build-module/components/text-indent-control/index.mjs +0 -8
  401. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  402. package/build-module/components/text-transform-control/index.mjs +0 -1
  403. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  404. package/build-module/components/typewriter/index.mjs +129 -136
  405. package/build-module/components/typewriter/index.mjs.map +2 -2
  406. package/build-module/components/use-block-commands/index.mjs +21 -17
  407. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  408. package/build-module/components/use-block-display-information/index.mjs +10 -8
  409. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  410. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  411. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  412. package/build-module/components/writing-flow/index.mjs +12 -1
  413. package/build-module/components/writing-flow/index.mjs.map +2 -2
  414. package/build-module/components/writing-flow/use-arrow-nav.mjs +19 -6
  415. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  416. package/build-module/components/writing-flow/use-click-selection.mjs +2 -2
  417. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  418. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  419. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  420. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  421. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  422. package/build-module/components/writing-flow/use-editable-root.mjs +86 -0
  423. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  424. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  425. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  426. package/build-module/components/writing-flow/use-input.mjs +15 -5
  427. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  428. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  429. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  430. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  431. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  432. package/build-module/components/writing-flow/use-selection-observer.mjs +128 -19
  433. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  434. package/build-module/components/writing-flow/utils.mjs +35 -1
  435. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  436. package/build-module/components/writing-mode-control/index.mjs +0 -1
  437. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  438. package/build-module/hooks/background.mjs +3 -2
  439. package/build-module/hooks/background.mjs.map +2 -2
  440. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  441. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  442. package/build-module/hooks/elements.mjs +1 -1
  443. package/build-module/hooks/elements.mjs.map +2 -2
  444. package/build-module/hooks/font-size.mjs +1 -2
  445. package/build-module/hooks/font-size.mjs.map +2 -2
  446. package/build-module/hooks/grid-visualizer.mjs +5 -3
  447. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  448. package/build-module/hooks/layout-child.mjs +22 -12
  449. package/build-module/hooks/layout-child.mjs.map +2 -2
  450. package/build-module/hooks/layout.mjs +32 -16
  451. package/build-module/hooks/layout.mjs.map +2 -2
  452. package/build-module/hooks/position.mjs +38 -18
  453. package/build-module/hooks/position.mjs.map +2 -2
  454. package/build-module/hooks/states.mjs +29 -12
  455. package/build-module/hooks/states.mjs.map +2 -2
  456. package/build-module/hooks/style.mjs +40 -11
  457. package/build-module/hooks/style.mjs.map +2 -2
  458. package/build-module/hooks/text-align.mjs +39 -10
  459. package/build-module/hooks/text-align.mjs.map +2 -2
  460. package/build-module/hooks/typography.mjs +1 -1
  461. package/build-module/hooks/typography.mjs.map +2 -2
  462. package/build-module/layouts/constrained.mjs +35 -27
  463. package/build-module/layouts/constrained.mjs.map +2 -2
  464. package/build-module/layouts/flex.mjs +27 -22
  465. package/build-module/layouts/flex.mjs.map +2 -2
  466. package/build-module/layouts/grid.mjs +52 -11
  467. package/build-module/layouts/grid.mjs.map +2 -2
  468. package/build-module/private-apis.mjs +5 -1
  469. package/build-module/private-apis.mjs.map +2 -2
  470. package/build-module/store/actions.mjs +3 -3
  471. package/build-module/store/actions.mjs.map +2 -2
  472. package/build-module/store/private-keys.mjs +2 -0
  473. package/build-module/store/private-keys.mjs.map +2 -2
  474. package/build-module/store/private-selectors.mjs +84 -6
  475. package/build-module/store/private-selectors.mjs.map +2 -2
  476. package/build-module/store/selectors.mjs +13 -0
  477. package/build-module/store/selectors.mjs.map +2 -2
  478. package/build-module/utils/block-bindings.mjs +28 -0
  479. package/build-module/utils/block-bindings.mjs.map +2 -2
  480. package/build-module/utils/dom.mjs +13 -0
  481. package/build-module/utils/dom.mjs.map +2 -2
  482. package/build-style/content-rtl.css +15 -14
  483. package/build-style/content.css +15 -14
  484. package/build-style/default-editor-styles-rtl.css +1 -1
  485. package/build-style/default-editor-styles.css +1 -1
  486. package/build-style/style-rtl.css +144 -47
  487. package/build-style/style.css +144 -47
  488. package/build-types/components/block-context/index.d.ts +7 -0
  489. package/build-types/components/block-context/index.d.ts.map +1 -1
  490. package/build-types/utils/block-bindings.d.ts +19 -0
  491. package/build-types/utils/block-bindings.d.ts.map +1 -1
  492. package/build-types/utils/dom.d.ts +11 -0
  493. package/build-types/utils/dom.d.ts.map +1 -1
  494. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  495. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  496. package/build-types/utils/pasting.d.ts +1 -1
  497. package/build-types/utils/pasting.d.ts.map +1 -1
  498. package/package.json +46 -44
  499. package/src/autocompleters/block.js +10 -3
  500. package/src/autocompleters/test/block.js +53 -0
  501. package/src/components/background-image-control/index.js +0 -2
  502. package/src/components/block-canvas/index.js +9 -2
  503. package/src/components/block-card/style.scss +1 -1
  504. package/src/components/block-controls/groups.js +2 -0
  505. package/src/components/block-edit/edit.js +13 -31
  506. package/src/components/block-inspector/edit-contents.js +5 -1
  507. package/src/components/block-inspector/index.js +3 -2
  508. package/src/components/block-list/block-invalid-warning.js +8 -19
  509. package/src/components/block-list/block.js +6 -0
  510. package/src/components/block-list/index.js +0 -2
  511. package/src/components/block-list/use-block-props/index.js +2 -0
  512. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  513. package/src/components/block-list/use-block-props/use-focus-handler.js +34 -9
  514. package/src/components/block-lock/style.scss +1 -1
  515. package/src/components/block-manager/style.scss +1 -1
  516. package/src/components/block-navigation/style.scss +1 -1
  517. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  518. package/src/components/block-quick-navigation/style.scss +1 -3
  519. package/src/components/block-styles/style.scss +2 -2
  520. package/src/components/block-styles/use-styles-for-block.js +1 -0
  521. package/src/components/block-title/use-block-display-title.js +7 -2
  522. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  523. package/src/components/block-toolbar/index.js +41 -18
  524. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  525. package/src/components/block-tools/index.js +7 -0
  526. package/src/components/block-types-list/style.scss +0 -1
  527. package/src/components/block-variation-transforms/index.js +0 -1
  528. package/src/components/block-visibility/modal.js +24 -10
  529. package/src/components/block-visibility/style.scss +1 -1
  530. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  531. package/src/components/block-visibility/test/utils.js +11 -0
  532. package/src/components/block-visibility/use-block-visibility.js +33 -11
  533. package/src/components/block-visibility/utils.js +31 -6
  534. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  535. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  536. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  537. package/src/components/button-block-appender/content.scss +1 -7
  538. package/src/components/child-layout-control/index.js +0 -6
  539. package/src/components/color-palette/test/__snapshots__/control.js.snap +13 -108
  540. package/src/components/colors-gradients/control.js +4 -4
  541. package/src/components/colors-gradients/style.scss +2 -2
  542. package/src/components/date-format-picker/index.js +0 -1
  543. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  544. package/src/components/dimensions-tool/scale-tool.js +0 -1
  545. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  546. package/src/components/font-appearance-control/index.js +6 -19
  547. package/src/components/font-family/README.md +0 -9
  548. package/src/components/font-family/index.js +6 -19
  549. package/src/components/font-family/stories/index.story.jsx +1 -2
  550. package/src/components/font-sizes/font-size-picker.js +0 -1
  551. package/src/components/global-styles/border-panel.js +0 -1
  552. package/src/components/global-styles/dimensions-panel.js +0 -3
  553. package/src/components/global-styles/state-control-badges.js +45 -6
  554. package/src/components/global-styles/style.scss +5 -0
  555. package/src/components/global-styles/test/state-control-badges.js +65 -0
  556. package/src/components/global-styles/typography-panel.js +0 -7
  557. package/src/components/height-control/index.js +0 -2
  558. package/src/components/html-element-control/index.js +0 -1
  559. package/src/components/iframe/content.scss +3 -3
  560. package/src/components/image-editor/index.js +22 -0
  561. package/src/components/image-editor/zoom-dropdown.js +0 -1
  562. package/src/components/image-size-control/index.js +0 -4
  563. package/src/components/inner-content/index.js +119 -0
  564. package/src/components/inner-content/test/index.js +81 -0
  565. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  566. package/src/components/inserter/media-tab/hooks.js +114 -16
  567. package/src/components/inserter/media-tab/media-list.js +2 -0
  568. package/src/components/inserter/media-tab/media-panel.js +354 -19
  569. package/src/components/inserter/media-tab/media-preview.js +34 -17
  570. package/src/components/inserter/media-tab/media-tab.js +20 -2
  571. package/src/components/inserter/media-tab/test/hooks.js +267 -0
  572. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  573. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  574. package/src/components/inserter/no-results.js +2 -2
  575. package/src/components/inserter/preview-panel.js +1 -0
  576. package/src/components/inserter/style.scss +115 -3
  577. package/src/components/inserter-list-item/index.js +8 -2
  578. package/src/components/inserter-list-item/style.scss +0 -15
  579. package/src/components/keyboard-shortcuts/index.js +28 -11
  580. package/src/components/letter-spacing-control/README.md +0 -8
  581. package/src/components/letter-spacing-control/index.js +5 -23
  582. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  583. package/src/components/line-height-control/README.md +0 -8
  584. package/src/components/line-height-control/index.js +6 -16
  585. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  586. package/src/components/line-height-control/test/index.js +1 -7
  587. package/src/components/link-control/style.scss +2 -2
  588. package/src/components/link-control/test/index.js +6 -6
  589. package/src/components/link-picker/style.scss +1 -2
  590. package/src/components/link-picker/test/index.js +3 -1
  591. package/src/components/list-view/block-select-button.js +5 -1
  592. package/src/components/list-view/block.js +69 -23
  593. package/src/components/list-view/expander.js +5 -1
  594. package/src/components/list-view/style.scss +23 -5
  595. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  596. package/src/components/media-placeholder/index.js +0 -1
  597. package/src/components/multi-selection-inspector/style.scss +1 -1
  598. package/src/components/observe-typing/index.js +9 -4
  599. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  600. package/src/components/preset-input-control/index.js +0 -2
  601. package/src/components/resolution-tool/index.js +0 -1
  602. package/src/components/responsive-block-control/style.scss +1 -1
  603. package/src/components/responsive-block-control/test/index.js +1 -5
  604. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  605. package/src/components/rich-text/event-listeners/delete.js +7 -4
  606. package/src/components/rich-text/event-listeners/enter.js +10 -4
  607. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  608. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  609. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  610. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  611. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  612. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  613. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  614. package/src/components/rich-text/index.js +94 -25
  615. package/src/components/skip-to-selected-block/style.scss +1 -1
  616. package/src/components/text-alignment-control/index.js +0 -1
  617. package/src/components/text-decoration-control/index.js +0 -1
  618. package/src/components/text-indent-control/index.js +7 -16
  619. package/src/components/text-transform-control/index.js +0 -1
  620. package/src/components/typewriter/index.js +228 -224
  621. package/src/components/use-block-commands/index.js +27 -17
  622. package/src/components/use-block-display-information/index.js +9 -13
  623. package/src/components/use-block-display-information/test/index.js +47 -9
  624. package/src/components/use-on-block-drop/index.js +4 -7
  625. package/src/components/writing-flow/index.js +15 -1
  626. package/src/components/writing-flow/use-arrow-nav.js +39 -12
  627. package/src/components/writing-flow/use-click-selection.js +2 -3
  628. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  629. package/src/components/writing-flow/use-drag-selection.js +1 -14
  630. package/src/components/writing-flow/use-editable-root.js +182 -0
  631. package/src/components/writing-flow/use-home-end.js +63 -0
  632. package/src/components/writing-flow/use-input.js +25 -8
  633. package/src/components/writing-flow/use-multi-selection.js +2 -3
  634. package/src/components/writing-flow/use-select-all.js +33 -3
  635. package/src/components/writing-flow/use-selection-observer.js +197 -38
  636. package/src/components/writing-flow/utils.js +83 -0
  637. package/src/components/writing-mode-control/index.js +0 -1
  638. package/src/hooks/background.js +7 -9
  639. package/src/hooks/block-fields/link/styles.scss +1 -6
  640. package/src/hooks/block-fields/media/styles.scss +1 -6
  641. package/src/hooks/block-fields/rich-text/index.js +6 -9
  642. package/src/hooks/block-hooks.scss +15 -0
  643. package/src/hooks/elements.js +0 -1
  644. package/src/hooks/font-size.js +0 -1
  645. package/src/hooks/grid-visualizer.js +40 -36
  646. package/src/hooks/layout-child.js +19 -9
  647. package/src/hooks/layout.js +53 -35
  648. package/src/hooks/position.js +44 -23
  649. package/src/hooks/states.js +36 -13
  650. package/src/hooks/style.js +67 -17
  651. package/src/hooks/test/cross-origin-isolation.js +0 -4
  652. package/src/hooks/test/layout.js +75 -1
  653. package/src/hooks/test/style.js +29 -0
  654. package/src/hooks/test/text-align.js +34 -1
  655. package/src/hooks/text-align.js +41 -10
  656. package/src/hooks/typography.js +0 -1
  657. package/src/layouts/constrained.js +56 -29
  658. package/src/layouts/flex.js +5 -4
  659. package/src/layouts/grid.js +59 -9
  660. package/src/layouts/test/constrained.js +91 -0
  661. package/src/layouts/test/grid.js +71 -0
  662. package/src/private-apis.js +4 -0
  663. package/src/store/actions.js +43 -14
  664. package/src/store/private-keys.js +1 -0
  665. package/src/store/private-selectors.js +166 -9
  666. package/src/store/selectors.js +41 -0
  667. package/src/store/test/actions.js +1 -1
  668. package/src/store/test/private-selectors.js +533 -0
  669. package/src/store/test/reducer.js +11 -11
  670. package/src/store/test/selectors.js +133 -0
  671. package/src/style.scss +1 -0
  672. package/src/utils/block-bindings.ts +50 -0
  673. package/src/utils/dom.ts +33 -0
  674. package/src/utils/test/block-bindings.js +181 -0
  675. package/build/components/rich-text/input-event.cjs +0 -50
  676. package/build/components/rich-text/input-event.cjs.map +0 -7
  677. package/build/components/rich-text/shortcut.cjs +0 -51
  678. package/build/components/rich-text/shortcut.cjs.map +0 -7
  679. package/build-module/components/rich-text/input-event.mjs +0 -25
  680. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  681. package/build-module/components/rich-text/shortcut.mjs +0 -26
  682. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  683. package/src/components/rich-text/input-event.js +0 -31
  684. package/src/components/rich-text/shortcut.js +0 -32
@@ -14,7 +14,6 @@ import { symbol } from '@wordpress/icons';
14
14
  * Internal dependencies
15
15
  */
16
16
  import useBlockDisplayInformation from '../';
17
- import { isIsolatedEditorKey } from '../../../store/private-keys';
18
17
 
19
18
  jest.mock( '@wordpress/data/src/components/use-select', () => jest.fn() );
20
19
  jest.mock( '../../../lock-unlock', () => ( {
@@ -26,6 +25,7 @@ jest.mock( '../../../lock-unlock', () => ( {
26
25
  } ) );
27
26
 
28
27
  const groupIcon = 'group-icon';
28
+ const templatePartIcon = 'template-part-icon';
29
29
 
30
30
  function TestComponent( { onChange } ) {
31
31
  const blockInformation = useBlockDisplayInformation( 'client-id' );
@@ -56,19 +56,17 @@ function setupUseSelect( {
56
56
  description: 'Gather blocks in a layout container.',
57
57
  },
58
58
  getActiveBlockVariation = () => null,
59
- settings = {},
60
- isWithinEditedSection = false,
59
+ isSectionBlock = true,
61
60
  } = {} ) {
62
61
  useSelect.mockImplementation( ( mapSelect ) =>
63
62
  mapSelect( () => ( {
64
63
  getBlockName: () => blockName,
65
64
  getBlockAttributes: () => attributes,
66
- getSettings: () => settings,
67
65
  __experimentalGetParsedPattern: () => ( {
68
66
  title: 'Hero pattern',
69
67
  description: 'Pattern description.',
70
68
  } ),
71
- isWithinEditedContentOnlySection: () => isWithinEditedSection,
69
+ isSectionBlock: () => isSectionBlock,
72
70
  getBlockType: () => blockType,
73
71
  getActiveBlockVariation,
74
72
  } ) )
@@ -97,7 +95,7 @@ describe( 'useBlockDisplayInformation', () => {
97
95
  } );
98
96
 
99
97
  it( 'displays block information for a pattern section that is being edited', () => {
100
- setupUseSelect( { isWithinEditedSection: true } );
98
+ setupUseSelect( { isSectionBlock: false } );
101
99
  const onChange = jest.fn();
102
100
 
103
101
  render( <TestComponent onChange={ onChange } /> );
@@ -120,9 +118,7 @@ describe( 'useBlockDisplayInformation', () => {
120
118
  patternName: 'theme/header-wrapper',
121
119
  },
122
120
  },
123
- settings: {
124
- [ isIsolatedEditorKey ]: true,
125
- },
121
+ isSectionBlock: false,
126
122
  } );
127
123
  const onChange = jest.fn();
128
124
 
@@ -137,4 +133,46 @@ describe( 'useBlockDisplayInformation', () => {
137
133
  } )
138
134
  );
139
135
  } );
136
+
137
+ it( 'displays block information for a pattern wrapper when content-only editing is disabled', () => {
138
+ setupUseSelect( {
139
+ isSectionBlock: false,
140
+ } );
141
+ const onChange = jest.fn();
142
+
143
+ render( <TestComponent onChange={ onChange } /> );
144
+
145
+ expect( onChange ).toHaveBeenCalledWith(
146
+ expect.objectContaining( {
147
+ title: 'Group',
148
+ icon: groupIcon,
149
+ description: 'Gather blocks in a layout container.',
150
+ name: 'Hero pattern',
151
+ } )
152
+ );
153
+ } );
154
+
155
+ it( 'displays block information for section blocks without pattern metadata', () => {
156
+ setupUseSelect( {
157
+ attributes: {},
158
+ blockName: 'core/template-part',
159
+ blockType: {
160
+ name: 'core/template-part',
161
+ title: 'Template Part',
162
+ icon: templatePartIcon,
163
+ description: 'A template part.',
164
+ },
165
+ } );
166
+ const onChange = jest.fn();
167
+
168
+ render( <TestComponent onChange={ onChange } /> );
169
+
170
+ expect( onChange ).toHaveBeenCalledWith(
171
+ expect.objectContaining( {
172
+ title: 'Template Part',
173
+ icon: templatePartIcon,
174
+ description: 'A template part.',
175
+ } )
176
+ );
177
+ } );
140
178
  } );
@@ -5,6 +5,7 @@ import { useCallback } from '@wordpress/element';
5
5
  import {
6
6
  cloneBlock,
7
7
  createBlock,
8
+ cloneSanitizedBlock,
8
9
  findTransform,
9
10
  getBlockTransforms,
10
11
  pasteHandler,
@@ -266,13 +267,9 @@ export default function useOnBlockDrop(
266
267
  blocks.unshift( targetBlock );
267
268
  }
268
269
 
269
- const groupInnerBlocks = blocks.map( ( block ) => {
270
- return createBlock(
271
- block.name,
272
- block.attributes,
273
- block.innerBlocks
274
- );
275
- } );
270
+ const groupInnerBlocks = blocks.map( ( block ) =>
271
+ cloneSanitizedBlock( block )
272
+ );
276
273
 
277
274
  const areAllImages = blocks.every( ( block ) => {
278
275
  return block.name === 'core/image';
@@ -14,6 +14,8 @@ import { forwardRef } from '@wordpress/element';
14
14
  /**
15
15
  * Internal dependencies
16
16
  */
17
+ import useEditableRoot from './use-editable-root';
18
+ import useHomeEnd from './use-home-end';
17
19
  import useMultiSelection from './use-multi-selection';
18
20
  import useTabNav from './use-tab-nav';
19
21
  import useArrowNav from './use-arrow-nav';
@@ -39,6 +41,8 @@ export function useWritingFlow() {
39
41
  ref,
40
42
  useClipboardHandler(),
41
43
  useInput(),
44
+ useEditableRoot(),
45
+ useHomeEnd(),
42
46
  useDragSelection(),
43
47
  useSelectionObserver(),
44
48
  useClickSelection(),
@@ -64,7 +68,17 @@ export function useWritingFlow() {
64
68
 
65
69
  return () => {
66
70
  delete node.dataset.hasMultiSelection;
67
- node.removeAttribute( 'aria-label' );
71
+ // The wrapper may remain the editing host (the
72
+ // collapsed block supports `editableRoot`): keep it
73
+ // named, as the textbox role requires.
74
+ if ( node.contentEditable === 'true' ) {
75
+ node.setAttribute(
76
+ 'aria-label',
77
+ __( 'Editor canvas' )
78
+ );
79
+ } else {
80
+ node.removeAttribute( 'aria-label' );
81
+ }
68
82
  };
69
83
  },
70
84
  [ hasMultiSelection ]
@@ -18,8 +18,9 @@ import { useRefEffect } from '@wordpress/compose';
18
18
  /**
19
19
  * Internal dependencies
20
20
  */
21
- import { getBlockClientId } from '../../utils/dom';
21
+ import { getBlockClientId, getSelectionEditableElement } from '../../utils/dom';
22
22
  import { store as blockEditorStore } from '../../store';
23
+ import { setContentEditableWrapper } from './utils';
23
24
 
24
25
  /**
25
26
  * Returns true if the element should consider edge navigation upon a keyboard
@@ -141,8 +142,16 @@ export function getClosestTabbable(
141
142
  return false;
142
143
  }
143
144
 
144
- // Skip focusable elements such as links within content editable nodes.
145
- if ( node.isContentEditable && node.contentEditable !== 'true' ) {
145
+ // Skip focusable elements such as links within content editable
146
+ // nodes: nodes whose closest editable host is an editable element
147
+ // within a block. When an editable root (e.g. the canvas wrapper)
148
+ // is the editing host, everything within it is content editable,
149
+ // but focusables like block wrappers are not text content.
150
+ if (
151
+ node.isContentEditable &&
152
+ node.contentEditable !== 'true' &&
153
+ getBlockClientId( node.closest( '[contenteditable="true"]' ) )
154
+ ) {
146
155
  return false;
147
156
  }
148
157
 
@@ -198,8 +207,17 @@ export default function useArrowNav() {
198
207
  return;
199
208
  }
200
209
 
201
- const { keyCode, target, shiftKey, ctrlKey, altKey, metaKey } =
202
- event;
210
+ const { keyCode, shiftKey, ctrlKey, altKey, metaKey } = event;
211
+ // When the wrapper is contentEditable and holds focus (the
212
+ // selected block supports `editableRoot`), the event targets the
213
+ // wrapper; resolve the editable element containing the selection.
214
+ const target =
215
+ ( event.target === node &&
216
+ getSelectionEditableElement(
217
+ node.ownerDocument.defaultView.getSelection(),
218
+ node
219
+ ) ) ||
220
+ event.target;
203
221
  const isUp = keyCode === UP;
204
222
  const isDown = keyCode === DOWN;
205
223
  const isLeft = keyCode === LEFT;
@@ -271,13 +289,22 @@ export default function useArrowNav() {
271
289
  const { keepCaretInsideBlock } = getSettings();
272
290
 
273
291
  if ( shiftKey ) {
274
- if (
275
- isClosestTabbableABlock( target, isReverse ) &&
276
- isNavEdge( target, isReverse )
277
- ) {
278
- node.contentEditable = true;
279
- // Firefox doesn't automatically move focus.
280
- node.focus();
292
+ if ( isNavEdge( target, isReverse ) ) {
293
+ if ( isClosestTabbableABlock( target, isReverse ) ) {
294
+ setContentEditableWrapper( node, true );
295
+ } else if ( node.contentEditable === 'true' ) {
296
+ // There is no block to extend the selection into.
297
+ // Within an editable wrapper the selection could
298
+ // natively escape into surrounding editable elements
299
+ // (e.g. the post title), so keep it inside the block
300
+ // by extending it to the block's edge.
301
+ const selection = defaultView.getSelection();
302
+ selection.extend(
303
+ target,
304
+ isReverse ? 0 : target.childNodes.length
305
+ );
306
+ event.preventDefault();
307
+ }
281
308
  }
282
309
  } else if (
283
310
  isVertical &&
@@ -8,6 +8,7 @@ import { useRefEffect } from '@wordpress/compose';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { store as blockEditorStore } from '../../store';
11
+ import { setContentEditableWrapper } from './utils';
11
12
  import { getBlockClientId } from '../../utils/dom';
12
13
 
13
14
  export default function useClickSelection() {
@@ -30,9 +31,7 @@ export default function useClickSelection() {
30
31
  // When selecting a single block in a document by holding the shift key,
31
32
  // don't mark this action as multiselection.
32
33
  if ( startClientId && startClientId !== clickedClientId ) {
33
- node.contentEditable = true;
34
- // Firefox doesn't automatically move focus.
35
- node.focus();
34
+ setContentEditableWrapper( node, true );
36
35
  }
37
36
  } else if ( hasMultiSelection() ) {
38
37
  // Allow user to escape out of a multi-selection to a
@@ -20,7 +20,7 @@ import { useRefEffect } from '@wordpress/compose';
20
20
  */
21
21
  import { store as blockEditorStore } from '../../store';
22
22
  import { useNotifyCopy } from '../../utils/use-notify-copy';
23
- import { setClipboardBlocks } from './utils';
23
+ import { setClipboardBlocks, setContentEditableWrapper } from './utils';
24
24
  import { getPasteEventData } from '../../utils/pasting';
25
25
 
26
26
  export default function useClipboardHandler() {
@@ -130,7 +130,10 @@ export default function useClipboardHandler() {
130
130
  if ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {
131
131
  removeBlocks( selectedBlockClientIds );
132
132
  } else {
133
- event.target.ownerDocument.activeElement.contentEditable = false;
133
+ setContentEditableWrapper(
134
+ event.target.ownerDocument.activeElement,
135
+ false
136
+ );
134
137
  __unstableDeleteSelection();
135
138
  }
136
139
  } else if ( event.type === 'paste' ) {
@@ -8,20 +8,7 @@ import { useRefEffect } from '@wordpress/compose';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { store as blockEditorStore } from '../../store';
11
-
12
- /**
13
- * Sets the `contenteditable` wrapper element to `value`.
14
- *
15
- * @param {HTMLElement} node Block element.
16
- * @param {boolean} value `contentEditable` value (true or false)
17
- */
18
- function setContentEditableWrapper( node, value ) {
19
- node.contentEditable = value;
20
- // Firefox doesn't automatically move focus.
21
- if ( value ) {
22
- node.focus();
23
- }
24
- }
11
+ import { setContentEditableWrapper } from './utils';
25
12
 
26
13
  /**
27
14
  * Sets a multi-selection based on the native selection across blocks.
@@ -0,0 +1,182 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useRegistry, useSelect } from '@wordpress/data';
5
+ import { useRefEffect } from '@wordpress/compose';
6
+ import { hasBlockSupport } from '@wordpress/blocks';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { store as blockEditorStore } from '../../store';
12
+ import { setContentEditableWrapper } from './utils';
13
+ import { getBlockClientId, getSelectionEditableElement } from '../../utils/dom';
14
+ import { unlock } from '../../lock-unlock';
15
+
16
+ /**
17
+ * Returns true when the writing flow wrapper can host editing for the given
18
+ * block: it supports `editableRoot`, is edited visually in the default
19
+ * editing mode, and has sibling blocks for a native selection to extend
20
+ * into, all of them editable.
21
+ *
22
+ * @param {Object} select Bound block editor store selectors.
23
+ * @param {string} clientId Block client ID.
24
+ *
25
+ * @return {boolean} Whether an editing host can host the block.
26
+ */
27
+ export function canHostEditableRoot( select, clientId ) {
28
+ const {
29
+ getBlockName,
30
+ getBlockEditingMode,
31
+ getBlockMode,
32
+ getBlockRootClientId,
33
+ getBlockOrder,
34
+ } = select;
35
+
36
+ if (
37
+ ! clientId ||
38
+ getBlockEditingMode( clientId ) !== 'default' ||
39
+ // Not when the block is edited as HTML: there is no rich text to
40
+ // host then, only a textarea, which the editing host would
41
+ // interfere with.
42
+ getBlockMode( clientId ) !== 'visual' ||
43
+ ! hasBlockSupport( getBlockName( clientId ), 'editableRoot', false )
44
+ ) {
45
+ return false;
46
+ }
47
+
48
+ // Only host when the block has sibling blocks for a native selection to
49
+ // extend into, all of them editable. A lone block (e.g. a single
50
+ // paragraph nested in an HTML block) is edited on its own element, and
51
+ // read-only siblings (e.g. pattern content without overrides enabled)
52
+ // must not become editable by inheriting from the host.
53
+ const siblings = getBlockOrder( getBlockRootClientId( clientId ) );
54
+ return (
55
+ siblings.length > 1 &&
56
+ siblings.every(
57
+ ( siblingClientId ) =>
58
+ getBlockEditingMode( siblingClientId ) === 'default'
59
+ )
60
+ );
61
+ }
62
+
63
+ /**
64
+ * Returns true when the writing flow wrapper should be contentEditable: the
65
+ * selected block supports `editableRoot`.
66
+ *
67
+ * @return {boolean} Whether the wrapper should be editable.
68
+ */
69
+ export function useHasEditableRoot() {
70
+ return useSelect( ( select ) => {
71
+ const selectors = select( blockEditorStore );
72
+ return canHostEditableRoot(
73
+ selectors,
74
+ selectors.getSelectedBlockClientId()
75
+ );
76
+ }, [] );
77
+ }
78
+
79
+ /**
80
+ * Keeps the writing flow wrapper contentEditable while the selected block
81
+ * supports `editableRoot`, so the native selection can extend across blocks.
82
+ * While the wrapper is editable it must also hold focus: a nested editable
83
+ * element cannot retain focus once an ancestor becomes an editing host (the
84
+ * first DOM mutation moves focus to the host, inconsistently across
85
+ * browsers).
86
+ */
87
+ /**
88
+ * Keeps the writing flow wrapper contentEditable while the selected block
89
+ * supports `editableRoot`, so the native selection can extend across blocks.
90
+ * While the wrapper is editable it must also hold focus: a nested editable
91
+ * element cannot retain focus once an ancestor becomes an editing host (the
92
+ * first DOM mutation moves focus to the host, inconsistently across
93
+ * browsers).
94
+ */
95
+ export default function useEditableRoot() {
96
+ const registry = useRegistry();
97
+ const isZoomOut = useSelect(
98
+ ( select ) => unlock( select( blockEditorStore ) ).isZoomOut(),
99
+ []
100
+ );
101
+ const enabled = useHasEditableRoot() && ! isZoomOut;
102
+
103
+ return useRefEffect(
104
+ ( node ) => {
105
+ if ( ! enabled ) {
106
+ return;
107
+ }
108
+
109
+ const {
110
+ getSelectedBlockClientId,
111
+ hasMultiSelection,
112
+ isMultiSelecting,
113
+ } = registry.select( blockEditorStore );
114
+
115
+ // Focus is moved separately below, only when an editable
116
+ // element belonging to the selected block holds it.
117
+ if ( ! setContentEditableWrapper( node, true, { focus: false } ) ) {
118
+ return;
119
+ }
120
+
121
+ // Move focus from the block's editable element to the wrapper,
122
+ // but only when an editable element belonging to the selected
123
+ // block has focus. Never steal focus from other regions (e.g.
124
+ // List View), UI elements (e.g. buttons), or other editables
125
+ // within the wrapper (e.g. the post title). The selection is
126
+ // preserved. If the selection is still outside the focused
127
+ // element, a mousedown just focused it and the browser has not
128
+ // placed the caret yet; moving focus now would cancel the
129
+ // pending caret placement. The selection observer moves focus
130
+ // once the selection lands.
131
+ const { activeElement } = node.ownerDocument;
132
+ const selection = node.ownerDocument.defaultView.getSelection();
133
+ if (
134
+ activeElement !== node &&
135
+ activeElement?.isContentEditable &&
136
+ node.contains( activeElement ) &&
137
+ getBlockClientId( activeElement ) ===
138
+ getSelectedBlockClientId() &&
139
+ selection.anchorNode &&
140
+ activeElement.contains( selection.anchorNode )
141
+ ) {
142
+ node.focus();
143
+ }
144
+
145
+ return () => {
146
+ // A multi-selection owns the wrapper as its editing host
147
+ // now: the host and its textbox semantics remain, and the
148
+ // selection observer disables both together when the
149
+ // selection collapses. Removing the attributes here would
150
+ // strip the accessible name off the focused editing host at
151
+ // the moment cross-block editing begins.
152
+ if ( hasMultiSelection() || isMultiSelecting() ) {
153
+ return;
154
+ }
155
+
156
+ setContentEditableWrapper( node, false );
157
+
158
+ // If the wrapper held focus, return focus to the editable
159
+ // element containing the selection, which is focusable
160
+ // again now that the wrapper is no longer an editing host.
161
+ // Only do so if that element belongs to the selected block:
162
+ // when the selection moved to another block through the
163
+ // store, the stale DOM selection must not reclaim block
164
+ // selection through its focus handler.
165
+ if ( node.ownerDocument.activeElement === node ) {
166
+ const editable = getSelectionEditableElement(
167
+ node.ownerDocument.defaultView.getSelection(),
168
+ node
169
+ );
170
+ if (
171
+ editable &&
172
+ getBlockClientId( editable ) ===
173
+ getSelectedBlockClientId()
174
+ ) {
175
+ editable.focus();
176
+ }
177
+ }
178
+ };
179
+ },
180
+ [ enabled, registry ]
181
+ );
182
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { HOME, END } from '@wordpress/keycodes';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { useRefEffect } from '@wordpress/compose';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { getSelectionEditableElement } from '../../utils/dom';
12
+ import { store as blockEditorStore } from '../../store';
13
+
14
+ /**
15
+ * While the wrapper is the contentEditable editing host (a selected block
16
+ * supports `editableRoot`), browsers don't perform the default caret
17
+ * movement for Home and End. Perform the equivalent movement with
18
+ * `Selection.modify()`.
19
+ */
20
+ export default function useHomeEnd() {
21
+ const { hasMultiSelection } = useSelect( blockEditorStore );
22
+ return useRefEffect( ( node ) => {
23
+ function onKeyDown( event ) {
24
+ if ( event.defaultPrevented ) {
25
+ return;
26
+ }
27
+
28
+ if ( event.keyCode !== HOME && event.keyCode !== END ) {
29
+ return;
30
+ }
31
+
32
+ if ( event.metaKey || event.ctrlKey || event.altKey ) {
33
+ return;
34
+ }
35
+
36
+ if (
37
+ node.contentEditable !== 'true' ||
38
+ node.ownerDocument.activeElement !== node ||
39
+ hasMultiSelection()
40
+ ) {
41
+ return;
42
+ }
43
+
44
+ const selection = node.ownerDocument.defaultView.getSelection();
45
+
46
+ if ( ! getSelectionEditableElement( selection, node ) ) {
47
+ return;
48
+ }
49
+
50
+ event.preventDefault();
51
+ selection.modify(
52
+ event.shiftKey ? 'extend' : 'move',
53
+ event.keyCode === HOME ? 'backward' : 'forward',
54
+ 'lineboundary'
55
+ );
56
+ }
57
+
58
+ node.addEventListener( 'keydown', onKeyDown );
59
+ return () => {
60
+ node.removeEventListener( 'keydown', onKeyDown );
61
+ };
62
+ }, [] );
63
+ }
@@ -16,6 +16,8 @@ import {
16
16
  * Internal dependencies
17
17
  */
18
18
  import { store as blockEditorStore } from '../../store';
19
+ import { setContentEditableWrapper } from './utils';
20
+ import { getSelectionEditableElement } from '../../utils/dom';
19
21
 
20
22
  /**
21
23
  * Handles input for selections across blocks.
@@ -45,10 +47,25 @@ export default function useInput() {
45
47
 
46
48
  return useRefEffect( ( node ) => {
47
49
  function onBeforeInput( event ) {
48
- // If writing flow is editable, NEVER allow the browser to alter the
49
- // DOM. This will cause React errors (and the DOM should only be
50
- // altered in a controlled fashion).
51
- if ( node.contentEditable === 'true' ) {
50
+ // If writing flow is editable, never allow the browser to alter
51
+ // the DOM outside of an editable element within a block. This
52
+ // will cause React errors (and the DOM should only be altered in
53
+ // a controlled fashion). The wrapper can be contentEditable with
54
+ // a single selection when the selected block supports
55
+ // `editableRoot`; in that case edits within the block's editable
56
+ // element are handled by its rich text instance.
57
+ if ( node.contentEditable !== 'true' ) {
58
+ return;
59
+ }
60
+
61
+ if ( hasMultiSelection() ) {
62
+ event.preventDefault();
63
+ return;
64
+ }
65
+
66
+ const selection = node.ownerDocument.defaultView.getSelection();
67
+
68
+ if ( ! getSelectionEditableElement( selection, node ) ) {
52
69
  event.preventDefault();
53
70
  }
54
71
  }
@@ -127,7 +144,7 @@ export default function useInput() {
127
144
  }
128
145
 
129
146
  if ( event.keyCode === ENTER ) {
130
- node.contentEditable = false;
147
+ setContentEditableWrapper( node, false );
131
148
  event.preventDefault();
132
149
  if ( __unstableIsFullySelected() ) {
133
150
  replaceBlocks(
@@ -141,7 +158,7 @@ export default function useInput() {
141
158
  event.keyCode === BACKSPACE ||
142
159
  event.keyCode === DELETE
143
160
  ) {
144
- node.contentEditable = false;
161
+ setContentEditableWrapper( node, false );
145
162
  event.preventDefault();
146
163
  if ( __unstableIsFullySelected() ) {
147
164
  removeBlocks( getSelectedBlockClientIds() );
@@ -156,7 +173,7 @@ export default function useInput() {
156
173
  event.key.length === 1 &&
157
174
  ! ( event.metaKey || event.ctrlKey )
158
175
  ) {
159
- node.contentEditable = false;
176
+ setContentEditableWrapper( node, false );
160
177
  if ( __unstableIsSelectionMergeable() ) {
161
178
  __unstableDeleteSelection( event.keyCode === DELETE );
162
179
  } else {
@@ -176,7 +193,7 @@ export default function useInput() {
176
193
  return;
177
194
  }
178
195
 
179
- node.contentEditable = false;
196
+ setContentEditableWrapper( node, false );
180
197
 
181
198
  if ( __unstableIsSelectionMergeable() ) {
182
199
  __unstableDeleteSelection();
@@ -8,6 +8,7 @@ import { useSelect } from '@wordpress/data';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { store as blockEditorStore } from '../../store';
11
+ import { setContentEditableWrapper } from './utils';
11
12
 
12
13
  function selector( select ) {
13
14
  const {
@@ -73,11 +74,9 @@ export default function useMultiSelection() {
73
74
  // all content editable. We can't rely on using the store and
74
75
  // React because re-rending happens too slowly. We need to be
75
76
  // able to select across instances immediately.
76
- node.contentEditable = true;
77
-
78
77
  // For some browsers, like Safari, it is important that focus
79
78
  // happens BEFORE selection removal.
80
- node.focus();
79
+ setContentEditableWrapper( node, true );
81
80
 
82
81
  defaultView.getSelection().removeAllRanges();
83
82
  },