@wordpress/block-editor 13.2.0 → 13.4.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 (538) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +0 -5
  3. package/build/components/alignment-control/ui.js +2 -2
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/ui.js +1 -1
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +1 -1
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -1
  9. package/build/components/block-breadcrumb/index.js +12 -1
  10. package/build/components/block-breadcrumb/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +6 -3
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/use-block-props/index.js +3 -1
  14. package/build/components/block-list/use-block-props/index.js.map +1 -1
  15. package/build/components/block-list/use-block-props/use-block-refs.js +9 -2
  16. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  17. package/build/components/block-list/use-block-props/use-is-hovered.js +25 -9
  18. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  19. package/build/components/block-list/use-in-between-inserter.js +3 -2
  20. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  21. package/build/components/block-lock/modal.js +2 -0
  22. package/build/components/block-lock/modal.js.map +1 -1
  23. package/build/components/block-lock/toolbar.js +0 -1
  24. package/build/components/block-lock/toolbar.js.map +1 -1
  25. package/build/components/block-mover/button.js +1 -1
  26. package/build/components/block-mover/button.js.map +1 -1
  27. package/build/components/block-mover/index.js +1 -1
  28. package/build/components/block-mover/index.js.map +1 -1
  29. package/build/components/block-pattern-setup/setup-toolbar.js +2 -2
  30. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  31. package/build/components/block-patterns-paging/index.js +5 -7
  32. package/build/components/block-patterns-paging/index.js.map +1 -1
  33. package/build/components/block-quick-navigation/index.js +20 -17
  34. package/build/components/block-quick-navigation/index.js.map +1 -1
  35. package/build/components/block-removal-warning-modal/index.js +2 -0
  36. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  37. package/build/components/block-rename/modal.js +4 -12
  38. package/build/components/block-rename/modal.js.map +1 -1
  39. package/build/components/block-switcher/index.js +1 -1
  40. package/build/components/block-switcher/index.js.map +1 -1
  41. package/build/components/block-switcher/pattern-transformations-menu.js +11 -12
  42. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  43. package/build/components/block-switcher/preview-block-popover.js +20 -17
  44. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  45. package/build/components/block-toolbar/shuffle.js +6 -2
  46. package/build/components/block-toolbar/shuffle.js.map +1 -1
  47. package/build/components/block-tools/block-selection-button.js +7 -58
  48. package/build/components/block-tools/block-selection-button.js.map +1 -1
  49. package/build/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  50. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  51. package/build/components/block-tools/index.js +14 -1
  52. package/build/components/block-tools/index.js.map +1 -1
  53. package/build/components/block-tools/use-show-block-tools.js +9 -8
  54. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  55. package/build/components/block-tools/zoom-out-mode-inserter-button.js +45 -0
  56. package/build/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  57. package/build/components/block-tools/zoom-out-mode-inserters.js +29 -28
  58. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  59. package/build/components/block-tools/zoom-out-popover.js +58 -0
  60. package/build/components/block-tools/zoom-out-popover.js.map +1 -0
  61. package/build/components/block-tools/zoom-out-toolbar.js +138 -0
  62. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -0
  63. package/build/components/button-block-appender/index.js +3 -1
  64. package/build/components/button-block-appender/index.js.map +1 -1
  65. package/build/components/child-layout-control/index.js +26 -18
  66. package/build/components/child-layout-control/index.js.map +1 -1
  67. package/build/components/date-format-picker/index.js +1 -1
  68. package/build/components/date-format-picker/index.js.map +1 -1
  69. package/build/components/default-block-appender/index.js +7 -4
  70. package/build/components/default-block-appender/index.js.map +1 -1
  71. package/build/components/dimensions-tool/index.js +6 -4
  72. package/build/components/dimensions-tool/index.js.map +1 -1
  73. package/build/components/font-appearance-control/index.js +22 -62
  74. package/build/components/font-appearance-control/index.js.map +1 -1
  75. package/build/components/global-styles/background-panel.js +185 -116
  76. package/build/components/global-styles/background-panel.js.map +1 -1
  77. package/build/components/global-styles/border-panel.js +2 -1
  78. package/build/components/global-styles/border-panel.js.map +1 -1
  79. package/build/components/global-styles/color-panel.js +2 -1
  80. package/build/components/global-styles/color-panel.js.map +1 -1
  81. package/build/components/global-styles/dimensions-panel.js +2 -1
  82. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  83. package/build/components/global-styles/filters-panel.js +2 -1
  84. package/build/components/global-styles/filters-panel.js.map +1 -1
  85. package/build/components/global-styles/hooks.js +13 -1
  86. package/build/components/global-styles/hooks.js.map +1 -1
  87. package/build/components/global-styles/image-settings-panel.js +2 -1
  88. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  89. package/build/components/global-styles/typography-panel.js +45 -24
  90. package/build/components/global-styles/typography-panel.js.map +1 -1
  91. package/build/components/global-styles/typography-utils.js +121 -0
  92. package/build/components/global-styles/typography-utils.js.map +1 -1
  93. package/build/components/global-styles/use-global-styles-output.js +47 -13
  94. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  95. package/build/components/global-styles/utils.js +17 -7
  96. package/build/components/global-styles/utils.js.map +1 -1
  97. package/build/components/grid/grid-item-movers.js +90 -48
  98. package/build/components/grid/grid-item-movers.js.map +1 -1
  99. package/build/components/grid/grid-item-resizer.js +2 -2
  100. package/build/components/grid/grid-item-resizer.js.map +1 -1
  101. package/build/components/grid/grid-visualizer.js +117 -37
  102. package/build/components/grid/grid-visualizer.js.map +1 -1
  103. package/build/components/grid/use-grid-layout-sync.js +60 -41
  104. package/build/components/grid/use-grid-layout-sync.js.map +1 -1
  105. package/build/components/index.js +1 -9
  106. package/build/components/index.js.map +1 -1
  107. package/build/components/inner-blocks/index.js +2 -2
  108. package/build/components/inner-blocks/index.js.map +1 -1
  109. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  110. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  111. package/build/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  112. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  113. package/build/components/inserter/media-tab/media-panel.js +1 -0
  114. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  115. package/build/components/inserter/menu.js +26 -4
  116. package/build/components/inserter/menu.js.map +1 -1
  117. package/build/components/inserter/preview-panel.js +20 -3
  118. package/build/components/inserter/preview-panel.js.map +1 -1
  119. package/build/components/inserter/quick-inserter.js +2 -1
  120. package/build/components/inserter/quick-inserter.js.map +1 -1
  121. package/build/components/inserter-draggable-blocks/index.js +10 -3
  122. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  123. package/build/components/inspector-controls/block-support-tools-panel.js +2 -1
  124. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  125. package/build/components/inspector-controls-tabs/settings-tab.js +1 -2
  126. package/build/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  127. package/build/components/link-control/link-preview.js +1 -1
  128. package/build/components/link-control/link-preview.js.map +1 -1
  129. package/build/components/list-view/block-select-button.js +2 -6
  130. package/build/components/list-view/block-select-button.js.map +1 -1
  131. package/build/components/list-view/block.js +2 -2
  132. package/build/components/list-view/block.js.map +1 -1
  133. package/build/components/list-view/utils.js +3 -1
  134. package/build/components/list-view/utils.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +19 -23
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/navigable-toolbar/index.js +3 -1
  138. package/build/components/navigable-toolbar/index.js.map +1 -1
  139. package/build/components/rich-text/format-toolbar/index.js +1 -1
  140. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  141. package/build/components/rich-text/index.js +1 -1
  142. package/build/components/rich-text/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  144. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  145. package/build/components/tabbed-sidebar/index.js +66 -0
  146. package/build/components/tabbed-sidebar/index.js.map +1 -0
  147. package/build/components/url-popover/image-url-input-ui.js +3 -3
  148. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  149. package/build/components/url-popover/index.js +3 -0
  150. package/build/components/url-popover/index.js.map +1 -1
  151. package/build/hooks/background.js +26 -4
  152. package/build/hooks/background.js.map +1 -1
  153. package/build/hooks/block-hooks.js +11 -17
  154. package/build/hooks/block-hooks.js.map +1 -1
  155. package/build/hooks/block-style-variation.js +169 -4
  156. package/build/hooks/block-style-variation.js.map +1 -1
  157. package/build/hooks/duotone.js +16 -11
  158. package/build/hooks/duotone.js.map +1 -1
  159. package/build/hooks/grid-visualizer.js +62 -0
  160. package/build/hooks/grid-visualizer.js.map +1 -0
  161. package/build/hooks/index.js +15 -2
  162. package/build/hooks/index.js.map +1 -1
  163. package/build/hooks/layout-child.js +47 -23
  164. package/build/hooks/layout-child.js.map +1 -1
  165. package/build/hooks/position.js +4 -15
  166. package/build/hooks/position.js.map +1 -1
  167. package/build/hooks/use-bindings-attributes.js +96 -55
  168. package/build/hooks/use-bindings-attributes.js.map +1 -1
  169. package/build/hooks/utils.js +2 -0
  170. package/build/hooks/utils.js.map +1 -1
  171. package/build/layouts/constrained.js +50 -4
  172. package/build/layouts/constrained.js.map +1 -1
  173. package/build/layouts/grid.js +92 -51
  174. package/build/layouts/grid.js.map +1 -1
  175. package/build/private-apis.js +6 -4
  176. package/build/private-apis.js.map +1 -1
  177. package/build/store/actions.js +18 -1
  178. package/build/store/actions.js.map +1 -1
  179. package/build/store/defaults.js +0 -2
  180. package/build/store/defaults.js.map +1 -1
  181. package/build/store/defaults.native.js +0 -3
  182. package/build/store/defaults.native.js.map +1 -1
  183. package/build/store/private-keys.js +2 -1
  184. package/build/store/private-keys.js.map +1 -1
  185. package/build/store/reducer.js +19 -1
  186. package/build/store/reducer.js.map +1 -1
  187. package/build/store/selectors.js +13 -1
  188. package/build/store/selectors.js.map +1 -1
  189. package/build/utils/format-font-style.js +45 -0
  190. package/build/utils/format-font-style.js.map +1 -0
  191. package/build/utils/format-font-weight.js +68 -0
  192. package/build/utils/format-font-weight.js.map +1 -0
  193. package/build/utils/get-editor-region.js +34 -0
  194. package/build/utils/get-editor-region.js.map +1 -0
  195. package/build/utils/get-font-styles-and-weights.js +167 -0
  196. package/build/utils/get-font-styles-and-weights.js.map +1 -0
  197. package/build/utils/pasting.js +5 -13
  198. package/build/utils/pasting.js.map +1 -1
  199. package/build-module/components/alignment-control/ui.js +2 -2
  200. package/build-module/components/alignment-control/ui.js.map +1 -1
  201. package/build-module/components/block-alignment-control/ui.js +1 -1
  202. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  203. package/build-module/components/block-alignment-control/ui.native.js +1 -1
  204. package/build-module/components/block-alignment-control/ui.native.js.map +1 -1
  205. package/build-module/components/block-breadcrumb/index.js +12 -1
  206. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  207. package/build-module/components/block-inspector/index.js +6 -3
  208. package/build-module/components/block-inspector/index.js.map +1 -1
  209. package/build-module/components/block-list/use-block-props/index.js +3 -1
  210. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  211. package/build-module/components/block-list/use-block-props/use-block-refs.js +11 -4
  212. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  213. package/build-module/components/block-list/use-block-props/use-is-hovered.js +26 -9
  214. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  215. package/build-module/components/block-list/use-in-between-inserter.js +3 -2
  216. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  217. package/build-module/components/block-lock/modal.js +2 -0
  218. package/build-module/components/block-lock/modal.js.map +1 -1
  219. package/build-module/components/block-lock/toolbar.js +0 -1
  220. package/build-module/components/block-lock/toolbar.js.map +1 -1
  221. package/build-module/components/block-mover/button.js +1 -1
  222. package/build-module/components/block-mover/button.js.map +1 -1
  223. package/build-module/components/block-mover/index.js +1 -1
  224. package/build-module/components/block-mover/index.js.map +1 -1
  225. package/build-module/components/block-pattern-setup/setup-toolbar.js +2 -2
  226. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  227. package/build-module/components/block-patterns-paging/index.js +5 -7
  228. package/build-module/components/block-patterns-paging/index.js.map +1 -1
  229. package/build-module/components/block-quick-navigation/index.js +20 -17
  230. package/build-module/components/block-quick-navigation/index.js.map +1 -1
  231. package/build-module/components/block-removal-warning-modal/index.js +2 -0
  232. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  233. package/build-module/components/block-rename/modal.js +5 -13
  234. package/build-module/components/block-rename/modal.js.map +1 -1
  235. package/build-module/components/block-switcher/index.js +1 -1
  236. package/build-module/components/block-switcher/index.js.map +1 -1
  237. package/build-module/components/block-switcher/pattern-transformations-menu.js +12 -13
  238. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  239. package/build-module/components/block-switcher/preview-block-popover.js +20 -17
  240. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  241. package/build-module/components/block-toolbar/shuffle.js +6 -2
  242. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  243. package/build-module/components/block-tools/block-selection-button.js +10 -61
  244. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  245. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +9 -2
  246. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -1
  247. package/build-module/components/block-tools/index.js +14 -1
  248. package/build-module/components/block-tools/index.js.map +1 -1
  249. package/build-module/components/block-tools/use-show-block-tools.js +9 -8
  250. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  251. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js +37 -0
  252. package/build-module/components/block-tools/zoom-out-mode-inserter-button.js.map +1 -0
  253. package/build-module/components/block-tools/zoom-out-mode-inserters.js +30 -29
  254. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  255. package/build-module/components/block-tools/zoom-out-popover.js +49 -0
  256. package/build-module/components/block-tools/zoom-out-popover.js.map +1 -0
  257. package/build-module/components/block-tools/zoom-out-toolbar.js +131 -0
  258. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -0
  259. package/build-module/components/button-block-appender/index.js +3 -1
  260. package/build-module/components/button-block-appender/index.js.map +1 -1
  261. package/build-module/components/child-layout-control/index.js +27 -19
  262. package/build-module/components/child-layout-control/index.js.map +1 -1
  263. package/build-module/components/date-format-picker/index.js +2 -2
  264. package/build-module/components/date-format-picker/index.js.map +1 -1
  265. package/build-module/components/default-block-appender/index.js +7 -4
  266. package/build-module/components/default-block-appender/index.js.map +1 -1
  267. package/build-module/components/dimensions-tool/index.js +6 -4
  268. package/build-module/components/dimensions-tool/index.js.map +1 -1
  269. package/build-module/components/font-appearance-control/index.js +24 -62
  270. package/build-module/components/font-appearance-control/index.js.map +1 -1
  271. package/build-module/components/global-styles/background-panel.js +188 -119
  272. package/build-module/components/global-styles/background-panel.js.map +1 -1
  273. package/build-module/components/global-styles/border-panel.js +3 -2
  274. package/build-module/components/global-styles/border-panel.js.map +1 -1
  275. package/build-module/components/global-styles/color-panel.js +3 -2
  276. package/build-module/components/global-styles/color-panel.js.map +1 -1
  277. package/build-module/components/global-styles/dimensions-panel.js +3 -2
  278. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  279. package/build-module/components/global-styles/filters-panel.js +3 -2
  280. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  281. package/build-module/components/global-styles/hooks.js +13 -1
  282. package/build-module/components/global-styles/hooks.js.map +1 -1
  283. package/build-module/components/global-styles/image-settings-panel.js +3 -2
  284. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  285. package/build-module/components/global-styles/typography-panel.js +47 -26
  286. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  287. package/build-module/components/global-styles/typography-utils.js +117 -0
  288. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  289. package/build-module/components/global-styles/use-global-styles-output.js +47 -13
  290. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  291. package/build-module/components/global-styles/utils.js +15 -6
  292. package/build-module/components/global-styles/utils.js.map +1 -1
  293. package/build-module/components/grid/grid-item-movers.js +93 -50
  294. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  295. package/build-module/components/grid/grid-item-resizer.js +2 -2
  296. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  297. package/build-module/components/grid/grid-visualizer.js +118 -38
  298. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  299. package/build-module/components/grid/use-grid-layout-sync.js +61 -42
  300. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -1
  301. package/build-module/components/index.js +0 -5
  302. package/build-module/components/index.js.map +1 -1
  303. package/build-module/components/inner-blocks/index.js +2 -2
  304. package/build-module/components/inner-blocks/index.js.map +1 -1
  305. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -19
  306. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  307. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +20 -23
  308. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  309. package/build-module/components/inserter/media-tab/media-panel.js +1 -0
  310. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  311. package/build-module/components/inserter/menu.js +26 -4
  312. package/build-module/components/inserter/menu.js.map +1 -1
  313. package/build-module/components/inserter/preview-panel.js +20 -3
  314. package/build-module/components/inserter/preview-panel.js.map +1 -1
  315. package/build-module/components/inserter/quick-inserter.js +2 -1
  316. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  317. package/build-module/components/inserter-draggable-blocks/index.js +10 -3
  318. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  319. package/build-module/components/inspector-controls/block-support-tools-panel.js +3 -2
  320. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  321. package/build-module/components/inspector-controls-tabs/settings-tab.js +1 -2
  322. package/build-module/components/inspector-controls-tabs/settings-tab.js.map +1 -1
  323. package/build-module/components/link-control/link-preview.js +1 -1
  324. package/build-module/components/link-control/link-preview.js.map +1 -1
  325. package/build-module/components/list-view/block-select-button.js +3 -7
  326. package/build-module/components/list-view/block-select-button.js.map +1 -1
  327. package/build-module/components/list-view/block.js +2 -2
  328. package/build-module/components/list-view/block.js.map +1 -1
  329. package/build-module/components/list-view/utils.js +3 -1
  330. package/build-module/components/list-view/utils.js.map +1 -1
  331. package/build-module/components/media-placeholder/index.js +19 -23
  332. package/build-module/components/media-placeholder/index.js.map +1 -1
  333. package/build-module/components/navigable-toolbar/index.js +3 -1
  334. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  335. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  336. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  337. package/build-module/components/rich-text/index.js +1 -1
  338. package/build-module/components/rich-text/index.js.map +1 -1
  339. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -3
  340. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  341. package/build-module/components/tabbed-sidebar/index.js +60 -0
  342. package/build-module/components/tabbed-sidebar/index.js.map +1 -0
  343. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  344. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  345. package/build-module/components/url-popover/index.js +3 -0
  346. package/build-module/components/url-popover/index.js.map +1 -1
  347. package/build-module/hooks/background.js +26 -4
  348. package/build-module/hooks/background.js.map +1 -1
  349. package/build-module/hooks/block-hooks.js +11 -17
  350. package/build-module/hooks/block-hooks.js.map +1 -1
  351. package/build-module/hooks/block-style-variation.js +168 -4
  352. package/build-module/hooks/block-style-variation.js.map +1 -1
  353. package/build-module/hooks/duotone.js +16 -11
  354. package/build-module/hooks/duotone.js.map +1 -1
  355. package/build-module/hooks/grid-visualizer.js +61 -0
  356. package/build-module/hooks/grid-visualizer.js.map +1 -0
  357. package/build-module/hooks/index.js +3 -0
  358. package/build-module/hooks/index.js.map +1 -1
  359. package/build-module/hooks/layout-child.js +47 -23
  360. package/build-module/hooks/layout-child.js.map +1 -1
  361. package/build-module/hooks/position.js +4 -15
  362. package/build-module/hooks/position.js.map +1 -1
  363. package/build-module/hooks/use-bindings-attributes.js +96 -56
  364. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  365. package/build-module/hooks/utils.js +2 -0
  366. package/build-module/hooks/utils.js.map +1 -1
  367. package/build-module/layouts/constrained.js +50 -4
  368. package/build-module/layouts/constrained.js.map +1 -1
  369. package/build-module/layouts/grid.js +92 -51
  370. package/build-module/layouts/grid.js.map +1 -1
  371. package/build-module/private-apis.js +8 -6
  372. package/build-module/private-apis.js.map +1 -1
  373. package/build-module/store/actions.js +15 -0
  374. package/build-module/store/actions.js.map +1 -1
  375. package/build-module/store/defaults.js +0 -2
  376. package/build-module/store/defaults.js.map +1 -1
  377. package/build-module/store/defaults.native.js +0 -3
  378. package/build-module/store/defaults.native.js.map +1 -1
  379. package/build-module/store/private-keys.js +1 -0
  380. package/build-module/store/private-keys.js.map +1 -1
  381. package/build-module/store/reducer.js +18 -1
  382. package/build-module/store/reducer.js.map +1 -1
  383. package/build-module/store/selectors.js +10 -0
  384. package/build-module/store/selectors.js.map +1 -1
  385. package/build-module/utils/format-font-style.js +39 -0
  386. package/build-module/utils/format-font-style.js.map +1 -0
  387. package/build-module/utils/format-font-weight.js +62 -0
  388. package/build-module/utils/format-font-weight.js.map +1 -0
  389. package/build-module/utils/get-editor-region.js +28 -0
  390. package/build-module/utils/get-editor-region.js.map +1 -0
  391. package/build-module/utils/get-font-styles-and-weights.js +160 -0
  392. package/build-module/utils/get-font-styles-and-weights.js.map +1 -0
  393. package/build-module/utils/pasting.js +5 -13
  394. package/build-module/utils/pasting.js.map +1 -1
  395. package/build-style/content-rtl.css +7 -6
  396. package/build-style/content.css +7 -6
  397. package/build-style/style-rtl.css +356 -181
  398. package/build-style/style.css +356 -181
  399. package/build-types/components/block-context/index.d.ts +2 -2
  400. package/build-types/components/block-context/index.d.ts.map +1 -1
  401. package/build-types/utils/dom.d.ts.map +1 -1
  402. package/package.json +32 -32
  403. package/src/components/alignment-control/ui.js +2 -2
  404. package/src/components/block-alignment-control/ui.js +1 -1
  405. package/src/components/block-alignment-control/ui.native.js +1 -1
  406. package/src/components/block-breadcrumb/index.js +16 -1
  407. package/src/components/block-context/README.md +4 -4
  408. package/src/components/block-inspector/index.js +8 -4
  409. package/src/components/block-list/content.scss +2 -16
  410. package/src/components/block-list/use-block-props/index.js +1 -1
  411. package/src/components/block-list/use-block-props/use-block-refs.js +19 -3
  412. package/src/components/block-list/use-block-props/use-is-hovered.js +26 -11
  413. package/src/components/block-list/use-in-between-inserter.js +5 -1
  414. package/src/components/block-lock/modal.js +10 -2
  415. package/src/components/block-lock/style.scss +4 -8
  416. package/src/components/block-lock/toolbar.js +0 -1
  417. package/src/components/block-mover/button.js +1 -1
  418. package/src/components/block-mover/index.js +1 -1
  419. package/src/components/block-pattern-setup/setup-toolbar.js +2 -2
  420. package/src/components/block-patterns-paging/index.js +8 -11
  421. package/src/components/block-patterns-paging/style.scss +0 -5
  422. package/src/components/block-quick-navigation/index.js +21 -28
  423. package/src/components/block-removal-warning-modal/index.js +10 -2
  424. package/src/components/block-rename/modal.js +2 -8
  425. package/src/components/block-switcher/index.js +1 -1
  426. package/src/components/block-switcher/pattern-transformations-menu.js +17 -15
  427. package/src/components/block-switcher/preview-block-popover.js +20 -14
  428. package/src/components/block-switcher/style.scss +8 -17
  429. package/src/components/block-switcher/test/index.js +6 -6
  430. package/src/components/block-toolbar/shuffle.js +9 -1
  431. package/src/components/block-toolbar/style.scss +1 -11
  432. package/src/components/block-tools/block-selection-button.js +11 -83
  433. package/src/components/block-tools/block-toolbar-breadcrumb.js +9 -4
  434. package/src/components/block-tools/index.js +21 -1
  435. package/src/components/block-tools/style.scss +23 -0
  436. package/src/components/block-tools/use-show-block-tools.js +21 -10
  437. package/src/components/block-tools/zoom-out-mode-inserter-button.js +47 -0
  438. package/src/components/block-tools/zoom-out-mode-inserters.js +44 -33
  439. package/src/components/block-tools/zoom-out-popover.js +50 -0
  440. package/src/components/block-tools/zoom-out-toolbar.js +140 -0
  441. package/src/components/button-block-appender/index.js +2 -1
  442. package/src/components/child-layout-control/index.js +41 -23
  443. package/src/components/date-format-picker/index.js +2 -2
  444. package/src/components/date-format-picker/style.scss +0 -9
  445. package/src/components/default-block-appender/index.js +11 -4
  446. package/src/components/dimensions-tool/index.js +97 -89
  447. package/src/components/font-appearance-control/index.js +24 -82
  448. package/src/components/font-appearance-control/style.scss +3 -5
  449. package/src/components/global-styles/background-panel.js +266 -167
  450. package/src/components/global-styles/border-panel.js +3 -2
  451. package/src/components/global-styles/color-panel.js +3 -2
  452. package/src/components/global-styles/dimensions-panel.js +3 -2
  453. package/src/components/global-styles/filters-panel.js +3 -2
  454. package/src/components/global-styles/hooks.js +14 -1
  455. package/src/components/global-styles/image-settings-panel.js +3 -2
  456. package/src/components/global-styles/style.scss +116 -19
  457. package/src/components/global-styles/test/typography-utils.js +594 -0
  458. package/src/components/global-styles/test/use-global-styles-output.js +3 -1
  459. package/src/components/global-styles/typography-panel.js +56 -27
  460. package/src/components/global-styles/typography-utils.js +159 -0
  461. package/src/components/global-styles/use-global-styles-output.js +45 -10
  462. package/src/components/global-styles/utils.js +17 -6
  463. package/src/components/grid/grid-item-movers.js +140 -86
  464. package/src/components/grid/grid-item-resizer.js +3 -2
  465. package/src/components/grid/grid-visualizer.js +172 -55
  466. package/src/components/grid/style.scss +157 -8
  467. package/src/components/grid/use-grid-layout-sync.js +88 -46
  468. package/src/components/iframe/content.scss +2 -1
  469. package/src/components/index.js +0 -5
  470. package/src/components/inner-blocks/index.js +6 -2
  471. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +1 -16
  472. package/src/components/inserter/block-patterns-tab/patterns-filter.js +40 -44
  473. package/src/components/inserter/media-tab/media-panel.js +1 -0
  474. package/src/components/inserter/menu.js +47 -13
  475. package/src/components/inserter/preview-panel.js +27 -4
  476. package/src/components/inserter/quick-inserter.js +6 -1
  477. package/src/components/inserter/style.scss +58 -92
  478. package/src/components/inserter-draggable-blocks/index.js +11 -3
  479. package/src/components/inspector-controls/block-support-tools-panel.js +3 -3
  480. package/src/components/inspector-controls-tabs/settings-tab.js +0 -2
  481. package/src/components/inspector-controls-tabs/style.scss +0 -21
  482. package/src/components/link-control/link-preview.js +1 -1
  483. package/src/components/list-view/block-select-button.js +3 -13
  484. package/src/components/list-view/block.js +10 -3
  485. package/src/components/list-view/style.scss +2 -1
  486. package/src/components/list-view/utils.js +13 -2
  487. package/src/components/media-placeholder/index.js +22 -32
  488. package/src/components/navigable-toolbar/index.js +3 -1
  489. package/src/components/rich-text/format-toolbar/index.js +1 -1
  490. package/src/components/rich-text/index.js +1 -1
  491. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +9 -2
  492. package/src/components/tabbed-sidebar/README.md +76 -0
  493. package/src/components/tabbed-sidebar/index.js +70 -0
  494. package/src/components/tabbed-sidebar/style.scss +53 -0
  495. package/src/components/url-popover/image-url-input-ui.js +3 -3
  496. package/src/components/url-popover/index.js +3 -0
  497. package/src/components/url-popover/style.scss +1 -0
  498. package/src/hooks/background.js +25 -10
  499. package/src/hooks/block-hooks.js +9 -16
  500. package/src/hooks/block-style-variation.js +202 -3
  501. package/src/hooks/duotone.js +16 -12
  502. package/src/hooks/grid-visualizer.js +62 -0
  503. package/src/hooks/index.js +3 -0
  504. package/src/hooks/layout-child.js +64 -39
  505. package/src/hooks/position.js +3 -20
  506. package/src/hooks/test/get-variation-styles-with-ref-values.js +91 -0
  507. package/src/hooks/use-bindings-attributes.js +107 -63
  508. package/src/hooks/utils.js +2 -0
  509. package/src/layouts/constrained.js +53 -4
  510. package/src/layouts/grid.js +148 -51
  511. package/src/private-apis.js +12 -7
  512. package/src/store/actions.js +15 -0
  513. package/src/store/defaults.js +0 -2
  514. package/src/store/defaults.native.js +0 -3
  515. package/src/store/private-keys.js +1 -0
  516. package/src/store/reducer.js +18 -0
  517. package/src/store/selectors.js +10 -0
  518. package/src/style.scss +1 -1
  519. package/src/utils/format-font-style.js +40 -0
  520. package/src/utils/format-font-weight.js +63 -0
  521. package/src/utils/get-editor-region.js +31 -0
  522. package/src/utils/get-font-styles-and-weights.js +191 -0
  523. package/src/utils/pasting.js +5 -12
  524. package/src/utils/test/format-font-style.js +34 -0
  525. package/src/utils/test/format-font-weight.js +66 -0
  526. package/src/utils/test/get-font-styles-and-weights.js +513 -0
  527. package/tsconfig.tsbuildinfo +1 -1
  528. package/build/components/inserter/reusable-block-rename-hint.js +0 -71
  529. package/build/components/inserter/reusable-block-rename-hint.js.map +0 -1
  530. package/build/components/inspector-controls-tabs/settings-tab-hint.js +0 -53
  531. package/build/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  532. package/build-module/components/inserter/reusable-block-rename-hint.js +0 -64
  533. package/build-module/components/inserter/reusable-block-rename-hint.js.map +0 -1
  534. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js +0 -47
  535. package/build-module/components/inspector-controls-tabs/settings-tab-hint.js.map +0 -1
  536. package/src/components/inserter/reusable-block-rename-hint.js +0 -69
  537. package/src/components/inspector-controls-tabs/settings-tab-hint.js +0 -52
  538. package/src/hooks/position.scss +0 -18
@@ -1 +1 @@
1
- {"version":3,"names":["CustomSelectControl","useMemo","__","_x","sprintf","jsx","_jsx","FONT_STYLES","name","value","FONT_WEIGHTS","getFontAppearanceLabel","hasFontStyles","hasFontWeights","FontAppearanceControl","props","onChange","fontStyle","fontWeight","otherProps","hasStylesOrWeights","label","defaultOption","key","style","undefined","combineOptions","combinedOptions","forEach","styleName","styleValue","weightName","weightValue","optionName","push","styleOptions","weightOptions","selectOptions","options","currentSelection","find","option","getDescribedBy","className","describedBy","selectedItem"],"sources":["@wordpress/block-editor/src/components/font-appearance-control/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { CustomSelectControl } from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { __, _x, sprintf } from '@wordpress/i18n';\n\nconst FONT_STYLES = [\n\t{\n\t\tname: _x( 'Regular', 'font style' ),\n\t\tvalue: 'normal',\n\t},\n\t{\n\t\tname: _x( 'Italic', 'font style' ),\n\t\tvalue: 'italic',\n\t},\n];\n\nconst FONT_WEIGHTS = [\n\t{\n\t\tname: _x( 'Thin', 'font weight' ),\n\t\tvalue: '100',\n\t},\n\t{\n\t\tname: _x( 'Extra Light', 'font weight' ),\n\t\tvalue: '200',\n\t},\n\t{\n\t\tname: _x( 'Light', 'font weight' ),\n\t\tvalue: '300',\n\t},\n\t{\n\t\tname: _x( 'Regular', 'font weight' ),\n\t\tvalue: '400',\n\t},\n\t{\n\t\tname: _x( 'Medium', 'font weight' ),\n\t\tvalue: '500',\n\t},\n\t{\n\t\tname: _x( 'Semi Bold', 'font weight' ),\n\t\tvalue: '600',\n\t},\n\t{\n\t\tname: _x( 'Bold', 'font weight' ),\n\t\tvalue: '700',\n\t},\n\t{\n\t\tname: _x( 'Extra Bold', 'font weight' ),\n\t\tvalue: '800',\n\t},\n\t{\n\t\tname: _x( 'Black', 'font weight' ),\n\t\tvalue: '900',\n\t},\n];\n\n/**\n * Adjusts font appearance field label in case either font styles or weights\n * are disabled.\n *\n * @param {boolean} hasFontStyles Whether font styles are enabled and present.\n * @param {boolean} hasFontWeights Whether font weights are enabled and present.\n * @return {string} A label representing what font appearance is being edited.\n */\nconst getFontAppearanceLabel = ( hasFontStyles, hasFontWeights ) => {\n\tif ( ! hasFontStyles ) {\n\t\treturn __( 'Font weight' );\n\t}\n\n\tif ( ! hasFontWeights ) {\n\t\treturn __( 'Font style' );\n\t}\n\n\treturn __( 'Appearance' );\n};\n\n/**\n * Control to display unified font style and weight options.\n *\n * @param {Object} props Component props.\n *\n * @return {Element} Font appearance control.\n */\nexport default function FontAppearanceControl( props ) {\n\tconst {\n\t\tonChange,\n\t\thasFontStyles = true,\n\t\thasFontWeights = true,\n\t\tvalue: { fontStyle, fontWeight },\n\t\t...otherProps\n\t} = props;\n\tconst hasStylesOrWeights = hasFontStyles || hasFontWeights;\n\tconst label = getFontAppearanceLabel( hasFontStyles, hasFontWeights );\n\tconst defaultOption = {\n\t\tkey: 'default',\n\t\tname: __( 'Default' ),\n\t\tstyle: { fontStyle: undefined, fontWeight: undefined },\n\t};\n\n\t// Combines both font style and weight options into a single dropdown.\n\tconst combineOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\n\t\tFONT_STYLES.forEach( ( { name: styleName, value: styleValue } ) => {\n\t\t\tFONT_WEIGHTS.forEach(\n\t\t\t\t( { name: weightName, value: weightValue } ) => {\n\t\t\t\t\tconst optionName =\n\t\t\t\t\t\tstyleValue === 'normal'\n\t\t\t\t\t\t\t? weightName\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: 1: Font weight name. 2: Font style name. */\n\t\t\t\t\t\t\t\t\t__( '%1$s %2$s' ),\n\t\t\t\t\t\t\t\t\tweightName,\n\t\t\t\t\t\t\t\t\tstyleName\n\t\t\t\t\t\t\t );\n\n\t\t\t\t\tcombinedOptions.push( {\n\t\t\t\t\t\tkey: `${ styleValue }-${ weightValue }`,\n\t\t\t\t\t\tname: optionName,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tfontStyle: styleValue,\n\t\t\t\t\t\t\tfontWeight: weightValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t);\n\t\t} );\n\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font styles only.\n\tconst styleOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tFONT_STYLES.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: value, fontWeight: undefined },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font weights only.\n\tconst weightOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tFONT_WEIGHTS.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: undefined, fontWeight: value },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Map font styles and weights to select options.\n\tconst selectOptions = useMemo( () => {\n\t\tif ( hasFontStyles && hasFontWeights ) {\n\t\t\treturn combineOptions();\n\t\t}\n\n\t\treturn hasFontStyles ? styleOptions() : weightOptions();\n\t}, [ props.options ] );\n\n\t// Find current selection by comparing font style & weight against options,\n\t// and fall back to the Default option if there is no matching option.\n\tconst currentSelection =\n\t\tselectOptions.find(\n\t\t\t( option ) =>\n\t\t\t\toption.style.fontStyle === fontStyle &&\n\t\t\t\toption.style.fontWeight === fontWeight\n\t\t) || selectOptions[ 0 ];\n\n\t// Adjusts screen reader description based on styles or weights.\n\tconst getDescribedBy = () => {\n\t\tif ( ! currentSelection ) {\n\t\t\treturn __( 'No selected font appearance' );\n\t\t}\n\n\t\tif ( ! hasFontStyles ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font weight.\n\t\t\t\t__( 'Currently selected font weight: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasFontWeights ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font style.\n\t\t\t\t__( 'Currently selected font style: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t// translators: %s: Currently selected font appearance.\n\t\t\t__( 'Currently selected font appearance: %s' ),\n\t\t\tcurrentSelection.name\n\t\t);\n\t};\n\n\treturn (\n\t\thasStylesOrWeights && (\n\t\t\t<CustomSelectControl\n\t\t\t\t{ ...otherProps }\n\t\t\t\tclassName=\"components-font-appearance-control\"\n\t\t\t\tlabel={ label }\n\t\t\t\tdescribedBy={ getDescribedBy() }\n\t\t\t\toptions={ selectOptions }\n\t\t\t\tvalue={ currentSelection }\n\t\t\t\tonChange={ ( { selectedItem } ) =>\n\t\t\t\t\tonChange( selectedItem.style )\n\t\t\t\t}\n\t\t\t/>\n\t\t)\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CustomSelectControl","useMemo","__","sprintf","getFontStylesAndWeights","jsx","_jsx","getFontAppearanceLabel","hasFontStyles","hasFontWeights","FontAppearanceControl","props","onChange","fontFamilyFaces","value","fontStyle","fontWeight","otherProps","hasStylesOrWeights","label","defaultOption","key","name","style","undefined","fontStyles","fontWeights","combinedStyleAndWeightOptions","combineOptions","combinedOptions","push","styleOptions","forEach","weightOptions","selectOptions","options","currentSelection","find","option","getDescribedBy","className","describedBy","selectedItem"],"sources":["@wordpress/block-editor/src/components/font-appearance-control/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { CustomSelectControl } from '@wordpress/components';\nimport { useMemo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getFontStylesAndWeights } from '../../utils/get-font-styles-and-weights';\n\n/**\n * Adjusts font appearance field label in case either font styles or weights\n * are disabled.\n *\n * @param {boolean} hasFontStyles Whether font styles are enabled and present.\n * @param {boolean} hasFontWeights Whether font weights are enabled and present.\n * @return {string} A label representing what font appearance is being edited.\n */\nconst getFontAppearanceLabel = ( hasFontStyles, hasFontWeights ) => {\n\tif ( ! hasFontStyles ) {\n\t\treturn __( 'Font weight' );\n\t}\n\n\tif ( ! hasFontWeights ) {\n\t\treturn __( 'Font style' );\n\t}\n\n\treturn __( 'Appearance' );\n};\n\n/**\n * Control to display font style and weight options of the active font.\n *\n * @param {Object} props Component props.\n *\n * @return {Element} Font appearance control.\n */\nexport default function FontAppearanceControl( props ) {\n\tconst {\n\t\tonChange,\n\t\thasFontStyles = true,\n\t\thasFontWeights = true,\n\t\tfontFamilyFaces,\n\t\tvalue: { fontStyle, fontWeight },\n\t\t...otherProps\n\t} = props;\n\tconst hasStylesOrWeights = hasFontStyles || hasFontWeights;\n\tconst label = getFontAppearanceLabel( hasFontStyles, hasFontWeights );\n\tconst defaultOption = {\n\t\tkey: 'default',\n\t\tname: __( 'Default' ),\n\t\tstyle: { fontStyle: undefined, fontWeight: undefined },\n\t};\n\tconst { fontStyles, fontWeights, combinedStyleAndWeightOptions } =\n\t\tgetFontStylesAndWeights( fontFamilyFaces );\n\n\t// Generates select options for combined font styles and weights.\n\tconst combineOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tif ( combinedStyleAndWeightOptions ) {\n\t\t\tcombinedOptions.push( ...combinedStyleAndWeightOptions );\n\t\t}\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font styles only.\n\tconst styleOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tfontStyles.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: value, fontWeight: undefined },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Generates select options for font weights only.\n\tconst weightOptions = () => {\n\t\tconst combinedOptions = [ defaultOption ];\n\t\tfontWeights.forEach( ( { name, value } ) => {\n\t\t\tcombinedOptions.push( {\n\t\t\t\tkey: value,\n\t\t\t\tname,\n\t\t\t\tstyle: { fontStyle: undefined, fontWeight: value },\n\t\t\t} );\n\t\t} );\n\t\treturn combinedOptions;\n\t};\n\n\t// Map font styles and weights to select options.\n\tconst selectOptions = useMemo( () => {\n\t\t// Display combined available font style and weight options.\n\t\tif ( hasFontStyles && hasFontWeights ) {\n\t\t\treturn combineOptions();\n\t\t}\n\n\t\t// Display only font style options or font weight options.\n\t\treturn hasFontStyles ? styleOptions() : weightOptions();\n\t}, [\n\t\tprops.options,\n\t\tfontStyles,\n\t\tfontWeights,\n\t\tcombinedStyleAndWeightOptions,\n\t] );\n\n\t// Find current selection by comparing font style & weight against options,\n\t// and fall back to the Default option if there is no matching option.\n\tconst currentSelection =\n\t\tselectOptions.find(\n\t\t\t( option ) =>\n\t\t\t\toption.style.fontStyle === fontStyle &&\n\t\t\t\toption.style.fontWeight === fontWeight\n\t\t) || selectOptions[ 0 ];\n\n\t// Adjusts screen reader description based on styles or weights.\n\tconst getDescribedBy = () => {\n\t\tif ( ! currentSelection ) {\n\t\t\treturn __( 'No selected font appearance' );\n\t\t}\n\n\t\tif ( ! hasFontStyles ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font weight.\n\t\t\t\t__( 'Currently selected font weight: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasFontWeights ) {\n\t\t\treturn sprintf(\n\t\t\t\t// translators: %s: Currently selected font style.\n\t\t\t\t__( 'Currently selected font style: %s' ),\n\t\t\t\tcurrentSelection.name\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t// translators: %s: Currently selected font appearance.\n\t\t\t__( 'Currently selected font appearance: %s' ),\n\t\t\tcurrentSelection.name\n\t\t);\n\t};\n\n\treturn (\n\t\thasStylesOrWeights && (\n\t\t\t<CustomSelectControl\n\t\t\t\t{ ...otherProps }\n\t\t\t\tclassName=\"components-font-appearance-control\"\n\t\t\t\tlabel={ label }\n\t\t\t\tdescribedBy={ getDescribedBy() }\n\t\t\t\toptions={ selectOptions }\n\t\t\t\tvalue={ currentSelection }\n\t\t\t\tonChange={ ( { selectedItem } ) =>\n\t\t\t\t\tonChange( selectedItem.style )\n\t\t\t\t}\n\t\t\t/>\n\t\t)\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,11 +6,11 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, ToggleControl, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalUnitControl as UnitControl, __experimentalVStack as VStack, DropZone, FlexItem, FocalPointPicker, MenuItem, VisuallyHidden, __experimentalItemGroup as ItemGroup, __experimentalHStack as HStack, __experimentalTruncate as Truncate } from '@wordpress/components';
9
+ import { __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, ToggleControl, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalUnitControl as UnitControl, __experimentalVStack as VStack, DropZone, FlexItem, FocalPointPicker, MenuItem, VisuallyHidden, __experimentalItemGroup as ItemGroup, __experimentalHStack as HStack, __experimentalTruncate as Truncate, Dropdown, __experimentalDropdownContentWrapper as DropdownContentWrapper } from '@wordpress/components';
10
10
  import { __, _x, sprintf } from '@wordpress/i18n';
11
11
  import { store as noticesStore } from '@wordpress/notices';
12
12
  import { getFilename } from '@wordpress/url';
13
- import { useCallback, Platform, useRef } from '@wordpress/element';
13
+ import { useCallback, Platform, useRef, useState, useEffect } from '@wordpress/element';
14
14
  import { useDispatch, useSelect } from '@wordpress/data';
15
15
  import { focus } from '@wordpress/dom';
16
16
  import { isBlobURL } from '@wordpress/blob';
@@ -18,7 +18,7 @@ import { isBlobURL } from '@wordpress/blob';
18
18
  /**
19
19
  * Internal dependencies
20
20
  */
21
- import { TOOLSPANEL_DROPDOWNMENU_PROPS } from './utils';
21
+ import { useToolsPanelDropdownMenuProps } from './utils';
22
22
  import { setImmutably } from '../../utils/object';
23
23
  import MediaReplaceFlow from '../media-replace-flow';
24
24
  import { store as blockEditorStore } from '../../store';
@@ -27,9 +27,15 @@ import { jsx as _jsx } from "react/jsx-runtime";
27
27
  import { jsxs as _jsxs } from "react/jsx-runtime";
28
28
  const IMAGE_BACKGROUND_TYPE = 'image';
29
29
  const DEFAULT_CONTROLS = {
30
- backgroundImage: true,
31
- backgroundSize: false
30
+ backgroundImage: true
32
31
  };
32
+ const BACKGROUND_POPOVER_PROPS = {
33
+ placement: 'left-start',
34
+ offset: 36,
35
+ shift: true,
36
+ className: 'block-editor-global-styles-background-panel__popover'
37
+ };
38
+ const noop = () => {};
33
39
 
34
40
  /**
35
41
  * Checks site settings to see if the background panel may be used.
@@ -121,21 +127,30 @@ export const backgroundPositionToCoords = value => {
121
127
  y
122
128
  };
123
129
  };
124
- function InspectorImagePreview({
125
- label,
130
+ function InspectorImagePreviewItem({
131
+ as = 'span',
132
+ imgUrl,
133
+ toggleProps = {},
126
134
  filename,
127
- url: imgUrl
135
+ label,
136
+ className,
137
+ onToggleCallback = noop
128
138
  }) {
129
- const imgLabel = label || getFilename(imgUrl) || __('Add background image');
139
+ useEffect(() => {
140
+ if (typeof toggleProps?.isOpen !== 'undefined') {
141
+ onToggleCallback(toggleProps?.isOpen);
142
+ }
143
+ }, [toggleProps?.isOpen, onToggleCallback]);
130
144
  return /*#__PURE__*/_jsx(ItemGroup, {
131
- as: "span",
145
+ as: as,
146
+ className: className,
147
+ ...toggleProps,
132
148
  children: /*#__PURE__*/_jsxs(HStack, {
133
- justify: imgUrl ? 'flex-start' : 'center',
149
+ justify: "flex-start",
134
150
  as: "span",
151
+ className: "block-editor-global-styles-background-panel__inspector-preview-inner",
135
152
  children: [imgUrl && /*#__PURE__*/_jsx("span", {
136
- className: clsx('block-editor-global-styles-background-panel__inspector-image-indicator-wrapper', {
137
- 'has-image': imgUrl
138
- }),
153
+ className: "block-editor-global-styles-background-panel__inspector-image-indicator-wrapper",
139
154
  "aria-hidden": true,
140
155
  children: /*#__PURE__*/_jsx("span", {
141
156
  className: "block-editor-global-styles-background-panel__inspector-image-indicator",
@@ -145,25 +160,69 @@ function InspectorImagePreview({
145
160
  })
146
161
  }), /*#__PURE__*/_jsxs(FlexItem, {
147
162
  as: "span",
163
+ style: imgUrl ? {} : {
164
+ flexGrow: 1
165
+ },
148
166
  children: [/*#__PURE__*/_jsx(Truncate, {
149
167
  numberOfLines: 1,
150
168
  className: "block-editor-global-styles-background-panel__inspector-media-replace-title",
151
- children: imgLabel
169
+ children: label
152
170
  }), /*#__PURE__*/_jsx(VisuallyHidden, {
153
171
  as: "span",
154
172
  children: imgUrl ? sprintf( /* translators: %s: file name */
155
- __('Background image: %s'), filename || imgLabel) : __('No background image selected')
173
+ __('Background image: %s'), filename || label) : __('No background image selected')
156
174
  })]
157
175
  })]
158
176
  })
159
177
  });
160
178
  }
161
- function BackgroundImageToolsPanelItem({
162
- panelId,
163
- isShownByDefault,
179
+ function BackgroundControlsPanel({
180
+ label,
181
+ filename,
182
+ url: imgUrl,
183
+ children,
184
+ onToggle: onToggleCallback = noop,
185
+ hasImageValue
186
+ }) {
187
+ if (!hasImageValue) {
188
+ return;
189
+ }
190
+ const imgLabel = label || getFilename(imgUrl) || __('Add background image');
191
+ return /*#__PURE__*/_jsx(Dropdown, {
192
+ popoverProps: BACKGROUND_POPOVER_PROPS,
193
+ renderToggle: ({
194
+ onToggle,
195
+ isOpen
196
+ }) => {
197
+ const toggleProps = {
198
+ onClick: onToggle,
199
+ className: 'block-editor-global-styles-background-panel__dropdown-toggle',
200
+ 'aria-expanded': isOpen,
201
+ 'aria-label': __('Background size, position and repeat options.'),
202
+ isOpen
203
+ };
204
+ return /*#__PURE__*/_jsx(InspectorImagePreviewItem, {
205
+ imgUrl: imgUrl,
206
+ filename: filename,
207
+ label: imgLabel,
208
+ toggleProps: toggleProps,
209
+ as: "button",
210
+ onToggleCallback: onToggleCallback
211
+ });
212
+ },
213
+ renderContent: () => /*#__PURE__*/_jsx(DropdownContentWrapper, {
214
+ className: "block-editor-global-styles-background-panel__dropdown-content-wrapper",
215
+ paddingSize: "medium",
216
+ children: children
217
+ })
218
+ });
219
+ }
220
+ function BackgroundImageControls({
164
221
  onChange,
165
222
  style,
166
223
  inheritedValue,
224
+ onRemoveImage = noop,
225
+ displayInPanel,
167
226
  themeFileURIs
168
227
  }) {
169
228
  const mediaUpload = useSelect(select => select(blockEditorStore).getSettings().mediaUpload, []);
@@ -224,15 +283,6 @@ function BackgroundImageToolsPanelItem({
224
283
  onError: onUploadError
225
284
  });
226
285
  };
227
- const resetAllFilter = useCallback(previousValue => {
228
- return {
229
- ...previousValue,
230
- style: {
231
- ...previousValue.style,
232
- background: undefined
233
- }
234
- };
235
- }, []);
236
286
  const hasValue = hasBackgroundImageValue(style);
237
287
  const closeAndFocus = () => {
238
288
  const [toggleButton] = focus.tabbable.find(replaceContainerRef.current);
@@ -244,52 +294,48 @@ function BackgroundImageToolsPanelItem({
244
294
  };
245
295
  const onRemove = () => onChange(setImmutably(style, ['background', 'backgroundImage'], 'none'));
246
296
  const canRemove = !hasValue && hasBackgroundImageValue(inheritedValue);
247
- return /*#__PURE__*/_jsx(ToolsPanelItem, {
248
- className: "single-column",
249
- hasValue: () => hasValue,
250
- label: __('Background image'),
251
- onDeselect: resetBackgroundImage,
252
- isShownByDefault: isShownByDefault,
253
- resetAllFilter: resetAllFilter,
254
- panelId: panelId,
255
- children: /*#__PURE__*/_jsxs("div", {
256
- className: "block-editor-global-styles-background-panel__inspector-media-replace-container",
257
- ref: replaceContainerRef,
258
- children: [/*#__PURE__*/_jsxs(MediaReplaceFlow, {
259
- mediaId: id,
260
- mediaURL: url,
261
- allowedTypes: [IMAGE_BACKGROUND_TYPE],
262
- accept: "image/*",
263
- onSelect: onSelectMedia,
264
- name: /*#__PURE__*/_jsx(InspectorImagePreview, {
265
- label: title,
266
- filename: title,
267
- url: getResolvedThemeFilePath(url, themeFileURIs)
268
- }),
269
- variant: "secondary",
270
- children: [canRemove && /*#__PURE__*/_jsx(MenuItem, {
271
- onClick: () => {
272
- closeAndFocus();
273
- onRemove();
274
- },
275
- children: __('Remove')
276
- }), hasValue && /*#__PURE__*/_jsx(MenuItem, {
277
- onClick: () => {
278
- closeAndFocus();
279
- resetBackgroundImage();
280
- },
281
- children: __('Reset ')
282
- })]
283
- }), /*#__PURE__*/_jsx(DropZone, {
284
- onFilesDrop: onFilesDrop,
285
- label: __('Drop to upload')
297
+ const imgLabel = title || getFilename(url) || __('Add background image');
298
+ return /*#__PURE__*/_jsxs("div", {
299
+ ref: replaceContainerRef,
300
+ className: "block-editor-global-styles-background-panel__image-tools-panel-item",
301
+ children: [/*#__PURE__*/_jsxs(MediaReplaceFlow, {
302
+ mediaId: id,
303
+ mediaURL: url,
304
+ allowedTypes: [IMAGE_BACKGROUND_TYPE],
305
+ accept: "image/*",
306
+ onSelect: onSelectMedia,
307
+ popoverProps: {
308
+ className: clsx({
309
+ 'block-editor-global-styles-background-panel__media-replace-popover': displayInPanel
310
+ })
311
+ },
312
+ name: /*#__PURE__*/_jsx(InspectorImagePreviewItem, {
313
+ className: "block-editor-global-styles-background-panel__image-preview",
314
+ imgUrl: getResolvedThemeFilePath(url, themeFileURIs),
315
+ filename: title,
316
+ label: imgLabel
317
+ }),
318
+ variant: "secondary",
319
+ children: [canRemove && /*#__PURE__*/_jsx(MenuItem, {
320
+ onClick: () => {
321
+ closeAndFocus();
322
+ onRemove();
323
+ },
324
+ children: __('Remove')
325
+ }), hasValue && /*#__PURE__*/_jsx(MenuItem, {
326
+ onClick: () => {
327
+ closeAndFocus();
328
+ onRemoveImage();
329
+ },
330
+ children: __('Reset ')
286
331
  })]
287
- })
332
+ }), /*#__PURE__*/_jsx(DropZone, {
333
+ onFilesDrop: onFilesDrop,
334
+ label: __('Drop to upload')
335
+ })]
288
336
  });
289
337
  }
290
- function BackgroundSizeToolsPanelItem({
291
- panelId,
292
- isShownByDefault,
338
+ function BackgroundSizeControls({
293
339
  onChange,
294
340
  style,
295
341
  inheritedValue,
@@ -300,6 +346,7 @@ function BackgroundSizeToolsPanelItem({
300
346
  const repeatValue = style?.background?.backgroundRepeat || inheritedValue?.background?.backgroundRepeat;
301
347
  const imageValue = style?.background?.backgroundImage?.url || inheritedValue?.background?.backgroundImage?.url;
302
348
  const positionValue = style?.background?.backgroundPosition || inheritedValue?.background?.backgroundPosition;
349
+ const attachmentValue = style?.background?.backgroundAttachment || inheritedValue?.background?.backgroundAttachment;
303
350
 
304
351
  /*
305
352
  * An `undefined` value is replaced with any supplied
@@ -316,20 +363,6 @@ function BackgroundSizeToolsPanelItem({
316
363
  * should reflect the current repeat value.
317
364
  */
318
365
  const repeatCheckedValue = !(repeatValue === 'no-repeat' || currentValueForToggle === 'cover' && repeatValue === undefined);
319
- const hasValue = hasBackgroundSizeValue(style);
320
- const resetAllFilter = useCallback(previousValue => {
321
- return {
322
- ...previousValue,
323
- style: {
324
- ...previousValue.style,
325
- background: {
326
- ...previousValue.style?.background,
327
- backgroundRepeat: undefined,
328
- backgroundSize: undefined
329
- }
330
- }
331
- };
332
- }, []);
333
366
  const updateBackgroundSize = next => {
334
367
  // When switching to 'contain' toggle the repeat off.
335
368
  let nextRepeat = repeatValue;
@@ -373,28 +406,22 @@ function BackgroundSizeToolsPanelItem({
373
406
  onChange(setImmutably(style, ['background', 'backgroundPosition'], coordsToBackgroundPosition(next)));
374
407
  };
375
408
  const toggleIsRepeated = () => onChange(setImmutably(style, ['background', 'backgroundRepeat'], repeatCheckedValue === true ? 'no-repeat' : 'repeat'));
376
- const resetBackgroundSize = () => onChange(setImmutably(style, ['background'], {
377
- ...style?.background,
378
- backgroundPosition: undefined,
379
- backgroundRepeat: undefined,
380
- backgroundSize: undefined
381
- }));
409
+ const toggleScrollWithPage = () => onChange(setImmutably(style, ['background', 'backgroundAttachment'], attachmentValue === 'fixed' ? 'scroll' : 'fixed'));
382
410
  return /*#__PURE__*/_jsxs(VStack, {
383
- as: ToolsPanelItem,
384
- spacing: 2,
411
+ spacing: 4,
385
412
  className: "single-column",
386
- hasValue: () => hasValue,
387
- label: __('Size'),
388
- onDeselect: resetBackgroundSize,
389
- isShownByDefault: isShownByDefault,
390
- resetAllFilter: resetAllFilter,
391
- panelId: panelId,
392
413
  children: [/*#__PURE__*/_jsx(FocalPointPicker, {
393
414
  __next40pxDefaultSize: true,
394
- label: __('Position'),
415
+ __nextHasNoMarginBottom: true,
416
+ label: __('Focal point'),
395
417
  url: getResolvedThemeFilePath(imageValue, themeFileURIs),
396
418
  value: backgroundPositionToCoords(positionValue),
397
419
  onChange: updateBackgroundPosition
420
+ }), /*#__PURE__*/_jsx(ToggleControl, {
421
+ label: __('Fixed background'),
422
+ checked: attachmentValue === 'fixed',
423
+ onChange: toggleScrollWithPage,
424
+ help: __('Whether your image should scroll with the page or stay fixed in place.')
398
425
  }), /*#__PURE__*/_jsxs(ToggleGroupControl, {
399
426
  size: "__unstable-large",
400
427
  label: __('Size'),
@@ -416,18 +443,20 @@ function BackgroundSizeToolsPanelItem({
416
443
  justify: "flex-start",
417
444
  spacing: 2,
418
445
  as: "span",
419
- children: [currentValueForToggle !== undefined && currentValueForToggle !== 'cover' && currentValueForToggle !== 'contain' ? /*#__PURE__*/_jsx(UnitControl, {
446
+ children: [/*#__PURE__*/_jsx(UnitControl, {
420
447
  "aria-label": __('Background image width'),
421
448
  onChange: updateBackgroundSize,
422
449
  value: sizeValue,
423
450
  size: "__unstable-large",
424
451
  __unstableInputWidth: "100px",
425
452
  min: 0,
426
- placeholder: __('Auto')
427
- }) : null, currentValueForToggle !== 'cover' && /*#__PURE__*/_jsx(ToggleControl, {
453
+ placeholder: __('Auto'),
454
+ disabled: currentValueForToggle !== 'auto' || currentValueForToggle === undefined
455
+ }), /*#__PURE__*/_jsx(ToggleControl, {
428
456
  label: __('Repeat'),
429
457
  checked: repeatCheckedValue,
430
- onChange: toggleIsRepeated
458
+ onChange: toggleIsRepeated,
459
+ disabled: currentValueForToggle === 'cover'
431
460
  })]
432
461
  })]
433
462
  });
@@ -440,6 +469,7 @@ function BackgroundToolsPanel({
440
469
  children,
441
470
  headerLabel
442
471
  }) {
472
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
443
473
  const resetAll = () => {
444
474
  const updatedValue = resetAllFilter(value);
445
475
  onChange(updatedValue);
@@ -450,7 +480,7 @@ function BackgroundToolsPanel({
450
480
  label: headerLabel,
451
481
  resetAll: resetAll,
452
482
  panelId: panelId,
453
- dropdownMenuProps: TOOLSPANEL_DROPDOWNMENU_PROPS,
483
+ dropdownMenuProps: dropdownMenuProps,
454
484
  children: children
455
485
  });
456
486
  }
@@ -472,28 +502,67 @@ export default function BackgroundPanel({
472
502
  background: {}
473
503
  };
474
504
  }, []);
475
- const shouldShowBackgroundSizeControls = settings?.background?.backgroundSize;
505
+ const resetBackground = () => onChange(setImmutably(value, ['background'], {}));
506
+ const {
507
+ title,
508
+ url
509
+ } = value?.background?.backgroundImage || {
510
+ ...inheritedValue?.background?.backgroundImage
511
+ };
512
+ const hasImageValue = hasBackgroundImageValue(value) || hasBackgroundImageValue(inheritedValue);
513
+ const shouldShowBackgroundImageControls = hasImageValue && (settings?.background?.backgroundSize || settings?.background?.backgroundPosition || settings?.background?.backgroundRepeat);
514
+ const [isDropDownOpen, setIsDropDownOpen] = useState(false);
476
515
  return /*#__PURE__*/_jsxs(Wrapper, {
477
516
  resetAllFilter: resetAllFilter,
478
517
  value: value,
479
518
  onChange: onChange,
480
519
  panelId: panelId,
481
520
  headerLabel: headerLabel,
482
- children: [/*#__PURE__*/_jsx(BackgroundImageToolsPanelItem, {
483
- onChange: onChange,
484
- panelId: panelId,
521
+ children: [/*#__PURE__*/_jsx("div", {
522
+ className: clsx('block-editor-global-styles-background-panel__inspector-media-replace-container', {
523
+ 'is-open': isDropDownOpen
524
+ }),
525
+ children: shouldShowBackgroundImageControls ? /*#__PURE__*/_jsx(BackgroundControlsPanel, {
526
+ label: title,
527
+ filename: title,
528
+ url: getResolvedThemeFilePath(url, themeFileURIs),
529
+ onToggle: setIsDropDownOpen,
530
+ hasImageValue: hasImageValue,
531
+ children: /*#__PURE__*/_jsxs(VStack, {
532
+ spacing: 3,
533
+ className: "single-column",
534
+ children: [/*#__PURE__*/_jsx(BackgroundImageControls, {
535
+ onChange: onChange,
536
+ style: value,
537
+ inheritedValue: inheritedValue,
538
+ themeFileURIs: themeFileURIs,
539
+ displayInPanel: true,
540
+ onRemoveImage: () => {
541
+ setIsDropDownOpen(false);
542
+ resetBackground();
543
+ }
544
+ }), /*#__PURE__*/_jsx(BackgroundSizeControls, {
545
+ onChange: onChange,
546
+ panelId: panelId,
547
+ style: value,
548
+ defaultValues: defaultValues,
549
+ inheritedValue: inheritedValue,
550
+ themeFileURIs: themeFileURIs
551
+ })]
552
+ })
553
+ }) : /*#__PURE__*/_jsx(BackgroundImageControls, {
554
+ onChange: onChange,
555
+ style: value,
556
+ inheritedValue: inheritedValue,
557
+ themeFileURIs: themeFileURIs
558
+ })
559
+ }), /*#__PURE__*/_jsx(ToolsPanelItem, {
560
+ hasValue: () => hasImageValue,
561
+ label: __('Image'),
562
+ onDeselect: resetBackground,
485
563
  isShownByDefault: defaultControls.backgroundImage,
486
- style: value,
487
- inheritedValue: inheritedValue,
488
- themeFileURIs: themeFileURIs
489
- }), shouldShowBackgroundSizeControls && /*#__PURE__*/_jsx(BackgroundSizeToolsPanelItem, {
490
- onChange: onChange,
491
564
  panelId: panelId,
492
- isShownByDefault: defaultControls.backgroundSize,
493
- style: value,
494
- inheritedValue: inheritedValue,
495
- defaultValues: defaultValues,
496
- themeFileURIs: themeFileURIs
565
+ className: "block-editor-global-styles-background-panel__hidden-tools-panel-item"
497
566
  })]
498
567
  });
499
568
  }