@wordpress/block-editor 12.9.1-next.5a1d1283.0 → 12.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +33 -3
  3. package/build/components/block-canvas/index.js +107 -0
  4. package/build/components/block-canvas/index.js.map +1 -0
  5. package/build/components/block-inspector/index.js +4 -1
  6. package/build/components/block-inspector/index.js.map +1 -1
  7. package/build/components/block-patterns-list/index.js +28 -8
  8. package/build/components/block-patterns-list/index.js.map +1 -1
  9. package/build/components/block-patterns-paging/index.js +68 -0
  10. package/build/components/block-patterns-paging/index.js.map +1 -0
  11. package/build/components/block-settings-menu/block-settings-dropdown.js +28 -0
  12. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  13. package/build/components/block-settings-menu-controls/index.js +4 -7
  14. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  15. package/build/components/block-styles/index.js +1 -0
  16. package/build/components/block-styles/index.js.map +1 -1
  17. package/build/components/block-toolbar/block-toolbar-menu.native.js +3 -7
  18. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  19. package/build/components/block-tools/block-contextual-toolbar.js +18 -7
  20. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  21. package/build/components/block-tools/block-selection-button.js +5 -1
  22. package/build/components/block-tools/block-selection-button.js.map +1 -1
  23. package/build/components/border-radius-control/input-controls.js +1 -1
  24. package/build/components/border-radius-control/input-controls.js.map +1 -1
  25. package/build/components/border-radius-control/linked-button.js +2 -4
  26. package/build/components/border-radius-control/linked-button.js.map +1 -1
  27. package/build/components/colors/with-colors.js.map +1 -1
  28. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -21
  29. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  30. package/build/components/default-block-appender/index.native.js +20 -1
  31. package/build/components/default-block-appender/index.native.js.map +1 -1
  32. package/build/components/duotone/utils.js +68 -0
  33. package/build/components/duotone/utils.js.map +1 -1
  34. package/build/components/editor-styles/index.js +28 -9
  35. package/build/components/editor-styles/index.js.map +1 -1
  36. package/build/components/global-styles/hooks.js +2 -101
  37. package/build/components/global-styles/hooks.js.map +1 -1
  38. package/build/components/global-styles/image-settings-panel.js +61 -0
  39. package/build/components/global-styles/image-settings-panel.js.map +1 -0
  40. package/build/components/global-styles/index.js +11 -17
  41. package/build/components/global-styles/index.js.map +1 -1
  42. package/build/components/global-styles/use-global-styles-output.js +19 -15
  43. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  44. package/build/components/global-styles/utils.js +1 -1
  45. package/build/components/global-styles/utils.js.map +1 -1
  46. package/build/components/iframe/index.js +67 -33
  47. package/build/components/iframe/index.js.map +1 -1
  48. package/build/components/image-editor/use-save-image.js +2 -5
  49. package/build/components/image-editor/use-save-image.js.map +1 -1
  50. package/build/components/image-editor/use-transform-image.js +9 -9
  51. package/build/components/image-editor/use-transform-image.js.map +1 -1
  52. package/build/components/index.js +8 -12
  53. package/build/components/index.js.map +1 -1
  54. package/build/components/index.native.js +6 -5
  55. package/build/components/index.native.js.map +1 -1
  56. package/build/components/inner-blocks/use-nested-settings-update.js +13 -7
  57. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  58. package/build/components/inserter/block-patterns-explorer/explorer.js +12 -6
  59. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  60. package/build/components/inserter/block-patterns-explorer/patterns-list.js +45 -22
  61. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  62. package/build/components/inserter/block-patterns-explorer/sidebar.js +9 -9
  63. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  64. package/build/components/inserter/block-patterns-filter.js +137 -0
  65. package/build/components/inserter/block-patterns-filter.js.map +1 -0
  66. package/build/components/inserter/block-patterns-tab.js +128 -42
  67. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  68. package/build/components/inserter/hooks/use-patterns-paging.js +61 -0
  69. package/build/components/inserter/hooks/use-patterns-paging.js.map +1 -0
  70. package/build/components/inserter/hooks/use-patterns-state.js +21 -10
  71. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  72. package/build/components/inserter/menu.js +13 -11
  73. package/build/components/inserter/menu.js.map +1 -1
  74. package/build/components/inserter/search-results.js +4 -3
  75. package/build/components/inserter/search-results.js.map +1 -1
  76. package/build/components/inserter/tabs.js +1 -12
  77. package/build/components/inserter/tabs.js.map +1 -1
  78. package/build/components/inspector-controls/block-support-slot-container.js +12 -1
  79. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -1
  80. package/build/components/inspector-controls/fill.js +24 -13
  81. package/build/components/inspector-controls/fill.js.map +1 -1
  82. package/build/components/inspector-controls/groups.js +5 -3
  83. package/build/components/inspector-controls/groups.js.map +1 -1
  84. package/build/components/inspector-controls/slot.js +13 -0
  85. package/build/components/inspector-controls/slot.js.map +1 -1
  86. package/build/components/inspector-controls-tabs/styles-tab.js +3 -0
  87. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  88. package/build/components/link-control/index.js +12 -2
  89. package/build/components/link-control/index.js.map +1 -1
  90. package/build/components/list-view/block-select-button.js +1 -3
  91. package/build/components/list-view/block-select-button.js.map +1 -1
  92. package/build/components/list-view/block.js +13 -1
  93. package/build/components/list-view/block.js.map +1 -1
  94. package/build/components/list-view/use-block-selection.js +29 -24
  95. package/build/components/list-view/use-block-selection.js.map +1 -1
  96. package/build/components/media-placeholder/index.js +2 -2
  97. package/build/components/media-placeholder/index.js.map +1 -1
  98. package/build/components/media-placeholder/index.native.js +11 -11
  99. package/build/components/media-placeholder/index.native.js.map +1 -1
  100. package/build/components/media-replace-flow/index.js +2 -3
  101. package/build/components/media-replace-flow/index.js.map +1 -1
  102. package/build/components/media-upload/constants.js +30 -0
  103. package/build/components/media-upload/constants.js.map +1 -0
  104. package/build/components/media-upload/index.native.js +63 -53
  105. package/build/components/media-upload/index.native.js.map +1 -1
  106. package/build/components/preview-options/index.js +1 -1
  107. package/build/components/preview-options/index.js.map +1 -1
  108. package/build/components/rich-text/index.js +34 -35
  109. package/build/components/rich-text/index.js.map +1 -1
  110. package/build/components/rich-text/index.native.js +14 -32
  111. package/build/components/rich-text/index.native.js.map +1 -1
  112. package/build/components/rich-text/multiline.js +95 -0
  113. package/build/components/rich-text/multiline.js.map +1 -0
  114. package/build/components/rich-text/split-value.js +10 -16
  115. package/build/components/rich-text/split-value.js.map +1 -1
  116. package/build/components/rich-text/use-enter.js +31 -40
  117. package/build/components/rich-text/use-enter.js.map +1 -1
  118. package/build/components/rich-text/use-paste-handler.js +18 -33
  119. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  120. package/build/components/spacing-sizes-control/utils.js +1 -1
  121. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  122. package/build/components/use-block-commands/index.js +30 -18
  123. package/build/components/use-block-commands/index.js.map +1 -1
  124. package/build/components/use-block-display-information/index.js +5 -2
  125. package/build/components/use-block-display-information/index.js.map +1 -1
  126. package/build/hooks/background.js +263 -0
  127. package/build/hooks/background.js.map +1 -0
  128. package/build/hooks/block-hooks.js +188 -0
  129. package/build/hooks/block-hooks.js.map +1 -0
  130. package/build/hooks/block-rename-ui.js +161 -0
  131. package/build/hooks/block-rename-ui.js.map +1 -0
  132. package/build/hooks/duotone.js +29 -42
  133. package/build/hooks/duotone.js.map +1 -1
  134. package/build/hooks/index.js +2 -2
  135. package/build/hooks/index.js.map +1 -1
  136. package/build/hooks/layout.js +31 -14
  137. package/build/hooks/layout.js.map +1 -1
  138. package/build/hooks/position.js +4 -2
  139. package/build/hooks/position.js.map +1 -1
  140. package/build/hooks/style.js +10 -3
  141. package/build/hooks/style.js.map +1 -1
  142. package/build/private-apis.js +2 -0
  143. package/build/private-apis.js.map +1 -1
  144. package/build/store/actions.js +33 -10
  145. package/build/store/actions.js.map +1 -1
  146. package/build/store/private-actions.js +42 -8
  147. package/build/store/private-actions.js.map +1 -1
  148. package/build/store/private-selectors.js +25 -3
  149. package/build/store/private-selectors.js.map +1 -1
  150. package/build/store/reducer.js +43 -1
  151. package/build/store/reducer.js.map +1 -1
  152. package/build/store/selectors.js +84 -23
  153. package/build/store/selectors.js.map +1 -1
  154. package/build/store/utils.js +0 -4
  155. package/build/store/utils.js.map +1 -1
  156. package/build-module/components/block-canvas/index.js +97 -0
  157. package/build-module/components/block-canvas/index.js.map +1 -0
  158. package/build-module/components/block-inspector/index.js +4 -1
  159. package/build-module/components/block-inspector/index.js.map +1 -1
  160. package/build-module/components/block-patterns-list/index.js +30 -10
  161. package/build-module/components/block-patterns-list/index.js.map +1 -1
  162. package/build-module/components/block-patterns-paging/index.js +61 -0
  163. package/build-module/components/block-patterns-paging/index.js.map +1 -0
  164. package/build-module/components/block-settings-menu/block-settings-dropdown.js +28 -0
  165. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  166. package/build-module/components/block-settings-menu-controls/index.js +4 -7
  167. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  168. package/build-module/components/block-styles/index.js +1 -0
  169. package/build-module/components/block-styles/index.js.map +1 -1
  170. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +3 -7
  171. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  172. package/build-module/components/block-tools/block-contextual-toolbar.js +18 -7
  173. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  174. package/build-module/components/block-tools/block-selection-button.js +5 -1
  175. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  176. package/build-module/components/border-radius-control/input-controls.js +1 -1
  177. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  178. package/build-module/components/border-radius-control/linked-button.js +2 -4
  179. package/build-module/components/border-radius-control/linked-button.js.map +1 -1
  180. package/build-module/components/colors/with-colors.js.map +1 -1
  181. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -21
  182. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  183. package/build-module/components/default-block-appender/index.native.js +20 -1
  184. package/build-module/components/default-block-appender/index.native.js.map +1 -1
  185. package/build-module/components/duotone/utils.js +65 -0
  186. package/build-module/components/duotone/utils.js.map +1 -1
  187. package/build-module/components/editor-styles/index.js +28 -9
  188. package/build-module/components/editor-styles/index.js.map +1 -1
  189. package/build-module/components/global-styles/hooks.js +3 -100
  190. package/build-module/components/global-styles/hooks.js.map +1 -1
  191. package/build-module/components/global-styles/image-settings-panel.js +53 -0
  192. package/build-module/components/global-styles/image-settings-panel.js.map +1 -0
  193. package/build-module/components/global-styles/index.js +2 -2
  194. package/build-module/components/global-styles/index.js.map +1 -1
  195. package/build-module/components/global-styles/use-global-styles-output.js +18 -16
  196. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  197. package/build-module/components/global-styles/utils.js +1 -1
  198. package/build-module/components/global-styles/utils.js.map +1 -1
  199. package/build-module/components/iframe/index.js +66 -33
  200. package/build-module/components/iframe/index.js.map +1 -1
  201. package/build-module/components/image-editor/use-save-image.js +2 -5
  202. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  203. package/build-module/components/image-editor/use-transform-image.js +9 -9
  204. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  205. package/build-module/components/index.js +1 -1
  206. package/build-module/components/index.js.map +1 -1
  207. package/build-module/components/index.native.js +2 -1
  208. package/build-module/components/index.native.js.map +1 -1
  209. package/build-module/components/inner-blocks/use-nested-settings-update.js +14 -8
  210. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  211. package/build-module/components/inserter/block-patterns-explorer/explorer.js +12 -6
  212. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  213. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +47 -24
  214. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  215. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +9 -9
  216. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  217. package/build-module/components/inserter/block-patterns-filter.js +128 -0
  218. package/build-module/components/inserter/block-patterns-filter.js.map +1 -0
  219. package/build-module/components/inserter/block-patterns-tab.js +125 -44
  220. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  221. package/build-module/components/inserter/hooks/use-patterns-paging.js +54 -0
  222. package/build-module/components/inserter/hooks/use-patterns-paging.js.map +1 -0
  223. package/build-module/components/inserter/hooks/use-patterns-state.js +22 -10
  224. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  225. package/build-module/components/inserter/menu.js +13 -11
  226. package/build-module/components/inserter/menu.js.map +1 -1
  227. package/build-module/components/inserter/search-results.js +4 -3
  228. package/build-module/components/inserter/search-results.js.map +1 -1
  229. package/build-module/components/inserter/tabs.js +1 -12
  230. package/build-module/components/inserter/tabs.js.map +1 -1
  231. package/build-module/components/inspector-controls/block-support-slot-container.js +13 -2
  232. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -1
  233. package/build-module/components/inspector-controls/fill.js +25 -14
  234. package/build-module/components/inspector-controls/fill.js.map +1 -1
  235. package/build-module/components/inspector-controls/groups.js +5 -3
  236. package/build-module/components/inspector-controls/groups.js.map +1 -1
  237. package/build-module/components/inspector-controls/slot.js +15 -1
  238. package/build-module/components/inspector-controls/slot.js.map +1 -1
  239. package/build-module/components/inspector-controls-tabs/styles-tab.js +3 -0
  240. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  241. package/build-module/components/link-control/index.js +12 -2
  242. package/build-module/components/link-control/index.js.map +1 -1
  243. package/build-module/components/list-view/block-select-button.js +1 -3
  244. package/build-module/components/list-view/block-select-button.js.map +1 -1
  245. package/build-module/components/list-view/block.js +13 -1
  246. package/build-module/components/list-view/block.js.map +1 -1
  247. package/build-module/components/list-view/use-block-selection.js +30 -25
  248. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  249. package/build-module/components/media-placeholder/index.js +2 -2
  250. package/build-module/components/media-placeholder/index.js.map +1 -1
  251. package/build-module/components/media-placeholder/index.native.js +7 -7
  252. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  253. package/build-module/components/media-replace-flow/index.js +2 -3
  254. package/build-module/components/media-replace-flow/index.js.map +1 -1
  255. package/build-module/components/media-upload/constants.js +14 -0
  256. package/build-module/components/media-upload/constants.js.map +1 -0
  257. package/build-module/components/media-upload/index.native.js +53 -34
  258. package/build-module/components/media-upload/index.native.js.map +1 -1
  259. package/build-module/components/preview-options/index.js +1 -1
  260. package/build-module/components/preview-options/index.js.map +1 -1
  261. package/build-module/components/rich-text/index.js +35 -37
  262. package/build-module/components/rich-text/index.js.map +1 -1
  263. package/build-module/components/rich-text/index.native.js +15 -33
  264. package/build-module/components/rich-text/index.native.js.map +1 -1
  265. package/build-module/components/rich-text/multiline.js +87 -0
  266. package/build-module/components/rich-text/multiline.js.map +1 -0
  267. package/build-module/components/rich-text/split-value.js +10 -16
  268. package/build-module/components/rich-text/split-value.js.map +1 -1
  269. package/build-module/components/rich-text/use-enter.js +33 -42
  270. package/build-module/components/rich-text/use-enter.js.map +1 -1
  271. package/build-module/components/rich-text/use-paste-handler.js +19 -34
  272. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  273. package/build-module/components/spacing-sizes-control/utils.js +2 -2
  274. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  275. package/build-module/components/use-block-commands/index.js +28 -16
  276. package/build-module/components/use-block-commands/index.js.map +1 -1
  277. package/build-module/components/use-block-display-information/index.js +5 -2
  278. package/build-module/components/use-block-display-information/index.js.map +1 -1
  279. package/build-module/hooks/background.js +249 -0
  280. package/build-module/hooks/background.js.map +1 -0
  281. package/build-module/hooks/block-hooks.js +181 -0
  282. package/build-module/hooks/block-hooks.js.map +1 -0
  283. package/build-module/hooks/block-rename-ui.js +154 -0
  284. package/build-module/hooks/block-rename-ui.js.map +1 -0
  285. package/build-module/hooks/duotone.js +26 -39
  286. package/build-module/hooks/duotone.js.map +1 -1
  287. package/build-module/hooks/index.js +2 -2
  288. package/build-module/hooks/index.js.map +1 -1
  289. package/build-module/hooks/layout.js +33 -16
  290. package/build-module/hooks/layout.js.map +1 -1
  291. package/build-module/hooks/position.js +4 -2
  292. package/build-module/hooks/position.js.map +1 -1
  293. package/build-module/hooks/style.js +10 -3
  294. package/build-module/hooks/style.js.map +1 -1
  295. package/build-module/private-apis.js +2 -0
  296. package/build-module/private-apis.js.map +1 -1
  297. package/build-module/store/actions.js +33 -10
  298. package/build-module/store/actions.js.map +1 -1
  299. package/build-module/store/private-actions.js +39 -8
  300. package/build-module/store/private-actions.js.map +1 -1
  301. package/build-module/store/private-selectors.js +23 -3
  302. package/build-module/store/private-selectors.js.map +1 -1
  303. package/build-module/store/reducer.js +41 -1
  304. package/build-module/store/reducer.js.map +1 -1
  305. package/build-module/store/selectors.js +78 -22
  306. package/build-module/store/selectors.js.map +1 -1
  307. package/build-module/store/utils.js +0 -4
  308. package/build-module/store/utils.js.map +1 -1
  309. package/build-style/content-rtl.css +0 -1
  310. package/build-style/content.css +0 -1
  311. package/build-style/style-rtl.css +201 -131
  312. package/build-style/style.css +201 -131
  313. package/package.json +32 -32
  314. package/src/components/block-canvas/index.js +108 -0
  315. package/src/components/block-inspector/index.js +5 -1
  316. package/src/components/block-list/content.scss +0 -1
  317. package/src/components/block-patterns-list/index.js +53 -19
  318. package/src/components/block-patterns-list/style.scss +26 -9
  319. package/src/components/block-patterns-paging/index.js +92 -0
  320. package/src/components/block-patterns-paging/style.scss +45 -0
  321. package/src/components/block-settings-menu/block-settings-dropdown.js +44 -0
  322. package/src/components/block-settings-menu-controls/index.js +4 -9
  323. package/src/components/block-styles/index.js +1 -0
  324. package/src/components/block-styles/style.scss +3 -3
  325. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -6
  326. package/src/components/block-tools/block-contextual-toolbar.js +16 -5
  327. package/src/components/block-tools/block-selection-button.js +9 -1
  328. package/src/components/block-tools/style.scss +0 -98
  329. package/src/components/border-radius-control/input-controls.js +1 -1
  330. package/src/components/border-radius-control/linked-button.js +8 -11
  331. package/src/components/color-palette/test/__snapshots__/control.js.snap +34 -21
  332. package/src/components/colors/with-colors.js +3 -2
  333. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -35
  334. package/src/components/default-block-appender/index.native.js +26 -3
  335. package/src/components/duotone/utils.js +65 -0
  336. package/src/components/editor-styles/index.js +32 -23
  337. package/src/components/global-styles/hooks.js +4 -112
  338. package/src/components/global-styles/image-settings-panel.js +71 -0
  339. package/src/components/global-styles/index.js +4 -3
  340. package/src/components/global-styles/use-global-styles-output.js +25 -16
  341. package/src/components/global-styles/utils.js +1 -2
  342. package/src/components/iframe/index.js +72 -33
  343. package/src/components/image-editor/use-save-image.js +2 -9
  344. package/src/components/image-editor/use-transform-image.js +9 -9
  345. package/src/components/index.js +1 -1
  346. package/src/components/index.native.js +2 -2
  347. package/src/components/inner-blocks/use-nested-settings-update.js +15 -10
  348. package/src/components/inserter/block-patterns-explorer/explorer.js +17 -5
  349. package/src/components/inserter/block-patterns-explorer/patterns-list.js +68 -43
  350. package/src/components/inserter/block-patterns-explorer/sidebar.js +8 -8
  351. package/src/components/inserter/block-patterns-filter.js +183 -0
  352. package/src/components/inserter/block-patterns-tab.js +217 -58
  353. package/src/components/inserter/hooks/use-patterns-paging.js +76 -0
  354. package/src/components/inserter/hooks/use-patterns-state.js +27 -16
  355. package/src/components/inserter/menu.js +15 -17
  356. package/src/components/inserter/search-results.js +6 -4
  357. package/src/components/inserter/style.scss +36 -7
  358. package/src/components/inserter/tabs.js +2 -12
  359. package/src/components/inserter/test/index.native.js +8 -12
  360. package/src/components/inspector-controls/block-support-slot-container.js +19 -3
  361. package/src/components/inspector-controls/fill.js +28 -14
  362. package/src/components/inspector-controls/groups.js +6 -2
  363. package/src/components/inspector-controls/slot.js +28 -3
  364. package/src/components/inspector-controls-tabs/styles-tab.js +4 -0
  365. package/src/components/link-control/index.js +13 -0
  366. package/src/components/link-control/style.scss +23 -2
  367. package/src/components/link-control/test/index.js +88 -6
  368. package/src/components/list-view/block-select-button.js +1 -3
  369. package/src/components/list-view/block.js +19 -1
  370. package/src/components/list-view/style.scss +1 -2
  371. package/src/components/list-view/use-block-selection.js +38 -32
  372. package/src/components/media-placeholder/README.md +2 -2
  373. package/src/components/media-placeholder/index.js +2 -2
  374. package/src/components/media-placeholder/index.native.js +11 -12
  375. package/src/components/media-replace-flow/index.js +2 -2
  376. package/src/components/media-replace-flow/test/index.js +5 -23
  377. package/src/components/media-upload/README.md +3 -2
  378. package/src/components/media-upload/constants.js +15 -0
  379. package/src/components/media-upload/index.native.js +66 -40
  380. package/src/components/media-upload/style.native.scss +4 -0
  381. package/src/components/media-upload/test/index.native.js +2 -2
  382. package/src/components/preview-options/README.md +7 -0
  383. package/src/components/preview-options/index.js +1 -1
  384. package/src/components/rich-text/index.js +48 -44
  385. package/src/components/rich-text/index.native.js +14 -42
  386. package/src/components/rich-text/multiline.js +121 -0
  387. package/src/components/rich-text/split-value.js +10 -35
  388. package/src/components/rich-text/use-enter.js +32 -42
  389. package/src/components/rich-text/use-paste-handler.js +16 -40
  390. package/src/components/spacing-sizes-control/style.scss +5 -7
  391. package/src/components/spacing-sizes-control/utils.js +1 -2
  392. package/src/components/use-block-commands/index.js +28 -20
  393. package/src/components/use-block-display-information/index.js +3 -0
  394. package/src/hooks/background.js +299 -0
  395. package/src/hooks/background.scss +75 -0
  396. package/src/hooks/block-hooks.js +257 -0
  397. package/src/hooks/block-hooks.scss +16 -0
  398. package/src/hooks/block-rename-ui.js +231 -0
  399. package/src/hooks/block-rename-ui.scss +3 -0
  400. package/src/hooks/duotone.js +42 -43
  401. package/src/hooks/index.js +2 -2
  402. package/src/hooks/layout.js +31 -33
  403. package/src/hooks/position.js +4 -3
  404. package/src/hooks/style.js +11 -2
  405. package/src/hooks/test/align.native.js +4 -3
  406. package/src/private-apis.js +2 -0
  407. package/src/store/actions.js +52 -10
  408. package/src/store/private-actions.js +37 -6
  409. package/src/store/private-selectors.js +28 -3
  410. package/src/store/reducer.js +38 -0
  411. package/src/store/selectors.js +107 -26
  412. package/src/store/test/actions.js +19 -8
  413. package/src/store/test/private-actions.js +17 -0
  414. package/src/store/test/reducer.js +25 -0
  415. package/src/store/test/selectors.js +130 -123
  416. package/src/store/utils.js +3 -10
  417. package/src/style.scss +4 -0
  418. package/build/components/duotone/components.js +0 -135
  419. package/build/components/duotone/components.js.map +0 -1
  420. package/build/components/duotone/index.js +0 -38
  421. package/build/components/duotone/index.js.map +0 -1
  422. package/build/components/global-styles/behaviors-panel.js +0 -64
  423. package/build/components/global-styles/behaviors-panel.js.map +0 -1
  424. package/build/components/inserter/reusable-blocks-tab.js +0 -85
  425. package/build/components/inserter/reusable-blocks-tab.js.map +0 -1
  426. package/build/hooks/auto-inserting-blocks.js +0 -174
  427. package/build/hooks/auto-inserting-blocks.js.map +0 -1
  428. package/build/hooks/behaviors.js +0 -173
  429. package/build/hooks/behaviors.js.map +0 -1
  430. package/build-module/components/duotone/components.js +0 -126
  431. package/build-module/components/duotone/components.js.map +0 -1
  432. package/build-module/components/duotone/index.js +0 -3
  433. package/build-module/components/duotone/index.js.map +0 -1
  434. package/build-module/components/global-styles/behaviors-panel.js +0 -57
  435. package/build-module/components/global-styles/behaviors-panel.js.map +0 -1
  436. package/build-module/components/inserter/reusable-blocks-tab.js +0 -76
  437. package/build-module/components/inserter/reusable-blocks-tab.js.map +0 -1
  438. package/build-module/hooks/auto-inserting-blocks.js +0 -167
  439. package/build-module/hooks/auto-inserting-blocks.js.map +0 -1
  440. package/build-module/hooks/behaviors.js +0 -166
  441. package/build-module/hooks/behaviors.js.map +0 -1
  442. package/src/components/duotone/components.js +0 -133
  443. package/src/components/duotone/index.js +0 -7
  444. package/src/components/global-styles/behaviors-panel.js +0 -71
  445. package/src/components/inserter/reusable-blocks-tab.js +0 -84
  446. package/src/components/inserter/test/reusable-blocks-tab.js +0 -73
  447. package/src/hooks/auto-inserting-blocks.js +0 -232
  448. package/src/hooks/behaviors.js +0 -206
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_element","require","_components","_i18n","_icons","_blockPatternsTab","PATTERN_TYPES","all","synced","unsynced","user","theme","directory","exports","SYNC_TYPES","full","getShouldDisableSyncFilter","sourceFilter","getShouldDisableNonUserSources","category","name","myPatternsCategory","BlockPatternsSyncFilter","setPatternSyncFilter","setPatternSourceFilter","patternSyncFilter","patternSourceFilter","scrollContainerRef","currentPatternSourceFilter","shouldDisableSyncFilter","shouldDisableNonUserSources","patternSyncMenuOptions","useMemo","value","label","__","info","disabled","patternSourceMenuOptions","handleSetSourceFilterChange","newSourceFilter","createElement","Fragment","DropdownMenu","popoverProps","placement","icon","Icon","SVG","width","height","viewBox","fill","xmlns","Path","d","MenuGroup","MenuItemsChoice","choices","onSelect","current","scrollTo"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-filter.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tSVG,\n\tPath,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItemsChoice,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { Icon } from '@wordpress/icons';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { myPatternsCategory } from './block-patterns-tab';\n\nexport const PATTERN_TYPES = {\n\tall: 'all',\n\tsynced: 'synced',\n\tunsynced: 'unsynced',\n\tuser: 'user',\n\ttheme: 'theme',\n\tdirectory: 'directory',\n};\n\nexport const SYNC_TYPES = {\n\tall: 'all',\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\nconst getShouldDisableSyncFilter = ( sourceFilter ) =>\n\tsourceFilter !== PATTERN_TYPES.all && sourceFilter !== PATTERN_TYPES.user;\n\nconst getShouldDisableNonUserSources = ( category ) => {\n\treturn category.name === myPatternsCategory.name;\n};\n\nexport function BlockPatternsSyncFilter( {\n\tsetPatternSyncFilter,\n\tsetPatternSourceFilter,\n\tpatternSyncFilter,\n\tpatternSourceFilter,\n\tscrollContainerRef,\n\tcategory,\n} ) {\n\t// If the category is `myPatterns` then we need to set the source filter to `user`, but\n\t// we do this by deriving from props rather than calling setPatternSourceFilter otherwise\n\t// the user may be confused when switching to another category if the haven't explicity set\n\t// this filter themselves.\n\tconst currentPatternSourceFilter =\n\t\tcategory.name === myPatternsCategory.name\n\t\t\t? PATTERN_TYPES.user\n\t\t\t: patternSourceFilter;\n\n\t// We need to disable the sync filter option if the source filter is not 'all' or 'user'\n\t// otherwise applying them will just result in no patterns being shown.\n\tconst shouldDisableSyncFilter = getShouldDisableSyncFilter(\n\t\tcurrentPatternSourceFilter\n\t);\n\n\t// We also need to disable the directory and theme source filter options if the category\n\t// is `myPatterns` otherwise applying them will also just result in no patterns being shown.\n\tconst shouldDisableNonUserSources =\n\t\tgetShouldDisableNonUserSources( category );\n\n\tconst patternSyncMenuOptions = useMemo(\n\t\t() => [\n\t\t\t{ value: SYNC_TYPES.all, label: __( 'All' ) },\n\t\t\t{\n\t\t\t\tvalue: SYNC_TYPES.full,\n\t\t\t\tlabel: __( 'Synced' ),\n\t\t\t\tinfo: __( 'Updated everywhere' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: SYNC_TYPES.unsynced,\n\t\t\t\tlabel: __( 'Standard' ),\n\t\t\t\tinfo: __( 'Edit freely' ),\n\t\t\t\tdisabled: shouldDisableSyncFilter,\n\t\t\t},\n\t\t],\n\t\t[ shouldDisableSyncFilter ]\n\t);\n\n\tconst patternSourceMenuOptions = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.all,\n\t\t\t\tlabel: __( 'All' ),\n\t\t\t\tdisabled: shouldDisableNonUserSources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.directory,\n\t\t\t\tlabel: __( 'Directory' ),\n\t\t\t\tinfo: __( 'Pattern directory & core' ),\n\t\t\t\tdisabled: shouldDisableNonUserSources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.theme,\n\t\t\t\tlabel: __( 'Theme' ),\n\t\t\t\tinfo: __( 'Bundled with the theme' ),\n\t\t\t\tdisabled: shouldDisableNonUserSources,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: PATTERN_TYPES.user,\n\t\t\t\tlabel: __( 'User' ),\n\t\t\t\tinfo: __( 'Custom created' ),\n\t\t\t},\n\t\t],\n\t\t[ shouldDisableNonUserSources ]\n\t);\n\n\tfunction handleSetSourceFilterChange( newSourceFilter ) {\n\t\tsetPatternSourceFilter( newSourceFilter );\n\t\tif ( getShouldDisableSyncFilter( newSourceFilter ) ) {\n\t\t\tsetPatternSyncFilter( SYNC_TYPES.all );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DropdownMenu\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tplacement: 'right-end',\n\t\t\t\t} }\n\t\t\t\tlabel=\"Filter patterns\"\n\t\t\t\ticon={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t<SVG\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\td=\"M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z\"\n\t\t\t\t\t\t\t\t\tfill=\"#1E1E1E\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</SVG>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ () => (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<MenuGroup label={ __( 'Author' ) }>\n\t\t\t\t\t\t\t<MenuItemsChoice\n\t\t\t\t\t\t\t\tchoices={ patternSourceMenuOptions }\n\t\t\t\t\t\t\t\tonSelect={ ( value ) => {\n\t\t\t\t\t\t\t\t\thandleSetSourceFilterChange( value );\n\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\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\tvalue={ currentPatternSourceFilter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t<MenuGroup label={ __( 'Type' ) }>\n\t\t\t\t\t\t\t<MenuItemsChoice\n\t\t\t\t\t\t\t\tchoices={ patternSyncMenuOptions }\n\t\t\t\t\t\t\t\tonSelect={ ( value ) => {\n\t\t\t\t\t\t\t\t\tsetPatternSyncFilter( value );\n\t\t\t\t\t\t\t\t\tscrollContainerRef.current?.scrollTo(\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0\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\tvalue={ patternSyncFilter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</DropdownMenu>\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
@@ -6,17 +6,23 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.BlockPatternsCategoryDialog = BlockPatternsCategoryDialog;
8
8
  exports.BlockPatternsCategoryPanel = BlockPatternsCategoryPanel;
9
- exports.default = void 0;
9
+ exports.default = exports.allPatternsCategory = void 0;
10
+ exports.isPatternFiltered = isPatternFiltered;
11
+ exports.myPatternsCategory = void 0;
12
+ exports.usePatternsCategories = usePatternsCategories;
10
13
  var _element = require("@wordpress/element");
11
14
  var _i18n = require("@wordpress/i18n");
12
15
  var _compose = require("@wordpress/compose");
13
16
  var _components = require("@wordpress/components");
14
17
  var _icons = require("@wordpress/icons");
15
18
  var _dom = require("@wordpress/dom");
19
+ var _a11y = require("@wordpress/a11y");
16
20
  var _usePatternsState = _interopRequireDefault(require("./hooks/use-patterns-state"));
17
21
  var _blockPatternsList = _interopRequireDefault(require("../block-patterns-list"));
18
22
  var _explorer = _interopRequireDefault(require("./block-patterns-explorer/explorer"));
19
23
  var _mobileTabNavigation = _interopRequireDefault(require("./mobile-tab-navigation"));
24
+ var _usePatternsPaging = _interopRequireDefault(require("./hooks/use-patterns-paging"));
25
+ var _blockPatternsFilter = require("./block-patterns-filter");
20
26
  /**
21
27
  * WordPress dependencies
22
28
  */
@@ -26,12 +32,50 @@ var _mobileTabNavigation = _interopRequireDefault(require("./mobile-tab-navigati
26
32
  */
27
33
 
28
34
  const noop = () => {};
35
+ const allPatternsCategory = {
36
+ name: 'allPatterns',
37
+ label: (0, _i18n.__)('All Patterns')
38
+ };
39
+ exports.allPatternsCategory = allPatternsCategory;
40
+ const myPatternsCategory = {
41
+ name: 'myPatterns',
42
+ label: (0, _i18n.__)('My patterns')
43
+ };
44
+ exports.myPatternsCategory = myPatternsCategory;
45
+ function isPatternFiltered(pattern, sourceFilter, syncFilter) {
46
+ const isUserPattern = pattern.name.startsWith('core/block');
47
+ const isDirectoryPattern = pattern.source === 'core' || pattern.source?.startsWith('pattern-directory');
29
48
 
30
- // Preferred order of pattern categories. Any other categories should
31
- // be at the bottom without any re-ordering.
32
- const patternCategoriesOrder = ['custom', 'featured', 'posts', 'text', 'gallery', 'call-to-action', 'banner', 'header', 'footer'];
33
- function usePatternsCategories(rootClientId) {
34
- const [allPatterns, allCategories] = (0, _usePatternsState.default)(undefined, rootClientId);
49
+ // If theme source selected, filter out user created patterns and those from
50
+ // the core patterns directory.
51
+ if (sourceFilter === _blockPatternsFilter.PATTERN_TYPES.theme && (isUserPattern || isDirectoryPattern)) {
52
+ return true;
53
+ }
54
+
55
+ // If the directory source is selected, filter out user created patterns
56
+ // and those bundled with the theme.
57
+ if (sourceFilter === _blockPatternsFilter.PATTERN_TYPES.directory && (isUserPattern || !isDirectoryPattern)) {
58
+ return true;
59
+ }
60
+
61
+ // If user source selected, filter out theme patterns. Any pattern without
62
+ // an id wasn't created by a user.
63
+ if (sourceFilter === _blockPatternsFilter.PATTERN_TYPES.user && !pattern.id) {
64
+ return true;
65
+ }
66
+
67
+ // Filter by sync status.
68
+ if (syncFilter === _blockPatternsFilter.SYNC_TYPES.full && pattern.syncStatus !== '') {
69
+ return true;
70
+ }
71
+ if (syncFilter === _blockPatternsFilter.SYNC_TYPES.unsynced && pattern.syncStatus !== 'unsynced' && isUserPattern) {
72
+ return true;
73
+ }
74
+ return false;
75
+ }
76
+ function usePatternsCategories(rootClientId, sourceFilter = 'all') {
77
+ const [patterns, allCategories] = (0, _usePatternsState.default)(undefined, rootClientId);
78
+ const filteredPatterns = (0, _element.useMemo)(() => sourceFilter === 'all' ? patterns : patterns.filter(pattern => !isPatternFiltered(pattern, sourceFilter)), [sourceFilter, patterns]);
35
79
  const hasRegisteredCategory = (0, _element.useCallback)(pattern => {
36
80
  if (!pattern.categories || !pattern.categories.length) {
37
81
  return false;
@@ -41,27 +85,26 @@ function usePatternsCategories(rootClientId) {
41
85
 
42
86
  // Remove any empty categories.
43
87
  const populatedCategories = (0, _element.useMemo)(() => {
44
- const categories = allCategories.filter(category => allPatterns.some(pattern => pattern.categories?.includes(category.name))).sort(({
45
- name: aName
46
- }, {
47
- name: bName
48
- }) => {
49
- // Sort categories according to `patternCategoriesOrder`.
50
- let aIndex = patternCategoriesOrder.indexOf(aName);
51
- let bIndex = patternCategoriesOrder.indexOf(bName);
52
- // All other categories should come after that.
53
- if (aIndex < 0) aIndex = patternCategoriesOrder.length;
54
- if (bIndex < 0) bIndex = patternCategoriesOrder.length;
55
- return aIndex - bIndex;
56
- });
57
- if (allPatterns.some(pattern => !hasRegisteredCategory(pattern)) && !categories.find(category => category.name === 'uncategorized')) {
88
+ const categories = allCategories.filter(category => filteredPatterns.some(pattern => pattern.categories?.includes(category.name))).sort((a, b) => a.label.localeCompare(b.label));
89
+ if (filteredPatterns.some(pattern => !hasRegisteredCategory(pattern)) && !categories.find(category => category.name === 'uncategorized')) {
58
90
  categories.push({
59
91
  name: 'uncategorized',
60
92
  label: (0, _i18n._x)('Uncategorized')
61
93
  });
62
94
  }
95
+ if (filteredPatterns.some(pattern => pattern.id)) {
96
+ categories.unshift(myPatternsCategory);
97
+ }
98
+ if (filteredPatterns.length > 0) {
99
+ categories.unshift({
100
+ name: allPatternsCategory.name,
101
+ label: allPatternsCategory.label
102
+ });
103
+ }
104
+ (0, _a11y.speak)((0, _i18n.sprintf)( /* translators: %d: number of categories . */
105
+ (0, _i18n._n)('%d category button displayed.', '%d category buttons displayed.', categories.length), categories.length));
63
106
  return categories;
64
- }, [allCategories, allPatterns, hasRegisteredCategory]);
107
+ }, [allCategories, filteredPatterns, hasRegisteredCategory]);
65
108
  return populatedCategories;
66
109
  }
67
110
  function BlockPatternsCategoryDialog({
@@ -69,7 +112,8 @@ function BlockPatternsCategoryDialog({
69
112
  onInsert,
70
113
  onHover,
71
114
  category,
72
- showTitlesAsTooltip
115
+ showTitlesAsTooltip,
116
+ patternFilter
73
117
  }) {
74
118
  const container = (0, _element.useRef)();
75
119
  (0, _element.useEffect)(() => {
@@ -83,11 +127,13 @@ function BlockPatternsCategoryDialog({
83
127
  ref: container,
84
128
  className: "block-editor-inserter__patterns-category-dialog"
85
129
  }, (0, _element.createElement)(BlockPatternsCategoryPanel, {
130
+ key: category.name,
86
131
  rootClientId: rootClientId,
87
132
  onInsert: onInsert,
88
133
  onHover: onHover,
89
134
  category: category,
90
- showTitlesAsTooltip: showTitlesAsTooltip
135
+ showTitlesAsTooltip: showTitlesAsTooltip,
136
+ patternFilter: patternFilter
91
137
  }));
92
138
  }
93
139
  function BlockPatternsCategoryPanel({
@@ -97,10 +143,22 @@ function BlockPatternsCategoryPanel({
97
143
  category,
98
144
  showTitlesAsTooltip
99
145
  }) {
100
- const [allPatterns,, onClick] = (0, _usePatternsState.default)(onInsert, rootClientId);
101
- const availableCategories = usePatternsCategories(rootClientId);
146
+ const [allPatterns,, onClickPattern] = (0, _usePatternsState.default)(onInsert, rootClientId);
147
+ const [patternSyncFilter, setPatternSyncFilter] = (0, _element.useState)('all');
148
+ const [patternSourceFilter, setPatternSourceFilter] = (0, _element.useState)('all');
149
+ const availableCategories = usePatternsCategories(rootClientId, patternSourceFilter);
150
+ const scrollContainerRef = (0, _element.useRef)();
102
151
  const currentCategoryPatterns = (0, _element.useMemo)(() => allPatterns.filter(pattern => {
103
152
  var _pattern$categories$f;
153
+ if (isPatternFiltered(pattern, patternSourceFilter, patternSyncFilter)) {
154
+ return false;
155
+ }
156
+ if (category.name === allPatternsCategory.name) {
157
+ return true;
158
+ }
159
+ if (category.name === myPatternsCategory.name && pattern.id) {
160
+ return true;
161
+ }
104
162
  if (category.name !== 'uncategorized') {
105
163
  return pattern.categories?.includes(category.name);
106
164
  }
@@ -109,28 +167,54 @@ function BlockPatternsCategoryPanel({
109
167
  // or with no available category.
110
168
  const availablePatternCategories = (_pattern$categories$f = pattern.categories?.filter(cat => availableCategories.find(availableCategory => availableCategory.name === cat))) !== null && _pattern$categories$f !== void 0 ? _pattern$categories$f : [];
111
169
  return availablePatternCategories.length === 0;
112
- }), [allPatterns, availableCategories, category.name]);
113
- const categoryPatternsList = (0, _compose.useAsyncList)(currentCategoryPatterns);
170
+ }), [allPatterns, availableCategories, category.name, patternSourceFilter, patternSyncFilter]);
171
+ const pagingProps = (0, _usePatternsPaging.default)(currentCategoryPatterns, category, scrollContainerRef);
172
+ const {
173
+ changePage
174
+ } = pagingProps;
114
175
 
115
176
  // Hide block pattern preview on unmount.
177
+ // eslint-disable-next-line react-hooks/exhaustive-deps
116
178
  (0, _element.useEffect)(() => () => onHover(null), []);
117
- if (!currentCategoryPatterns.length) {
118
- return null;
119
- }
179
+ const onSetPatternSyncFilter = (0, _element.useCallback)(value => {
180
+ setPatternSyncFilter(value);
181
+ changePage(1);
182
+ }, [setPatternSyncFilter, changePage]);
183
+ const onSetPatternSourceFilter = (0, _element.useCallback)(value => {
184
+ setPatternSourceFilter(value);
185
+ changePage(1);
186
+ }, [setPatternSourceFilter, changePage]);
120
187
  return (0, _element.createElement)("div", {
121
188
  className: "block-editor-inserter__patterns-category-panel"
122
- }, (0, _element.createElement)("div", {
123
- className: "block-editor-inserter__patterns-category-panel-title"
124
- }, category.label), (0, _element.createElement)("p", null, category.description), (0, _element.createElement)(_blockPatternsList.default, {
125
- shownPatterns: categoryPatternsList,
126
- blockPatterns: currentCategoryPatterns,
127
- onClickPattern: onClick,
189
+ }, (0, _element.createElement)(_components.__experimentalVStack, {
190
+ spacing: 2,
191
+ className: "block-editor-inserter__patterns-category-panel-header"
192
+ }, (0, _element.createElement)(_components.__experimentalHStack, null, (0, _element.createElement)(_components.FlexBlock, null, (0, _element.createElement)(_components.__experimentalHeading, {
193
+ level: 4,
194
+ as: "div"
195
+ }, category.label)), (0, _element.createElement)(_blockPatternsFilter.BlockPatternsSyncFilter, {
196
+ patternSyncFilter: patternSyncFilter,
197
+ patternSourceFilter: patternSourceFilter,
198
+ setPatternSyncFilter: onSetPatternSyncFilter,
199
+ setPatternSourceFilter: onSetPatternSourceFilter,
200
+ scrollContainerRef: scrollContainerRef,
201
+ category: category
202
+ })), category.description && (0, _element.createElement)(_components.__experimentalText, null, category.description), !currentCategoryPatterns.length && (0, _element.createElement)(_components.__experimentalText, {
203
+ variant: "muted",
204
+ className: "block-editor-inserter__patterns-category-no-results"
205
+ }, (0, _i18n.__)('No results found'))), currentCategoryPatterns.length > 0 && (0, _element.createElement)(_blockPatternsList.default, {
206
+ ref: scrollContainerRef,
207
+ shownPatterns: pagingProps.categoryPatternsAsyncList,
208
+ blockPatterns: pagingProps.categoryPatterns,
209
+ onClickPattern: onClickPattern,
128
210
  onHover: onHover,
129
211
  label: category.label,
130
212
  orientation: "vertical",
131
- category: category.label,
213
+ category: category.name,
132
214
  isDraggable: true,
133
- showTitlesAsTooltip: showTitlesAsTooltip
215
+ showTitlesAsTooltip: showTitlesAsTooltip,
216
+ patternFilter: patternSourceFilter,
217
+ pagingProps: pagingProps
134
218
  }));
135
219
  }
136
220
  function BlockPatternsTabs({
@@ -146,10 +230,10 @@ function BlockPatternsTabs({
146
230
  return (0, _element.createElement)(_element.Fragment, null, !isMobile && (0, _element.createElement)("div", {
147
231
  className: "block-editor-inserter__block-patterns-tabs-container"
148
232
  }, (0, _element.createElement)("nav", {
149
- "aria-label": (0, _i18n.__)('Block pattern categories')
150
- }, (0, _element.createElement)(_components.__experimentalItemGroup, {
151
- role: "list",
233
+ "aria-label": (0, _i18n.__)('Block pattern categories'),
152
234
  className: "block-editor-inserter__block-patterns-tabs"
235
+ }, (0, _element.createElement)(_components.__experimentalItemGroup, {
236
+ role: "list"
153
237
  }, categories.map(category => (0, _element.createElement)(_components.__experimentalItem, {
154
238
  role: "listitem",
155
239
  key: category.name,
@@ -168,6 +252,7 @@ function BlockPatternsTabs({
168
252
  }, (0, _i18n.__)('Explore all patterns')))))), isMobile && (0, _element.createElement)(_mobileTabNavigation.default, {
169
253
  categories: categories
170
254
  }, category => (0, _element.createElement)(BlockPatternsCategoryPanel, {
255
+ key: category.name,
171
256
  onInsert: onInsert,
172
257
  rootClientId: rootClientId,
173
258
  category: category,
@@ -175,7 +260,8 @@ function BlockPatternsTabs({
175
260
  })), showPatternsExplorer && (0, _element.createElement)(_explorer.default, {
176
261
  initialCategory: initialCategory,
177
262
  patternCategories: categories,
178
- onModalClose: () => setShowPatternsExplorer(false)
263
+ onModalClose: () => setShowPatternsExplorer(false),
264
+ rootClientId: rootClientId
179
265
  }));
180
266
  }
181
267
  var _default = BlockPatternsTabs;
@@ -1 +1 @@
1
- {"version":3,"names":["_element","require","_i18n","_compose","_components","_icons","_dom","_usePatternsState","_interopRequireDefault","_blockPatternsList","_explorer","_mobileTabNavigation","noop","patternCategoriesOrder","usePatternsCategories","rootClientId","allPatterns","allCategories","usePatternsState","undefined","hasRegisteredCategory","useCallback","pattern","categories","length","some","cat","category","name","populatedCategories","useMemo","filter","includes","sort","aName","bName","aIndex","indexOf","bIndex","find","push","label","_x","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","container","useRef","useEffect","timeout","setTimeout","firstTabbable","focus","tabbable","current","clearTimeout","createElement","ref","className","BlockPatternsCategoryPanel","onClick","availableCategories","currentCategoryPatterns","_pattern$categories$f","availablePatternCategories","availableCategory","categoryPatternsList","useAsyncList","description","default","shownPatterns","blockPatterns","onClickPattern","orientation","isDraggable","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","useState","initialCategory","isMobile","useViewportMatch","Fragment","__","__experimentalItemGroup","role","map","__experimentalItem","key","__experimentalHStack","FlexBlock","Icon","icon","isRTL","chevronLeft","chevronRight","Button","variant","patternCategories","onModalClose","_default","exports"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"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"],"mappings":";;;;;;;;;AAGA,IAAAA,QAAA,GAAAC,OAAA;AAOA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAOA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AAKA,IAAAM,iBAAA,GAAAC,sBAAA,CAAAP,OAAA;AACA,IAAAQ,kBAAA,GAAAD,sBAAA,CAAAP,OAAA;AACA,IAAAS,SAAA,GAAAF,sBAAA,CAAAP,OAAA;AACA,IAAAU,oBAAA,GAAAH,sBAAA,CAAAP,OAAA;AA5BA;AACA;AACA;;AAoBA;AACA;AACA;;AAMA,MAAMW,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;;AAErB;AACA;AACA,MAAMC,sBAAsB,GAAG,CAC9B,QAAQ,EACR,UAAU,EACV,OAAO,EACP,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,QAAQ,CACR;AAED,SAASC,qBAAqBA,CAAEC,YAAY,EAAG;EAC9C,MAAM,CAAEC,WAAW,EAAEC,aAAa,CAAE,GAAG,IAAAC,yBAAgB,EACtDC,SAAS,EACTJ,YACD,CAAC;EAED,MAAMK,qBAAqB,GAAG,IAAAC,oBAAW,EACtCC,OAAO,IAAM;IACd,IAAK,CAAEA,OAAO,CAACC,UAAU,IAAI,CAAED,OAAO,CAACC,UAAU,CAACC,MAAM,EAAG;MAC1D,OAAO,KAAK;IACb;IAEA,OAAOF,OAAO,CAACC,UAAU,CAACE,IAAI,CAAIC,GAAG,IACpCT,aAAa,CAACQ,IAAI,CAAIE,QAAQ,IAAMA,QAAQ,CAACC,IAAI,KAAKF,GAAI,CAC3D,CAAC;EACF,CAAC,EACD,CAAET,aAAa,CAChB,CAAC;;EAED;EACA,MAAMY,mBAAmB,GAAG,IAAAC,gBAAO,EAAE,MAAM;IAC1C,MAAMP,UAAU,GAAGN,aAAa,CAC9Bc,MAAM,CAAIJ,QAAQ,IAClBX,WAAW,CAACS,IAAI,CAAIH,OAAO,IAC1BA,OAAO,CAACC,UAAU,EAAES,QAAQ,CAAEL,QAAQ,CAACC,IAAK,CAC7C,CACD,CAAC,CACAK,IAAI,CAAE,CAAE;MAAEL,IAAI,EAAEM;IAAM,CAAC,EAAE;MAAEN,IAAI,EAAEO;IAAM,CAAC,KAAM;MAC9C;MACA,IAAIC,MAAM,GAAGvB,sBAAsB,CAACwB,OAAO,CAAEH,KAAM,CAAC;MACpD,IAAII,MAAM,GAAGzB,sBAAsB,CAACwB,OAAO,CAAEF,KAAM,CAAC;MACpD;MACA,IAAKC,MAAM,GAAG,CAAC,EAAGA,MAAM,GAAGvB,sBAAsB,CAACW,MAAM;MACxD,IAAKc,MAAM,GAAG,CAAC,EAAGA,MAAM,GAAGzB,sBAAsB,CAACW,MAAM;MACxD,OAAOY,MAAM,GAAGE,MAAM;IACvB,CAAE,CAAC;IAEJ,IACCtB,WAAW,CAACS,IAAI,CACbH,OAAO,IAAM,CAAEF,qBAAqB,CAAEE,OAAQ,CACjD,CAAC,IACD,CAAEC,UAAU,CAACgB,IAAI,CACdZ,QAAQ,IAAMA,QAAQ,CAACC,IAAI,KAAK,eACnC,CAAC,EACA;MACDL,UAAU,CAACiB,IAAI,CAAE;QAChBZ,IAAI,EAAE,eAAe;QACrBa,KAAK,EAAE,IAAAC,QAAE,EAAE,eAAgB;MAC5B,CAAE,CAAC;IACJ;IAEA,OAAOnB,UAAU;EAClB,CAAC,EAAE,CAAEN,aAAa,EAAED,WAAW,EAAEI,qBAAqB,CAAG,CAAC;EAE1D,OAAOS,mBAAmB;AAC3B;AAEO,SAASc,2BAA2BA,CAAE;EAC5C5B,YAAY;EACZ6B,QAAQ;EACRC,OAAO;EACPlB,QAAQ;EACRmB;AACD,CAAC,EAAG;EACH,MAAMC,SAAS,GAAG,IAAAC,eAAM,EAAC,CAAC;EAE1B,IAAAC,kBAAS,EAAE,MAAM;IAChB,MAAMC,OAAO,GAAGC,UAAU,CAAE,MAAM;MACjC,MAAM,CAAEC,aAAa,CAAE,GAAGC,UAAK,CAACC,QAAQ,CAACf,IAAI,CAAEQ,SAAS,CAACQ,OAAQ,CAAC;MAClEH,aAAa,EAAEC,KAAK,CAAC,CAAC;IACvB,CAAE,CAAC;IACH,OAAO,MAAMG,YAAY,CAAEN,OAAQ,CAAC;EACrC,CAAC,EAAE,CAAEvB,QAAQ,CAAG,CAAC;EAEjB,OACC,IAAA3B,QAAA,CAAAyD,aAAA;IACCC,GAAG,EAAGX,SAAW;IACjBY,SAAS,EAAC;EAAiD,GAE3D,IAAA3D,QAAA,CAAAyD,aAAA,EAACG,0BAA0B;IAC1B7C,YAAY,EAAGA,YAAc;IAC7B6B,QAAQ,EAAGA,QAAU;IACrBC,OAAO,EAAGA,OAAS;IACnBlB,QAAQ,EAAGA,QAAU;IACrBmB,mBAAmB,EAAGA;EAAqB,CAC3C,CACG,CAAC;AAER;AAEO,SAASc,0BAA0BA,CAAE;EAC3C7C,YAAY;EACZ6B,QAAQ;EACRC,OAAO,GAAGjC,IAAI;EACde,QAAQ;EACRmB;AACD,CAAC,EAAG;EACH,MAAM,CAAE9B,WAAW,GAAI6C,OAAO,CAAE,GAAG,IAAA3C,yBAAgB,EAClD0B,QAAQ,EACR7B,YACD,CAAC;EAED,MAAM+C,mBAAmB,GAAGhD,qBAAqB,CAAEC,YAAa,CAAC;EACjE,MAAMgD,uBAAuB,GAAG,IAAAjC,gBAAO,EACtC,MACCd,WAAW,CAACe,MAAM,CAAIT,OAAO,IAAM;IAAA,IAAA0C,qBAAA;IAClC,IAAKrC,QAAQ,CAACC,IAAI,KAAK,eAAe,EAAG;MACxC,OAAON,OAAO,CAACC,UAAU,EAAES,QAAQ,CAAEL,QAAQ,CAACC,IAAK,CAAC;IACrD;;IAEA;IACA;IACA,MAAMqC,0BAA0B,IAAAD,qBAAA,GAC/B1C,OAAO,CAACC,UAAU,EAAEQ,MAAM,CAAIL,GAAG,IAChCoC,mBAAmB,CAACvB,IAAI,CACrB2B,iBAAiB,IAClBA,iBAAiB,CAACtC,IAAI,KAAKF,GAC7B,CACD,CAAC,cAAAsC,qBAAA,cAAAA,qBAAA,GAAI,EAAE;IAER,OAAOC,0BAA0B,CAACzC,MAAM,KAAK,CAAC;EAC/C,CAAE,CAAC,EACJ,CAAER,WAAW,EAAE8C,mBAAmB,EAAEnC,QAAQ,CAACC,IAAI,CAClD,CAAC;EAED,MAAMuC,oBAAoB,GAAG,IAAAC,qBAAY,EAAEL,uBAAwB,CAAC;;EAEpE;EACA,IAAAd,kBAAS,EAAE,MAAM,MAAMJ,OAAO,CAAE,IAAK,CAAC,EAAE,EAAG,CAAC;EAE5C,IAAK,CAAEkB,uBAAuB,CAACvC,MAAM,EAAG;IACvC,OAAO,IAAI;EACZ;EAEA,OACC,IAAAxB,QAAA,CAAAyD,aAAA;IAAKE,SAAS,EAAC;EAAgD,GAC9D,IAAA3D,QAAA,CAAAyD,aAAA;IAAKE,SAAS,EAAC;EAAsD,GAClEhC,QAAQ,CAACc,KACP,CAAC,EACN,IAAAzC,QAAA,CAAAyD,aAAA,aAAK9B,QAAQ,CAAC0C,WAAgB,CAAC,EAC/B,IAAArE,QAAA,CAAAyD,aAAA,EAAChD,kBAAA,CAAA6D,OAAgB;IAChBC,aAAa,EAAGJ,oBAAsB;IACtCK,aAAa,EAAGT,uBAAyB;IACzCU,cAAc,EAAGZ,OAAS;IAC1BhB,OAAO,EAAGA,OAAS;IACnBJ,KAAK,EAAGd,QAAQ,CAACc,KAAO;IACxBiC,WAAW,EAAC,UAAU;IACtB/C,QAAQ,EAAGA,QAAQ,CAACc,KAAO;IAC3BkC,WAAW;IACX7B,mBAAmB,EAAGA;EAAqB,CAC3C,CACG,CAAC;AAER;AAEA,SAAS8B,iBAAiBA,CAAE;EAC3BC,gBAAgB;EAChBC,gBAAgB;EAChBlC,QAAQ;EACR7B;AACD,CAAC,EAAG;EACH,MAAM,CAAEgE,oBAAoB,EAAEC,uBAAuB,CAAE,GAAG,IAAAC,iBAAQ,EAAE,KAAM,CAAC;EAC3E,MAAM1D,UAAU,GAAGT,qBAAqB,CAAEC,YAAa,CAAC;EACxD,MAAMmE,eAAe,GAAGJ,gBAAgB,IAAIvD,UAAU,CAAE,CAAC,CAAE;EAC3D,MAAM4D,QAAQ,GAAG,IAAAC,yBAAgB,EAAE,QAAQ,EAAE,GAAI,CAAC;EAClD,OACC,IAAApF,QAAA,CAAAyD,aAAA,EAAAzD,QAAA,CAAAqF,QAAA,QACG,CAAEF,QAAQ,IACX,IAAAnF,QAAA,CAAAyD,aAAA;IAAKE,SAAS,EAAC;EAAsD,GACpE,IAAA3D,QAAA,CAAAyD,aAAA;IAAK,cAAa,IAAA6B,QAAE,EAAE,0BAA2B;EAAG,GACnD,IAAAtF,QAAA,CAAAyD,aAAA,EAACrD,WAAA,CAAAmF,uBAAS;IACTC,IAAI,EAAC,MAAM;IACX7B,SAAS,EAAC;EAA4C,GAEpDpC,UAAU,CAACkE,GAAG,CAAI9D,QAAQ,IAC3B,IAAA3B,QAAA,CAAAyD,aAAA,EAACrD,WAAA,CAAAsF,kBAAI;IACJF,IAAI,EAAC,UAAU;IACfG,GAAG,EAAGhE,QAAQ,CAACC,IAAM;IACrBiC,OAAO,EAAGA,CAAA,KACTgB,gBAAgB,CAAElD,QAAS,CAC3B;IACDgC,SAAS,EACRhC,QAAQ,KAAKmD,gBAAgB,GAC1B,4FAA4F,GAC5F,0CACH;IACD,cAAanD,QAAQ,CAACc,KAAO;IAC7B,gBACCd,QAAQ,KAAKmD,gBAAgB,GAC1B,MAAM,GACN3D;EACH,GAED,IAAAnB,QAAA,CAAAyD,aAAA,EAACrD,WAAA,CAAAwF,oBAAM,QACN,IAAA5F,QAAA,CAAAyD,aAAA,EAACrD,WAAA,CAAAyF,SAAS,QACPlE,QAAQ,CAACc,KACD,CAAC,EACZ,IAAAzC,QAAA,CAAAyD,aAAA,EAACpD,MAAA,CAAAyF,IAAI;IACJC,IAAI,EACH,IAAAC,WAAK,EAAC,CAAC,GACJC,kBAAW,GACXC;EACH,CACD,CACM,CACH,CACL,CAAC,EACH,IAAAlG,QAAA,CAAAyD,aAAA;IAAK+B,IAAI,EAAC;EAAU,GACnB,IAAAxF,QAAA,CAAAyD,aAAA,EAACrD,WAAA,CAAA+F,MAAM;IACNxC,SAAS,EAAC,gDAAgD;IAC1DE,OAAO,EAAGA,CAAA,KACTmB,uBAAuB,CAAE,IAAK,CAC9B;IACDoB,OAAO,EAAC;EAAW,GAEjB,IAAAd,QAAE,EAAE,sBAAuB,CACtB,CACJ,CACK,CACP,CACD,CACL,EACCH,QAAQ,IACT,IAAAnF,QAAA,CAAAyD,aAAA,EAAC9C,oBAAA,CAAA2D,OAAmB;IAAC/C,UAAU,EAAGA;EAAY,GACzCI,QAAQ,IACX,IAAA3B,QAAA,CAAAyD,aAAA,EAACG,0BAA0B;IAC1BhB,QAAQ,EAAGA,QAAU;IACrB7B,YAAY,EAAGA,YAAc;IAC7BY,QAAQ,EAAGA,QAAU;IACrBmB,mBAAmB,EAAG;EAAO,CAC7B,CAEkB,CACrB,EACCiC,oBAAoB,IACrB,IAAA/E,QAAA,CAAAyD,aAAA,EAAC/C,SAAA,CAAA4D,OAAqB;IACrBY,eAAe,EAAGA,eAAiB;IACnCmB,iBAAiB,EAAG9E,UAAY;IAChC+E,YAAY,EAAGA,CAAA,KAAMtB,uBAAuB,CAAE,KAAM;EAAG,CACvD,CAED,CAAC;AAEL;AAAC,IAAAuB,QAAA,GAEc3B,iBAAiB;AAAA4B,OAAA,CAAAlC,OAAA,GAAAiC,QAAA"}
1
+ {"version":3,"names":["_element","require","_i18n","_compose","_components","_icons","_dom","_a11y","_usePatternsState","_interopRequireDefault","_blockPatternsList","_explorer","_mobileTabNavigation","_usePatternsPaging","_blockPatternsFilter","noop","allPatternsCategory","name","label","__","exports","myPatternsCategory","isPatternFiltered","pattern","sourceFilter","syncFilter","isUserPattern","startsWith","isDirectoryPattern","source","PATTERN_TYPES","theme","directory","user","id","SYNC_TYPES","full","syncStatus","unsynced","usePatternsCategories","rootClientId","patterns","allCategories","usePatternsState","undefined","filteredPatterns","useMemo","filter","hasRegisteredCategory","useCallback","categories","length","some","cat","category","populatedCategories","includes","sort","a","b","localeCompare","find","push","_x","unshift","speak","sprintf","_n","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","patternFilter","container","useRef","useEffect","timeout","setTimeout","firstTabbable","focus","tabbable","current","clearTimeout","createElement","ref","className","BlockPatternsCategoryPanel","key","allPatterns","onClickPattern","patternSyncFilter","setPatternSyncFilter","useState","patternSourceFilter","setPatternSourceFilter","availableCategories","scrollContainerRef","currentCategoryPatterns","_pattern$categories$f","availablePatternCategories","availableCategory","pagingProps","usePatternsPaging","changePage","onSetPatternSyncFilter","value","onSetPatternSourceFilter","__experimentalVStack","spacing","__experimentalHStack","FlexBlock","__experimentalHeading","level","as","BlockPatternsSyncFilter","description","__experimentalText","variant","default","shownPatterns","categoryPatternsAsyncList","blockPatterns","categoryPatterns","orientation","isDraggable","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","initialCategory","isMobile","useViewportMatch","Fragment","__experimentalItemGroup","role","map","__experimentalItem","onClick","Icon","icon","isRTL","chevronLeft","chevronRight","Button","patternCategories","onModalClose","_default"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __, _n, isRTL, sprintf } from '@wordpress/i18n';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalText as Text,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight, chevronLeft } from '@wordpress/icons';\nimport { focus } from '@wordpress/dom';\nimport { speak } from '@wordpress/a11y';\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 usePatternsPaging from './hooks/use-patterns-paging';\nimport {\n\tBlockPatternsSyncFilter,\n\tSYNC_TYPES,\n\tPATTERN_TYPES,\n} from './block-patterns-filter';\n\nconst noop = () => {};\n\nexport const allPatternsCategory = {\n\tname: 'allPatterns',\n\tlabel: __( 'All Patterns' ),\n};\n\nexport const myPatternsCategory = {\n\tname: 'myPatterns',\n\tlabel: __( 'My patterns' ),\n};\n\nexport function isPatternFiltered( pattern, sourceFilter, syncFilter ) {\n\tconst isUserPattern = pattern.name.startsWith( 'core/block' );\n\tconst isDirectoryPattern =\n\t\tpattern.source === 'core' ||\n\t\tpattern.source?.startsWith( 'pattern-directory' );\n\n\t// If theme source selected, filter out user created patterns and those from\n\t// the core patterns directory.\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.theme &&\n\t\t( isUserPattern || isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If the directory source is selected, filter out user created patterns\n\t// and those bundled with the theme.\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.directory &&\n\t\t( isUserPattern || ! isDirectoryPattern )\n\t) {\n\t\treturn true;\n\t}\n\n\t// If user source selected, filter out theme patterns. Any pattern without\n\t// an id wasn't created by a user.\n\tif ( sourceFilter === PATTERN_TYPES.user && ! pattern.id ) {\n\t\treturn true;\n\t}\n\n\t// Filter by sync status.\n\tif ( syncFilter === SYNC_TYPES.full && pattern.syncStatus !== '' ) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tsyncFilter === SYNC_TYPES.unsynced &&\n\t\tpattern.syncStatus !== 'unsynced' &&\n\t\tisUserPattern\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function usePatternsCategories( rootClientId, sourceFilter = 'all' ) {\n\tconst [ patterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst filteredPatterns = useMemo(\n\t\t() =>\n\t\t\tsourceFilter === 'all'\n\t\t\t\t? patterns\n\t\t\t\t: patterns.filter(\n\t\t\t\t\t\t( pattern ) =>\n\t\t\t\t\t\t\t! isPatternFiltered( pattern, sourceFilter )\n\t\t\t\t ),\n\t\t[ sourceFilter, patterns ]\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\tfilteredPatterns.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( ( a, b ) => a.label.localeCompare( b.label ) );\n\n\t\tif (\n\t\t\tfilteredPatterns.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 ( filteredPatterns.some( ( pattern ) => pattern.id ) ) {\n\t\t\tcategories.unshift( myPatternsCategory );\n\t\t}\n\t\tif ( filteredPatterns.length > 0 ) {\n\t\t\tcategories.unshift( {\n\t\t\t\tname: allPatternsCategory.name,\n\t\t\t\tlabel: allPatternsCategory.label,\n\t\t\t} );\n\t\t}\n\t\tspeak(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of categories . */\n\t\t\t\t_n(\n\t\t\t\t\t'%d category button displayed.',\n\t\t\t\t\t'%d category buttons displayed.',\n\t\t\t\t\tcategories.length\n\t\t\t\t),\n\t\t\t\tcategories.length\n\t\t\t)\n\t\t);\n\t\treturn categories;\n\t}, [ allCategories, filteredPatterns, hasRegisteredCategory ] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n\tpatternFilter,\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\tkey={ category.name }\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\tpatternFilter={ patternFilter }\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, , onClickPattern ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\tconst [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' );\n\tconst [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );\n\n\tconst availableCategories = usePatternsCategories(\n\t\trootClientId,\n\t\tpatternSourceFilter\n\t);\n\tconst scrollContainerRef = useRef();\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif (\n\t\t\t\t\tisPatternFiltered(\n\t\t\t\t\t\tpattern,\n\t\t\t\t\t\tpatternSourceFilter,\n\t\t\t\t\t\tpatternSyncFilter\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( category.name === allPatternsCategory.name ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ( category.name === myPatternsCategory.name && pattern.id ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\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[\n\t\t\tallPatterns,\n\t\t\tavailableCategories,\n\t\t\tcategory.name,\n\t\t\tpatternSourceFilter,\n\t\t\tpatternSyncFilter,\n\t\t]\n\t);\n\n\tconst pagingProps = usePatternsPaging(\n\t\tcurrentCategoryPatterns,\n\t\tcategory,\n\t\tscrollContainerRef\n\t);\n\tconst { changePage } = pagingProps;\n\n\t// Hide block pattern preview on unmount.\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tconst onSetPatternSyncFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSyncFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSyncFilter, changePage ]\n\t);\n\tconst onSetPatternSourceFilter = useCallback(\n\t\t( value ) => {\n\t\t\tsetPatternSourceFilter( value );\n\t\t\tchangePage( 1 );\n\t\t},\n\t\t[ setPatternSourceFilter, changePage ]\n\t);\n\n\treturn (\n\t\t<div className=\"block-editor-inserter__patterns-category-panel\">\n\t\t\t<VStack\n\t\t\t\tspacing={ 2 }\n\t\t\t\tclassName=\"block-editor-inserter__patterns-category-panel-header\"\n\t\t\t>\n\t\t\t\t<HStack>\n\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t<Heading level={ 4 } as=\"div\">\n\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t</Heading>\n\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t<BlockPatternsSyncFilter\n\t\t\t\t\t\tpatternSyncFilter={ patternSyncFilter }\n\t\t\t\t\t\tpatternSourceFilter={ patternSourceFilter }\n\t\t\t\t\t\tsetPatternSyncFilter={ onSetPatternSyncFilter }\n\t\t\t\t\t\tsetPatternSourceFilter={ onSetPatternSourceFilter }\n\t\t\t\t\t\tscrollContainerRef={ scrollContainerRef }\n\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t/>\n\t\t\t\t</HStack>\n\t\t\t\t{ category.description && (\n\t\t\t\t\t<Text>{ category.description }</Text>\n\t\t\t\t) }\n\t\t\t\t{ ! currentCategoryPatterns.length && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvariant=\"muted\"\n\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-category-no-results\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'No results found' ) }\n\t\t\t\t\t</Text>\n\t\t\t\t) }\n\t\t\t</VStack>\n\n\t\t\t{ currentCategoryPatterns.length > 0 && (\n\t\t\t\t<BlockPatternList\n\t\t\t\t\tref={ scrollContainerRef }\n\t\t\t\t\tshownPatterns={ pagingProps.categoryPatternsAsyncList }\n\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\tonClickPattern={ onClickPattern }\n\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\tlabel={ category.label }\n\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\tcategory={ category.name }\n\t\t\t\t\tisDraggable\n\t\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t\t\tpatternFilter={ patternSourceFilter }\n\t\t\t\t\tpagingProps={ pagingProps }\n\t\t\t\t/>\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\n\tconst categories = usePatternsCategories( rootClientId );\n\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\n\t\t\t\t\t\taria-label={ __( 'Block pattern categories' ) }\n\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ItemGroup role=\"list\">\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\tkey={ category.name }\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\trootClientId={ rootClientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"],"mappings":";;;;;;;;;;;;AAGA,IAAAA,QAAA,GAAAC,OAAA;AAOA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAUA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,KAAA,GAAAN,OAAA;AAKA,IAAAO,iBAAA,GAAAC,sBAAA,CAAAR,OAAA;AACA,IAAAS,kBAAA,GAAAD,sBAAA,CAAAR,OAAA;AACA,IAAAU,SAAA,GAAAF,sBAAA,CAAAR,OAAA;AACA,IAAAW,oBAAA,GAAAH,sBAAA,CAAAR,OAAA;AACA,IAAAY,kBAAA,GAAAJ,sBAAA,CAAAR,OAAA;AACA,IAAAa,oBAAA,GAAAb,OAAA;AAlCA;AACA;AACA;;AAwBA;AACA;AACA;;AAYA,MAAMc,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AAEd,MAAMC,mBAAmB,GAAG;EAClCC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,IAAAC,QAAE,EAAE,cAAe;AAC3B,CAAC;AAACC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA;AAEK,MAAMK,kBAAkB,GAAG;EACjCJ,IAAI,EAAE,YAAY;EAClBC,KAAK,EAAE,IAAAC,QAAE,EAAE,aAAc;AAC1B,CAAC;AAACC,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAEK,SAASC,iBAAiBA,CAAEC,OAAO,EAAEC,YAAY,EAAEC,UAAU,EAAG;EACtE,MAAMC,aAAa,GAAGH,OAAO,CAACN,IAAI,CAACU,UAAU,CAAE,YAAa,CAAC;EAC7D,MAAMC,kBAAkB,GACvBL,OAAO,CAACM,MAAM,KAAK,MAAM,IACzBN,OAAO,CAACM,MAAM,EAAEF,UAAU,CAAE,mBAAoB,CAAC;;EAElD;EACA;EACA,IACCH,YAAY,KAAKM,kCAAa,CAACC,KAAK,KAClCL,aAAa,IAAIE,kBAAkB,CAAE,EACtC;IACD,OAAO,IAAI;EACZ;;EAEA;EACA;EACA,IACCJ,YAAY,KAAKM,kCAAa,CAACE,SAAS,KACtCN,aAAa,IAAI,CAAEE,kBAAkB,CAAE,EACxC;IACD,OAAO,IAAI;EACZ;;EAEA;EACA;EACA,IAAKJ,YAAY,KAAKM,kCAAa,CAACG,IAAI,IAAI,CAAEV,OAAO,CAACW,EAAE,EAAG;IAC1D,OAAO,IAAI;EACZ;;EAEA;EACA,IAAKT,UAAU,KAAKU,+BAAU,CAACC,IAAI,IAAIb,OAAO,CAACc,UAAU,KAAK,EAAE,EAAG;IAClE,OAAO,IAAI;EACZ;EAEA,IACCZ,UAAU,KAAKU,+BAAU,CAACG,QAAQ,IAClCf,OAAO,CAACc,UAAU,KAAK,UAAU,IACjCX,aAAa,EACZ;IACD,OAAO,IAAI;EACZ;EAEA,OAAO,KAAK;AACb;AAEO,SAASa,qBAAqBA,CAAEC,YAAY,EAAEhB,YAAY,GAAG,KAAK,EAAG;EAC3E,MAAM,CAAEiB,QAAQ,EAAEC,aAAa,CAAE,GAAG,IAAAC,yBAAgB,EACnDC,SAAS,EACTJ,YACD,CAAC;EAED,MAAMK,gBAAgB,GAAG,IAAAC,gBAAO,EAC/B,MACCtB,YAAY,KAAK,KAAK,GACnBiB,QAAQ,GACRA,QAAQ,CAACM,MAAM,CACbxB,OAAO,IACR,CAAED,iBAAiB,CAAEC,OAAO,EAAEC,YAAa,CAC5C,CAAC,EACL,CAAEA,YAAY,EAAEiB,QAAQ,CACzB,CAAC;EAED,MAAMO,qBAAqB,GAAG,IAAAC,oBAAW,EACtC1B,OAAO,IAAM;IACd,IAAK,CAAEA,OAAO,CAAC2B,UAAU,IAAI,CAAE3B,OAAO,CAAC2B,UAAU,CAACC,MAAM,EAAG;MAC1D,OAAO,KAAK;IACb;IAEA,OAAO5B,OAAO,CAAC2B,UAAU,CAACE,IAAI,CAAIC,GAAG,IACpCX,aAAa,CAACU,IAAI,CAAIE,QAAQ,IAAMA,QAAQ,CAACrC,IAAI,KAAKoC,GAAI,CAC3D,CAAC;EACF,CAAC,EACD,CAAEX,aAAa,CAChB,CAAC;;EAED;EACA,MAAMa,mBAAmB,GAAG,IAAAT,gBAAO,EAAE,MAAM;IAC1C,MAAMI,UAAU,GAAGR,aAAa,CAC9BK,MAAM,CAAIO,QAAQ,IAClBT,gBAAgB,CAACO,IAAI,CAAI7B,OAAO,IAC/BA,OAAO,CAAC2B,UAAU,EAAEM,QAAQ,CAAEF,QAAQ,CAACrC,IAAK,CAC7C,CACD,CAAC,CACAwC,IAAI,CAAE,CAAEC,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACxC,KAAK,CAAC0C,aAAa,CAAED,CAAC,CAACzC,KAAM,CAAE,CAAC;IAEtD,IACC2B,gBAAgB,CAACO,IAAI,CAClB7B,OAAO,IAAM,CAAEyB,qBAAqB,CAAEzB,OAAQ,CACjD,CAAC,IACD,CAAE2B,UAAU,CAACW,IAAI,CACdP,QAAQ,IAAMA,QAAQ,CAACrC,IAAI,KAAK,eACnC,CAAC,EACA;MACDiC,UAAU,CAACY,IAAI,CAAE;QAChB7C,IAAI,EAAE,eAAe;QACrBC,KAAK,EAAE,IAAA6C,QAAE,EAAE,eAAgB;MAC5B,CAAE,CAAC;IACJ;IACA,IAAKlB,gBAAgB,CAACO,IAAI,CAAI7B,OAAO,IAAMA,OAAO,CAACW,EAAG,CAAC,EAAG;MACzDgB,UAAU,CAACc,OAAO,CAAE3C,kBAAmB,CAAC;IACzC;IACA,IAAKwB,gBAAgB,CAACM,MAAM,GAAG,CAAC,EAAG;MAClCD,UAAU,CAACc,OAAO,CAAE;QACnB/C,IAAI,EAAED,mBAAmB,CAACC,IAAI;QAC9BC,KAAK,EAAEF,mBAAmB,CAACE;MAC5B,CAAE,CAAC;IACJ;IACA,IAAA+C,WAAK,EACJ,IAAAC,aAAO,GACN;IACA,IAAAC,QAAE,EACD,+BAA+B,EAC/B,gCAAgC,EAChCjB,UAAU,CAACC,MACZ,CAAC,EACDD,UAAU,CAACC,MACZ,CACD,CAAC;IACD,OAAOD,UAAU;EAClB,CAAC,EAAE,CAAER,aAAa,EAAEG,gBAAgB,EAAEG,qBAAqB,CAAG,CAAC;EAE/D,OAAOO,mBAAmB;AAC3B;AAEO,SAASa,2BAA2BA,CAAE;EAC5C5B,YAAY;EACZ6B,QAAQ;EACRC,OAAO;EACPhB,QAAQ;EACRiB,mBAAmB;EACnBC;AACD,CAAC,EAAG;EACH,MAAMC,SAAS,GAAG,IAAAC,eAAM,EAAC,CAAC;EAE1B,IAAAC,kBAAS,EAAE,MAAM;IAChB,MAAMC,OAAO,GAAGC,UAAU,CAAE,MAAM;MACjC,MAAM,CAAEC,aAAa,CAAE,GAAGC,UAAK,CAACC,QAAQ,CAACnB,IAAI,CAAEY,SAAS,CAACQ,OAAQ,CAAC;MAClEH,aAAa,EAAEC,KAAK,CAAC,CAAC;IACvB,CAAE,CAAC;IACH,OAAO,MAAMG,YAAY,CAAEN,OAAQ,CAAC;EACrC,CAAC,EAAE,CAAEtB,QAAQ,CAAG,CAAC;EAEjB,OACC,IAAAtD,QAAA,CAAAmF,aAAA;IACCC,GAAG,EAAGX,SAAW;IACjBY,SAAS,EAAC;EAAiD,GAE3D,IAAArF,QAAA,CAAAmF,aAAA,EAACG,0BAA0B;IAC1BC,GAAG,EAAGjC,QAAQ,CAACrC,IAAM;IACrBuB,YAAY,EAAGA,YAAc;IAC7B6B,QAAQ,EAAGA,QAAU;IACrBC,OAAO,EAAGA,OAAS;IACnBhB,QAAQ,EAAGA,QAAU;IACrBiB,mBAAmB,EAAGA,mBAAqB;IAC3CC,aAAa,EAAGA;EAAe,CAC/B,CACG,CAAC;AAER;AAEO,SAASc,0BAA0BA,CAAE;EAC3C9C,YAAY;EACZ6B,QAAQ;EACRC,OAAO,GAAGvD,IAAI;EACduC,QAAQ;EACRiB;AACD,CAAC,EAAG;EACH,MAAM,CAAEiB,WAAW,GAAIC,cAAc,CAAE,GAAG,IAAA9C,yBAAgB,EACzD0B,QAAQ,EACR7B,YACD,CAAC;EACD,MAAM,CAAEkD,iBAAiB,EAAEC,oBAAoB,CAAE,GAAG,IAAAC,iBAAQ,EAAE,KAAM,CAAC;EACrE,MAAM,CAAEC,mBAAmB,EAAEC,sBAAsB,CAAE,GAAG,IAAAF,iBAAQ,EAAE,KAAM,CAAC;EAEzE,MAAMG,mBAAmB,GAAGxD,qBAAqB,CAChDC,YAAY,EACZqD,mBACD,CAAC;EACD,MAAMG,kBAAkB,GAAG,IAAAtB,eAAM,EAAC,CAAC;EACnC,MAAMuB,uBAAuB,GAAG,IAAAnD,gBAAO,EACtC,MACC0C,WAAW,CAACzC,MAAM,CAAIxB,OAAO,IAAM;IAAA,IAAA2E,qBAAA;IAClC,IACC5E,iBAAiB,CAChBC,OAAO,EACPsE,mBAAmB,EACnBH,iBACD,CAAC,EACA;MACD,OAAO,KAAK;IACb;IAEA,IAAKpC,QAAQ,CAACrC,IAAI,KAAKD,mBAAmB,CAACC,IAAI,EAAG;MACjD,OAAO,IAAI;IACZ;IACA,IAAKqC,QAAQ,CAACrC,IAAI,KAAKI,kBAAkB,CAACJ,IAAI,IAAIM,OAAO,CAACW,EAAE,EAAG;MAC9D,OAAO,IAAI;IACZ;IACA,IAAKoB,QAAQ,CAACrC,IAAI,KAAK,eAAe,EAAG;MACxC,OAAOM,OAAO,CAAC2B,UAAU,EAAEM,QAAQ,CAAEF,QAAQ,CAACrC,IAAK,CAAC;IACrD;;IAEA;IACA;IACA,MAAMkF,0BAA0B,IAAAD,qBAAA,GAC/B3E,OAAO,CAAC2B,UAAU,EAAEH,MAAM,CAAIM,GAAG,IAChC0C,mBAAmB,CAAClC,IAAI,CACrBuC,iBAAiB,IAClBA,iBAAiB,CAACnF,IAAI,KAAKoC,GAC7B,CACD,CAAC,cAAA6C,qBAAA,cAAAA,qBAAA,GAAI,EAAE;IAER,OAAOC,0BAA0B,CAAChD,MAAM,KAAK,CAAC;EAC/C,CAAE,CAAC,EACJ,CACCqC,WAAW,EACXO,mBAAmB,EACnBzC,QAAQ,CAACrC,IAAI,EACb4E,mBAAmB,EACnBH,iBAAiB,CAEnB,CAAC;EAED,MAAMW,WAAW,GAAG,IAAAC,0BAAiB,EACpCL,uBAAuB,EACvB3C,QAAQ,EACR0C,kBACD,CAAC;EACD,MAAM;IAAEO;EAAW,CAAC,GAAGF,WAAW;;EAElC;EACA;EACA,IAAA1B,kBAAS,EAAE,MAAM,MAAML,OAAO,CAAE,IAAK,CAAC,EAAE,EAAG,CAAC;EAE5C,MAAMkC,sBAAsB,GAAG,IAAAvD,oBAAW,EACvCwD,KAAK,IAAM;IACZd,oBAAoB,CAAEc,KAAM,CAAC;IAC7BF,UAAU,CAAE,CAAE,CAAC;EAChB,CAAC,EACD,CAAEZ,oBAAoB,EAAEY,UAAU,CACnC,CAAC;EACD,MAAMG,wBAAwB,GAAG,IAAAzD,oBAAW,EACzCwD,KAAK,IAAM;IACZX,sBAAsB,CAAEW,KAAM,CAAC;IAC/BF,UAAU,CAAE,CAAE,CAAC;EAChB,CAAC,EACD,CAAET,sBAAsB,EAAES,UAAU,CACrC,CAAC;EAED,OACC,IAAAvG,QAAA,CAAAmF,aAAA;IAAKE,SAAS,EAAC;EAAgD,GAC9D,IAAArF,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAuG,oBAAM;IACNC,OAAO,EAAG,CAAG;IACbvB,SAAS,EAAC;EAAuD,GAEjE,IAAArF,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAyG,oBAAM,QACN,IAAA7G,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAA0G,SAAS,QACT,IAAA9G,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAA2G,qBAAO;IAACC,KAAK,EAAG,CAAG;IAACC,EAAE,EAAC;EAAK,GAC1B3D,QAAQ,CAACpC,KACH,CACC,CAAC,EACZ,IAAAlB,QAAA,CAAAmF,aAAA,EAACrE,oBAAA,CAAAoG,uBAAuB;IACvBxB,iBAAiB,EAAGA,iBAAmB;IACvCG,mBAAmB,EAAGA,mBAAqB;IAC3CF,oBAAoB,EAAGa,sBAAwB;IAC/CV,sBAAsB,EAAGY,wBAA0B;IACnDV,kBAAkB,EAAGA,kBAAoB;IACzC1C,QAAQ,EAAGA;EAAU,CACrB,CACM,CAAC,EACPA,QAAQ,CAAC6D,WAAW,IACrB,IAAAnH,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAgH,kBAAI,QAAG9D,QAAQ,CAAC6D,WAAmB,CACpC,EACC,CAAElB,uBAAuB,CAAC9C,MAAM,IACjC,IAAAnD,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAgH,kBAAI;IACJC,OAAO,EAAC,OAAO;IACfhC,SAAS,EAAC;EAAqD,GAE7D,IAAAlE,QAAE,EAAE,kBAAmB,CACpB,CAEA,CAAC,EAEP8E,uBAAuB,CAAC9C,MAAM,GAAG,CAAC,IACnC,IAAAnD,QAAA,CAAAmF,aAAA,EAACzE,kBAAA,CAAA4G,OAAgB;IAChBlC,GAAG,EAAGY,kBAAoB;IAC1BuB,aAAa,EAAGlB,WAAW,CAACmB,yBAA2B;IACvDC,aAAa,EAAGpB,WAAW,CAACqB,gBAAkB;IAC9CjC,cAAc,EAAGA,cAAgB;IACjCnB,OAAO,EAAGA,OAAS;IACnBpD,KAAK,EAAGoC,QAAQ,CAACpC,KAAO;IACxByG,WAAW,EAAC,UAAU;IACtBrE,QAAQ,EAAGA,QAAQ,CAACrC,IAAM;IAC1B2G,WAAW;IACXrD,mBAAmB,EAAGA,mBAAqB;IAC3CC,aAAa,EAAGqB,mBAAqB;IACrCQ,WAAW,EAAGA;EAAa,CAC3B,CAEE,CAAC;AAER;AAEA,SAASwB,iBAAiBA,CAAE;EAC3BC,gBAAgB;EAChBC,gBAAgB;EAChB1D,QAAQ;EACR7B;AACD,CAAC,EAAG;EACH,MAAM,CAAEwF,oBAAoB,EAAEC,uBAAuB,CAAE,GAAG,IAAArC,iBAAQ,EAAE,KAAM,CAAC;EAE3E,MAAM1C,UAAU,GAAGX,qBAAqB,CAAEC,YAAa,CAAC;EAExD,MAAM0F,eAAe,GAAGH,gBAAgB,IAAI7E,UAAU,CAAE,CAAC,CAAE;EAC3D,MAAMiF,QAAQ,GAAG,IAAAC,yBAAgB,EAAE,QAAQ,EAAE,GAAI,CAAC;EAClD,OACC,IAAApI,QAAA,CAAAmF,aAAA,EAAAnF,QAAA,CAAAqI,QAAA,QACG,CAAEF,QAAQ,IACX,IAAAnI,QAAA,CAAAmF,aAAA;IAAKE,SAAS,EAAC;EAAsD,GACpE,IAAArF,QAAA,CAAAmF,aAAA;IACC,cAAa,IAAAhE,QAAE,EAAE,0BAA2B,CAAG;IAC/CkE,SAAS,EAAC;EAA4C,GAEtD,IAAArF,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAkI,uBAAS;IAACC,IAAI,EAAC;EAAM,GACnBrF,UAAU,CAACsF,GAAG,CAAIlF,QAAQ,IAC3B,IAAAtD,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAqI,kBAAI;IACJF,IAAI,EAAC,UAAU;IACfhD,GAAG,EAAGjC,QAAQ,CAACrC,IAAM;IACrByH,OAAO,EAAGA,CAAA,KACTZ,gBAAgB,CAAExE,QAAS,CAC3B;IACD+B,SAAS,EACR/B,QAAQ,KAAKyE,gBAAgB,GAC1B,4FAA4F,GAC5F,0CACH;IACD,cAAazE,QAAQ,CAACpC,KAAO;IAC7B,gBACCoC,QAAQ,KAAKyE,gBAAgB,GAC1B,MAAM,GACNnF;EACH,GAED,IAAA5C,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAAyG,oBAAM,QACN,IAAA7G,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAA0G,SAAS,QACPxD,QAAQ,CAACpC,KACD,CAAC,EACZ,IAAAlB,QAAA,CAAAmF,aAAA,EAAC9E,MAAA,CAAAsI,IAAI;IACJC,IAAI,EACH,IAAAC,WAAK,EAAC,CAAC,GACJC,kBAAW,GACXC;EACH,CACD,CACM,CACH,CACL,CAAC,EACH,IAAA/I,QAAA,CAAAmF,aAAA;IAAKoD,IAAI,EAAC;EAAU,GACnB,IAAAvI,QAAA,CAAAmF,aAAA,EAAC/E,WAAA,CAAA4I,MAAM;IACN3D,SAAS,EAAC,gDAAgD;IAC1DqD,OAAO,EAAGA,CAAA,KACTT,uBAAuB,CAAE,IAAK,CAC9B;IACDZ,OAAO,EAAC;EAAW,GAEjB,IAAAlG,QAAE,EAAE,sBAAuB,CACtB,CACJ,CACK,CACP,CACD,CACL,EACCgH,QAAQ,IACT,IAAAnI,QAAA,CAAAmF,aAAA,EAACvE,oBAAA,CAAA0G,OAAmB;IAACpE,UAAU,EAAGA;EAAY,GACzCI,QAAQ,IACX,IAAAtD,QAAA,CAAAmF,aAAA,EAACG,0BAA0B;IAC1BC,GAAG,EAAGjC,QAAQ,CAACrC,IAAM;IACrBoD,QAAQ,EAAGA,QAAU;IACrB7B,YAAY,EAAGA,YAAc;IAC7Bc,QAAQ,EAAGA,QAAU;IACrBiB,mBAAmB,EAAG;EAAO,CAC7B,CAEkB,CACrB,EACCyD,oBAAoB,IACrB,IAAAhI,QAAA,CAAAmF,aAAA,EAACxE,SAAA,CAAA2G,OAAqB;IACrBY,eAAe,EAAGA,eAAiB;IACnCe,iBAAiB,EAAG/F,UAAY;IAChCgG,YAAY,EAAGA,CAAA,KAAMjB,uBAAuB,CAAE,KAAM,CAAG;IACvDzF,YAAY,EAAGA;EAAc,CAC7B,CAED,CAAC;AAEL;AAAC,IAAA2G,QAAA,GAEctB,iBAAiB;AAAAzG,OAAA,CAAAkG,OAAA,GAAA6B,QAAA"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = usePatternsPaging;
7
+ var _element = require("@wordpress/element");
8
+ var _compose = require("@wordpress/compose");
9
+ var _dom = require("@wordpress/dom");
10
+ /**
11
+ * WordPress dependencies
12
+ */
13
+
14
+ const PAGE_SIZE = 20;
15
+ const INITIAL_INSERTER_RESULTS = 5;
16
+
17
+ /**
18
+ * Supplies values needed to page the patterns list client side.
19
+ *
20
+ * @param {Array} currentCategoryPatterns An array of the current patterns to display.
21
+ * @param {string} currentCategory The currently selected category.
22
+ * @param {Object} scrollContainerRef Ref of container to to find scroll container for when moving between pages.
23
+ * @param {string} currentFilter The currently search filter.
24
+ *
25
+ * @return {Object} Returns the relevant paging values. (totalItems, categoryPatternsList, numPages, changePage, currentPage)
26
+ */
27
+ function usePatternsPaging(currentCategoryPatterns, currentCategory, scrollContainerRef, currentFilter = '') {
28
+ const [currentPage, setCurrentPage] = (0, _element.useState)(1);
29
+ const previousCategory = (0, _compose.usePrevious)(currentCategory);
30
+ const previousFilter = (0, _compose.usePrevious)(currentFilter);
31
+ if ((previousCategory !== currentCategory || previousFilter !== currentFilter) && currentPage !== 1) {
32
+ setCurrentPage(1);
33
+ }
34
+ const totalItems = currentCategoryPatterns.length;
35
+ const pageIndex = currentPage - 1;
36
+ const categoryPatterns = (0, _element.useMemo)(() => {
37
+ return currentCategoryPatterns.slice(pageIndex * PAGE_SIZE, pageIndex * PAGE_SIZE + PAGE_SIZE);
38
+ }, [pageIndex, currentCategoryPatterns]);
39
+ const categoryPatternsAsyncList = (0, _compose.useAsyncList)(categoryPatterns, {
40
+ step: INITIAL_INSERTER_RESULTS
41
+ });
42
+ const numPages = Math.ceil(currentCategoryPatterns.length / PAGE_SIZE);
43
+ const changePage = page => {
44
+ const scrollContainer = (0, _dom.getScrollContainer)(scrollContainerRef?.current);
45
+ scrollContainer?.scrollTo(0, 0);
46
+ setCurrentPage(page);
47
+ };
48
+ (0, _element.useEffect)(function scrollToTopOnCategoryChange() {
49
+ const scrollContainer = (0, _dom.getScrollContainer)(scrollContainerRef?.current);
50
+ scrollContainer?.scrollTo(0, 0);
51
+ }, [currentCategory, scrollContainerRef]);
52
+ return {
53
+ totalItems,
54
+ categoryPatterns,
55
+ categoryPatternsAsyncList,
56
+ numPages,
57
+ changePage,
58
+ currentPage
59
+ };
60
+ }
61
+ //# sourceMappingURL=use-patterns-paging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_element","require","_compose","_dom","PAGE_SIZE","INITIAL_INSERTER_RESULTS","usePatternsPaging","currentCategoryPatterns","currentCategory","scrollContainerRef","currentFilter","currentPage","setCurrentPage","useState","previousCategory","usePrevious","previousFilter","totalItems","length","pageIndex","categoryPatterns","useMemo","slice","categoryPatternsAsyncList","useAsyncList","step","numPages","Math","ceil","changePage","page","scrollContainer","getScrollContainer","current","scrollTo","useEffect","scrollToTopOnCategoryChange"],"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-paging.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useEffect } from '@wordpress/element';\nimport { useAsyncList, usePrevious } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\nconst PAGE_SIZE = 20;\nconst INITIAL_INSERTER_RESULTS = 5;\n\n/**\n * Supplies values needed to page the patterns list client side.\n *\n * @param {Array} currentCategoryPatterns An array of the current patterns to display.\n * @param {string} currentCategory The currently selected category.\n * @param {Object} scrollContainerRef Ref of container to to find scroll container for when moving between pages.\n * @param {string} currentFilter The currently search filter.\n *\n * @return {Object} Returns the relevant paging values. (totalItems, categoryPatternsList, numPages, changePage, currentPage)\n */\nexport default function usePatternsPaging(\n\tcurrentCategoryPatterns,\n\tcurrentCategory,\n\tscrollContainerRef,\n\tcurrentFilter = ''\n) {\n\tconst [ currentPage, setCurrentPage ] = useState( 1 );\n\tconst previousCategory = usePrevious( currentCategory );\n\tconst previousFilter = usePrevious( currentFilter );\n\tif (\n\t\t( previousCategory !== currentCategory ||\n\t\t\tpreviousFilter !== currentFilter ) &&\n\t\tcurrentPage !== 1\n\t) {\n\t\tsetCurrentPage( 1 );\n\t}\n\tconst totalItems = currentCategoryPatterns.length;\n\tconst pageIndex = currentPage - 1;\n\tconst categoryPatterns = useMemo( () => {\n\t\treturn currentCategoryPatterns.slice(\n\t\t\tpageIndex * PAGE_SIZE,\n\t\t\tpageIndex * PAGE_SIZE + PAGE_SIZE\n\t\t);\n\t}, [ pageIndex, currentCategoryPatterns ] );\n\tconst categoryPatternsAsyncList = useAsyncList( categoryPatterns, {\n\t\tstep: INITIAL_INSERTER_RESULTS,\n\t} );\n\tconst numPages = Math.ceil( currentCategoryPatterns.length / PAGE_SIZE );\n\tconst changePage = ( page ) => {\n\t\tconst scrollContainer = getScrollContainer(\n\t\t\tscrollContainerRef?.current\n\t\t);\n\t\tscrollContainer?.scrollTo( 0, 0 );\n\n\t\tsetCurrentPage( page );\n\t};\n\n\tuseEffect(\n\t\tfunction scrollToTopOnCategoryChange() {\n\t\t\tconst scrollContainer = getScrollContainer(\n\t\t\t\tscrollContainerRef?.current\n\t\t\t);\n\t\t\tscrollContainer?.scrollTo( 0, 0 );\n\t\t},\n\t\t[ currentCategory, scrollContainerRef ]\n\t);\n\n\treturn {\n\t\ttotalItems,\n\t\tcategoryPatterns,\n\t\tcategoryPatternsAsyncList,\n\t\tnumPages,\n\t\tchangePage,\n\t\tcurrentPage,\n\t};\n}\n"],"mappings":";;;;;;AAGA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,IAAA,GAAAF,OAAA;AALA;AACA;AACA;;AAKA,MAAMG,SAAS,GAAG,EAAE;AACpB,MAAMC,wBAAwB,GAAG,CAAC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,iBAAiBA,CACxCC,uBAAuB,EACvBC,eAAe,EACfC,kBAAkB,EAClBC,aAAa,GAAG,EAAE,EACjB;EACD,MAAM,CAAEC,WAAW,EAAEC,cAAc,CAAE,GAAG,IAAAC,iBAAQ,EAAE,CAAE,CAAC;EACrD,MAAMC,gBAAgB,GAAG,IAAAC,oBAAW,EAAEP,eAAgB,CAAC;EACvD,MAAMQ,cAAc,GAAG,IAAAD,oBAAW,EAAEL,aAAc,CAAC;EACnD,IACC,CAAEI,gBAAgB,KAAKN,eAAe,IACrCQ,cAAc,KAAKN,aAAa,KACjCC,WAAW,KAAK,CAAC,EAChB;IACDC,cAAc,CAAE,CAAE,CAAC;EACpB;EACA,MAAMK,UAAU,GAAGV,uBAAuB,CAACW,MAAM;EACjD,MAAMC,SAAS,GAAGR,WAAW,GAAG,CAAC;EACjC,MAAMS,gBAAgB,GAAG,IAAAC,gBAAO,EAAE,MAAM;IACvC,OAAOd,uBAAuB,CAACe,KAAK,CACnCH,SAAS,GAAGf,SAAS,EACrBe,SAAS,GAAGf,SAAS,GAAGA,SACzB,CAAC;EACF,CAAC,EAAE,CAAEe,SAAS,EAAEZ,uBAAuB,CAAG,CAAC;EAC3C,MAAMgB,yBAAyB,GAAG,IAAAC,qBAAY,EAAEJ,gBAAgB,EAAE;IACjEK,IAAI,EAAEpB;EACP,CAAE,CAAC;EACH,MAAMqB,QAAQ,GAAGC,IAAI,CAACC,IAAI,CAAErB,uBAAuB,CAACW,MAAM,GAAGd,SAAU,CAAC;EACxE,MAAMyB,UAAU,GAAKC,IAAI,IAAM;IAC9B,MAAMC,eAAe,GAAG,IAAAC,uBAAkB,EACzCvB,kBAAkB,EAAEwB,OACrB,CAAC;IACDF,eAAe,EAAEG,QAAQ,CAAE,CAAC,EAAE,CAAE,CAAC;IAEjCtB,cAAc,CAAEkB,IAAK,CAAC;EACvB,CAAC;EAED,IAAAK,kBAAS,EACR,SAASC,2BAA2BA,CAAA,EAAG;IACtC,MAAML,eAAe,GAAG,IAAAC,uBAAkB,EACzCvB,kBAAkB,EAAEwB,OACrB,CAAC;IACDF,eAAe,EAAEG,QAAQ,CAAE,CAAC,EAAE,CAAE,CAAC;EAClC,CAAC,EACD,CAAE1B,eAAe,EAAEC,kBAAkB,CACtC,CAAC;EAED,OAAO;IACNQ,UAAU;IACVG,gBAAgB;IAChBG,yBAAyB;IACzBG,QAAQ;IACRG,UAAU;IACVlB;EACD,CAAC;AACF"}
@@ -18,12 +18,6 @@ var _store = require("../../../store");
18
18
  * Internal dependencies
19
19
  */
20
20
 
21
- const CUSTOM_CATEGORY = {
22
- name: 'custom',
23
- label: (0, _i18n.__)('My patterns'),
24
- description: (0, _i18n.__)('Custom patterns added by site users.')
25
- };
26
-
27
21
  /**
28
22
  * Retrieves the block patterns inserter state.
29
23
  *
@@ -35,23 +29,40 @@ const CUSTOM_CATEGORY = {
35
29
  const usePatternsState = (onInsert, rootClientId) => {
36
30
  const {
37
31
  patternCategories,
38
- patterns
32
+ patterns,
33
+ userPatternCategories
39
34
  } = (0, _data.useSelect)(select => {
40
35
  const {
41
36
  __experimentalGetAllowedPatterns,
42
37
  getSettings
43
38
  } = select(_store.store);
39
+ const {
40
+ __experimentalUserPatternCategories,
41
+ __experimentalBlockPatternCategories
42
+ } = getSettings();
44
43
  return {
45
44
  patterns: __experimentalGetAllowedPatterns(rootClientId),
46
- patternCategories: getSettings().__experimentalBlockPatternCategories
45
+ userPatternCategories: __experimentalUserPatternCategories,
46
+ patternCategories: __experimentalBlockPatternCategories
47
47
  };
48
48
  }, [rootClientId]);
49
- const allCategories = (0, _element.useMemo)(() => [...patternCategories, CUSTOM_CATEGORY], [patternCategories]);
49
+ const allCategories = (0, _element.useMemo)(() => {
50
+ const categories = [...patternCategories];
51
+ userPatternCategories?.forEach(userCategory => {
52
+ if (!categories.find(existingCategory => existingCategory.name === userCategory.name)) {
53
+ categories.push(userCategory);
54
+ }
55
+ });
56
+ return categories;
57
+ }, [patternCategories, userPatternCategories]);
50
58
  const {
51
59
  createSuccessNotice
52
60
  } = (0, _data.useDispatch)(_notices.store);
53
61
  const onClickPattern = (0, _element.useCallback)((pattern, blocks) => {
54
- onInsert((blocks !== null && blocks !== void 0 ? blocks : []).map(block => (0, _blocks.cloneBlock)(block)), pattern.name);
62
+ const patternBlocks = pattern.id && pattern.syncStatus !== 'unsynced' ? [(0, _blocks.createBlock)('core/block', {
63
+ ref: pattern.id
64
+ })] : blocks;
65
+ onInsert((patternBlocks !== null && patternBlocks !== void 0 ? patternBlocks : []).map(block => (0, _blocks.cloneBlock)(block)), pattern.name);
55
66
  createSuccessNotice((0, _i18n.sprintf)( /* translators: %s: block pattern title. */
56
67
  (0, _i18n.__)('Block pattern "%s" inserted.'), pattern.title), {
57
68
  type: 'snackbar',
@@ -1 +1 @@
1
- {"version":3,"names":["_element","require","_blocks","_data","_i18n","_notices","_store","CUSTOM_CATEGORY","name","label","__","description","usePatternsState","onInsert","rootClientId","patternCategories","patterns","useSelect","select","__experimentalGetAllowedPatterns","getSettings","blockEditorStore","__experimentalBlockPatternCategories","allCategories","useMemo","createSuccessNotice","useDispatch","noticesStore","onClickPattern","useCallback","pattern","blocks","map","block","cloneBlock","sprintf","title","type","id","_default","exports","default"],"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"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 added 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\tid: 'block-pattern-inserted-notice',\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"],"mappings":";;;;;;AAGA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAKA,IAAAK,MAAA,GAAAL,OAAA;AAZA;AACA;AACA;;AAOA;AACA;AACA;;AAGA,MAAMM,eAAe,GAAG;EACvBC,IAAI,EAAE,QAAQ;EACdC,KAAK,EAAE,IAAAC,QAAE,EAAE,aAAc,CAAC;EAC1BC,WAAW,EAAE,IAAAD,QAAE,EAAE,sCAAuC;AACzD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,gBAAgB,GAAGA,CAAEC,QAAQ,EAAEC,YAAY,KAAM;EACtD,MAAM;IAAEC,iBAAiB;IAAEC;EAAS,CAAC,GAAG,IAAAC,eAAS,EAC9CC,MAAM,IAAM;IACb,MAAM;MAAEC,gCAAgC;MAAEC;IAAY,CAAC,GACtDF,MAAM,CAAEG,YAAiB,CAAC;IAE3B,OAAO;MACNL,QAAQ,EAAEG,gCAAgC,CAAEL,YAAa,CAAC;MAC1DC,iBAAiB,EAChBK,WAAW,CAAC,CAAC,CAACE;IAChB,CAAC;EACF,CAAC,EACD,CAAER,YAAY,CACf,CAAC;EAED,MAAMS,aAAa,GAAG,IAAAC,gBAAO,EAC5B,MAAM,CAAE,GAAGT,iBAAiB,EAAER,eAAe,CAAE,EAC/C,CAAEQ,iBAAiB,CACpB,CAAC;EAED,MAAM;IAAEU;EAAoB,CAAC,GAAG,IAAAC,iBAAW,EAAEC,cAAa,CAAC;EAC3D,MAAMC,cAAc,GAAG,IAAAC,oBAAW,EACjC,CAAEC,OAAO,EAAEC,MAAM,KAAM;IACtBlB,QAAQ,CACP,CAAEkB,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,EAAGC,GAAG,CAAIC,KAAK,IAAM,IAAAC,kBAAU,EAAED,KAAM,CAAE,CAAC,EACxDH,OAAO,CAACtB,IACT,CAAC;IACDiB,mBAAmB,CAClB,IAAAU,aAAO,GACN;IACA,IAAAzB,QAAE,EAAE,8BAA+B,CAAC,EACpCoB,OAAO,CAACM,KACT,CAAC,EACD;MACCC,IAAI,EAAE,UAAU;MAChBC,EAAE,EAAE;IACL,CACD,CAAC;EACF,CAAC,EACD,CAAEb,mBAAmB,EAAEZ,QAAQ,CAChC,CAAC;EAED,OAAO,CAAEG,QAAQ,EAAEO,aAAa,EAAEK,cAAc,CAAE;AACnD,CAAC;AAAC,IAAAW,QAAA,GAEa3B,gBAAgB;AAAA4B,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"names":["_element","require","_blocks","_data","_i18n","_notices","_store","usePatternsState","onInsert","rootClientId","patternCategories","patterns","userPatternCategories","useSelect","select","__experimentalGetAllowedPatterns","getSettings","blockEditorStore","__experimentalUserPatternCategories","__experimentalBlockPatternCategories","allCategories","useMemo","categories","forEach","userCategory","find","existingCategory","name","push","createSuccessNotice","useDispatch","noticesStore","onClickPattern","useCallback","pattern","blocks","patternBlocks","id","syncStatus","createBlock","ref","map","block","cloneBlock","sprintf","__","title","type","_default","exports","default"],"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-state.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { cloneBlock, createBlock } 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, userPatternCategories } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst {\n\t\t\t\t__experimentalUserPatternCategories,\n\t\t\t\t__experimentalBlockPatternCategories,\n\t\t\t} = getSettings();\n\t\t\treturn {\n\t\t\t\tpatterns: __experimentalGetAllowedPatterns( rootClientId ),\n\t\t\t\tuserPatternCategories: __experimentalUserPatternCategories,\n\t\t\t\tpatternCategories: __experimentalBlockPatternCategories,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst allCategories = useMemo( () => {\n\t\tconst categories = [ ...patternCategories ];\n\t\tuserPatternCategories?.forEach( ( userCategory ) => {\n\t\t\tif (\n\t\t\t\t! categories.find(\n\t\t\t\t\t( existingCategory ) =>\n\t\t\t\t\t\texistingCategory.name === userCategory.name\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcategories.push( userCategory );\n\t\t\t}\n\t\t} );\n\t\treturn categories;\n\t}, [ patternCategories, userPatternCategories ] );\n\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst onClickPattern = useCallback(\n\t\t( pattern, blocks ) => {\n\t\t\tconst patternBlocks =\n\t\t\t\tpattern.id && pattern.syncStatus !== 'unsynced'\n\t\t\t\t\t? [ createBlock( 'core/block', { ref: pattern.id } ) ]\n\t\t\t\t\t: blocks;\n\t\t\tonInsert(\n\t\t\t\t( patternBlocks ?? [] ).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\tid: 'block-pattern-inserted-notice',\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"],"mappings":";;;;;;AAGA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAKA,IAAAK,MAAA,GAAAL,OAAA;AAZA;AACA;AACA;;AAOA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,gBAAgB,GAAGA,CAAEC,QAAQ,EAAEC,YAAY,KAAM;EACtD,MAAM;IAAEC,iBAAiB;IAAEC,QAAQ;IAAEC;EAAsB,CAAC,GAAG,IAAAC,eAAS,EACrEC,MAAM,IAAM;IACb,MAAM;MAAEC,gCAAgC;MAAEC;IAAY,CAAC,GACtDF,MAAM,CAAEG,YAAiB,CAAC;IAC3B,MAAM;MACLC,mCAAmC;MACnCC;IACD,CAAC,GAAGH,WAAW,CAAC,CAAC;IACjB,OAAO;MACNL,QAAQ,EAAEI,gCAAgC,CAAEN,YAAa,CAAC;MAC1DG,qBAAqB,EAAEM,mCAAmC;MAC1DR,iBAAiB,EAAES;IACpB,CAAC;EACF,CAAC,EACD,CAAEV,YAAY,CACf,CAAC;EAED,MAAMW,aAAa,GAAG,IAAAC,gBAAO,EAAE,MAAM;IACpC,MAAMC,UAAU,GAAG,CAAE,GAAGZ,iBAAiB,CAAE;IAC3CE,qBAAqB,EAAEW,OAAO,CAAIC,YAAY,IAAM;MACnD,IACC,CAAEF,UAAU,CAACG,IAAI,CACdC,gBAAgB,IACjBA,gBAAgB,CAACC,IAAI,KAAKH,YAAY,CAACG,IACzC,CAAC,EACA;QACDL,UAAU,CAACM,IAAI,CAAEJ,YAAa,CAAC;MAChC;IACD,CAAE,CAAC;IACH,OAAOF,UAAU;EAClB,CAAC,EAAE,CAAEZ,iBAAiB,EAAEE,qBAAqB,CAAG,CAAC;EAEjD,MAAM;IAAEiB;EAAoB,CAAC,GAAG,IAAAC,iBAAW,EAAEC,cAAa,CAAC;EAC3D,MAAMC,cAAc,GAAG,IAAAC,oBAAW,EACjC,CAAEC,OAAO,EAAEC,MAAM,KAAM;IACtB,MAAMC,aAAa,GAClBF,OAAO,CAACG,EAAE,IAAIH,OAAO,CAACI,UAAU,KAAK,UAAU,GAC5C,CAAE,IAAAC,mBAAW,EAAE,YAAY,EAAE;MAAEC,GAAG,EAAEN,OAAO,CAACG;IAAG,CAAE,CAAC,CAAE,GACpDF,MAAM;IACV3B,QAAQ,CACP,CAAE4B,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAI,EAAE,EAAGK,GAAG,CAAIC,KAAK,IAAM,IAAAC,kBAAU,EAAED,KAAM,CAAE,CAAC,EAC/DR,OAAO,CAACP,IACT,CAAC;IACDE,mBAAmB,CAClB,IAAAe,aAAO,GACN;IACA,IAAAC,QAAE,EAAE,8BAA+B,CAAC,EACpCX,OAAO,CAACY,KACT,CAAC,EACD;MACCC,IAAI,EAAE,UAAU;MAChBV,EAAE,EAAE;IACL,CACD,CAAC;EACF,CAAC,EACD,CAAER,mBAAmB,EAAErB,QAAQ,CAChC,CAAC;EAED,OAAO,CAAEG,QAAQ,EAAES,aAAa,EAAEY,cAAc,CAAE;AACnD,CAAC;AAAC,IAAAgB,QAAA,GAEazC,gBAAgB;AAAA0C,OAAA,CAAAC,OAAA,GAAAF,QAAA"}