@wordpress/block-editor 12.4.0 → 12.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +5 -0
  3. package/build/components/block-heading-level-dropdown/heading-level-icon.js +10 -2
  4. package/build/components/block-heading-level-dropdown/heading-level-icon.js.map +1 -1
  5. package/build/components/block-heading-level-dropdown/index.native.js +4 -3
  6. package/build/components/block-heading-level-dropdown/index.native.js.map +1 -1
  7. package/build/components/block-lock/toolbar.js +25 -6
  8. package/build/components/block-lock/toolbar.js.map +1 -1
  9. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +3 -6
  10. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  11. package/build/components/block-parent-selector/index.js +8 -5
  12. package/build/components/block-parent-selector/index.js.map +1 -1
  13. package/build/components/block-removal-warning-modal/index.js +18 -25
  14. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  15. package/build/components/block-toolbar/index.js +8 -5
  16. package/build/components/block-toolbar/index.js.map +1 -1
  17. package/build/components/block-tools/block-contextual-toolbar.js +7 -11
  18. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  19. package/build/components/dimensions-tool/aspect-ratio-tool.js +99 -0
  20. package/build/components/dimensions-tool/aspect-ratio-tool.js.map +1 -0
  21. package/build/components/dimensions-tool/index.js +207 -0
  22. package/build/components/dimensions-tool/index.js.map +1 -0
  23. package/build/components/dimensions-tool/scale-tool.js +111 -0
  24. package/build/components/dimensions-tool/scale-tool.js.map +1 -0
  25. package/build/components/dimensions-tool/width-height-tool.js +125 -0
  26. package/build/components/dimensions-tool/width-height-tool.js.map +1 -0
  27. package/build/components/global-styles/color-panel.js +1 -1
  28. package/build/components/global-styles/color-panel.js.map +1 -1
  29. package/build/components/global-styles/filters-panel.js +1 -1
  30. package/build/components/global-styles/filters-panel.js.map +1 -1
  31. package/build/components/global-styles/hooks.js +2 -2
  32. package/build/components/global-styles/hooks.js.map +1 -1
  33. package/build/components/global-styles/typography-panel.js +34 -2
  34. package/build/components/global-styles/typography-panel.js.map +1 -1
  35. package/build/components/image-editor/aspect-ratio-dropdown.js +1 -1
  36. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  37. package/build/components/image-editor/use-save-image.js +1 -2
  38. package/build/components/image-editor/use-save-image.js.map +1 -1
  39. package/build/components/image-size-control/index.js +6 -0
  40. package/build/components/image-size-control/index.js.map +1 -1
  41. package/build/components/index.js +19 -1
  42. package/build/components/index.js.map +1 -1
  43. package/build/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  44. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  45. package/build/components/inserter/block-patterns-tab.js +7 -35
  46. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  47. package/build/components/inserter/hooks/use-block-types-state.js +3 -4
  48. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  49. package/build/components/inserter/hooks/use-patterns-state.js +9 -3
  50. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  51. package/build/components/inserter/media-tab/hooks.js +2 -21
  52. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  53. package/build/components/inserter/reusable-block-rename-hint.js +62 -0
  54. package/build/components/inserter/reusable-block-rename-hint.js.map +1 -0
  55. package/build/components/inserter/reusable-blocks-tab.js +6 -2
  56. package/build/components/inserter/reusable-blocks-tab.js.map +1 -1
  57. package/build/components/inserter/reusable-blocks-tab.native.js +2 -2
  58. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  59. package/build/components/inserter/tabs.native.js +1 -1
  60. package/build/components/inserter/tabs.native.js.map +1 -1
  61. package/build/components/inserter-draggable-blocks/index.js +9 -1
  62. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  63. package/build/components/link-control/constants.js +1 -1
  64. package/build/components/link-control/constants.js.map +1 -1
  65. package/build/components/link-control/index.js +17 -15
  66. package/build/components/link-control/index.js.map +1 -1
  67. package/build/components/link-control/search-create-button.js +5 -21
  68. package/build/components/link-control/search-create-button.js.map +1 -1
  69. package/build/components/link-control/search-input.js +4 -4
  70. package/build/components/link-control/search-input.js.map +1 -1
  71. package/build/components/link-control/search-item.js +13 -30
  72. package/build/components/link-control/search-item.js.map +1 -1
  73. package/build/components/link-control/search-results.js +2 -2
  74. package/build/components/link-control/search-results.js.map +1 -1
  75. package/build/components/link-control/settings-drawer.js +2 -3
  76. package/build/components/link-control/settings-drawer.js.map +1 -1
  77. package/build/components/list-view/appender.js +2 -6
  78. package/build/components/list-view/appender.js.map +1 -1
  79. package/build/components/provider/index.js +5 -2
  80. package/build/components/provider/index.js.map +1 -1
  81. package/build/components/provider/use-block-sync.js +21 -0
  82. package/build/components/provider/use-block-sync.js.map +1 -1
  83. package/build/components/resolution-tool/index.js +55 -0
  84. package/build/components/resolution-tool/index.js.map +1 -0
  85. package/build/components/url-input/index.js +4 -2
  86. package/build/components/url-input/index.js.map +1 -1
  87. package/build/components/writing-flow/use-tab-nav.js +10 -27
  88. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  89. package/build/components/writing-mode-control/index.js +70 -0
  90. package/build/components/writing-mode-control/index.js.map +1 -0
  91. package/build/hooks/behaviors.js +25 -20
  92. package/build/hooks/behaviors.js.map +1 -1
  93. package/build/hooks/supports.js +7 -1
  94. package/build/hooks/supports.js.map +1 -1
  95. package/build/hooks/typography.js +2 -1
  96. package/build/hooks/typography.js.map +1 -1
  97. package/build/hooks/utils.js +4 -2
  98. package/build/hooks/utils.js.map +1 -1
  99. package/build/private-apis.js +10 -1
  100. package/build/private-apis.js.map +1 -1
  101. package/build/private-apis.native.js +3 -0
  102. package/build/private-apis.native.js.map +1 -1
  103. package/build/store/actions.js +195 -1
  104. package/build/store/actions.js.map +1 -1
  105. package/build/store/defaults.js +1 -0
  106. package/build/store/defaults.js.map +1 -1
  107. package/build/store/index.js +10 -1
  108. package/build/store/index.js.map +1 -1
  109. package/build/store/private-actions.js +46 -40
  110. package/build/store/private-actions.js.map +1 -1
  111. package/build/store/private-selectors.js +3 -3
  112. package/build/store/private-selectors.js.map +1 -1
  113. package/build/store/reducer.js +22 -8
  114. package/build/store/reducer.js.map +1 -1
  115. package/build/store/selectors.js +33 -15
  116. package/build/store/selectors.js.map +1 -1
  117. package/build-module/components/block-heading-level-dropdown/heading-level-icon.js +9 -2
  118. package/build-module/components/block-heading-level-dropdown/heading-level-icon.js.map +1 -1
  119. package/build-module/components/block-heading-level-dropdown/index.native.js +4 -3
  120. package/build-module/components/block-heading-level-dropdown/index.native.js.map +1 -1
  121. package/build-module/components/block-lock/toolbar.js +25 -7
  122. package/build-module/components/block-lock/toolbar.js.map +1 -1
  123. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +4 -6
  124. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  125. package/build-module/components/block-parent-selector/index.js +7 -5
  126. package/build-module/components/block-parent-selector/index.js.map +1 -1
  127. package/build-module/components/block-removal-warning-modal/index.js +20 -24
  128. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  129. package/build-module/components/block-toolbar/index.js +8 -5
  130. package/build-module/components/block-toolbar/index.js.map +1 -1
  131. package/build-module/components/block-tools/block-contextual-toolbar.js +8 -11
  132. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  133. package/build-module/components/dimensions-tool/aspect-ratio-tool.js +87 -0
  134. package/build-module/components/dimensions-tool/aspect-ratio-tool.js.map +1 -0
  135. package/build-module/components/dimensions-tool/index.js +195 -0
  136. package/build-module/components/dimensions-tool/index.js.map +1 -0
  137. package/build-module/components/dimensions-tool/scale-tool.js +103 -0
  138. package/build-module/components/dimensions-tool/scale-tool.js.map +1 -0
  139. package/build-module/components/dimensions-tool/width-height-tool.js +122 -0
  140. package/build-module/components/dimensions-tool/width-height-tool.js.map +1 -0
  141. package/build-module/components/global-styles/color-panel.js +1 -1
  142. package/build-module/components/global-styles/color-panel.js.map +1 -1
  143. package/build-module/components/global-styles/filters-panel.js +2 -2
  144. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  145. package/build-module/components/global-styles/hooks.js +2 -2
  146. package/build-module/components/global-styles/hooks.js.map +1 -1
  147. package/build-module/components/global-styles/typography-panel.js +33 -2
  148. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  149. package/build-module/components/image-editor/aspect-ratio-dropdown.js +1 -1
  150. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  151. package/build-module/components/image-editor/use-save-image.js +1 -2
  152. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  153. package/build-module/components/image-size-control/index.js +5 -0
  154. package/build-module/components/image-size-control/index.js.map +1 -1
  155. package/build-module/components/index.js +6 -0
  156. package/build-module/components/index.js.map +1 -1
  157. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  158. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  159. package/build-module/components/inserter/block-patterns-tab.js +7 -33
  160. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  161. package/build-module/components/inserter/hooks/use-block-types-state.js +3 -4
  162. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  163. package/build-module/components/inserter/hooks/use-patterns-state.js +9 -3
  164. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  165. package/build-module/components/inserter/media-tab/hooks.js +2 -21
  166. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  167. package/build-module/components/inserter/reusable-block-rename-hint.js +48 -0
  168. package/build-module/components/inserter/reusable-block-rename-hint.js.map +1 -0
  169. package/build-module/components/inserter/reusable-blocks-tab.js +5 -2
  170. package/build-module/components/inserter/reusable-blocks-tab.js.map +1 -1
  171. package/build-module/components/inserter/reusable-blocks-tab.native.js +2 -2
  172. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  173. package/build-module/components/inserter/tabs.native.js +1 -1
  174. package/build-module/components/inserter/tabs.native.js.map +1 -1
  175. package/build-module/components/inserter-draggable-blocks/index.js +9 -2
  176. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  177. package/build-module/components/link-control/constants.js +1 -1
  178. package/build-module/components/link-control/constants.js.map +1 -1
  179. package/build-module/components/link-control/index.js +17 -15
  180. package/build-module/components/link-control/index.js.map +1 -1
  181. package/build-module/components/link-control/search-create-button.js +7 -20
  182. package/build-module/components/link-control/search-create-button.js.map +1 -1
  183. package/build-module/components/link-control/search-input.js +4 -4
  184. package/build-module/components/link-control/search-input.js.map +1 -1
  185. package/build-module/components/link-control/search-item.js +14 -28
  186. package/build-module/components/link-control/search-item.js.map +1 -1
  187. package/build-module/components/link-control/search-results.js +3 -3
  188. package/build-module/components/link-control/search-results.js.map +1 -1
  189. package/build-module/components/link-control/settings-drawer.js +4 -5
  190. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  191. package/build-module/components/list-view/appender.js +2 -6
  192. package/build-module/components/list-view/appender.js.map +1 -1
  193. package/build-module/components/provider/index.js +5 -2
  194. package/build-module/components/provider/index.js.map +1 -1
  195. package/build-module/components/provider/use-block-sync.js +21 -0
  196. package/build-module/components/provider/use-block-sync.js.map +1 -1
  197. package/build-module/components/resolution-tool/index.js +45 -0
  198. package/build-module/components/resolution-tool/index.js.map +1 -0
  199. package/build-module/components/url-input/index.js +4 -2
  200. package/build-module/components/url-input/index.js.map +1 -1
  201. package/build-module/components/writing-flow/use-tab-nav.js +8 -26
  202. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  203. package/build-module/components/writing-mode-control/index.js +57 -0
  204. package/build-module/components/writing-mode-control/index.js.map +1 -0
  205. package/build-module/hooks/behaviors.js +26 -20
  206. package/build-module/hooks/behaviors.js.map +1 -1
  207. package/build-module/hooks/supports.js +7 -1
  208. package/build-module/hooks/supports.js.map +1 -1
  209. package/build-module/hooks/typography.js +2 -1
  210. package/build-module/hooks/typography.js.map +1 -1
  211. package/build-module/hooks/utils.js +4 -2
  212. package/build-module/hooks/utils.js.map +1 -1
  213. package/build-module/private-apis.js +7 -1
  214. package/build-module/private-apis.js.map +1 -1
  215. package/build-module/private-apis.native.js +2 -0
  216. package/build-module/private-apis.native.js.map +1 -1
  217. package/build-module/store/actions.js +191 -1
  218. package/build-module/store/actions.js.map +1 -1
  219. package/build-module/store/defaults.js +1 -0
  220. package/build-module/store/defaults.js.map +1 -1
  221. package/build-module/store/index.js +10 -1
  222. package/build-module/store/index.js.map +1 -1
  223. package/build-module/store/private-actions.js +45 -36
  224. package/build-module/store/private-actions.js.map +1 -1
  225. package/build-module/store/private-selectors.js +2 -2
  226. package/build-module/store/private-selectors.js.map +1 -1
  227. package/build-module/store/reducer.js +22 -8
  228. package/build-module/store/reducer.js.map +1 -1
  229. package/build-module/store/selectors.js +33 -15
  230. package/build-module/store/selectors.js.map +1 -1
  231. package/build-style/content-rtl.css +3 -0
  232. package/build-style/content.css +3 -0
  233. package/build-style/style-rtl.css +131 -129
  234. package/build-style/style.css +131 -129
  235. package/package.json +32 -31
  236. package/src/components/alignment-control/test/__snapshots__/index.js.snap +6 -6
  237. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +5 -5
  238. package/src/components/block-draggable/style.scss +1 -0
  239. package/src/components/block-heading-level-dropdown/heading-level-icon.js +6 -1
  240. package/src/components/block-heading-level-dropdown/index.native.js +8 -4
  241. package/src/components/block-inspector/style.scss +2 -1
  242. package/src/components/block-lock/toolbar.js +34 -6
  243. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +4 -8
  244. package/src/components/block-parent-selector/index.js +13 -8
  245. package/src/components/block-removal-warning-modal/index.js +20 -33
  246. package/src/components/block-toolbar/index.js +9 -6
  247. package/src/components/block-tools/block-contextual-toolbar.js +5 -11
  248. package/src/components/block-tools/style.scss +73 -26
  249. package/src/components/default-block-appender/content.scss +11 -0
  250. package/src/components/dimensions-tool/aspect-ratio-tool.js +124 -0
  251. package/src/components/dimensions-tool/index.js +212 -0
  252. package/src/components/dimensions-tool/scale-tool.js +124 -0
  253. package/src/components/dimensions-tool/stories/aspect-ratio-tool.js +52 -0
  254. package/src/components/dimensions-tool/stories/index.js +54 -0
  255. package/src/components/dimensions-tool/stories/scale-tool.js +48 -0
  256. package/src/components/dimensions-tool/stories/width-height-tool.js +54 -0
  257. package/src/components/dimensions-tool/test/index.js +641 -0
  258. package/src/components/dimensions-tool/width-height-tool.js +113 -0
  259. package/src/components/font-family/README.md +71 -0
  260. package/src/components/global-styles/color-panel.js +1 -1
  261. package/src/components/global-styles/filters-panel.js +2 -2
  262. package/src/components/global-styles/hooks.js +2 -0
  263. package/src/components/global-styles/typography-panel.js +40 -0
  264. package/src/components/image-editor/aspect-ratio-dropdown.js +1 -1
  265. package/src/components/image-editor/use-save-image.js +0 -1
  266. package/src/components/image-size-control/index.js +6 -0
  267. package/src/components/index.js +6 -0
  268. package/src/components/inserter/block-patterns-explorer/patterns-list.js +8 -2
  269. package/src/components/inserter/block-patterns-tab.js +8 -56
  270. package/src/components/inserter/hooks/use-block-types-state.js +3 -4
  271. package/src/components/inserter/hooks/use-patterns-state.js +35 -19
  272. package/src/components/inserter/media-tab/hooks.js +2 -22
  273. package/src/components/inserter/reusable-block-rename-hint.js +52 -0
  274. package/src/components/inserter/reusable-blocks-tab.js +5 -1
  275. package/src/components/inserter/reusable-blocks-tab.native.js +2 -2
  276. package/src/components/inserter/style.scss +28 -0
  277. package/src/components/inserter/tabs.native.js +5 -1
  278. package/src/components/inserter-draggable-blocks/index.js +13 -2
  279. package/src/components/link-control/constants.js +1 -1
  280. package/src/components/link-control/index.js +32 -28
  281. package/src/components/link-control/search-create-button.js +8 -26
  282. package/src/components/link-control/search-input.js +4 -3
  283. package/src/components/link-control/search-item.js +21 -43
  284. package/src/components/link-control/search-results.js +48 -46
  285. package/src/components/link-control/settings-drawer.js +6 -5
  286. package/src/components/link-control/style.scss +51 -123
  287. package/src/components/link-control/test/index.js +135 -123
  288. package/src/components/list-view/appender.js +5 -6
  289. package/src/components/list-view/style.scss +1 -2
  290. package/src/components/media-replace-flow/test/index.js +1 -1
  291. package/src/components/panel-color-settings/README.md +98 -0
  292. package/src/components/provider/index.js +9 -2
  293. package/src/components/provider/test/use-block-sync.js +21 -6
  294. package/src/components/provider/use-block-sync.js +19 -0
  295. package/src/components/recursion-provider/README.md +101 -0
  296. package/src/components/resolution-tool/index.js +56 -0
  297. package/src/components/resolution-tool/stories/index.js +48 -0
  298. package/src/components/url-input/index.js +2 -0
  299. package/src/components/writing-flow/use-tab-nav.js +10 -33
  300. package/src/components/writing-mode-control/index.js +68 -0
  301. package/src/components/writing-mode-control/style.scss +18 -0
  302. package/src/hooks/behaviors.js +25 -16
  303. package/src/hooks/supports.js +7 -0
  304. package/src/hooks/typography.js +2 -0
  305. package/src/hooks/utils.js +3 -0
  306. package/src/private-apis.js +6 -0
  307. package/src/private-apis.native.js +2 -0
  308. package/src/store/actions.js +194 -1
  309. package/src/store/defaults.js +1 -0
  310. package/src/store/index.js +10 -0
  311. package/src/store/private-actions.js +39 -39
  312. package/src/store/private-selectors.js +2 -2
  313. package/src/store/reducer.js +22 -8
  314. package/src/store/selectors.js +54 -20
  315. package/src/store/test/actions.js +111 -0
  316. package/src/store/test/private-actions.js +56 -0
@@ -19,8 +19,6 @@ var _components = require("@wordpress/components");
19
19
 
20
20
  var _icons = require("@wordpress/icons");
21
21
 
22
- var _blocks = require("@wordpress/blocks");
23
-
24
22
  var _dom = require("@wordpress/dom");
25
23
 
26
24
  var _usePatternsState = _interopRequireDefault(require("./hooks/use-patterns-state"));
@@ -31,8 +29,6 @@ var _explorer = _interopRequireDefault(require("./block-patterns-explorer/explor
31
29
 
32
30
  var _mobileTabNavigation = _interopRequireDefault(require("./mobile-tab-navigation"));
33
31
 
34
- var _useBlockTypesState = _interopRequireDefault(require("./hooks/use-block-types-state"));
35
-
36
32
  /**
37
33
  * WordPress dependencies
38
34
  */
@@ -44,16 +40,10 @@ const noop = () => {}; // Preferred order of pattern categories. Any other categ
44
40
  // be at the bottom without any re-ordering.
45
41
 
46
42
 
47
- const patternCategoriesOrder = ['featured', 'posts', 'text', 'gallery', 'call-to-action', 'banner', 'header', 'footer'];
43
+ const patternCategoriesOrder = ['custom', 'featured', 'posts', 'text', 'gallery', 'call-to-action', 'banner', 'header', 'footer'];
48
44
 
49
45
  function usePatternsCategories(rootClientId) {
50
46
  const [allPatterns, allCategories] = (0, _usePatternsState.default)(undefined, rootClientId);
51
- const [unsyncedPatterns] = (0, _useBlockTypesState.default)(rootClientId, undefined, 'unsynced');
52
- const filteredUnsyncedPatterns = (0, _element.useMemo)(() => {
53
- return unsyncedPatterns.filter(({
54
- category: unsyncedPatternCategory
55
- }) => unsyncedPatternCategory === 'reusable');
56
- }, [unsyncedPatterns]);
57
47
  const hasRegisteredCategory = (0, _element.useCallback)(pattern => {
58
48
  if (!pattern.categories || !pattern.categories.length) {
59
49
  return false;
@@ -84,15 +74,8 @@ function usePatternsCategories(rootClientId) {
84
74
  });
85
75
  }
86
76
 
87
- if (filteredUnsyncedPatterns.length > 0) {
88
- categories.push({
89
- name: 'reusable',
90
- label: (0, _i18n._x)('Custom patterns')
91
- });
92
- }
93
-
94
77
  return categories;
95
- }, [allCategories, allPatterns, filteredUnsyncedPatterns.length, hasRegisteredCategory]);
78
+ }, [allCategories, allPatterns, hasRegisteredCategory]);
96
79
  return populatedCategories;
97
80
  }
98
81
 
@@ -132,16 +115,6 @@ function BlockPatternsCategoryPanel({
132
115
  showTitlesAsTooltip
133
116
  }) {
134
117
  const [allPatterns,, onClick] = (0, _usePatternsState.default)(onInsert, rootClientId);
135
- const [unsyncedPatterns] = (0, _useBlockTypesState.default)(rootClientId, onInsert, 'unsynced');
136
- const filteredUnsyncedPatterns = (0, _element.useMemo)(() => {
137
- return unsyncedPatterns.filter(({
138
- category: unsyncedPatternCategory
139
- }) => unsyncedPatternCategory === 'reusable').map(syncedPattern => ({ ...syncedPattern,
140
- blocks: (0, _blocks.parse)(syncedPattern.content, {
141
- __unstableSkipMigrationLogs: true
142
- })
143
- }));
144
- }, [unsyncedPatterns]);
145
118
  const availableCategories = usePatternsCategories(rootClientId);
146
119
  const currentCategoryPatterns = (0, _element.useMemo)(() => allPatterns.filter(pattern => {
147
120
  var _pattern$categories$f;
@@ -154,13 +127,12 @@ function BlockPatternsCategoryPanel({
154
127
 
155
128
  const availablePatternCategories = (_pattern$categories$f = pattern.categories?.filter(cat => availableCategories.find(availableCategory => availableCategory.name === cat))) !== null && _pattern$categories$f !== void 0 ? _pattern$categories$f : [];
156
129
  return availablePatternCategories.length === 0;
157
- }), [allPatterns, category]);
158
- const patterns = category.name === 'reusable' ? filteredUnsyncedPatterns : currentCategoryPatterns;
159
- const currentShownPatterns = (0, _compose.useAsyncList)(patterns); // Hide block pattern preview on unmount.
130
+ }), [allPatterns, availableCategories, category.name]);
131
+ const categoryPatternsList = (0, _compose.useAsyncList)(currentCategoryPatterns); // Hide block pattern preview on unmount.
160
132
 
161
133
  (0, _element.useEffect)(() => () => onHover(null), []);
162
134
 
163
- if (!currentCategoryPatterns.length && !filteredUnsyncedPatterns.length) {
135
+ if (!currentCategoryPatterns.length) {
164
136
  return null;
165
137
  }
166
138
 
@@ -169,8 +141,8 @@ function BlockPatternsCategoryPanel({
169
141
  }, (0, _element.createElement)("div", {
170
142
  className: "block-editor-inserter__patterns-category-panel-title"
171
143
  }, category.label), (0, _element.createElement)("p", null, category.description), (0, _element.createElement)(_blockPatternsList.default, {
172
- shownPatterns: currentShownPatterns,
173
- blockPatterns: patterns,
144
+ shownPatterns: categoryPatternsList,
145
+ blockPatterns: currentCategoryPatterns,
174
146
  onClickPattern: onClick,
175
147
  onHover: onHover,
176
148
  label: category.label,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"names":["noop","patternCategoriesOrder","usePatternsCategories","rootClientId","allPatterns","allCategories","undefined","unsyncedPatterns","filteredUnsyncedPatterns","filter","category","unsyncedPatternCategory","hasRegisteredCategory","pattern","categories","length","some","cat","name","populatedCategories","includes","sort","aName","bName","aIndex","indexOf","bIndex","find","push","label","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","container","timeout","setTimeout","firstTabbable","focus","tabbable","current","clearTimeout","BlockPatternsCategoryPanel","onClick","map","syncedPattern","blocks","content","__unstableSkipMigrationLogs","availableCategories","currentCategoryPatterns","availablePatternCategories","availableCategory","patterns","currentShownPatterns","description","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","initialCategory","isMobile","chevronLeft","chevronRight"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __, isRTL } from '@wordpress/i18n';\nimport { useAsyncList, useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\nimport { parse } from '@wordpress/blocks';\nimport { focus } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from './hooks/use-patterns-state';\nimport BlockPatternList from '../block-patterns-list';\nimport PatternsExplorerModal from './block-patterns-explorer/explorer';\nimport MobileTabNavigation from './mobile-tab-navigation';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nconst noop = () => {};\n\n// Preferred order of pattern categories. Any other categories should\n// be at the bottom without any re-ordering.\nconst patternCategoriesOrder = [\n\t'featured',\n\t'posts',\n\t'text',\n\t'gallery',\n\t'call-to-action',\n\t'banner',\n\t'header',\n\t'footer',\n];\n\nfunction usePatternsCategories( rootClientId ) {\n\tconst [ allPatterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst [ unsyncedPatterns ] = useBlockTypesState(\n\t\trootClientId,\n\t\tundefined,\n\t\t'unsynced'\n\t);\n\n\tconst filteredUnsyncedPatterns = useMemo( () => {\n\t\treturn unsyncedPatterns.filter(\n\t\t\t( { category: unsyncedPatternCategory } ) =>\n\t\t\t\tunsyncedPatternCategory === 'reusable'\n\t\t);\n\t}, [ unsyncedPatterns ] );\n\tconst hasRegisteredCategory = useCallback(\n\t\t( pattern ) => {\n\t\t\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn pattern.categories.some( ( cat ) =>\n\t\t\t\tallCategories.some( ( category ) => category.name === cat )\n\t\t\t);\n\t\t},\n\t\t[ allCategories ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tallPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( { name: aName }, { name: bName } ) => {\n\t\t\t\t// Sort categories according to `patternCategoriesOrder`.\n\t\t\t\tlet aIndex = patternCategoriesOrder.indexOf( aName );\n\t\t\t\tlet bIndex = patternCategoriesOrder.indexOf( bName );\n\t\t\t\t// All other categories should come after that.\n\t\t\t\tif ( aIndex < 0 ) aIndex = patternCategoriesOrder.length;\n\t\t\t\tif ( bIndex < 0 ) bIndex = patternCategoriesOrder.length;\n\t\t\t\treturn aIndex - bIndex;\n\t\t\t} );\n\n\t\tif (\n\t\t\tallPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\t\tif ( filteredUnsyncedPatterns.length > 0 ) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'reusable',\n\t\t\t\tlabel: _x( 'Custom patterns' ),\n\t\t\t} );\n\t\t}\n\n\t\treturn categories;\n\t}, [\n\t\tallCategories,\n\t\tallPatterns,\n\t\tfilteredUnsyncedPatterns.length,\n\t\thasRegisteredCategory,\n\t] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst container = useRef();\n\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tconst [ firstTabbable ] = focus.tabbable.find( container.current );\n\t\t\tfirstTabbable?.focus();\n\t\t} );\n\t\treturn () => clearTimeout( timeout );\n\t}, [ category ] );\n\n\treturn (\n\t\t<div\n\t\t\tref={ container }\n\t\t\tclassName=\"block-editor-inserter__patterns-category-dialog\"\n\t\t>\n\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tcategory={ category }\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport function BlockPatternsCategoryPanel( {\n\trootClientId,\n\tonInsert,\n\tonHover = noop,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst [ allPatterns, , onClick ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\tconst [ unsyncedPatterns ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert,\n\t\t'unsynced'\n\t);\n\tconst filteredUnsyncedPatterns = useMemo( () => {\n\t\treturn unsyncedPatterns\n\t\t\t.filter(\n\t\t\t\t( { category: unsyncedPatternCategory } ) =>\n\t\t\t\t\tunsyncedPatternCategory === 'reusable'\n\t\t\t)\n\t\t\t.map( ( syncedPattern ) => ( {\n\t\t\t\t...syncedPattern,\n\t\t\t\tblocks: parse( syncedPattern.content, {\n\t\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t\t} ),\n\t\t\t} ) );\n\t}, [ unsyncedPatterns ] );\n\n\tconst availableCategories = usePatternsCategories( rootClientId );\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif ( category.name !== 'uncategorized' ) {\n\t\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t\t}\n\n\t\t\t\t// The uncategorized category should show all the patterns without any category\n\t\t\t\t// or with no available category.\n\t\t\t\tconst availablePatternCategories =\n\t\t\t\t\tpattern.categories?.filter( ( cat ) =>\n\t\t\t\t\t\tavailableCategories.find(\n\t\t\t\t\t\t\t( availableCategory ) =>\n\t\t\t\t\t\t\t\tavailableCategory.name === cat\n\t\t\t\t\t\t)\n\t\t\t\t\t) ?? [];\n\n\t\t\t\treturn availablePatternCategories.length === 0;\n\t\t\t} ),\n\t\t[ allPatterns, category ]\n\t);\n\tconst patterns =\n\t\tcategory.name === 'reusable'\n\t\t\t? filteredUnsyncedPatterns\n\t\t\t: currentCategoryPatterns;\n\tconst currentShownPatterns = useAsyncList( patterns );\n\n\t// Hide block pattern preview on unmount.\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tif (\n\t\t! currentCategoryPatterns.length &&\n\t\t! filteredUnsyncedPatterns.length\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"block-editor-inserter__patterns-category-panel\">\n\t\t\t<div className=\"block-editor-inserter__patterns-category-panel-title\">\n\t\t\t\t{ category.label }\n\t\t\t</div>\n\t\t\t<p>{ category.description }</p>\n\t\t\t<BlockPatternList\n\t\t\t\tshownPatterns={ currentShownPatterns }\n\t\t\t\tblockPatterns={ patterns }\n\t\t\t\tonClickPattern={ onClick }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ category.label }\n\t\t\t\torientation=\"vertical\"\n\t\t\t\tcategory={ category.label }\n\t\t\t\tisDraggable\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BlockPatternsTabs( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\tconst categories = usePatternsCategories( rootClientId );\n\tconst initialCategory = selectedCategory || categories[ 0 ];\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t<div className=\"block-editor-inserter__block-patterns-tabs-container\">\n\t\t\t\t\t<nav aria-label={ __( 'Block pattern categories' ) }>\n\t\t\t\t\t\t<ItemGroup\n\t\t\t\t\t\t\trole=\"list\"\n\t\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectCategory( category )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category'\n\t\t\t\t\t\t\t\t\t\t\t: 'block-editor-inserter__patterns-category'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-label={ category.label }\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'true'\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tisRTL()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? chevronLeft\n\t\t\t\t\t\t\t\t\t\t\t\t\t: chevronRight\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<div role=\"listitem\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-explore-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetShowPatternsExplorer( true )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t<MobileTabNavigation categories={ categories }>\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\tshowTitlesAsTooltip={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</MobileTabNavigation>\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t<PatternsExplorerModal\n\t\t\t\t\tinitialCategory={ initialCategory }\n\t\t\t\t\tpatternCategories={ categories }\n\t\t\t\t\tonModalClose={ () => setShowPatternsExplorer( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"names":["noop","patternCategoriesOrder","usePatternsCategories","rootClientId","allPatterns","allCategories","undefined","hasRegisteredCategory","pattern","categories","length","some","cat","category","name","populatedCategories","filter","includes","sort","aName","bName","aIndex","indexOf","bIndex","find","push","label","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","container","timeout","setTimeout","firstTabbable","focus","tabbable","current","clearTimeout","BlockPatternsCategoryPanel","onClick","availableCategories","currentCategoryPatterns","availablePatternCategories","availableCategory","categoryPatternsList","description","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","initialCategory","isMobile","map","chevronLeft","chevronRight"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __, isRTL } from '@wordpress/i18n';\nimport { useAsyncList, useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\nimport { focus } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from './hooks/use-patterns-state';\nimport BlockPatternList from '../block-patterns-list';\nimport PatternsExplorerModal from './block-patterns-explorer/explorer';\nimport MobileTabNavigation from './mobile-tab-navigation';\n\nconst noop = () => {};\n\n// Preferred order of pattern categories. Any other categories should\n// be at the bottom without any re-ordering.\nconst patternCategoriesOrder = [\n\t'custom',\n\t'featured',\n\t'posts',\n\t'text',\n\t'gallery',\n\t'call-to-action',\n\t'banner',\n\t'header',\n\t'footer',\n];\n\nfunction usePatternsCategories( rootClientId ) {\n\tconst [ allPatterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst hasRegisteredCategory = useCallback(\n\t\t( pattern ) => {\n\t\t\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn pattern.categories.some( ( cat ) =>\n\t\t\t\tallCategories.some( ( category ) => category.name === cat )\n\t\t\t);\n\t\t},\n\t\t[ allCategories ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tallPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( { name: aName }, { name: bName } ) => {\n\t\t\t\t// Sort categories according to `patternCategoriesOrder`.\n\t\t\t\tlet aIndex = patternCategoriesOrder.indexOf( aName );\n\t\t\t\tlet bIndex = patternCategoriesOrder.indexOf( bName );\n\t\t\t\t// All other categories should come after that.\n\t\t\t\tif ( aIndex < 0 ) aIndex = patternCategoriesOrder.length;\n\t\t\t\tif ( bIndex < 0 ) bIndex = patternCategoriesOrder.length;\n\t\t\t\treturn aIndex - bIndex;\n\t\t\t} );\n\n\t\tif (\n\t\t\tallPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\n\t\treturn categories;\n\t}, [ allCategories, allPatterns, hasRegisteredCategory ] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst container = useRef();\n\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tconst [ firstTabbable ] = focus.tabbable.find( container.current );\n\t\t\tfirstTabbable?.focus();\n\t\t} );\n\t\treturn () => clearTimeout( timeout );\n\t}, [ category ] );\n\n\treturn (\n\t\t<div\n\t\t\tref={ container }\n\t\t\tclassName=\"block-editor-inserter__patterns-category-dialog\"\n\t\t>\n\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tcategory={ category }\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport function BlockPatternsCategoryPanel( {\n\trootClientId,\n\tonInsert,\n\tonHover = noop,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst [ allPatterns, , onClick ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\n\tconst availableCategories = usePatternsCategories( rootClientId );\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif ( category.name !== 'uncategorized' ) {\n\t\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t\t}\n\n\t\t\t\t// The uncategorized category should show all the patterns without any category\n\t\t\t\t// or with no available category.\n\t\t\t\tconst availablePatternCategories =\n\t\t\t\t\tpattern.categories?.filter( ( cat ) =>\n\t\t\t\t\t\tavailableCategories.find(\n\t\t\t\t\t\t\t( availableCategory ) =>\n\t\t\t\t\t\t\t\tavailableCategory.name === cat\n\t\t\t\t\t\t)\n\t\t\t\t\t) ?? [];\n\n\t\t\t\treturn availablePatternCategories.length === 0;\n\t\t\t} ),\n\t\t[ allPatterns, availableCategories, category.name ]\n\t);\n\n\tconst categoryPatternsList = useAsyncList( currentCategoryPatterns );\n\n\t// Hide block pattern preview on unmount.\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tif ( ! currentCategoryPatterns.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"block-editor-inserter__patterns-category-panel\">\n\t\t\t<div className=\"block-editor-inserter__patterns-category-panel-title\">\n\t\t\t\t{ category.label }\n\t\t\t</div>\n\t\t\t<p>{ category.description }</p>\n\t\t\t<BlockPatternList\n\t\t\t\tshownPatterns={ categoryPatternsList }\n\t\t\t\tblockPatterns={ currentCategoryPatterns }\n\t\t\t\tonClickPattern={ onClick }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ category.label }\n\t\t\t\torientation=\"vertical\"\n\t\t\t\tcategory={ category.label }\n\t\t\t\tisDraggable\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BlockPatternsTabs( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\tconst categories = usePatternsCategories( rootClientId );\n\tconst initialCategory = selectedCategory || categories[ 0 ];\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t<div className=\"block-editor-inserter__block-patterns-tabs-container\">\n\t\t\t\t\t<nav aria-label={ __( 'Block pattern categories' ) }>\n\t\t\t\t\t\t<ItemGroup\n\t\t\t\t\t\t\trole=\"list\"\n\t\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectCategory( category )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category'\n\t\t\t\t\t\t\t\t\t\t\t: 'block-editor-inserter__patterns-category'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-label={ category.label }\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'true'\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tisRTL()\n\t\t\t\t\t\t\t\t\t\t\t\t\t? chevronLeft\n\t\t\t\t\t\t\t\t\t\t\t\t\t: chevronRight\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<div role=\"listitem\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-explore-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetShowPatternsExplorer( true )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t<MobileTabNavigation categories={ categories }>\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\tshowTitlesAsTooltip={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</MobileTabNavigation>\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t<PatternsExplorerModal\n\t\t\t\t\tinitialCategory={ initialCategory }\n\t\t\t\t\tpatternCategories={ categories }\n\t\t\t\t\tonModalClose={ () => setShowPatternsExplorer( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"]}
@@ -26,10 +26,9 @@ var _store = require("../../../store");
26
26
  *
27
27
  * @param {string=} rootClientId Insertion's root client ID.
28
28
  * @param {Function} onInsert function called when inserter a list of blocks.
29
- * @param {?string} syncStatus Optional sync status to filter pattern blocks by.
30
29
  * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)
31
30
  */
32
- const useBlockTypesState = (rootClientId, onInsert, syncStatus) => {
31
+ const useBlockTypesState = (rootClientId, onInsert) => {
33
32
  const {
34
33
  categories,
35
34
  collections,
@@ -45,9 +44,9 @@ const useBlockTypesState = (rootClientId, onInsert, syncStatus) => {
45
44
  return {
46
45
  categories: getCategories(),
47
46
  collections: getCollections(),
48
- items: getInserterItems(rootClientId, syncStatus)
47
+ items: getInserterItems(rootClientId)
49
48
  };
50
- }, [rootClientId, syncStatus]);
49
+ }, [rootClientId]);
51
50
  const onSelectItem = (0, _element.useCallback)(({
52
51
  name,
53
52
  initialAttributes,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-block-types-state.js"],"names":["useBlockTypesState","rootClientId","onInsert","syncStatus","categories","collections","items","select","getInserterItems","blockEditorStore","getCategories","getCollections","blocksStore","onSelectItem","name","initialAttributes","innerBlocks","shouldFocusBlock","insertedBlock","undefined"],"mappings":";;;;;;;AAGA;;AAKA;;AACA;;AAKA;;AAdA;AACA;AACA;;AASA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,kBAAkB,GAAG,CAAEC,YAAF,EAAgBC,QAAhB,EAA0BC,UAA1B,KAA0C;AACpE,QAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,WAAd;AAA2BC,IAAAA;AAA3B,MAAqC,qBACxCC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAuBD,MAAM,CAAEE,YAAF,CAAnC;AACA,UAAM;AAAEC,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAoCJ,MAAM,CAAEK,aAAF,CAAhD;AAEA,WAAO;AACNR,MAAAA,UAAU,EAAEM,aAAa,EADnB;AAENL,MAAAA,WAAW,EAAEM,cAAc,EAFrB;AAGNL,MAAAA,KAAK,EAAEE,gBAAgB,CAAEP,YAAF,EAAgBE,UAAhB;AAHjB,KAAP;AAKA,GAVyC,EAW1C,CAAEF,YAAF,EAAgBE,UAAhB,CAX0C,CAA3C;AAcA,QAAMU,YAAY,GAAG,0BACpB,CAAE;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,iBAAR;AAA2BC,IAAAA;AAA3B,GAAF,EAA4CC,gBAA5C,KAAkE;AACjE,UAAMC,aAAa,GAAG,yBACrBJ,IADqB,EAErBC,iBAFqB,EAGrB,iDAAqCC,WAArC,CAHqB,CAAtB;AAMAd,IAAAA,QAAQ,CAAEgB,aAAF,EAAiBC,SAAjB,EAA4BF,gBAA5B,CAAR;AACA,GATmB,EAUpB,CAAEf,QAAF,CAVoB,CAArB;AAaA,SAAO,CAAEI,KAAF,EAASF,UAAT,EAAqBC,WAArB,EAAkCQ,YAAlC,CAAP;AACA,CA7BD;;eA+Beb,kB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Retrieves the block types inserter state.\n *\n * @param {string=} rootClientId Insertion's root client ID.\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @param {?string} syncStatus Optional sync status to filter pattern blocks by.\n * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)\n */\nconst useBlockTypesState = ( rootClientId, onInsert, syncStatus ) => {\n\tconst { categories, collections, items } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getInserterItems } = select( blockEditorStore );\n\t\t\tconst { getCategories, getCollections } = select( blocksStore );\n\n\t\t\treturn {\n\t\t\t\tcategories: getCategories(),\n\t\t\t\tcollections: getCollections(),\n\t\t\t\titems: getInserterItems( rootClientId, syncStatus ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId, syncStatus ]\n\t);\n\n\tconst onSelectItem = useCallback(\n\t\t( { name, initialAttributes, innerBlocks }, shouldFocusBlock ) => {\n\t\t\tconst insertedBlock = createBlock(\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tcreateBlocksFromInnerBlocksTemplate( innerBlocks )\n\t\t\t);\n\n\t\t\tonInsert( insertedBlock, undefined, shouldFocusBlock );\n\t\t},\n\t\t[ onInsert ]\n\t);\n\n\treturn [ items, categories, collections, onSelectItem ];\n};\n\nexport default useBlockTypesState;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-block-types-state.js"],"names":["useBlockTypesState","rootClientId","onInsert","categories","collections","items","select","getInserterItems","blockEditorStore","getCategories","getCollections","blocksStore","onSelectItem","name","initialAttributes","innerBlocks","shouldFocusBlock","insertedBlock","undefined"],"mappings":";;;;;;;AAGA;;AAKA;;AACA;;AAKA;;AAdA;AACA;AACA;;AASA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,kBAAkB,GAAG,CAAEC,YAAF,EAAgBC,QAAhB,KAA8B;AACxD,QAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,WAAd;AAA2BC,IAAAA;AAA3B,MAAqC,qBACxCC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAuBD,MAAM,CAAEE,YAAF,CAAnC;AACA,UAAM;AAAEC,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAoCJ,MAAM,CAAEK,aAAF,CAAhD;AAEA,WAAO;AACNR,MAAAA,UAAU,EAAEM,aAAa,EADnB;AAENL,MAAAA,WAAW,EAAEM,cAAc,EAFrB;AAGNL,MAAAA,KAAK,EAAEE,gBAAgB,CAAEN,YAAF;AAHjB,KAAP;AAKA,GAVyC,EAW1C,CAAEA,YAAF,CAX0C,CAA3C;AAcA,QAAMW,YAAY,GAAG,0BACpB,CAAE;AAAEC,IAAAA,IAAF;AAAQC,IAAAA,iBAAR;AAA2BC,IAAAA;AAA3B,GAAF,EAA4CC,gBAA5C,KAAkE;AACjE,UAAMC,aAAa,GAAG,yBACrBJ,IADqB,EAErBC,iBAFqB,EAGrB,iDAAqCC,WAArC,CAHqB,CAAtB;AAMAb,IAAAA,QAAQ,CAAEe,aAAF,EAAiBC,SAAjB,EAA4BF,gBAA5B,CAAR;AACA,GATmB,EAUpB,CAAEd,QAAF,CAVoB,CAArB;AAaA,SAAO,CAAEG,KAAF,EAASF,UAAT,EAAqBC,WAArB,EAAkCQ,YAAlC,CAAP;AACA,CA7BD;;eA+BeZ,kB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateBlock,\n\tcreateBlocksFromInnerBlocksTemplate,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Retrieves the block types inserter state.\n *\n * @param {string=} rootClientId Insertion's root client ID.\n * @param {Function} onInsert function called when inserter a list of blocks.\n * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)\n */\nconst useBlockTypesState = ( rootClientId, onInsert ) => {\n\tconst { categories, collections, items } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getInserterItems } = select( blockEditorStore );\n\t\t\tconst { getCategories, getCollections } = select( blocksStore );\n\n\t\t\treturn {\n\t\t\t\tcategories: getCategories(),\n\t\t\t\tcollections: getCollections(),\n\t\t\t\titems: getInserterItems( rootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst onSelectItem = useCallback(\n\t\t( { name, initialAttributes, innerBlocks }, shouldFocusBlock ) => {\n\t\t\tconst insertedBlock = createBlock(\n\t\t\t\tname,\n\t\t\t\tinitialAttributes,\n\t\t\t\tcreateBlocksFromInnerBlocksTemplate( innerBlocks )\n\t\t\t);\n\n\t\t\tonInsert( insertedBlock, undefined, shouldFocusBlock );\n\t\t},\n\t\t[ onInsert ]\n\t);\n\n\treturn [ items, categories, collections, onSelectItem ];\n};\n\nexport default useBlockTypesState;\n"]}
@@ -24,7 +24,11 @@ var _store = require("../../../store");
24
24
  /**
25
25
  * Internal dependencies
26
26
  */
27
-
27
+ const CUSTOM_CATEGORY = {
28
+ name: 'custom',
29
+ label: (0, _i18n.__)('My patterns'),
30
+ description: (0, _i18n.__)('Custom patterns add by site users')
31
+ };
28
32
  /**
29
33
  * Retrieves the block patterns inserter state.
30
34
  *
@@ -33,6 +37,7 @@ var _store = require("../../../store");
33
37
  *
34
38
  * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)
35
39
  */
40
+
36
41
  const usePatternsState = (onInsert, rootClientId) => {
37
42
  const {
38
43
  patternCategories,
@@ -47,6 +52,7 @@ const usePatternsState = (onInsert, rootClientId) => {
47
52
  patternCategories: getSettings().__experimentalBlockPatternCategories
48
53
  };
49
54
  }, [rootClientId]);
55
+ const allCategories = (0, _element.useMemo)(() => [...patternCategories, CUSTOM_CATEGORY], [patternCategories]);
50
56
  const {
51
57
  createSuccessNotice
52
58
  } = (0, _data.useDispatch)(_notices.store);
@@ -57,8 +63,8 @@ const usePatternsState = (onInsert, rootClientId) => {
57
63
  (0, _i18n.__)('Block pattern "%s" inserted.'), pattern.title), {
58
64
  type: 'snackbar'
59
65
  });
60
- }, []);
61
- return [patterns, patternCategories, onClickPattern];
66
+ }, [createSuccessNotice, onInsert]);
67
+ return [patterns, allCategories, onClickPattern];
62
68
  };
63
69
 
64
70
  var _default = usePatternsState;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"names":["usePatternsState","onInsert","rootClientId","patternCategories","patterns","select","__experimentalGetAllowedPatterns","getSettings","blockEditorStore","__experimentalBlockPatternCategories","createSuccessNotice","noticesStore","onClickPattern","pattern","blocks","map","block","name","title","type"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AAZA;AACA;AACA;;AAOA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,gBAAgB,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B;AACtD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkC,qBACrCC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,gCAAF;AAAoCC,MAAAA;AAApC,QACLF,MAAM,CAAEG,YAAF,CADP;AAEA,WAAO;AACNJ,MAAAA,QAAQ,EAAEE,gCAAgC,CAAEJ,YAAF,CADpC;AAENC,MAAAA,iBAAiB,EAChBI,WAAW,GAAGE;AAHT,KAAP;AAKA,GATsC,EAUvC,CAAEP,YAAF,CAVuC,CAAxC;AAYA,QAAM;AAAEQ,IAAAA;AAAF,MAA0B,uBAAaC,cAAb,CAAhC;AACA,QAAMC,cAAc,GAAG,0BAAa,CAAEC,OAAF,EAAWC,MAAX,KAAuB;AAC1Db,IAAAA,QAAQ,CACP,CAAEa,MAAF,aAAEA,MAAF,cAAEA,MAAF,GAAY,EAAZ,EAAiBC,GAAjB,CAAwBC,KAAF,IAAa,wBAAYA,KAAZ,CAAnC,CADO,EAEPH,OAAO,CAACI,IAFD,CAAR;AAIAP,IAAAA,mBAAmB,CAClB;AACC;AACA,kBAAI,8BAAJ,CAFD,EAGCG,OAAO,CAACK,KAHT,CADkB,EAMlB;AACCC,MAAAA,IAAI,EAAE;AADP,KANkB,CAAnB;AAUA,GAfsB,EAepB,EAfoB,CAAvB;AAiBA,SAAO,CAAEf,QAAF,EAAYD,iBAAZ,EAA+BS,cAA/B,CAAP;AACA,CAhCD;;eAkCeZ,gB","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"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"names":["CUSTOM_CATEGORY","name","label","description","usePatternsState","onInsert","rootClientId","patternCategories","patterns","select","__experimentalGetAllowedPatterns","getSettings","blockEditorStore","__experimentalBlockPatternCategories","allCategories","createSuccessNotice","noticesStore","onClickPattern","pattern","blocks","map","block","title","type"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AAZA;AACA;AACA;;AAOA;AACA;AACA;AAGA,MAAMA,eAAe,GAAG;AACvBC,EAAAA,IAAI,EAAE,QADiB;AAEvBC,EAAAA,KAAK,EAAE,cAAI,aAAJ,CAFgB;AAGvBC,EAAAA,WAAW,EAAE,cAAI,mCAAJ;AAHU,CAAxB;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,CAAEC,QAAF,EAAYC,YAAZ,KAA8B;AACtD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAAkC,qBACrCC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,gCAAF;AAAoCC,MAAAA;AAApC,QACLF,MAAM,CAAEG,YAAF,CADP;AAGA,WAAO;AACNJ,MAAAA,QAAQ,EAAEE,gCAAgC,CAAEJ,YAAF,CADpC;AAENC,MAAAA,iBAAiB,EAChBI,WAAW,GAAGE;AAHT,KAAP;AAKA,GAVsC,EAWvC,CAAEP,YAAF,CAXuC,CAAxC;AAcA,QAAMQ,aAAa,GAAG,sBACrB,MAAM,CAAE,GAAGP,iBAAL,EAAwBP,eAAxB,CADe,EAErB,CAAEO,iBAAF,CAFqB,CAAtB;AAKA,QAAM;AAAEQ,IAAAA;AAAF,MAA0B,uBAAaC,cAAb,CAAhC;AACA,QAAMC,cAAc,GAAG,0BACtB,CAAEC,OAAF,EAAWC,MAAX,KAAuB;AACtBd,IAAAA,QAAQ,CACP,CAAEc,MAAF,aAAEA,MAAF,cAAEA,MAAF,GAAY,EAAZ,EAAiBC,GAAjB,CAAwBC,KAAF,IAAa,wBAAYA,KAAZ,CAAnC,CADO,EAEPH,OAAO,CAACjB,IAFD,CAAR;AAIAc,IAAAA,mBAAmB,CAClB;AACC;AACA,kBAAI,8BAAJ,CAFD,EAGCG,OAAO,CAACI,KAHT,CADkB,EAMlB;AACCC,MAAAA,IAAI,EAAE;AADP,KANkB,CAAnB;AAUA,GAhBqB,EAiBtB,CAAER,mBAAF,EAAuBV,QAAvB,CAjBsB,CAAvB;AAoBA,SAAO,CAAEG,QAAF,EAAYM,aAAZ,EAA2BG,cAA3B,CAAP;AACA,CA1CD;;eA4Ceb,gB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } 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\nconst CUSTOM_CATEGORY = {\n\tname: 'custom',\n\tlabel: __( 'My patterns' ),\n\tdescription: __( 'Custom patterns add by site users' ),\n};\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\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\n\tconst allCategories = useMemo(\n\t\t() => [ ...patternCategories, CUSTOM_CATEGORY ],\n\t\t[ patternCategories ]\n\t);\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback(\n\t\t( pattern, blocks ) => {\n\t\t\tonInsert(\n\t\t\t\t( blocks ?? [] ).map( ( block ) => cloneBlock( block ) ),\n\t\t\t\tpattern.name\n\t\t\t);\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: block pattern title. */\n\t\t\t\t\t__( 'Block pattern \"%s\" inserted.' ),\n\t\t\t\t\tpattern.title\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t[ createSuccessNotice, onInsert ]\n\t);\n\n\treturn [ patterns, allCategories, onClickPattern ];\n};\n\nexport default usePatternsState;\n"]}
@@ -20,28 +20,9 @@ var _store = require("../../../store");
20
20
  * Internal dependencies
21
21
  */
22
22
 
23
- /**
24
- * Interface for inserter media requests.
25
- *
26
- * @typedef {Object} InserterMediaRequest
27
- * @property {number} per_page How many items to fetch per page.
28
- * @property {string} search The search term to use for filtering the results.
29
- */
23
+ /** @typedef {import('./api').InserterMediaRequest} InserterMediaRequest */
30
24
 
31
- /**
32
- * Interface for inserter media responses. Any media resource should
33
- * map their response to this interface, in order to create the core
34
- * WordPress media blocks (image, video, audio).
35
- *
36
- * @typedef {Object} InserterMediaItem
37
- * @property {string} title The title of the media item.
38
- * @property {string} url The source url of the media item.
39
- * @property {string} [previewUrl] The preview source url of the media item to display in the media list.
40
- * @property {number} [id] The WordPress id of the media item.
41
- * @property {number|string} [sourceId] The id of the media item from external source.
42
- * @property {string} [alt] The alt text of the media item.
43
- * @property {string} [caption] The caption of the media item.
44
- */
25
+ /** @typedef {import('./api').InserterMediaItem} InserterMediaItem */
45
26
 
46
27
  /**
47
28
  * Fetches media items based on the provided category.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/media-tab/hooks.js"],"names":["useMediaResults","category","query","mediaList","setMediaList","isLoading","setIsLoading","lastRequest","key","JSON","stringify","name","current","_media","fetch","Object","values","useInserterMediaCategories","inserterMediaCategories","allowedMimeTypes","enableOpenverseMediaCategory","select","settings","blockEditorStore","getSettings","allowedCategories","filter","some","mimeType","startsWith","mediaType","useMediaCategories","rootClientId","categories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","canInsertBlockType","_categories","categoriesHaveMedia","Map","Promise","all","map","isExternalResource","results","per_page","e","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\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\tlet results = [];\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresults = await category.fetch( {\n\t\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t// If the request fails, we shallow the error and just don't show\n\t\t\t\t\t\t\t// the category, in order to not break the media tab.\n\t\t\t\t\t\t}\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
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/media-tab/hooks.js"],"names":["useMediaResults","category","query","mediaList","setMediaList","isLoading","setIsLoading","lastRequest","key","JSON","stringify","name","current","_media","fetch","Object","values","useInserterMediaCategories","inserterMediaCategories","allowedMimeTypes","enableOpenverseMediaCategory","select","settings","blockEditorStore","getSettings","allowedCategories","filter","some","mimeType","startsWith","mediaType","useMediaCategories","rootClientId","categories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","canInsertBlockType","_categories","categoriesHaveMedia","Map","Promise","all","map","isExternalResource","results","per_page","e","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/** @typedef {import('./api').InserterMediaRequest} InserterMediaRequest */\n/** @typedef {import('./api').InserterMediaItem} InserterMediaItem */\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\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\tlet results = [];\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresults = await category.fetch( {\n\t\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t// If the request fails, we shallow the error and just don't show\n\t\t\t\t\t\t\t// the category, in order to not break the media tab.\n\t\t\t\t\t\t}\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"]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ReusableBlocksRenameHint;
7
+
8
+ var _element = require("@wordpress/element");
9
+
10
+ var _components = require("@wordpress/components");
11
+
12
+ var _data = require("@wordpress/data");
13
+
14
+ var _dom = require("@wordpress/dom");
15
+
16
+ var _i18n = require("@wordpress/i18n");
17
+
18
+ var _icons = require("@wordpress/icons");
19
+
20
+ var _preferences = require("@wordpress/preferences");
21
+
22
+ /**
23
+ * WordPress dependencies
24
+ */
25
+ const PREFERENCE_NAME = 'isResuableBlocksrRenameHintVisible';
26
+
27
+ function ReusableBlocksRenameHint() {
28
+ const isReusableBlocksRenameHint = (0, _data.useSelect)(select => {
29
+ var _select$get;
30
+
31
+ return (_select$get = select(_preferences.store).get('core', PREFERENCE_NAME)) !== null && _select$get !== void 0 ? _select$get : true;
32
+ }, []);
33
+ const ref = (0, _element.useRef)();
34
+ const {
35
+ set: setPreference
36
+ } = (0, _data.useDispatch)(_preferences.store);
37
+
38
+ if (!isReusableBlocksRenameHint) {
39
+ return null;
40
+ }
41
+
42
+ return (0, _element.createElement)("div", {
43
+ ref: ref,
44
+ className: "reusable-blocks-menu-items__rename-hint"
45
+ }, (0, _element.createElement)("div", {
46
+ className: "reusable-blocks-menu-items__rename-hint-content"
47
+ }, (0, _i18n.__)('Reusable blocks are now called patterns. A synced pattern will behave in exactly the same way as a reusable block.')), (0, _element.createElement)(_components.Button, {
48
+ className: "reusable-blocks-menu-items__rename-hint-dismiss",
49
+ icon: _icons.close,
50
+ iconSize: "16",
51
+ label: (0, _i18n.__)('Dismiss hint'),
52
+ onClick: () => {
53
+ // Retain focus when dismissing the element.
54
+ const previousElement = _dom.focus.tabbable.findPrevious(ref.current);
55
+
56
+ previousElement?.focus();
57
+ setPreference('core', PREFERENCE_NAME, false);
58
+ },
59
+ showTooltip: false
60
+ }));
61
+ }
62
+ //# sourceMappingURL=reusable-block-rename-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-block-rename-hint.js"],"names":["PREFERENCE_NAME","ReusableBlocksRenameHint","isReusableBlocksRenameHint","select","preferencesStore","get","ref","set","setPreference","close","previousElement","focus","tabbable","findPrevious","current"],"mappings":";;;;;;;AAMA;;AAHA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AATA;AACA;AACA;AASA,MAAMA,eAAe,GAAG,oCAAxB;;AAEe,SAASC,wBAAT,GAAoC;AAClD,QAAMC,0BAA0B,GAAG,qBAChCC,MAAF;AAAA;;AAAA,0BACCA,MAAM,CAAEC,kBAAF,CAAN,CAA2BC,GAA3B,CAAgC,MAAhC,EAAwCL,eAAxC,CADD,qDAC8D,IAD9D;AAAA,GADkC,EAGlC,EAHkC,CAAnC;AAMA,QAAMM,GAAG,GAAG,sBAAZ;AAEA,QAAM;AAAEC,IAAAA,GAAG,EAAEC;AAAP,MAAyB,uBAAaJ,kBAAb,CAA/B;;AACA,MAAK,CAAEF,0BAAP,EAAoC;AACnC,WAAO,IAAP;AACA;;AAED,SACC;AAAK,IAAA,GAAG,EAAGI,GAAX;AAAiB,IAAA,SAAS,EAAC;AAA3B,KACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACG,cACD,oHADC,CADH,CADD,EAMC,4BAAC,kBAAD;AACC,IAAA,SAAS,EAAC,iDADX;AAEC,IAAA,IAAI,EAAGG,YAFR;AAGC,IAAA,QAAQ,EAAC,IAHV;AAIC,IAAA,KAAK,EAAG,cAAI,cAAJ,CAJT;AAKC,IAAA,OAAO,EAAG,MAAM;AACf;AACA,YAAMC,eAAe,GAAGC,WAAMC,QAAN,CAAeC,YAAf,CACvBP,GAAG,CAACQ,OADmB,CAAxB;;AAGAJ,MAAAA,eAAe,EAAEC,KAAjB;AACAH,MAAAA,aAAa,CAAE,MAAF,EAAUR,eAAV,EAA2B,KAA3B,CAAb;AACA,KAZF;AAaC,IAAA,WAAW,EAAG;AAbf,IAND,CADD;AAwBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { focus } from '@wordpress/dom';\nimport { useRef } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { close } from '@wordpress/icons';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\nconst PREFERENCE_NAME = 'isResuableBlocksrRenameHintVisible';\n\nexport default function ReusableBlocksRenameHint() {\n\tconst isReusableBlocksRenameHint = useSelect(\n\t\t( select ) =>\n\t\t\tselect( preferencesStore ).get( 'core', PREFERENCE_NAME ) ?? true,\n\t\t[]\n\t);\n\n\tconst ref = useRef();\n\n\tconst { set: setPreference } = useDispatch( preferencesStore );\n\tif ( ! isReusableBlocksRenameHint ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div ref={ ref } className=\"reusable-blocks-menu-items__rename-hint\">\n\t\t\t<div className=\"reusable-blocks-menu-items__rename-hint-content\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Reusable blocks are now called patterns. A synced pattern will behave in exactly the same way as a reusable block.'\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\tclassName=\"reusable-blocks-menu-items__rename-hint-dismiss\"\n\t\t\t\ticon={ close }\n\t\t\t\ticonSize=\"16\"\n\t\t\t\tlabel={ __( 'Dismiss hint' ) }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\t// Retain focus when dismissing the element.\n\t\t\t\t\tconst previousElement = focus.tabbable.findPrevious(\n\t\t\t\t\t\tref.current\n\t\t\t\t\t);\n\t\t\t\t\tpreviousElement?.focus();\n\t\t\t\t\tsetPreference( 'core', PREFERENCE_NAME, false );\n\t\t\t\t} }\n\t\t\t\tshowTooltip={ false }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"]}
@@ -24,6 +24,8 @@ var _noResults = _interopRequireDefault(require("./no-results"));
24
24
 
25
25
  var _useBlockTypesState = _interopRequireDefault(require("./hooks/use-block-types-state"));
26
26
 
27
+ var _reusableBlockRenameHint = _interopRequireDefault(require("./reusable-block-rename-hint"));
28
+
27
29
  /**
28
30
  * WordPress dependencies
29
31
  */
@@ -74,7 +76,9 @@ function ReusableBlocksTab({
74
76
  onInsert,
75
77
  onHover
76
78
  }) {
77
- return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(ReusableBlocksList, {
79
+ return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("div", {
80
+ className: "block-editor-inserter__hint"
81
+ }, (0, _element.createElement)(_reusableBlockRenameHint.default, null)), (0, _element.createElement)(ReusableBlocksList, {
78
82
  onHover: onHover,
79
83
  onInsert: onInsert,
80
84
  rootClientId: rootClientId
@@ -86,7 +90,7 @@ function ReusableBlocksTab({
86
90
  href: (0, _url.addQueryArgs)('edit.php', {
87
91
  post_type: 'wp_block'
88
92
  })
89
- }, (0, _i18n.__)('Manage custom patterns'))));
93
+ }, (0, _i18n.__)('Manage my patterns'))));
90
94
  }
91
95
 
92
96
  var _default = ReusableBlocksTab;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.js"],"names":["ReusableBlocksList","onHover","onInsert","rootClientId","items","onSelectItem","filteredItems","filter","category","length","ReusableBlocksTab","post_type"],"mappings":";;;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AAdA;AACA;AACA;;AAMA;AACA;AACA;AAMA,SAASA,kBAAT,CAA6B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,QAAX;AAAqBC,EAAAA;AAArB,CAA7B,EAAmE;AAClE,QAAM,CAAEC,KAAF,IAAaC,YAAb,IAA8B,iCACnCF,YADmC,EAEnCD,QAFmC,CAApC;AAKA,QAAMI,aAAa,GAAG,sBAAS,MAAM;AACpC,WAAOF,KAAK,CAACG,MAAN,CAAc,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAoBA,QAAQ,KAAK,UAA/C,CAAP;AACA,GAFqB,EAEnB,CAAEJ,KAAF,CAFmB,CAAtB;;AAIA,MAAKE,aAAa,CAACG,MAAd,KAAyB,CAA9B,EAAkC;AACjC,WAAO,4BAAC,kBAAD,OAAP;AACA;;AAED,SACC,4BAAC,cAAD;AAAe,IAAA,KAAK,EAAG,cAAI,iBAAJ;AAAvB,KACC,4BAAC,uBAAD;AACC,IAAA,KAAK,EAAGH,aADT;AAEC,IAAA,QAAQ,EAAGD,YAFZ;AAGC,IAAA,OAAO,EAAGJ,OAHX;AAIC,IAAA,KAAK,EAAG,cAAI,iBAAJ;AAJT,IADD,CADD;AAUA,C,CAED;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASS,iBAAT,CAA4B;AAAEP,EAAAA,YAAF;AAAgBD,EAAAA,QAAhB;AAA0BD,EAAAA;AAA1B,CAA5B,EAAkE;AACxE,SACC,qDACC,4BAAC,kBAAD;AACC,IAAA,OAAO,EAAGA,OADX;AAEC,IAAA,QAAQ,EAAGC,QAFZ;AAGC,IAAA,YAAY,EAAGC;AAHhB,IADD,EAMC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,kBAAD;AACC,IAAA,SAAS,EAAC,+CADX;AAEC,IAAA,OAAO,EAAC,WAFT;AAGC,IAAA,IAAI,EAAG,uBAAc,UAAd,EAA0B;AAChCQ,MAAAA,SAAS,EAAE;AADqB,KAA1B;AAHR,KAOG,cAAI,wBAAJ,CAPH,CADD,CAND,CADD;AAoBA;;eAEcD,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Button } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nfunction ReusableBlocksList( { onHover, onInsert, rootClientId } ) {\n\tconst [ items, , , onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tconst filteredItems = useMemo( () => {\n\t\treturn items.filter( ( { category } ) => category === 'reusable' );\n\t}, [ items ] );\n\n\tif ( filteredItems.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\treturn (\n\t\t<InserterPanel title={ __( 'Synced patterns' ) }>\n\t\t\t<BlockTypesList\n\t\t\t\titems={ filteredItems }\n\t\t\t\tonSelect={ onSelectItem }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ __( 'Synced patterns' ) }\n\t\t\t/>\n\t\t</InserterPanel>\n\t);\n}\n\n// The unwrapped component is only exported for use by unit tests.\n/**\n * List of reusable blocks shown in the \"Reusable\" tab of the inserter.\n *\n * @param {Object} props Component props.\n * @param {?string} props.rootClientId Client id of block to insert into.\n * @param {Function} props.onInsert Callback to run when item is inserted.\n * @param {Function} props.onHover Callback to run when item is hovered.\n *\n * @return {WPComponent} The component.\n */\nexport function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {\n\treturn (\n\t\t<>\n\t\t\t<ReusableBlocksList\n\t\t\t\tonHover={ onHover }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t<div className=\"block-editor-inserter__manage-reusable-blocks-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"block-editor-inserter__manage-reusable-blocks\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\thref={ addQueryArgs( 'edit.php', {\n\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Manage custom patterns' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.js"],"names":["ReusableBlocksList","onHover","onInsert","rootClientId","items","onSelectItem","filteredItems","filter","category","length","ReusableBlocksTab","post_type"],"mappings":";;;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AAfA;AACA;AACA;;AAMA;AACA;AACA;AAOA,SAASA,kBAAT,CAA6B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,QAAX;AAAqBC,EAAAA;AAArB,CAA7B,EAAmE;AAClE,QAAM,CAAEC,KAAF,IAAaC,YAAb,IAA8B,iCACnCF,YADmC,EAEnCD,QAFmC,CAApC;AAKA,QAAMI,aAAa,GAAG,sBAAS,MAAM;AACpC,WAAOF,KAAK,CAACG,MAAN,CAAc,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAoBA,QAAQ,KAAK,UAA/C,CAAP;AACA,GAFqB,EAEnB,CAAEJ,KAAF,CAFmB,CAAtB;;AAIA,MAAKE,aAAa,CAACG,MAAd,KAAyB,CAA9B,EAAkC;AACjC,WAAO,4BAAC,kBAAD,OAAP;AACA;;AAED,SACC,4BAAC,cAAD;AAAe,IAAA,KAAK,EAAG,cAAI,iBAAJ;AAAvB,KACC,4BAAC,uBAAD;AACC,IAAA,KAAK,EAAGH,aADT;AAEC,IAAA,QAAQ,EAAGD,YAFZ;AAGC,IAAA,OAAO,EAAGJ,OAHX;AAIC,IAAA,KAAK,EAAG,cAAI,iBAAJ;AAJT,IADD,CADD;AAUA,C,CAED;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASS,iBAAT,CAA4B;AAAEP,EAAAA,YAAF;AAAgBD,EAAAA,QAAhB;AAA0BD,EAAAA;AAA1B,CAA5B,EAAkE;AACxE,SACC,qDACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,gCAAD,OADD,CADD,EAIC,4BAAC,kBAAD;AACC,IAAA,OAAO,EAAGA,OADX;AAEC,IAAA,QAAQ,EAAGC,QAFZ;AAGC,IAAA,YAAY,EAAGC;AAHhB,IAJD,EASC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,kBAAD;AACC,IAAA,SAAS,EAAC,+CADX;AAEC,IAAA,OAAO,EAAC,WAFT;AAGC,IAAA,IAAI,EAAG,uBAAc,UAAd,EAA0B;AAChCQ,MAAAA,SAAS,EAAE;AADqB,KAA1B;AAHR,KAOG,cAAI,oBAAJ,CAPH,CADD,CATD,CADD;AAuBA;;eAEcD,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Button } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport InserterPanel from './panel';\nimport InserterNoResults from './no-results';\nimport useBlockTypesState from './hooks/use-block-types-state';\nimport ReusableBlocksRenameHint from './reusable-block-rename-hint';\n\nfunction ReusableBlocksList( { onHover, onInsert, rootClientId } ) {\n\tconst [ items, , , onSelectItem ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonInsert\n\t);\n\n\tconst filteredItems = useMemo( () => {\n\t\treturn items.filter( ( { category } ) => category === 'reusable' );\n\t}, [ items ] );\n\n\tif ( filteredItems.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\treturn (\n\t\t<InserterPanel title={ __( 'Synced patterns' ) }>\n\t\t\t<BlockTypesList\n\t\t\t\titems={ filteredItems }\n\t\t\t\tonSelect={ onSelectItem }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ __( 'Synced patterns' ) }\n\t\t\t/>\n\t\t</InserterPanel>\n\t);\n}\n\n// The unwrapped component is only exported for use by unit tests.\n/**\n * List of reusable blocks shown in the \"Reusable\" tab of the inserter.\n *\n * @param {Object} props Component props.\n * @param {?string} props.rootClientId Client id of block to insert into.\n * @param {Function} props.onInsert Callback to run when item is inserted.\n * @param {Function} props.onHover Callback to run when item is hovered.\n *\n * @return {WPComponent} The component.\n */\nexport function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {\n\treturn (\n\t\t<>\n\t\t\t<div className=\"block-editor-inserter__hint\">\n\t\t\t\t<ReusableBlocksRenameHint />\n\t\t\t</div>\n\t\t\t<ReusableBlocksList\n\t\t\t\tonHover={ onHover }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t/>\n\t\t\t<div className=\"block-editor-inserter__manage-reusable-blocks-container\">\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"block-editor-inserter__manage-reusable-blocks\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\thref={ addQueryArgs( 'edit.php', {\n\t\t\t\t\t\tpost_type: 'wp_block',\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Manage my patterns' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
@@ -49,11 +49,11 @@ function ReusableBlocksTab({
49
49
  items
50
50
  })];
51
51
  return (0, _element.createElement)(_blockTypesList.default, {
52
- name: "ReusableBlocks",
52
+ name: "SyncedPatterns",
53
53
  sections: sections,
54
54
  onSelect: onSelect,
55
55
  listProps: listProps,
56
- label: (0, _i18n.__)('Reusable blocks')
56
+ label: (0, _i18n.__)('Synced patterns')
57
57
  });
58
58
  }
59
59
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.native.js"],"names":["ReusableBlocksTab","onSelect","rootClientId","listProps","items","select","getInserterItems","blockEditorStore","allItems","onlyReusable","sections","key"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AAXA;AACA;AACA;;AAIA;AACA;AACA;AAKA,SAASA,iBAAT,CAA4B;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,YAAZ;AAA0BC,EAAAA;AAA1B,CAA5B,EAAoE;AACnE,QAAM;AAAEC,IAAAA;AAAF,MAAY,qBACfC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAuBD,MAAM,CAAEE,YAAF,CAAnC;AACA,UAAMC,QAAQ,GAAGF,gBAAgB,CAAEJ,YAAF,CAAjC;AAEA,WAAO;AACNE,MAAAA,KAAK,EAAE,gCAAqBI,QAArB,EAA+B;AAAEC,QAAAA,YAAY,EAAE;AAAhB,OAA/B;AADD,KAAP;AAGA,GARgB,EASjB,CAAEP,YAAF,CATiB,CAAlB;AAYA,QAAMQ,QAAQ,GAAG,CAAE,kCAAuB;AAAEC,IAAAA,GAAG,EAAE,WAAP;AAAoBP,IAAAA;AAApB,GAAvB,CAAF,CAAjB;AAEA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,gBADN;AAEC,IAAA,QAAQ,EAAGM,QAFZ;AAGC,IAAA,QAAQ,EAAGT,QAHZ;AAIC,IAAA,SAAS,EAAGE,SAJb;AAKC,IAAA,KAAK,EAAG,cAAI,iBAAJ;AALT,IADD;AASA;;eAEcH,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport { store as blockEditorStore } from '../../store';\nimport { createInserterSection, filterInserterItems } from './utils';\n\nfunction ReusableBlocksTab( { onSelect, rootClientId, listProps } ) {\n\tconst { items } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getInserterItems } = select( blockEditorStore );\n\t\t\tconst allItems = getInserterItems( rootClientId );\n\n\t\t\treturn {\n\t\t\t\titems: filterInserterItems( allItems, { onlyReusable: true } ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst sections = [ createInserterSection( { key: 'reuseable', items } ) ];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"ReusableBlocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ onSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Reusable blocks' ) }\n\t\t/>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.native.js"],"names":["ReusableBlocksTab","onSelect","rootClientId","listProps","items","select","getInserterItems","blockEditorStore","allItems","onlyReusable","sections","key"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AAXA;AACA;AACA;;AAIA;AACA;AACA;AAKA,SAASA,iBAAT,CAA4B;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,YAAZ;AAA0BC,EAAAA;AAA1B,CAA5B,EAAoE;AACnE,QAAM;AAAEC,IAAAA;AAAF,MAAY,qBACfC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAuBD,MAAM,CAAEE,YAAF,CAAnC;AACA,UAAMC,QAAQ,GAAGF,gBAAgB,CAAEJ,YAAF,CAAjC;AAEA,WAAO;AACNE,MAAAA,KAAK,EAAE,gCAAqBI,QAArB,EAA+B;AAAEC,QAAAA,YAAY,EAAE;AAAhB,OAA/B;AADD,KAAP;AAGA,GARgB,EASjB,CAAEP,YAAF,CATiB,CAAlB;AAYA,QAAMQ,QAAQ,GAAG,CAAE,kCAAuB;AAAEC,IAAAA,GAAG,EAAE,WAAP;AAAoBP,IAAAA;AAApB,GAAvB,CAAF,CAAjB;AAEA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,gBADN;AAEC,IAAA,QAAQ,EAAGM,QAFZ;AAGC,IAAA,QAAQ,EAAGT,QAHZ;AAIC,IAAA,SAAS,EAAGE,SAJb;AAKC,IAAA,KAAK,EAAG,cAAI,iBAAJ;AALT,IADD;AASA;;eAEcH,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport { store as blockEditorStore } from '../../store';\nimport { createInserterSection, filterInserterItems } from './utils';\n\nfunction ReusableBlocksTab( { onSelect, rootClientId, listProps } ) {\n\tconst { items } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getInserterItems } = select( blockEditorStore );\n\t\t\tconst allItems = getInserterItems( rootClientId );\n\n\t\t\treturn {\n\t\t\t\titems: filterInserterItems( allItems, { onlyReusable: true } ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst sections = [ createInserterSection( { key: 'reuseable', items } ) ];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"SyncedPatterns\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ onSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Synced patterns' ) }\n\t\t/>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
@@ -144,7 +144,7 @@ InserterTabs.getTabs = () => [{
144
144
  component: _blockTypesTab.default
145
145
  }, {
146
146
  name: 'reusable',
147
- title: (0, _i18n.__)('Reusable'),
147
+ title: (0, _i18n.__)('Synced patterns'),
148
148
  component: _reusableBlocksTab.default
149
149
  }];
150
150
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/tabs.native.js"],"names":["TAB_ANIMATION_DURATION","InserterTabs","listProps","onSelect","rootClientId","showReusableBlocks","tabIndex","tabAnimation","Animated","Value","current","lastScrollEvents","wrapperWidth","setWrapperWidth","onScroll","event","nativeEvent","onWrapperLayout","layout","width","timing","duration","toValue","useNativeDriver","start","lastScrollEvent","tabs","tabKeys","filteredTabs","getTabs","filter","name","keys","translateX","length","interpolate","inputRange","outputRange","map","key","containerStyle","styles","transform","component","TabComponent","index","TabsControl","onChangeTab","segments","title","segmentHandler","selectedTab","tabTitles","indexOf","Control","BlockTypesTab","ReusableBlocksTab"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { Animated, View } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { SegmentedControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesTab from './block-types-tab';\nimport ReusableBlocksTab from './reusable-blocks-tab';\nimport styles from './style.scss';\n\nconst TAB_ANIMATION_DURATION = 250;\n\nfunction InserterTabs( {\n\tlistProps,\n\tonSelect,\n\trootClientId,\n\tshowReusableBlocks,\n\ttabIndex,\n} ) {\n\tconst tabAnimation = useRef( new Animated.Value( 0 ) ).current;\n\tconst lastScrollEvents = useRef( [] ).current;\n\tconst [ wrapperWidth, setWrapperWidth ] = useState( 0 );\n\n\tfunction onScroll( event ) {\n\t\tlastScrollEvents[ tabIndex ] = event.nativeEvent;\n\t\tlistProps.onScroll( event );\n\t}\n\n\tconst onWrapperLayout = useCallback(\n\t\t( { nativeEvent } ) => {\n\t\t\tsetWrapperWidth( nativeEvent.layout.width );\n\t\t},\n\t\t[ setWrapperWidth ]\n\t);\n\n\tuseEffect( () => {\n\t\tAnimated.timing( tabAnimation, {\n\t\t\tduration: TAB_ANIMATION_DURATION,\n\t\t\ttoValue: tabIndex,\n\t\t\tuseNativeDriver: true,\n\t\t} ).start();\n\n\t\t// Notify upstream with the last scroll event of the current tab.\n\t\tconst lastScrollEvent = lastScrollEvents[ tabIndex ];\n\t\tif ( lastScrollEvent ) {\n\t\t\tlistProps.onScroll( { nativeEvent: lastScrollEvent } );\n\t\t}\n\t}, [ tabIndex ] );\n\n\tconst { tabs, tabKeys } = useMemo( () => {\n\t\tconst filteredTabs = InserterTabs.getTabs().filter(\n\t\t\t( { name } ) => showReusableBlocks || name !== 'reusable'\n\t\t);\n\t\treturn {\n\t\t\ttabs: filteredTabs,\n\t\t\ttabKeys: [ ...filteredTabs.keys() ],\n\t\t};\n\t}, [ showReusableBlocks ] );\n\n\tconst translateX = useMemo(\n\t\t() =>\n\t\t\ttabKeys.length > 1\n\t\t\t\t? tabAnimation.interpolate( {\n\t\t\t\t\t\tinputRange: tabKeys,\n\t\t\t\t\t\toutputRange: tabKeys.map(\n\t\t\t\t\t\t\t( key ) => key * -wrapperWidth\n\t\t\t\t\t\t),\n\t\t\t\t } )\n\t\t\t\t: tabAnimation,\n\t\t[ tabAnimation, tabKeys, wrapperWidth ]\n\t);\n\n\tconst containerStyle = [\n\t\tstyles[ 'inserter-tabs__container' ],\n\t\t{\n\t\t\twidth: wrapperWidth * tabKeys.length,\n\t\t\ttransform: [ { translateX } ],\n\t\t},\n\t];\n\n\treturn (\n\t\t<View\n\t\t\tstyle={ styles[ 'inserter-tabs__wrapper' ] }\n\t\t\tonLayout={ onWrapperLayout }\n\t\t>\n\t\t\t<Animated.View style={ containerStyle }>\n\t\t\t\t{ tabs.map( ( { component: TabComponent }, index ) => (\n\t\t\t\t\t<View key={ `tab-${ index }` }>\n\t\t\t\t\t\t<TabComponent\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\t\tlistProps={ { ...listProps, onScroll } }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t) ) }\n\t\t\t</Animated.View>\n\t\t</View>\n\t);\n}\n\nfunction TabsControl( { onChangeTab, showReusableBlocks } ) {\n\tconst tabs = InserterTabs.getTabs();\n\tconst segments = useMemo( () => {\n\t\tconst filteredTabs = tabs.filter(\n\t\t\t( { name } ) => showReusableBlocks || name !== 'reusable'\n\t\t);\n\t\treturn filteredTabs.map( ( { title } ) => title );\n\t}, [ showReusableBlocks ] );\n\n\tconst segmentHandler = useCallback(\n\t\t( selectedTab ) => {\n\t\t\tconst tabTitles = tabs.map( ( { title } ) => title );\n\t\t\tonChangeTab( tabTitles.indexOf( selectedTab ) );\n\t\t},\n\t\t[ onChangeTab ]\n\t);\n\n\treturn segments.length > 1 ? (\n\t\t<SegmentedControl\n\t\t\tsegments={ segments }\n\t\t\tsegmentHandler={ segmentHandler }\n\t\t/>\n\t) : null;\n}\n\nInserterTabs.Control = TabsControl;\n\nInserterTabs.getTabs = () => [\n\t{ name: 'blocks', title: __( 'Blocks' ), component: BlockTypesTab },\n\t{ name: 'reusable', title: __( 'Reusable' ), component: ReusableBlocksTab },\n];\n\nexport default InserterTabs;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/tabs.native.js"],"names":["TAB_ANIMATION_DURATION","InserterTabs","listProps","onSelect","rootClientId","showReusableBlocks","tabIndex","tabAnimation","Animated","Value","current","lastScrollEvents","wrapperWidth","setWrapperWidth","onScroll","event","nativeEvent","onWrapperLayout","layout","width","timing","duration","toValue","useNativeDriver","start","lastScrollEvent","tabs","tabKeys","filteredTabs","getTabs","filter","name","keys","translateX","length","interpolate","inputRange","outputRange","map","key","containerStyle","styles","transform","component","TabComponent","index","TabsControl","onChangeTab","segments","title","segmentHandler","selectedTab","tabTitles","indexOf","Control","BlockTypesTab","ReusableBlocksTab"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { Animated, View } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { SegmentedControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesTab from './block-types-tab';\nimport ReusableBlocksTab from './reusable-blocks-tab';\nimport styles from './style.scss';\n\nconst TAB_ANIMATION_DURATION = 250;\n\nfunction InserterTabs( {\n\tlistProps,\n\tonSelect,\n\trootClientId,\n\tshowReusableBlocks,\n\ttabIndex,\n} ) {\n\tconst tabAnimation = useRef( new Animated.Value( 0 ) ).current;\n\tconst lastScrollEvents = useRef( [] ).current;\n\tconst [ wrapperWidth, setWrapperWidth ] = useState( 0 );\n\n\tfunction onScroll( event ) {\n\t\tlastScrollEvents[ tabIndex ] = event.nativeEvent;\n\t\tlistProps.onScroll( event );\n\t}\n\n\tconst onWrapperLayout = useCallback(\n\t\t( { nativeEvent } ) => {\n\t\t\tsetWrapperWidth( nativeEvent.layout.width );\n\t\t},\n\t\t[ setWrapperWidth ]\n\t);\n\n\tuseEffect( () => {\n\t\tAnimated.timing( tabAnimation, {\n\t\t\tduration: TAB_ANIMATION_DURATION,\n\t\t\ttoValue: tabIndex,\n\t\t\tuseNativeDriver: true,\n\t\t} ).start();\n\n\t\t// Notify upstream with the last scroll event of the current tab.\n\t\tconst lastScrollEvent = lastScrollEvents[ tabIndex ];\n\t\tif ( lastScrollEvent ) {\n\t\t\tlistProps.onScroll( { nativeEvent: lastScrollEvent } );\n\t\t}\n\t}, [ tabIndex ] );\n\n\tconst { tabs, tabKeys } = useMemo( () => {\n\t\tconst filteredTabs = InserterTabs.getTabs().filter(\n\t\t\t( { name } ) => showReusableBlocks || name !== 'reusable'\n\t\t);\n\t\treturn {\n\t\t\ttabs: filteredTabs,\n\t\t\ttabKeys: [ ...filteredTabs.keys() ],\n\t\t};\n\t}, [ showReusableBlocks ] );\n\n\tconst translateX = useMemo(\n\t\t() =>\n\t\t\ttabKeys.length > 1\n\t\t\t\t? tabAnimation.interpolate( {\n\t\t\t\t\t\tinputRange: tabKeys,\n\t\t\t\t\t\toutputRange: tabKeys.map(\n\t\t\t\t\t\t\t( key ) => key * -wrapperWidth\n\t\t\t\t\t\t),\n\t\t\t\t } )\n\t\t\t\t: tabAnimation,\n\t\t[ tabAnimation, tabKeys, wrapperWidth ]\n\t);\n\n\tconst containerStyle = [\n\t\tstyles[ 'inserter-tabs__container' ],\n\t\t{\n\t\t\twidth: wrapperWidth * tabKeys.length,\n\t\t\ttransform: [ { translateX } ],\n\t\t},\n\t];\n\n\treturn (\n\t\t<View\n\t\t\tstyle={ styles[ 'inserter-tabs__wrapper' ] }\n\t\t\tonLayout={ onWrapperLayout }\n\t\t>\n\t\t\t<Animated.View style={ containerStyle }>\n\t\t\t\t{ tabs.map( ( { component: TabComponent }, index ) => (\n\t\t\t\t\t<View key={ `tab-${ index }` }>\n\t\t\t\t\t\t<TabComponent\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\t\tlistProps={ { ...listProps, onScroll } }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</View>\n\t\t\t\t) ) }\n\t\t\t</Animated.View>\n\t\t</View>\n\t);\n}\n\nfunction TabsControl( { onChangeTab, showReusableBlocks } ) {\n\tconst tabs = InserterTabs.getTabs();\n\tconst segments = useMemo( () => {\n\t\tconst filteredTabs = tabs.filter(\n\t\t\t( { name } ) => showReusableBlocks || name !== 'reusable'\n\t\t);\n\t\treturn filteredTabs.map( ( { title } ) => title );\n\t}, [ showReusableBlocks ] );\n\n\tconst segmentHandler = useCallback(\n\t\t( selectedTab ) => {\n\t\t\tconst tabTitles = tabs.map( ( { title } ) => title );\n\t\t\tonChangeTab( tabTitles.indexOf( selectedTab ) );\n\t\t},\n\t\t[ onChangeTab ]\n\t);\n\n\treturn segments.length > 1 ? (\n\t\t<SegmentedControl\n\t\t\tsegments={ segments }\n\t\t\tsegmentHandler={ segmentHandler }\n\t\t/>\n\t) : null;\n}\n\nInserterTabs.Control = TabsControl;\n\nInserterTabs.getTabs = () => [\n\t{ name: 'blocks', title: __( 'Blocks' ), component: BlockTypesTab },\n\t{\n\t\tname: 'reusable',\n\t\ttitle: __( 'Synced patterns' ),\n\t\tcomponent: ReusableBlocksTab,\n\t},\n];\n\nexport default InserterTabs;\n"]}
@@ -13,6 +13,8 @@ var _components = require("@wordpress/components");
13
13
 
14
14
  var _blocks = require("@wordpress/blocks");
15
15
 
16
+ var _data = require("@wordpress/data");
17
+
16
18
  var _draggableChip = _interopRequireDefault(require("../block-draggable/draggable-chip"));
17
19
 
18
20
  /**
@@ -33,6 +35,12 @@ const InserterDraggableBlocks = ({
33
35
  type: 'inserter',
34
36
  blocks
35
37
  };
38
+ const blockTypeIcon = (0, _data.useSelect)(select => {
39
+ const {
40
+ getBlockType
41
+ } = select(_blocks.store);
42
+ return blocks.length === 1 && getBlockType(blocks[0].name)?.icon;
43
+ }, [blocks]);
36
44
  return (0, _element.createElement)(_components.Draggable, {
37
45
  __experimentalTransferDataType: "wp-blocks",
38
46
  transferData: transferData,
@@ -41,7 +49,7 @@ const InserterDraggableBlocks = ({
41
49
  },
42
50
  __experimentalDragComponent: (0, _element.createElement)(_draggableChip.default, {
43
51
  count: blocks.length,
44
- icon: icon,
52
+ icon: icon || !isPattern && blockTypeIcon,
45
53
  isPattern: isPattern
46
54
  })
47
55
  }, ({