@wordpress/block-editor 12.16.0 → 12.17.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 (646) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +3 -6
  4. package/build/components/block-canvas/index.js +0 -2
  5. package/build/components/block-canvas/index.js.map +1 -1
  6. package/build/components/block-card/index.js +1 -1
  7. package/build/components/block-card/index.js.map +1 -1
  8. package/build/components/block-draggable/draggable-chip.js +6 -1
  9. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  10. package/build/components/block-draggable/index.js +76 -6
  11. package/build/components/block-draggable/index.js.map +1 -1
  12. package/build/components/block-draggable/index.native.js +0 -6
  13. package/build/components/block-draggable/index.native.js.map +1 -1
  14. package/build/components/block-draggable/use-scroll-when-dragging.native.js +1 -1
  15. package/build/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -1
  16. package/build/components/block-editing-mode/index.js +2 -3
  17. package/build/components/block-editing-mode/index.js.map +1 -1
  18. package/build/components/block-inspector/index.js +1 -1
  19. package/build/components/block-inspector/index.js.map +1 -1
  20. package/build/components/block-list/block-list-item-cell.native.js +1 -0
  21. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  22. package/build/components/block-list/block.js +245 -102
  23. package/build/components/block-list/block.js.map +1 -1
  24. package/build/components/block-list/block.native.js +46 -20
  25. package/build/components/block-list/block.native.js.map +1 -1
  26. package/build/components/block-list/index.native.js +3 -5
  27. package/build/components/block-list/index.native.js.map +1 -1
  28. package/build/components/block-list/private-block-context.js +14 -0
  29. package/build/components/block-list/private-block-context.js.map +1 -0
  30. package/build/components/block-list/use-block-props/index.js +33 -96
  31. package/build/components/block-list/use-block-props/index.js.map +1 -1
  32. package/build/components/block-list/use-in-between-inserter.js +3 -2
  33. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  34. package/build/components/block-list/use-scroll-upon-insertion.native.js +41 -0
  35. package/build/components/block-list/use-scroll-upon-insertion.native.js.map +1 -0
  36. package/build/components/block-lock/toolbar.js +15 -27
  37. package/build/components/block-lock/toolbar.js.map +1 -1
  38. package/build/components/block-mover/index.js +2 -1
  39. package/build/components/block-mover/index.js.map +1 -1
  40. package/build/components/block-patterns-list/index.js +4 -4
  41. package/build/components/block-patterns-list/index.js.map +1 -1
  42. package/build/components/block-switcher/index.js +4 -4
  43. package/build/components/block-switcher/index.js.map +1 -1
  44. package/build/components/block-toolbar/index.js +1 -2
  45. package/build/components/block-toolbar/index.js.map +1 -1
  46. package/build/components/block-tools/block-toolbar-popover.js +0 -2
  47. package/build/components/block-tools/block-toolbar-popover.js.map +1 -1
  48. package/build/components/block-variation-transforms/index.js +29 -2
  49. package/build/components/block-variation-transforms/index.js.map +1 -1
  50. package/build/components/border-radius-control/linked-button.js +1 -1
  51. package/build/components/border-radius-control/linked-button.js.map +1 -1
  52. package/build/components/colors/utils.js +10 -2
  53. package/build/components/colors/utils.js.map +1 -1
  54. package/build/components/colors/with-colors.js +6 -2
  55. package/build/components/colors/with-colors.js.map +1 -1
  56. package/build/components/font-sizes/utils.js +10 -2
  57. package/build/components/font-sizes/utils.js.map +1 -1
  58. package/build/components/global-styles/border-panel.js +2 -1
  59. package/build/components/global-styles/border-panel.js.map +1 -1
  60. package/build/components/global-styles/color-panel.js +2 -1
  61. package/build/components/global-styles/color-panel.js.map +1 -1
  62. package/build/components/global-styles/dimensions-panel.js +4 -3
  63. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  64. package/build/components/global-styles/effects-panel.js +2 -1
  65. package/build/components/global-styles/effects-panel.js.map +1 -1
  66. package/build/components/global-styles/filters-panel.js +1 -4
  67. package/build/components/global-styles/filters-panel.js.map +1 -1
  68. package/build/components/global-styles/get-global-styles-changes.js +192 -0
  69. package/build/components/global-styles/get-global-styles-changes.js.map +1 -0
  70. package/build/components/global-styles/hooks.js +1 -1
  71. package/build/components/global-styles/hooks.js.map +1 -1
  72. package/build/components/global-styles/image-settings-panel.js +7 -1
  73. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  74. package/build/components/global-styles/index.js +7 -0
  75. package/build/components/global-styles/index.js.map +1 -1
  76. package/build/components/global-styles/typography-panel.js +2 -1
  77. package/build/components/global-styles/typography-panel.js.map +1 -1
  78. package/build/components/global-styles/use-global-styles-output.js +22 -8
  79. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  80. package/build/components/global-styles/utils.js +8 -1
  81. package/build/components/global-styles/utils.js.map +1 -1
  82. package/build/components/height-control/index.js +6 -2
  83. package/build/components/height-control/index.js.map +1 -1
  84. package/build/components/image-size-control/index.js +2 -2
  85. package/build/components/image-size-control/index.js.map +1 -1
  86. package/build/components/index.native.js +6 -5
  87. package/build/components/index.native.js.map +1 -1
  88. package/build/components/inner-blocks/index.js +61 -22
  89. package/build/components/inner-blocks/index.js.map +1 -1
  90. package/build/components/inner-blocks/index.native.js +18 -4
  91. package/build/components/inner-blocks/index.native.js.map +1 -1
  92. package/build/components/inner-blocks/use-inner-block-template-sync.js +5 -6
  93. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  94. package/build/components/inner-blocks/use-nested-settings-update.js +5 -9
  95. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  96. package/build/components/inserter/block-patterns-explorer/pattern-list.js +1 -1
  97. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  98. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +10 -9
  99. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  100. package/build/components/inserter/block-patterns-tab/patterns-filter.js +10 -10
  101. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  102. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js +9 -9
  103. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -1
  104. package/build/components/inserter/block-patterns-tab/utils.js +10 -14
  105. package/build/components/inserter/block-patterns-tab/utils.js.map +1 -1
  106. package/build/components/inserter/hooks/use-block-types-state.js +4 -14
  107. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  108. package/build/components/inserter/hooks/use-patterns-state.js +1 -1
  109. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  110. package/build/components/inserter/index.js +1 -2
  111. package/build/components/inserter/index.js.map +1 -1
  112. package/build/components/inserter/library.js +3 -7
  113. package/build/components/inserter/library.js.map +1 -1
  114. package/build/components/inserter/menu.js +14 -28
  115. package/build/components/inserter/menu.js.map +1 -1
  116. package/build/components/inserter/tabs.js +21 -21
  117. package/build/components/inserter/tabs.js.map +1 -1
  118. package/build/components/inserter-draggable-blocks/index.js +1 -1
  119. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  120. package/build/components/inserter-list-item/index.js +2 -4
  121. package/build/components/inserter-list-item/index.js.map +1 -1
  122. package/build/components/inspector-controls/block-support-tools-panel.js +3 -1
  123. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  124. package/build/components/inspector-controls-tabs/index.js +34 -23
  125. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  126. package/build/components/list-view/block-select-button.js +4 -0
  127. package/build/components/list-view/block-select-button.js.map +1 -1
  128. package/build/components/list-view/block.js +57 -3
  129. package/build/components/list-view/block.js.map +1 -1
  130. package/build/components/media-upload-progress/constants.js +19 -0
  131. package/build/components/media-upload-progress/constants.js.map +1 -0
  132. package/build/components/media-upload-progress/index.native.js +42 -17
  133. package/build/components/media-upload-progress/index.native.js.map +1 -1
  134. package/build/components/navigable-toolbar/index.js +9 -14
  135. package/build/components/navigable-toolbar/index.js.map +1 -1
  136. package/build/components/plain-text/index.native.js +8 -3
  137. package/build/components/plain-text/index.native.js.map +1 -1
  138. package/build/components/provider/index.js +3 -1
  139. package/build/components/provider/index.js.map +1 -1
  140. package/build/components/provider/use-block-sync.js +7 -1
  141. package/build/components/provider/use-block-sync.js.map +1 -1
  142. package/build/components/rich-text/index.js +17 -7
  143. package/build/components/rich-text/index.js.map +1 -1
  144. package/build/components/rich-text/native/index.native.js +16 -24
  145. package/build/components/rich-text/native/index.native.js.map +1 -1
  146. package/build/components/rich-text/use-input-rules.js +2 -2
  147. package/build/components/rich-text/use-input-rules.js.map +1 -1
  148. package/build/components/rich-text/use-mark-persistent.js +1 -1
  149. package/build/components/rich-text/use-mark-persistent.js.map +1 -1
  150. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  151. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  152. package/build/components/url-input/index.js +9 -6
  153. package/build/components/url-input/index.js.map +1 -1
  154. package/build/components/use-block-commands/index.js +14 -18
  155. package/build/components/use-block-commands/index.js.map +1 -1
  156. package/build/components/use-block-drop-zone/index.js +51 -22
  157. package/build/components/use-block-drop-zone/index.js.map +1 -1
  158. package/build/components/use-moving-animation/index.js +100 -92
  159. package/build/components/use-moving-animation/index.js.map +1 -1
  160. package/build/components/use-on-block-drop/index.js +8 -11
  161. package/build/components/use-on-block-drop/index.js.map +1 -1
  162. package/build/components/writing-flow/index.js +0 -1
  163. package/build/components/writing-flow/index.js.map +1 -1
  164. package/build/components/writing-flow/use-drag-selection.js +15 -4
  165. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  166. package/build/components/writing-flow/use-selection-observer.js +73 -27
  167. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  168. package/build/components/writing-flow/use-tab-nav.js +7 -4
  169. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  170. package/build/hooks/align.js +1 -1
  171. package/build/hooks/align.js.map +1 -1
  172. package/build/hooks/anchor.js +1 -1
  173. package/build/hooks/anchor.js.map +1 -1
  174. package/build/hooks/aria-label.js +9 -1
  175. package/build/hooks/aria-label.js.map +1 -1
  176. package/build/hooks/background.js +185 -20
  177. package/build/hooks/background.js.map +1 -1
  178. package/build/hooks/border.js +5 -10
  179. package/build/hooks/border.js.map +1 -1
  180. package/build/hooks/color.js +13 -11
  181. package/build/hooks/color.js.map +1 -1
  182. package/build/hooks/custom-class-name.js +1 -1
  183. package/build/hooks/custom-class-name.js.map +1 -1
  184. package/build/hooks/custom-class-name.native.js +9 -1
  185. package/build/hooks/custom-class-name.native.js.map +1 -1
  186. package/build/hooks/dimensions.js +4 -9
  187. package/build/hooks/dimensions.js.map +1 -1
  188. package/build/hooks/font-family.js +7 -3
  189. package/build/hooks/font-family.js.map +1 -1
  190. package/build/hooks/font-size.js +1 -1
  191. package/build/hooks/font-size.js.map +1 -1
  192. package/build/hooks/index.js +4 -3
  193. package/build/hooks/index.js.map +1 -1
  194. package/build/hooks/index.native.js +5 -3
  195. package/build/hooks/index.native.js.map +1 -1
  196. package/build/hooks/layout.js +10 -4
  197. package/build/hooks/layout.js.map +1 -1
  198. package/build/hooks/style.js +1 -1
  199. package/build/hooks/style.js.map +1 -1
  200. package/build/hooks/typography.js +4 -9
  201. package/build/hooks/typography.js.map +1 -1
  202. package/build/hooks/typography.native.js +43 -18
  203. package/build/hooks/typography.native.js.map +1 -1
  204. package/build/hooks/use-typography-props.js +10 -2
  205. package/build/hooks/use-typography-props.js.map +1 -1
  206. package/build/hooks/utils.js +44 -4
  207. package/build/hooks/utils.js.map +1 -1
  208. package/build/private-apis.js +2 -4
  209. package/build/private-apis.js.map +1 -1
  210. package/build/private-apis.native.js +0 -2
  211. package/build/private-apis.native.js.map +1 -1
  212. package/build/store/actions.js +0 -16
  213. package/build/store/actions.js.map +1 -1
  214. package/build/store/private-actions.js +51 -5
  215. package/build/store/private-actions.js.map +1 -1
  216. package/build/store/private-selectors.js +12 -0
  217. package/build/store/private-selectors.js.map +1 -1
  218. package/build/store/reducer.js +14 -6
  219. package/build/store/reducer.js.map +1 -1
  220. package/build/store/selectors.js +1 -13
  221. package/build/store/selectors.js.map +1 -1
  222. package/build/store/undo-ignore.js +12 -0
  223. package/build/store/undo-ignore.js.map +1 -0
  224. package/build/store/utils.js +1 -1
  225. package/build/store/utils.js.map +1 -1
  226. package/build/utils/get-px-from-css-unit.js +16 -0
  227. package/build/utils/get-px-from-css-unit.js.map +1 -0
  228. package/build/utils/index.js +2 -2
  229. package/build/utils/index.js.map +1 -1
  230. package/build/utils/object.js +0 -38
  231. package/build/utils/object.js.map +1 -1
  232. package/build/utils/use-can-block-toolbar-be-focused.js +46 -0
  233. package/build/utils/use-can-block-toolbar-be-focused.js.map +1 -0
  234. package/build-module/components/block-canvas/index.js +0 -2
  235. package/build-module/components/block-canvas/index.js.map +1 -1
  236. package/build-module/components/block-card/index.js +1 -1
  237. package/build-module/components/block-card/index.js.map +1 -1
  238. package/build-module/components/block-draggable/draggable-chip.js +6 -1
  239. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  240. package/build-module/components/block-draggable/index.js +76 -6
  241. package/build-module/components/block-draggable/index.js.map +1 -1
  242. package/build-module/components/block-draggable/index.native.js +1 -7
  243. package/build-module/components/block-draggable/index.native.js.map +1 -1
  244. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js +1 -1
  245. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -1
  246. package/build-module/components/block-editing-mode/index.js +3 -4
  247. package/build-module/components/block-editing-mode/index.js.map +1 -1
  248. package/build-module/components/block-inspector/index.js +1 -1
  249. package/build-module/components/block-inspector/index.js.map +1 -1
  250. package/build-module/components/block-list/block-list-item-cell.native.js +1 -0
  251. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  252. package/build-module/components/block-list/block.js +249 -106
  253. package/build-module/components/block-list/block.js.map +1 -1
  254. package/build-module/components/block-list/block.native.js +48 -22
  255. package/build-module/components/block-list/block.native.js.map +1 -1
  256. package/build-module/components/block-list/index.native.js +3 -5
  257. package/build-module/components/block-list/index.native.js.map +1 -1
  258. package/build-module/components/block-list/private-block-context.js +6 -0
  259. package/build-module/components/block-list/private-block-context.js.map +1 -0
  260. package/build-module/components/block-list/use-block-props/index.js +34 -97
  261. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  262. package/build-module/components/block-list/use-in-between-inserter.js +3 -2
  263. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  264. package/build-module/components/block-list/use-scroll-upon-insertion.native.js +33 -0
  265. package/build-module/components/block-list/use-scroll-upon-insertion.native.js.map +1 -0
  266. package/build-module/components/block-lock/toolbar.js +16 -28
  267. package/build-module/components/block-lock/toolbar.js.map +1 -1
  268. package/build-module/components/block-mover/index.js +2 -1
  269. package/build-module/components/block-mover/index.js.map +1 -1
  270. package/build-module/components/block-patterns-list/index.js +5 -5
  271. package/build-module/components/block-patterns-list/index.js.map +1 -1
  272. package/build-module/components/block-switcher/index.js +4 -4
  273. package/build-module/components/block-switcher/index.js.map +1 -1
  274. package/build-module/components/block-toolbar/index.js +1 -2
  275. package/build-module/components/block-toolbar/index.js.map +1 -1
  276. package/build-module/components/block-tools/block-toolbar-popover.js +0 -2
  277. package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -1
  278. package/build-module/components/block-variation-transforms/index.js +30 -3
  279. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  280. package/build-module/components/border-radius-control/linked-button.js +1 -1
  281. package/build-module/components/border-radius-control/linked-button.js.map +1 -1
  282. package/build-module/components/colors/utils.js +9 -1
  283. package/build-module/components/colors/utils.js.map +1 -1
  284. package/build-module/components/colors/with-colors.js +5 -1
  285. package/build-module/components/colors/with-colors.js.map +1 -1
  286. package/build-module/components/font-sizes/utils.js +9 -1
  287. package/build-module/components/font-sizes/utils.js.map +1 -1
  288. package/build-module/components/global-styles/border-panel.js +3 -2
  289. package/build-module/components/global-styles/border-panel.js.map +1 -1
  290. package/build-module/components/global-styles/color-panel.js +3 -2
  291. package/build-module/components/global-styles/color-panel.js.map +1 -1
  292. package/build-module/components/global-styles/dimensions-panel.js +5 -4
  293. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  294. package/build-module/components/global-styles/effects-panel.js +3 -2
  295. package/build-module/components/global-styles/effects-panel.js.map +1 -1
  296. package/build-module/components/global-styles/filters-panel.js +2 -5
  297. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  298. package/build-module/components/global-styles/get-global-styles-changes.js +184 -0
  299. package/build-module/components/global-styles/get-global-styles-changes.js.map +1 -0
  300. package/build-module/components/global-styles/hooks.js +1 -1
  301. package/build-module/components/global-styles/hooks.js.map +1 -1
  302. package/build-module/components/global-styles/image-settings-panel.js +7 -1
  303. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  304. package/build-module/components/global-styles/index.js +1 -0
  305. package/build-module/components/global-styles/index.js.map +1 -1
  306. package/build-module/components/global-styles/typography-panel.js +3 -2
  307. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  308. package/build-module/components/global-styles/use-global-styles-output.js +15 -1
  309. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  310. package/build-module/components/global-styles/utils.js +7 -0
  311. package/build-module/components/global-styles/utils.js.map +1 -1
  312. package/build-module/components/height-control/index.js +6 -2
  313. package/build-module/components/height-control/index.js.map +1 -1
  314. package/build-module/components/image-size-control/index.js +2 -2
  315. package/build-module/components/image-size-control/index.js.map +1 -1
  316. package/build-module/components/index.native.js +2 -1
  317. package/build-module/components/index.native.js.map +1 -1
  318. package/build-module/components/inner-blocks/index.js +62 -23
  319. package/build-module/components/inner-blocks/index.js.map +1 -1
  320. package/build-module/components/inner-blocks/index.native.js +18 -4
  321. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  322. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +5 -6
  323. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  324. package/build-module/components/inner-blocks/use-nested-settings-update.js +6 -10
  325. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  326. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +2 -2
  327. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  328. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +11 -10
  329. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  330. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +11 -11
  331. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  332. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js +11 -11
  333. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -1
  334. package/build-module/components/inserter/block-patterns-tab/utils.js +7 -11
  335. package/build-module/components/inserter/block-patterns-tab/utils.js.map +1 -1
  336. package/build-module/components/inserter/hooks/use-block-types-state.js +4 -14
  337. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  338. package/build-module/components/inserter/hooks/use-patterns-state.js +2 -2
  339. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  340. package/build-module/components/inserter/index.js +1 -2
  341. package/build-module/components/inserter/index.js.map +1 -1
  342. package/build-module/components/inserter/library.js +3 -7
  343. package/build-module/components/inserter/library.js.map +1 -1
  344. package/build-module/components/inserter/menu.js +14 -28
  345. package/build-module/components/inserter/menu.js.map +1 -1
  346. package/build-module/components/inserter/tabs.js +22 -22
  347. package/build-module/components/inserter/tabs.js.map +1 -1
  348. package/build-module/components/inserter-draggable-blocks/index.js +2 -2
  349. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  350. package/build-module/components/inserter-list-item/index.js +2 -4
  351. package/build-module/components/inserter-list-item/index.js.map +1 -1
  352. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -1
  353. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  354. package/build-module/components/inspector-controls-tabs/index.js +35 -24
  355. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  356. package/build-module/components/list-view/block-select-button.js +4 -0
  357. package/build-module/components/list-view/block-select-button.js.map +1 -1
  358. package/build-module/components/list-view/block.js +58 -4
  359. package/build-module/components/list-view/block.js.map +1 -1
  360. package/build-module/components/media-upload-progress/constants.js +7 -0
  361. package/build-module/components/media-upload-progress/constants.js.map +1 -0
  362. package/build-module/components/media-upload-progress/index.native.js +37 -8
  363. package/build-module/components/media-upload-progress/index.native.js.map +1 -1
  364. package/build-module/components/navigable-toolbar/index.js +9 -14
  365. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  366. package/build-module/components/plain-text/index.native.js +6 -1
  367. package/build-module/components/plain-text/index.native.js.map +1 -1
  368. package/build-module/components/provider/index.js +3 -1
  369. package/build-module/components/provider/index.js.map +1 -1
  370. package/build-module/components/provider/use-block-sync.js +7 -1
  371. package/build-module/components/provider/use-block-sync.js.map +1 -1
  372. package/build-module/components/rich-text/index.js +17 -7
  373. package/build-module/components/rich-text/index.js.map +1 -1
  374. package/build-module/components/rich-text/native/index.native.js +16 -23
  375. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  376. package/build-module/components/rich-text/use-input-rules.js +2 -2
  377. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  378. package/build-module/components/rich-text/use-mark-persistent.js +1 -1
  379. package/build-module/components/rich-text/use-mark-persistent.js.map +1 -1
  380. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  381. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  382. package/build-module/components/url-input/index.js +9 -6
  383. package/build-module/components/url-input/index.js.map +1 -1
  384. package/build-module/components/use-block-commands/index.js +14 -18
  385. package/build-module/components/use-block-commands/index.js.map +1 -1
  386. package/build-module/components/use-block-drop-zone/index.js +51 -23
  387. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  388. package/build-module/components/use-moving-animation/index.js +102 -94
  389. package/build-module/components/use-moving-animation/index.js.map +1 -1
  390. package/build-module/components/use-on-block-drop/index.js +8 -11
  391. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  392. package/build-module/components/writing-flow/index.js +0 -1
  393. package/build-module/components/writing-flow/index.js.map +1 -1
  394. package/build-module/components/writing-flow/use-drag-selection.js +15 -4
  395. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  396. package/build-module/components/writing-flow/use-selection-observer.js +73 -27
  397. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  398. package/build-module/components/writing-flow/use-tab-nav.js +7 -4
  399. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  400. package/build-module/hooks/align.js +1 -1
  401. package/build-module/hooks/align.js.map +1 -1
  402. package/build-module/hooks/anchor.js +1 -1
  403. package/build-module/hooks/anchor.js.map +1 -1
  404. package/build-module/hooks/aria-label.js +7 -1
  405. package/build-module/hooks/aria-label.js.map +1 -1
  406. package/build-module/hooks/background.js +181 -19
  407. package/build-module/hooks/background.js.map +1 -1
  408. package/build-module/hooks/border.js +2 -8
  409. package/build-module/hooks/border.js.map +1 -1
  410. package/build-module/hooks/color.js +11 -9
  411. package/build-module/hooks/color.js.map +1 -1
  412. package/build-module/hooks/custom-class-name.js +1 -1
  413. package/build-module/hooks/custom-class-name.js.map +1 -1
  414. package/build-module/hooks/custom-class-name.native.js +7 -1
  415. package/build-module/hooks/custom-class-name.native.js.map +1 -1
  416. package/build-module/hooks/dimensions.js +1 -7
  417. package/build-module/hooks/dimensions.js.map +1 -1
  418. package/build-module/hooks/font-family.js +6 -2
  419. package/build-module/hooks/font-family.js.map +1 -1
  420. package/build-module/hooks/font-size.js +1 -1
  421. package/build-module/hooks/font-size.js.map +1 -1
  422. package/build-module/hooks/index.js +5 -4
  423. package/build-module/hooks/index.js.map +1 -1
  424. package/build-module/hooks/index.native.js +6 -4
  425. package/build-module/hooks/index.native.js.map +1 -1
  426. package/build-module/hooks/layout.js +9 -3
  427. package/build-module/hooks/layout.js.map +1 -1
  428. package/build-module/hooks/style.js +1 -1
  429. package/build-module/hooks/style.js.map +1 -1
  430. package/build-module/hooks/typography.js +1 -7
  431. package/build-module/hooks/typography.js.map +1 -1
  432. package/build-module/hooks/typography.native.js +43 -17
  433. package/build-module/hooks/typography.native.js.map +1 -1
  434. package/build-module/hooks/use-typography-props.js +9 -1
  435. package/build-module/hooks/use-typography-props.js.map +1 -1
  436. package/build-module/hooks/utils.js +43 -4
  437. package/build-module/hooks/utils.js.map +1 -1
  438. package/build-module/private-apis.js +2 -4
  439. package/build-module/private-apis.js.map +1 -1
  440. package/build-module/private-apis.native.js +0 -2
  441. package/build-module/private-apis.native.js.map +1 -1
  442. package/build-module/store/actions.js +0 -15
  443. package/build-module/store/actions.js.map +1 -1
  444. package/build-module/store/private-actions.js +49 -4
  445. package/build-module/store/private-actions.js.map +1 -1
  446. package/build-module/store/private-selectors.js +11 -0
  447. package/build-module/store/private-selectors.js.map +1 -1
  448. package/build-module/store/reducer.js +14 -6
  449. package/build-module/store/reducer.js.map +1 -1
  450. package/build-module/store/selectors.js +1 -12
  451. package/build-module/store/selectors.js.map +1 -1
  452. package/build-module/store/undo-ignore.js +5 -0
  453. package/build-module/store/undo-ignore.js.map +1 -0
  454. package/build-module/store/utils.js +2 -2
  455. package/build-module/store/utils.js.map +1 -1
  456. package/build-module/utils/get-px-from-css-unit.js +9 -0
  457. package/build-module/utils/get-px-from-css-unit.js.map +1 -0
  458. package/build-module/utils/index.js +1 -1
  459. package/build-module/utils/index.js.map +1 -1
  460. package/build-module/utils/object.js +0 -37
  461. package/build-module/utils/object.js.map +1 -1
  462. package/build-module/utils/use-can-block-toolbar-be-focused.js +40 -0
  463. package/build-module/utils/use-can-block-toolbar-be-focused.js.map +1 -0
  464. package/build-style/content-rtl.css +7 -6
  465. package/build-style/content.css +7 -6
  466. package/build-style/style-rtl.css +51 -8
  467. package/build-style/style.css +51 -8
  468. package/package.json +31 -31
  469. package/src/components/alignment-control/README.md +0 -5
  470. package/src/components/block-alignment-control/README.md +0 -5
  471. package/src/components/block-alignment-matrix-control/README.md +0 -10
  472. package/src/components/block-breadcrumb/README.md +0 -5
  473. package/src/components/block-canvas/index.js +0 -2
  474. package/src/components/block-canvas/style.scss +6 -0
  475. package/src/components/block-caption/README.md +0 -5
  476. package/src/components/block-card/README.md +0 -5
  477. package/src/components/block-card/index.js +1 -1
  478. package/src/components/block-draggable/draggable-chip.js +11 -1
  479. package/src/components/block-draggable/index.js +116 -4
  480. package/src/components/block-draggable/index.native.js +0 -5
  481. package/src/components/block-draggable/style.scss +35 -0
  482. package/src/components/block-draggable/test/helpers.native.js +8 -7
  483. package/src/components/block-draggable/use-scroll-when-dragging.native.js +1 -1
  484. package/src/components/block-editing-mode/index.js +3 -3
  485. package/src/components/block-icon/README.md +0 -5
  486. package/src/components/block-inspector/README.md +0 -5
  487. package/src/components/block-inspector/index.js +3 -1
  488. package/src/components/block-list/block-list-item-cell.native.js +5 -1
  489. package/src/components/block-list/block.js +290 -119
  490. package/src/components/block-list/block.native.js +55 -21
  491. package/src/components/block-list/content.scss +14 -10
  492. package/src/components/block-list/index.native.js +3 -5
  493. package/src/components/block-list/{block-list-block-context.js → private-block-context.js} +1 -1
  494. package/src/components/block-list/use-block-props/index.js +32 -128
  495. package/src/components/block-list/use-in-between-inserter.js +4 -1
  496. package/src/components/block-list/use-scroll-upon-insertion.native.js +52 -0
  497. package/src/components/block-lock/toolbar.js +15 -34
  498. package/src/components/block-mover/README.md +0 -5
  499. package/src/components/block-mover/index.js +1 -1
  500. package/src/components/block-parent-selector/README.md +0 -5
  501. package/src/components/block-patterns-list/README.md +0 -5
  502. package/src/components/block-patterns-list/index.js +8 -5
  503. package/src/components/block-switcher/index.js +49 -59
  504. package/src/components/block-toolbar/README.md +0 -5
  505. package/src/components/block-toolbar/index.js +1 -2
  506. package/src/components/block-tools/block-toolbar-popover.js +4 -10
  507. package/src/components/block-types-list/README.md +0 -5
  508. package/src/components/block-variation-picker/README.md +0 -5
  509. package/src/components/block-variation-transforms/README.md +0 -5
  510. package/src/components/block-variation-transforms/index.js +49 -3
  511. package/src/components/border-radius-control/linked-button.js +1 -1
  512. package/src/components/caption/README.md +0 -5
  513. package/src/components/color-palette/test/__snapshots__/control.js.snap +0 -1
  514. package/src/components/colors/utils.js +8 -1
  515. package/src/components/colors/with-colors.js +3 -1
  516. package/src/components/contrast-checker/README.md +0 -4
  517. package/src/components/copy-handler/README.md +0 -10
  518. package/src/components/font-sizes/utils.js +7 -1
  519. package/src/components/global-styles/border-panel.js +2 -1
  520. package/src/components/global-styles/color-panel.js +2 -1
  521. package/src/components/global-styles/dimensions-panel.js +4 -3
  522. package/src/components/global-styles/effects-panel.js +2 -1
  523. package/src/components/global-styles/filters-panel.js +2 -5
  524. package/src/components/global-styles/get-global-styles-changes.js +210 -0
  525. package/src/components/global-styles/hooks.js +3 -0
  526. package/src/components/global-styles/image-settings-panel.js +6 -0
  527. package/src/components/global-styles/index.js +1 -0
  528. package/src/components/global-styles/test/get-global-styles-changes.js +234 -0
  529. package/src/components/global-styles/typography-panel.js +2 -1
  530. package/src/components/global-styles/use-global-styles-output.js +9 -5
  531. package/src/components/global-styles/utils.js +7 -0
  532. package/src/components/height-control/README.md +2 -7
  533. package/src/components/height-control/index.js +4 -0
  534. package/src/components/image-size-control/index.js +5 -2
  535. package/src/components/index.native.js +2 -2
  536. package/src/components/inner-blocks/index.js +68 -29
  537. package/src/components/inner-blocks/index.native.js +19 -7
  538. package/src/components/inner-blocks/use-inner-block-template-sync.js +5 -7
  539. package/src/components/inner-blocks/use-nested-settings-update.js +6 -13
  540. package/src/components/inserter/block-patterns-explorer/pattern-list.js +2 -2
  541. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +15 -15
  542. package/src/components/inserter/block-patterns-tab/patterns-filter.js +15 -13
  543. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +15 -18
  544. package/src/components/inserter/block-patterns-tab/utils.js +11 -12
  545. package/src/components/inserter/hooks/use-block-types-state.js +9 -11
  546. package/src/components/inserter/hooks/use-patterns-state.js +2 -2
  547. package/src/components/inserter/index.js +0 -1
  548. package/src/components/inserter/library.js +2 -8
  549. package/src/components/inserter/menu.js +13 -31
  550. package/src/components/inserter/style.scss +6 -4
  551. package/src/components/inserter/tabs.js +34 -25
  552. package/src/components/inserter-draggable-blocks/index.js +2 -2
  553. package/src/components/inserter-list-item/index.js +6 -6
  554. package/src/components/inspector-controls/block-support-tools-panel.js +2 -0
  555. package/src/components/inspector-controls-tabs/index.js +39 -28
  556. package/src/components/inspector-controls-tabs/style.scss +3 -2
  557. package/src/components/letter-spacing-control/README.md +0 -5
  558. package/src/components/line-height-control/README.md +0 -5
  559. package/src/components/list-view/README.md +0 -5
  560. package/src/components/list-view/block-select-button.js +4 -0
  561. package/src/components/list-view/block.js +73 -2
  562. package/src/components/list-view/style.scss +6 -0
  563. package/src/components/media-upload-progress/constants.js +6 -0
  564. package/src/components/media-upload-progress/index.native.js +66 -14
  565. package/src/components/media-upload-progress/test/index.native.js +2 -2
  566. package/src/components/multi-selection-inspector/README.md +0 -5
  567. package/src/components/navigable-toolbar/index.js +13 -11
  568. package/src/components/plain-text/index.native.js +6 -1
  569. package/src/components/provider/index.js +1 -1
  570. package/src/components/provider/test/use-block-sync.js +20 -17
  571. package/src/components/provider/use-block-sync.js +6 -0
  572. package/src/components/rich-text/index.js +18 -6
  573. package/src/components/rich-text/native/index.native.js +16 -24
  574. package/src/components/rich-text/native/test/__snapshots__/index.native.js.snap +3 -3
  575. package/src/components/rich-text/native/test/index.native.js +72 -5
  576. package/src/components/rich-text/use-input-rules.js +2 -2
  577. package/src/components/rich-text/use-mark-persistent.js +1 -2
  578. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  579. package/src/components/text-decoration-control/README.md +40 -0
  580. package/src/components/text-transform-control/README.md +0 -4
  581. package/src/components/ungroup-button/README.md +0 -5
  582. package/src/components/unit-control/README.md +0 -4
  583. package/src/components/url-input/index.js +11 -11
  584. package/src/components/use-block-commands/index.js +18 -21
  585. package/src/components/use-block-drop-zone/index.js +85 -34
  586. package/src/components/use-moving-animation/index.js +107 -103
  587. package/src/components/use-on-block-drop/index.js +7 -23
  588. package/src/components/use-on-block-drop/test/index.js +12 -26
  589. package/src/components/use-resize-canvas/README.md +0 -4
  590. package/src/components/use-settings/README.md +0 -4
  591. package/src/components/writing-flow/index.js +0 -1
  592. package/src/components/writing-flow/use-drag-selection.js +18 -4
  593. package/src/components/writing-flow/use-selection-observer.js +99 -37
  594. package/src/components/writing-flow/use-tab-nav.js +7 -7
  595. package/src/hooks/align.js +1 -5
  596. package/src/hooks/anchor.js +1 -5
  597. package/src/hooks/aria-label.js +8 -5
  598. package/src/hooks/background.js +253 -21
  599. package/src/hooks/border.js +2 -13
  600. package/src/hooks/color.js +19 -14
  601. package/src/hooks/custom-class-name.js +1 -5
  602. package/src/hooks/custom-class-name.native.js +8 -5
  603. package/src/hooks/dimensions.js +1 -7
  604. package/src/hooks/font-family.js +4 -7
  605. package/src/hooks/font-size.js +1 -6
  606. package/src/hooks/index.js +19 -3
  607. package/src/hooks/index.native.js +17 -4
  608. package/src/hooks/layout.js +5 -2
  609. package/src/hooks/style.js +1 -6
  610. package/src/hooks/test/anchor.js +4 -9
  611. package/src/hooks/test/custom-class-name.js +3 -8
  612. package/src/hooks/test/style.js +4 -14
  613. package/src/hooks/typography.js +1 -7
  614. package/src/hooks/typography.native.js +31 -33
  615. package/src/hooks/use-typography-props.js +7 -1
  616. package/src/hooks/utils.js +60 -2
  617. package/src/private-apis.js +2 -4
  618. package/src/private-apis.native.js +0 -2
  619. package/src/store/actions.js +0 -15
  620. package/src/store/private-actions.js +44 -4
  621. package/src/store/private-selectors.js +11 -0
  622. package/src/store/reducer.js +16 -5
  623. package/src/store/selectors.js +5 -13
  624. package/src/store/undo-ignore.js +4 -0
  625. package/src/store/utils.js +2 -2
  626. package/src/style.scss +1 -0
  627. package/src/utils/get-px-from-css-unit.js +8 -0
  628. package/src/utils/index.js +1 -1
  629. package/src/utils/object.js +0 -35
  630. package/src/utils/test/object.js +1 -96
  631. package/src/utils/use-can-block-toolbar-be-focused.js +48 -0
  632. package/build/components/block-list/block-list-block-context.js +0 -14
  633. package/build/components/block-list/block-list-block-context.js.map +0 -1
  634. package/build/utils/parse-css-unit-to-px.js +0 -302
  635. package/build/utils/parse-css-unit-to-px.js.map +0 -1
  636. package/build/utils/use-should-contextual-toolbar-show.js +0 -63
  637. package/build/utils/use-should-contextual-toolbar-show.js.map +0 -1
  638. package/build-module/components/block-list/block-list-block-context.js +0 -6
  639. package/build-module/components/block-list/block-list-block-context.js.map +0 -1
  640. package/build-module/utils/parse-css-unit-to-px.js +0 -294
  641. package/build-module/utils/parse-css-unit-to-px.js.map +0 -1
  642. package/build-module/utils/use-should-contextual-toolbar-show.js +0 -57
  643. package/build-module/utils/use-should-contextual-toolbar-show.js.map +0 -1
  644. package/src/utils/parse-css-unit-to-px.js +0 -329
  645. package/src/utils/test/parse-css-unit-to-px.js +0 -172
  646. package/src/utils/use-should-contextual-toolbar-show.js +0 -85
@@ -263,13 +263,13 @@ describe( 'useBlockSync hook', () => {
263
263
 
264
264
  expect( onInput ).toHaveBeenCalledWith(
265
265
  [ { clientId: 'a', innerBlocks: [], attributes: { foo: 2 } } ],
266
- {
266
+ expect.objectContaining( {
267
267
  selection: {
268
268
  selectionEnd: {},
269
269
  selectionStart: {},
270
270
  initialPosition: null,
271
271
  },
272
- }
272
+ } )
273
273
  );
274
274
  expect( onChange ).not.toHaveBeenCalled();
275
275
  } );
@@ -303,13 +303,13 @@ describe( 'useBlockSync hook', () => {
303
303
 
304
304
  expect( onChange ).toHaveBeenCalledWith(
305
305
  [ { clientId: 'a', innerBlocks: [], attributes: { foo: 2 } } ],
306
- {
306
+ expect.objectContaining( {
307
307
  selection: {
308
308
  selectionEnd: {},
309
309
  selectionStart: {},
310
310
  initialPosition: null,
311
311
  },
312
- }
312
+ } )
313
313
  );
314
314
  expect( onInput ).not.toHaveBeenCalled();
315
315
  } );
@@ -406,13 +406,13 @@ describe( 'useBlockSync hook', () => {
406
406
  attributes: { foo: 2 },
407
407
  },
408
408
  ],
409
- {
409
+ expect.objectContaining( {
410
410
  selection: {
411
411
  selectionEnd: {},
412
412
  selectionStart: {},
413
413
  initialPosition: null,
414
414
  },
415
- }
415
+ } )
416
416
  );
417
417
  expect( onInput ).not.toHaveBeenCalled();
418
418
  } );
@@ -447,13 +447,16 @@ describe( 'useBlockSync hook', () => {
447
447
  { clientId: 'a', innerBlocks: [], attributes: { foo: 2 } },
448
448
  ];
449
449
 
450
- expect( onChange1 ).toHaveBeenCalledWith( updatedBlocks1, {
451
- selection: {
452
- initialPosition: null,
453
- selectionEnd: {},
454
- selectionStart: {},
455
- },
456
- } );
450
+ expect( onChange1 ).toHaveBeenCalledWith(
451
+ updatedBlocks1,
452
+ expect.objectContaining( {
453
+ selection: {
454
+ initialPosition: null,
455
+ selectionEnd: {},
456
+ selectionStart: {},
457
+ },
458
+ } )
459
+ );
457
460
 
458
461
  const newBlocks = [
459
462
  { clientId: 'b', innerBlocks: [], attributes: { foo: 1 } },
@@ -485,13 +488,13 @@ describe( 'useBlockSync hook', () => {
485
488
  // The second callback should be called with the new change.
486
489
  expect( onChange2 ).toHaveBeenCalledWith(
487
490
  [ { clientId: 'b', innerBlocks: [], attributes: { foo: 3 } } ],
488
- {
491
+ expect.objectContaining( {
489
492
  selection: {
490
493
  selectionEnd: {},
491
494
  selectionStart: {},
492
495
  initialPosition: null,
493
496
  },
494
- }
497
+ } )
495
498
  );
496
499
  } );
497
500
 
@@ -544,13 +547,13 @@ describe( 'useBlockSync hook', () => {
544
547
  // Only the new callback should be called.
545
548
  expect( onChange2 ).toHaveBeenCalledWith(
546
549
  [ { clientId: 'b', innerBlocks: [], attributes: { foo: 3 } } ],
547
- {
550
+ expect.objectContaining( {
548
551
  selection: {
549
552
  selectionEnd: {},
550
553
  selectionStart: {},
551
554
  initialPosition: null,
552
555
  },
553
- }
556
+ } )
554
557
  );
555
558
  } );
556
559
  } );
@@ -9,6 +9,7 @@ import { cloneBlock } from '@wordpress/blocks';
9
9
  * Internal dependencies
10
10
  */
11
11
  import { store as blockEditorStore } from '../../store';
12
+ import { undoIgnoreBlocks } from '../../store/undo-ignore';
12
13
 
13
14
  const noop = () => {};
14
15
 
@@ -264,6 +265,10 @@ export default function useBlockSync( {
264
265
  const updateParent = isPersistent
265
266
  ? onChangeRef.current
266
267
  : onInputRef.current;
268
+ const undoIgnore = undoIgnoreBlocks.has( blocks );
269
+ if ( undoIgnore ) {
270
+ undoIgnoreBlocks.delete( blocks );
271
+ }
267
272
  updateParent( blocks, {
268
273
  selection: {
269
274
  selectionStart: getSelectionStart(),
@@ -271,6 +276,7 @@ export default function useBlockSync( {
271
276
  initialPosition:
272
277
  getSelectedBlocksInitialCaretPosition(),
273
278
  },
279
+ undoIgnore,
274
280
  } );
275
281
  }
276
282
  previousAreBlocksDifferent = areBlocksDifferent;
@@ -113,8 +113,14 @@ export function RichTextWrapper(
113
113
  props = removeNativeProps( props );
114
114
 
115
115
  const anchorRef = useRef();
116
- const { clientId } = useBlockEditContext();
116
+ const { clientId, isSelected: isBlockSelected } = useBlockEditContext();
117
117
  const selector = ( select ) => {
118
+ // Avoid subscribing to the block editor store if the block is not
119
+ // selected.
120
+ if ( ! isBlockSelected ) {
121
+ return { isSelected: false };
122
+ }
123
+
118
124
  const { getSelectionStart, getSelectionEnd } =
119
125
  select( blockEditorStore );
120
126
  const selectionStart = getSelectionStart();
@@ -137,10 +143,12 @@ export function RichTextWrapper(
137
143
  isSelected,
138
144
  };
139
145
  };
140
- // This selector must run on every render so the right selection state is
141
- // retrieved from the store on merge.
142
- // To do: fix this somehow.
143
- const { selectionStart, selectionEnd, isSelected } = useSelect( selector );
146
+ const { selectionStart, selectionEnd, isSelected } = useSelect( selector, [
147
+ clientId,
148
+ identifier,
149
+ originalIsSelected,
150
+ isBlockSelected,
151
+ ] );
144
152
  const { getSelectionStart, getSelectionEnd, getBlockRootClientId } =
145
153
  useSelect( blockEditorStore );
146
154
  const { selectionChange } = useDispatch( blockEditorStore );
@@ -317,10 +325,13 @@ export function RichTextWrapper(
317
325
  { ...props }
318
326
  { ...autocompleteProps }
319
327
  ref={ useMergeRefs( [
328
+ // Rich text ref must be first because its focus listener
329
+ // must be set up before any other ref calls .focus() on
330
+ // mount.
331
+ richTextRef,
320
332
  forwardedRef,
321
333
  autocompleteProps.ref,
322
334
  props.ref,
323
- richTextRef,
324
335
  useBeforeInputRules( { value, onChange } ),
325
336
  useInputRules( {
326
337
  getValue,
@@ -379,6 +390,7 @@ export function RichTextWrapper(
379
390
  // tabIndex because Safari will focus the element. However,
380
391
  // Safari will correctly ignore nested contentEditable elements.
381
392
  tabIndex={ props.tabIndex === 0 ? null : props.tabIndex }
393
+ data-wp-block-attribute-key={ identifier }
382
394
  />
383
395
  </>
384
396
  );
@@ -15,7 +15,8 @@ import {
15
15
  showUserSuggestions,
16
16
  showXpostSuggestions,
17
17
  } from '@wordpress/react-native-bridge';
18
- import { BlockFormatControls, getPxFromCssUnit } from '@wordpress/block-editor';
18
+ import { BlockFormatControls } from '@wordpress/block-editor';
19
+ import { getPxFromCssUnit } from '@wordpress/components';
19
20
  import { Component } from '@wordpress/element';
20
21
  import {
21
22
  compose,
@@ -51,10 +52,6 @@ import { getFormatColors } from './get-format-colors';
51
52
  import styles from './style.scss';
52
53
  import ToolbarButtonWithOptions from './toolbar-button-with-options';
53
54
 
54
- const unescapeSpaces = ( text ) => {
55
- return text.replace( /&nbsp;|&#160;/gi, ' ' );
56
- };
57
-
58
55
  // The flattened color palettes array is memoized to ensure that the same array instance is
59
56
  // returned for the colors palettes. This value might be used as a prop, so having the same
60
57
  // instance will prevent unnecessary re-renders of the RichText component.
@@ -267,7 +264,7 @@ export class RichText extends Component {
267
264
  onCreateUndoLevel() {
268
265
  const { __unstableOnCreateUndoLevel: onCreateUndoLevel } = this.props;
269
266
  // If the content is the same, no level needs to be created.
270
- if ( this.lastHistoryValue === this.value ) {
267
+ if ( this.lastHistoryValue.toString() === this.value.toString() ) {
271
268
  return;
272
269
  }
273
270
 
@@ -317,10 +314,10 @@ export class RichText extends Component {
317
314
  }
318
315
 
319
316
  const contentWithoutRootTag = this.removeRootTagsProducedByAztec(
320
- unescapeSpaces( event.nativeEvent.text )
317
+ event.nativeEvent.text
321
318
  );
322
319
  // On iOS, onChange can be triggered after selection changes, even though there are no content changes.
323
- if ( contentWithoutRootTag === this.value ) {
320
+ if ( contentWithoutRootTag === this.value.toString() ) {
324
321
  return;
325
322
  }
326
323
  this.lastEventCount = event.nativeEvent.eventCount;
@@ -332,11 +329,11 @@ export class RichText extends Component {
332
329
 
333
330
  onTextUpdate( event ) {
334
331
  const contentWithoutRootTag = this.removeRootTagsProducedByAztec(
335
- unescapeSpaces( event.nativeEvent.text )
332
+ event.nativeEvent.text
336
333
  );
337
334
 
338
335
  this.debounceCreateUndoLevel();
339
- const refresh = this.value !== contentWithoutRootTag;
336
+ const refresh = this.value.toString() !== contentWithoutRootTag;
340
337
  this.value = contentWithoutRootTag;
341
338
 
342
339
  // We don't want to refresh if our goal is just to create a record.
@@ -567,7 +564,7 @@ export class RichText extends Component {
567
564
  // Check if value is up to date with latest state of native AztecView.
568
565
  if (
569
566
  event.nativeEvent.text &&
570
- event.nativeEvent.text !== this.props.value
567
+ event.nativeEvent.text !== this.props.value.toString()
571
568
  ) {
572
569
  this.onTextUpdate( event );
573
570
  }
@@ -592,7 +589,7 @@ export class RichText extends Component {
592
589
  // this approach is not perfectly reliable.
593
590
  const isManual =
594
591
  this.lastAztecEventType !== 'input' &&
595
- this.props.value === this.value;
592
+ this.props.value.toString() === this.value.toString();
596
593
  if ( hasChanged && isManual ) {
597
594
  const value = this.createRecord();
598
595
  const activeFormats = getActiveFormats( value );
@@ -659,10 +656,10 @@ export class RichText extends Component {
659
656
 
660
657
  // Check and dicsard stray event, where the text and selection is equal to the ones already cached.
661
658
  const contentWithoutRootTag = this.removeRootTagsProducedByAztec(
662
- unescapeSpaces( event.nativeEvent.text )
659
+ event.nativeEvent.text
663
660
  );
664
661
  if (
665
- contentWithoutRootTag === this.value &&
662
+ contentWithoutRootTag === this.value.toString() &&
666
663
  realStart === this.selectionStart &&
667
664
  realEnd === this.selectionEnd
668
665
  ) {
@@ -759,7 +756,7 @@ export class RichText extends Component {
759
756
  typeof nextProps.value !== 'undefined' &&
760
757
  typeof this.props.value !== 'undefined' &&
761
758
  ( ! this.comesFromAztec || ! this.firedAfterTextChanged ) &&
762
- nextProps.value !== this.props.value
759
+ nextProps.value.toString() !== this.props.value.toString()
763
760
  ) {
764
761
  // Gutenberg seems to try to mirror the caret state even on events that only change the content so,
765
762
  // let's force caret update if state has selection set.
@@ -823,17 +820,11 @@ export class RichText extends Component {
823
820
  }
824
821
  }
825
822
 
826
- componentWillUnmount() {
827
- if ( this._editor.isFocused() ) {
828
- this._editor.blur();
829
- }
830
- }
831
-
832
823
  componentDidUpdate( prevProps ) {
833
824
  const { style, tagName } = this.props;
834
825
  const { currentFontSize } = this.state;
835
826
 
836
- if ( this.props.value !== this.value ) {
827
+ if ( this.props.value.toString() !== this.value.toString() ) {
837
828
  this.value = this.props.value;
838
829
  }
839
830
  const { __unstableIsSelected: prevIsSelected } = prevProps;
@@ -851,7 +842,7 @@ export class RichText extends Component {
851
842
  // Since this is happening when merging blocks, the selection should be at the last character position.
852
843
  // As a fallback the internal selectionEnd value is used.
853
844
  const lastCharacterPosition =
854
- this.value?.length ?? this.selectionEnd;
845
+ this.value?.toString().length ?? this.selectionEnd;
855
846
  this._editor.focus();
856
847
  this.props.onSelectionChange(
857
848
  lastCharacterPosition,
@@ -893,7 +884,8 @@ export class RichText extends Component {
893
884
  // On android if content is empty we need to send no content or else the placeholder will not show.
894
885
  if (
895
886
  ! this.isIOS &&
896
- ( value === '' || value === EMPTY_PARAGRAPH_TAGS )
887
+ ( value.toString() === '' ||
888
+ value.toString() === EMPTY_PARAGRAPH_TAGS )
897
889
  ) {
898
890
  return '';
899
891
  }
@@ -1,12 +1,12 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`<RichText/> Font Size renders component with style and font size 1`] = `
3
+ exports[`<RichText/> when applying the font size renders component with style and font size 1`] = `
4
4
  "<!-- wp:paragraph {"style":{"color":{"text":"#fcb900"},"typography":{"fontSize":35.56}}} -->
5
5
  <p class="has-text-color" style="color:#fcb900;font-size:35.56px">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed imperdiet ut nibh vitae ornare. Sed auctor nec augue at blandit.</p>
6
6
  <!-- /wp:paragraph -->"
7
7
  `;
8
8
 
9
- exports[`<RichText/> Font Size should update the font size when style prop with font size property is provided 1`] = `
9
+ exports[`<RichText/> when applying the font size should update the font size when style prop with font size property is provided 1`] = `
10
10
  <View
11
11
  style={
12
12
  [
@@ -42,7 +42,7 @@ exports[`<RichText/> Font Size should update the font size when style prop with
42
42
  </View>
43
43
  `;
44
44
 
45
- exports[`<RichText/> Font Size should update the font size with decimals when style prop with font size property is provided 1`] = `
45
+ exports[`<RichText/> when applying the font size should update the font size with decimals when style prop with font size property is provided 1`] = `
46
46
  <View
47
47
  style={
48
48
  [
@@ -2,13 +2,23 @@
2
2
  * External dependencies
3
3
  */
4
4
  import { Dimensions } from 'react-native';
5
- import { getEditorHtml, render, initializeEditor } from 'test/helpers';
5
+ import {
6
+ fireEvent,
7
+ getEditorHtml,
8
+ initializeEditor,
9
+ render,
10
+ screen,
11
+ } from 'test/helpers';
6
12
 
7
13
  /**
8
14
  * WordPress dependencies
9
15
  */
10
16
  import { select } from '@wordpress/data';
11
- import { store as richTextStore } from '@wordpress/rich-text';
17
+ import {
18
+ store as richTextStore,
19
+ RichTextData,
20
+ __unstableCreateElement,
21
+ } from '@wordpress/rich-text';
12
22
  import { coreBlocks } from '@wordpress/block-library';
13
23
  import {
14
24
  getBlockTypes,
@@ -78,7 +88,64 @@ describe( '<RichText/>', () => {
78
88
  } );
79
89
  } );
80
90
 
81
- describe( 'Font Size', () => {
91
+ describe( 'when the value changes', () => {
92
+ it( 'should avoid updating attributes when values are equal', async () => {
93
+ const handleChange = jest.fn();
94
+ const defaultEmptyValue = RichTextData.empty();
95
+ render(
96
+ <RichText
97
+ onChange={ handleChange }
98
+ value={ defaultEmptyValue }
99
+ />
100
+ );
101
+
102
+ // Simulate an empty string from Aztec
103
+ fireEvent( screen.getByLabelText( 'Text input. Empty' ), 'change', {
104
+ nativeEvent: { text: '' },
105
+ } );
106
+
107
+ expect( handleChange ).not.toHaveBeenCalled();
108
+ } );
109
+
110
+ it( 'should preserve non-breaking space HTML entity', () => {
111
+ const onChange = jest.fn();
112
+ const onSelectionChange = jest.fn();
113
+ // The initial value is created using an HTML element to preserve
114
+ // the HTML entity.
115
+ const initialValue = RichTextData.fromHTMLElement(
116
+ __unstableCreateElement( document, '&nbsp;' )
117
+ );
118
+ render(
119
+ <RichText
120
+ onChange={ onChange }
121
+ onSelectionChange={ onSelectionChange }
122
+ value={ initialValue }
123
+ __unstableIsSelected
124
+ />
125
+ );
126
+
127
+ // Trigger selection event with same text value as initial.
128
+ fireEvent(
129
+ screen.getByLabelText( /Text input/ ),
130
+ 'onSelectionChange',
131
+ 0,
132
+ 0,
133
+ initialValue.toString(),
134
+ {
135
+ nativeEvent: {
136
+ eventCount: 0,
137
+ target: undefined,
138
+ text: initialValue.toString(),
139
+ },
140
+ }
141
+ );
142
+
143
+ expect( onChange ).not.toHaveBeenCalled();
144
+ expect( onSelectionChange ).toHaveBeenCalled();
145
+ } );
146
+ } );
147
+
148
+ describe( 'when applying the font size', () => {
82
149
  it( 'should display rich text at the DEFAULT font size.', () => {
83
150
  // Arrange.
84
151
  const expectedFontSize = 16;
@@ -234,7 +301,7 @@ describe( '<RichText/>', () => {
234
301
  const fontSize = '10';
235
302
  const style = { fontSize: '12' };
236
303
  // Act.
237
- const screen = render( <RichText fontSize={ fontSize } /> );
304
+ render( <RichText fontSize={ fontSize } /> );
238
305
  screen.update( <RichText fontSize={ fontSize } style={ style } /> );
239
306
  // Assert.
240
307
  expect( screen.toJSON() ).toMatchSnapshot();
@@ -256,7 +323,7 @@ describe( '<RichText/>', () => {
256
323
  const fontSize = '10';
257
324
  const style = { fontSize: '12.56px' };
258
325
  // Act.
259
- const screen = render( <RichText fontSize={ fontSize } /> );
326
+ render( <RichText fontSize={ fontSize } /> );
260
327
  screen.update( <RichText fontSize={ fontSize } style={ style } /> );
261
328
  // Assert.
262
329
  expect( screen.toJSON() ).toMatchSnapshot();
@@ -142,8 +142,8 @@ export function useInputRules( props ) {
142
142
  return;
143
143
  }
144
144
 
145
- if ( __unstableAllowPrefixTransformations && inputRule ) {
146
- if ( inputRule() ) return;
145
+ if ( __unstableAllowPrefixTransformations && inputRule() ) {
146
+ return;
147
147
  }
148
148
 
149
149
  const value = getValue();
@@ -11,8 +11,7 @@ import { store as blockEditorStore } from '../../store';
11
11
 
12
12
  export function useMarkPersistent( { html, value } ) {
13
13
  const previousText = useRef();
14
- const hasActiveFormats =
15
- value.activeFormats && !! value.activeFormats.length;
14
+ const hasActiveFormats = !! value.activeFormats?.length;
16
15
  const { __unstableMarkLastChangeAsPersistent } =
17
16
  useDispatch( blockEditorStore );
18
17
 
@@ -317,7 +317,7 @@ export default function SpacingInputControl( {
317
317
  setShowCustomValueControl( ! showCustomValueControl );
318
318
  } }
319
319
  isPressed={ showCustomValueControl }
320
- isSmall
320
+ size="small"
321
321
  className="spacing-sizes-control__custom-toggle"
322
322
  iconSize={ 24 }
323
323
  />
@@ -0,0 +1,40 @@
1
+ # TextDecorationControl
2
+
3
+ <div class="callout callout-alert">
4
+ This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
5
+ </div>
6
+ <br />
7
+
8
+ ![TextDecorationControl Element in Inspector Control](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/text-decoration-component.png?raw=true)
9
+
10
+
11
+ ## Usage
12
+
13
+ ```jsx
14
+ import { __experimentalTextDecorationControl as TextDecorationControl } from '@wordpress/block-editor';
15
+ ```
16
+
17
+ Then, you can use the component in your block editor UI:
18
+
19
+ ```jsx
20
+ <TextDecorationControl
21
+ value={textDecorationValue}
22
+ onChange={(newValue) => setAttributes({ textDecoration: newValue })}
23
+ />
24
+ ```
25
+
26
+ ### Props
27
+
28
+ ### `value`
29
+
30
+ - **Type:** `String`
31
+ - **Default:** `none`
32
+ - **Options:** `none`, `underline`, `line-through`
33
+
34
+ The current value of the Text Decoration setting. You may only choose from the `Options` listed above.
35
+
36
+ ### `onChange`
37
+
38
+ - **Type:** `Function`
39
+
40
+ A callback function invoked when the Text Decoration value is changed via an interaction with any of the buttons. Called with the Text Decoration value (`none`, `underline`, `line-through`) as the only argument.
@@ -4,10 +4,6 @@ The `TextTransformControl` component is responsible for rendering a control elem
4
4
 
5
5
  ![TextTransformConrol Element in Inspector Control](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/text-transform-component.png?raw=true)
6
6
 
7
- ## Table of contents
8
-
9
- 1. [Development guidelines](#development-guidelines)
10
-
11
7
  ## Development guidelines
12
8
 
13
9
  ### Usage
@@ -6,11 +6,6 @@ This only happens in the mobile WordPress apps.
6
6
 
7
7
  ![Ungroup button icon](https://user-images.githubusercontent.com/21242757/65593577-11006000-df91-11e9-8460-1179e9ef46d2.png)
8
8
 
9
- ## Table of contents
10
-
11
- 1. [Development guidelines](#development-guidelines)
12
- 2. [Related components](#related-components)
13
-
14
9
  ## Development guidelines
15
10
 
16
11
  ### Usage
@@ -15,10 +15,6 @@ UnitControl component allows the user to set a value as well as a unit (e.g. `px
15
15
  }
16
16
  ```
17
17
 
18
- ## Table of contents
19
-
20
- 1. [Development guidelines](#development-guidelines)
21
-
22
18
  ## Developer guidelines
23
19
 
24
20
  ### Usage
@@ -66,7 +66,6 @@ class URLInput extends Component {
66
66
  this.state = {
67
67
  suggestions: [],
68
68
  showSuggestions: false,
69
- isUpdatingSuggestions: false,
70
69
  suggestionsValue: null,
71
70
  selectedSuggestion: null,
72
71
  suggestionsListboxId: '',
@@ -102,11 +101,7 @@ class URLInput extends Component {
102
101
  }
103
102
 
104
103
  // Update suggestions when the value changes.
105
- if (
106
- prevProps.value !== value &&
107
- ! this.props.disableSuggestions &&
108
- ! this.state.isUpdatingSuggestions
109
- ) {
104
+ if ( prevProps.value !== value && ! this.props.disableSuggestions ) {
110
105
  if ( value?.length ) {
111
106
  // If the new value is not empty we need to update with suggestions for it.
112
107
  this.updateSuggestions( value );
@@ -183,7 +178,6 @@ class URLInput extends Component {
183
178
  }
184
179
 
185
180
  this.setState( {
186
- isUpdatingSuggestions: true,
187
181
  selectedSuggestion: null,
188
182
  loading: true,
189
183
  } );
@@ -203,7 +197,6 @@ class URLInput extends Component {
203
197
 
204
198
  this.setState( {
205
199
  suggestions,
206
- isUpdatingSuggestions: false,
207
200
  suggestionsValue: value,
208
201
  loading: false,
209
202
  showSuggestions: !! suggestions.length,
@@ -235,9 +228,15 @@ class URLInput extends Component {
235
228
  }
236
229
 
237
230
  this.setState( {
238
- isUpdatingSuggestions: false,
239
231
  loading: false,
240
232
  } );
233
+ } )
234
+ .finally( () => {
235
+ // If this is the current promise then reset the reference
236
+ // to allow for checking if a new request is made.
237
+ if ( this.suggestionsRequest === request ) {
238
+ this.suggestionsRequest = null;
239
+ }
241
240
  } );
242
241
 
243
242
  // Note that this assignment is handled *before* the async search request
@@ -255,11 +254,12 @@ class URLInput extends Component {
255
254
 
256
255
  // When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value
257
256
  // Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)
257
+ // or there is already a request in progress.
258
258
  if (
259
259
  value &&
260
260
  ! disableSuggestions &&
261
- ! this.state.isUpdatingSuggestions &&
262
- ! ( suggestions && suggestions.length )
261
+ ! ( suggestions && suggestions.length ) &&
262
+ this.suggestionsRequest === null
263
263
  ) {
264
264
  // Ensure the suggestions are updated with the current input value.
265
265
  this.updateSuggestions( value );