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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) 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 +19 -4
  8. package/build/components/block-patterns-list/index.js.map +1 -1
  9. package/build/components/block-patterns-paging/index.js +66 -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 +57 -23
  61. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  62. package/build/components/inserter/block-patterns-explorer/sidebar.js +24 -9
  63. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  64. package/build/components/inserter/block-patterns-source-filter.js +54 -0
  65. package/build/components/inserter/block-patterns-source-filter.js.map +1 -0
  66. package/build/components/inserter/block-patterns-sync-filter.js +46 -0
  67. package/build/components/inserter/block-patterns-sync-filter.js.map +1 -0
  68. package/build/components/inserter/block-patterns-tab.js +91 -45
  69. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  70. package/build/components/inserter/hooks/use-patterns-paging.js +57 -0
  71. package/build/components/inserter/hooks/use-patterns-paging.js.map +1 -0
  72. package/build/components/inserter/hooks/use-patterns-state.js +21 -10
  73. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  74. package/build/components/inserter/menu.js +13 -11
  75. package/build/components/inserter/menu.js.map +1 -1
  76. package/build/components/inserter/search-results.js +4 -3
  77. package/build/components/inserter/search-results.js.map +1 -1
  78. package/build/components/inserter/tabs.js +1 -12
  79. package/build/components/inserter/tabs.js.map +1 -1
  80. package/build/components/inspector-controls/block-support-slot-container.js +12 -1
  81. package/build/components/inspector-controls/block-support-slot-container.js.map +1 -1
  82. package/build/components/inspector-controls/fill.js +24 -13
  83. package/build/components/inspector-controls/fill.js.map +1 -1
  84. package/build/components/inspector-controls/groups.js +5 -3
  85. package/build/components/inspector-controls/groups.js.map +1 -1
  86. package/build/components/inspector-controls/slot.js +13 -0
  87. package/build/components/inspector-controls/slot.js.map +1 -1
  88. package/build/components/inspector-controls-tabs/styles-tab.js +3 -0
  89. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  90. package/build/components/link-control/index.js +12 -2
  91. package/build/components/link-control/index.js.map +1 -1
  92. package/build/components/list-view/block-select-button.js +1 -3
  93. package/build/components/list-view/block-select-button.js.map +1 -1
  94. package/build/components/list-view/block.js +13 -1
  95. package/build/components/list-view/block.js.map +1 -1
  96. package/build/components/list-view/use-block-selection.js +29 -24
  97. package/build/components/list-view/use-block-selection.js.map +1 -1
  98. package/build/components/media-placeholder/index.js +2 -2
  99. package/build/components/media-placeholder/index.js.map +1 -1
  100. package/build/components/media-placeholder/index.native.js +11 -11
  101. package/build/components/media-placeholder/index.native.js.map +1 -1
  102. package/build/components/media-replace-flow/index.js +2 -3
  103. package/build/components/media-replace-flow/index.js.map +1 -1
  104. package/build/components/media-upload/constants.js +30 -0
  105. package/build/components/media-upload/constants.js.map +1 -0
  106. package/build/components/media-upload/index.native.js +63 -53
  107. package/build/components/media-upload/index.native.js.map +1 -1
  108. package/build/components/preview-options/index.js +1 -1
  109. package/build/components/preview-options/index.js.map +1 -1
  110. package/build/components/rich-text/index.js +34 -35
  111. package/build/components/rich-text/index.js.map +1 -1
  112. package/build/components/rich-text/index.native.js +14 -32
  113. package/build/components/rich-text/index.native.js.map +1 -1
  114. package/build/components/rich-text/multiline.js +95 -0
  115. package/build/components/rich-text/multiline.js.map +1 -0
  116. package/build/components/rich-text/split-value.js +10 -16
  117. package/build/components/rich-text/split-value.js.map +1 -1
  118. package/build/components/rich-text/use-enter.js +31 -40
  119. package/build/components/rich-text/use-enter.js.map +1 -1
  120. package/build/components/rich-text/use-paste-handler.js +18 -33
  121. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  122. package/build/components/spacing-sizes-control/utils.js +1 -1
  123. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  124. package/build/components/use-block-commands/index.js +30 -18
  125. package/build/components/use-block-commands/index.js.map +1 -1
  126. package/build/components/use-block-display-information/index.js +5 -2
  127. package/build/components/use-block-display-information/index.js.map +1 -1
  128. package/build/hooks/background.js +258 -0
  129. package/build/hooks/background.js.map +1 -0
  130. package/build/hooks/block-hooks.js +188 -0
  131. package/build/hooks/block-hooks.js.map +1 -0
  132. package/build/hooks/block-rename-ui.js +160 -0
  133. package/build/hooks/block-rename-ui.js.map +1 -0
  134. package/build/hooks/duotone.js +29 -42
  135. package/build/hooks/duotone.js.map +1 -1
  136. package/build/hooks/index.js +2 -2
  137. package/build/hooks/index.js.map +1 -1
  138. package/build/hooks/layout.js +31 -14
  139. package/build/hooks/layout.js.map +1 -1
  140. package/build/hooks/position.js +4 -2
  141. package/build/hooks/position.js.map +1 -1
  142. package/build/hooks/style.js +10 -3
  143. package/build/hooks/style.js.map +1 -1
  144. package/build/private-apis.js +2 -0
  145. package/build/private-apis.js.map +1 -1
  146. package/build/store/actions.js +33 -10
  147. package/build/store/actions.js.map +1 -1
  148. package/build/store/private-actions.js +42 -8
  149. package/build/store/private-actions.js.map +1 -1
  150. package/build/store/private-selectors.js +23 -0
  151. package/build/store/private-selectors.js.map +1 -1
  152. package/build/store/reducer.js +43 -1
  153. package/build/store/reducer.js.map +1 -1
  154. package/build/store/selectors.js +84 -23
  155. package/build/store/selectors.js.map +1 -1
  156. package/build/store/utils.js +0 -4
  157. package/build/store/utils.js.map +1 -1
  158. package/build-module/components/block-canvas/index.js +97 -0
  159. package/build-module/components/block-canvas/index.js.map +1 -0
  160. package/build-module/components/block-inspector/index.js +4 -1
  161. package/build-module/components/block-inspector/index.js.map +1 -1
  162. package/build-module/components/block-patterns-list/index.js +20 -5
  163. package/build-module/components/block-patterns-list/index.js.map +1 -1
  164. package/build-module/components/block-patterns-paging/index.js +59 -0
  165. package/build-module/components/block-patterns-paging/index.js.map +1 -0
  166. package/build-module/components/block-settings-menu/block-settings-dropdown.js +28 -0
  167. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  168. package/build-module/components/block-settings-menu-controls/index.js +4 -7
  169. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  170. package/build-module/components/block-styles/index.js +1 -0
  171. package/build-module/components/block-styles/index.js.map +1 -1
  172. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +3 -7
  173. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  174. package/build-module/components/block-tools/block-contextual-toolbar.js +18 -7
  175. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  176. package/build-module/components/block-tools/block-selection-button.js +5 -1
  177. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  178. package/build-module/components/border-radius-control/input-controls.js +1 -1
  179. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  180. package/build-module/components/border-radius-control/linked-button.js +2 -4
  181. package/build-module/components/border-radius-control/linked-button.js.map +1 -1
  182. package/build-module/components/colors/with-colors.js.map +1 -1
  183. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -21
  184. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  185. package/build-module/components/default-block-appender/index.native.js +20 -1
  186. package/build-module/components/default-block-appender/index.native.js.map +1 -1
  187. package/build-module/components/duotone/utils.js +65 -0
  188. package/build-module/components/duotone/utils.js.map +1 -1
  189. package/build-module/components/editor-styles/index.js +28 -9
  190. package/build-module/components/editor-styles/index.js.map +1 -1
  191. package/build-module/components/global-styles/hooks.js +3 -100
  192. package/build-module/components/global-styles/hooks.js.map +1 -1
  193. package/build-module/components/global-styles/image-settings-panel.js +53 -0
  194. package/build-module/components/global-styles/image-settings-panel.js.map +1 -0
  195. package/build-module/components/global-styles/index.js +2 -2
  196. package/build-module/components/global-styles/index.js.map +1 -1
  197. package/build-module/components/global-styles/use-global-styles-output.js +18 -16
  198. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  199. package/build-module/components/global-styles/utils.js +1 -1
  200. package/build-module/components/global-styles/utils.js.map +1 -1
  201. package/build-module/components/iframe/index.js +66 -33
  202. package/build-module/components/iframe/index.js.map +1 -1
  203. package/build-module/components/image-editor/use-save-image.js +2 -5
  204. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  205. package/build-module/components/image-editor/use-transform-image.js +9 -9
  206. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  207. package/build-module/components/index.js +1 -1
  208. package/build-module/components/index.js.map +1 -1
  209. package/build-module/components/index.native.js +2 -1
  210. package/build-module/components/index.native.js.map +1 -1
  211. package/build-module/components/inner-blocks/use-nested-settings-update.js +14 -8
  212. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  213. package/build-module/components/inserter/block-patterns-explorer/explorer.js +12 -6
  214. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  215. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +59 -25
  216. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  217. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +23 -9
  218. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -1
  219. package/build-module/components/inserter/block-patterns-source-filter.js +44 -0
  220. package/build-module/components/inserter/block-patterns-source-filter.js.map +1 -0
  221. package/build-module/components/inserter/block-patterns-sync-filter.js +38 -0
  222. package/build-module/components/inserter/block-patterns-sync-filter.js.map +1 -0
  223. package/build-module/components/inserter/block-patterns-tab.js +87 -46
  224. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  225. package/build-module/components/inserter/hooks/use-patterns-paging.js +50 -0
  226. package/build-module/components/inserter/hooks/use-patterns-paging.js.map +1 -0
  227. package/build-module/components/inserter/hooks/use-patterns-state.js +22 -10
  228. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  229. package/build-module/components/inserter/menu.js +13 -11
  230. package/build-module/components/inserter/menu.js.map +1 -1
  231. package/build-module/components/inserter/search-results.js +4 -3
  232. package/build-module/components/inserter/search-results.js.map +1 -1
  233. package/build-module/components/inserter/tabs.js +1 -12
  234. package/build-module/components/inserter/tabs.js.map +1 -1
  235. package/build-module/components/inspector-controls/block-support-slot-container.js +13 -2
  236. package/build-module/components/inspector-controls/block-support-slot-container.js.map +1 -1
  237. package/build-module/components/inspector-controls/fill.js +25 -14
  238. package/build-module/components/inspector-controls/fill.js.map +1 -1
  239. package/build-module/components/inspector-controls/groups.js +5 -3
  240. package/build-module/components/inspector-controls/groups.js.map +1 -1
  241. package/build-module/components/inspector-controls/slot.js +15 -1
  242. package/build-module/components/inspector-controls/slot.js.map +1 -1
  243. package/build-module/components/inspector-controls-tabs/styles-tab.js +3 -0
  244. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  245. package/build-module/components/link-control/index.js +12 -2
  246. package/build-module/components/link-control/index.js.map +1 -1
  247. package/build-module/components/list-view/block-select-button.js +1 -3
  248. package/build-module/components/list-view/block-select-button.js.map +1 -1
  249. package/build-module/components/list-view/block.js +13 -1
  250. package/build-module/components/list-view/block.js.map +1 -1
  251. package/build-module/components/list-view/use-block-selection.js +30 -25
  252. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  253. package/build-module/components/media-placeholder/index.js +2 -2
  254. package/build-module/components/media-placeholder/index.js.map +1 -1
  255. package/build-module/components/media-placeholder/index.native.js +7 -7
  256. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  257. package/build-module/components/media-replace-flow/index.js +2 -3
  258. package/build-module/components/media-replace-flow/index.js.map +1 -1
  259. package/build-module/components/media-upload/constants.js +14 -0
  260. package/build-module/components/media-upload/constants.js.map +1 -0
  261. package/build-module/components/media-upload/index.native.js +53 -34
  262. package/build-module/components/media-upload/index.native.js.map +1 -1
  263. package/build-module/components/preview-options/index.js +1 -1
  264. package/build-module/components/preview-options/index.js.map +1 -1
  265. package/build-module/components/rich-text/index.js +35 -37
  266. package/build-module/components/rich-text/index.js.map +1 -1
  267. package/build-module/components/rich-text/index.native.js +15 -33
  268. package/build-module/components/rich-text/index.native.js.map +1 -1
  269. package/build-module/components/rich-text/multiline.js +87 -0
  270. package/build-module/components/rich-text/multiline.js.map +1 -0
  271. package/build-module/components/rich-text/split-value.js +10 -16
  272. package/build-module/components/rich-text/split-value.js.map +1 -1
  273. package/build-module/components/rich-text/use-enter.js +33 -42
  274. package/build-module/components/rich-text/use-enter.js.map +1 -1
  275. package/build-module/components/rich-text/use-paste-handler.js +19 -34
  276. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  277. package/build-module/components/spacing-sizes-control/utils.js +2 -2
  278. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  279. package/build-module/components/use-block-commands/index.js +28 -16
  280. package/build-module/components/use-block-commands/index.js.map +1 -1
  281. package/build-module/components/use-block-display-information/index.js +5 -2
  282. package/build-module/components/use-block-display-information/index.js.map +1 -1
  283. package/build-module/hooks/background.js +244 -0
  284. package/build-module/hooks/background.js.map +1 -0
  285. package/build-module/hooks/block-hooks.js +181 -0
  286. package/build-module/hooks/block-hooks.js.map +1 -0
  287. package/build-module/hooks/block-rename-ui.js +153 -0
  288. package/build-module/hooks/block-rename-ui.js.map +1 -0
  289. package/build-module/hooks/duotone.js +26 -39
  290. package/build-module/hooks/duotone.js.map +1 -1
  291. package/build-module/hooks/index.js +2 -2
  292. package/build-module/hooks/index.js.map +1 -1
  293. package/build-module/hooks/layout.js +33 -16
  294. package/build-module/hooks/layout.js.map +1 -1
  295. package/build-module/hooks/position.js +4 -2
  296. package/build-module/hooks/position.js.map +1 -1
  297. package/build-module/hooks/style.js +10 -3
  298. package/build-module/hooks/style.js.map +1 -1
  299. package/build-module/private-apis.js +2 -0
  300. package/build-module/private-apis.js.map +1 -1
  301. package/build-module/store/actions.js +33 -10
  302. package/build-module/store/actions.js.map +1 -1
  303. package/build-module/store/private-actions.js +39 -8
  304. package/build-module/store/private-actions.js.map +1 -1
  305. package/build-module/store/private-selectors.js +21 -0
  306. package/build-module/store/private-selectors.js.map +1 -1
  307. package/build-module/store/reducer.js +41 -1
  308. package/build-module/store/reducer.js.map +1 -1
  309. package/build-module/store/selectors.js +78 -22
  310. package/build-module/store/selectors.js.map +1 -1
  311. package/build-module/store/utils.js +0 -4
  312. package/build-module/store/utils.js.map +1 -1
  313. package/build-style/content-rtl.css +0 -1
  314. package/build-style/content.css +0 -1
  315. package/build-style/style-rtl.css +170 -127
  316. package/build-style/style.css +170 -127
  317. package/package.json +32 -32
  318. package/src/components/block-canvas/index.js +108 -0
  319. package/src/components/block-inspector/index.js +5 -1
  320. package/src/components/block-list/content.scss +0 -1
  321. package/src/components/block-patterns-list/index.js +32 -7
  322. package/src/components/block-patterns-list/style.scss +26 -9
  323. package/src/components/block-patterns-paging/index.js +92 -0
  324. package/src/components/block-patterns-paging/style.scss +42 -0
  325. package/src/components/block-settings-menu/block-settings-dropdown.js +44 -0
  326. package/src/components/block-settings-menu-controls/index.js +4 -9
  327. package/src/components/block-styles/index.js +1 -0
  328. package/src/components/block-styles/style.scss +3 -3
  329. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -6
  330. package/src/components/block-tools/block-contextual-toolbar.js +16 -5
  331. package/src/components/block-tools/block-selection-button.js +9 -1
  332. package/src/components/block-tools/style.scss +0 -98
  333. package/src/components/border-radius-control/input-controls.js +1 -1
  334. package/src/components/border-radius-control/linked-button.js +8 -11
  335. package/src/components/color-palette/test/__snapshots__/control.js.snap +34 -21
  336. package/src/components/colors/with-colors.js +3 -2
  337. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +8 -35
  338. package/src/components/default-block-appender/index.native.js +26 -3
  339. package/src/components/duotone/utils.js +65 -0
  340. package/src/components/editor-styles/index.js +32 -23
  341. package/src/components/global-styles/hooks.js +4 -112
  342. package/src/components/global-styles/image-settings-panel.js +71 -0
  343. package/src/components/global-styles/index.js +4 -3
  344. package/src/components/global-styles/use-global-styles-output.js +25 -16
  345. package/src/components/global-styles/utils.js +1 -2
  346. package/src/components/iframe/index.js +72 -33
  347. package/src/components/image-editor/use-save-image.js +2 -9
  348. package/src/components/image-editor/use-transform-image.js +9 -9
  349. package/src/components/index.js +1 -1
  350. package/src/components/index.native.js +2 -2
  351. package/src/components/inner-blocks/use-nested-settings-update.js +15 -10
  352. package/src/components/inserter/block-patterns-explorer/explorer.js +17 -5
  353. package/src/components/inserter/block-patterns-explorer/patterns-list.js +109 -40
  354. package/src/components/inserter/block-patterns-explorer/sidebar.js +23 -8
  355. package/src/components/inserter/block-patterns-source-filter.js +40 -0
  356. package/src/components/inserter/block-patterns-sync-filter.js +35 -0
  357. package/src/components/inserter/block-patterns-tab.js +168 -57
  358. package/src/components/inserter/hooks/use-patterns-paging.js +65 -0
  359. package/src/components/inserter/hooks/use-patterns-state.js +27 -16
  360. package/src/components/inserter/menu.js +15 -17
  361. package/src/components/inserter/search-results.js +6 -4
  362. package/src/components/inserter/style.scss +23 -2
  363. package/src/components/inserter/tabs.js +2 -12
  364. package/src/components/inserter/test/index.native.js +8 -12
  365. package/src/components/inspector-controls/block-support-slot-container.js +19 -3
  366. package/src/components/inspector-controls/fill.js +28 -14
  367. package/src/components/inspector-controls/groups.js +6 -2
  368. package/src/components/inspector-controls/slot.js +28 -3
  369. package/src/components/inspector-controls-tabs/styles-tab.js +4 -0
  370. package/src/components/link-control/index.js +13 -0
  371. package/src/components/link-control/style.scss +23 -2
  372. package/src/components/link-control/test/index.js +88 -6
  373. package/src/components/list-view/block-select-button.js +1 -3
  374. package/src/components/list-view/block.js +19 -1
  375. package/src/components/list-view/style.scss +1 -2
  376. package/src/components/list-view/use-block-selection.js +38 -32
  377. package/src/components/media-placeholder/README.md +2 -2
  378. package/src/components/media-placeholder/index.js +2 -2
  379. package/src/components/media-placeholder/index.native.js +11 -12
  380. package/src/components/media-replace-flow/index.js +2 -2
  381. package/src/components/media-replace-flow/test/index.js +5 -23
  382. package/src/components/media-upload/README.md +3 -2
  383. package/src/components/media-upload/constants.js +15 -0
  384. package/src/components/media-upload/index.native.js +66 -40
  385. package/src/components/media-upload/style.native.scss +4 -0
  386. package/src/components/media-upload/test/index.native.js +2 -2
  387. package/src/components/preview-options/README.md +7 -0
  388. package/src/components/preview-options/index.js +1 -1
  389. package/src/components/rich-text/index.js +48 -44
  390. package/src/components/rich-text/index.native.js +14 -42
  391. package/src/components/rich-text/multiline.js +121 -0
  392. package/src/components/rich-text/split-value.js +10 -35
  393. package/src/components/rich-text/use-enter.js +32 -42
  394. package/src/components/rich-text/use-paste-handler.js +16 -40
  395. package/src/components/spacing-sizes-control/style.scss +5 -7
  396. package/src/components/spacing-sizes-control/utils.js +1 -2
  397. package/src/components/use-block-commands/index.js +28 -20
  398. package/src/components/use-block-display-information/index.js +3 -0
  399. package/src/hooks/background.js +288 -0
  400. package/src/hooks/background.scss +57 -0
  401. package/src/hooks/block-hooks.js +257 -0
  402. package/src/hooks/block-hooks.scss +16 -0
  403. package/src/hooks/block-rename-ui.js +230 -0
  404. package/src/hooks/block-rename-ui.scss +3 -0
  405. package/src/hooks/duotone.js +42 -43
  406. package/src/hooks/index.js +2 -2
  407. package/src/hooks/layout.js +31 -33
  408. package/src/hooks/position.js +4 -3
  409. package/src/hooks/style.js +11 -2
  410. package/src/hooks/test/align.native.js +4 -3
  411. package/src/private-apis.js +2 -0
  412. package/src/store/actions.js +52 -10
  413. package/src/store/private-actions.js +37 -6
  414. package/src/store/private-selectors.js +21 -0
  415. package/src/store/reducer.js +38 -0
  416. package/src/store/selectors.js +107 -26
  417. package/src/store/test/actions.js +19 -8
  418. package/src/store/test/private-actions.js +17 -0
  419. package/src/store/test/reducer.js +25 -0
  420. package/src/store/test/selectors.js +130 -123
  421. package/src/store/utils.js +3 -10
  422. package/src/style.scss +4 -0
  423. package/build/components/duotone/components.js +0 -135
  424. package/build/components/duotone/components.js.map +0 -1
  425. package/build/components/duotone/index.js +0 -38
  426. package/build/components/duotone/index.js.map +0 -1
  427. package/build/components/global-styles/behaviors-panel.js +0 -64
  428. package/build/components/global-styles/behaviors-panel.js.map +0 -1
  429. package/build/components/inserter/reusable-blocks-tab.js +0 -85
  430. package/build/components/inserter/reusable-blocks-tab.js.map +0 -1
  431. package/build/hooks/auto-inserting-blocks.js +0 -174
  432. package/build/hooks/auto-inserting-blocks.js.map +0 -1
  433. package/build/hooks/behaviors.js +0 -173
  434. package/build/hooks/behaviors.js.map +0 -1
  435. package/build-module/components/duotone/components.js +0 -126
  436. package/build-module/components/duotone/components.js.map +0 -1
  437. package/build-module/components/duotone/index.js +0 -3
  438. package/build-module/components/duotone/index.js.map +0 -1
  439. package/build-module/components/global-styles/behaviors-panel.js +0 -57
  440. package/build-module/components/global-styles/behaviors-panel.js.map +0 -1
  441. package/build-module/components/inserter/reusable-blocks-tab.js +0 -76
  442. package/build-module/components/inserter/reusable-blocks-tab.js.map +0 -1
  443. package/build-module/hooks/auto-inserting-blocks.js +0 -167
  444. package/build-module/hooks/auto-inserting-blocks.js.map +0 -1
  445. package/build-module/hooks/behaviors.js +0 -166
  446. package/build-module/hooks/behaviors.js.map +0 -1
  447. package/src/components/duotone/components.js +0 -133
  448. package/src/components/duotone/index.js +0 -7
  449. package/src/components/global-styles/behaviors-panel.js +0 -71
  450. package/src/components/inserter/reusable-blocks-tab.js +0 -84
  451. package/src/components/inserter/test/reusable-blocks-tab.js +0 -73
  452. package/src/hooks/auto-inserting-blocks.js +0 -232
  453. package/src/hooks/behaviors.js +0 -206
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_components","require","_i18n","SYNC_TYPES","full","unsynced","exports","patternSyncOptions","value","label","__","BlockPatternsSyncFilter","setPatternSyncFilter","patternSyncFilter","_element","createElement","SelectControl","className","options","onChange"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-sync-filter.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { SelectControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nexport const SYNC_TYPES = {\n\tfull: 'fully',\n\tunsynced: 'unsynced',\n};\n\nconst patternSyncOptions = [\n\t{ value: 'all', label: __( 'All' ) },\n\t{ value: SYNC_TYPES.full, label: __( 'Synced' ) },\n\t{ value: SYNC_TYPES.unsynced, label: __( 'Standard' ) },\n];\n\nexport function BlockPatternsSyncFilter( {\n\tsetPatternSyncFilter,\n\tpatternSyncFilter,\n} ) {\n\treturn (\n\t\t<SelectControl\n\t\t\tclassName=\"block-editor-patterns__sync-status-filter\"\n\t\t\tlabel={ __( 'Syncing' ) }\n\t\t\toptions={ patternSyncOptions }\n\t\t\tvalue={ patternSyncFilter }\n\t\t\tonChange={ setPatternSyncFilter }\n\t\t\taria-label={ __( 'Filter patterns by sync type' ) }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACO,MAAME,UAAU,GAAG;EACzBC,IAAI,EAAE,OAAO;EACbC,QAAQ,EAAE;AACX,CAAC;AAACC,OAAA,CAAAH,UAAA,GAAAA,UAAA;AAEF,MAAMI,kBAAkB,GAAG,CAC1B;EAAEC,KAAK,EAAE,KAAK;EAAEC,KAAK,EAAE,IAAAC,QAAE,EAAE,KAAM;AAAE,CAAC,EACpC;EAAEF,KAAK,EAAEL,UAAU,CAACC,IAAI;EAAEK,KAAK,EAAE,IAAAC,QAAE,EAAE,QAAS;AAAE,CAAC,EACjD;EAAEF,KAAK,EAAEL,UAAU,CAACE,QAAQ;EAAEI,KAAK,EAAE,IAAAC,QAAE,EAAE,UAAW;AAAE,CAAC,CACvD;AAEM,SAASC,uBAAuBA,CAAE;EACxCC,oBAAoB;EACpBC;AACD,CAAC,EAAG;EACH,OACC,IAAAC,QAAA,CAAAC,aAAA,EAACf,WAAA,CAAAgB,aAAa;IACbC,SAAS,EAAC,2CAA2C;IACrDR,KAAK,EAAG,IAAAC,QAAE,EAAE,SAAU,CAAG;IACzBQ,OAAO,EAAGX,kBAAoB;IAC9BC,KAAK,EAAGK,iBAAmB;IAC3BM,QAAQ,EAAGP,oBAAsB;IACjC,cAAa,IAAAF,QAAE,EAAE,8BAA+B;EAAG,CACnD,CAAC;AAEJ"}
@@ -6,17 +6,26 @@ 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.usePatternsCategories = usePatternsCategories;
10
12
  var _element = require("@wordpress/element");
11
13
  var _i18n = require("@wordpress/i18n");
12
14
  var _compose = require("@wordpress/compose");
13
15
  var _components = require("@wordpress/components");
14
16
  var _icons = require("@wordpress/icons");
15
17
  var _dom = require("@wordpress/dom");
18
+ var _a11y = require("@wordpress/a11y");
16
19
  var _usePatternsState = _interopRequireDefault(require("./hooks/use-patterns-state"));
17
20
  var _blockPatternsList = _interopRequireDefault(require("../block-patterns-list"));
18
21
  var _explorer = _interopRequireDefault(require("./block-patterns-explorer/explorer"));
19
22
  var _mobileTabNavigation = _interopRequireDefault(require("./mobile-tab-navigation"));
23
+ var _blockPatternsPaging = _interopRequireDefault(require("../block-patterns-paging"));
24
+ var _usePatternsPaging = _interopRequireDefault(require("./hooks/use-patterns-paging"));
25
+ var _blockPatternsSourceFilter = _interopRequireWildcard(require("./block-patterns-source-filter"));
26
+ var _blockPatternsSyncFilter = require("./block-patterns-sync-filter");
27
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
29
  /**
21
30
  * WordPress dependencies
22
31
  */
@@ -26,12 +35,29 @@ var _mobileTabNavigation = _interopRequireDefault(require("./mobile-tab-navigati
26
35
  */
27
36
 
28
37
  const noop = () => {};
29
-
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);
38
+ const allPatternsCategory = {
39
+ name: 'allPatterns',
40
+ label: (0, _i18n.__)('All categories')
41
+ };
42
+ exports.allPatternsCategory = allPatternsCategory;
43
+ function isPatternFiltered(pattern, sourceFilter, syncFilter) {
44
+ if (sourceFilter === _blockPatternsSourceFilter.PATTERN_TYPES.theme && pattern.name.startsWith('core/block')) {
45
+ return true;
46
+ }
47
+ if (sourceFilter === _blockPatternsSourceFilter.PATTERN_TYPES.user && !pattern.id) {
48
+ return true;
49
+ }
50
+ if (sourceFilter === _blockPatternsSourceFilter.PATTERN_TYPES.user && syncFilter === _blockPatternsSyncFilter.SYNC_TYPES.full && pattern.syncStatus !== '') {
51
+ return true;
52
+ }
53
+ if (sourceFilter === _blockPatternsSourceFilter.PATTERN_TYPES.user && syncFilter === _blockPatternsSyncFilter.SYNC_TYPES.unsynced && pattern.syncStatus !== 'unsynced') {
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+ function usePatternsCategories(rootClientId, sourceFilter = 'all') {
59
+ const [patterns, allCategories] = (0, _usePatternsState.default)(undefined, rootClientId);
60
+ const filteredPatterns = (0, _element.useMemo)(() => sourceFilter === 'all' ? patterns : patterns.filter(pattern => !isPatternFiltered(pattern, sourceFilter)), [sourceFilter, patterns]);
35
61
  const hasRegisteredCategory = (0, _element.useCallback)(pattern => {
36
62
  if (!pattern.categories || !pattern.categories.length) {
37
63
  return false;
@@ -41,27 +67,23 @@ function usePatternsCategories(rootClientId) {
41
67
 
42
68
  // Remove any empty categories.
43
69
  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')) {
70
+ const categories = allCategories.filter(category => filteredPatterns.some(pattern => pattern.categories?.includes(category.name))).sort((a, b) => a.label.localeCompare(b.label));
71
+ if (filteredPatterns.some(pattern => !hasRegisteredCategory(pattern)) && !categories.find(category => category.name === 'uncategorized')) {
58
72
  categories.push({
59
73
  name: 'uncategorized',
60
74
  label: (0, _i18n._x)('Uncategorized')
61
75
  });
62
76
  }
77
+ if (filteredPatterns.length > 0) {
78
+ categories.unshift({
79
+ name: allPatternsCategory.name,
80
+ label: allPatternsCategory.label
81
+ });
82
+ }
83
+ (0, _a11y.speak)((0, _i18n.sprintf)( /* translators: %d: number of categories . */
84
+ (0, _i18n._n)('%d category button displayed.', '%d category buttons displayed.', categories.length), categories.length));
63
85
  return categories;
64
- }, [allCategories, allPatterns, hasRegisteredCategory]);
86
+ }, [allCategories, filteredPatterns, hasRegisteredCategory]);
65
87
  return populatedCategories;
66
88
  }
67
89
  function BlockPatternsCategoryDialog({
@@ -69,7 +91,8 @@ function BlockPatternsCategoryDialog({
69
91
  onInsert,
70
92
  onHover,
71
93
  category,
72
- showTitlesAsTooltip
94
+ showTitlesAsTooltip,
95
+ patternFilter
73
96
  }) {
74
97
  const container = (0, _element.useRef)();
75
98
  (0, _element.useEffect)(() => {
@@ -87,7 +110,8 @@ function BlockPatternsCategoryDialog({
87
110
  onInsert: onInsert,
88
111
  onHover: onHover,
89
112
  category: category,
90
- showTitlesAsTooltip: showTitlesAsTooltip
113
+ showTitlesAsTooltip: showTitlesAsTooltip,
114
+ patternFilter: patternFilter
91
115
  }));
92
116
  }
93
117
  function BlockPatternsCategoryPanel({
@@ -95,12 +119,21 @@ function BlockPatternsCategoryPanel({
95
119
  onInsert,
96
120
  onHover = noop,
97
121
  category,
98
- showTitlesAsTooltip
122
+ showTitlesAsTooltip,
123
+ patternFilter
99
124
  }) {
100
- const [allPatterns,, onClick] = (0, _usePatternsState.default)(onInsert, rootClientId);
101
- const availableCategories = usePatternsCategories(rootClientId);
125
+ const [allPatterns,, onClickPattern] = (0, _usePatternsState.default)(onInsert, rootClientId);
126
+ const [patternSyncFilter, setPatternSyncFilter] = (0, _element.useState)('all');
127
+ const availableCategories = usePatternsCategories(rootClientId, patternFilter);
128
+ const container = (0, _element.useRef)();
102
129
  const currentCategoryPatterns = (0, _element.useMemo)(() => allPatterns.filter(pattern => {
103
130
  var _pattern$categories$f;
131
+ if (isPatternFiltered(pattern, patternFilter, patternSyncFilter)) {
132
+ return false;
133
+ }
134
+ if (category.name === allPatternsCategory.name) {
135
+ return true;
136
+ }
104
137
  if (category.name !== 'uncategorized') {
105
138
  return pattern.categories?.includes(category.name);
106
139
  }
@@ -109,28 +142,33 @@ function BlockPatternsCategoryPanel({
109
142
  // or with no available category.
110
143
  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
144
  return availablePatternCategories.length === 0;
112
- }), [allPatterns, availableCategories, category.name]);
113
- const categoryPatternsList = (0, _compose.useAsyncList)(currentCategoryPatterns);
145
+ }), [allPatterns, availableCategories, category.name, patternFilter, patternSyncFilter]);
146
+ const pagingProps = (0, _usePatternsPaging.default)(currentCategoryPatterns, category, container);
114
147
 
115
148
  // Hide block pattern preview on unmount.
149
+ // eslint-disable-next-line react-hooks/exhaustive-deps
116
150
  (0, _element.useEffect)(() => () => onHover(null), []);
117
- if (!currentCategoryPatterns.length) {
118
- return null;
119
- }
120
151
  return (0, _element.createElement)("div", {
121
- className: "block-editor-inserter__patterns-category-panel"
152
+ className: "block-editor-inserter__patterns-category-panel",
153
+ ref: container
122
154
  }, (0, _element.createElement)("div", {
123
155
  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,
156
+ }, category.label), (0, _element.createElement)("p", null, category.description), patternFilter === _blockPatternsSourceFilter.PATTERN_TYPES.user && (0, _element.createElement)(_blockPatternsSyncFilter.BlockPatternsSyncFilter, {
157
+ patternSyncFilter: patternSyncFilter,
158
+ setPatternSyncFilter: setPatternSyncFilter
159
+ }), !currentCategoryPatterns.length && (0, _element.createElement)("div", null, (0, _i18n.__)('No results found')), currentCategoryPatterns.length > 0 && (0, _element.createElement)(_blockPatternsList.default, {
160
+ shownPatterns: pagingProps.categoryPatternsAsyncList,
161
+ blockPatterns: pagingProps.categoryPatterns,
162
+ onClickPattern: onClickPattern,
128
163
  onHover: onHover,
129
164
  label: category.label,
130
165
  orientation: "vertical",
131
- category: category.label,
166
+ category: category.name,
132
167
  isDraggable: true,
133
- showTitlesAsTooltip: showTitlesAsTooltip
168
+ showTitlesAsTooltip: showTitlesAsTooltip,
169
+ patternFilter: patternFilter
170
+ }), pagingProps.numPages > 1 && (0, _element.createElement)(_blockPatternsPaging.default, {
171
+ ...pagingProps
134
172
  }));
135
173
  }
136
174
  function BlockPatternsTabs({
@@ -140,20 +178,27 @@ function BlockPatternsTabs({
140
178
  rootClientId
141
179
  }) {
142
180
  const [showPatternsExplorer, setShowPatternsExplorer] = (0, _element.useState)(false);
143
- const categories = usePatternsCategories(rootClientId);
181
+ const [patternSourceFilter, setPatternSourceFilter] = (0, _element.useState)('all');
182
+ const categories = usePatternsCategories(rootClientId, patternSourceFilter);
144
183
  const initialCategory = selectedCategory || categories[0];
145
184
  const isMobile = (0, _compose.useViewportMatch)('medium', '<');
146
185
  return (0, _element.createElement)(_element.Fragment, null, !isMobile && (0, _element.createElement)("div", {
147
186
  className: "block-editor-inserter__block-patterns-tabs-container"
148
187
  }, (0, _element.createElement)("nav", {
149
- "aria-label": (0, _i18n.__)('Block pattern categories')
150
- }, (0, _element.createElement)(_components.__experimentalItemGroup, {
151
- role: "list",
188
+ "aria-label": (0, _i18n.__)('Block pattern categories'),
152
189
  className: "block-editor-inserter__block-patterns-tabs"
190
+ }, (0, _element.createElement)(_blockPatternsSourceFilter.default, {
191
+ value: patternSourceFilter,
192
+ onChange: value => {
193
+ setPatternSourceFilter(value);
194
+ onSelectCategory(allPatternsCategory, value);
195
+ }
196
+ }), (0, _element.createElement)(_components.__experimentalItemGroup, {
197
+ role: "list"
153
198
  }, categories.map(category => (0, _element.createElement)(_components.__experimentalItem, {
154
199
  role: "listitem",
155
200
  key: category.name,
156
- onClick: () => onSelectCategory(category),
201
+ onClick: () => onSelectCategory(category, patternSourceFilter),
157
202
  className: category === selectedCategory ? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category' : 'block-editor-inserter__patterns-category',
158
203
  "aria-label": category.label,
159
204
  "aria-current": category === selectedCategory ? 'true' : undefined
@@ -175,7 +220,8 @@ function BlockPatternsTabs({
175
220
  })), showPatternsExplorer && (0, _element.createElement)(_explorer.default, {
176
221
  initialCategory: initialCategory,
177
222
  patternCategories: categories,
178
- onModalClose: () => setShowPatternsExplorer(false)
223
+ onModalClose: () => setShowPatternsExplorer(false),
224
+ rootClientId: rootClientId
179
225
  }));
180
226
  }
181
227
  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":"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"}
1
+ {"version":3,"names":["_element","require","_i18n","_compose","_components","_icons","_dom","_a11y","_usePatternsState","_interopRequireDefault","_blockPatternsList","_explorer","_mobileTabNavigation","_blockPatternsPaging","_usePatternsPaging","_blockPatternsSourceFilter","_interopRequireWildcard","_blockPatternsSyncFilter","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","noop","allPatternsCategory","name","label","__","exports","isPatternFiltered","pattern","sourceFilter","syncFilter","PATTERN_TYPES","theme","startsWith","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","allPatterns","onClickPattern","patternSyncFilter","setPatternSyncFilter","useState","availableCategories","currentCategoryPatterns","_pattern$categories$f","availablePatternCategories","availableCategory","pagingProps","usePatternsPaging","description","BlockPatternsSyncFilter","shownPatterns","categoryPatternsAsyncList","blockPatterns","categoryPatterns","orientation","isDraggable","numPages","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","patternSourceFilter","setPatternSourceFilter","initialCategory","isMobile","useViewportMatch","Fragment","value","onChange","__experimentalItemGroup","role","map","__experimentalItem","onClick","__experimentalHStack","FlexBlock","Icon","icon","isRTL","chevronLeft","chevronRight","Button","variant","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\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 BlockPatternsPaging from '../block-patterns-paging';\nimport usePatternsPaging from './hooks/use-patterns-paging';\nimport {\n\tPATTERN_TYPES,\n\tdefault as BlockPatternsSourceFilter,\n} from './block-patterns-source-filter';\nimport {\n\tBlockPatternsSyncFilter,\n\tSYNC_TYPES,\n} from './block-patterns-sync-filter';\n\nconst noop = () => {};\n\nexport const allPatternsCategory = {\n\tname: 'allPatterns',\n\tlabel: __( 'All categories' ),\n};\n\nexport function isPatternFiltered( pattern, sourceFilter, syncFilter ) {\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.theme &&\n\t\tpattern.name.startsWith( 'core/block' )\n\t) {\n\t\treturn true;\n\t}\n\tif ( sourceFilter === PATTERN_TYPES.user && ! pattern.id ) {\n\t\treturn true;\n\t}\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.user &&\n\t\tsyncFilter === SYNC_TYPES.full &&\n\t\tpattern.syncStatus !== ''\n\t) {\n\t\treturn true;\n\t}\n\tif (\n\t\tsourceFilter === PATTERN_TYPES.user &&\n\t\tsyncFilter === SYNC_TYPES.unsynced &&\n\t\tpattern.syncStatus !== 'unsynced'\n\t) {\n\t\treturn true;\n\t}\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.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\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\tpatternFilter,\n} ) {\n\tconst [ allPatterns, , onClickPattern ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\tconst [ patternSyncFilter, setPatternSyncFilter ] = useState( 'all' );\n\n\tconst availableCategories = usePatternsCategories(\n\t\trootClientId,\n\t\tpatternFilter\n\t);\n\tconst container = 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\tpatternFilter,\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 !== '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\tpatternFilter,\n\t\t\tpatternSyncFilter,\n\t\t]\n\t);\n\n\tconst pagingProps = usePatternsPaging(\n\t\tcurrentCategoryPatterns,\n\t\tcategory,\n\t\tcontainer\n\t);\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\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-inserter__patterns-category-panel\"\n\t\t\tref={ container }\n\t\t>\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{ patternFilter === PATTERN_TYPES.user && (\n\t\t\t\t<BlockPatternsSyncFilter\n\t\t\t\t\tpatternSyncFilter={ patternSyncFilter }\n\t\t\t\t\tsetPatternSyncFilter={ setPatternSyncFilter }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! currentCategoryPatterns.length && (\n\t\t\t\t<div>{ __( 'No results found' ) }</div>\n\t\t\t) }\n\t\t\t{ currentCategoryPatterns.length > 0 && (\n\t\t\t\t<BlockPatternList\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={ patternFilter }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ pagingProps.numPages > 1 && (\n\t\t\t\t<BlockPatternsPaging { ...pagingProps } />\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 [ patternSourceFilter, setPatternSourceFilter ] = useState( 'all' );\n\n\tconst categories = usePatternsCategories(\n\t\trootClientId,\n\t\tpatternSourceFilter\n\t);\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<BlockPatternsSourceFilter\n\t\t\t\t\t\t\tvalue={ patternSourceFilter }\n\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\tsetPatternSourceFilter( value );\n\t\t\t\t\t\t\t\tonSelectCategory( allPatternsCategory, value );\n\t\t\t\t\t\t\t} }\n\t\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(\n\t\t\t\t\t\t\t\t\t\t\tcategory,\n\t\t\t\t\t\t\t\t\t\t\tpatternSourceFilter\n\t\t\t\t\t\t\t\t\t\t)\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\trootClientId={ rootClientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"],"mappings":"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"}
@@ -0,0 +1,57 @@
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
+ return {
49
+ totalItems,
50
+ categoryPatterns,
51
+ categoryPatternsAsyncList,
52
+ numPages,
53
+ changePage,
54
+ currentPage
55
+ };
56
+ }
57
+ //# 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"],"sources":["@wordpress/block-editor/src/components/inserter/hooks/use-patterns-paging.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useState } 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\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;EACD,OAAO;IACNb,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"}
@@ -14,7 +14,6 @@ var _tips = _interopRequireDefault(require("./tips"));
14
14
  var _previewPanel = _interopRequireDefault(require("./preview-panel"));
15
15
  var _blockTypesTab = _interopRequireDefault(require("./block-types-tab"));
16
16
  var _blockPatternsTab = _interopRequireWildcard(require("./block-patterns-tab"));
17
- var _reusableBlocksTab = _interopRequireDefault(require("./reusable-blocks-tab"));
18
17
  var _mediaTab = require("./media-tab");
19
18
  var _searchResults = _interopRequireDefault(require("./search-results"));
20
19
  var _useDebouncedInput = _interopRequireDefault(require("./hooks/use-debounced-input"));
@@ -50,6 +49,7 @@ function InserterMenu({
50
49
  const [filterValue, setFilterValue, delayedFilterValue] = (0, _useDebouncedInput.default)(__experimentalFilterValue);
51
50
  const [hoveredItem, setHoveredItem] = (0, _element.useState)(null);
52
51
  const [selectedPatternCategory, setSelectedPatternCategory] = (0, _element.useState)(null);
52
+ const [patternFilter, setPatternFilter] = (0, _element.useState)('all');
53
53
  const [selectedMediaCategory, setSelectedMediaCategory] = (0, _element.useState)(null);
54
54
  const [selectedTab, setSelectedTab] = (0, _element.useState)(null);
55
55
  const [destinationRootClientId, onInsertBlocks, onToggleInsertionPoint] = (0, _useInsertionPoint.default)({
@@ -96,8 +96,9 @@ function InserterMenu({
96
96
  const onHoverPattern = (0, _element.useCallback)(item => {
97
97
  onToggleInsertionPoint(!!item);
98
98
  }, [onToggleInsertionPoint]);
99
- const onClickPatternCategory = (0, _element.useCallback)(patternCategory => {
99
+ const onClickPatternCategory = (0, _element.useCallback)((patternCategory, filter) => {
100
100
  setSelectedPatternCategory(patternCategory);
101
+ setPatternFilter(filter);
101
102
  }, [setSelectedPatternCategory]);
102
103
  const blocksTab = (0, _element.useMemo)(() => (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("div", {
103
104
  className: "block-editor-inserter__block-list"
@@ -117,11 +118,6 @@ function InserterMenu({
117
118
  onSelectCategory: onClickPatternCategory,
118
119
  selectedCategory: selectedPatternCategory
119
120
  }), [destinationRootClientId, onInsertPattern, onClickPatternCategory, selectedPatternCategory]);
120
- const reusableBlocksTab = (0, _element.useMemo)(() => (0, _element.createElement)(_reusableBlocksTab.default, {
121
- rootClientId: destinationRootClientId,
122
- onInsert: onInsert,
123
- onHover: onHover
124
- }), [destinationRootClientId, onInsert, onHover]);
125
121
  const mediaTab = (0, _element.useMemo)(() => (0, _element.createElement)(_mediaTab.MediaTab, {
126
122
  rootClientId: destinationRootClientId,
127
123
  selectedCategory: selectedMediaCategory,
@@ -133,12 +129,10 @@ function InserterMenu({
133
129
  return blocksTab;
134
130
  } else if (tab.name === 'patterns') {
135
131
  return patternsTab;
136
- } else if (tab.name === 'reusable') {
137
- return reusableBlocksTab;
138
132
  } else if (tab.name === 'media') {
139
133
  return mediaTab;
140
134
  }
141
- }, [blocksTab, patternsTab, reusableBlocksTab, mediaTab]);
135
+ }, [blocksTab, patternsTab, mediaTab]);
142
136
  const searchRef = (0, _element.useRef)();
143
137
  (0, _element.useImperativeHandle)(ref, () => ({
144
138
  focusSearch: () => {
@@ -148,6 +142,13 @@ function InserterMenu({
148
142
  const showPatternPanel = selectedTab === 'patterns' && !delayedFilterValue && selectedPatternCategory;
149
143
  const showAsTabs = !delayedFilterValue && (showPatterns || hasReusableBlocks || showMedia);
150
144
  const showMediaPanel = selectedTab === 'media' && !delayedFilterValue && selectedMediaCategory;
145
+ const handleSetSelectedTab = value => {
146
+ // If no longer on patterns tab remove the category setting.
147
+ if (value !== 'patterns') {
148
+ setSelectedPatternCategory(null);
149
+ }
150
+ setSelectedTab(value);
151
+ };
151
152
  return (0, _element.createElement)("div", {
152
153
  className: "block-editor-inserter__menu"
153
154
  }, (0, _element.createElement)("div", {
@@ -183,7 +184,7 @@ function InserterMenu({
183
184
  showReusableBlocks: hasReusableBlocks,
184
185
  showMedia: showMedia,
185
186
  prioritizePatterns: prioritizePatterns,
186
- onSelect: setSelectedTab
187
+ onSelect: handleSetSelectedTab
187
188
  }, getCurrentTab), !delayedFilterValue && !showAsTabs && (0, _element.createElement)("div", {
188
189
  className: "block-editor-inserter__no-tab-container"
189
190
  }, blocksTab)), showMediaPanel && (0, _element.createElement)(_mediaTab.MediaCategoryDialog, {
@@ -197,6 +198,7 @@ function InserterMenu({
197
198
  onInsert: onInsertPattern,
198
199
  onHover: onHoverPattern,
199
200
  category: selectedPatternCategory,
201
+ patternFilter: patternFilter,
200
202
  showTitlesAsTooltip: true
201
203
  }));
202
204
  }