@wordpress/block-editor 8.0.13 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +12 -1
  4. package/build/components/block-caption/index.native.js +14 -3
  5. package/build/components/block-caption/index.native.js.map +1 -1
  6. package/build/components/block-edit/index.js +9 -0
  7. package/build/components/block-edit/index.js.map +1 -1
  8. package/build/components/block-inspector/index.js +8 -20
  9. package/build/components/block-inspector/index.js.map +1 -1
  10. package/build/components/block-list-appender/index.js +3 -11
  11. package/build/components/block-list-appender/index.js.map +1 -1
  12. package/build/components/block-media-update-progress/index.native.js +2 -1
  13. package/build/components/block-media-update-progress/index.native.js.map +1 -1
  14. package/build/components/block-preview/auto.js +30 -6
  15. package/build/components/block-preview/auto.js.map +1 -1
  16. package/build/components/block-settings/container.native.js +2 -1
  17. package/build/components/block-settings/container.native.js.map +1 -1
  18. package/build/components/block-styles/index.js +110 -134
  19. package/build/components/block-styles/index.js.map +1 -1
  20. package/build/components/block-styles/menu-items.js +63 -0
  21. package/build/components/block-styles/menu-items.js.map +1 -0
  22. package/build/components/block-styles/preview-panel.js +45 -0
  23. package/build/components/block-styles/preview-panel.js.map +1 -0
  24. package/build/components/block-styles/preview.native.js +2 -2
  25. package/build/components/block-styles/preview.native.js.map +1 -1
  26. package/build/components/block-styles/use-styles-for-block.js +119 -0
  27. package/build/components/block-styles/use-styles-for-block.js.map +1 -0
  28. package/build/components/block-styles/utils.js +39 -0
  29. package/build/components/block-styles/utils.js.map +1 -1
  30. package/build/components/block-switcher/block-styles-menu.js +3 -23
  31. package/build/components/block-switcher/block-styles-menu.js.map +1 -1
  32. package/build/components/block-tools/back-compat.js +2 -1
  33. package/build/components/block-tools/back-compat.js.map +1 -1
  34. package/build/components/block-tools/block-selection-button.js +5 -1
  35. package/build/components/block-tools/block-selection-button.js.map +1 -1
  36. package/build/components/block-tools/insertion-point.js +11 -1
  37. package/build/components/block-tools/insertion-point.js.map +1 -1
  38. package/build/components/block-types-list/index.native.js +2 -2
  39. package/build/components/block-types-list/index.native.js.map +1 -1
  40. package/build/components/button-block-appender/index.js +2 -1
  41. package/build/components/button-block-appender/index.js.map +1 -1
  42. package/build/components/colors-gradients/dropdown.js +88 -0
  43. package/build/components/colors-gradients/dropdown.js.map +1 -0
  44. package/build/components/colors-gradients/panel-color-gradient-settings.js +6 -5
  45. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  46. package/build/components/colors-gradients/panel-color-gradient-settings.native.js +6 -3
  47. package/build/components/colors-gradients/panel-color-gradient-settings.native.js.map +1 -1
  48. package/build/components/contrast-checker/index.js +34 -9
  49. package/build/components/contrast-checker/index.js.map +1 -1
  50. package/build/components/contrast-checker/index.native.js +108 -0
  51. package/build/components/contrast-checker/index.native.js.map +1 -0
  52. package/build/components/default-block-appender/index.js +16 -19
  53. package/build/components/default-block-appender/index.js.map +1 -1
  54. package/build/components/default-style-picker/index.js +18 -3
  55. package/build/components/default-style-picker/index.js.map +1 -1
  56. package/build/components/font-appearance-control/index.js +11 -11
  57. package/build/components/font-appearance-control/index.js.map +1 -1
  58. package/build/components/iframe/index.js +6 -9
  59. package/build/components/iframe/index.js.map +1 -1
  60. package/build/components/index.js +18 -9
  61. package/build/components/index.js.map +1 -1
  62. package/build/components/index.native.js +9 -0
  63. package/build/components/index.native.js.map +1 -1
  64. package/build/components/inner-blocks/default-block-appender.js +2 -4
  65. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  66. package/build/components/inner-blocks/use-nested-settings-update.js +16 -14
  67. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  68. package/build/components/inserter/index.js +61 -3
  69. package/build/components/inserter/index.js.map +1 -1
  70. package/build/components/inserter/index.native.js +1 -1
  71. package/build/components/inserter/index.native.js.map +1 -1
  72. package/build/components/inserter/library.js +5 -3
  73. package/build/components/inserter/library.js.map +1 -1
  74. package/build/components/inserter/menu.js +11 -3
  75. package/build/components/inserter/menu.js.map +1 -1
  76. package/build/components/inserter/tabs.native.js +7 -4
  77. package/build/components/inserter/tabs.native.js.map +1 -1
  78. package/build/components/inspector-controls/block-support-slot-container.js +2 -1
  79. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -1
  80. package/build/components/inspector-controls/block-support-tools-panel.js +11 -43
  81. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  82. package/build/components/inspector-controls/fill.native.js +3 -5
  83. package/build/components/inspector-controls/fill.native.js.map +1 -1
  84. package/build/components/inspector-controls/groups.js +2 -0
  85. package/build/components/inspector-controls/groups.js.map +1 -1
  86. package/build/components/inspector-controls/slot.js +1 -3
  87. package/build/components/inspector-controls/slot.js.map +1 -1
  88. package/build/components/letter-spacing-control/index.js +6 -6
  89. package/build/components/letter-spacing-control/index.js.map +1 -1
  90. package/build/components/link-control/link-preview.js +1 -1
  91. package/build/components/link-control/link-preview.js.map +1 -1
  92. package/build/components/link-control/search-item.js +11 -1
  93. package/build/components/link-control/search-item.js.map +1 -1
  94. package/build/components/link-control/search-results.js +2 -1
  95. package/build/components/link-control/search-results.js.map +1 -1
  96. package/build/components/link-control/use-search-handler.js +18 -5
  97. package/build/components/link-control/use-search-handler.js.map +1 -1
  98. package/build/components/list-view/block-select-button.js +23 -3
  99. package/build/components/list-view/block-select-button.js.map +1 -1
  100. package/build/components/list-view/block.js +8 -0
  101. package/build/components/list-view/block.js.map +1 -1
  102. package/build/components/media-placeholder/index.js +2 -0
  103. package/build/components/media-placeholder/index.js.map +1 -1
  104. package/build/components/media-replace-flow/index.js +32 -6
  105. package/build/components/media-replace-flow/index.js.map +1 -1
  106. package/build/components/media-upload-progress/index.native.js +2 -1
  107. package/build/components/media-upload-progress/index.native.js.map +1 -1
  108. package/build/components/panel-color-settings/index.js +7 -3
  109. package/build/components/panel-color-settings/index.js.map +1 -1
  110. package/build/components/provider/block-refs-provider.js +4 -1
  111. package/build/components/provider/block-refs-provider.js.map +1 -1
  112. package/build/components/rich-text/file-paste-handler.js +1 -1
  113. package/build/components/rich-text/file-paste-handler.js.map +1 -1
  114. package/build/components/rich-text/prevent-event-discovery.js +33 -0
  115. package/build/components/rich-text/prevent-event-discovery.js.map +1 -0
  116. package/build/components/rich-text/use-input-rules.js +3 -1
  117. package/build/components/rich-text/use-input-rules.js.map +1 -1
  118. package/build/components/selection-scroll-into-view/index.js +2 -1
  119. package/build/components/selection-scroll-into-view/index.js.map +1 -1
  120. package/build/components/use-display-block-controls/index.native.js +45 -0
  121. package/build/components/use-display-block-controls/index.native.js.map +1 -0
  122. package/build/components/use-on-block-drop/index.js +7 -3
  123. package/build/components/use-on-block-drop/index.js.map +1 -1
  124. package/build/components/writing-flow/use-multi-selection.js +3 -1
  125. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  126. package/build/hooks/border-color.js +74 -10
  127. package/build/hooks/border-color.js.map +1 -1
  128. package/build/hooks/border-radius.js +47 -0
  129. package/build/hooks/border-radius.js.map +1 -1
  130. package/build/hooks/border-style.js +41 -0
  131. package/build/hooks/border-style.js.map +1 -1
  132. package/build/hooks/border-width.js +70 -31
  133. package/build/hooks/border-width.js.map +1 -1
  134. package/build/hooks/border.js +81 -11
  135. package/build/hooks/border.js.map +1 -1
  136. package/build/hooks/color-panel.js +4 -1
  137. package/build/hooks/color-panel.js.map +1 -1
  138. package/build/hooks/color-panel.native.js +77 -0
  139. package/build/hooks/color-panel.native.js.map +1 -0
  140. package/build/hooks/color.js +6 -5
  141. package/build/hooks/color.js.map +1 -1
  142. package/build/hooks/index.native.js +2 -0
  143. package/build/hooks/index.native.js.map +1 -1
  144. package/build/hooks/layout.native.js +20 -0
  145. package/build/hooks/layout.native.js.map +1 -0
  146. package/build/hooks/letter-spacing.js +1 -1
  147. package/build/hooks/letter-spacing.js.map +1 -1
  148. package/build/hooks/typography.js +1 -1
  149. package/build/hooks/typography.js.map +1 -1
  150. package/build/store/actions.js +1 -2
  151. package/build/store/actions.js.map +1 -1
  152. package/build/store/defaults.js +5 -1
  153. package/build/store/defaults.js.map +1 -1
  154. package/build/store/defaults.native.js +2 -6
  155. package/build/store/defaults.native.js.map +1 -1
  156. package/build/store/selectors.js +10 -5
  157. package/build/store/selectors.js.map +1 -1
  158. package/build/utils/get-paste-event-data.js +1 -1
  159. package/build/utils/get-paste-event-data.js.map +1 -1
  160. package/build/utils/parse-css-unit-to-px.js +1 -1
  161. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  162. package/build-module/components/block-caption/index.native.js +13 -3
  163. package/build-module/components/block-caption/index.native.js.map +1 -1
  164. package/build-module/components/block-edit/index.js +9 -0
  165. package/build-module/components/block-edit/index.js.map +1 -1
  166. package/build-module/components/block-inspector/index.js +8 -20
  167. package/build-module/components/block-inspector/index.js.map +1 -1
  168. package/build-module/components/block-list-appender/index.js +3 -10
  169. package/build-module/components/block-list-appender/index.js.map +1 -1
  170. package/build-module/components/block-media-update-progress/index.native.js +2 -1
  171. package/build-module/components/block-media-update-progress/index.native.js.map +1 -1
  172. package/build-module/components/block-preview/auto.js +31 -6
  173. package/build-module/components/block-preview/auto.js.map +1 -1
  174. package/build-module/components/block-settings/container.native.js +2 -1
  175. package/build-module/components/block-settings/container.native.js.map +1 -1
  176. package/build-module/components/block-styles/index.js +112 -133
  177. package/build-module/components/block-styles/index.js.map +1 -1
  178. package/build-module/components/block-styles/menu-items.js +50 -0
  179. package/build-module/components/block-styles/menu-items.js.map +1 -0
  180. package/build-module/components/block-styles/preview-panel.js +35 -0
  181. package/build-module/components/block-styles/preview-panel.js.map +1 -0
  182. package/build-module/components/block-styles/preview.native.js +2 -2
  183. package/build-module/components/block-styles/preview.native.js.map +1 -1
  184. package/build-module/components/block-styles/use-styles-for-block.js +107 -0
  185. package/build-module/components/block-styles/use-styles-for-block.js.map +1 -0
  186. package/build-module/components/block-styles/utils.js +34 -0
  187. package/build-module/components/block-styles/utils.js.map +1 -1
  188. package/build-module/components/block-switcher/block-styles-menu.js +3 -21
  189. package/build-module/components/block-switcher/block-styles-menu.js.map +1 -1
  190. package/build-module/components/block-tools/back-compat.js +2 -1
  191. package/build-module/components/block-tools/back-compat.js.map +1 -1
  192. package/build-module/components/block-tools/block-selection-button.js +5 -1
  193. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  194. package/build-module/components/block-tools/insertion-point.js +11 -1
  195. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  196. package/build-module/components/block-types-list/index.native.js +2 -2
  197. package/build-module/components/block-types-list/index.native.js.map +1 -1
  198. package/build-module/components/button-block-appender/index.js +2 -1
  199. package/build-module/components/button-block-appender/index.js.map +1 -1
  200. package/build-module/components/colors-gradients/dropdown.js +75 -0
  201. package/build-module/components/colors-gradients/dropdown.js.map +1 -0
  202. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +8 -7
  203. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  204. package/build-module/components/colors-gradients/panel-color-gradient-settings.native.js +7 -4
  205. package/build-module/components/colors-gradients/panel-color-gradient-settings.native.js.map +1 -1
  206. package/build-module/components/contrast-checker/index.js +34 -9
  207. package/build-module/components/contrast-checker/index.js.map +1 -1
  208. package/build-module/components/contrast-checker/index.native.js +90 -0
  209. package/build-module/components/contrast-checker/index.native.js.map +1 -0
  210. package/build-module/components/default-block-appender/index.js +15 -18
  211. package/build-module/components/default-block-appender/index.js.map +1 -1
  212. package/build-module/components/default-style-picker/index.js +17 -3
  213. package/build-module/components/default-style-picker/index.js.map +1 -1
  214. package/build-module/components/font-appearance-control/index.js +12 -12
  215. package/build-module/components/font-appearance-control/index.js.map +1 -1
  216. package/build-module/components/iframe/index.js +6 -9
  217. package/build-module/components/iframe/index.js.map +1 -1
  218. package/build-module/components/index.js +2 -1
  219. package/build-module/components/index.js.map +1 -1
  220. package/build-module/components/index.native.js +1 -0
  221. package/build-module/components/index.native.js.map +1 -1
  222. package/build-module/components/inner-blocks/default-block-appender.js +2 -4
  223. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  224. package/build-module/components/inner-blocks/use-nested-settings-update.js +16 -14
  225. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  226. package/build-module/components/inserter/index.js +61 -3
  227. package/build-module/components/inserter/index.js.map +1 -1
  228. package/build-module/components/inserter/index.native.js +2 -2
  229. package/build-module/components/inserter/index.native.js.map +1 -1
  230. package/build-module/components/inserter/library.js +5 -3
  231. package/build-module/components/inserter/library.js.map +1 -1
  232. package/build-module/components/inserter/menu.js +11 -4
  233. package/build-module/components/inserter/menu.js.map +1 -1
  234. package/build-module/components/inserter/tabs.native.js +7 -4
  235. package/build-module/components/inserter/tabs.native.js.map +1 -1
  236. package/build-module/components/inspector-controls/block-support-slot-container.js +2 -1
  237. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -1
  238. package/build-module/components/inspector-controls/block-support-tools-panel.js +12 -43
  239. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  240. package/build-module/components/inspector-controls/fill.native.js +3 -5
  241. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  242. package/build-module/components/inspector-controls/groups.js +2 -0
  243. package/build-module/components/inspector-controls/groups.js.map +1 -1
  244. package/build-module/components/inspector-controls/slot.js +1 -3
  245. package/build-module/components/inspector-controls/slot.js.map +1 -1
  246. package/build-module/components/letter-spacing-control/index.js +6 -6
  247. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  248. package/build-module/components/link-control/link-preview.js +1 -1
  249. package/build-module/components/link-control/link-preview.js.map +1 -1
  250. package/build-module/components/link-control/search-item.js +11 -1
  251. package/build-module/components/link-control/search-item.js.map +1 -1
  252. package/build-module/components/link-control/search-results.js +2 -1
  253. package/build-module/components/link-control/search-results.js.map +1 -1
  254. package/build-module/components/link-control/use-search-handler.js +18 -5
  255. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  256. package/build-module/components/list-view/block-select-button.js +22 -3
  257. package/build-module/components/list-view/block-select-button.js.map +1 -1
  258. package/build-module/components/list-view/block.js +6 -0
  259. package/build-module/components/list-view/block.js.map +1 -1
  260. package/build-module/components/media-placeholder/index.js +2 -0
  261. package/build-module/components/media-placeholder/index.js.map +1 -1
  262. package/build-module/components/media-replace-flow/index.js +32 -6
  263. package/build-module/components/media-replace-flow/index.js.map +1 -1
  264. package/build-module/components/media-upload-progress/index.native.js +2 -1
  265. package/build-module/components/media-upload-progress/index.native.js.map +1 -1
  266. package/build-module/components/panel-color-settings/index.js +7 -3
  267. package/build-module/components/panel-color-settings/index.js.map +1 -1
  268. package/build-module/components/provider/block-refs-provider.js +4 -1
  269. package/build-module/components/provider/block-refs-provider.js.map +1 -1
  270. package/build-module/components/rich-text/file-paste-handler.js +1 -1
  271. package/build-module/components/rich-text/file-paste-handler.js.map +1 -1
  272. package/build-module/components/rich-text/prevent-event-discovery.js +25 -0
  273. package/build-module/components/rich-text/prevent-event-discovery.js.map +1 -0
  274. package/build-module/components/rich-text/use-input-rules.js +2 -1
  275. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  276. package/build-module/components/selection-scroll-into-view/index.js +2 -1
  277. package/build-module/components/selection-scroll-into-view/index.js.map +1 -1
  278. package/build-module/components/use-display-block-controls/index.native.js +34 -0
  279. package/build-module/components/use-display-block-controls/index.native.js.map +1 -0
  280. package/build-module/components/use-on-block-drop/index.js +7 -3
  281. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  282. package/build-module/components/writing-flow/use-multi-selection.js +3 -4
  283. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  284. package/build-module/hooks/border-color.js +72 -12
  285. package/build-module/hooks/border-color.js.map +1 -1
  286. package/build-module/hooks/border-radius.js +42 -0
  287. package/build-module/hooks/border-radius.js.map +1 -1
  288. package/build-module/hooks/border-style.js +36 -0
  289. package/build-module/hooks/border-style.js.map +1 -1
  290. package/build-module/hooks/border-width.js +66 -32
  291. package/build-module/hooks/border-width.js.map +1 -1
  292. package/build-module/hooks/border.js +80 -12
  293. package/build-module/hooks/border.js.map +1 -1
  294. package/build-module/hooks/color-panel.js +4 -1
  295. package/build-module/hooks/color-panel.js.map +1 -1
  296. package/build-module/hooks/color-panel.native.js +62 -0
  297. package/build-module/hooks/color-panel.native.js.map +1 -0
  298. package/build-module/hooks/color.js +6 -5
  299. package/build-module/hooks/color.js.map +1 -1
  300. package/build-module/hooks/index.native.js +1 -0
  301. package/build-module/hooks/index.native.js.map +1 -1
  302. package/build-module/hooks/layout.native.js +16 -0
  303. package/build-module/hooks/layout.native.js.map +1 -0
  304. package/build-module/hooks/letter-spacing.js +1 -1
  305. package/build-module/hooks/letter-spacing.js.map +1 -1
  306. package/build-module/hooks/typography.js +1 -1
  307. package/build-module/hooks/typography.js.map +1 -1
  308. package/build-module/store/actions.js +1 -2
  309. package/build-module/store/actions.js.map +1 -1
  310. package/build-module/store/defaults.js +5 -1
  311. package/build-module/store/defaults.js.map +1 -1
  312. package/build-module/store/defaults.native.js +2 -5
  313. package/build-module/store/defaults.native.js.map +1 -1
  314. package/build-module/store/selectors.js +10 -5
  315. package/build-module/store/selectors.js.map +1 -1
  316. package/build-module/utils/get-paste-event-data.js +1 -1
  317. package/build-module/utils/get-paste-event-data.js.map +1 -1
  318. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  319. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  320. package/build-style/style-rtl.css +226 -181
  321. package/build-style/style.css +226 -181
  322. package/package.json +31 -27
  323. package/src/components/block-caption/index.native.js +22 -4
  324. package/src/components/block-card/README.md +1 -1
  325. package/src/components/block-edit/index.js +8 -0
  326. package/src/components/block-edit/test/edit.native.js +10 -9
  327. package/src/components/block-inspector/index.js +9 -16
  328. package/src/components/block-list-appender/index.js +5 -21
  329. package/src/components/block-media-update-progress/index.native.js +1 -1
  330. package/src/components/block-media-update-progress/test/index.native.js +136 -93
  331. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +108 -47
  332. package/src/components/block-mover/test/index.native.js +5 -5
  333. package/src/components/block-preview/README.md +14 -26
  334. package/src/components/block-preview/auto.js +33 -3
  335. package/src/components/block-preview/test/index.js +2 -0
  336. package/src/components/block-settings/container.native.js +1 -0
  337. package/src/components/block-styles/index.js +125 -145
  338. package/src/components/block-styles/menu-items.js +49 -0
  339. package/src/components/block-styles/preview-panel.js +36 -0
  340. package/src/components/block-styles/preview.native.js +5 -2
  341. package/src/components/block-styles/style.scss +59 -51
  342. package/src/components/block-styles/test/{index.js → utils.js} +60 -1
  343. package/src/components/block-styles/use-styles-for-block.js +99 -0
  344. package/src/components/block-styles/utils.js +39 -0
  345. package/src/components/block-switcher/block-styles-menu.js +3 -38
  346. package/src/components/block-tools/back-compat.js +1 -0
  347. package/src/components/block-tools/block-selection-button.js +7 -1
  348. package/src/components/block-tools/insertion-point.js +10 -1
  349. package/src/components/block-types-list/index.native.js +5 -2
  350. package/src/components/border-radius-control/style.scss +1 -1
  351. package/src/components/border-style-control/style.scss +0 -1
  352. package/src/components/button-block-appender/index.js +1 -0
  353. package/src/components/color-palette/test/__snapshots__/control.js.snap +9 -4
  354. package/src/components/colors-gradients/dropdown.js +96 -0
  355. package/src/components/colors-gradients/panel-color-gradient-settings.js +23 -19
  356. package/src/components/colors-gradients/panel-color-gradient-settings.native.js +13 -2
  357. package/src/components/colors-gradients/style.scss +59 -5
  358. package/src/components/contrast-checker/README.md +3 -1
  359. package/src/components/contrast-checker/index.js +48 -20
  360. package/src/components/contrast-checker/index.native.js +113 -0
  361. package/src/components/contrast-checker/style.native.scss +26 -0
  362. package/src/components/contrast-checker/test/index.js +65 -0
  363. package/src/components/default-block-appender/index.js +17 -24
  364. package/src/components/default-block-appender/style.scss +4 -0
  365. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +12 -24
  366. package/src/components/default-block-appender/test/index.js +4 -14
  367. package/src/components/default-style-picker/index.js +18 -6
  368. package/src/components/font-appearance-control/index.js +12 -12
  369. package/src/components/iframe/index.js +10 -10
  370. package/src/components/index.js +2 -1
  371. package/src/components/index.native.js +1 -0
  372. package/src/components/inner-blocks/README.md +2 -0
  373. package/src/components/inner-blocks/default-block-appender.js +2 -7
  374. package/src/components/inner-blocks/use-nested-settings-update.js +16 -14
  375. package/src/components/inserter/index.js +77 -5
  376. package/src/components/inserter/index.native.js +2 -2
  377. package/src/components/inserter/library.js +17 -12
  378. package/src/components/inserter/menu.js +31 -13
  379. package/src/components/inserter/tabs.native.js +5 -4
  380. package/src/components/inserter/test/block-types-tab.native.js +9 -10
  381. package/src/components/inserter/test/index.native.js +3 -7
  382. package/src/components/inserter/test/reusable-blocks-tab.native.js +8 -10
  383. package/src/components/inspector-controls/block-support-slot-container.js +3 -1
  384. package/src/components/inspector-controls/block-support-tools-panel.js +39 -58
  385. package/src/components/inspector-controls/fill.native.js +4 -3
  386. package/src/components/inspector-controls/groups.js +2 -0
  387. package/src/components/inspector-controls/slot.js +2 -7
  388. package/src/components/letter-spacing-control/index.js +6 -6
  389. package/src/components/link-control/README.md +1 -1
  390. package/src/components/link-control/link-preview.js +1 -1
  391. package/src/components/link-control/search-item.js +11 -2
  392. package/src/components/link-control/search-results.js +1 -0
  393. package/src/components/link-control/style.scss +2 -1
  394. package/src/components/link-control/test/index.js +4 -0
  395. package/src/components/link-control/use-search-handler.js +25 -4
  396. package/src/components/list-view/block-select-button.js +20 -1
  397. package/src/components/list-view/block.js +10 -0
  398. package/src/components/media-placeholder/index.js +2 -0
  399. package/src/components/media-replace-flow/index.js +35 -5
  400. package/src/components/media-upload/test/index.native.js +28 -47
  401. package/src/components/media-upload-progress/index.native.js +1 -0
  402. package/src/components/media-upload-progress/test/index.native.js +60 -47
  403. package/src/components/panel-color-settings/index.js +8 -4
  404. package/src/components/provider/block-refs-provider.js +4 -1
  405. package/src/components/rich-text/file-paste-handler.js +3 -1
  406. package/src/components/rich-text/prevent-event-discovery.js +23 -0
  407. package/src/components/rich-text/use-input-rules.js +2 -1
  408. package/src/components/selection-scroll-into-view/index.js +1 -0
  409. package/src/components/url-input/README.md +5 -0
  410. package/src/components/use-display-block-controls/index.native.js +38 -0
  411. package/src/components/use-on-block-drop/index.js +7 -3
  412. package/src/components/writing-flow/test/use-multi-selection.js +36 -0
  413. package/src/components/writing-flow/use-multi-selection.js +12 -9
  414. package/src/hooks/border-color.js +69 -9
  415. package/src/hooks/border-radius.js +32 -0
  416. package/src/hooks/border-style.js +26 -0
  417. package/src/hooks/border-width.js +56 -32
  418. package/src/hooks/border.js +115 -20
  419. package/src/hooks/border.scss +3 -17
  420. package/src/hooks/color-panel.js +3 -0
  421. package/src/hooks/color-panel.native.js +63 -0
  422. package/src/hooks/color.js +8 -7
  423. package/src/hooks/dimensions.scss +5 -0
  424. package/src/hooks/index.native.js +1 -0
  425. package/src/hooks/layout.native.js +23 -0
  426. package/src/hooks/letter-spacing.js +1 -1
  427. package/src/hooks/typography.js +1 -1
  428. package/src/store/actions.js +1 -2
  429. package/src/store/defaults.js +2 -0
  430. package/src/store/defaults.native.js +2 -6
  431. package/src/store/selectors.js +10 -5
  432. package/src/style.scss +4 -3
  433. package/src/utils/get-paste-event-data.js +1 -1
  434. package/src/utils/parse-css-unit-to-px.js +1 -1
  435. package/src/utils/test/parse-css-unit-to-px.js +3 -0
  436. package/tsconfig.tsbuildinfo +1 -1
  437. package/build/components/use-canvas-click-redirect/index.js +0 -66
  438. package/build/components/use-canvas-click-redirect/index.js.map +0 -1
  439. package/build-module/components/use-canvas-click-redirect/index.js +0 -54
  440. package/build-module/components/use-canvas-click-redirect/index.js.map +0 -1
  441. package/src/components/use-canvas-click-redirect/index.js +0 -57
@@ -1,16 +1,13 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow } from 'enzyme';
5
- import { TouchableWithoutFeedback } from 'react-native';
4
+ import { render, fireEvent } from 'test/helpers';
5
+ import { Text, TouchableWithoutFeedback } from 'react-native';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import {
11
- requestMediaPicker,
12
- mediaSources,
13
- } from '@wordpress/react-native-bridge';
10
+ import { requestMediaPicker } from '@wordpress/react-native-bridge';
14
11
 
15
12
  /**
16
13
  * Internal dependencies
@@ -30,48 +27,32 @@ const MEDIA_ID = 123;
30
27
 
31
28
  describe( 'MediaUpload component', () => {
32
29
  it( 'renders without crashing', () => {
33
- const wrapper = shallow(
34
- <MediaUpload allowedTypes={ [] } render={ () => {} } />
30
+ const wrapper = render(
31
+ <MediaUpload allowedTypes={ [] } render={ () => null } />
35
32
  );
36
33
  expect( wrapper ).toBeTruthy();
37
34
  } );
38
35
 
39
- it( 'opens media options picker', () => {
40
- const wrapper = shallow(
41
- <MediaUpload
42
- allowedTypes={ [] }
43
- render={ ( { open, getMediaOptions } ) => {
44
- return (
45
- <TouchableWithoutFeedback onPress={ open }>
46
- { getMediaOptions() }
47
- </TouchableWithoutFeedback>
48
- );
49
- } }
50
- />
51
- );
52
- expect( wrapper.find( 'Picker' ) ).toHaveLength( 1 );
53
- } );
54
-
55
36
  it( 'shows right media capture option for media type', () => {
56
37
  const expectOptionForMediaType = ( mediaType, expectedOption ) => {
57
- const wrapper = shallow(
38
+ const wrapper = render(
58
39
  <MediaUpload
59
40
  allowedTypes={ [ mediaType ] }
60
41
  render={ ( { open, getMediaOptions } ) => {
61
42
  return (
62
- <TouchableWithoutFeedback onPress={ open }>
43
+ <>
44
+ <TouchableWithoutFeedback onPress={ open }>
45
+ <Text>Open Picker</Text>
46
+ </TouchableWithoutFeedback>
63
47
  { getMediaOptions() }
64
- </TouchableWithoutFeedback>
48
+ </>
65
49
  );
66
50
  } }
67
51
  />
68
52
  );
69
- expect(
70
- wrapper
71
- .find( 'Picker' )
72
- .props()
73
- .options.filter( ( item ) => item.label === expectedOption )
74
- ).toHaveLength( 1 );
53
+ fireEvent.press( wrapper.getByText( 'Open Picker' ) );
54
+
55
+ wrapper.getByText( expectedOption );
75
56
  };
76
57
  expectOptionForMediaType( MEDIA_TYPE_IMAGE, OPTION_TAKE_PHOTO );
77
58
  expectOptionForMediaType( MEDIA_TYPE_VIDEO, OPTION_TAKE_VIDEO );
@@ -96,21 +77,25 @@ describe( 'MediaUpload component', () => {
96
77
 
97
78
  const onSelect = jest.fn();
98
79
 
99
- const wrapper = shallow(
80
+ const wrapper = render(
100
81
  <MediaUpload
101
82
  allowedTypes={ [ MEDIA_TYPE_VIDEO ] }
102
83
  onSelect={ onSelect }
103
84
  multiple={ allowMultiple }
104
85
  render={ ( { open, getMediaOptions } ) => {
105
86
  return (
106
- <TouchableWithoutFeedback onPress={ open }>
87
+ <>
88
+ <TouchableWithoutFeedback onPress={ open }>
89
+ <Text>Open Picker</Text>
90
+ </TouchableWithoutFeedback>
107
91
  { getMediaOptions() }
108
- </TouchableWithoutFeedback>
92
+ </>
109
93
  );
110
94
  } }
111
95
  />
112
96
  );
113
- wrapper.find( 'Picker' ).simulate( 'change', option );
97
+ fireEvent.press( wrapper.getByText( 'Open Picker' ) );
98
+ fireEvent.press( wrapper.getByText( option ) );
114
99
  const media = { id: MEDIA_ID, url: MEDIA_URL };
115
100
 
116
101
  expect( requestFunction ).toHaveBeenCalledTimes( 1 );
@@ -123,7 +108,7 @@ describe( 'MediaUpload component', () => {
123
108
 
124
109
  it( 'can select media from device library', () => {
125
110
  expectMediaPickerForOption(
126
- mediaSources.deviceLibrary,
111
+ 'Choose from device',
127
112
  false,
128
113
  requestMediaPicker
129
114
  );
@@ -131,23 +116,19 @@ describe( 'MediaUpload component', () => {
131
116
 
132
117
  it( 'can select media from WP media library', () => {
133
118
  expectMediaPickerForOption(
134
- mediaSources.siteMediaLibrary,
119
+ 'WordPress Media Library',
135
120
  false,
136
121
  requestMediaPicker
137
122
  );
138
123
  } );
139
124
 
140
- it( 'can select media by capturig', () => {
141
- expectMediaPickerForOption(
142
- mediaSources.deviceCamera,
143
- false,
144
- requestMediaPicker
145
- );
125
+ it( 'can select media by capturing', () => {
126
+ expectMediaPickerForOption( 'Take a Video', false, requestMediaPicker );
146
127
  } );
147
128
 
148
129
  it( 'can select multiple media from device library', () => {
149
130
  expectMediaPickerForOption(
150
- mediaSources.deviceLibrary,
131
+ 'Choose from device',
151
132
  true,
152
133
  requestMediaPicker
153
134
  );
@@ -155,7 +136,7 @@ describe( 'MediaUpload component', () => {
155
136
 
156
137
  it( 'can select multiple media from WP media library', () => {
157
138
  expectMediaPickerForOption(
158
- mediaSources.siteMediaLibrary,
139
+ 'WordPress Media Library',
159
140
  true,
160
141
  requestMediaPicker
161
142
  );
@@ -144,6 +144,7 @@ export class MediaUploadProgress extends Component {
144
144
  <Spinner
145
145
  progress={ progress }
146
146
  style={ this.props.spinnerStyle }
147
+ testID="spinner"
147
148
  />
148
149
  ) }
149
150
  </View>
@@ -1,12 +1,15 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow } from 'enzyme';
4
+ import { render } from 'test/helpers';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { sendMediaUpload } from '@wordpress/react-native-bridge';
9
+ import {
10
+ subscribeMediaUpload,
11
+ sendMediaUpload,
12
+ } from '@wordpress/react-native-bridge';
10
13
 
11
14
  /**
12
15
  * Internal dependencies
@@ -19,37 +22,27 @@ import {
19
22
  MEDIA_UPLOAD_STATE_RESET,
20
23
  } from '../';
21
24
 
22
- jest.mock( '@wordpress/react-native-bridge', () => {
23
- const callUploadCallback = ( payload ) => {
24
- this.uploadCallBack( payload );
25
- };
26
- const subscribeMediaUpload = ( callback ) => {
27
- this.uploadCallBack = callback;
28
- };
29
- const mediaSources = {
30
- deviceCamera: 'DEVICE_CAMERA',
31
- deviceLibrary: 'DEVICE_MEDIA_LIBRARY',
32
- siteMediaLibrary: 'SITE_MEDIA_LIBRARY',
33
- };
34
- return {
35
- subscribeMediaUpload,
36
- sendMediaUpload: callUploadCallback,
37
- mediaSources,
38
- };
25
+ let uploadCallBack;
26
+ subscribeMediaUpload.mockImplementation( ( callback ) => {
27
+ uploadCallBack = callback;
28
+ } );
29
+ sendMediaUpload.mockImplementation( ( payload ) => {
30
+ uploadCallBack( payload );
39
31
  } );
40
32
 
41
33
  const MEDIA_ID = 123;
42
34
 
43
35
  describe( 'MediaUploadProgress component', () => {
44
36
  it( 'renders without crashing', () => {
45
- const wrapper = shallow(
37
+ const wrapper = render(
46
38
  <MediaUploadProgress renderContent={ () => {} } />
47
39
  );
48
40
  expect( wrapper ).toBeTruthy();
49
41
  } );
50
42
 
51
43
  it( 'listens media upload progress', () => {
52
- const progress = 10;
44
+ const renderContentMock = jest.fn();
45
+ const progress = 0.1;
53
46
  const payload = {
54
47
  state: MEDIA_UPLOAD_STATE_UPLOADING,
55
48
  mediaId: MEDIA_ID,
@@ -58,46 +51,52 @@ describe( 'MediaUploadProgress component', () => {
58
51
 
59
52
  const onUpdateMediaProgress = jest.fn();
60
53
 
61
- const wrapper = shallow(
54
+ const wrapper = render(
62
55
  <MediaUploadProgress
63
56
  onUpdateMediaProgress={ onUpdateMediaProgress }
64
57
  mediaId={ MEDIA_ID }
65
- renderContent={ () => {} }
58
+ renderContent={ renderContentMock }
66
59
  />
67
60
  );
68
61
 
69
62
  sendMediaUpload( payload );
70
63
 
71
- expect( wrapper.instance().state.progress ).toEqual( progress );
72
- expect( wrapper.instance().state.isUploadInProgress ).toEqual( true );
73
- expect( wrapper.instance().state.isUploadFailed ).toEqual( false );
64
+ expect( wrapper.getByTestId( 'spinner' ) ).toBeTruthy();
65
+ expect( renderContentMock ).toHaveBeenCalledWith(
66
+ expect.objectContaining( {
67
+ isUploadInProgress: true,
68
+ isUploadFailed: false,
69
+ } )
70
+ );
74
71
  expect( onUpdateMediaProgress ).toHaveBeenCalledTimes( 1 );
75
72
  expect( onUpdateMediaProgress ).toHaveBeenCalledWith( payload );
76
73
  } );
77
74
 
78
75
  it( 'does not get affected by unrelated media uploads', () => {
76
+ const renderContentMock = jest.fn();
79
77
  const payload = {
80
78
  state: MEDIA_UPLOAD_STATE_UPLOADING,
81
79
  mediaId: 1,
82
- progress: 20,
80
+ progress: 0.2,
83
81
  };
84
82
  const onUpdateMediaProgress = jest.fn();
85
- const wrapper = shallow(
83
+ const wrapper = render(
86
84
  <MediaUploadProgress
87
85
  onUpdateMediaProgress={ onUpdateMediaProgress }
88
86
  mediaId={ MEDIA_ID }
89
- renderContent={ () => {} }
87
+ renderContent={ renderContentMock }
90
88
  />
91
89
  );
92
90
 
93
91
  sendMediaUpload( payload );
94
92
 
95
- expect( wrapper.instance().state.progress ).toEqual( 0 );
93
+ expect( wrapper.queryByTestId( 'spinner' ) ).toBeNull();
96
94
  expect( onUpdateMediaProgress ).toHaveBeenCalledTimes( 0 );
97
95
  } );
98
96
 
99
97
  it( 'listens media upload success', () => {
100
- const progress = 10;
98
+ const renderContentMock = jest.fn();
99
+ const progress = 0.1;
101
100
  const payloadSuccess = {
102
101
  state: MEDIA_UPLOAD_STATE_SUCCEEDED,
103
102
  mediaId: MEDIA_ID,
@@ -110,23 +109,27 @@ describe( 'MediaUploadProgress component', () => {
110
109
 
111
110
  const onFinishMediaUploadWithSuccess = jest.fn();
112
111
 
113
- const wrapper = shallow(
112
+ const wrapper = render(
114
113
  <MediaUploadProgress
115
114
  onFinishMediaUploadWithSuccess={
116
115
  onFinishMediaUploadWithSuccess
117
116
  }
118
117
  mediaId={ MEDIA_ID }
119
- renderContent={ () => {} }
118
+ renderContent={ renderContentMock }
120
119
  />
121
120
  );
122
121
 
123
122
  sendMediaUpload( payloadUploading );
124
123
 
125
- expect( wrapper.instance().state.progress ).toEqual( progress );
124
+ expect( wrapper.getByTestId( 'spinner' ) ).toBeTruthy();
126
125
 
127
126
  sendMediaUpload( payloadSuccess );
128
127
 
129
- expect( wrapper.instance().state.isUploadInProgress ).toEqual( false );
128
+ expect( renderContentMock ).toHaveBeenCalledWith(
129
+ expect.objectContaining( {
130
+ isUploadInProgress: false,
131
+ } )
132
+ );
130
133
  expect( onFinishMediaUploadWithSuccess ).toHaveBeenCalledTimes( 1 );
131
134
  expect( onFinishMediaUploadWithSuccess ).toHaveBeenCalledWith(
132
135
  payloadSuccess
@@ -134,7 +137,8 @@ describe( 'MediaUploadProgress component', () => {
134
137
  } );
135
138
 
136
139
  it( 'listens media upload fail', () => {
137
- const progress = 10;
140
+ const renderContentMock = jest.fn();
141
+ const progress = 0.1;
138
142
  const payloadFail = {
139
143
  state: MEDIA_UPLOAD_STATE_FAILED,
140
144
  mediaId: MEDIA_ID,
@@ -147,24 +151,28 @@ describe( 'MediaUploadProgress component', () => {
147
151
 
148
152
  const onFinishMediaUploadWithFailure = jest.fn();
149
153
 
150
- const wrapper = shallow(
154
+ const wrapper = render(
151
155
  <MediaUploadProgress
152
156
  onFinishMediaUploadWithFailure={
153
157
  onFinishMediaUploadWithFailure
154
158
  }
155
159
  mediaId={ MEDIA_ID }
156
- renderContent={ () => {} }
160
+ renderContent={ renderContentMock }
157
161
  />
158
162
  );
159
163
 
160
164
  sendMediaUpload( payloadUploading );
161
165
 
162
- expect( wrapper.instance().state.progress ).toEqual( progress );
166
+ expect( wrapper.getByTestId( 'spinner' ) ).toBeTruthy();
163
167
 
164
168
  sendMediaUpload( payloadFail );
165
169
 
166
- expect( wrapper.instance().state.isUploadInProgress ).toEqual( false );
167
- expect( wrapper.instance().state.isUploadFailed ).toEqual( true );
170
+ expect( renderContentMock ).toHaveBeenCalledWith(
171
+ expect.objectContaining( {
172
+ isUploadInProgress: false,
173
+ isUploadFailed: true,
174
+ } )
175
+ );
168
176
  expect( onFinishMediaUploadWithFailure ).toHaveBeenCalledTimes( 1 );
169
177
  expect( onFinishMediaUploadWithFailure ).toHaveBeenCalledWith(
170
178
  payloadFail
@@ -172,7 +180,8 @@ describe( 'MediaUploadProgress component', () => {
172
180
  } );
173
181
 
174
182
  it( 'listens media upload reset', () => {
175
- const progress = 10;
183
+ const renderContentMock = jest.fn();
184
+ const progress = 0.1;
176
185
  const payloadReset = {
177
186
  state: MEDIA_UPLOAD_STATE_RESET,
178
187
  mediaId: MEDIA_ID,
@@ -185,22 +194,26 @@ describe( 'MediaUploadProgress component', () => {
185
194
 
186
195
  const onMediaUploadStateReset = jest.fn();
187
196
 
188
- const wrapper = shallow(
197
+ const wrapper = render(
189
198
  <MediaUploadProgress
190
199
  onMediaUploadStateReset={ onMediaUploadStateReset }
191
200
  mediaId={ MEDIA_ID }
192
- renderContent={ () => {} }
201
+ renderContent={ renderContentMock }
193
202
  />
194
203
  );
195
204
 
196
205
  sendMediaUpload( payloadUploading );
197
206
 
198
- expect( wrapper.instance().state.progress ).toEqual( progress );
207
+ expect( wrapper.getByTestId( 'spinner' ) ).toBeTruthy();
199
208
 
200
209
  sendMediaUpload( payloadReset );
201
210
 
202
- expect( wrapper.instance().state.isUploadInProgress ).toEqual( false );
203
- expect( wrapper.instance().state.isUploadFailed ).toEqual( false );
211
+ expect( renderContentMock ).toHaveBeenCalledWith(
212
+ expect.objectContaining( {
213
+ isUploadInProgress: false,
214
+ isUploadFailed: false,
215
+ } )
216
+ );
204
217
  expect( onMediaUploadStateReset ).toHaveBeenCalledTimes( 1 );
205
218
  expect( onMediaUploadStateReset ).toHaveBeenCalledWith( payloadReset );
206
219
  } );
@@ -4,13 +4,17 @@
4
4
  import PanelColorGradientSettings from '../colors-gradients/panel-color-gradient-settings';
5
5
 
6
6
  const PanelColorSettings = ( { colorSettings, ...props } ) => {
7
- const settings = colorSettings.map(
8
- ( { value, onChange, ...otherSettings } ) => ( {
7
+ const settings = colorSettings.map( ( setting ) => {
8
+ if ( ! setting ) {
9
+ return setting;
10
+ }
11
+ const { value, onChange, ...otherSettings } = setting;
12
+ return {
9
13
  ...otherSettings,
10
14
  colorValue: value,
11
15
  onColorChange: onChange,
12
- } )
13
- );
16
+ };
17
+ } );
14
18
  return (
15
19
  <PanelColorGradientSettings
16
20
  settings={ settings }
@@ -3,7 +3,10 @@
3
3
  */
4
4
  import { createContext, useMemo } from '@wordpress/element';
5
5
 
6
- export const BlockRefs = createContext();
6
+ export const BlockRefs = createContext( {
7
+ refs: new Map(),
8
+ callbacks: new Map(),
9
+ } );
7
10
 
8
11
  export function BlockRefsProvider( { children } ) {
9
12
  const value = useMemo(
@@ -5,7 +5,9 @@ import { createBlobURL } from '@wordpress/blob';
5
5
 
6
6
  export function filePasteHandler( files ) {
7
7
  return files
8
- .filter( ( { type } ) => /^image\/(?:jpe?g|png|gif)$/.test( type ) )
8
+ .filter( ( { type } ) =>
9
+ /^image\/(?:jpe?g|png|gif|webp)$/.test( type )
10
+ )
9
11
  .map( ( file ) => `<img src="${ createBlobURL( file ) }">` )
10
12
  .join( '' );
11
13
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { insert } from '@wordpress/rich-text';
5
+
6
+ export function preventEventDiscovery( value ) {
7
+ const searchText = 'tales of gutenberg';
8
+ const addText =
9
+ ' 🐡🐢🦀🐤🦋🐘🐧🐹🦁🦄🦍🐼🐿🎃🐴🐝🐆🦕🦔🌱🍇π🍌🐉💧🥨🌌🍂🍠🥦🥚🥝🎟🥥🥒🛵🥖🍒🍯🎾🎲🐺🐚🐮⌛️';
10
+ const { start, text } = value;
11
+
12
+ if ( start < searchText.length ) {
13
+ return value;
14
+ }
15
+
16
+ const charactersBefore = text.slice( start - searchText.length, start );
17
+
18
+ if ( charactersBefore.toLowerCase() !== searchText ) {
19
+ return value;
20
+ }
21
+
22
+ return insert( value, addText );
23
+ }
@@ -11,6 +11,7 @@ import { useDispatch } from '@wordpress/data';
11
11
  * Internal dependencies
12
12
  */
13
13
  import { store as blockEditorStore } from '../../store';
14
+ import { preventEventDiscovery } from './prevent-event-discovery';
14
15
 
15
16
  export function useInputRules( props ) {
16
17
  const {
@@ -85,7 +86,7 @@ export function useInputRules( props ) {
85
86
 
86
87
  return accumlator;
87
88
  },
88
- value
89
+ preventEventDiscovery( value )
89
90
  );
90
91
 
91
92
  if ( transformed !== value ) {
@@ -12,6 +12,7 @@ import deprecated from '@wordpress/deprecated';
12
12
  export function MultiSelectScrollIntoView() {
13
13
  deprecated( 'wp.blockEditor.MultiSelectScrollIntoView', {
14
14
  hint: 'This behaviour is now built-in.',
15
+ since: '5.8',
15
16
  } );
16
17
  return null;
17
18
  }
@@ -147,6 +147,11 @@ _Optional._ If this property is added, a label will be generated using label pro
147
147
 
148
148
  _Optional._ Adds and optional class to the parent `div` that wraps the URLInput field and popover
149
149
 
150
+ ### `placeholder: String`
151
+
152
+ _Optional._ Placeholder text to show when the field is empty, similar to the
153
+ [`input` and `textarea` attribute of the same name](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/HTML5_updates#The_placeholder_attribute).
154
+
150
155
  ### `disableSuggestions: Boolean`
151
156
 
152
157
  _Optional._ Provides additional control over whether suggestions are disabled.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { hasBlockSupport } from '@wordpress/blocks';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { useBlockEditContext } from '../block-edit/context';
11
+ import { store as blockEditorStore } from '../../store';
12
+
13
+ export default function useDisplayBlockControls() {
14
+ const { isSelected, clientId, name } = useBlockEditContext();
15
+ return useSelect(
16
+ ( select ) => {
17
+ const { getBlockName, getBlockRootClientId } = select(
18
+ blockEditorStore
19
+ );
20
+
21
+ const parentId = getBlockRootClientId( clientId );
22
+ const parentBlockName = getBlockName( parentId );
23
+
24
+ const hideControls = hasBlockSupport(
25
+ parentBlockName,
26
+ '__experimentalHideChildBlockControls',
27
+ false
28
+ );
29
+
30
+ if ( ! hideControls && isSelected ) {
31
+ return true;
32
+ }
33
+
34
+ return false;
35
+ },
36
+ [ clientId, isSelected, name ]
37
+ );
38
+ }
@@ -256,10 +256,14 @@ export default function useOnBlockDrop( targetRootClientId, targetBlockIndex ) {
256
256
  const files = getFilesFromDataTransfer( event.dataTransfer );
257
257
  const html = event.dataTransfer.getData( 'text/html' );
258
258
 
259
- if ( files.length ) {
260
- _onFilesDrop( files );
261
- } else if ( html ) {
259
+ /**
260
+ * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.
261
+ * The order of the checks is important to recognise the HTML drop.
262
+ */
263
+ if ( html ) {
262
264
  _onHTMLDrop( html );
265
+ } else if ( files.length ) {
266
+ _onFilesDrop( files );
263
267
  } else {
264
268
  _onDrop( event );
265
269
  }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { toggleRichText } from '../use-multi-selection';
5
+
6
+ describe( 'toggleRichText', () => {
7
+ function getContainer( isContentEditible ) {
8
+ const container = document.createDocumentFragment();
9
+ [
10
+ 'rich-text',
11
+ 'rich-text editor-post-title__input',
12
+ 'some-other-class',
13
+ ].forEach( ( className ) => {
14
+ const element = document.createElement( 'div' );
15
+ element.setAttribute( 'class', className );
16
+ if ( isContentEditible ) {
17
+ element.setAttribute( 'contenteditable', true );
18
+ }
19
+ container.appendChild( element );
20
+ } );
21
+ return container;
22
+ }
23
+
24
+ it( 'should set the `contenteditable` attribute on eligible rich text nodes', () => {
25
+ const container = getContainer();
26
+ toggleRichText( container, true );
27
+ let nodes = container.querySelectorAll( '[contenteditable=true]' );
28
+
29
+ expect( nodes ).toHaveLength( 1 );
30
+ expect( nodes[ 0 ].className ).toBe( 'rich-text' );
31
+
32
+ toggleRichText( container, false );
33
+ nodes = container.querySelectorAll( '[contenteditable=true]' );
34
+ expect( nodes ).toHaveLength( 0 );
35
+ } );
36
+ } );
@@ -15,16 +15,19 @@ import { useSelect } from '@wordpress/data';
15
15
  import { store as blockEditorStore } from '../../store';
16
16
  import { __unstableUseBlockRef as useBlockRef } from '../block-list/use-block-props/use-block-refs';
17
17
 
18
- function toggleRichText( container, toggle ) {
19
- Array.from( container.querySelectorAll( '.rich-text' ) ).forEach(
20
- ( node ) => {
21
- if ( toggle ) {
22
- node.setAttribute( 'contenteditable', true );
23
- } else {
24
- node.removeAttribute( 'contenteditable' );
25
- }
18
+ export function toggleRichText( container, toggle ) {
19
+ Array.from(
20
+ container.querySelectorAll(
21
+ // Exclude the Post Title from multi-select disable.
22
+ '.rich-text:not( .editor-post-title__input )'
23
+ )
24
+ ).forEach( ( node ) => {
25
+ if ( toggle ) {
26
+ node.setAttribute( 'contenteditable', true );
27
+ } else {
28
+ node.removeAttribute( 'contenteditable' );
26
29
  }
27
- );
30
+ } );
28
31
  }
29
32
 
30
33
  /**