@wordpress/block-editor 11.2.0 → 11.3.1

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 (675) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +28 -4
  3. package/build/components/alignment-control/ui.js +1 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/autocomplete/index.js +2 -7
  6. package/build/components/autocomplete/index.js.map +1 -1
  7. package/build/components/block-actions/index.js +7 -2
  8. package/build/components/block-actions/index.js.map +1 -1
  9. package/build/components/block-alignment-matrix-control/index.js +2 -2
  10. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  11. package/build/components/block-card/index.js +2 -4
  12. package/build/components/block-card/index.js.map +1 -1
  13. package/build/components/block-edit/index.js +8 -0
  14. package/build/components/block-edit/index.js.map +1 -1
  15. package/build/components/block-inspector/index.js +15 -14
  16. package/build/components/block-inspector/index.js.map +1 -1
  17. package/build/components/block-list/use-in-between-inserter.js +5 -0
  18. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  19. package/build/components/block-lock/modal.js +0 -1
  20. package/build/components/block-lock/modal.js.map +1 -1
  21. package/build/components/block-mover/mover-description.js +2 -2
  22. package/build/components/block-mover/mover-description.js.map +1 -1
  23. package/build/components/block-navigation/dropdown.js +3 -1
  24. package/build/components/block-navigation/dropdown.js.map +1 -1
  25. package/build/components/block-pattern-setup/index.js +1 -1
  26. package/build/components/block-pattern-setup/index.js.map +1 -1
  27. package/build/components/block-pattern-setup/use-patterns-setup.js +2 -2
  28. package/build/components/block-pattern-setup/use-patterns-setup.js.map +1 -1
  29. package/build/components/block-patterns-list/index.js +31 -3
  30. package/build/components/block-patterns-list/index.js.map +1 -1
  31. package/build/components/block-preview/auto.js +9 -11
  32. package/build/components/block-preview/auto.js.map +1 -1
  33. package/build/components/block-preview/index.js +32 -8
  34. package/build/components/block-preview/index.js.map +1 -1
  35. package/build/components/block-selection-clearer/index.js +1 -1
  36. package/build/components/block-selection-clearer/index.js.map +1 -1
  37. package/build/components/block-settings/container.native.js +7 -33
  38. package/build/components/block-settings/container.native.js.map +1 -1
  39. package/build/components/block-settings-menu/block-settings-dropdown.js +12 -6
  40. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  41. package/build/components/block-settings-menu-controls/index.js +2 -8
  42. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  43. package/build/components/block-switcher/utils.js +1 -1
  44. package/build/components/block-switcher/utils.js.map +1 -1
  45. package/build/components/block-tools/selected-block-popover.js +55 -47
  46. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  47. package/build/components/block-vertical-alignment-control/icons.js +15 -1
  48. package/build/components/block-vertical-alignment-control/icons.js.map +1 -1
  49. package/build/components/block-vertical-alignment-control/ui.js +9 -4
  50. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  51. package/build/components/color-style-selector/index.js +3 -1
  52. package/build/components/color-style-selector/index.js.map +1 -1
  53. package/build/components/date-format-picker/index.js +3 -4
  54. package/build/components/date-format-picker/index.js.map +1 -1
  55. package/build/components/font-family/index.js +1 -7
  56. package/build/components/font-family/index.js.map +1 -1
  57. package/build/components/font-sizes/fluid-utils.js +1 -1
  58. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  59. package/build/components/font-sizes/utils.js +1 -1
  60. package/build/components/font-sizes/utils.js.map +1 -1
  61. package/build/components/global-styles/context.js +22 -0
  62. package/build/components/global-styles/context.js.map +1 -0
  63. package/build/components/global-styles/hooks.js +142 -0
  64. package/build/components/global-styles/hooks.js.map +1 -0
  65. package/build/components/global-styles/index.js +42 -0
  66. package/build/components/global-styles/index.js.map +1 -0
  67. package/build/components/global-styles/typography-utils.js +92 -0
  68. package/build/components/global-styles/typography-utils.js.map +1 -0
  69. package/build/components/global-styles/use-global-styles-output.js +974 -0
  70. package/build/components/global-styles/use-global-styles-output.js.map +1 -0
  71. package/build/components/global-styles/utils.js +340 -0
  72. package/build/components/global-styles/utils.js.map +1 -0
  73. package/build/components/height-control/index.js +13 -1
  74. package/build/components/height-control/index.js.map +1 -1
  75. package/build/components/iframe/index.js +5 -3
  76. package/build/components/iframe/index.js.map +1 -1
  77. package/build/components/image-editor/constants.js +1 -1
  78. package/build/components/image-editor/constants.js.map +1 -1
  79. package/build/components/image-editor/context.js +1 -2
  80. package/build/components/image-editor/context.js.map +1 -1
  81. package/build/components/image-editor/cropper.js +3 -1
  82. package/build/components/image-editor/cropper.js.map +1 -1
  83. package/build/components/image-editor/index.js +13 -9
  84. package/build/components/image-editor/index.js.map +1 -1
  85. package/build/components/image-editor/use-transform-image.js +11 -35
  86. package/build/components/image-editor/use-transform-image.js.map +1 -1
  87. package/build/components/image-size-control/index.js +1 -7
  88. package/build/components/image-size-control/index.js.map +1 -1
  89. package/build/components/index.js +8 -24
  90. package/build/components/index.js.map +1 -1
  91. package/build/components/inner-blocks/index.js +22 -32
  92. package/build/components/inner-blocks/index.js.map +1 -1
  93. package/build/components/inner-blocks/index.native.js +8 -23
  94. package/build/components/inner-blocks/index.native.js.map +1 -1
  95. package/build/components/inner-blocks/use-block-context.js +53 -0
  96. package/build/components/inner-blocks/use-block-context.js.map +1 -0
  97. package/build/components/inserter/block-patterns-explorer/explorer.js +0 -1
  98. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  99. package/build/components/inserter/block-patterns-tab.js +9 -2
  100. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  101. package/build/components/inserter/block-types-tab.js +2 -2
  102. package/build/components/inserter/block-types-tab.js.map +1 -1
  103. package/build/components/inserter/hooks/use-patterns-state.js +1 -7
  104. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  105. package/build/components/inserter/index.js +5 -4
  106. package/build/components/inserter/index.js.map +1 -1
  107. package/build/components/inserter/media-tab/hooks.js +142 -56
  108. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  109. package/build/components/inserter/media-tab/media-list.js +74 -21
  110. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  111. package/build/components/inserter/media-tab/media-panel.js +11 -13
  112. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  113. package/build/components/inserter/media-tab/media-tab.js +6 -3
  114. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  115. package/build/components/inserter/media-tab/utils.js +26 -15
  116. package/build/components/inserter/media-tab/utils.js.map +1 -1
  117. package/build/components/inserter/menu.js +4 -0
  118. package/build/components/inserter/menu.js.map +1 -1
  119. package/build/components/inserter/preview-panel.js +5 -3
  120. package/build/components/inserter/preview-panel.js.map +1 -1
  121. package/build/components/inserter/search-results.js +2 -7
  122. package/build/components/inserter/search-results.js.map +1 -1
  123. package/build/components/inserter-list-item/index.js +1 -9
  124. package/build/components/inserter-list-item/index.js.map +1 -1
  125. package/build/components/inspector-controls/fill.js +15 -2
  126. package/build/components/inspector-controls/fill.js.map +1 -1
  127. package/build/components/inspector-controls/fill.native.js +14 -1
  128. package/build/components/inspector-controls/fill.native.js.map +1 -1
  129. package/build/components/inspector-controls/groups.js +4 -0
  130. package/build/components/inspector-controls/groups.js.map +1 -1
  131. package/build/components/inspector-controls/index.js +2 -2
  132. package/build/components/inspector-controls/index.js.map +1 -1
  133. package/build/components/inspector-controls/slot.js +14 -1
  134. package/build/components/inspector-controls/slot.js.map +1 -1
  135. package/build/components/inspector-controls/slot.native.js +14 -1
  136. package/build/components/inspector-controls/slot.native.js.map +1 -1
  137. package/build/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  138. package/build/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -1
  139. package/build/components/inspector-controls-tabs/index.js +2 -2
  140. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  141. package/build/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  142. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  143. package/build/components/inspector-controls-tabs/styles-tab.js +6 -4
  144. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  145. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +17 -12
  146. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  147. package/build/components/justify-content-control/ui.js +8 -1
  148. package/build/components/justify-content-control/ui.js.map +1 -1
  149. package/build/components/link-control/index.js +45 -17
  150. package/build/components/link-control/index.js.map +1 -1
  151. package/build/components/list-view/block.js +1 -1
  152. package/build/components/list-view/block.js.map +1 -1
  153. package/build/components/list-view/use-list-view-drop-zone.js +1 -1
  154. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  155. package/build/components/media-upload/index.native.js +4 -1
  156. package/build/components/media-upload/index.native.js.map +1 -1
  157. package/build/components/off-canvas-editor/appender.js +50 -3
  158. package/build/components/off-canvas-editor/appender.js.map +1 -1
  159. package/build/components/off-canvas-editor/block-contents.js +3 -1
  160. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  161. package/build/components/off-canvas-editor/block-select-button.js +10 -4
  162. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  163. package/build/components/off-canvas-editor/block.js +6 -27
  164. package/build/components/off-canvas-editor/block.js.map +1 -1
  165. package/build/components/off-canvas-editor/branch.js +25 -10
  166. package/build/components/off-canvas-editor/branch.js.map +1 -1
  167. package/build/components/off-canvas-editor/index.js +27 -20
  168. package/build/components/off-canvas-editor/index.js.map +1 -1
  169. package/build/components/off-canvas-editor/link-ui.js +2 -2
  170. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  171. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  172. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -1
  173. package/build/components/provider/index.js +21 -9
  174. package/build/components/provider/index.js.map +1 -1
  175. package/build/components/provider/index.native.js +5 -6
  176. package/build/components/provider/index.native.js.map +1 -1
  177. package/build/components/rich-text/use-before-input-rules.js +11 -3
  178. package/build/components/rich-text/use-before-input-rules.js.map +1 -1
  179. package/build/components/rich-text/utils.js +1 -1
  180. package/build/components/rich-text/utils.js.map +1 -1
  181. package/build/components/spacing-sizes-control/utils.js +2 -8
  182. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  183. package/build/components/tool-selector/index.js +3 -1
  184. package/build/components/tool-selector/index.js.map +1 -1
  185. package/build/components/url-popover/image-url-input-ui.js +7 -8
  186. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  187. package/build/components/use-block-display-information/index.js +1 -1
  188. package/build/components/use-block-display-information/index.js.map +1 -1
  189. package/build/experiments.js +45 -0
  190. package/build/experiments.js.map +1 -0
  191. package/build/experiments.native.js +40 -0
  192. package/build/experiments.native.js.map +1 -0
  193. package/build/hooks/anchor.js +2 -1
  194. package/build/hooks/anchor.js.map +1 -1
  195. package/build/hooks/border.js +1 -1
  196. package/build/hooks/border.js.map +1 -1
  197. package/build/hooks/child-layout.js +5 -1
  198. package/build/hooks/child-layout.js.map +1 -1
  199. package/build/hooks/color-panel.js +1 -1
  200. package/build/hooks/color-panel.js.map +1 -1
  201. package/build/hooks/color.js +3 -3
  202. package/build/hooks/color.js.map +1 -1
  203. package/build/hooks/custom-class-name.js +2 -1
  204. package/build/hooks/custom-class-name.js.map +1 -1
  205. package/build/hooks/dimensions.js +7 -5
  206. package/build/hooks/dimensions.js.map +1 -1
  207. package/build/hooks/margin.js +1 -0
  208. package/build/hooks/margin.js.map +1 -1
  209. package/build/hooks/padding.js +1 -0
  210. package/build/hooks/padding.js.map +1 -1
  211. package/build/hooks/position.js +39 -17
  212. package/build/hooks/position.js.map +1 -1
  213. package/build/hooks/typography.js +1 -1
  214. package/build/hooks/typography.js.map +1 -1
  215. package/build/hooks/use-color-props.js +3 -3
  216. package/build/hooks/use-color-props.js.map +1 -1
  217. package/build/hooks/utils.js +69 -3
  218. package/build/hooks/utils.js.map +1 -1
  219. package/build/index.js +10 -1
  220. package/build/index.js.map +1 -1
  221. package/build/layouts/constrained.js +3 -0
  222. package/build/layouts/constrained.js.map +1 -1
  223. package/build/layouts/flex.js +59 -9
  224. package/build/layouts/flex.js.map +1 -1
  225. package/build/layouts/flow.js +0 -18
  226. package/build/layouts/flow.js.map +1 -1
  227. package/build/store/actions.js +3 -30
  228. package/build/store/actions.js.map +1 -1
  229. package/build/store/defaults.js +5 -2
  230. package/build/store/defaults.js.map +1 -1
  231. package/build/store/index.js +11 -2
  232. package/build/store/index.js.map +1 -1
  233. package/build/store/private-actions.js +78 -0
  234. package/build/store/private-actions.js.map +1 -0
  235. package/build/store/private-selectors.js +32 -0
  236. package/build/store/private-selectors.js.map +1 -0
  237. package/build/store/reducer.js +1 -1
  238. package/build/store/reducer.js.map +1 -1
  239. package/build/store/selectors.js +60 -48
  240. package/build/store/selectors.js.map +1 -1
  241. package/build/utils/block-variation-transforms.js +1 -1
  242. package/build/utils/block-variation-transforms.js.map +1 -1
  243. package/build/utils/parse-css-unit-to-px.js +1 -1
  244. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  245. package/build/utils/transform-styles/index.js +1 -7
  246. package/build/utils/transform-styles/index.js.map +1 -1
  247. package/build-module/components/alignment-control/ui.js +1 -1
  248. package/build-module/components/alignment-control/ui.js.map +1 -1
  249. package/build-module/components/autocomplete/index.js +2 -6
  250. package/build-module/components/autocomplete/index.js.map +1 -1
  251. package/build-module/components/block-actions/index.js +7 -2
  252. package/build-module/components/block-actions/index.js.map +1 -1
  253. package/build-module/components/block-alignment-matrix-control/index.js +2 -2
  254. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  255. package/build-module/components/block-card/index.js +2 -4
  256. package/build-module/components/block-card/index.js.map +1 -1
  257. package/build-module/components/block-edit/index.js +7 -0
  258. package/build-module/components/block-edit/index.js.map +1 -1
  259. package/build-module/components/block-inspector/index.js +15 -14
  260. package/build-module/components/block-inspector/index.js.map +1 -1
  261. package/build-module/components/block-list/use-in-between-inserter.js +5 -0
  262. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  263. package/build-module/components/block-lock/modal.js +0 -1
  264. package/build-module/components/block-lock/modal.js.map +1 -1
  265. package/build-module/components/block-mover/mover-description.js +2 -2
  266. package/build-module/components/block-mover/mover-description.js.map +1 -1
  267. package/build-module/components/block-navigation/dropdown.js +3 -1
  268. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  269. package/build-module/components/block-pattern-setup/index.js +1 -1
  270. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  271. package/build-module/components/block-pattern-setup/use-patterns-setup.js +2 -2
  272. package/build-module/components/block-pattern-setup/use-patterns-setup.js.map +1 -1
  273. package/build-module/components/block-patterns-list/index.js +32 -3
  274. package/build-module/components/block-patterns-list/index.js.map +1 -1
  275. package/build-module/components/block-preview/auto.js +9 -11
  276. package/build-module/components/block-preview/auto.js.map +1 -1
  277. package/build-module/components/block-preview/index.js +31 -8
  278. package/build-module/components/block-preview/index.js.map +1 -1
  279. package/build-module/components/block-selection-clearer/index.js +1 -1
  280. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  281. package/build-module/components/block-settings/container.native.js +6 -30
  282. package/build-module/components/block-settings/container.native.js.map +1 -1
  283. package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -6
  284. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  285. package/build-module/components/block-settings-menu-controls/index.js +2 -7
  286. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  287. package/build-module/components/block-switcher/utils.js +1 -1
  288. package/build-module/components/block-switcher/utils.js.map +1 -1
  289. package/build-module/components/block-tools/selected-block-popover.js +55 -48
  290. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  291. package/build-module/components/block-vertical-alignment-control/icons.js +12 -0
  292. package/build-module/components/block-vertical-alignment-control/icons.js.map +1 -1
  293. package/build-module/components/block-vertical-alignment-control/ui.js +10 -5
  294. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  295. package/build-module/components/color-style-selector/index.js +3 -1
  296. package/build-module/components/color-style-selector/index.js.map +1 -1
  297. package/build-module/components/date-format-picker/index.js +4 -5
  298. package/build-module/components/date-format-picker/index.js.map +1 -1
  299. package/build-module/components/font-family/index.js +1 -6
  300. package/build-module/components/font-family/index.js.map +1 -1
  301. package/build-module/components/font-sizes/fluid-utils.js +1 -1
  302. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  303. package/build-module/components/font-sizes/utils.js +1 -1
  304. package/build-module/components/font-sizes/utils.js.map +1 -1
  305. package/build-module/components/global-styles/context.js +12 -0
  306. package/build-module/components/global-styles/context.js.map +1 -0
  307. package/build-module/components/global-styles/hooks.js +121 -0
  308. package/build-module/components/global-styles/hooks.js.map +1 -0
  309. package/build-module/components/global-styles/index.js +4 -0
  310. package/build-module/components/global-styles/index.js.map +1 -0
  311. package/build-module/components/global-styles/typography-utils.js +84 -0
  312. package/build-module/components/global-styles/typography-utils.js.map +1 -0
  313. package/build-module/components/global-styles/use-global-styles-output.js +930 -0
  314. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -0
  315. package/build-module/components/global-styles/utils.js +321 -0
  316. package/build-module/components/global-styles/utils.js.map +1 -0
  317. package/build-module/components/height-control/index.js +14 -1
  318. package/build-module/components/height-control/index.js.map +1 -1
  319. package/build-module/components/iframe/index.js +6 -4
  320. package/build-module/components/iframe/index.js.map +1 -1
  321. package/build-module/components/image-editor/constants.js +1 -1
  322. package/build-module/components/image-editor/constants.js.map +1 -1
  323. package/build-module/components/image-editor/context.js +1 -2
  324. package/build-module/components/image-editor/context.js.map +1 -1
  325. package/build-module/components/image-editor/cropper.js +3 -1
  326. package/build-module/components/image-editor/cropper.js.map +1 -1
  327. package/build-module/components/image-editor/index.js +13 -3
  328. package/build-module/components/image-editor/index.js.map +1 -1
  329. package/build-module/components/image-editor/use-transform-image.js +12 -37
  330. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  331. package/build-module/components/image-size-control/index.js +1 -6
  332. package/build-module/components/image-size-control/index.js.map +1 -1
  333. package/build-module/components/index.js +2 -3
  334. package/build-module/components/index.js.map +1 -1
  335. package/build-module/components/inner-blocks/index.js +21 -32
  336. package/build-module/components/inner-blocks/index.js.map +1 -1
  337. package/build-module/components/inner-blocks/index.native.js +9 -22
  338. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  339. package/build-module/components/inner-blocks/use-block-context.js +43 -0
  340. package/build-module/components/inner-blocks/use-block-context.js.map +1 -0
  341. package/build-module/components/inserter/block-patterns-explorer/explorer.js +0 -1
  342. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  343. package/build-module/components/inserter/block-patterns-tab.js +9 -2
  344. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  345. package/build-module/components/inserter/block-types-tab.js +3 -3
  346. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  347. package/build-module/components/inserter/hooks/use-patterns-state.js +1 -6
  348. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  349. package/build-module/components/inserter/index.js +5 -4
  350. package/build-module/components/inserter/index.js.map +1 -1
  351. package/build-module/components/inserter/media-tab/hooks.js +145 -56
  352. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  353. package/build-module/components/inserter/media-tab/media-list.js +74 -24
  354. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  355. package/build-module/components/inserter/media-tab/media-panel.js +14 -14
  356. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  357. package/build-module/components/inserter/media-tab/media-tab.js +7 -4
  358. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  359. package/build-module/components/inserter/media-tab/utils.js +27 -15
  360. package/build-module/components/inserter/media-tab/utils.js.map +1 -1
  361. package/build-module/components/inserter/menu.js +4 -0
  362. package/build-module/components/inserter/menu.js.map +1 -1
  363. package/build-module/components/inserter/preview-panel.js +5 -3
  364. package/build-module/components/inserter/preview-panel.js.map +1 -1
  365. package/build-module/components/inserter/search-results.js +2 -6
  366. package/build-module/components/inserter/search-results.js.map +1 -1
  367. package/build-module/components/inserter-list-item/index.js +1 -9
  368. package/build-module/components/inserter-list-item/index.js.map +1 -1
  369. package/build-module/components/inspector-controls/fill.js +14 -2
  370. package/build-module/components/inspector-controls/fill.js.map +1 -1
  371. package/build-module/components/inspector-controls/fill.native.js +13 -1
  372. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  373. package/build-module/components/inspector-controls/groups.js +4 -0
  374. package/build-module/components/inspector-controls/groups.js.map +1 -1
  375. package/build-module/components/inspector-controls/index.js +2 -2
  376. package/build-module/components/inspector-controls/index.js.map +1 -1
  377. package/build-module/components/inspector-controls/slot.js +13 -1
  378. package/build-module/components/inspector-controls/slot.js.map +1 -1
  379. package/build-module/components/inspector-controls/slot.native.js +13 -1
  380. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  381. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  382. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -1
  383. package/build-module/components/inspector-controls-tabs/index.js +2 -2
  384. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  385. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  386. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  387. package/build-module/components/inspector-controls-tabs/styles-tab.js +6 -4
  388. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  389. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +17 -12
  390. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  391. package/build-module/components/justify-content-control/ui.js +9 -2
  392. package/build-module/components/justify-content-control/ui.js.map +1 -1
  393. package/build-module/components/link-control/index.js +45 -16
  394. package/build-module/components/link-control/index.js.map +1 -1
  395. package/build-module/components/list-view/block.js +1 -1
  396. package/build-module/components/list-view/block.js.map +1 -1
  397. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -1
  398. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  399. package/build-module/components/media-upload/index.native.js +4 -1
  400. package/build-module/components/media-upload/index.native.js.map +1 -1
  401. package/build-module/components/off-canvas-editor/appender.js +47 -4
  402. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  403. package/build-module/components/off-canvas-editor/block-contents.js +2 -1
  404. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  405. package/build-module/components/off-canvas-editor/block-select-button.js +9 -4
  406. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  407. package/build-module/components/off-canvas-editor/block.js +6 -25
  408. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  409. package/build-module/components/off-canvas-editor/branch.js +23 -11
  410. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  411. package/build-module/components/off-canvas-editor/index.js +27 -19
  412. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  413. package/build-module/components/off-canvas-editor/link-ui.js +2 -2
  414. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  415. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  416. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -1
  417. package/build-module/components/provider/index.js +16 -9
  418. package/build-module/components/provider/index.js.map +1 -1
  419. package/build-module/components/provider/index.native.js +4 -4
  420. package/build-module/components/provider/index.native.js.map +1 -1
  421. package/build-module/components/rich-text/use-before-input-rules.js +10 -2
  422. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -1
  423. package/build-module/components/rich-text/utils.js +1 -1
  424. package/build-module/components/rich-text/utils.js.map +1 -1
  425. package/build-module/components/spacing-sizes-control/utils.js +2 -7
  426. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  427. package/build-module/components/tool-selector/index.js +3 -1
  428. package/build-module/components/tool-selector/index.js.map +1 -1
  429. package/build-module/components/url-popover/image-url-input-ui.js +8 -8
  430. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  431. package/build-module/components/use-block-display-information/index.js +1 -1
  432. package/build-module/components/use-block-display-information/index.js.map +1 -1
  433. package/build-module/experiments.js +25 -0
  434. package/build-module/experiments.js.map +1 -0
  435. package/build-module/experiments.native.js +23 -0
  436. package/build-module/experiments.native.js.map +1 -0
  437. package/build-module/hooks/anchor.js +2 -1
  438. package/build-module/hooks/anchor.js.map +1 -1
  439. package/build-module/hooks/border.js +1 -1
  440. package/build-module/hooks/border.js.map +1 -1
  441. package/build-module/hooks/child-layout.js +5 -1
  442. package/build-module/hooks/child-layout.js.map +1 -1
  443. package/build-module/hooks/color-panel.js +1 -1
  444. package/build-module/hooks/color-panel.js.map +1 -1
  445. package/build-module/hooks/color.js +3 -3
  446. package/build-module/hooks/color.js.map +1 -1
  447. package/build-module/hooks/custom-class-name.js +2 -1
  448. package/build-module/hooks/custom-class-name.js.map +1 -1
  449. package/build-module/hooks/dimensions.js +6 -5
  450. package/build-module/hooks/dimensions.js.map +1 -1
  451. package/build-module/hooks/margin.js +1 -0
  452. package/build-module/hooks/margin.js.map +1 -1
  453. package/build-module/hooks/padding.js +1 -0
  454. package/build-module/hooks/padding.js.map +1 -1
  455. package/build-module/hooks/position.js +36 -16
  456. package/build-module/hooks/position.js.map +1 -1
  457. package/build-module/hooks/typography.js +1 -1
  458. package/build-module/hooks/typography.js.map +1 -1
  459. package/build-module/hooks/use-color-props.js +3 -3
  460. package/build-module/hooks/use-color-props.js.map +1 -1
  461. package/build-module/hooks/utils.js +70 -4
  462. package/build-module/hooks/utils.js.map +1 -1
  463. package/build-module/index.js +1 -0
  464. package/build-module/index.js.map +1 -1
  465. package/build-module/layouts/constrained.js +3 -0
  466. package/build-module/layouts/constrained.js.map +1 -1
  467. package/build-module/layouts/flex.js +60 -10
  468. package/build-module/layouts/flex.js.map +1 -1
  469. package/build-module/layouts/flow.js +0 -18
  470. package/build-module/layouts/flow.js.map +1 -1
  471. package/build-module/store/actions.js +2 -26
  472. package/build-module/store/actions.js.map +1 -1
  473. package/build-module/store/defaults.js +5 -2
  474. package/build-module/store/defaults.js.map +1 -1
  475. package/build-module/store/index.js +8 -2
  476. package/build-module/store/index.js.map +1 -1
  477. package/build-module/store/private-actions.js +66 -0
  478. package/build-module/store/private-actions.js.map +1 -0
  479. package/build-module/store/private-selectors.js +23 -0
  480. package/build-module/store/private-selectors.js.map +1 -0
  481. package/build-module/store/reducer.js +1 -1
  482. package/build-module/store/reducer.js.map +1 -1
  483. package/build-module/store/selectors.js +48 -37
  484. package/build-module/store/selectors.js.map +1 -1
  485. package/build-module/utils/block-variation-transforms.js +1 -1
  486. package/build-module/utils/block-variation-transforms.js.map +1 -1
  487. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  488. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  489. package/build-module/utils/transform-styles/index.js +1 -6
  490. package/build-module/utils/transform-styles/index.js.map +1 -1
  491. package/build-style/content-rtl.css +283 -3
  492. package/build-style/content.css +283 -3
  493. package/build-style/style-rtl.css +105 -221
  494. package/build-style/style.css +105 -221
  495. package/package.json +30 -29
  496. package/src/components/alignment-control/test/__snapshots__/index.js.snap +3 -3
  497. package/src/components/alignment-control/test/index.js +5 -15
  498. package/src/components/alignment-control/ui.js +1 -1
  499. package/src/components/autocomplete/index.js +3 -6
  500. package/src/components/block-actions/index.js +9 -0
  501. package/src/components/block-alignment-control/test/index.js +3 -11
  502. package/src/components/block-alignment-matrix-control/index.js +1 -2
  503. package/src/components/block-card/index.js +1 -4
  504. package/src/components/block-content-overlay/content.scss +4 -4
  505. package/src/components/block-edit/index.js +15 -1
  506. package/src/components/block-icon/content.scss +31 -0
  507. package/src/components/block-inspector/index.js +13 -17
  508. package/src/components/block-list/use-in-between-inserter.js +5 -0
  509. package/src/components/block-lock/modal.js +0 -1
  510. package/src/components/block-mover/mover-description.js +2 -2
  511. package/src/components/block-mover/stories/index.js +3 -3
  512. package/src/components/block-navigation/dropdown.js +1 -1
  513. package/src/components/block-pattern-setup/index.js +1 -4
  514. package/src/components/block-pattern-setup/use-patterns-setup.js +2 -5
  515. package/src/components/block-patterns-list/index.js +29 -3
  516. package/src/components/block-preview/README.md +9 -9
  517. package/src/components/block-preview/auto.js +9 -11
  518. package/src/components/block-preview/content.scss +23 -0
  519. package/src/components/block-preview/index.js +40 -10
  520. package/src/components/block-preview/style.scss +0 -23
  521. package/src/components/block-selection-clearer/index.js +1 -1
  522. package/src/components/block-selection-clearer/test/index.js +6 -6
  523. package/src/components/block-settings/container.native.js +7 -26
  524. package/src/components/block-settings-menu/block-settings-dropdown.js +13 -5
  525. package/src/components/block-settings-menu-controls/index.js +2 -10
  526. package/src/components/block-switcher/test/index.js +43 -44
  527. package/src/components/block-switcher/utils.js +1 -1
  528. package/src/components/block-tools/selected-block-popover.js +77 -80
  529. package/src/components/block-tools/style.scss +0 -1
  530. package/src/components/block-variation-picker/{style.scss → content.scss} +0 -0
  531. package/src/components/block-vertical-alignment-control/icons.js +12 -0
  532. package/src/components/block-vertical-alignment-control/test/index.js +3 -11
  533. package/src/components/block-vertical-alignment-control/ui.js +16 -6
  534. package/src/components/color-style-selector/index.js +1 -1
  535. package/src/components/colors/test/with-colors.js +2 -8
  536. package/src/components/date-format-picker/index.js +23 -24
  537. package/src/components/date-format-picker/style.scss +0 -6
  538. package/src/components/default-block-appender/content.scss +18 -0
  539. package/src/components/default-block-appender/test/index.js +2 -8
  540. package/src/components/font-family/index.js +1 -6
  541. package/src/components/font-sizes/fluid-utils.js +1 -1
  542. package/src/components/font-sizes/utils.js +1 -1
  543. package/src/components/global-styles/README.md +77 -0
  544. package/src/components/global-styles/context.js +15 -0
  545. package/src/components/global-styles/hooks.js +145 -0
  546. package/src/components/global-styles/index.js +7 -0
  547. package/src/components/global-styles/test/typography-utils.js +393 -0
  548. package/src/components/global-styles/test/use-global-styles-output.js +814 -0
  549. package/src/components/global-styles/test/utils.js +206 -0
  550. package/src/components/global-styles/typography-utils.js +87 -0
  551. package/src/components/global-styles/use-global-styles-output.js +1088 -0
  552. package/src/components/global-styles/utils.js +373 -0
  553. package/src/components/height-control/README.md +55 -0
  554. package/src/components/height-control/index.js +13 -1
  555. package/src/components/iframe/index.js +8 -2
  556. package/src/components/image-editor/constants.js +1 -1
  557. package/src/components/image-editor/context.js +5 -9
  558. package/src/components/image-editor/cropper.js +3 -1
  559. package/src/components/image-editor/index.js +13 -4
  560. package/src/components/image-editor/use-transform-image.js +14 -55
  561. package/src/components/image-size-control/index.js +1 -6
  562. package/src/components/index.js +2 -6
  563. package/src/components/inner-blocks/index.js +29 -33
  564. package/src/components/inner-blocks/index.native.js +27 -47
  565. package/src/components/inner-blocks/use-block-context.js +47 -0
  566. package/src/components/inserter/block-patterns-explorer/explorer.js +0 -1
  567. package/src/components/inserter/block-patterns-tab.js +9 -1
  568. package/src/components/inserter/block-types-tab.js +3 -4
  569. package/src/components/inserter/hooks/use-patterns-state.js +1 -6
  570. package/src/components/inserter/index.js +3 -4
  571. package/src/components/inserter/media-tab/hooks.js +167 -65
  572. package/src/components/inserter/media-tab/media-list.js +94 -26
  573. package/src/components/inserter/media-tab/media-panel.js +9 -20
  574. package/src/components/inserter/media-tab/media-tab.js +12 -4
  575. package/src/components/inserter/media-tab/utils.js +20 -10
  576. package/src/components/inserter/menu.js +8 -0
  577. package/src/components/inserter/preview-panel.js +4 -2
  578. package/src/components/inserter/search-results.js +2 -6
  579. package/src/components/inserter/stories/index.js +9 -9
  580. package/src/components/inserter/style.scss +58 -11
  581. package/src/components/inserter-list-item/index.js +0 -7
  582. package/src/components/inspector-controls/README.md +3 -7
  583. package/src/components/inspector-controls/fill.js +15 -1
  584. package/src/components/inspector-controls/fill.native.js +14 -1
  585. package/src/components/inspector-controls/groups.js +3 -0
  586. package/src/components/inspector-controls/index.js +2 -6
  587. package/src/components/inspector-controls/slot.js +14 -1
  588. package/src/components/inspector-controls/slot.native.js +14 -1
  589. package/src/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  590. package/src/components/inspector-controls-tabs/index.js +2 -4
  591. package/src/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  592. package/src/components/inspector-controls-tabs/styles-tab.js +5 -7
  593. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +21 -10
  594. package/src/components/justify-content-control/ui.js +9 -0
  595. package/src/components/link-control/index.js +59 -23
  596. package/src/components/link-control/style.scss +7 -24
  597. package/src/components/link-control/test/index.js +134 -5
  598. package/src/components/list-view/block.js +1 -1
  599. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  600. package/src/components/media-replace-flow/test/index.js +4 -12
  601. package/src/components/media-upload/index.native.js +2 -2
  602. package/src/components/off-canvas-editor/README.md +2 -2
  603. package/src/components/off-canvas-editor/appender.js +93 -37
  604. package/src/components/off-canvas-editor/block-contents.js +2 -1
  605. package/src/components/off-canvas-editor/block-select-button.js +12 -1
  606. package/src/components/off-canvas-editor/block.js +3 -42
  607. package/src/components/off-canvas-editor/branch.js +32 -5
  608. package/src/components/off-canvas-editor/index.js +20 -20
  609. package/src/components/off-canvas-editor/link-ui.js +2 -2
  610. package/src/components/off-canvas-editor/style.scss +5 -1
  611. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  612. package/src/components/provider/index.js +33 -14
  613. package/src/components/provider/index.native.js +4 -3
  614. package/src/components/provider/test/experimental-provider.js +94 -0
  615. package/src/components/provider/test/use-block-sync.js +10 -0
  616. package/src/components/responsive-block-control/test/index.js +1 -5
  617. package/src/components/rich-text/use-before-input-rules.js +10 -2
  618. package/src/components/rich-text/utils.js +1 -1
  619. package/src/components/spacing-sizes-control/utils.js +2 -7
  620. package/src/components/tool-selector/index.js +1 -1
  621. package/src/components/url-input/test/button.js +24 -24
  622. package/src/components/url-popover/image-url-input-ui.js +7 -8
  623. package/src/components/url-popover/style.scss +0 -10
  624. package/src/components/use-block-display-information/index.js +1 -1
  625. package/src/components/warning/{style.scss → content.scss} +0 -0
  626. package/src/components/warning/test/index.js +1 -5
  627. package/src/content.scss +7 -0
  628. package/src/experiments.js +27 -0
  629. package/src/experiments.native.js +25 -0
  630. package/src/hooks/anchor.js +2 -1
  631. package/src/hooks/border.js +1 -1
  632. package/src/hooks/child-layout.js +6 -1
  633. package/src/hooks/color-panel.js +1 -1
  634. package/src/hooks/color.js +3 -3
  635. package/src/hooks/custom-class-name.js +2 -1
  636. package/src/hooks/dimensions.js +6 -6
  637. package/src/hooks/layout.scss +4 -0
  638. package/src/hooks/margin.js +1 -0
  639. package/src/hooks/padding.js +1 -0
  640. package/src/hooks/position.js +56 -36
  641. package/src/hooks/test/align.native.js +1 -1
  642. package/src/hooks/test/utils.js +104 -0
  643. package/src/hooks/typography.js +1 -1
  644. package/src/hooks/use-color-props.js +3 -3
  645. package/src/hooks/utils.js +68 -2
  646. package/src/index.js +1 -0
  647. package/src/layouts/constrained.js +3 -0
  648. package/src/layouts/flex.js +66 -14
  649. package/src/layouts/flow.js +0 -9
  650. package/src/store/actions.js +2 -26
  651. package/src/store/defaults.js +7 -2
  652. package/src/store/index.js +8 -2
  653. package/src/store/private-actions.js +65 -0
  654. package/src/store/private-selectors.js +20 -0
  655. package/src/store/reducer.js +1 -1
  656. package/src/store/selectors.js +103 -62
  657. package/src/store/test/actions.js +0 -18
  658. package/src/store/test/private-actions.js +22 -0
  659. package/src/store/test/private-selectors.js +52 -0
  660. package/src/store/test/selectors.js +52 -54
  661. package/src/style.scss +3 -5
  662. package/src/utils/block-variation-transforms.js +1 -1
  663. package/src/utils/parse-css-unit-to-px.js +3 -1
  664. package/src/utils/test/parse-css-unit-to-px.js +16 -24
  665. package/src/utils/transform-styles/index.js +1 -6
  666. package/build/components/inner-blocks/get-block-context.js +0 -45
  667. package/build/components/inner-blocks/get-block-context.js.map +0 -1
  668. package/build/components/off-canvas-editor/block-edit-button.js +0 -50
  669. package/build/components/off-canvas-editor/block-edit-button.js.map +0 -1
  670. package/build-module/components/inner-blocks/get-block-context.js +0 -37
  671. package/build-module/components/inner-blocks/get-block-context.js.map +0 -1
  672. package/build-module/components/off-canvas-editor/block-edit-button.js +0 -35
  673. package/build-module/components/off-canvas-editor/block-edit-button.js.map +0 -1
  674. package/src/components/inner-blocks/get-block-context.js +0 -39
  675. package/src/components/off-canvas-editor/block-edit-button.js +0 -27
@@ -1,11 +1,6 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { map } from 'lodash';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
-
9
4
  import { useCallback } from '@wordpress/element';
10
5
  import { cloneBlock } from '@wordpress/blocks';
11
6
  import { useDispatch, useSelect } from '@wordpress/data';
@@ -43,7 +38,7 @@ const usePatternsState = (onInsert, rootClientId) => {
43
38
  createSuccessNotice
44
39
  } = useDispatch(noticesStore);
45
40
  const onClickPattern = useCallback((pattern, blocks) => {
46
- onInsert(map(blocks, block => cloneBlock(block)), pattern.name);
41
+ onInsert((blocks !== null && blocks !== void 0 ? blocks : []).map(block => cloneBlock(block)), pattern.name);
47
42
  createSuccessNotice(sprintf(
48
43
  /* translators: %s: block pattern title. */
49
44
  __('Block pattern "%s" inserted.'), pattern.title), {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"names":["map","useCallback","cloneBlock","useDispatch","useSelect","__","sprintf","store","noticesStore","blockEditorStore","usePatternsState","onInsert","rootClientId","patternCategories","patterns","select","__experimentalGetAllowedPatterns","getSettings","__experimentalBlockPatternCategories","createSuccessNotice","onClickPattern","pattern","blocks","block","name","title","type"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,GAAT,QAAoB,QAApB;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,oBAA5B;AACA,SAASC,UAAT,QAA2B,mBAA3B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,gBAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B;AACtD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkCV,SAAS,CAC9CW,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,gCAAF;AAAoCC,MAAAA;AAApC,QACLF,MAAM,CAAEN,gBAAF,CADP;AAEA,WAAO;AACNK,MAAAA,QAAQ,EAAEE,gCAAgC,CAAEJ,YAAF,CADpC;AAENC,MAAAA,iBAAiB,EAChBI,WAAW,GAAGC;AAHT,KAAP;AAKA,GAT+C,EAUhD,CAAEN,YAAF,CAVgD,CAAjD;AAYA,QAAM;AAAEO,IAAAA;AAAF,MAA0BhB,WAAW,CAAEK,YAAF,CAA3C;AACA,QAAMY,cAAc,GAAGnB,WAAW,CAAE,CAAEoB,OAAF,EAAWC,MAAX,KAAuB;AAC1DX,IAAAA,QAAQ,CACPX,GAAG,CAAEsB,MAAF,EAAYC,KAAF,IAAarB,UAAU,CAAEqB,KAAF,CAAjC,CADI,EAEPF,OAAO,CAACG,IAFD,CAAR;AAIAL,IAAAA,mBAAmB,CAClBb,OAAO;AACN;AACAD,IAAAA,EAAE,CAAE,8BAAF,CAFI,EAGNgB,OAAO,CAACI,KAHF,CADW,EAMlB;AACCC,MAAAA,IAAI,EAAE;AADP,KANkB,CAAnB;AAUA,GAfiC,EAe/B,EAf+B,CAAlC;AAiBA,SAAO,CAAEZ,QAAF,EAAYD,iBAAZ,EAA+BO,cAA/B,CAAP;AACA,CAhCD;;AAkCA,eAAeV,gBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { map } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Retrieves the block patterns inserter state.\n *\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {string=} rootClientId Insertion's root client ID.\n *\n * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)\n */\nconst usePatternsState = ( onInsert, rootClientId ) => {\n\tconst { patternCategories, patterns } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tpatternCategories:\n\t\t\t\t\tgetSettings().__experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback( ( pattern, blocks ) => {\n\t\tonInsert(\n\t\t\tmap( blocks, ( block ) => cloneBlock( block ) ),\n\t\t\tpattern.name\n\t\t);\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: block pattern title. */\n\t\t\t\t__( 'Block pattern \"%s\" inserted.' ),\n\t\t\t\tpattern.title\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}, [] );\n\n\treturn [ patterns, patternCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"names":["useCallback","cloneBlock","useDispatch","useSelect","__","sprintf","store","noticesStore","blockEditorStore","usePatternsState","onInsert","rootClientId","patternCategories","patterns","select","__experimentalGetAllowedPatterns","getSettings","__experimentalBlockPatternCategories","createSuccessNotice","onClickPattern","pattern","blocks","map","block","name","title","type"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,QAA4B,oBAA5B;AACA,SAASC,UAAT,QAA2B,mBAA3B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,gBAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B;AACtD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkCV,SAAS,CAC9CW,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,gCAAF;AAAoCC,MAAAA;AAApC,QACLF,MAAM,CAAEN,gBAAF,CADP;AAEA,WAAO;AACNK,MAAAA,QAAQ,EAAEE,gCAAgC,CAAEJ,YAAF,CADpC;AAENC,MAAAA,iBAAiB,EAChBI,WAAW,GAAGC;AAHT,KAAP;AAKA,GAT+C,EAUhD,CAAEN,YAAF,CAVgD,CAAjD;AAYA,QAAM;AAAEO,IAAAA;AAAF,MAA0BhB,WAAW,CAAEK,YAAF,CAA3C;AACA,QAAMY,cAAc,GAAGnB,WAAW,CAAE,CAAEoB,OAAF,EAAWC,MAAX,KAAuB;AAC1DX,IAAAA,QAAQ,CACP,CAAEW,MAAF,aAAEA,MAAF,cAAEA,MAAF,GAAY,EAAZ,EAAiBC,GAAjB,CAAwBC,KAAF,IAAatB,UAAU,CAAEsB,KAAF,CAA7C,CADO,EAEPH,OAAO,CAACI,IAFD,CAAR;AAIAN,IAAAA,mBAAmB,CAClBb,OAAO;AACN;AACAD,IAAAA,EAAE,CAAE,8BAAF,CAFI,EAGNgB,OAAO,CAACK,KAHF,CADW,EAMlB;AACCC,MAAAA,IAAI,EAAE;AADP,KANkB,CAAnB;AAUA,GAfiC,EAe/B,EAf+B,CAAlC;AAiBA,SAAO,CAAEb,QAAF,EAAYD,iBAAZ,EAA+BO,cAA/B,CAAP;AACA,CAhCD;;AAkCA,eAAeV,gBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Retrieves the block patterns inserter state.\n *\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {string=} rootClientId Insertion's root client ID.\n *\n * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)\n */\nconst usePatternsState = ( onInsert, rootClientId ) => {\n\tconst { patternCategories, patterns } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tpatternCategories:\n\t\t\t\t\tgetSettings().__experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback( ( pattern, blocks ) => {\n\t\tonInsert(\n\t\t\t( blocks ?? [] ).map( ( block ) => cloneBlock( block ) ),\n\t\t\tpattern.name\n\t\t);\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: block pattern title. */\n\t\t\t\t__( 'Block pattern \"%s\" inserted.' ),\n\t\t\t\tpattern.title\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t}, [] );\n\n\treturn [ patterns, patternCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n"]}
@@ -208,7 +208,9 @@ class Inserter extends Component {
208
208
  contentClassName: classnames('block-editor-inserter__popover', {
209
209
  'is-quick': isQuick
210
210
  }),
211
- position: position,
211
+ popoverProps: {
212
+ position
213
+ },
212
214
  onToggle: this.onToggle,
213
215
  expandOnMobile: true,
214
216
  headerTitle: __('Add a block'),
@@ -231,7 +233,7 @@ export default compose([withSelect((select, _ref4) => {
231
233
  const {
232
234
  getBlockRootClientId,
233
235
  hasInserterItems,
234
- __experimentalGetAllowedBlocks,
236
+ getAllowedBlocks,
235
237
  __experimentalGetDirectInsertBlock,
236
238
  getSettings
237
239
  } = select(blockEditorStore);
@@ -239,8 +241,7 @@ export default compose([withSelect((select, _ref4) => {
239
241
  getBlockVariations
240
242
  } = select(blocksStore);
241
243
  rootClientId = rootClientId || getBlockRootClientId(clientId) || undefined;
242
-
243
- const allowedBlocks = __experimentalGetAllowedBlocks(rootClientId);
244
+ const allowedBlocks = getAllowedBlocks(rootClientId);
244
245
 
245
246
  const directInsertBlock = shouldDirectInsert && __experimentalGetDirectInsertBlock(rootClientId);
246
247
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/index.js"],"names":["classnames","speak","__","_x","sprintf","Dropdown","Button","Component","withDispatch","withSelect","compose","ifCondition","createBlock","store","blocksStore","plus","InserterMenu","QuickInserter","blockEditorStore","defaultRenderToggle","onToggle","disabled","isOpen","blockTitle","hasSingleBlockType","toggleProps","prioritizePatterns","label","onClick","rest","handleClick","event","Inserter","constructor","arguments","bind","renderToggle","renderContent","props","directInsertBlock","hasItems","onClose","rootClientId","clientId","isAppender","showInserterHelpPanel","__experimentalIsQuick","isQuick","onSelectOrClose","selectBlockOnInsert","blocks","firstBlock","Array","isArray","length","render","position","insertOnlyAllowedBlock","select","shouldDirectInsert","getBlockRootClientId","hasInserterItems","__experimentalGetAllowedBlocks","__experimentalGetDirectInsertBlock","getSettings","getBlockVariations","undefined","allowedBlocks","settings","name","allowedBlockType","title","__experimentalPreferPatternsOnRoot","dispatch","ownProps","getAdjacentBlockAttributes","attributesToCopy","getBlock","getPreviousBlockClientId","result","adjacentAttributes","parentBlock","innerBlocks","lastInnerBlock","attributes","currentBlock","previousBlock","forEach","attribute","hasOwnProperty","getInsertionIndex","getBlockIndex","getBlockSelectionEnd","getBlockOrder","end","insertBlock","blockToInsert","newAttributes","message"],"mappings":";;;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,KAAT,QAAsB,iBAAtB;AACA,SAASC,EAAT,EAAaC,EAAb,EAAiBC,OAAjB,QAAgC,iBAAhC;AACA,SAASC,QAAT,EAAmBC,MAAnB,QAAiC,uBAAjC;AACA,SAASC,SAAT,QAA0B,oBAA1B;AACA,SAASC,YAAT,EAAuBC,UAAvB,QAAyC,iBAAzC;AACA,SAASC,OAAT,EAAkBC,WAAlB,QAAqC,oBAArC;AACA,SAASC,WAAT,EAAsBC,KAAK,IAAIC,WAA/B,QAAkD,mBAAlD;AACA,SAASC,IAAT,QAAqB,kBAArB;AAEA;AACA;AACA;;AACA,OAAOC,YAAP,MAAyB,QAAzB;AACA,OAAOC,aAAP,MAA0B,kBAA1B;AACA,SAASJ,KAAK,IAAIK,gBAAlB,QAA0C,aAA1C;;AAEA,MAAMC,mBAAmB,GAAG,QAQrB;AAAA,MARuB;AAC7BC,IAAAA,QAD6B;AAE7BC,IAAAA,QAF6B;AAG7BC,IAAAA,MAH6B;AAI7BC,IAAAA,UAJ6B;AAK7BC,IAAAA,kBAL6B;AAM7BC,IAAAA,WAAW,GAAG,EANe;AAO7BC,IAAAA;AAP6B,GAQvB;AACN,MAAIC,KAAJ;;AACA,MAAKH,kBAAL,EAA0B;AACzBG,IAAAA,KAAK,GAAGvB,OAAO,EACd;AACAD,IAAAA,EAAE,CAAE,QAAF,EAAY,qCAAZ,CAFY,EAGdoB,UAHc,CAAf;AAKA,GAND,MAMO,IAAKG,kBAAL,EAA0B;AAChCC,IAAAA,KAAK,GAAGzB,EAAE,CAAE,aAAF,CAAV;AACA,GAFM,MAEA;AACNyB,IAAAA,KAAK,GAAGxB,EAAE,CAAE,WAAF,EAAe,yCAAf,CAAV;AACA;;AAED,QAAM;AAAEyB,IAAAA,OAAF;AAAW,OAAGC;AAAd,MAAuBJ,WAA7B,CAdM,CAgBN;;AACA,WAASK,WAAT,CAAsBC,KAAtB,EAA8B;AAC7B,QAAKX,QAAL,EAAgB;AACfA,MAAAA,QAAQ,CAAEW,KAAF,CAAR;AACA;;AACD,QAAKH,OAAL,EAAe;AACdA,MAAAA,OAAO,CAAEG,KAAF,CAAP;AACA;AACD;;AAED,SACC,cAAC,MAAD;AACC,IAAA,IAAI,EAAGhB,IADR;AAEC,IAAA,KAAK,EAAGY,KAFT;AAGC,IAAA,eAAe,EAAC,QAHjB;AAIC,IAAA,OAAO,EAAGG,WAJX;AAKC,IAAA,SAAS,EAAC,+BALX;AAMC,qBAAgB,CAAEN,kBAAF,GAAuB,MAAvB,GAAgC,KANjD;AAOC,qBAAgB,CAAEA,kBAAF,GAAuBF,MAAvB,GAAgC,KAPjD;AAQC,IAAA,QAAQ,EAAGD;AARZ,KASMQ,IATN,EADD;AAaA,CA/CD;;AAiDA,MAAMG,QAAN,SAAuBzB,SAAvB,CAAiC;AAChC0B,EAAAA,WAAW,GAAG;AACb,UAAO,GAAGC,SAAV;AAEA,SAAKd,QAAL,GAAgB,KAAKA,QAAL,CAAce,IAAd,CAAoB,IAApB,CAAhB;AACA,SAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBD,IAAlB,CAAwB,IAAxB,CAApB;AACA,SAAKE,aAAL,GAAqB,KAAKA,aAAL,CAAmBF,IAAnB,CAAyB,IAAzB,CAArB;AACA;;AAEDf,EAAAA,QAAQ,CAAEE,MAAF,EAAW;AAClB,UAAM;AAAEF,MAAAA;AAAF,QAAe,KAAKkB,KAA1B,CADkB,CAGlB;;AACA,QAAKlB,QAAL,EAAgB;AACfA,MAAAA,QAAQ,CAAEE,MAAF,CAAR;AACA;AACD;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACCc,EAAAA,YAAY,QAAyB;AAAA,QAAvB;AAAEhB,MAAAA,QAAF;AAAYE,MAAAA;AAAZ,KAAuB;AACpC,UAAM;AACLD,MAAAA,QADK;AAELE,MAAAA,UAFK;AAGLC,MAAAA,kBAHK;AAILe,MAAAA,iBAJK;AAKLd,MAAAA,WALK;AAMLe,MAAAA,QANK;AAOLJ,MAAAA,YAAY,GAAGjB,mBAPV;AAQLO,MAAAA;AARK,QASF,KAAKY,KATT;AAWA,WAAOF,YAAY,CAAE;AACpBhB,MAAAA,QADoB;AAEpBE,MAAAA,MAFoB;AAGpBD,MAAAA,QAAQ,EAAEA,QAAQ,IAAI,CAAEmB,QAHJ;AAIpBjB,MAAAA,UAJoB;AAKpBC,MAAAA,kBALoB;AAMpBe,MAAAA,iBANoB;AAOpBd,MAAAA,WAPoB;AAQpBC,MAAAA;AARoB,KAAF,CAAnB;AAUA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACCW,EAAAA,aAAa,QAAgB;AAAA,QAAd;AAAEI,MAAAA;AAAF,KAAc;AAC5B,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,QAFK;AAGLC,MAAAA,UAHK;AAILC,MAAAA,qBAJK;AAML;AACA;AACAC,MAAAA,qBAAqB,EAAEC,OARlB;AASLrB,MAAAA,kBATK;AAULsB,MAAAA,eAVK;AAWLC,MAAAA;AAXK,QAYF,KAAKX,KAZT;;AAcA,QAAKS,OAAL,EAAe;AACd,aACC,cAAC,aAAD;AACC,QAAA,QAAQ,EAAKG,MAAF,IAAc;AACxB,gBAAMC,UAAU,GACfC,KAAK,CAACC,OAAN,CAAeH,MAAf,KAA2BA,MAA3B,aAA2BA,MAA3B,eAA2BA,MAAM,CAAEI,MAAnC,GACGJ,MAAM,CAAE,CAAF,CADT,GAEGA,MAHJ;;AAIA,cACCF,eAAe,IACf,OAAOA,eAAP,KAA2B,UAF5B,EAGE;AACDA,YAAAA,eAAe,CAAEG,UAAF,CAAf;AACA;;AACDV,UAAAA,OAAO;AACP,SAbF;AAcC,QAAA,YAAY,EAAGC,YAdhB;AAeC,QAAA,QAAQ,EAAGC,QAfZ;AAgBC,QAAA,UAAU,EAAGC,UAhBd;AAiBC,QAAA,kBAAkB,EAAGlB,kBAjBtB;AAkBC,QAAA,mBAAmB,EAAGuB;AAlBvB,QADD;AAsBA;;AAED,WACC,cAAC,YAAD;AACC,MAAA,QAAQ,EAAG,MAAM;AAChBR,QAAAA,OAAO;AACP,OAHF;AAIC,MAAA,YAAY,EAAGC,YAJhB;AAKC,MAAA,QAAQ,EAAGC,QALZ;AAMC,MAAA,UAAU,EAAGC,UANd;AAOC,MAAA,qBAAqB,EAAGC,qBAPzB;AAQC,MAAA,kBAAkB,EAAGnB;AARtB,MADD;AAYA;;AAED6B,EAAAA,MAAM,GAAG;AACR,UAAM;AACLC,MAAAA,QADK;AAELhC,MAAAA,kBAFK;AAGLe,MAAAA,iBAHK;AAILkB,MAAAA,sBAJK;AAKLX,MAAAA,qBAAqB,EAAEC,OALlB;AAMLC,MAAAA;AANK,QAOF,KAAKV,KAPT;;AASA,QAAKd,kBAAkB,IAAIe,iBAA3B,EAA+C;AAC9C,aAAO,KAAKH,YAAL,CAAmB;AAAEhB,QAAAA,QAAQ,EAAEqC;AAAZ,OAAnB,CAAP;AACA;;AAED,WACC,cAAC,QAAD;AACC,MAAA,SAAS,EAAC,uBADX;AAEC,MAAA,gBAAgB,EAAGzD,UAAU,CAC5B,gCAD4B,EAE5B;AAAE,oBAAY+C;AAAd,OAF4B,CAF9B;AAMC,MAAA,QAAQ,EAAGS,QANZ;AAOC,MAAA,QAAQ,EAAG,KAAKpC,QAPjB;AAQC,MAAA,cAAc,MARf;AASC,MAAA,WAAW,EAAGlB,EAAE,CAAE,aAAF,CATjB;AAUC,MAAA,YAAY,EAAG,KAAKkC,YAVrB;AAWC,MAAA,aAAa,EAAG,KAAKC,aAXtB;AAYC,MAAA,OAAO,EAAGW;AAZX,MADD;AAgBA;;AAjJ+B;;AAoJjC,eAAetC,OAAO,CAAE,CACvBD,UAAU,CACT,CAAEiD,MAAF,YAAqE;AAAA;;AAAA,MAA3D;AAAEf,IAAAA,QAAF;AAAYD,IAAAA,YAAZ;AAA0BiB,IAAAA,kBAAkB,GAAG;AAA/C,GAA2D;AACpE,QAAM;AACLC,IAAAA,oBADK;AAELC,IAAAA,gBAFK;AAGLC,IAAAA,8BAHK;AAILC,IAAAA,kCAJK;AAKLC,IAAAA;AALK,MAMFN,MAAM,CAAExC,gBAAF,CANV;AAQA,QAAM;AAAE+C,IAAAA;AAAF,MAAyBP,MAAM,CAAE5C,WAAF,CAArC;AAEA4B,EAAAA,YAAY,GACXA,YAAY,IAAIkB,oBAAoB,CAAEjB,QAAF,CAApC,IAAoDuB,SADrD;;AAGA,QAAMC,aAAa,GAClBL,8BAA8B,CAAEpB,YAAF,CAD/B;;AAGA,QAAMH,iBAAiB,GACtBoB,kBAAkB,IAClBI,kCAAkC,CAAErB,YAAF,CAFnC;;AAIA,QAAM0B,QAAQ,GAAGJ,WAAW,EAA5B;AAEA,QAAMxC,kBAAkB,GACvB,CAAA2C,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,CAAEb,MAAf,MAA0B,CAA1B,IACA,wBAAAW,kBAAkB,CAAEE,aAAa,CAAE,CAAF,CAAb,CAAmBE,IAArB,EAA2B,UAA3B,CAAlB,4EACGf,MADH,MACc,CAHf;AAKA,MAAIgB,gBAAgB,GAAG,KAAvB;;AACA,MAAK9C,kBAAL,EAA0B;AACzB8C,IAAAA,gBAAgB,GAAGH,aAAa,CAAE,CAAF,CAAhC;AACA;;AAED,SAAO;AACN3B,IAAAA,QAAQ,EAAEqB,gBAAgB,CAAEnB,YAAF,CADpB;AAENlB,IAAAA,kBAFM;AAGND,IAAAA,UAAU,EAAE+C,gBAAgB,GAAGA,gBAAgB,CAACC,KAApB,GAA4B,EAHlD;AAIND,IAAAA,gBAJM;AAKN/B,IAAAA,iBALM;AAMNG,IAAAA,YANM;AAONhB,IAAAA,kBAAkB,EACjB0C,QAAQ,CAACI,kCAAT,IACA,CAAE9B;AATG,GAAP;AAWA,CA7CQ,CADa,EAgDvBlC,YAAY,CAAE,CAAEiE,QAAF,EAAYC,QAAZ,YAAsC;AAAA,MAAhB;AAAEhB,IAAAA;AAAF,GAAgB;AACnD,SAAO;AACND,IAAAA,sBAAsB,GAAG;AACxB,YAAM;AACLf,QAAAA,YADK;AAELC,QAAAA,QAFK;AAGLC,QAAAA,UAHK;AAILpB,QAAAA,kBAJK;AAKL8C,QAAAA,gBALK;AAML/B,QAAAA,iBANK;AAOLS,QAAAA,eAPK;AAQLC,QAAAA;AARK,UASFyB,QATJ;;AAWA,UAAK,CAAElD,kBAAF,IAAwB,CAAEe,iBAA/B,EAAmD;AAClD;AACA;;AAED,eAASoC,0BAAT,CAAqCC,gBAArC,EAAwD;AACvD,cAAM;AAAEC,UAAAA,QAAF;AAAYC,UAAAA;AAAZ,YACLpB,MAAM,CAAExC,gBAAF,CADP;;AAGA,YACC,CAAE0D,gBAAF,IACE,CAAEjC,QAAF,IAAc,CAAED,YAFnB,EAGE;AACD,iBAAO,EAAP;AACA;;AAED,cAAMqC,MAAM,GAAG,EAAf;AACA,YAAIC,kBAAkB,GAAG,EAAzB,CAZuD,CAcvD;AACA;;AACA,YAAK,CAAErC,QAAP,EAAkB;AAAA;;AACjB,gBAAMsC,WAAW,GAAGJ,QAAQ,CAAEnC,YAAF,CAA5B;;AAEA,cAAKuC,WAAL,aAAKA,WAAL,wCAAKA,WAAW,CAAEC,WAAlB,kDAAK,sBAA0B5B,MAA/B,EAAwC;AACvC,kBAAM6B,cAAc,GACnBF,WAAW,CAACC,WAAZ,CACCD,WAAW,CAACC,WAAZ,CAAwB5B,MAAxB,GAAiC,CADlC,CADD;;AAKA,gBACCf,iBAAiB,IACjB,CAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAE8B,IAAnB,MAA4Bc,cAAc,CAACd,IAF5C,EAGE;AACDW,cAAAA,kBAAkB,GAAGG,cAAc,CAACC,UAApC;AACA;AACD;AACD,SAhBD,MAgBO;AACN;AACA;AACA,gBAAMC,YAAY,GAAGR,QAAQ,CAAElC,QAAF,CAA7B;AACA,gBAAM2C,aAAa,GAAGT,QAAQ,CAC7BC,wBAAwB,CAAEnC,QAAF,CADK,CAA9B;;AAIA,cAAK,CAAA0C,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEhB,IAAd,OAAuBiB,aAAvB,aAAuBA,aAAvB,uBAAuBA,aAAa,CAAEjB,IAAtC,CAAL,EAAkD;AACjDW,YAAAA,kBAAkB,GACjB,CAAAM,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,CAAEF,UAAf,KAA6B,EAD9B;AAEA;AACD,SA5CsD,CA8CvD;;;AACAR,QAAAA,gBAAgB,CAACW,OAAjB,CAA4BC,SAAF,IAAiB;AAC1C,cAAKR,kBAAkB,CAACS,cAAnB,CAAmCD,SAAnC,CAAL,EAAsD;AACrDT,YAAAA,MAAM,CAAES,SAAF,CAAN,GACCR,kBAAkB,CAAEQ,SAAF,CADnB;AAEA;AACD,SALD;AAOA,eAAOT,MAAP;AACA;;AAED,eAASW,iBAAT,GAA6B;AAC5B,cAAM;AACLC,UAAAA,aADK;AAELC,UAAAA,oBAFK;AAGLC,UAAAA,aAHK;AAILjC,UAAAA;AAJK,YAKFF,MAAM,CAAExC,gBAAF,CALV,CAD4B,CAQ5B;;AACA,YAAKyB,QAAL,EAAgB;AACf,iBAAOgD,aAAa,CAAEhD,QAAF,CAApB;AACA,SAX2B,CAa5B;;;AACA,cAAMmD,GAAG,GAAGF,oBAAoB,EAAhC;;AACA,YACC,CAAEhD,UAAF,IACAkD,GADA,IAEAlC,oBAAoB,CAAEkC,GAAF,CAApB,KAAgCpD,YAHjC,EAIE;AACD,iBAAOiD,aAAa,CAAEG,GAAF,CAAb,GAAuB,CAA9B;AACA,SArB2B,CAuB5B;;;AACA,eAAOD,aAAa,CAAEnD,YAAF,CAAb,CAA8BY,MAArC;AACA;;AAED,YAAM;AAAEyC,QAAAA;AAAF,UAAkBtB,QAAQ,CAAEvD,gBAAF,CAAhC;AAEA,UAAI8E,aAAJ,CAtGwB,CAwGxB;AACA;AACA;;AACA,UAAKzD,iBAAL,EAAyB;AACxB,cAAM0D,aAAa,GAAGtB,0BAA0B,CAC/CpC,iBAAiB,CAACqC,gBAD6B,CAAhD;AAIAoB,QAAAA,aAAa,GAAGpF,WAAW,CAAE2B,iBAAiB,CAAC8B,IAApB,EAA0B,EACpD,IAAK9B,iBAAiB,CAAC6C,UAAlB,IAAgC,EAArC,CADoD;AAEpD,aAAGa;AAFiD,SAA1B,CAA3B;AAIA,OATD,MASO;AACND,QAAAA,aAAa,GAAGpF,WAAW,CAAE0D,gBAAgB,CAACD,IAAnB,CAA3B;AACA;;AAED0B,MAAAA,WAAW,CACVC,aADU,EAEVN,iBAAiB,EAFP,EAGVhD,YAHU,EAIVO,mBAJU,CAAX;;AAOA,UAAKD,eAAL,EAAuB;AAAA;;AACtBA,QAAAA,eAAe,CAAE;AAChBL,UAAAA,QAAQ,oBAAEqD,aAAF,mDAAE,eAAerD;AADT,SAAF,CAAf;AAGA;;AAED,YAAMuD,OAAO,GAAG9F,OAAO,EACtB;AACAF,MAAAA,EAAE,CAAE,gBAAF,CAFoB,EAGtBoE,gBAAgB,CAACC,KAHK,CAAvB;AAKAtE,MAAAA,KAAK,CAAEiG,OAAF,CAAL;AACA;;AA5IK,GAAP;AA8IA,CA/IW,CAhDW,EAgMvB;AACA;AACAvF,WAAW,CACV;AAAA,MAAE;AAAE6B,IAAAA,QAAF;AAAYI,IAAAA,UAAZ;AAAwBF,IAAAA,YAAxB;AAAsCC,IAAAA;AAAtC,GAAF;AAAA,SACCH,QAAQ,IAAM,CAAEI,UAAF,IAAgB,CAAEF,YAAlB,IAAkC,CAAEC,QADnD;AAAA,CADU,CAlMY,CAAF,CAAP,CAsMVX,QAtMU,CAAf","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { speak } from '@wordpress/a11y';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Dropdown, Button } from '@wordpress/components';\nimport { Component } from '@wordpress/element';\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport InserterMenu from './menu';\nimport QuickInserter from './quick-inserter';\nimport { store as blockEditorStore } from '../../store';\n\nconst defaultRenderToggle = ( {\n\tonToggle,\n\tdisabled,\n\tisOpen,\n\tblockTitle,\n\thasSingleBlockType,\n\ttoggleProps = {},\n\tprioritizePatterns,\n} ) => {\n\tlet label;\n\tif ( hasSingleBlockType ) {\n\t\tlabel = sprintf(\n\t\t\t// translators: %s: the name of the block when there is only one\n\t\t\t_x( 'Add %s', 'directly add the only allowed block' ),\n\t\t\tblockTitle\n\t\t);\n\t} else if ( prioritizePatterns ) {\n\t\tlabel = __( 'Add pattern' );\n\t} else {\n\t\tlabel = _x( 'Add block', 'Generic label for block inserter button' );\n\t}\n\n\tconst { onClick, ...rest } = toggleProps;\n\n\t// Handle both onClick functions from the toggle and the parent component.\n\tfunction handleClick( event ) {\n\t\tif ( onToggle ) {\n\t\t\tonToggle( event );\n\t\t}\n\t\tif ( onClick ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\ticon={ plus }\n\t\t\tlabel={ label }\n\t\t\ttooltipPosition=\"bottom\"\n\t\t\tonClick={ handleClick }\n\t\t\tclassName=\"block-editor-inserter__toggle\"\n\t\t\taria-haspopup={ ! hasSingleBlockType ? 'true' : false }\n\t\t\taria-expanded={ ! hasSingleBlockType ? isOpen : false }\n\t\t\tdisabled={ disabled }\n\t\t\t{ ...rest }\n\t\t/>\n\t);\n};\n\nclass Inserter extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.onToggle = this.onToggle.bind( this );\n\t\tthis.renderToggle = this.renderToggle.bind( this );\n\t\tthis.renderContent = this.renderContent.bind( this );\n\t}\n\n\tonToggle( isOpen ) {\n\t\tconst { onToggle } = this.props;\n\n\t\t// Surface toggle callback to parent component.\n\t\tif ( onToggle ) {\n\t\t\tonToggle( isOpen );\n\t\t}\n\t}\n\n\t/**\n\t * Render callback to display Dropdown toggle element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onToggle Callback to invoke when toggle is\n\t * pressed.\n\t * @param {boolean} options.isOpen Whether dropdown is currently open.\n\t *\n\t * @return {WPElement} Dropdown toggle element.\n\t */\n\trenderToggle( { onToggle, isOpen } ) {\n\t\tconst {\n\t\t\tdisabled,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\thasItems,\n\t\t\trenderToggle = defaultRenderToggle,\n\t\t\tprioritizePatterns,\n\t\t} = this.props;\n\n\t\treturn renderToggle( {\n\t\t\tonToggle,\n\t\t\tisOpen,\n\t\t\tdisabled: disabled || ! hasItems,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\tprioritizePatterns,\n\t\t} );\n\t}\n\n\t/**\n\t * Render callback to display Dropdown content element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onClose Callback to invoke when dropdown is\n\t * closed.\n\t *\n\t * @return {WPElement} Dropdown content element.\n\t */\n\trenderContent( { onClose } ) {\n\t\tconst {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tshowInserterHelpPanel,\n\n\t\t\t// This prop is experimental to give some time for the quick inserter to mature\n\t\t\t// Feel free to make them stable after a few releases.\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tprioritizePatterns,\n\t\t\tonSelectOrClose,\n\t\t\tselectBlockOnInsert,\n\t\t} = this.props;\n\n\t\tif ( isQuick ) {\n\t\t\treturn (\n\t\t\t\t<QuickInserter\n\t\t\t\t\tonSelect={ ( blocks ) => {\n\t\t\t\t\t\tconst firstBlock =\n\t\t\t\t\t\t\tArray.isArray( blocks ) && blocks?.length\n\t\t\t\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t\t\t\t: blocks;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonSelectOrClose &&\n\t\t\t\t\t\t\ttypeof onSelectOrClose === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tonSelectOrClose( firstBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisAppender={ isAppender }\n\t\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t\t\tselectBlockOnInsert={ selectBlockOnInsert }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<InserterMenu\n\t\t\t\tonSelect={ () => {\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ isAppender }\n\t\t\t\tshowInserterHelpPanel={ showInserterHelpPanel }\n\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tposition,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\tinsertOnlyAllowedBlock,\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tonSelectOrClose,\n\t\t} = this.props;\n\n\t\tif ( hasSingleBlockType || directInsertBlock ) {\n\t\t\treturn this.renderToggle( { onToggle: insertOnlyAllowedBlock } );\n\t\t}\n\n\t\treturn (\n\t\t\t<Dropdown\n\t\t\t\tclassName=\"block-editor-inserter\"\n\t\t\t\tcontentClassName={ classnames(\n\t\t\t\t\t'block-editor-inserter__popover',\n\t\t\t\t\t{ 'is-quick': isQuick }\n\t\t\t\t) }\n\t\t\t\tposition={ position }\n\t\t\t\tonToggle={ this.onToggle }\n\t\t\t\texpandOnMobile\n\t\t\t\theaderTitle={ __( 'Add a block' ) }\n\t\t\t\trenderToggle={ this.renderToggle }\n\t\t\t\trenderContent={ this.renderContent }\n\t\t\t\tonClose={ onSelectOrClose }\n\t\t\t/>\n\t\t);\n\t}\n}\n\nexport default compose( [\n\twithSelect(\n\t\t( select, { clientId, rootClientId, shouldDirectInsert = true } ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasInserterItems,\n\t\t\t\t__experimentalGetAllowedBlocks,\n\t\t\t\t__experimentalGetDirectInsertBlock,\n\t\t\t\tgetSettings,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { getBlockVariations } = select( blocksStore );\n\n\t\t\trootClientId =\n\t\t\t\trootClientId || getBlockRootClientId( clientId ) || undefined;\n\n\t\t\tconst allowedBlocks =\n\t\t\t\t__experimentalGetAllowedBlocks( rootClientId );\n\n\t\t\tconst directInsertBlock =\n\t\t\t\tshouldDirectInsert &&\n\t\t\t\t__experimentalGetDirectInsertBlock( rootClientId );\n\n\t\t\tconst settings = getSettings();\n\n\t\t\tconst hasSingleBlockType =\n\t\t\t\tallowedBlocks?.length === 1 &&\n\t\t\t\tgetBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )\n\t\t\t\t\t?.length === 0;\n\n\t\t\tlet allowedBlockType = false;\n\t\t\tif ( hasSingleBlockType ) {\n\t\t\t\tallowedBlockType = allowedBlocks[ 0 ];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thasItems: hasInserterItems( rootClientId ),\n\t\t\t\thasSingleBlockType,\n\t\t\t\tblockTitle: allowedBlockType ? allowedBlockType.title : '',\n\t\t\t\tallowedBlockType,\n\t\t\t\tdirectInsertBlock,\n\t\t\t\trootClientId,\n\t\t\t\tprioritizePatterns:\n\t\t\t\t\tsettings.__experimentalPreferPatternsOnRoot &&\n\t\t\t\t\t! rootClientId,\n\t\t\t};\n\t\t}\n\t),\n\twithDispatch( ( dispatch, ownProps, { select } ) => {\n\t\treturn {\n\t\t\tinsertOnlyAllowedBlock() {\n\t\t\t\tconst {\n\t\t\t\t\trootClientId,\n\t\t\t\t\tclientId,\n\t\t\t\t\tisAppender,\n\t\t\t\t\thasSingleBlockType,\n\t\t\t\t\tallowedBlockType,\n\t\t\t\t\tdirectInsertBlock,\n\t\t\t\t\tonSelectOrClose,\n\t\t\t\t\tselectBlockOnInsert,\n\t\t\t\t} = ownProps;\n\n\t\t\t\tif ( ! hasSingleBlockType && ! directInsertBlock ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfunction getAdjacentBlockAttributes( attributesToCopy ) {\n\t\t\t\t\tconst { getBlock, getPreviousBlockClientId } =\n\t\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! attributesToCopy ||\n\t\t\t\t\t\t( ! clientId && ! rootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = {};\n\t\t\t\t\tlet adjacentAttributes = {};\n\n\t\t\t\t\t// If there is no clientId, then attempt to get attributes\n\t\t\t\t\t// from the last block within innerBlocks of the root block.\n\t\t\t\t\tif ( ! clientId ) {\n\t\t\t\t\t\tconst parentBlock = getBlock( rootClientId );\n\n\t\t\t\t\t\tif ( parentBlock?.innerBlocks?.length ) {\n\t\t\t\t\t\t\tconst lastInnerBlock =\n\t\t\t\t\t\t\t\tparentBlock.innerBlocks[\n\t\t\t\t\t\t\t\t\tparentBlock.innerBlocks.length - 1\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tdirectInsertBlock &&\n\t\t\t\t\t\t\t\tdirectInsertBlock?.name === lastInnerBlock.name\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tadjacentAttributes = lastInnerBlock.attributes;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Otherwise, attempt to get attributes from the\n\t\t\t\t\t\t// previous block relative to the current clientId.\n\t\t\t\t\t\tconst currentBlock = getBlock( clientId );\n\t\t\t\t\t\tconst previousBlock = getBlock(\n\t\t\t\t\t\t\tgetPreviousBlockClientId( clientId )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( currentBlock?.name === previousBlock?.name ) {\n\t\t\t\t\t\t\tadjacentAttributes =\n\t\t\t\t\t\t\t\tpreviousBlock?.attributes || {};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy over only those attributes flagged to be copied.\n\t\t\t\t\tattributesToCopy.forEach( ( attribute ) => {\n\t\t\t\t\t\tif ( adjacentAttributes.hasOwnProperty( attribute ) ) {\n\t\t\t\t\t\t\tresult[ attribute ] =\n\t\t\t\t\t\t\t\tadjacentAttributes[ attribute ];\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tfunction getInsertionIndex() {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetBlockIndex,\n\t\t\t\t\t\tgetBlockSelectionEnd,\n\t\t\t\t\t\tgetBlockOrder,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\t\t// If the clientId is defined, we insert at the position of the block.\n\t\t\t\t\tif ( clientId ) {\n\t\t\t\t\t\treturn getBlockIndex( clientId );\n\t\t\t\t\t}\n\n\t\t\t\t\t// If there a selected block, we insert after the selected block.\n\t\t\t\t\tconst end = getBlockSelectionEnd();\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isAppender &&\n\t\t\t\t\t\tend &&\n\t\t\t\t\t\tgetBlockRootClientId( end ) === rootClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn getBlockIndex( end ) + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise, we insert at the end of the current rootClientId.\n\t\t\t\t\treturn getBlockOrder( rootClientId ).length;\n\t\t\t\t}\n\n\t\t\t\tconst { insertBlock } = dispatch( blockEditorStore );\n\n\t\t\t\tlet blockToInsert;\n\n\t\t\t\t// Attempt to augment the directInsertBlock with attributes from an adjacent block.\n\t\t\t\t// This ensures styling from nearby blocks is preserved in the newly inserted block.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/37904\n\t\t\t\tif ( directInsertBlock ) {\n\t\t\t\t\tconst newAttributes = getAdjacentBlockAttributes(\n\t\t\t\t\t\tdirectInsertBlock.attributesToCopy\n\t\t\t\t\t);\n\n\t\t\t\t\tblockToInsert = createBlock( directInsertBlock.name, {\n\t\t\t\t\t\t...( directInsertBlock.attributes || {} ),\n\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tblockToInsert = createBlock( allowedBlockType.name );\n\t\t\t\t}\n\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblockToInsert,\n\t\t\t\t\tgetInsertionIndex(),\n\t\t\t\t\trootClientId,\n\t\t\t\t\tselectBlockOnInsert\n\t\t\t\t);\n\n\t\t\t\tif ( onSelectOrClose ) {\n\t\t\t\t\tonSelectOrClose( {\n\t\t\t\t\t\tclientId: blockToInsert?.clientId,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tconst message = sprintf(\n\t\t\t\t\t// translators: %s: the name of the block that has been added\n\t\t\t\t\t__( '%s block added' ),\n\t\t\t\t\tallowedBlockType.title\n\t\t\t\t);\n\t\t\t\tspeak( message );\n\t\t\t},\n\t\t};\n\t} ),\n\t// The global inserter should always be visible, we are using ( ! isAppender && ! rootClientId && ! clientId ) as\n\t// a way to detect the global Inserter.\n\tifCondition(\n\t\t( { hasItems, isAppender, rootClientId, clientId } ) =>\n\t\t\thasItems || ( ! isAppender && ! rootClientId && ! clientId )\n\t),\n] )( Inserter );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/index.js"],"names":["classnames","speak","__","_x","sprintf","Dropdown","Button","Component","withDispatch","withSelect","compose","ifCondition","createBlock","store","blocksStore","plus","InserterMenu","QuickInserter","blockEditorStore","defaultRenderToggle","onToggle","disabled","isOpen","blockTitle","hasSingleBlockType","toggleProps","prioritizePatterns","label","onClick","rest","handleClick","event","Inserter","constructor","arguments","bind","renderToggle","renderContent","props","directInsertBlock","hasItems","onClose","rootClientId","clientId","isAppender","showInserterHelpPanel","__experimentalIsQuick","isQuick","onSelectOrClose","selectBlockOnInsert","blocks","firstBlock","Array","isArray","length","render","position","insertOnlyAllowedBlock","select","shouldDirectInsert","getBlockRootClientId","hasInserterItems","getAllowedBlocks","__experimentalGetDirectInsertBlock","getSettings","getBlockVariations","undefined","allowedBlocks","settings","name","allowedBlockType","title","__experimentalPreferPatternsOnRoot","dispatch","ownProps","getAdjacentBlockAttributes","attributesToCopy","getBlock","getPreviousBlockClientId","result","adjacentAttributes","parentBlock","innerBlocks","lastInnerBlock","attributes","currentBlock","previousBlock","forEach","attribute","hasOwnProperty","getInsertionIndex","getBlockIndex","getBlockSelectionEnd","getBlockOrder","end","insertBlock","blockToInsert","newAttributes","message"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { speak } from '@wordpress/a11y';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { Dropdown, Button } from '@wordpress/components';\nimport { Component } from '@wordpress/element';\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport InserterMenu from './menu';\nimport QuickInserter from './quick-inserter';\nimport { store as blockEditorStore } from '../../store';\n\nconst defaultRenderToggle = ( {\n\tonToggle,\n\tdisabled,\n\tisOpen,\n\tblockTitle,\n\thasSingleBlockType,\n\ttoggleProps = {},\n\tprioritizePatterns,\n} ) => {\n\tlet label;\n\tif ( hasSingleBlockType ) {\n\t\tlabel = sprintf(\n\t\t\t// translators: %s: the name of the block when there is only one\n\t\t\t_x( 'Add %s', 'directly add the only allowed block' ),\n\t\t\tblockTitle\n\t\t);\n\t} else if ( prioritizePatterns ) {\n\t\tlabel = __( 'Add pattern' );\n\t} else {\n\t\tlabel = _x( 'Add block', 'Generic label for block inserter button' );\n\t}\n\n\tconst { onClick, ...rest } = toggleProps;\n\n\t// Handle both onClick functions from the toggle and the parent component.\n\tfunction handleClick( event ) {\n\t\tif ( onToggle ) {\n\t\t\tonToggle( event );\n\t\t}\n\t\tif ( onClick ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\ticon={ plus }\n\t\t\tlabel={ label }\n\t\t\ttooltipPosition=\"bottom\"\n\t\t\tonClick={ handleClick }\n\t\t\tclassName=\"block-editor-inserter__toggle\"\n\t\t\taria-haspopup={ ! hasSingleBlockType ? 'true' : false }\n\t\t\taria-expanded={ ! hasSingleBlockType ? isOpen : false }\n\t\t\tdisabled={ disabled }\n\t\t\t{ ...rest }\n\t\t/>\n\t);\n};\n\nclass Inserter extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.onToggle = this.onToggle.bind( this );\n\t\tthis.renderToggle = this.renderToggle.bind( this );\n\t\tthis.renderContent = this.renderContent.bind( this );\n\t}\n\n\tonToggle( isOpen ) {\n\t\tconst { onToggle } = this.props;\n\n\t\t// Surface toggle callback to parent component.\n\t\tif ( onToggle ) {\n\t\t\tonToggle( isOpen );\n\t\t}\n\t}\n\n\t/**\n\t * Render callback to display Dropdown toggle element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onToggle Callback to invoke when toggle is\n\t * pressed.\n\t * @param {boolean} options.isOpen Whether dropdown is currently open.\n\t *\n\t * @return {WPElement} Dropdown toggle element.\n\t */\n\trenderToggle( { onToggle, isOpen } ) {\n\t\tconst {\n\t\t\tdisabled,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\thasItems,\n\t\t\trenderToggle = defaultRenderToggle,\n\t\t\tprioritizePatterns,\n\t\t} = this.props;\n\n\t\treturn renderToggle( {\n\t\t\tonToggle,\n\t\t\tisOpen,\n\t\t\tdisabled: disabled || ! hasItems,\n\t\t\tblockTitle,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\ttoggleProps,\n\t\t\tprioritizePatterns,\n\t\t} );\n\t}\n\n\t/**\n\t * Render callback to display Dropdown content element.\n\t *\n\t * @param {Object} options\n\t * @param {Function} options.onClose Callback to invoke when dropdown is\n\t * closed.\n\t *\n\t * @return {WPElement} Dropdown content element.\n\t */\n\trenderContent( { onClose } ) {\n\t\tconst {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tshowInserterHelpPanel,\n\n\t\t\t// This prop is experimental to give some time for the quick inserter to mature\n\t\t\t// Feel free to make them stable after a few releases.\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tprioritizePatterns,\n\t\t\tonSelectOrClose,\n\t\t\tselectBlockOnInsert,\n\t\t} = this.props;\n\n\t\tif ( isQuick ) {\n\t\t\treturn (\n\t\t\t\t<QuickInserter\n\t\t\t\t\tonSelect={ ( blocks ) => {\n\t\t\t\t\t\tconst firstBlock =\n\t\t\t\t\t\t\tArray.isArray( blocks ) && blocks?.length\n\t\t\t\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t\t\t\t: blocks;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonSelectOrClose &&\n\t\t\t\t\t\t\ttypeof onSelectOrClose === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tonSelectOrClose( firstBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tisAppender={ isAppender }\n\t\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t\t\tselectBlockOnInsert={ selectBlockOnInsert }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<InserterMenu\n\t\t\t\tonSelect={ () => {\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ isAppender }\n\t\t\t\tshowInserterHelpPanel={ showInserterHelpPanel }\n\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst {\n\t\t\tposition,\n\t\t\thasSingleBlockType,\n\t\t\tdirectInsertBlock,\n\t\t\tinsertOnlyAllowedBlock,\n\t\t\t__experimentalIsQuick: isQuick,\n\t\t\tonSelectOrClose,\n\t\t} = this.props;\n\n\t\tif ( hasSingleBlockType || directInsertBlock ) {\n\t\t\treturn this.renderToggle( { onToggle: insertOnlyAllowedBlock } );\n\t\t}\n\n\t\treturn (\n\t\t\t<Dropdown\n\t\t\t\tclassName=\"block-editor-inserter\"\n\t\t\t\tcontentClassName={ classnames(\n\t\t\t\t\t'block-editor-inserter__popover',\n\t\t\t\t\t{ 'is-quick': isQuick }\n\t\t\t\t) }\n\t\t\t\tpopoverProps={ { position } }\n\t\t\t\tonToggle={ this.onToggle }\n\t\t\t\texpandOnMobile\n\t\t\t\theaderTitle={ __( 'Add a block' ) }\n\t\t\t\trenderToggle={ this.renderToggle }\n\t\t\t\trenderContent={ this.renderContent }\n\t\t\t\tonClose={ onSelectOrClose }\n\t\t\t/>\n\t\t);\n\t}\n}\n\nexport default compose( [\n\twithSelect(\n\t\t( select, { clientId, rootClientId, shouldDirectInsert = true } ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasInserterItems,\n\t\t\t\tgetAllowedBlocks,\n\t\t\t\t__experimentalGetDirectInsertBlock,\n\t\t\t\tgetSettings,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst { getBlockVariations } = select( blocksStore );\n\n\t\t\trootClientId =\n\t\t\t\trootClientId || getBlockRootClientId( clientId ) || undefined;\n\n\t\t\tconst allowedBlocks = getAllowedBlocks( rootClientId );\n\n\t\t\tconst directInsertBlock =\n\t\t\t\tshouldDirectInsert &&\n\t\t\t\t__experimentalGetDirectInsertBlock( rootClientId );\n\n\t\t\tconst settings = getSettings();\n\n\t\t\tconst hasSingleBlockType =\n\t\t\t\tallowedBlocks?.length === 1 &&\n\t\t\t\tgetBlockVariations( allowedBlocks[ 0 ].name, 'inserter' )\n\t\t\t\t\t?.length === 0;\n\n\t\t\tlet allowedBlockType = false;\n\t\t\tif ( hasSingleBlockType ) {\n\t\t\t\tallowedBlockType = allowedBlocks[ 0 ];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thasItems: hasInserterItems( rootClientId ),\n\t\t\t\thasSingleBlockType,\n\t\t\t\tblockTitle: allowedBlockType ? allowedBlockType.title : '',\n\t\t\t\tallowedBlockType,\n\t\t\t\tdirectInsertBlock,\n\t\t\t\trootClientId,\n\t\t\t\tprioritizePatterns:\n\t\t\t\t\tsettings.__experimentalPreferPatternsOnRoot &&\n\t\t\t\t\t! rootClientId,\n\t\t\t};\n\t\t}\n\t),\n\twithDispatch( ( dispatch, ownProps, { select } ) => {\n\t\treturn {\n\t\t\tinsertOnlyAllowedBlock() {\n\t\t\t\tconst {\n\t\t\t\t\trootClientId,\n\t\t\t\t\tclientId,\n\t\t\t\t\tisAppender,\n\t\t\t\t\thasSingleBlockType,\n\t\t\t\t\tallowedBlockType,\n\t\t\t\t\tdirectInsertBlock,\n\t\t\t\t\tonSelectOrClose,\n\t\t\t\t\tselectBlockOnInsert,\n\t\t\t\t} = ownProps;\n\n\t\t\t\tif ( ! hasSingleBlockType && ! directInsertBlock ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfunction getAdjacentBlockAttributes( attributesToCopy ) {\n\t\t\t\t\tconst { getBlock, getPreviousBlockClientId } =\n\t\t\t\t\t\tselect( blockEditorStore );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t! attributesToCopy ||\n\t\t\t\t\t\t( ! clientId && ! rootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = {};\n\t\t\t\t\tlet adjacentAttributes = {};\n\n\t\t\t\t\t// If there is no clientId, then attempt to get attributes\n\t\t\t\t\t// from the last block within innerBlocks of the root block.\n\t\t\t\t\tif ( ! clientId ) {\n\t\t\t\t\t\tconst parentBlock = getBlock( rootClientId );\n\n\t\t\t\t\t\tif ( parentBlock?.innerBlocks?.length ) {\n\t\t\t\t\t\t\tconst lastInnerBlock =\n\t\t\t\t\t\t\t\tparentBlock.innerBlocks[\n\t\t\t\t\t\t\t\t\tparentBlock.innerBlocks.length - 1\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tdirectInsertBlock &&\n\t\t\t\t\t\t\t\tdirectInsertBlock?.name === lastInnerBlock.name\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tadjacentAttributes = lastInnerBlock.attributes;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Otherwise, attempt to get attributes from the\n\t\t\t\t\t\t// previous block relative to the current clientId.\n\t\t\t\t\t\tconst currentBlock = getBlock( clientId );\n\t\t\t\t\t\tconst previousBlock = getBlock(\n\t\t\t\t\t\t\tgetPreviousBlockClientId( clientId )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif ( currentBlock?.name === previousBlock?.name ) {\n\t\t\t\t\t\t\tadjacentAttributes =\n\t\t\t\t\t\t\t\tpreviousBlock?.attributes || {};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Copy over only those attributes flagged to be copied.\n\t\t\t\t\tattributesToCopy.forEach( ( attribute ) => {\n\t\t\t\t\t\tif ( adjacentAttributes.hasOwnProperty( attribute ) ) {\n\t\t\t\t\t\t\tresult[ attribute ] =\n\t\t\t\t\t\t\t\tadjacentAttributes[ attribute ];\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tfunction getInsertionIndex() {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tgetBlockIndex,\n\t\t\t\t\t\tgetBlockSelectionEnd,\n\t\t\t\t\t\tgetBlockOrder,\n\t\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\t\t// If the clientId is defined, we insert at the position of the block.\n\t\t\t\t\tif ( clientId ) {\n\t\t\t\t\t\treturn getBlockIndex( clientId );\n\t\t\t\t\t}\n\n\t\t\t\t\t// If there a selected block, we insert after the selected block.\n\t\t\t\t\tconst end = getBlockSelectionEnd();\n\t\t\t\t\tif (\n\t\t\t\t\t\t! isAppender &&\n\t\t\t\t\t\tend &&\n\t\t\t\t\t\tgetBlockRootClientId( end ) === rootClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn getBlockIndex( end ) + 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise, we insert at the end of the current rootClientId.\n\t\t\t\t\treturn getBlockOrder( rootClientId ).length;\n\t\t\t\t}\n\n\t\t\t\tconst { insertBlock } = dispatch( blockEditorStore );\n\n\t\t\t\tlet blockToInsert;\n\n\t\t\t\t// Attempt to augment the directInsertBlock with attributes from an adjacent block.\n\t\t\t\t// This ensures styling from nearby blocks is preserved in the newly inserted block.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/37904\n\t\t\t\tif ( directInsertBlock ) {\n\t\t\t\t\tconst newAttributes = getAdjacentBlockAttributes(\n\t\t\t\t\t\tdirectInsertBlock.attributesToCopy\n\t\t\t\t\t);\n\n\t\t\t\t\tblockToInsert = createBlock( directInsertBlock.name, {\n\t\t\t\t\t\t...( directInsertBlock.attributes || {} ),\n\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tblockToInsert = createBlock( allowedBlockType.name );\n\t\t\t\t}\n\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblockToInsert,\n\t\t\t\t\tgetInsertionIndex(),\n\t\t\t\t\trootClientId,\n\t\t\t\t\tselectBlockOnInsert\n\t\t\t\t);\n\n\t\t\t\tif ( onSelectOrClose ) {\n\t\t\t\t\tonSelectOrClose( {\n\t\t\t\t\t\tclientId: blockToInsert?.clientId,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tconst message = sprintf(\n\t\t\t\t\t// translators: %s: the name of the block that has been added\n\t\t\t\t\t__( '%s block added' ),\n\t\t\t\t\tallowedBlockType.title\n\t\t\t\t);\n\t\t\t\tspeak( message );\n\t\t\t},\n\t\t};\n\t} ),\n\t// The global inserter should always be visible, we are using ( ! isAppender && ! rootClientId && ! clientId ) as\n\t// a way to detect the global Inserter.\n\tifCondition(\n\t\t( { hasItems, isAppender, rootClientId, clientId } ) =>\n\t\t\thasItems || ( ! isAppender && ! rootClientId && ! clientId )\n\t),\n] )( Inserter );\n"]}
@@ -1,92 +1,181 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { __ } from '@wordpress/i18n';
5
- import { useEffect, useState } from '@wordpress/element';
4
+ import { useEffect, useState, useRef, useMemo } from '@wordpress/element';
6
5
  import { useSelect } from '@wordpress/data';
7
6
  /**
8
7
  * Internal dependencies
9
8
  */
10
9
 
11
10
  import { store as blockEditorStore } from '../../../store';
12
- export function useMediaResults() {
13
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14
- const [results, setResults] = useState();
15
- const settings = useSelect(select => select(blockEditorStore).getSettings(), []);
11
+ /**
12
+ * Interface for inserter media requests.
13
+ *
14
+ * @typedef {Object} InserterMediaRequest
15
+ * @property {number} per_page How many items to fetch per page.
16
+ * @property {string} search The search term to use for filtering the results.
17
+ */
18
+
19
+ /**
20
+ * Interface for inserter media responses. Any media resource should
21
+ * map their response to this interface, in order to create the core
22
+ * WordPress media blocks (image, video, audio).
23
+ *
24
+ * @typedef {Object} InserterMediaItem
25
+ * @property {string} title The title of the media item.
26
+ * @property {string} url The source url of the media item.
27
+ * @property {string} [previewUrl] The preview source url of the media item to display in the media list.
28
+ * @property {number} [id] The WordPress id of the media item.
29
+ * @property {number|string} [sourceId] The id of the media item from external source.
30
+ * @property {string} [alt] The alt text of the media item.
31
+ * @property {string} [caption] The caption of the media item.
32
+ */
33
+
34
+ /**
35
+ * Fetches media items based on the provided category.
36
+ * Each media category is responsible for providing a `fetch` function.
37
+ *
38
+ * @param {Object} category The media category to fetch results for.
39
+ * @param {InserterMediaRequest} query The query args to use for the request.
40
+ * @return {InserterMediaItem[]} The media results.
41
+ */
42
+
43
+ export function useMediaResults(category) {
44
+ let query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
45
+ const [mediaList, setMediaList] = useState();
46
+ const [isLoading, setIsLoading] = useState(false); // We need to keep track of the last request made because
47
+ // multiple request can be fired without knowing the order
48
+ // of resolution, and we need to ensure we are showing
49
+ // the results of the last request.
50
+ // In the future we could use AbortController to cancel previous
51
+ // requests, but we don't for now as it involves adding support
52
+ // for this to `core-data` package.
53
+
54
+ const lastRequest = useRef();
16
55
  useEffect(() => {
17
56
  (async () => {
18
- setResults();
57
+ var _category$fetch;
19
58
 
20
- const _media = await (settings === null || settings === void 0 ? void 0 : settings.__unstableFetchMedia(options));
59
+ const key = JSON.stringify({
60
+ category: category.name,
61
+ ...query
62
+ });
63
+ lastRequest.current = key;
64
+ setIsLoading(true);
65
+ setMediaList([]); // Empty the previous results.
21
66
 
22
- if (_media) setResults(_media);
67
+ const _media = await ((_category$fetch = category.fetch) === null || _category$fetch === void 0 ? void 0 : _category$fetch.call(category, query));
68
+
69
+ if (key === lastRequest.current) {
70
+ setMediaList(_media);
71
+ setIsLoading(false);
72
+ }
23
73
  })();
24
- }, Object.values(options));
25
- return results;
74
+ }, [category.name, ...Object.values(query)]);
75
+ return {
76
+ mediaList,
77
+ isLoading
78
+ };
26
79
  }
27
- const MEDIA_CATEGORIES = [{
28
- label: __('Images'),
29
- name: 'images',
30
- mediaType: 'image'
31
- }, {
32
- label: __('Videos'),
33
- name: 'videos',
34
- mediaType: 'video'
35
- }, {
36
- label: __('Audio'),
37
- name: 'audio',
38
- mediaType: 'audio'
39
- }];
80
+
81
+ function useInserterMediaCategories() {
82
+ const {
83
+ inserterMediaCategories,
84
+ allowedMimeTypes,
85
+ enableOpenverseMediaCategory
86
+ } = useSelect(select => {
87
+ const settings = select(blockEditorStore).getSettings();
88
+ return {
89
+ inserterMediaCategories: settings.inserterMediaCategories,
90
+ allowedMimeTypes: settings.allowedMimeTypes,
91
+ enableOpenverseMediaCategory: settings.enableOpenverseMediaCategory
92
+ };
93
+ }, []); // The allowed `mime_types` can be altered by `upload_mimes` filter and restrict
94
+ // some of them. In this case we shouldn't add the category to the available media
95
+ // categories list in the inserter.
96
+
97
+ const allowedCategories = useMemo(() => {
98
+ if (!inserterMediaCategories || !allowedMimeTypes) {
99
+ return;
100
+ }
101
+
102
+ return inserterMediaCategories.filter(category => {
103
+ // Check if Openverse category is enabled.
104
+ if (!enableOpenverseMediaCategory && category.name === 'openverse') {
105
+ return false;
106
+ } // When a category has set `isExternalResource` to `true`, we
107
+ // don't need to check for allowed mime types, as they are used
108
+ // for restricting uploads for this media type and not for
109
+ // inserting media from external sources.
110
+
111
+
112
+ if (category.isExternalResource) {
113
+ return true;
114
+ }
115
+
116
+ return Object.values(allowedMimeTypes).some(mimeType => mimeType.startsWith(`${category.mediaType}/`));
117
+ });
118
+ }, [inserterMediaCategories, allowedMimeTypes, enableOpenverseMediaCategory]);
119
+ return allowedCategories;
120
+ }
121
+
40
122
  export function useMediaCategories(rootClientId) {
41
123
  const [categories, setCategories] = useState([]);
42
124
  const {
43
125
  canInsertImage,
44
126
  canInsertVideo,
45
- canInsertAudio,
46
- fetchMedia
127
+ canInsertAudio
47
128
  } = useSelect(select => {
48
129
  const {
49
- canInsertBlockType,
50
- getSettings
130
+ canInsertBlockType
51
131
  } = select(blockEditorStore);
52
132
  return {
53
- fetchMedia: getSettings().__unstableFetchMedia,
54
133
  canInsertImage: canInsertBlockType('core/image', rootClientId),
55
134
  canInsertVideo: canInsertBlockType('core/video', rootClientId),
56
135
  canInsertAudio: canInsertBlockType('core/audio', rootClientId)
57
136
  };
58
137
  }, [rootClientId]);
138
+ const inserterMediaCategories = useInserterMediaCategories();
59
139
  useEffect(() => {
60
140
  (async () => {
61
- var _image$value, _video$value, _audio$value;
62
-
63
- // If `__unstableFetchMedia` is not defined in block
64
- // editor settings, do not set any media categories.
65
- if (!fetchMedia) return;
66
- const query = {
67
- context: 'view',
68
- per_page: 1,
69
- _fields: ['id']
141
+ const _categories = []; // If `inserterMediaCategories` is not defined in
142
+ // block editor settings, do not show any media categories.
143
+
144
+ if (!inserterMediaCategories) {
145
+ return;
146
+ } // Loop through categories to check if they have at least one media item.
147
+
148
+
149
+ const categoriesHaveMedia = new Map(await Promise.all(inserterMediaCategories.map(async category => {
150
+ // Some sources are external and we don't need to make a request.
151
+ if (category.isExternalResource) {
152
+ return [category.name, true];
153
+ }
154
+
155
+ const results = await category.fetch({
156
+ per_page: 1
157
+ });
158
+ return [category.name, !!results.length];
159
+ }))); // We need to filter out categories that don't have any media items or
160
+ // whose corresponding block type is not allowed to be inserted, based
161
+ // on the category's `mediaType`.
162
+
163
+ const canInsertMediaType = {
164
+ image: canInsertImage,
165
+ video: canInsertVideo,
166
+ audio: canInsertAudio
70
167
  };
71
- const [image, video, audio] = await Promise.allSettled([fetchMedia({ ...query,
72
- media_type: 'image'
73
- }), fetchMedia({ ...query,
74
- media_type: 'video'
75
- }), fetchMedia({ ...query,
76
- media_type: 'audio'
77
- })]); // The `value` property is only present if the promise's status is "fulfilled".
78
-
79
- const showImage = canInsertImage && !!((_image$value = image.value) !== null && _image$value !== void 0 && _image$value.length);
80
- const showVideo = canInsertVideo && !!((_video$value = video.value) !== null && _video$value !== void 0 && _video$value.length);
81
- const showAudio = canInsertAudio && !!((_audio$value = audio.value) !== null && _audio$value !== void 0 && _audio$value.length);
82
- setCategories(MEDIA_CATEGORIES.filter(_ref => {
83
- let {
84
- mediaType
85
- } = _ref;
86
- return mediaType === 'image' && showImage || mediaType === 'video' && showVideo || mediaType === 'audio' && showAudio;
87
- }));
168
+ inserterMediaCategories.forEach(category => {
169
+ if (canInsertMediaType[category.mediaType] && categoriesHaveMedia.get(category.name)) {
170
+ _categories.push(category);
171
+ }
172
+ });
173
+
174
+ if (!!_categories.length) {
175
+ setCategories(_categories);
176
+ }
88
177
  })();
89
- }, [canInsertImage, canInsertVideo, canInsertAudio, fetchMedia]);
178
+ }, [canInsertImage, canInsertVideo, canInsertAudio, inserterMediaCategories]);
90
179
  return categories;
91
180
  }
92
181
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/media-tab/hooks.js"],"names":["__","useEffect","useState","useSelect","store","blockEditorStore","useMediaResults","options","results","setResults","settings","select","getSettings","_media","__unstableFetchMedia","Object","values","MEDIA_CATEGORIES","label","name","mediaType","useMediaCategories","rootClientId","categories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","fetchMedia","canInsertBlockType","query","context","per_page","_fields","image","video","audio","Promise","allSettled","media_type","showImage","value","length","showVideo","showAudio","filter"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\nexport function useMediaResults( options = {} ) {\n\tconst [ results, setResults ] = useState();\n\tconst settings = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings(),\n\t\t[]\n\t);\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tsetResults();\n\t\t\tconst _media = await settings?.__unstableFetchMedia( options );\n\t\t\tif ( _media ) setResults( _media );\n\t\t} )();\n\t}, Object.values( options ) );\n\treturn results;\n}\n\nconst MEDIA_CATEGORIES = [\n\t{ label: __( 'Images' ), name: 'images', mediaType: 'image' },\n\t{ label: __( 'Videos' ), name: 'videos', mediaType: 'video' },\n\t{ label: __( 'Audio' ), name: 'audio', mediaType: 'audio' },\n];\nexport function useMediaCategories( rootClientId ) {\n\tconst [ categories, setCategories ] = useState( [] );\n\tconst { canInsertImage, canInsertVideo, canInsertAudio, fetchMedia } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { canInsertBlockType, getSettings } =\n\t\t\t\t\tselect( blockEditorStore );\n\t\t\t\treturn {\n\t\t\t\t\tfetchMedia: getSettings().__unstableFetchMedia,\n\t\t\t\t\tcanInsertImage: canInsertBlockType(\n\t\t\t\t\t\t'core/image',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t\tcanInsertVideo: canInsertBlockType(\n\t\t\t\t\t\t'core/video',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t\tcanInsertAudio: canInsertBlockType(\n\t\t\t\t\t\t'core/audio',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ rootClientId ]\n\t\t);\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\t// If `__unstableFetchMedia` is not defined in block\n\t\t\t// editor settings, do not set any media categories.\n\t\t\tif ( ! fetchMedia ) return;\n\t\t\tconst query = {\n\t\t\t\tcontext: 'view',\n\t\t\t\tper_page: 1,\n\t\t\t\t_fields: [ 'id' ],\n\t\t\t};\n\t\t\tconst [ image, video, audio ] = await Promise.allSettled( [\n\t\t\t\tfetchMedia( { ...query, media_type: 'image' } ),\n\t\t\t\tfetchMedia( { ...query, media_type: 'video' } ),\n\t\t\t\tfetchMedia( { ...query, media_type: 'audio' } ),\n\t\t\t] );\n\t\t\t// The `value` property is only present if the promise's status is \"fulfilled\".\n\t\t\tconst showImage = canInsertImage && !! image.value?.length;\n\t\t\tconst showVideo = canInsertVideo && !! video.value?.length;\n\t\t\tconst showAudio = canInsertAudio && !! audio.value?.length;\n\t\t\tsetCategories(\n\t\t\t\tMEDIA_CATEGORIES.filter(\n\t\t\t\t\t( { mediaType } ) =>\n\t\t\t\t\t\t( mediaType === 'image' && showImage ) ||\n\t\t\t\t\t\t( mediaType === 'video' && showVideo ) ||\n\t\t\t\t\t\t( mediaType === 'audio' && showAudio )\n\t\t\t\t)\n\t\t\t);\n\t\t} )();\n\t}, [ canInsertImage, canInsertVideo, canInsertAudio, fetchMedia ] );\n\treturn categories;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/media-tab/hooks.js"],"names":["useEffect","useState","useRef","useMemo","useSelect","store","blockEditorStore","useMediaResults","category","query","mediaList","setMediaList","isLoading","setIsLoading","lastRequest","key","JSON","stringify","name","current","_media","fetch","Object","values","useInserterMediaCategories","inserterMediaCategories","allowedMimeTypes","enableOpenverseMediaCategory","select","settings","getSettings","allowedCategories","filter","isExternalResource","some","mimeType","startsWith","mediaType","useMediaCategories","rootClientId","categories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","canInsertBlockType","_categories","categoriesHaveMedia","Map","Promise","all","map","results","per_page","length","canInsertMediaType","image","video","audio","forEach","get","push"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useRef, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Interface for inserter media requests.\n *\n * @typedef {Object} InserterMediaRequest\n * @property {number} per_page How many items to fetch per page.\n * @property {string} search The search term to use for filtering the results.\n */\n\n/**\n * Interface for inserter media responses. Any media resource should\n * map their response to this interface, in order to create the core\n * WordPress media blocks (image, video, audio).\n *\n * @typedef {Object} InserterMediaItem\n * @property {string} title The title of the media item.\n * @property {string} url The source url of the media item.\n * @property {string} [previewUrl] The preview source url of the media item to display in the media list.\n * @property {number} [id] The WordPress id of the media item.\n * @property {number|string} [sourceId] The id of the media item from external source.\n * @property {string} [alt] The alt text of the media item.\n * @property {string} [caption] The caption of the media item.\n */\n\n/**\n * Fetches media items based on the provided category.\n * Each media category is responsible for providing a `fetch` function.\n *\n * @param {Object} category The media category to fetch results for.\n * @param {InserterMediaRequest} query The query args to use for the request.\n * @return {InserterMediaItem[]} The media results.\n */\nexport function useMediaResults( category, query = {} ) {\n\tconst [ mediaList, setMediaList ] = useState();\n\tconst [ isLoading, setIsLoading ] = useState( false );\n\t// We need to keep track of the last request made because\n\t// multiple request can be fired without knowing the order\n\t// of resolution, and we need to ensure we are showing\n\t// the results of the last request.\n\t// In the future we could use AbortController to cancel previous\n\t// requests, but we don't for now as it involves adding support\n\t// for this to `core-data` package.\n\tconst lastRequest = useRef();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst key = JSON.stringify( {\n\t\t\t\tcategory: category.name,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tlastRequest.current = key;\n\t\t\tsetIsLoading( true );\n\t\t\tsetMediaList( [] ); // Empty the previous results.\n\t\t\tconst _media = await category.fetch?.( query );\n\t\t\tif ( key === lastRequest.current ) {\n\t\t\t\tsetMediaList( _media );\n\t\t\t\tsetIsLoading( false );\n\t\t\t}\n\t\t} )();\n\t}, [ category.name, ...Object.values( query ) ] );\n\treturn { mediaList, isLoading };\n}\n\nfunction useInserterMediaCategories() {\n\tconst {\n\t\tinserterMediaCategories,\n\t\tallowedMimeTypes,\n\t\tenableOpenverseMediaCategory,\n\t} = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tinserterMediaCategories: settings.inserterMediaCategories,\n\t\t\tallowedMimeTypes: settings.allowedMimeTypes,\n\t\t\tenableOpenverseMediaCategory: settings.enableOpenverseMediaCategory,\n\t\t};\n\t}, [] );\n\t// The allowed `mime_types` can be altered by `upload_mimes` filter and restrict\n\t// some of them. In this case we shouldn't add the category to the available media\n\t// categories list in the inserter.\n\tconst allowedCategories = useMemo( () => {\n\t\tif ( ! inserterMediaCategories || ! allowedMimeTypes ) {\n\t\t\treturn;\n\t\t}\n\t\treturn inserterMediaCategories.filter( ( category ) => {\n\t\t\t// Check if Openverse category is enabled.\n\t\t\tif (\n\t\t\t\t! enableOpenverseMediaCategory &&\n\t\t\t\tcategory.name === 'openverse'\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// When a category has set `isExternalResource` to `true`, we\n\t\t\t// don't need to check for allowed mime types, as they are used\n\t\t\t// for restricting uploads for this media type and not for\n\t\t\t// inserting media from external sources.\n\t\t\tif ( category.isExternalResource ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn Object.values( allowedMimeTypes ).some( ( mimeType ) =>\n\t\t\t\tmimeType.startsWith( `${ category.mediaType }/` )\n\t\t\t);\n\t\t} );\n\t}, [\n\t\tinserterMediaCategories,\n\t\tallowedMimeTypes,\n\t\tenableOpenverseMediaCategory,\n\t] );\n\treturn allowedCategories;\n}\n\nexport function useMediaCategories( rootClientId ) {\n\tconst [ categories, setCategories ] = useState( [] );\n\tconst { canInsertImage, canInsertVideo, canInsertAudio } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanInsertImage: canInsertBlockType(\n\t\t\t\t\t'core/image',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertVideo: canInsertBlockType(\n\t\t\t\t\t'core/video',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertAudio: canInsertBlockType(\n\t\t\t\t\t'core/audio',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tconst inserterMediaCategories = useInserterMediaCategories();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst _categories = [];\n\t\t\t// If `inserterMediaCategories` is not defined in\n\t\t\t// block editor settings, do not show any media categories.\n\t\t\tif ( ! inserterMediaCategories ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Loop through categories to check if they have at least one media item.\n\t\t\tconst categoriesHaveMedia = new Map(\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tinserterMediaCategories.map( async ( category ) => {\n\t\t\t\t\t\t// Some sources are external and we don't need to make a request.\n\t\t\t\t\t\tif ( category.isExternalResource ) {\n\t\t\t\t\t\t\treturn [ category.name, true ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst results = await category.fetch( { per_page: 1 } );\n\t\t\t\t\t\treturn [ category.name, !! results.length ];\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t);\n\t\t\t// We need to filter out categories that don't have any media items or\n\t\t\t// whose corresponding block type is not allowed to be inserted, based\n\t\t\t// on the category's `mediaType`.\n\t\t\tconst canInsertMediaType = {\n\t\t\t\timage: canInsertImage,\n\t\t\t\tvideo: canInsertVideo,\n\t\t\t\taudio: canInsertAudio,\n\t\t\t};\n\t\t\tinserterMediaCategories.forEach( ( category ) => {\n\t\t\t\tif (\n\t\t\t\t\tcanInsertMediaType[ category.mediaType ] &&\n\t\t\t\t\tcategoriesHaveMedia.get( category.name )\n\t\t\t\t) {\n\t\t\t\t\t_categories.push( category );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !! _categories.length ) {\n\t\t\t\tsetCategories( _categories );\n\t\t\t}\n\t\t} )();\n\t}, [\n\t\tcanInsertImage,\n\t\tcanInsertVideo,\n\t\tcanInsertAudio,\n\t\tinserterMediaCategories,\n\t] );\n\treturn categories;\n}\n"]}
@@ -1,70 +1,120 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { createElement } from "@wordpress/element";
3
3
 
4
+ /**
5
+ * External dependencies
6
+ */
7
+ import classnames from 'classnames';
4
8
  /**
5
9
  * WordPress dependencies
6
10
  */
7
- import { __unstableComposite as Composite, __unstableUseCompositeState as useCompositeState, __unstableCompositeItem as CompositeItem, Tooltip } from '@wordpress/components';
8
- import { __ } from '@wordpress/i18n';
9
- import { useMemo, useCallback } from '@wordpress/element';
11
+
12
+ import { __unstableComposite as Composite, __unstableUseCompositeState as useCompositeState, __unstableCompositeItem as CompositeItem, Tooltip, DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
13
+ import { __, sprintf } from '@wordpress/i18n';
14
+ import { useMemo, useCallback, useState } from '@wordpress/element';
10
15
  import { cloneBlock } from '@wordpress/blocks';
16
+ import { moreVertical, external } from '@wordpress/icons';
11
17
  /**
12
18
  * Internal dependencies
13
19
  */
14
20
 
15
21
  import InserterDraggableBlocks from '../../inserter-draggable-blocks';
16
22
  import { getBlockAndPreviewFromMedia } from './utils';
23
+ const MAXIMUM_TITLE_LENGTH = 25;
24
+ const MEDIA_OPTIONS_POPOVER_PROPS = {
25
+ position: 'bottom left',
26
+ className: 'block-editor-inserter__media-list__item-preview-options__popover'
27
+ };
28
+
29
+ function MediaPreviewOptions(_ref) {
30
+ let {
31
+ category,
32
+ media
33
+ } = _ref;
17
34
 
18
- function MediaPreview(_ref) {
35
+ if (!category.getReportUrl) {
36
+ return null;
37
+ }
38
+
39
+ const reportUrl = category.getReportUrl(media);
40
+ return createElement(DropdownMenu, {
41
+ className: "block-editor-inserter__media-list__item-preview-options",
42
+ label: __('Options'),
43
+ popoverProps: MEDIA_OPTIONS_POPOVER_PROPS,
44
+ icon: moreVertical
45
+ }, () => createElement(MenuGroup, null, createElement(MenuItem, {
46
+ onClick: () => window.open(reportUrl, '_blank').focus(),
47
+ icon: external
48
+ }, sprintf(
49
+ /* translators: %s: The media type to report e.g: "image", "video", "audio" */
50
+ __('Report %s'), category.mediaType))));
51
+ }
52
+
53
+ function MediaPreview(_ref2) {
19
54
  var _media$title;
20
55
 
21
56
  let {
22
57
  media,
23
58
  onClick,
24
59
  composite,
25
- mediaType
26
- } = _ref;
27
- const [block, preview] = useMemo(() => getBlockAndPreviewFromMedia(media, mediaType), [media, mediaType]);
60
+ category
61
+ } = _ref2;
62
+ const [isHovered, setIsHovered] = useState(false);
63
+ const [block, preview] = useMemo(() => getBlockAndPreviewFromMedia(media, category.mediaType), [media, category.mediaType]);
28
64
  const title = ((_media$title = media.title) === null || _media$title === void 0 ? void 0 : _media$title.rendered) || media.title;
29
- const baseCssClass = 'block-editor-inserter__media-list';
65
+ let truncatedTitle;
66
+
67
+ if (title.length > MAXIMUM_TITLE_LENGTH) {
68
+ const omission = '...';
69
+ truncatedTitle = title.slice(0, MAXIMUM_TITLE_LENGTH - omission.length) + omission;
70
+ }
71
+
72
+ const onMouseEnter = useCallback(() => setIsHovered(true), []);
73
+ const onMouseLeave = useCallback(() => setIsHovered(false), []);
30
74
  return createElement(InserterDraggableBlocks, {
31
75
  isEnabled: true,
32
76
  blocks: [block]
33
- }, _ref2 => {
77
+ }, _ref3 => {
34
78
  let {
35
79
  draggable,
36
80
  onDragStart,
37
81
  onDragEnd
38
- } = _ref2;
82
+ } = _ref3;
39
83
  return createElement("div", {
40
- className: `${baseCssClass}__list-item`,
84
+ className: classnames('block-editor-inserter__media-list__list-item', {
85
+ 'is-hovered': isHovered
86
+ }),
41
87
  draggable: draggable,
42
88
  onDragStart: onDragStart,
43
89
  onDragEnd: onDragEnd
44
90
  }, createElement(Tooltip, {
45
- text: title
91
+ text: truncatedTitle || title
92
+ }, createElement("div", {
93
+ onMouseEnter: onMouseEnter,
94
+ onMouseLeave: onMouseLeave
46
95
  }, createElement(CompositeItem, _extends({
47
96
  role: "option",
48
97
  as: "div"
49
98
  }, composite, {
50
- className: `${baseCssClass}__item`,
51
- onClick: () => {
52
- onClick(block);
53
- },
99
+ className: "block-editor-inserter__media-list__item",
100
+ onClick: () => onClick(block),
54
101
  "aria-label": title
55
102
  }), createElement("div", {
56
- className: `${baseCssClass}__item-preview`
57
- }, preview))));
103
+ className: "block-editor-inserter__media-list__item-preview"
104
+ }, preview)), createElement(MediaPreviewOptions, {
105
+ category: category,
106
+ media: media
107
+ }))));
58
108
  });
59
109
  }
60
110
 
61
- function MediaList(_ref3) {
111
+ function MediaList(_ref4) {
62
112
  let {
63
113
  mediaList,
64
- mediaType,
114
+ category,
65
115
  onClick,
66
116
  label = __('Media List')
67
- } = _ref3;
117
+ } = _ref4;
68
118
  const composite = useCompositeState();
69
119
  const onPreviewClick = useCallback(block => {
70
120
  onClick(cloneBlock(block));
@@ -73,10 +123,10 @@ function MediaList(_ref3) {
73
123
  role: "listbox",
74
124
  className: "block-editor-inserter__media-list",
75
125
  "aria-label": label
76
- }), mediaList.map(media => createElement(MediaPreview, {
77
- key: media.id,
126
+ }), mediaList.map((media, index) => createElement(MediaPreview, {
127
+ key: media.id || media.sourceId || index,
78
128
  media: media,
79
- mediaType: mediaType,
129
+ category: category,
80
130
  onClick: onPreviewClick,
81
131
  composite: composite
82
132
  })));