@wordpress/block-editor 15.22.1 → 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 (700) hide show
  1. package/CHANGELOG.md +35 -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 +18 -36
  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/use-resize-canvas/index.cjs +16 -53
  173. package/build/components/use-resize-canvas/index.cjs.map +3 -3
  174. package/build/components/writing-flow/index.cjs +12 -1
  175. package/build/components/writing-flow/index.cjs.map +3 -3
  176. package/build/components/writing-flow/use-arrow-nav.cjs +18 -5
  177. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  178. package/build/components/writing-flow/use-click-selection.cjs +2 -2
  179. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  180. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  181. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  182. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  183. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  184. package/build/components/writing-flow/use-editable-root.cjs +112 -0
  185. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  186. package/build/components/writing-flow/use-home-end.cjs +64 -0
  187. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  188. package/build/components/writing-flow/use-input.cjs +15 -5
  189. package/build/components/writing-flow/use-input.cjs.map +2 -2
  190. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  191. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  192. package/build/components/writing-flow/use-select-all.cjs +14 -2
  193. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  194. package/build/components/writing-flow/use-selection-observer.cjs +126 -20
  195. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  196. package/build/components/writing-flow/utils.cjs +39 -2
  197. package/build/components/writing-flow/utils.cjs.map +2 -2
  198. package/build/components/writing-mode-control/index.cjs +0 -1
  199. package/build/components/writing-mode-control/index.cjs.map +2 -2
  200. package/build/hooks/background.cjs +3 -2
  201. package/build/hooks/background.cjs.map +2 -2
  202. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  203. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  204. package/build/hooks/elements.cjs +1 -1
  205. package/build/hooks/elements.cjs.map +2 -2
  206. package/build/hooks/font-size.cjs +1 -2
  207. package/build/hooks/font-size.cjs.map +2 -2
  208. package/build/hooks/grid-visualizer.cjs +5 -3
  209. package/build/hooks/grid-visualizer.cjs.map +2 -2
  210. package/build/hooks/layout-child.cjs +22 -12
  211. package/build/hooks/layout-child.cjs.map +3 -3
  212. package/build/hooks/layout.cjs +33 -16
  213. package/build/hooks/layout.cjs.map +3 -3
  214. package/build/hooks/position.cjs +36 -16
  215. package/build/hooks/position.cjs.map +2 -2
  216. package/build/hooks/states.cjs +32 -23
  217. package/build/hooks/states.cjs.map +3 -3
  218. package/build/hooks/style.cjs +31 -9
  219. package/build/hooks/style.cjs.map +3 -3
  220. package/build/hooks/text-align.cjs +36 -6
  221. package/build/hooks/text-align.cjs.map +3 -3
  222. package/build/hooks/typography.cjs +1 -1
  223. package/build/hooks/typography.cjs.map +2 -2
  224. package/build/layouts/constrained.cjs +35 -27
  225. package/build/layouts/constrained.cjs.map +2 -2
  226. package/build/layouts/flex.cjs +27 -22
  227. package/build/layouts/flex.cjs.map +2 -2
  228. package/build/layouts/grid.cjs +51 -11
  229. package/build/layouts/grid.cjs.map +2 -2
  230. package/build/private-apis.cjs +4 -2
  231. package/build/private-apis.cjs.map +3 -3
  232. package/build/store/actions.cjs +2 -2
  233. package/build/store/actions.cjs.map +2 -2
  234. package/build/store/private-actions.cjs +16 -0
  235. package/build/store/private-actions.cjs.map +2 -2
  236. package/build/store/private-keys.cjs +3 -3
  237. package/build/store/private-keys.cjs.map +2 -2
  238. package/build/store/private-selectors.cjs +109 -12
  239. package/build/store/private-selectors.cjs.map +3 -3
  240. package/build/store/reducer.cjs +19 -3
  241. package/build/store/reducer.cjs.map +2 -2
  242. package/build/store/selectors.cjs +13 -0
  243. package/build/store/selectors.cjs.map +2 -2
  244. package/build/utils/block-bindings.cjs +29 -0
  245. package/build/utils/block-bindings.cjs.map +2 -2
  246. package/build/utils/dom.cjs +14 -0
  247. package/build/utils/dom.cjs.map +2 -2
  248. package/build-module/autocompleters/block.mjs +10 -2
  249. package/build-module/autocompleters/block.mjs.map +2 -2
  250. package/build-module/components/background-image-control/index.mjs +0 -2
  251. package/build-module/components/background-image-control/index.mjs.map +2 -2
  252. package/build-module/components/block-canvas/index.mjs +7 -2
  253. package/build-module/components/block-canvas/index.mjs.map +2 -2
  254. package/build-module/components/block-controls/groups.mjs +3 -1
  255. package/build-module/components/block-controls/groups.mjs.map +2 -2
  256. package/build-module/components/block-edit/edit.mjs +11 -18
  257. package/build-module/components/block-edit/edit.mjs.map +2 -2
  258. package/build-module/components/block-inspector/edit-contents.mjs +4 -1
  259. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  260. package/build-module/components/block-inspector/index.mjs +18 -36
  261. package/build-module/components/block-inspector/index.mjs.map +2 -2
  262. package/build-module/components/block-list/block-invalid-warning.mjs +8 -19
  263. package/build-module/components/block-list/block-invalid-warning.mjs.map +2 -2
  264. package/build-module/components/block-list/block.mjs +9 -3
  265. package/build-module/components/block-list/block.mjs.map +3 -3
  266. package/build-module/components/block-list/index.mjs +1 -3
  267. package/build-module/components/block-list/index.mjs.map +2 -2
  268. package/build-module/components/block-list/use-block-props/index.mjs +3 -1
  269. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  270. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  271. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  272. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +12 -4
  273. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  274. package/build-module/components/block-styles/use-styles-for-block.mjs +2 -1
  275. package/build-module/components/block-styles/use-styles-for-block.mjs.map +2 -2
  276. package/build-module/components/block-title/use-block-display-title.mjs +7 -2
  277. package/build-module/components/block-title/use-block-display-title.mjs.map +2 -2
  278. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +10 -14
  279. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  280. package/build-module/components/block-toolbar/index.mjs +43 -24
  281. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  282. package/build-module/components/block-tools/index.mjs +7 -2
  283. package/build-module/components/block-tools/index.mjs.map +2 -2
  284. package/build-module/components/block-variation-transforms/index.mjs +0 -1
  285. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  286. package/build-module/components/block-visibility/modal.mjs +22 -10
  287. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  288. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  289. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  290. package/build-module/components/block-visibility/utils.mjs +18 -3
  291. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  292. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  293. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  294. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  295. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  296. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  297. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  298. package/build-module/components/child-layout-control/index.mjs +0 -6
  299. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  300. package/build-module/components/colors-gradients/control.mjs +5 -5
  301. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  302. package/build-module/components/date-format-picker/index.mjs +0 -1
  303. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  304. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +1 -2
  305. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  306. package/build-module/components/dimensions-tool/scale-tool.mjs +0 -1
  307. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  308. package/build-module/components/dimensions-tool/width-height-tool.mjs +2 -4
  309. package/build-module/components/dimensions-tool/width-height-tool.mjs.map +2 -2
  310. package/build-module/components/font-appearance-control/index.mjs +6 -15
  311. package/build-module/components/font-appearance-control/index.mjs.map +2 -2
  312. package/build-module/components/font-family/index.mjs +6 -15
  313. package/build-module/components/font-family/index.mjs.map +2 -2
  314. package/build-module/components/font-sizes/font-size-picker.mjs +1 -2
  315. package/build-module/components/font-sizes/font-size-picker.mjs.map +2 -2
  316. package/build-module/components/global-styles/border-panel.mjs +0 -1
  317. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  318. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  319. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  320. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  321. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  322. package/build-module/components/global-styles/typography-panel.mjs +4 -11
  323. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  324. package/build-module/components/height-control/index.mjs +0 -2
  325. package/build-module/components/height-control/index.mjs.map +2 -2
  326. package/build-module/components/html-element-control/index.mjs +0 -1
  327. package/build-module/components/html-element-control/index.mjs.map +2 -2
  328. package/build-module/components/image-editor/index.mjs +5 -0
  329. package/build-module/components/image-editor/index.mjs.map +2 -2
  330. package/build-module/components/image-editor/zoom-dropdown.mjs +0 -1
  331. package/build-module/components/image-editor/zoom-dropdown.mjs.map +2 -2
  332. package/build-module/components/image-size-control/index.mjs +3 -7
  333. package/build-module/components/image-size-control/index.mjs.map +2 -2
  334. package/build-module/components/inner-content/index.mjs +82 -0
  335. package/build-module/components/inner-content/index.mjs.map +7 -0
  336. package/build-module/components/inserter/hooks/use-block-types-state.mjs +10 -2
  337. package/build-module/components/inserter/hooks/use-block-types-state.mjs.map +2 -2
  338. package/build-module/components/inserter/media-tab/hooks.mjs +66 -12
  339. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  340. package/build-module/components/inserter/media-tab/media-list.mjs +3 -1
  341. package/build-module/components/inserter/media-tab/media-list.mjs.map +2 -2
  342. package/build-module/components/inserter/media-tab/media-panel.mjs +297 -32
  343. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  344. package/build-module/components/inserter/media-tab/media-preview.mjs +33 -18
  345. package/build-module/components/inserter/media-tab/media-preview.mjs.map +2 -2
  346. package/build-module/components/inserter/media-tab/media-tab.mjs +27 -7
  347. package/build-module/components/inserter/media-tab/media-tab.mjs.map +2 -2
  348. package/build-module/components/inserter/mobile-tab-navigation.mjs +6 -1
  349. package/build-module/components/inserter/mobile-tab-navigation.mjs.map +2 -2
  350. package/build-module/components/inserter/no-results.mjs +2 -2
  351. package/build-module/components/inserter/no-results.mjs.map +2 -2
  352. package/build-module/components/inserter/preview-panel.mjs +2 -1
  353. package/build-module/components/inserter/preview-panel.mjs.map +2 -2
  354. package/build-module/components/inserter-list-item/index.mjs +8 -2
  355. package/build-module/components/inserter-list-item/index.mjs.map +2 -2
  356. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  357. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  358. package/build-module/components/letter-spacing-control/index.mjs +0 -14
  359. package/build-module/components/letter-spacing-control/index.mjs.map +2 -2
  360. package/build-module/components/line-height-control/index.mjs +6 -12
  361. package/build-module/components/line-height-control/index.mjs.map +2 -2
  362. package/build-module/components/list-view/block-select-button.mjs +90 -84
  363. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  364. package/build-module/components/list-view/block.mjs +61 -21
  365. package/build-module/components/list-view/block.mjs.map +2 -2
  366. package/build-module/components/list-view/expander.mjs +1 -1
  367. package/build-module/components/list-view/expander.mjs.map +2 -2
  368. package/build-module/components/list-view/use-list-view-client-ids.mjs +2 -2
  369. package/build-module/components/list-view/use-list-view-client-ids.mjs.map +2 -2
  370. package/build-module/components/media-placeholder/index.mjs +0 -1
  371. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  372. package/build-module/components/observe-typing/index.mjs +4 -3
  373. package/build-module/components/observe-typing/index.mjs.map +2 -2
  374. package/build-module/components/preset-input-control/custom-value-controls.mjs +1 -3
  375. package/build-module/components/preset-input-control/custom-value-controls.mjs.map +2 -2
  376. package/build-module/components/preset-input-control/index.mjs +1 -3
  377. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  378. package/build-module/components/resolution-tool/index.mjs +1 -2
  379. package/build-module/components/resolution-tool/index.mjs.map +2 -2
  380. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  381. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  382. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  383. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  384. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  385. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  386. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  387. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  388. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  389. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  390. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  391. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  392. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  393. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  394. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  395. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  396. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  397. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  398. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  399. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  400. package/build-module/components/rich-text/index.mjs +64 -13
  401. package/build-module/components/rich-text/index.mjs.map +2 -2
  402. package/build-module/components/text-alignment-control/index.mjs +0 -1
  403. package/build-module/components/text-alignment-control/index.mjs.map +2 -2
  404. package/build-module/components/text-decoration-control/index.mjs +0 -1
  405. package/build-module/components/text-decoration-control/index.mjs.map +2 -2
  406. package/build-module/components/text-indent-control/index.mjs +0 -8
  407. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  408. package/build-module/components/text-transform-control/index.mjs +0 -1
  409. package/build-module/components/text-transform-control/index.mjs.map +2 -2
  410. package/build-module/components/typewriter/index.mjs +129 -136
  411. package/build-module/components/typewriter/index.mjs.map +2 -2
  412. package/build-module/components/use-block-commands/index.mjs +21 -17
  413. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  414. package/build-module/components/use-block-display-information/index.mjs +10 -8
  415. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  416. package/build-module/components/use-on-block-drop/index.mjs +4 -7
  417. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  418. package/build-module/components/use-resize-canvas/index.mjs +6 -53
  419. package/build-module/components/use-resize-canvas/index.mjs.map +2 -2
  420. package/build-module/components/writing-flow/index.mjs +12 -1
  421. package/build-module/components/writing-flow/index.mjs.map +2 -2
  422. package/build-module/components/writing-flow/use-arrow-nav.mjs +19 -6
  423. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  424. package/build-module/components/writing-flow/use-click-selection.mjs +2 -2
  425. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  426. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  427. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  428. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  429. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  430. package/build-module/components/writing-flow/use-editable-root.mjs +86 -0
  431. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  432. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  433. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  434. package/build-module/components/writing-flow/use-input.mjs +15 -5
  435. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  436. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  437. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  438. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  439. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  440. package/build-module/components/writing-flow/use-selection-observer.mjs +128 -19
  441. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  442. package/build-module/components/writing-flow/utils.mjs +35 -1
  443. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  444. package/build-module/components/writing-mode-control/index.mjs +0 -1
  445. package/build-module/components/writing-mode-control/index.mjs.map +2 -2
  446. package/build-module/hooks/background.mjs +3 -2
  447. package/build-module/hooks/background.mjs.map +2 -2
  448. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  449. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  450. package/build-module/hooks/elements.mjs +1 -1
  451. package/build-module/hooks/elements.mjs.map +2 -2
  452. package/build-module/hooks/font-size.mjs +1 -2
  453. package/build-module/hooks/font-size.mjs.map +2 -2
  454. package/build-module/hooks/grid-visualizer.mjs +5 -3
  455. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  456. package/build-module/hooks/layout-child.mjs +22 -12
  457. package/build-module/hooks/layout-child.mjs.map +2 -2
  458. package/build-module/hooks/layout.mjs +32 -16
  459. package/build-module/hooks/layout.mjs.map +2 -2
  460. package/build-module/hooks/position.mjs +38 -18
  461. package/build-module/hooks/position.mjs.map +2 -2
  462. package/build-module/hooks/states.mjs +32 -23
  463. package/build-module/hooks/states.mjs.map +2 -2
  464. package/build-module/hooks/style.mjs +40 -11
  465. package/build-module/hooks/style.mjs.map +2 -2
  466. package/build-module/hooks/text-align.mjs +39 -10
  467. package/build-module/hooks/text-align.mjs.map +2 -2
  468. package/build-module/hooks/typography.mjs +1 -1
  469. package/build-module/hooks/typography.mjs.map +2 -2
  470. package/build-module/layouts/constrained.mjs +35 -27
  471. package/build-module/layouts/constrained.mjs.map +2 -2
  472. package/build-module/layouts/flex.mjs +27 -22
  473. package/build-module/layouts/flex.mjs.map +2 -2
  474. package/build-module/layouts/grid.mjs +52 -11
  475. package/build-module/layouts/grid.mjs.map +2 -2
  476. package/build-module/private-apis.mjs +5 -3
  477. package/build-module/private-apis.mjs.map +2 -2
  478. package/build-module/store/actions.mjs +3 -3
  479. package/build-module/store/actions.mjs.map +2 -2
  480. package/build-module/store/private-actions.mjs +14 -0
  481. package/build-module/store/private-actions.mjs.map +2 -2
  482. package/build-module/store/private-keys.mjs +2 -2
  483. package/build-module/store/private-keys.mjs.map +2 -2
  484. package/build-module/store/private-selectors.mjs +106 -12
  485. package/build-module/store/private-selectors.mjs.map +2 -2
  486. package/build-module/store/reducer.mjs +17 -3
  487. package/build-module/store/reducer.mjs.map +2 -2
  488. package/build-module/store/selectors.mjs +13 -0
  489. package/build-module/store/selectors.mjs.map +2 -2
  490. package/build-module/utils/block-bindings.mjs +28 -0
  491. package/build-module/utils/block-bindings.mjs.map +2 -2
  492. package/build-module/utils/dom.mjs +13 -0
  493. package/build-module/utils/dom.mjs.map +2 -2
  494. package/build-style/content-rtl.css +15 -14
  495. package/build-style/content.css +15 -14
  496. package/build-style/default-editor-styles-rtl.css +1 -1
  497. package/build-style/default-editor-styles.css +1 -1
  498. package/build-style/style-rtl.css +144 -47
  499. package/build-style/style.css +144 -47
  500. package/build-types/components/block-context/index.d.ts +7 -0
  501. package/build-types/components/block-context/index.d.ts.map +1 -1
  502. package/build-types/utils/block-bindings.d.ts +19 -0
  503. package/build-types/utils/block-bindings.d.ts.map +1 -1
  504. package/build-types/utils/dom.d.ts +11 -0
  505. package/build-types/utils/dom.d.ts.map +1 -1
  506. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  507. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  508. package/build-types/utils/pasting.d.ts +1 -1
  509. package/build-types/utils/pasting.d.ts.map +1 -1
  510. package/package.json +46 -44
  511. package/src/autocompleters/block.js +10 -3
  512. package/src/autocompleters/test/block.js +53 -0
  513. package/src/components/background-image-control/index.js +0 -2
  514. package/src/components/block-canvas/index.js +9 -2
  515. package/src/components/block-card/style.scss +1 -1
  516. package/src/components/block-controls/groups.js +2 -0
  517. package/src/components/block-edit/edit.js +13 -31
  518. package/src/components/block-inspector/edit-contents.js +5 -1
  519. package/src/components/block-inspector/index.js +25 -44
  520. package/src/components/block-list/block-invalid-warning.js +8 -19
  521. package/src/components/block-list/block.js +6 -0
  522. package/src/components/block-list/index.js +0 -2
  523. package/src/components/block-list/use-block-props/index.js +2 -0
  524. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  525. package/src/components/block-list/use-block-props/use-focus-handler.js +34 -9
  526. package/src/components/block-lock/style.scss +1 -1
  527. package/src/components/block-manager/style.scss +1 -1
  528. package/src/components/block-navigation/style.scss +1 -1
  529. package/src/components/block-patterns-list/stories/index.story.jsx +1 -1
  530. package/src/components/block-quick-navigation/style.scss +1 -3
  531. package/src/components/block-styles/style.scss +2 -2
  532. package/src/components/block-styles/use-styles-for-block.js +1 -0
  533. package/src/components/block-title/use-block-display-title.js +7 -2
  534. package/src/components/block-toolbar/block-toolbar-icon.js +11 -16
  535. package/src/components/block-toolbar/index.js +41 -18
  536. package/src/components/block-toolbar/test/block-toolbar-icon.js +32 -9
  537. package/src/components/block-tools/index.js +7 -0
  538. package/src/components/block-types-list/style.scss +0 -1
  539. package/src/components/block-variation-transforms/index.js +0 -1
  540. package/src/components/block-visibility/modal.js +24 -10
  541. package/src/components/block-visibility/style.scss +1 -1
  542. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  543. package/src/components/block-visibility/test/utils.js +11 -0
  544. package/src/components/block-visibility/use-block-visibility.js +33 -11
  545. package/src/components/block-visibility/utils.js +31 -6
  546. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  547. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  548. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  549. package/src/components/button-block-appender/content.scss +1 -7
  550. package/src/components/child-layout-control/index.js +0 -6
  551. package/src/components/color-palette/test/__snapshots__/control.js.snap +13 -108
  552. package/src/components/colors-gradients/control.js +4 -4
  553. package/src/components/colors-gradients/style.scss +2 -2
  554. package/src/components/date-format-picker/index.js +0 -1
  555. package/src/components/dimensions-tool/aspect-ratio-tool.js +0 -1
  556. package/src/components/dimensions-tool/scale-tool.js +0 -1
  557. package/src/components/dimensions-tool/width-height-tool.js +0 -2
  558. package/src/components/font-appearance-control/index.js +6 -19
  559. package/src/components/font-family/README.md +0 -9
  560. package/src/components/font-family/index.js +6 -19
  561. package/src/components/font-family/stories/index.story.jsx +1 -2
  562. package/src/components/font-sizes/font-size-picker.js +0 -1
  563. package/src/components/global-styles/border-panel.js +0 -1
  564. package/src/components/global-styles/dimensions-panel.js +0 -3
  565. package/src/components/global-styles/state-control-badges.js +45 -6
  566. package/src/components/global-styles/style.scss +5 -0
  567. package/src/components/global-styles/test/state-control-badges.js +65 -0
  568. package/src/components/global-styles/typography-panel.js +0 -7
  569. package/src/components/height-control/index.js +0 -2
  570. package/src/components/html-element-control/index.js +0 -1
  571. package/src/components/iframe/content.scss +3 -3
  572. package/src/components/image-editor/index.js +22 -0
  573. package/src/components/image-editor/zoom-dropdown.js +0 -1
  574. package/src/components/image-size-control/index.js +0 -4
  575. package/src/components/inner-content/index.js +119 -0
  576. package/src/components/inner-content/test/index.js +81 -0
  577. package/src/components/inserter/hooks/use-block-types-state.js +10 -2
  578. package/src/components/inserter/media-tab/hooks.js +114 -16
  579. package/src/components/inserter/media-tab/media-list.js +2 -0
  580. package/src/components/inserter/media-tab/media-panel.js +354 -19
  581. package/src/components/inserter/media-tab/media-preview.js +34 -17
  582. package/src/components/inserter/media-tab/media-tab.js +20 -2
  583. package/src/components/inserter/media-tab/test/hooks.js +267 -0
  584. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  585. package/src/components/inserter/mobile-tab-navigation.js +6 -1
  586. package/src/components/inserter/no-results.js +2 -2
  587. package/src/components/inserter/preview-panel.js +1 -0
  588. package/src/components/inserter/style.scss +115 -3
  589. package/src/components/inserter-list-item/index.js +8 -2
  590. package/src/components/inserter-list-item/style.scss +0 -15
  591. package/src/components/keyboard-shortcuts/index.js +28 -11
  592. package/src/components/letter-spacing-control/README.md +0 -8
  593. package/src/components/letter-spacing-control/index.js +5 -23
  594. package/src/components/letter-spacing-control/stories/index.story.jsx +0 -12
  595. package/src/components/line-height-control/README.md +0 -8
  596. package/src/components/line-height-control/index.js +6 -16
  597. package/src/components/line-height-control/stories/index.story.jsx +0 -1
  598. package/src/components/line-height-control/test/index.js +1 -7
  599. package/src/components/link-control/style.scss +2 -2
  600. package/src/components/link-control/test/index.js +6 -6
  601. package/src/components/link-picker/style.scss +1 -2
  602. package/src/components/link-picker/test/index.js +3 -1
  603. package/src/components/list-view/block-select-button.js +5 -1
  604. package/src/components/list-view/block.js +69 -23
  605. package/src/components/list-view/expander.js +5 -1
  606. package/src/components/list-view/style.scss +23 -5
  607. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  608. package/src/components/media-placeholder/index.js +0 -1
  609. package/src/components/multi-selection-inspector/style.scss +1 -1
  610. package/src/components/observe-typing/index.js +9 -4
  611. package/src/components/preset-input-control/custom-value-controls.js +0 -2
  612. package/src/components/preset-input-control/index.js +0 -2
  613. package/src/components/resolution-tool/index.js +0 -1
  614. package/src/components/responsive-block-control/style.scss +1 -1
  615. package/src/components/responsive-block-control/test/index.js +1 -5
  616. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  617. package/src/components/rich-text/event-listeners/delete.js +7 -4
  618. package/src/components/rich-text/event-listeners/enter.js +10 -4
  619. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  620. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  621. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  622. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  623. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  624. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  625. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  626. package/src/components/rich-text/index.js +94 -25
  627. package/src/components/skip-to-selected-block/style.scss +1 -1
  628. package/src/components/text-alignment-control/index.js +0 -1
  629. package/src/components/text-decoration-control/index.js +0 -1
  630. package/src/components/text-indent-control/index.js +7 -16
  631. package/src/components/text-transform-control/index.js +0 -1
  632. package/src/components/typewriter/index.js +228 -224
  633. package/src/components/use-block-commands/index.js +27 -17
  634. package/src/components/use-block-display-information/index.js +9 -13
  635. package/src/components/use-block-display-information/test/index.js +47 -9
  636. package/src/components/use-on-block-drop/index.js +4 -7
  637. package/src/components/use-resize-canvas/index.js +10 -71
  638. package/src/components/writing-flow/index.js +15 -1
  639. package/src/components/writing-flow/use-arrow-nav.js +39 -12
  640. package/src/components/writing-flow/use-click-selection.js +2 -3
  641. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  642. package/src/components/writing-flow/use-drag-selection.js +1 -14
  643. package/src/components/writing-flow/use-editable-root.js +182 -0
  644. package/src/components/writing-flow/use-home-end.js +63 -0
  645. package/src/components/writing-flow/use-input.js +25 -8
  646. package/src/components/writing-flow/use-multi-selection.js +2 -3
  647. package/src/components/writing-flow/use-select-all.js +33 -3
  648. package/src/components/writing-flow/use-selection-observer.js +197 -38
  649. package/src/components/writing-flow/utils.js +83 -0
  650. package/src/components/writing-mode-control/index.js +0 -1
  651. package/src/hooks/background.js +7 -9
  652. package/src/hooks/block-fields/link/styles.scss +1 -6
  653. package/src/hooks/block-fields/media/styles.scss +1 -6
  654. package/src/hooks/block-fields/rich-text/index.js +6 -9
  655. package/src/hooks/block-hooks.scss +15 -0
  656. package/src/hooks/elements.js +0 -1
  657. package/src/hooks/font-size.js +0 -1
  658. package/src/hooks/grid-visualizer.js +40 -36
  659. package/src/hooks/layout-child.js +19 -9
  660. package/src/hooks/layout.js +53 -35
  661. package/src/hooks/position.js +44 -23
  662. package/src/hooks/states.js +55 -28
  663. package/src/hooks/style.js +67 -17
  664. package/src/hooks/test/cross-origin-isolation.js +0 -4
  665. package/src/hooks/test/layout.js +75 -1
  666. package/src/hooks/test/style.js +29 -0
  667. package/src/hooks/test/text-align.js +34 -1
  668. package/src/hooks/text-align.js +41 -10
  669. package/src/hooks/typography.js +0 -1
  670. package/src/layouts/constrained.js +56 -29
  671. package/src/layouts/flex.js +5 -4
  672. package/src/layouts/grid.js +59 -9
  673. package/src/layouts/test/constrained.js +91 -0
  674. package/src/layouts/test/grid.js +71 -0
  675. package/src/private-apis.js +4 -2
  676. package/src/store/actions.js +43 -14
  677. package/src/store/private-actions.js +31 -0
  678. package/src/store/private-keys.js +1 -1
  679. package/src/store/private-selectors.js +209 -16
  680. package/src/store/reducer.js +37 -2
  681. package/src/store/selectors.js +41 -0
  682. package/src/store/test/actions.js +1 -1
  683. package/src/store/test/private-selectors.js +547 -10
  684. package/src/store/test/reducer.js +41 -13
  685. package/src/store/test/selectors.js +133 -0
  686. package/src/style.scss +1 -0
  687. package/src/utils/block-bindings.ts +50 -0
  688. package/src/utils/dom.ts +33 -0
  689. package/src/utils/test/block-bindings.js +181 -0
  690. package/build/components/rich-text/input-event.cjs +0 -50
  691. package/build/components/rich-text/input-event.cjs.map +0 -7
  692. package/build/components/rich-text/shortcut.cjs +0 -51
  693. package/build/components/rich-text/shortcut.cjs.map +0 -7
  694. package/build-module/components/rich-text/input-event.mjs +0 -25
  695. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  696. package/build-module/components/rich-text/shortcut.mjs +0 -26
  697. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  698. package/src/components/rich-text/input-event.js +0 -31
  699. package/src/components/rich-text/shortcut.js +0 -32
  700. package/src/components/use-resize-canvas/README.md +0 -37
@@ -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';
@@ -1,79 +1,18 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useEffect, useState } from '@wordpress/element';
4
+ import deprecated from '@wordpress/deprecated';
5
5
 
6
6
  /**
7
- * Function to resize the editor window.
7
+ * Previously returned inline styles that sized the editor canvas to emulate a
8
+ * device preview width. Device preview is now handled by the editor's resizable
9
+ * canvas, so this hook is a no-op kept for backward compatibility.
8
10
  *
9
- * @param {string} deviceType Used for determining the size of the container (e.g. Desktop, Tablet, Mobile)
10
- *
11
- * @return {Object} Inline styles to be added to resizable container.
11
+ * @deprecated
12
12
  */
13
- export default function useResizeCanvas( deviceType ) {
14
- const [ actualWidth, updateActualWidth ] = useState( window.innerWidth );
15
-
16
- useEffect( () => {
17
- if ( deviceType === 'Desktop' ) {
18
- return;
19
- }
20
-
21
- const resizeListener = () => updateActualWidth( window.innerWidth );
22
- window.addEventListener( 'resize', resizeListener );
23
-
24
- return () => {
25
- window.removeEventListener( 'resize', resizeListener );
26
- };
27
- }, [ deviceType ] );
28
-
29
- const getCanvasWidth = ( device ) => {
30
- let deviceWidth;
31
-
32
- /*
33
- * Matches the breakpoints in packages/base-styles/_breakpoints.scss,
34
- * and breakpoints in packages/compose/src/hooks/use-viewport-match/index.js.
35
- * minus 1 to trigger the media query for device preview.
36
- */
37
- switch ( device ) {
38
- case 'Tablet':
39
- deviceWidth = 782 - 1; // preview for useViewportMatch( 'medium', '<' )
40
- break;
41
- case 'Mobile':
42
- deviceWidth = 480 - 1; // preview for useViewportMatch( 'mobile', '<' )
43
- break;
44
- default:
45
- return null;
46
- }
47
-
48
- return deviceWidth < actualWidth ? deviceWidth : actualWidth;
49
- };
50
-
51
- const contentInlineStyles = ( device ) => {
52
- const height = device === 'Mobile' ? '768px' : '1024px';
53
- const marginVertical = '40px';
54
- const marginHorizontal = 'auto';
55
-
56
- switch ( device ) {
57
- case 'Tablet':
58
- case 'Mobile':
59
- return {
60
- width: getCanvasWidth( device ),
61
- // Keeping margin styles separate to avoid warnings
62
- // when those props get overridden in the iframe component
63
- marginTop: marginVertical,
64
- marginBottom: marginVertical,
65
- marginLeft: marginHorizontal,
66
- marginRight: marginHorizontal,
67
- height,
68
- overflowY: 'auto',
69
- };
70
- default:
71
- return {
72
- marginLeft: marginHorizontal,
73
- marginRight: marginHorizontal,
74
- };
75
- }
76
- };
77
-
78
- return contentInlineStyles( deviceType );
13
+ export default function useResizeCanvas() {
14
+ deprecated( 'wp.blockEditor.useResizeCanvas', {
15
+ since: '7.1',
16
+ hint: 'Device preview is now handled by the editor canvas. This hook no longer does anything.',
17
+ } );
79
18
  }
@@ -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
+ }