@wordpress/block-editor 8.0.17 → 8.1.2-next.f435e9e01b.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 (496) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +19 -6
  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 +14 -19
  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 +10 -2
  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 +1 -1
  43. package/build/components/colors-gradients/dropdown.js.map +1 -1
  44. package/build/components/colors-gradients/panel-color-gradient-settings.native.js +6 -3
  45. package/build/components/colors-gradients/panel-color-gradient-settings.native.js.map +1 -1
  46. package/build/components/colors-gradients/tools-panel-color-dropdown.js +89 -0
  47. package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +1 -0
  48. package/build/components/contrast-checker/index.js +80 -44
  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/iframe/index.js +4 -5
  57. package/build/components/iframe/index.js.map +1 -1
  58. package/build/components/index.js +18 -18
  59. package/build/components/index.js.map +1 -1
  60. package/build/components/index.native.js +18 -0
  61. package/build/components/index.native.js.map +1 -1
  62. package/build/components/inner-blocks/default-block-appender.js +2 -4
  63. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  64. package/build/components/inner-blocks/use-nested-settings-update.js +16 -14
  65. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  66. package/build/components/inserter/index.js +61 -3
  67. package/build/components/inserter/index.js.map +1 -1
  68. package/build/components/inserter/index.native.js +1 -1
  69. package/build/components/inserter/index.native.js.map +1 -1
  70. package/build/components/inserter/library.js +5 -3
  71. package/build/components/inserter/library.js.map +1 -1
  72. package/build/components/inserter/menu.js +11 -3
  73. package/build/components/inserter/menu.js.map +1 -1
  74. package/build/components/inserter/search-items.js +3 -1
  75. package/build/components/inserter/search-items.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 +14 -44
  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 +4 -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/line-height-control/index.native.js +3 -2
  91. package/build/components/line-height-control/index.native.js.map +1 -1
  92. package/build/components/link-control/link-preview.js +1 -1
  93. package/build/components/link-control/link-preview.js.map +1 -1
  94. package/build/components/link-control/search-item.js +11 -1
  95. package/build/components/link-control/search-item.js.map +1 -1
  96. package/build/components/link-control/search-results.js +2 -1
  97. package/build/components/link-control/search-results.js.map +1 -1
  98. package/build/components/link-control/use-search-handler.js +18 -5
  99. package/build/components/link-control/use-search-handler.js.map +1 -1
  100. package/build/components/list-view/block-contents.js +3 -1
  101. package/build/components/list-view/block-contents.js.map +1 -1
  102. package/build/components/list-view/block-select-button.js +26 -4
  103. package/build/components/list-view/block-select-button.js.map +1 -1
  104. package/build/components/list-view/block.js +10 -1
  105. package/build/components/list-view/block.js.map +1 -1
  106. package/build/components/media-placeholder/index.js +3 -11
  107. package/build/components/media-placeholder/index.js.map +1 -1
  108. package/build/components/media-replace-flow/index.js +32 -6
  109. package/build/components/media-replace-flow/index.js.map +1 -1
  110. package/build/components/media-replace-flow/index.native.js +13 -0
  111. package/build/components/media-replace-flow/index.native.js.map +1 -0
  112. package/build/components/media-upload-progress/index.native.js +2 -1
  113. package/build/components/media-upload-progress/index.native.js.map +1 -1
  114. package/build/components/panel-color-settings/index.js +7 -3
  115. package/build/components/panel-color-settings/index.js.map +1 -1
  116. package/build/components/provider/block-refs-provider.js +4 -1
  117. package/build/components/provider/block-refs-provider.js.map +1 -1
  118. package/build/components/rich-text/file-paste-handler.js +1 -1
  119. package/build/components/rich-text/file-paste-handler.js.map +1 -1
  120. package/build/components/rich-text/index.js +2 -1
  121. package/build/components/rich-text/index.js.map +1 -1
  122. package/build/components/rich-text/index.native.js +2 -1
  123. package/build/components/rich-text/index.native.js.map +1 -1
  124. package/build/components/rich-text/prevent-event-discovery.js +33 -0
  125. package/build/components/rich-text/prevent-event-discovery.js.map +1 -0
  126. package/build/components/rich-text/use-input-rules.js +3 -1
  127. package/build/components/rich-text/use-input-rules.js.map +1 -1
  128. package/build/components/rich-text/use-paste-handler.js +14 -5
  129. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  130. package/build/components/rich-text/utils.js +2 -1
  131. package/build/components/rich-text/utils.js.map +1 -1
  132. package/build/components/selection-scroll-into-view/index.js +2 -1
  133. package/build/components/selection-scroll-into-view/index.js.map +1 -1
  134. package/build/components/use-display-block-controls/index.native.js +45 -0
  135. package/build/components/use-display-block-controls/index.native.js.map +1 -0
  136. package/build/components/use-on-block-drop/index.js +7 -3
  137. package/build/components/use-on-block-drop/index.js.map +1 -1
  138. package/build/components/writing-flow/use-multi-selection.js +3 -1
  139. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  140. package/build/hooks/border-color.js +63 -5
  141. package/build/hooks/border-color.js.map +1 -1
  142. package/build/hooks/border-radius.js +47 -0
  143. package/build/hooks/border-radius.js.map +1 -1
  144. package/build/hooks/border-style.js +41 -0
  145. package/build/hooks/border-style.js.map +1 -1
  146. package/build/hooks/border-width.js +70 -31
  147. package/build/hooks/border-width.js.map +1 -1
  148. package/build/hooks/border.js +81 -11
  149. package/build/hooks/border.js.map +1 -1
  150. package/build/hooks/color-panel.js +25 -16
  151. package/build/hooks/color-panel.js.map +1 -1
  152. package/build/hooks/color-panel.native.js +77 -0
  153. package/build/hooks/color-panel.native.js.map +1 -0
  154. package/build/hooks/color.js +179 -12
  155. package/build/hooks/color.js.map +1 -1
  156. package/build/hooks/font-size.js +14 -0
  157. package/build/hooks/font-size.js.map +1 -1
  158. package/build/hooks/index.native.js +2 -0
  159. package/build/hooks/index.native.js.map +1 -1
  160. package/build/hooks/layout.native.js +20 -0
  161. package/build/hooks/layout.native.js.map +1 -0
  162. package/build/hooks/letter-spacing.js +1 -1
  163. package/build/hooks/letter-spacing.js.map +1 -1
  164. package/build/hooks/typography.js +1 -1
  165. package/build/hooks/typography.js.map +1 -1
  166. package/build/hooks/typography.native.js +2 -4
  167. package/build/hooks/typography.native.js.map +1 -1
  168. package/build/hooks/utils.js +55 -0
  169. package/build/hooks/utils.js.map +1 -1
  170. package/build/store/actions.js +1 -2
  171. package/build/store/actions.js.map +1 -1
  172. package/build/store/defaults.js +5 -2
  173. package/build/store/defaults.js.map +1 -1
  174. package/build/store/defaults.native.js +2 -6
  175. package/build/store/defaults.native.js.map +1 -1
  176. package/build/store/selectors.js +10 -5
  177. package/build/store/selectors.js.map +1 -1
  178. package/build/utils/get-paste-event-data.js +1 -1
  179. package/build/utils/get-paste-event-data.js.map +1 -1
  180. package/build/utils/parse-css-unit-to-px.js +1 -1
  181. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  182. package/build-module/components/block-caption/index.native.js +13 -3
  183. package/build-module/components/block-caption/index.native.js.map +1 -1
  184. package/build-module/components/block-edit/index.js +9 -0
  185. package/build-module/components/block-edit/index.js.map +1 -1
  186. package/build-module/components/block-inspector/index.js +14 -19
  187. package/build-module/components/block-inspector/index.js.map +1 -1
  188. package/build-module/components/block-list-appender/index.js +3 -10
  189. package/build-module/components/block-list-appender/index.js.map +1 -1
  190. package/build-module/components/block-media-update-progress/index.native.js +2 -1
  191. package/build-module/components/block-media-update-progress/index.native.js.map +1 -1
  192. package/build-module/components/block-preview/auto.js +10 -2
  193. package/build-module/components/block-preview/auto.js.map +1 -1
  194. package/build-module/components/block-settings/container.native.js +2 -1
  195. package/build-module/components/block-settings/container.native.js.map +1 -1
  196. package/build-module/components/block-styles/index.js +112 -133
  197. package/build-module/components/block-styles/index.js.map +1 -1
  198. package/build-module/components/block-styles/menu-items.js +50 -0
  199. package/build-module/components/block-styles/menu-items.js.map +1 -0
  200. package/build-module/components/block-styles/preview-panel.js +35 -0
  201. package/build-module/components/block-styles/preview-panel.js.map +1 -0
  202. package/build-module/components/block-styles/preview.native.js +2 -2
  203. package/build-module/components/block-styles/preview.native.js.map +1 -1
  204. package/build-module/components/block-styles/use-styles-for-block.js +107 -0
  205. package/build-module/components/block-styles/use-styles-for-block.js.map +1 -0
  206. package/build-module/components/block-styles/utils.js +34 -0
  207. package/build-module/components/block-styles/utils.js.map +1 -1
  208. package/build-module/components/block-switcher/block-styles-menu.js +3 -21
  209. package/build-module/components/block-switcher/block-styles-menu.js.map +1 -1
  210. package/build-module/components/block-tools/back-compat.js +2 -1
  211. package/build-module/components/block-tools/back-compat.js.map +1 -1
  212. package/build-module/components/block-tools/block-selection-button.js +5 -1
  213. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  214. package/build-module/components/block-tools/insertion-point.js +11 -1
  215. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  216. package/build-module/components/block-types-list/index.native.js +2 -2
  217. package/build-module/components/block-types-list/index.native.js.map +1 -1
  218. package/build-module/components/button-block-appender/index.js +2 -1
  219. package/build-module/components/button-block-appender/index.js.map +1 -1
  220. package/build-module/components/colors-gradients/dropdown.js +1 -1
  221. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  222. package/build-module/components/colors-gradients/panel-color-gradient-settings.native.js +7 -4
  223. package/build-module/components/colors-gradients/panel-color-gradient-settings.native.js.map +1 -1
  224. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +75 -0
  225. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +1 -0
  226. package/build-module/components/contrast-checker/index.js +80 -45
  227. package/build-module/components/contrast-checker/index.js.map +1 -1
  228. package/build-module/components/contrast-checker/index.native.js +90 -0
  229. package/build-module/components/contrast-checker/index.native.js.map +1 -0
  230. package/build-module/components/default-block-appender/index.js +15 -18
  231. package/build-module/components/default-block-appender/index.js.map +1 -1
  232. package/build-module/components/default-style-picker/index.js +17 -3
  233. package/build-module/components/default-style-picker/index.js.map +1 -1
  234. package/build-module/components/iframe/index.js +4 -5
  235. package/build-module/components/iframe/index.js.map +1 -1
  236. package/build-module/components/index.js +2 -2
  237. package/build-module/components/index.js.map +1 -1
  238. package/build-module/components/index.native.js +2 -0
  239. package/build-module/components/index.native.js.map +1 -1
  240. package/build-module/components/inner-blocks/default-block-appender.js +2 -4
  241. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  242. package/build-module/components/inner-blocks/use-nested-settings-update.js +16 -14
  243. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  244. package/build-module/components/inserter/index.js +61 -3
  245. package/build-module/components/inserter/index.js.map +1 -1
  246. package/build-module/components/inserter/index.native.js +2 -2
  247. package/build-module/components/inserter/index.native.js.map +1 -1
  248. package/build-module/components/inserter/library.js +5 -3
  249. package/build-module/components/inserter/library.js.map +1 -1
  250. package/build-module/components/inserter/menu.js +11 -4
  251. package/build-module/components/inserter/menu.js.map +1 -1
  252. package/build-module/components/inserter/search-items.js +3 -1
  253. package/build-module/components/inserter/search-items.js.map +1 -1
  254. package/build-module/components/inserter/tabs.native.js +7 -4
  255. package/build-module/components/inserter/tabs.native.js.map +1 -1
  256. package/build-module/components/inspector-controls/block-support-slot-container.js +2 -1
  257. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -1
  258. package/build-module/components/inspector-controls/block-support-tools-panel.js +15 -44
  259. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  260. package/build-module/components/inspector-controls/fill.native.js +3 -5
  261. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  262. package/build-module/components/inspector-controls/groups.js +4 -0
  263. package/build-module/components/inspector-controls/groups.js.map +1 -1
  264. package/build-module/components/inspector-controls/slot.js +1 -3
  265. package/build-module/components/inspector-controls/slot.js.map +1 -1
  266. package/build-module/components/letter-spacing-control/index.js +6 -6
  267. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  268. package/build-module/components/line-height-control/index.native.js +3 -2
  269. package/build-module/components/line-height-control/index.native.js.map +1 -1
  270. package/build-module/components/link-control/link-preview.js +1 -1
  271. package/build-module/components/link-control/link-preview.js.map +1 -1
  272. package/build-module/components/link-control/search-item.js +11 -1
  273. package/build-module/components/link-control/search-item.js.map +1 -1
  274. package/build-module/components/link-control/search-results.js +2 -1
  275. package/build-module/components/link-control/search-results.js.map +1 -1
  276. package/build-module/components/link-control/use-search-handler.js +18 -5
  277. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  278. package/build-module/components/list-view/block-contents.js +3 -1
  279. package/build-module/components/list-view/block-contents.js.map +1 -1
  280. package/build-module/components/list-view/block-select-button.js +25 -4
  281. package/build-module/components/list-view/block-select-button.js.map +1 -1
  282. package/build-module/components/list-view/block.js +8 -1
  283. package/build-module/components/list-view/block.js.map +1 -1
  284. package/build-module/components/media-placeholder/index.js +3 -10
  285. package/build-module/components/media-placeholder/index.js.map +1 -1
  286. package/build-module/components/media-replace-flow/index.js +32 -6
  287. package/build-module/components/media-replace-flow/index.js.map +1 -1
  288. package/build-module/components/media-replace-flow/index.native.js +4 -0
  289. package/build-module/components/media-replace-flow/index.native.js.map +1 -0
  290. package/build-module/components/media-upload-progress/index.native.js +2 -1
  291. package/build-module/components/media-upload-progress/index.native.js.map +1 -1
  292. package/build-module/components/panel-color-settings/index.js +7 -3
  293. package/build-module/components/panel-color-settings/index.js.map +1 -1
  294. package/build-module/components/provider/block-refs-provider.js +4 -1
  295. package/build-module/components/provider/block-refs-provider.js.map +1 -1
  296. package/build-module/components/rich-text/file-paste-handler.js +1 -1
  297. package/build-module/components/rich-text/file-paste-handler.js.map +1 -1
  298. package/build-module/components/rich-text/index.js +2 -1
  299. package/build-module/components/rich-text/index.js.map +1 -1
  300. package/build-module/components/rich-text/index.native.js +2 -1
  301. package/build-module/components/rich-text/index.native.js.map +1 -1
  302. package/build-module/components/rich-text/prevent-event-discovery.js +25 -0
  303. package/build-module/components/rich-text/prevent-event-discovery.js.map +1 -0
  304. package/build-module/components/rich-text/use-input-rules.js +2 -1
  305. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  306. package/build-module/components/rich-text/use-paste-handler.js +14 -5
  307. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  308. package/build-module/components/rich-text/utils.js +2 -1
  309. package/build-module/components/rich-text/utils.js.map +1 -1
  310. package/build-module/components/selection-scroll-into-view/index.js +2 -1
  311. package/build-module/components/selection-scroll-into-view/index.js.map +1 -1
  312. package/build-module/components/use-display-block-controls/index.native.js +34 -0
  313. package/build-module/components/use-display-block-controls/index.native.js.map +1 -0
  314. package/build-module/components/use-on-block-drop/index.js +7 -3
  315. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  316. package/build-module/components/writing-flow/use-multi-selection.js +3 -4
  317. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  318. package/build-module/hooks/border-color.js +61 -7
  319. package/build-module/hooks/border-color.js.map +1 -1
  320. package/build-module/hooks/border-radius.js +42 -0
  321. package/build-module/hooks/border-radius.js.map +1 -1
  322. package/build-module/hooks/border-style.js +36 -0
  323. package/build-module/hooks/border-style.js.map +1 -1
  324. package/build-module/hooks/border-width.js +66 -32
  325. package/build-module/hooks/border-width.js.map +1 -1
  326. package/build-module/hooks/border.js +80 -12
  327. package/build-module/hooks/border.js.map +1 -1
  328. package/build-module/hooks/color-panel.js +24 -14
  329. package/build-module/hooks/color-panel.js.map +1 -1
  330. package/build-module/hooks/color-panel.native.js +62 -0
  331. package/build-module/hooks/color-panel.native.js.map +1 -0
  332. package/build-module/hooks/color.js +177 -13
  333. package/build-module/hooks/color.js.map +1 -1
  334. package/build-module/hooks/font-size.js +12 -1
  335. package/build-module/hooks/font-size.js.map +1 -1
  336. package/build-module/hooks/index.native.js +1 -0
  337. package/build-module/hooks/index.native.js.map +1 -1
  338. package/build-module/hooks/layout.native.js +16 -0
  339. package/build-module/hooks/layout.native.js.map +1 -0
  340. package/build-module/hooks/letter-spacing.js +1 -1
  341. package/build-module/hooks/letter-spacing.js.map +1 -1
  342. package/build-module/hooks/typography.js +1 -1
  343. package/build-module/hooks/typography.js.map +1 -1
  344. package/build-module/hooks/typography.native.js +2 -4
  345. package/build-module/hooks/typography.native.js.map +1 -1
  346. package/build-module/hooks/utils.js +52 -1
  347. package/build-module/hooks/utils.js.map +1 -1
  348. package/build-module/store/actions.js +1 -2
  349. package/build-module/store/actions.js.map +1 -1
  350. package/build-module/store/defaults.js +5 -2
  351. package/build-module/store/defaults.js.map +1 -1
  352. package/build-module/store/defaults.native.js +2 -5
  353. package/build-module/store/defaults.native.js.map +1 -1
  354. package/build-module/store/selectors.js +10 -5
  355. package/build-module/store/selectors.js.map +1 -1
  356. package/build-module/utils/get-paste-event-data.js +1 -1
  357. package/build-module/utils/get-paste-event-data.js.map +1 -1
  358. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  359. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  360. package/build-style/style-rtl.css +256 -191
  361. package/build-style/style.css +256 -191
  362. package/package.json +30 -30
  363. package/src/components/block-caption/index.native.js +22 -4
  364. package/src/components/block-card/README.md +1 -1
  365. package/src/components/block-edit/index.js +8 -0
  366. package/src/components/block-edit/test/edit.native.js +10 -9
  367. package/src/components/block-inspector/index.js +18 -16
  368. package/src/components/block-list-appender/index.js +5 -21
  369. package/src/components/block-media-update-progress/index.native.js +1 -1
  370. package/src/components/block-media-update-progress/test/index.native.js +136 -93
  371. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +108 -47
  372. package/src/components/block-mover/test/index.native.js +5 -5
  373. package/src/components/block-preview/README.md +14 -26
  374. package/src/components/block-preview/auto.js +7 -2
  375. package/src/components/block-preview/test/index.js +2 -0
  376. package/src/components/block-settings/container.native.js +1 -0
  377. package/src/components/block-styles/index.js +125 -145
  378. package/src/components/block-styles/menu-items.js +49 -0
  379. package/src/components/block-styles/preview-panel.js +36 -0
  380. package/src/components/block-styles/preview.native.js +5 -2
  381. package/src/components/block-styles/style.scss +59 -51
  382. package/src/components/block-styles/test/{index.js → utils.js} +60 -1
  383. package/src/components/block-styles/use-styles-for-block.js +99 -0
  384. package/src/components/block-styles/utils.js +39 -0
  385. package/src/components/block-switcher/block-styles-menu.js +3 -38
  386. package/src/components/block-tools/back-compat.js +1 -0
  387. package/src/components/block-tools/block-selection-button.js +7 -1
  388. package/src/components/block-tools/insertion-point.js +10 -1
  389. package/src/components/block-types-list/index.native.js +5 -2
  390. package/src/components/border-radius-control/style.scss +1 -1
  391. package/src/components/border-style-control/style.scss +0 -1
  392. package/src/components/button-block-appender/index.js +1 -0
  393. package/src/components/color-palette/test/__snapshots__/control.js.snap +9 -5
  394. package/src/components/colors-gradients/dropdown.js +48 -43
  395. package/src/components/colors-gradients/panel-color-gradient-settings.native.js +13 -2
  396. package/src/components/colors-gradients/style.scss +10 -5
  397. package/src/components/colors-gradients/tools-panel-color-dropdown.js +85 -0
  398. package/src/components/contrast-checker/README.md +3 -1
  399. package/src/components/contrast-checker/index.js +107 -64
  400. package/src/components/contrast-checker/index.native.js +113 -0
  401. package/src/components/contrast-checker/style.native.scss +26 -0
  402. package/src/components/contrast-checker/test/index.js +236 -2
  403. package/src/components/default-block-appender/index.js +17 -24
  404. package/src/components/default-block-appender/style.scss +4 -0
  405. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +12 -24
  406. package/src/components/default-block-appender/test/index.js +4 -14
  407. package/src/components/default-style-picker/index.js +18 -6
  408. package/src/components/iframe/index.js +7 -3
  409. package/src/components/index.js +2 -2
  410. package/src/components/index.native.js +2 -0
  411. package/src/components/inner-blocks/README.md +2 -0
  412. package/src/components/inner-blocks/default-block-appender.js +2 -7
  413. package/src/components/inner-blocks/use-nested-settings-update.js +16 -14
  414. package/src/components/inserter/index.js +77 -5
  415. package/src/components/inserter/index.native.js +2 -2
  416. package/src/components/inserter/library.js +17 -12
  417. package/src/components/inserter/menu.js +31 -13
  418. package/src/components/inserter/search-items.js +3 -1
  419. package/src/components/inserter/tabs.native.js +5 -4
  420. package/src/components/inserter/test/block-types-tab.native.js +9 -10
  421. package/src/components/inserter/test/index.native.js +3 -7
  422. package/src/components/inserter/test/reusable-blocks-tab.native.js +8 -10
  423. package/src/components/inspector-controls/block-support-slot-container.js +3 -1
  424. package/src/components/inspector-controls/block-support-tools-panel.js +41 -58
  425. package/src/components/inspector-controls/fill.native.js +4 -3
  426. package/src/components/inspector-controls/groups.js +4 -0
  427. package/src/components/inspector-controls/slot.js +2 -7
  428. package/src/components/letter-spacing-control/index.js +6 -6
  429. package/src/components/line-height-control/index.native.js +2 -1
  430. package/src/components/link-control/README.md +1 -1
  431. package/src/components/link-control/link-preview.js +1 -1
  432. package/src/components/link-control/search-item.js +11 -2
  433. package/src/components/link-control/search-results.js +1 -0
  434. package/src/components/link-control/style.scss +5 -10
  435. package/src/components/link-control/test/index.js +4 -0
  436. package/src/components/link-control/use-search-handler.js +25 -4
  437. package/src/components/list-view/block-contents.js +2 -0
  438. package/src/components/list-view/block-select-button.js +22 -1
  439. package/src/components/list-view/block.js +11 -0
  440. package/src/components/media-placeholder/index.js +3 -10
  441. package/src/components/media-replace-flow/index.js +35 -5
  442. package/src/components/media-replace-flow/index.native.js +3 -0
  443. package/src/components/media-upload/test/index.native.js +28 -47
  444. package/src/components/media-upload-progress/index.native.js +1 -0
  445. package/src/components/media-upload-progress/test/index.native.js +60 -47
  446. package/src/components/panel-color-settings/index.js +8 -4
  447. package/src/components/provider/block-refs-provider.js +4 -1
  448. package/src/components/rich-text/file-paste-handler.js +3 -1
  449. package/src/components/rich-text/index.js +1 -0
  450. package/src/components/rich-text/index.native.js +1 -0
  451. package/src/components/rich-text/prevent-event-discovery.js +23 -0
  452. package/src/components/rich-text/use-input-rules.js +2 -1
  453. package/src/components/rich-text/use-paste-handler.js +16 -3
  454. package/src/components/rich-text/utils.js +1 -0
  455. package/src/components/selection-scroll-into-view/index.js +1 -0
  456. package/src/components/url-input/README.md +5 -0
  457. package/src/components/use-display-block-controls/index.native.js +38 -0
  458. package/src/components/use-on-block-drop/index.js +7 -3
  459. package/src/components/writing-flow/test/use-multi-selection.js +36 -0
  460. package/src/components/writing-flow/use-multi-selection.js +12 -9
  461. package/src/hooks/border-color.js +55 -3
  462. package/src/hooks/border-radius.js +32 -0
  463. package/src/hooks/border-style.js +26 -0
  464. package/src/hooks/border-width.js +56 -32
  465. package/src/hooks/border.js +115 -20
  466. package/src/hooks/border.scss +3 -17
  467. package/src/hooks/color-panel.js +25 -19
  468. package/src/hooks/color-panel.native.js +63 -0
  469. package/src/hooks/color.js +182 -12
  470. package/src/hooks/color.scss +85 -0
  471. package/src/hooks/font-size.js +29 -1
  472. package/src/hooks/index.native.js +1 -0
  473. package/src/hooks/layout.native.js +23 -0
  474. package/src/hooks/letter-spacing.js +1 -1
  475. package/src/hooks/typography.js +1 -1
  476. package/src/hooks/typography.native.js +1 -3
  477. package/src/hooks/utils.js +69 -1
  478. package/src/store/actions.js +1 -2
  479. package/src/store/defaults.js +2 -1
  480. package/src/store/defaults.native.js +2 -6
  481. package/src/store/selectors.js +10 -5
  482. package/src/style.scss +4 -3
  483. package/src/utils/get-paste-event-data.js +1 -1
  484. package/src/utils/parse-css-unit-to-px.js +1 -1
  485. package/src/utils/test/parse-css-unit-to-px.js +3 -0
  486. package/tsconfig.tsbuildinfo +1 -1
  487. package/build/components/preserve-scroll-in-reorder/index.js +0 -22
  488. package/build/components/preserve-scroll-in-reorder/index.js.map +0 -1
  489. package/build/components/use-canvas-click-redirect/index.js +0 -66
  490. package/build/components/use-canvas-click-redirect/index.js.map +0 -1
  491. package/build-module/components/preserve-scroll-in-reorder/index.js +0 -12
  492. package/build-module/components/preserve-scroll-in-reorder/index.js.map +0 -1
  493. package/build-module/components/use-canvas-click-redirect/index.js +0 -54
  494. package/build-module/components/use-canvas-click-redirect/index.js.map +0 -1
  495. package/src/components/preserve-scroll-in-reorder/index.js +0 -12
  496. package/src/components/use-canvas-click-redirect/index.js +0 -57
@@ -19,6 +19,7 @@ import useBlockDisplayInformation from '../use-block-display-information';
19
19
  import { getBlockPositionDescription } from './utils';
20
20
  import BlockTitle from '../block-title';
21
21
  import ListViewExpander from './expander';
22
+ import { SPACE, ENTER } from '@wordpress/keycodes';
22
23
 
23
24
  function ListViewBlockSelectButton(
24
25
  {
@@ -35,6 +36,7 @@ function ListViewBlockSelectButton(
35
36
  onDragStart,
36
37
  onDragEnd,
37
38
  draggable,
39
+ isExpanded,
38
40
  },
39
41
  ref
40
42
  ) {
@@ -47,6 +49,22 @@ function ListViewBlockSelectButton(
47
49
  level
48
50
  );
49
51
 
52
+ // The `href` attribute triggers the browser's native HTML drag operations.
53
+ // When the link is dragged, the element's outerHTML is set in DataTransfer object as text/html.
54
+ // We need to clear any HTML drag data to prevent `pasteHandler` from firing
55
+ // inside the `useOnBlockDrop` hook.
56
+ const onDragStartHandler = ( event ) => {
57
+ event.dataTransfer.clearData();
58
+ onDragStart( event );
59
+ };
60
+
61
+ function onKeyDownHandler( event ) {
62
+ if ( event.keyCode === ENTER || event.keyCode === SPACE ) {
63
+ event.preventDefault();
64
+ onClick( event );
65
+ }
66
+ }
67
+
50
68
  return (
51
69
  <>
52
70
  <Button
@@ -55,13 +73,16 @@ function ListViewBlockSelectButton(
55
73
  className
56
74
  ) }
57
75
  onClick={ onClick }
76
+ onKeyDown={ onKeyDownHandler }
58
77
  aria-describedby={ descriptionId }
59
78
  ref={ ref }
60
79
  tabIndex={ tabIndex }
61
80
  onFocus={ onFocus }
62
- onDragStart={ onDragStart }
81
+ onDragStart={ onDragStartHandler }
63
82
  onDragEnd={ onDragEnd }
64
83
  draggable={ draggable }
84
+ href={ `#block-${ clientId }` }
85
+ aria-expanded={ isExpanded }
65
86
  >
66
87
  <ListViewExpander onClick={ onToggleExpanded } />
67
88
  <BlockIcon icon={ blockInformation?.icon } showColors />
@@ -19,6 +19,7 @@ import {
19
19
  memo,
20
20
  } from '@wordpress/element';
21
21
  import { useDispatch } from '@wordpress/data';
22
+ import { sprintf, __ } from '@wordpress/i18n';
22
23
 
23
24
  /**
24
25
  * Internal dependencies
@@ -32,6 +33,7 @@ import ListViewBlockContents from './block-contents';
32
33
  import BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';
33
34
  import { useListViewContext } from './context';
34
35
  import { store as blockEditorStore } from '../../store';
36
+ import useBlockDisplayInformation from '../use-block-display-information';
35
37
 
36
38
  function ListViewBlock( {
37
39
  block,
@@ -143,6 +145,13 @@ function ListViewBlock( {
143
145
  'has-single-cell': hideBlockActions,
144
146
  } );
145
147
 
148
+ const blockInformation = useBlockDisplayInformation( clientId );
149
+ const settingsAriaLabel = sprintf(
150
+ // translators: %s: The title of the block.
151
+ __( 'Options for %s block' ),
152
+ blockInformation.title
153
+ );
154
+
146
155
  return (
147
156
  <ListViewLeaf
148
157
  className={ classes }
@@ -176,6 +185,7 @@ function ListViewBlock( {
176
185
  ref={ ref }
177
186
  tabIndex={ tabIndex }
178
187
  onFocus={ onFocus }
188
+ isExpanded={ isExpanded }
179
189
  />
180
190
  </div>
181
191
  ) }
@@ -218,6 +228,7 @@ function ListViewBlock( {
218
228
  <BlockSettingsDropdown
219
229
  clientIds={ [ clientId ] }
220
230
  icon={ moreVertical }
231
+ label={ settingsAriaLabel }
221
232
  toggleProps={ {
222
233
  ref,
223
234
  className: 'block-editor-list-view-block__menu',
@@ -17,7 +17,6 @@ import {
17
17
  import { __ } from '@wordpress/i18n';
18
18
  import { useState, useEffect } from '@wordpress/element';
19
19
  import { useSelect } from '@wordpress/data';
20
- import deprecated from '@wordpress/deprecated';
21
20
  import { keyboardReturn } from '@wordpress/icons';
22
21
 
23
22
  /**
@@ -65,7 +64,6 @@ export function MediaPlaceholder( {
65
64
  addToGallery,
66
65
  multiple = false,
67
66
  handleUpload = true,
68
- dropZoneUIOnly,
69
67
  disableDropZone,
70
68
  disableMediaButtons,
71
69
  onError,
@@ -75,6 +73,7 @@ export function MediaPlaceholder( {
75
73
  onDoubleClick,
76
74
  onFilesPreUpload = noop,
77
75
  onHTMLDrop = noop,
76
+ onClose = noop,
78
77
  children,
79
78
  mediaLibraryButton,
80
79
  placeholder,
@@ -328,6 +327,7 @@ export function MediaPlaceholder( {
328
327
  gallery={ multiple && onlyAllowsImages() }
329
328
  multiple={ multiple }
330
329
  onSelect={ onSelect }
330
+ onClose={ onClose }
331
331
  allowedTypes={ allowedTypes }
332
332
  value={
333
333
  Array.isArray( value )
@@ -398,14 +398,7 @@ export function MediaPlaceholder( {
398
398
  return renderPlaceholder( uploadMediaLibraryButton );
399
399
  };
400
400
 
401
- if ( dropZoneUIOnly || disableMediaButtons ) {
402
- if ( dropZoneUIOnly ) {
403
- deprecated( 'wp.blockEditor.MediaPlaceholder dropZoneUIOnly prop', {
404
- since: '5.4',
405
- alternative: 'disableMediaButtons',
406
- } );
407
- }
408
-
401
+ if ( disableMediaButtons ) {
409
402
  return <MediaUploadCheck>{ renderDropZone() }</MediaUploadCheck>;
410
403
  }
411
404
 
@@ -34,15 +34,20 @@ import { store as blockEditorStore } from '../../store';
34
34
  const MediaReplaceFlow = ( {
35
35
  mediaURL,
36
36
  mediaId,
37
+ mediaIds,
37
38
  allowedTypes,
38
39
  accept,
39
40
  onSelect,
40
41
  onSelectURL,
41
42
  onFilesUpload = noop,
43
+ onCloseModal = noop,
42
44
  name = __( 'Replace' ),
43
45
  createNotice,
44
46
  removeNotice,
45
47
  children,
48
+ multiple = false,
49
+ addToGallery,
50
+ handleUpload = true,
46
51
  } ) => {
47
52
  const [ mediaURLValue, setMediaURLValue ] = useState( mediaURL );
48
53
  const mediaUpload = useSelect( ( select ) => {
@@ -77,7 +82,8 @@ const MediaReplaceFlow = ( {
77
82
  }, 1000 );
78
83
  };
79
84
 
80
- const selectMedia = ( media ) => {
85
+ const selectMedia = ( media, closeMenu ) => {
86
+ closeMenu();
81
87
  setMediaURLValue( media.url );
82
88
  // Calling `onSelect` after the state update since it might unmount the component.
83
89
  onSelect( media );
@@ -89,11 +95,15 @@ const MediaReplaceFlow = ( {
89
95
  onSelectURL( newURL );
90
96
  };
91
97
 
92
- const uploadFiles = ( event ) => {
98
+ const uploadFiles = ( event, closeMenu ) => {
93
99
  const files = event.target.files;
100
+ if ( ! handleUpload ) {
101
+ closeMenu();
102
+ return onSelect( files );
103
+ }
94
104
  onFilesUpload( files );
95
105
  const setMedia = ( [ media ] ) => {
96
- selectMedia( media );
106
+ selectMedia( media, closeMenu );
97
107
  };
98
108
  mediaUpload( {
99
109
  allowedTypes,
@@ -110,6 +120,19 @@ const MediaReplaceFlow = ( {
110
120
  }
111
121
  };
112
122
 
123
+ const onlyAllowsImages = () => {
124
+ if ( ! allowedTypes || allowedTypes.length === 0 ) {
125
+ return false;
126
+ }
127
+
128
+ return allowedTypes.every(
129
+ ( allowedType ) =>
130
+ allowedType === 'image' || allowedType.startsWith( 'image/' )
131
+ );
132
+ };
133
+
134
+ const gallery = multiple && onlyAllowsImages();
135
+
113
136
  const POPOVER_PROPS = {
114
137
  isAlternate: true,
115
138
  };
@@ -133,9 +156,15 @@ const MediaReplaceFlow = ( {
133
156
  <>
134
157
  <NavigableMenu className="block-editor-media-replace-flow__media-upload-menu">
135
158
  <MediaUpload
136
- value={ mediaId }
137
- onSelect={ ( media ) => selectMedia( media ) }
159
+ gallery={ gallery }
160
+ addToGallery={ addToGallery }
161
+ multiple={ multiple }
162
+ value={ multiple ? mediaIds : mediaId }
163
+ onSelect={ ( media ) =>
164
+ selectMedia( media, onClose )
165
+ }
138
166
  allowedTypes={ allowedTypes }
167
+ onClose={ onCloseModal }
139
168
  render={ ( { open } ) => (
140
169
  <MenuItem icon={ mediaIcon } onClick={ open }>
141
170
  { __( 'Open Media Library' ) }
@@ -148,6 +177,7 @@ const MediaReplaceFlow = ( {
148
177
  uploadFiles( event, onClose );
149
178
  } }
150
179
  accept={ accept }
180
+ multiple={ multiple }
151
181
  render={ ( { openFileDialog } ) => {
152
182
  return (
153
183
  <MenuItem
@@ -0,0 +1,3 @@
1
+ // MediaReplaceFlow component is not yet implemented in the native version,
2
+ // so we return an empty component instead.
3
+ export default () => null;
@@ -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(