@wordpress/block-editor 9.3.0 → 9.6.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 (449) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -8
  3. package/build/components/block-list/block-invalid-warning.native.js +54 -6
  4. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  5. package/build/components/block-list/block.js +2 -2
  6. package/build/components/block-list/block.js.map +1 -1
  7. package/build/components/block-list/block.native.js +2 -1
  8. package/build/components/block-list/block.native.js.map +1 -1
  9. package/build/components/block-list/index.native.js +4 -3
  10. package/build/components/block-list/index.native.js.map +1 -1
  11. package/build/components/block-list/layout.js +20 -5
  12. package/build/components/block-list/layout.js.map +1 -1
  13. package/build/components/block-list/use-block-props/use-block-class-names.js +5 -2
  14. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  15. package/build/components/block-lock/modal.js +37 -7
  16. package/build/components/block-lock/modal.js.map +1 -1
  17. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  18. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  19. package/build/components/block-mover/mover-description.js +95 -32
  20. package/build/components/block-mover/mover-description.js.map +1 -1
  21. package/build/components/block-pattern-setup/index.js +8 -26
  22. package/build/components/block-pattern-setup/index.js.map +1 -1
  23. package/build/components/block-pattern-setup/setup-toolbar.js +3 -8
  24. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  25. package/build/components/block-popover/inbetween.js +1 -1
  26. package/build/components/block-popover/inbetween.js.map +1 -1
  27. package/build/components/block-popover/index.js +1 -1
  28. package/build/components/block-popover/index.js.map +1 -1
  29. package/build/components/block-preview/auto.js +21 -5
  30. package/build/components/block-preview/auto.js.map +1 -1
  31. package/build/components/block-settings-menu/block-edit-visually-button.js +70 -0
  32. package/build/components/block-settings-menu/block-edit-visually-button.js.map +1 -0
  33. package/build/components/block-settings-menu/block-mode-toggle.js +1 -1
  34. package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  35. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -2
  36. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  37. package/build/components/block-settings-menu/index.js +6 -2
  38. package/build/components/block-settings-menu/index.js.map +1 -1
  39. package/build/components/block-settings-menu-controls/index.js +5 -2
  40. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  41. package/build/components/block-styles/preview.native.js.map +1 -1
  42. package/build/components/block-switcher/index.js +7 -1
  43. package/build/components/block-switcher/index.js.map +1 -1
  44. package/build/components/block-title/index.js +8 -2
  45. package/build/components/block-title/index.js.map +1 -1
  46. package/build/components/block-title/use-block-display-title.js +15 -15
  47. package/build/components/block-title/use-block-display-title.js.map +1 -1
  48. package/build/components/block-tools/block-contextual-toolbar.js +1 -1
  49. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  50. package/build/components/block-tools/block-selection-button.js +1 -7
  51. package/build/components/block-tools/block-selection-button.js.map +1 -1
  52. package/build/components/block-tools/index.js +4 -1
  53. package/build/components/block-tools/index.js.map +1 -1
  54. package/build/components/block-types-list/index.native.js +65 -23
  55. package/build/components/block-types-list/index.native.js.map +1 -1
  56. package/build/components/border-radius-control/index.js +2 -0
  57. package/build/components/border-radius-control/index.js.map +1 -1
  58. package/build/components/colors/with-colors.js +1 -1
  59. package/build/components/colors/with-colors.js.map +1 -1
  60. package/build/components/colors-gradients/control.js +46 -39
  61. package/build/components/colors-gradients/control.js.map +1 -1
  62. package/build/components/colors-gradients/dropdown.js +7 -3
  63. package/build/components/colors-gradients/dropdown.js.map +1 -1
  64. package/build/components/date-format-picker/index.js +1 -1
  65. package/build/components/date-format-picker/index.js.map +1 -1
  66. package/build/components/duotone/components.js +145 -0
  67. package/build/components/duotone/components.js.map +1 -0
  68. package/build/components/duotone/index.js +40 -0
  69. package/build/components/duotone/index.js.map +1 -0
  70. package/build/components/duotone/utils.js +38 -0
  71. package/build/components/duotone/utils.js.map +1 -0
  72. package/build/components/duotone-control/index.js +17 -5
  73. package/build/components/duotone-control/index.js.map +1 -1
  74. package/build/components/iframe/index.js +19 -6
  75. package/build/components/iframe/index.js.map +1 -1
  76. package/build/components/image-editor/cropper.js +4 -3
  77. package/build/components/image-editor/cropper.js.map +1 -1
  78. package/build/components/image-editor/index.js +3 -1
  79. package/build/components/image-editor/index.js.map +1 -1
  80. package/build/components/index.js +14 -0
  81. package/build/components/index.js.map +1 -1
  82. package/build/components/inserter/block-types-tab.native.js +30 -16
  83. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  84. package/build/components/inserter/index.js +3 -3
  85. package/build/components/inserter/index.js.map +1 -1
  86. package/build/components/inserter/preview-panel.js +8 -8
  87. package/build/components/inserter/preview-panel.js.map +1 -1
  88. package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
  89. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  90. package/build/components/inserter/search-results.native.js +5 -2
  91. package/build/components/inserter/search-results.native.js.map +1 -1
  92. package/build/components/inserter/utils.native.js +21 -0
  93. package/build/components/inserter/utils.native.js.map +1 -1
  94. package/build/components/inserter-list-item/index.js +5 -1
  95. package/build/components/inserter-list-item/index.js.map +1 -1
  96. package/build/components/link-control/index.js +1 -1
  97. package/build/components/link-control/index.js.map +1 -1
  98. package/build/components/list-view/block-select-button.js +15 -7
  99. package/build/components/list-view/block-select-button.js.map +1 -1
  100. package/build/components/list-view/branch.js +1 -7
  101. package/build/components/list-view/branch.js.map +1 -1
  102. package/build/components/list-view/drop-indicator.js +1 -1
  103. package/build/components/list-view/drop-indicator.js.map +1 -1
  104. package/build/components/media-placeholder/index.js +14 -2
  105. package/build/components/media-placeholder/index.js.map +1 -1
  106. package/build/components/media-placeholder/index.native.js +4 -4
  107. package/build/components/media-placeholder/index.native.js.map +1 -1
  108. package/build/components/media-replace-flow/index.js +6 -13
  109. package/build/components/media-replace-flow/index.js.map +1 -1
  110. package/build/components/observe-typing/index.js +22 -8
  111. package/build/components/observe-typing/index.js.map +1 -1
  112. package/build/components/publish-date-time-picker/index.js +3 -0
  113. package/build/components/publish-date-time-picker/index.js.map +1 -1
  114. package/build/components/rich-text/format-toolbar-container.js +61 -12
  115. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  116. package/build/components/rich-text/index.js +2 -1
  117. package/build/components/rich-text/index.js.map +1 -1
  118. package/build/components/rich-text/use-format-types.js +36 -16
  119. package/build/components/rich-text/use-format-types.js.map +1 -1
  120. package/build/components/rich-text/use-input-rules.js +4 -13
  121. package/build/components/rich-text/use-input-rules.js.map +1 -1
  122. package/build/components/rich-text/use-paste-handler.js +20 -5
  123. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  124. package/build/components/url-popover/index.js +2 -1
  125. package/build/components/url-popover/index.js.map +1 -1
  126. package/build/components/writing-flow/use-arrow-nav.js +34 -2
  127. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  128. package/build/components/writing-flow/use-multi-selection.js +3 -47
  129. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  130. package/build/components/writing-flow/use-selection-observer.js +1 -3
  131. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  132. package/build/components/writing-flow/use-tab-nav.js +1 -1
  133. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  134. package/build/elements/index.js +11 -3
  135. package/build/elements/index.js.map +1 -1
  136. package/build/hooks/aria-label.js +71 -0
  137. package/build/hooks/aria-label.js.map +1 -0
  138. package/build/hooks/color.js +2 -4
  139. package/build/hooks/color.js.map +1 -1
  140. package/build/hooks/duotone.js +33 -160
  141. package/build/hooks/duotone.js.map +1 -1
  142. package/build/hooks/index.js +11 -7
  143. package/build/hooks/index.js.map +1 -1
  144. package/build/hooks/layout.js +59 -18
  145. package/build/hooks/layout.js.map +1 -1
  146. package/build/hooks/style.js +41 -31
  147. package/build/hooks/style.js.map +1 -1
  148. package/build/hooks/utils.js +5 -3
  149. package/build/hooks/utils.js.map +1 -1
  150. package/build/index.js +7 -7
  151. package/build/index.js.map +1 -1
  152. package/build/layouts/flex.js +42 -38
  153. package/build/layouts/flex.js.map +1 -1
  154. package/build/layouts/flow.js +35 -37
  155. package/build/layouts/flow.js.map +1 -1
  156. package/build/layouts/utils.js +35 -3
  157. package/build/layouts/utils.js.map +1 -1
  158. package/build/store/actions.js +24 -31
  159. package/build/store/actions.js.map +1 -1
  160. package/build/store/index.js +0 -4
  161. package/build/store/index.js.map +1 -1
  162. package/build/store/reducer.js +23 -12
  163. package/build/store/reducer.js.map +1 -1
  164. package/build/store/selectors.js +3 -3
  165. package/build/store/selectors.js.map +1 -1
  166. package/build/utils/selection.js +34 -0
  167. package/build/utils/selection.js.map +1 -0
  168. package/build-module/components/block-list/block-invalid-warning.native.js +50 -6
  169. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  170. package/build-module/components/block-list/block.js +2 -2
  171. package/build-module/components/block-list/block.js.map +1 -1
  172. package/build-module/components/block-list/block.native.js +2 -1
  173. package/build-module/components/block-list/block.native.js.map +1 -1
  174. package/build-module/components/block-list/index.native.js +3 -1
  175. package/build-module/components/block-list/index.native.js.map +1 -1
  176. package/build-module/components/block-list/layout.js +19 -4
  177. package/build-module/components/block-list/layout.js.map +1 -1
  178. package/build-module/components/block-list/use-block-props/use-block-class-names.js +5 -2
  179. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  180. package/build-module/components/block-lock/modal.js +39 -8
  181. package/build-module/components/block-lock/modal.js.map +1 -1
  182. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
  183. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  184. package/build-module/components/block-mover/mover-description.js +97 -33
  185. package/build-module/components/block-mover/mover-description.js.map +1 -1
  186. package/build-module/components/block-pattern-setup/index.js +9 -27
  187. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  188. package/build-module/components/block-pattern-setup/setup-toolbar.js +3 -8
  189. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  190. package/build-module/components/block-popover/inbetween.js +1 -1
  191. package/build-module/components/block-popover/inbetween.js.map +1 -1
  192. package/build-module/components/block-popover/index.js +1 -1
  193. package/build-module/components/block-popover/index.js.map +1 -1
  194. package/build-module/components/block-preview/auto.js +20 -5
  195. package/build-module/components/block-preview/auto.js.map +1 -1
  196. package/build-module/components/block-settings-menu/block-edit-visually-button.js +56 -0
  197. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +1 -0
  198. package/build-module/components/block-settings-menu/block-mode-toggle.js +1 -1
  199. package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  200. package/build-module/components/block-settings-menu/block-settings-dropdown.js +6 -5
  201. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  202. package/build-module/components/block-settings-menu/index.js +6 -3
  203. package/build-module/components/block-settings-menu/index.js.map +1 -1
  204. package/build-module/components/block-settings-menu-controls/index.js +7 -4
  205. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  206. package/build-module/components/block-styles/preview.native.js.map +1 -1
  207. package/build-module/components/block-switcher/index.js +7 -1
  208. package/build-module/components/block-switcher/index.js.map +1 -1
  209. package/build-module/components/block-title/index.js +8 -2
  210. package/build-module/components/block-title/index.js.map +1 -1
  211. package/build-module/components/block-title/use-block-display-title.js +15 -14
  212. package/build-module/components/block-title/use-block-display-title.js.map +1 -1
  213. package/build-module/components/block-tools/block-contextual-toolbar.js +1 -1
  214. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  215. package/build-module/components/block-tools/block-selection-button.js +1 -7
  216. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  217. package/build-module/components/block-tools/index.js +4 -1
  218. package/build-module/components/block-tools/index.js.map +1 -1
  219. package/build-module/components/block-types-list/index.native.js +67 -25
  220. package/build-module/components/block-types-list/index.native.js.map +1 -1
  221. package/build-module/components/border-radius-control/index.js +2 -0
  222. package/build-module/components/border-radius-control/index.js.map +1 -1
  223. package/build-module/components/colors/with-colors.js +2 -2
  224. package/build-module/components/colors/with-colors.js.map +1 -1
  225. package/build-module/components/colors-gradients/control.js +47 -40
  226. package/build-module/components/colors-gradients/control.js.map +1 -1
  227. package/build-module/components/colors-gradients/dropdown.js +8 -4
  228. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  229. package/build-module/components/date-format-picker/index.js +1 -1
  230. package/build-module/components/date-format-picker/index.js.map +1 -1
  231. package/build-module/components/duotone/components.js +130 -0
  232. package/build-module/components/duotone/components.js.map +1 -0
  233. package/build-module/components/duotone/index.js +3 -0
  234. package/build-module/components/duotone/index.js.map +1 -0
  235. package/build-module/components/duotone/utils.js +30 -0
  236. package/build-module/components/duotone/utils.js.map +1 -0
  237. package/build-module/components/duotone-control/index.js +18 -6
  238. package/build-module/components/duotone-control/index.js.map +1 -1
  239. package/build-module/components/iframe/index.js +19 -6
  240. package/build-module/components/iframe/index.js.map +1 -1
  241. package/build-module/components/image-editor/cropper.js +4 -3
  242. package/build-module/components/image-editor/cropper.js.map +1 -1
  243. package/build-module/components/image-editor/index.js +3 -1
  244. package/build-module/components/image-editor/index.js.map +1 -1
  245. package/build-module/components/index.js +1 -0
  246. package/build-module/components/index.js.map +1 -1
  247. package/build-module/components/inserter/block-types-tab.native.js +31 -15
  248. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  249. package/build-module/components/inserter/index.js +3 -2
  250. package/build-module/components/inserter/index.js.map +1 -1
  251. package/build-module/components/inserter/preview-panel.js +9 -9
  252. package/build-module/components/inserter/preview-panel.js.map +1 -1
  253. package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
  254. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  255. package/build-module/components/inserter/search-results.native.js +6 -3
  256. package/build-module/components/inserter/search-results.native.js.map +1 -1
  257. package/build-module/components/inserter/utils.native.js +19 -0
  258. package/build-module/components/inserter/utils.native.js.map +1 -1
  259. package/build-module/components/inserter-list-item/index.js +4 -1
  260. package/build-module/components/inserter-list-item/index.js.map +1 -1
  261. package/build-module/components/link-control/index.js +1 -1
  262. package/build-module/components/link-control/index.js.map +1 -1
  263. package/build-module/components/list-view/block-select-button.js +16 -8
  264. package/build-module/components/list-view/block-select-button.js.map +1 -1
  265. package/build-module/components/list-view/branch.js +1 -6
  266. package/build-module/components/list-view/branch.js.map +1 -1
  267. package/build-module/components/list-view/drop-indicator.js +1 -1
  268. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  269. package/build-module/components/media-placeholder/index.js +14 -2
  270. package/build-module/components/media-placeholder/index.js.map +1 -1
  271. package/build-module/components/media-placeholder/index.native.js +5 -3
  272. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  273. package/build-module/components/media-replace-flow/index.js +7 -13
  274. package/build-module/components/media-replace-flow/index.js.map +1 -1
  275. package/build-module/components/observe-typing/index.js +22 -8
  276. package/build-module/components/observe-typing/index.js.map +1 -1
  277. package/build-module/components/publish-date-time-picker/index.js +2 -0
  278. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  279. package/build-module/components/rich-text/format-toolbar-container.js +58 -12
  280. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  281. package/build-module/components/rich-text/index.js +2 -1
  282. package/build-module/components/rich-text/index.js.map +1 -1
  283. package/build-module/components/rich-text/use-format-types.js +37 -18
  284. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  285. package/build-module/components/rich-text/use-input-rules.js +3 -11
  286. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  287. package/build-module/components/rich-text/use-paste-handler.js +20 -5
  288. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  289. package/build-module/components/url-popover/index.js +2 -1
  290. package/build-module/components/url-popover/index.js.map +1 -1
  291. package/build-module/components/writing-flow/use-arrow-nav.js +35 -3
  292. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  293. package/build-module/components/writing-flow/use-multi-selection.js +3 -45
  294. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  295. package/build-module/components/writing-flow/use-selection-observer.js +1 -3
  296. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  297. package/build-module/components/writing-flow/use-tab-nav.js +1 -1
  298. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  299. package/build-module/elements/index.js +7 -1
  300. package/build-module/elements/index.js.map +1 -1
  301. package/build-module/hooks/aria-label.js +59 -0
  302. package/build-module/hooks/aria-label.js.map +1 -0
  303. package/build-module/hooks/color.js +2 -3
  304. package/build-module/hooks/color.js.map +1 -1
  305. package/build-module/hooks/duotone.js +22 -140
  306. package/build-module/hooks/duotone.js.map +1 -1
  307. package/build-module/hooks/index.js +2 -1
  308. package/build-module/hooks/index.js.map +1 -1
  309. package/build-module/hooks/layout.js +60 -19
  310. package/build-module/hooks/layout.js.map +1 -1
  311. package/build-module/hooks/style.js +44 -35
  312. package/build-module/hooks/style.js.map +1 -1
  313. package/build-module/hooks/utils.js +5 -2
  314. package/build-module/hooks/utils.js.map +1 -1
  315. package/build-module/index.js +1 -1
  316. package/build-module/index.js.map +1 -1
  317. package/build-module/layouts/flex.js +43 -35
  318. package/build-module/layouts/flex.js.map +1 -1
  319. package/build-module/layouts/flow.js +35 -38
  320. package/build-module/layouts/flow.js.map +1 -1
  321. package/build-module/layouts/utils.js +33 -3
  322. package/build-module/layouts/utils.js.map +1 -1
  323. package/build-module/store/actions.js +14 -20
  324. package/build-module/store/actions.js.map +1 -1
  325. package/build-module/store/index.js +0 -4
  326. package/build-module/store/index.js.map +1 -1
  327. package/build-module/store/reducer.js +23 -11
  328. package/build-module/store/reducer.js.map +1 -1
  329. package/build-module/store/selectors.js +4 -4
  330. package/build-module/store/selectors.js.map +1 -1
  331. package/build-module/utils/selection.js +24 -0
  332. package/build-module/utils/selection.js.map +1 -0
  333. package/build-style/style-rtl.css +43 -13
  334. package/build-style/style.css +43 -13
  335. package/package.json +28 -28
  336. package/src/components/block-draggable/test/helpers.native.js +3 -3
  337. package/src/components/block-list/block-invalid-warning.native.js +42 -7
  338. package/src/components/block-list/block.js +2 -2
  339. package/src/components/block-list/block.native.js +1 -0
  340. package/src/components/block-list/index.native.js +1 -1
  341. package/src/components/block-list/layout.js +15 -3
  342. package/src/components/block-list/style.scss +2 -2
  343. package/src/components/block-list/use-block-props/use-block-class-names.js +5 -1
  344. package/src/components/block-lock/modal.js +47 -9
  345. package/src/components/block-lock/style.scss +10 -0
  346. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  347. package/src/components/block-mover/mover-description.js +131 -48
  348. package/src/components/block-mover/test/mover-description.js +55 -3
  349. package/src/components/block-pattern-setup/index.js +5 -25
  350. package/src/components/block-pattern-setup/setup-toolbar.js +2 -9
  351. package/src/components/block-pattern-setup/style.scss +4 -2
  352. package/src/components/block-popover/inbetween.js +1 -1
  353. package/src/components/block-popover/index.js +1 -1
  354. package/src/components/block-preview/auto.js +17 -3
  355. package/src/components/block-settings-menu/block-edit-visually-button.js +52 -0
  356. package/src/components/block-settings-menu/block-mode-toggle.js +1 -0
  357. package/src/components/block-settings-menu/block-settings-dropdown.js +7 -3
  358. package/src/components/block-settings-menu/index.js +15 -11
  359. package/src/components/block-settings-menu-controls/index.js +5 -4
  360. package/src/components/block-styles/preview.native.js +1 -0
  361. package/src/components/block-switcher/index.js +7 -1
  362. package/src/components/block-title/index.js +3 -2
  363. package/src/components/block-title/use-block-display-title.js +20 -12
  364. package/src/components/block-tools/block-contextual-toolbar.js +3 -1
  365. package/src/components/block-tools/block-selection-button.js +0 -5
  366. package/src/components/block-tools/index.js +4 -1
  367. package/src/components/block-types-list/index.native.js +76 -24
  368. package/src/components/block-types-list/style.native.scss +18 -0
  369. package/src/components/border-radius-control/index.js +2 -0
  370. package/src/components/color-palette/test/__snapshots__/control.js.snap +0 -4
  371. package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
  372. package/src/components/colors/test/with-colors.js +1 -1
  373. package/src/components/colors/with-colors.js +2 -2
  374. package/src/components/colors-gradients/control.js +78 -65
  375. package/src/components/colors-gradients/dropdown.js +9 -2
  376. package/src/components/colors-gradients/style.scss +11 -8
  377. package/src/components/colors-gradients/test/control.js +16 -23
  378. package/src/components/date-format-picker/index.js +1 -0
  379. package/src/components/duotone/components.js +133 -0
  380. package/src/components/duotone/index.js +7 -0
  381. package/src/components/duotone/utils.js +25 -0
  382. package/src/components/duotone-control/index.js +12 -7
  383. package/src/components/duotone-control/style.scss +5 -0
  384. package/src/components/iframe/index.js +25 -6
  385. package/src/components/image-editor/cropper.js +9 -3
  386. package/src/components/image-editor/index.js +2 -0
  387. package/src/components/index.js +1 -0
  388. package/src/components/inserter/block-types-tab.native.js +42 -21
  389. package/src/components/inserter/index.js +3 -5
  390. package/src/components/inserter/preview-panel.js +6 -14
  391. package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
  392. package/src/components/inserter/search-results.native.js +4 -2
  393. package/src/components/inserter/style.scss +1 -1
  394. package/src/components/inserter/test/block-types-tab.native.js +2 -0
  395. package/src/components/inserter/test/utils.native.js +37 -0
  396. package/src/components/inserter/utils.native.js +11 -0
  397. package/src/components/inserter-list-item/index.js +4 -1
  398. package/src/components/link-control/index.js +1 -0
  399. package/src/components/link-control/test/fixtures/index.js +3 -4
  400. package/src/components/link-control/test/index.js +64 -73
  401. package/src/components/list-view/block-select-button.js +29 -14
  402. package/src/components/list-view/branch.js +1 -6
  403. package/src/components/list-view/drop-indicator.js +1 -1
  404. package/src/components/list-view/style.scss +18 -4
  405. package/src/components/media-placeholder/index.js +20 -0
  406. package/src/components/media-placeholder/index.native.js +9 -5
  407. package/src/components/media-replace-flow/index.js +5 -14
  408. package/src/components/media-replace-flow/test/index.js +14 -4
  409. package/src/components/media-upload/README.md +8 -0
  410. package/src/components/observe-typing/index.js +17 -14
  411. package/src/components/publish-date-time-picker/index.js +2 -0
  412. package/src/components/responsive-block-control/README.md +3 -1
  413. package/src/components/responsive-block-control/test/index.js +1 -2
  414. package/src/components/rich-text/format-toolbar-container.js +63 -14
  415. package/src/components/rich-text/index.js +1 -0
  416. package/src/components/rich-text/use-format-types.js +38 -17
  417. package/src/components/rich-text/use-input-rules.js +6 -15
  418. package/src/components/rich-text/use-paste-handler.js +17 -5
  419. package/src/components/url-popover/index.js +1 -0
  420. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -0
  421. package/src/components/writing-flow/use-arrow-nav.js +32 -1
  422. package/src/components/writing-flow/use-multi-selection.js +1 -48
  423. package/src/components/writing-flow/use-selection-observer.js +2 -3
  424. package/src/components/writing-flow/use-tab-nav.js +1 -1
  425. package/src/elements/index.js +8 -1
  426. package/src/elements/test/index.js +18 -0
  427. package/src/hooks/aria-label.js +67 -0
  428. package/src/hooks/color.js +10 -3
  429. package/src/hooks/duotone.js +18 -139
  430. package/src/hooks/index.js +2 -1
  431. package/src/hooks/layout.js +77 -29
  432. package/src/hooks/style.js +46 -39
  433. package/src/hooks/utils.js +7 -3
  434. package/src/index.js +1 -1
  435. package/src/layouts/flex.js +49 -43
  436. package/src/layouts/flow.js +35 -34
  437. package/src/layouts/test/flex.js +21 -0
  438. package/src/layouts/test/flow.js +21 -0
  439. package/src/layouts/test/utils.js +138 -0
  440. package/src/layouts/utils.js +44 -3
  441. package/src/store/actions.js +17 -31
  442. package/src/store/index.js +0 -4
  443. package/src/store/reducer.js +24 -11
  444. package/src/store/selectors.js +3 -4
  445. package/src/store/test/reducer.js +138 -10
  446. package/src/store/test/selectors.js +3 -6
  447. package/src/utils/selection.js +26 -0
  448. package/src/utils/test/selection.js +39 -0
  449. package/tsconfig.json +2 -1
@@ -7,16 +7,13 @@ import { every, isEmpty } from 'lodash';
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import { useState } from '@wordpress/element';
11
10
  import {
12
11
  BaseControl,
13
12
  __experimentalVStack as VStack,
14
- __experimentalToggleGroupControl as ToggleGroupControl,
15
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
13
+ TabPanel,
16
14
  ColorPalette,
17
15
  GradientPicker,
18
16
  } from '@wordpress/components';
19
- import { __ } from '@wordpress/i18n';
20
17
 
21
18
  /**
22
19
  * Internal dependencies
@@ -30,6 +27,19 @@ const colorsAndGradientKeys = [
30
27
  'disableCustomGradients',
31
28
  ];
32
29
 
30
+ const TAB_COLOR = {
31
+ name: 'color',
32
+ title: 'Solid color',
33
+ value: 'color',
34
+ };
35
+ const TAB_GRADIENT = {
36
+ name: 'gradient',
37
+ title: 'Gradient',
38
+ value: 'gradient',
39
+ };
40
+
41
+ const TABS_SETTINGS = [ TAB_COLOR, TAB_GRADIENT ];
42
+
33
43
  function ColorGradientControlInner( {
34
44
  colors,
35
45
  gradients,
@@ -52,15 +62,60 @@ function ColorGradientControlInner( {
52
62
  const canChooseAGradient =
53
63
  onGradientChange &&
54
64
  ( ! isEmpty( gradients ) || ! disableCustomGradients );
55
- const [ currentTab, setCurrentTab ] = useState(
56
- gradientValue ? 'gradient' : !! canChooseAColor && 'color'
57
- );
58
65
 
59
66
  if ( ! canChooseAColor && ! canChooseAGradient ) {
60
67
  return null;
61
68
  }
69
+
70
+ const tabPanels = {
71
+ [ TAB_COLOR.value ]: (
72
+ <ColorPalette
73
+ value={ colorValue }
74
+ onChange={
75
+ canChooseAGradient
76
+ ? ( newColor ) => {
77
+ onColorChange( newColor );
78
+ onGradientChange();
79
+ }
80
+ : onColorChange
81
+ }
82
+ { ...{ colors, disableCustomColors } }
83
+ __experimentalHasMultipleOrigins={
84
+ __experimentalHasMultipleOrigins
85
+ }
86
+ __experimentalIsRenderedInSidebar={
87
+ __experimentalIsRenderedInSidebar
88
+ }
89
+ clearable={ clearable }
90
+ enableAlpha={ enableAlpha }
91
+ />
92
+ ),
93
+ [ TAB_GRADIENT.value ]: (
94
+ <GradientPicker
95
+ value={ gradientValue }
96
+ onChange={
97
+ canChooseAColor
98
+ ? ( newGradient ) => {
99
+ onGradientChange( newGradient );
100
+ onColorChange();
101
+ }
102
+ : onGradientChange
103
+ }
104
+ { ...{ gradients, disableCustomGradients } }
105
+ __experimentalHasMultipleOrigins={
106
+ __experimentalHasMultipleOrigins
107
+ }
108
+ __experimentalIsRenderedInSidebar={
109
+ __experimentalIsRenderedInSidebar
110
+ }
111
+ clearable={ clearable }
112
+ />
113
+ ),
114
+ };
115
+
62
116
  return (
63
117
  <BaseControl
118
+ __nextHasNoMarginBottom
64
119
  className={ classnames(
65
120
  'block-editor-color-gradient-control',
66
121
  className
@@ -78,66 +133,24 @@ function ColorGradientControlInner( {
78
133
  </legend>
79
134
  ) }
80
135
  { canChooseAColor && canChooseAGradient && (
81
- <ToggleGroupControl
82
- value={ currentTab }
83
- onChange={ setCurrentTab }
84
- label={ __( 'Select color type' ) }
85
- hideLabelFromVision
86
- isBlock
87
- >
88
- <ToggleGroupControlOption
89
- value="color"
90
- label={ __( 'Solid' ) }
91
- />
92
- <ToggleGroupControlOption
93
- value="gradient"
94
- label={ __( 'Gradient' ) }
95
- />
96
- </ToggleGroupControl>
97
- ) }
98
- { ( currentTab === 'color' || ! canChooseAGradient ) && (
99
- <ColorPalette
100
- value={ colorValue }
101
- onChange={
102
- canChooseAGradient
103
- ? ( newColor ) => {
104
- onColorChange( newColor );
105
- onGradientChange();
106
- }
107
- : onColorChange
136
+ <TabPanel
137
+ className="block-editor-color-gradient-control__tabs"
138
+ tabs={ TABS_SETTINGS }
139
+ initialTabName={
140
+ gradientValue
141
+ ? TAB_GRADIENT.value
142
+ : !! canChooseAColor && TAB_COLOR.value
108
143
  }
109
- { ...{ colors, disableCustomColors } }
110
- __experimentalHasMultipleOrigins={
111
- __experimentalHasMultipleOrigins
112
- }
113
- __experimentalIsRenderedInSidebar={
114
- __experimentalIsRenderedInSidebar
115
- }
116
- clearable={ clearable }
117
- enableAlpha={ enableAlpha }
118
- />
119
- ) }
120
- { ( currentTab === 'gradient' || ! canChooseAColor ) && (
121
- <GradientPicker
122
- value={ gradientValue }
123
- onChange={
124
- canChooseAColor
125
- ? ( newGradient ) => {
126
- onGradientChange( newGradient );
127
- onColorChange();
128
- }
129
- : onGradientChange
130
- }
131
- { ...{ gradients, disableCustomGradients } }
132
- __experimentalHasMultipleOrigins={
133
- __experimentalHasMultipleOrigins
134
- }
135
- __experimentalIsRenderedInSidebar={
136
- __experimentalIsRenderedInSidebar
137
- }
138
- clearable={ clearable }
139
- />
144
+ >
145
+ { ( tab ) => (
146
+ <div className="block-editor-color-gradient-control__tab-panel">
147
+ { tabPanels[ tab.value ] }
148
+ </div>
149
+ ) }
150
+ </TabPanel>
140
151
  ) }
152
+ { ! canChooseAGradient && tabPanels[ TAB_COLOR.value ] }
153
+ { ! canChooseAColor && tabPanels[ TAB_GRADIENT.value ] }
141
154
  </VStack>
142
155
  </fieldset>
143
156
  </BaseControl>
@@ -11,6 +11,7 @@ import {
11
11
  ColorIndicator,
12
12
  Dropdown,
13
13
  FlexItem,
14
+ __experimentalDropdownContentWrapper as DropdownContentWrapper,
14
15
  __experimentalHStack as HStack,
15
16
  __experimentalToolsPanelItem as ToolsPanelItem,
16
17
  } from '@wordpress/components';
@@ -114,6 +115,7 @@ export default function ColorGradientSettingsDropdown( {
114
115
  popoverProps = {
115
116
  placement: 'left-start',
116
117
  offset: 36,
118
+ __unstableShift: true,
117
119
  };
118
120
  }
119
121
 
@@ -154,10 +156,15 @@ export default function ColorGradientSettingsDropdown( {
154
156
  <Dropdown
155
157
  popoverProps={ popoverProps }
156
158
  className="block-editor-tools-panel-color-gradient-settings__dropdown"
157
- contentClassName="block-editor-panel-color-gradient-settings__dropdown-content"
158
159
  renderToggle={ renderToggle( toggleSettings ) }
159
160
  renderContent={ () => (
160
- <ColorGradientControl { ...controlProps } />
161
+ <DropdownContentWrapper paddingSize="medium">
162
+ <div className="block-editor-panel-color-gradient-settings__dropdown-content">
163
+ <ColorGradientControl
164
+ { ...controlProps }
165
+ />
166
+ </div>
167
+ </DropdownContentWrapper>
161
168
  ) }
162
169
  />
163
170
  </WithToolsPanelItem>
@@ -1,3 +1,8 @@
1
+ // Must equal $color-palette-circle-size from:
2
+ // @wordpress/components/src/circular-option-picker/style.scss
3
+ $swatch-size: 28px;
4
+ $swatch-gap: 12px;
5
+
1
6
  .block-editor-color-gradient-control {
2
7
  .block-editor-color-gradient-control__color-indicator {
3
8
  margin-bottom: $grid-unit-15;
@@ -18,11 +23,6 @@
18
23
  }
19
24
 
20
25
  .block-editor-panel-color-gradient-settings {
21
-
22
- // Must equal $color-palette-circle-size from:
23
- // @wordpress/components/src/circular-option-picker/style.scss
24
- $swatch-size: 28px;
25
-
26
26
  @media screen and (min-width: $break-medium) {
27
27
  .components-circular-option-picker__swatches {
28
28
  display: grid;
@@ -40,11 +40,10 @@
40
40
 
41
41
  }
42
42
 
43
- .block-editor-panel-color-gradient-settings__dropdown-content .components-popover__content {
44
- width: $sidebar-width;
43
+ .block-editor-panel-color-gradient-settings__dropdown-content {
44
+ width: ( $swatch-size * 6 ) + ( $swatch-gap * 5 ); // Ensure the popover perfectly wraps the swatches.
45
45
  }
46
46
 
47
-
48
47
  .block-editor-panel-color-gradient-settings__color-indicator {
49
48
  // Show a diagonal line (crossed out) for empty swatches.
50
49
  background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%);
@@ -100,3 +99,7 @@
100
99
  .block-editor-panel-color-gradient-settings__dropdown {
101
100
  width: 100%;
102
101
  }
102
+
103
+ .block-editor-color-gradient-control__tab-panel {
104
+ padding-top: $grid-unit-10;
105
+ }
@@ -20,17 +20,6 @@ const getButtonWithAriaLabelStartPredicate =
20
20
  );
21
21
  };
22
22
 
23
- const getTabWithTestPredicate = ( text ) => ( element ) => {
24
- return (
25
- element.type === 'button' &&
26
- element.props[ 'aria-label' ] &&
27
- element.props[ 'aria-label' ] === text
28
- );
29
- };
30
-
31
- const colorTabButtonPredicate = getTabWithTestPredicate( 'Solid' );
32
- const gradientTabButtonPredicate = getTabWithTestPredicate( 'Gradient' );
33
-
34
23
  describe( 'ColorPaletteControl', () => {
35
24
  it( 'renders tabs if it is possible to select a color and a gradient rendering a color picker at the start', async () => {
36
25
  render(
@@ -63,8 +52,12 @@ describe( 'ColorPaletteControl', () => {
63
52
  );
64
53
 
65
54
  // Is showing the two tab buttons.
66
- expect( screen.queryByLabelText( 'Solid' ) ).toBeInTheDocument();
67
- expect( screen.queryByLabelText( 'Gradient' ) ).toBeInTheDocument();
55
+ expect(
56
+ screen.getByRole( 'tab', { name: 'Solid color' } )
57
+ ).toBeInTheDocument();
58
+ expect(
59
+ screen.getByRole( 'tab', { name: 'Gradient' } )
60
+ ).toBeInTheDocument();
68
61
 
69
62
  // Is showing the two predefined Colors.
70
63
  expect( screen.getAllByLabelText( /^Color:/ ) ).toHaveLength( 2 );
@@ -92,12 +85,12 @@ describe( 'ColorPaletteControl', () => {
92
85
  } );
93
86
 
94
87
  // Is not showing the two tab buttons.
95
- expect( wrapper.root.findAll( colorTabButtonPredicate ) ).toHaveLength(
96
- 0
97
- );
98
88
  expect(
99
- wrapper.root.findAll( gradientTabButtonPredicate )
100
- ).toHaveLength( 0 );
89
+ screen.queryByRole( 'tab', { name: 'Solid color' } )
90
+ ).not.toBeInTheDocument();
91
+ expect(
92
+ screen.queryByRole( 'tab', { name: 'Gradient' } )
93
+ ).not.toBeInTheDocument();
101
94
 
102
95
  // Is showing the two predefined Colors.
103
96
  expect(
@@ -139,12 +132,12 @@ describe( 'ColorPaletteControl', () => {
139
132
  } );
140
133
 
141
134
  // Is not showing the two tab buttons.
142
- expect( wrapper.root.findAll( colorTabButtonPredicate ) ).toHaveLength(
143
- 0
144
- );
145
135
  expect(
146
- wrapper.root.findAll( gradientTabButtonPredicate )
147
- ).toHaveLength( 0 );
136
+ screen.queryByRole( 'tab', { name: 'Solid color' } )
137
+ ).not.toBeInTheDocument();
138
+ expect(
139
+ screen.queryByRole( 'tab', { name: 'Gradient' } )
140
+ ).not.toBeInTheDocument();
148
141
 
149
142
  // Is showing the two predefined Gradients.
150
143
  expect(
@@ -90,6 +90,7 @@ function NonDefaultControls( { format, onChange } ) {
90
90
  _x( 'M j, Y', 'medium date format' ),
91
91
  _x( 'M j, Y g:i A', 'medium date format with time' ),
92
92
  _x( 'F j, Y', 'long date format' ),
93
+ _x( 'M j', 'short date format without the year' ),
93
94
  ] );
94
95
 
95
96
  const suggestedOptions = suggestedFormats.map(
@@ -0,0 +1,133 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { SVG } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { __unstableGetValuesFromColors as getValuesFromColors } from './index';
10
+
11
+ /**
12
+ * SVG and stylesheet needed for rendering the duotone filter.
13
+ *
14
+ * @param {Object} props Duotone props.
15
+ * @param {string} props.selector Selector to apply the filter to.
16
+ * @param {string} props.id Unique id for this duotone filter.
17
+ *
18
+ * @return {WPElement} Duotone element.
19
+ */
20
+ export function DuotoneStylesheet( { selector, id } ) {
21
+ const css = `
22
+ ${ selector } {
23
+ filter: url( #${ id } );
24
+ }
25
+ `;
26
+ return <style>{ css }</style>;
27
+ }
28
+
29
+ /**
30
+ * Stylesheet for disabling a global styles duotone filter.
31
+ *
32
+ * @param {Object} props Duotone props.
33
+ * @param {string} props.selector Selector to disable the filter for.
34
+ *
35
+ * @return {WPElement} Filter none style element.
36
+ */
37
+ export function DuotoneUnsetStylesheet( { selector } ) {
38
+ const css = `
39
+ ${ selector } {
40
+ filter: none;
41
+ }
42
+ `;
43
+ return <style>{ css }</style>;
44
+ }
45
+
46
+ /**
47
+ * The SVG part of the duotone filter.
48
+ *
49
+ * @param {Object} props Duotone props.
50
+ * @param {string} props.id Unique id for this duotone filter.
51
+ * @param {string[]} props.colors Color strings from dark to light.
52
+ *
53
+ * @return {WPElement} Duotone SVG.
54
+ */
55
+ export function DuotoneFilter( { id, colors } ) {
56
+ const values = getValuesFromColors( colors );
57
+ return (
58
+ <SVG
59
+ xmlnsXlink="http://www.w3.org/1999/xlink"
60
+ viewBox="0 0 0 0"
61
+ width="0"
62
+ height="0"
63
+ focusable="false"
64
+ role="none"
65
+ style={ {
66
+ visibility: 'hidden',
67
+ position: 'absolute',
68
+ left: '-9999px',
69
+ overflow: 'hidden',
70
+ } }
71
+ >
72
+ <defs>
73
+ <filter id={ id }>
74
+ <feColorMatrix
75
+ // Use sRGB instead of linearRGB so transparency looks correct.
76
+ colorInterpolationFilters="sRGB"
77
+ type="matrix"
78
+ // Use perceptual brightness to convert to grayscale.
79
+ values="
80
+ .299 .587 .114 0 0
81
+ .299 .587 .114 0 0
82
+ .299 .587 .114 0 0
83
+ .299 .587 .114 0 0
84
+ "
85
+ />
86
+ <feComponentTransfer
87
+ // Use sRGB instead of linearRGB to be consistent with how CSS gradients work.
88
+ colorInterpolationFilters="sRGB"
89
+ >
90
+ <feFuncR
91
+ type="table"
92
+ tableValues={ values.r.join( ' ' ) }
93
+ />
94
+ <feFuncG
95
+ type="table"
96
+ tableValues={ values.g.join( ' ' ) }
97
+ />
98
+ <feFuncB
99
+ type="table"
100
+ tableValues={ values.b.join( ' ' ) }
101
+ />
102
+ <feFuncA
103
+ type="table"
104
+ tableValues={ values.a.join( ' ' ) }
105
+ />
106
+ </feComponentTransfer>
107
+ <feComposite
108
+ // Re-mask the image with the original transparency since the feColorMatrix above loses that information.
109
+ in2="SourceGraphic"
110
+ operator="in"
111
+ />
112
+ </filter>
113
+ </defs>
114
+ </SVG>
115
+ );
116
+ }
117
+
118
+ /**
119
+ * SVG from a duotone preset
120
+ *
121
+ * @param {Object} props Duotone props.
122
+ * @param {Object} props.preset Duotone preset settings.
123
+ *
124
+ * @return {WPElement} Duotone element.
125
+ */
126
+ export function PresetDuotoneFilter( { preset } ) {
127
+ return (
128
+ <DuotoneFilter
129
+ id={ `wp-duotone-${ preset.slug }` }
130
+ colors={ preset.colors }
131
+ />
132
+ );
133
+ }
@@ -0,0 +1,7 @@
1
+ export { getValuesFromColors as __unstableGetValuesFromColors } from './utils';
2
+ export {
3
+ DuotoneFilter as __unstableDuotoneFilter,
4
+ PresetDuotoneFilter as __unstablePresetDuotoneFilter,
5
+ DuotoneStylesheet as __unstableDuotoneStylesheet,
6
+ DuotoneUnsetStylesheet as __unstableDuotoneUnsetStylesheet,
7
+ } from './components';
@@ -0,0 +1,25 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { colord } from 'colord';
5
+
6
+ /**
7
+ * Convert a list of colors to an object of R, G, and B values.
8
+ *
9
+ * @param {string[]} colors Array of RBG color strings.
10
+ *
11
+ * @return {Object} R, G, and B values.
12
+ */
13
+ export function getValuesFromColors( colors = [] ) {
14
+ const values = { r: [], g: [], b: [], a: [] };
15
+
16
+ colors.forEach( ( color ) => {
17
+ const rgbColor = colord( color ).toRgb();
18
+ values.r.push( rgbColor.r / 255 );
19
+ values.g.push( rgbColor.g / 255 );
20
+ values.b.push( rgbColor.b / 255 );
21
+ values.a.push( rgbColor.a );
22
+ } );
23
+
24
+ return values;
25
+ }
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import {
5
+ ColorIndicator,
5
6
  Dropdown,
6
7
  DuotonePicker,
7
8
  DuotoneSwatch,
@@ -20,6 +21,16 @@ function DuotoneControl( {
20
21
  value,
21
22
  onChange,
22
23
  } ) {
24
+ let toolbarIcon;
25
+ if ( value === 'unset' ) {
26
+ toolbarIcon = (
27
+ <ColorIndicator className="block-editor-duotone-control__unset-indicator" />
28
+ );
29
+ } else if ( value ) {
30
+ toolbarIcon = <DuotoneSwatch values={ value } />;
31
+ } else {
32
+ toolbarIcon = <Icon icon={ filter } />;
33
+ }
23
34
  return (
24
35
  <Dropdown
25
36
  popoverProps={ {
@@ -42,13 +53,7 @@ function DuotoneControl( {
42
53
  aria-expanded={ isOpen }
43
54
  onKeyDown={ openOnArrowDown }
44
55
  label={ __( 'Apply duotone filter' ) }
45
- icon={
46
- value ? (
47
- <DuotoneSwatch values={ value } />
48
- ) : (
49
- <Icon icon={ filter } />
50
- )
51
- }
56
+ icon={ toolbarIcon }
52
57
  />
53
58
  );
54
59
  } }
@@ -34,3 +34,8 @@ $swatch-columns: math.floor(math.div($popover-width + $swatch-gap - 2 * $popover
34
34
  margin: $grid-unit-20 0;
35
35
  font-size: $helptext-font-size;
36
36
  }
37
+
38
+ .block-editor-duotone-control__unset-indicator {
39
+ // Show a diagonal line (crossed out) for empty swatches.
40
+ background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%);
41
+ }
@@ -65,12 +65,31 @@ function useStylesCompatibility() {
65
65
  return;
66
66
  }
67
67
 
68
- const isMatch = Array.from( cssRules ).find(
69
- ( { selectorText } ) =>
70
- selectorText &&
71
- ( selectorText.includes( `.${ BODY_CLASS_NAME }` ) ||
72
- selectorText.includes( `.${ BLOCK_PREFIX }` ) )
73
- );
68
+ function matchFromRules( _cssRules ) {
69
+ return Array.from( _cssRules ).find(
70
+ ( {
71
+ selectorText,
72
+ conditionText,
73
+ cssRules: __cssRules,
74
+ } ) => {
75
+ // If the rule is conditional then it will not have selector text.
76
+ // Recurse into child CSS ruleset to determine selector eligibility.
77
+ if ( conditionText ) {
78
+ return matchFromRules( __cssRules );
79
+ }
80
+
81
+ return (
82
+ selectorText &&
83
+ ( selectorText.includes(
84
+ `.${ BODY_CLASS_NAME }`
85
+ ) ||
86
+ selectorText.includes( `.${ BLOCK_PREFIX }` ) )
87
+ );
88
+ }
89
+ );
90
+ }
91
+
92
+ const isMatch = matchFromRules( cssRules );
74
93
 
75
94
  if (
76
95
  isMatch &&
@@ -23,6 +23,7 @@ export default function ImageCropper( {
23
23
  clientWidth,
24
24
  naturalHeight,
25
25
  naturalWidth,
26
+ borderProps,
26
27
  } ) {
27
28
  const {
28
29
  isInProgress,
@@ -44,10 +45,15 @@ export default function ImageCropper( {
44
45
 
45
46
  return (
46
47
  <div
47
- className={ classnames( 'wp-block-image__crop-area', {
48
- 'is-applying': isInProgress,
49
- } ) }
48
+ className={ classnames(
49
+ 'wp-block-image__crop-area',
50
+ borderProps?.className,
51
+ {
52
+ 'is-applying': isInProgress,
53
+ }
54
+ ) }
50
55
  style={ {
56
+ ...borderProps?.style,
51
57
  width: width || clientWidth,
52
58
  height: editedHeight,
53
59
  } }
@@ -20,10 +20,12 @@ export default function ImageEditor( {
20
20
  clientWidth,
21
21
  naturalHeight,
22
22
  naturalWidth,
23
+ borderProps,
23
24
  } ) {
24
25
  return (
25
26
  <>
26
27
  <Cropper
28
+ borderProps={ borderProps }
27
29
  url={ url }
28
30
  width={ width }
29
31
  height={ height }
@@ -5,6 +5,7 @@
5
5
  export * from './colors';
6
6
  export * from './gradients';
7
7
  export * from './font-sizes';
8
+ export * from './duotone';
8
9
  export { AlignmentControl, AlignmentToolbar } from './alignment-control';
9
10
  export { default as Autocomplete } from './autocomplete';
10
11
  export {