@wordpress/edit-site 5.2.0 → 5.3.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 (374) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/add-new-template/add-custom-generic-template-modal.js +8 -10
  3. package/build/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
  4. package/build/components/add-new-template/add-custom-template-modal.js +0 -1
  5. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
  6. package/build/components/add-new-template/new-template-part.js +5 -29
  7. package/build/components/add-new-template/new-template-part.js.map +1 -1
  8. package/build/components/add-new-template/utils.js +1 -9
  9. package/build/components/add-new-template/utils.js.map +1 -1
  10. package/build/components/app/index.js +2 -7
  11. package/build/components/app/index.js.map +1 -1
  12. package/build/components/block-editor/index.js +13 -11
  13. package/build/components/block-editor/index.js.map +1 -1
  14. package/build/components/block-editor/inserter-media-categories.js +237 -0
  15. package/build/components/block-editor/inserter-media-categories.js.map +1 -0
  16. package/build/components/canvas-spinner/index.js +20 -0
  17. package/build/components/canvas-spinner/index.js.map +1 -0
  18. package/build/components/create-template-part-modal/index.js +4 -2
  19. package/build/components/create-template-part-modal/index.js.map +1 -1
  20. package/build/components/editor/index.js +4 -2
  21. package/build/components/editor/index.js.map +1 -1
  22. package/build/components/error-boundary/index.js +2 -12
  23. package/build/components/error-boundary/index.js.map +1 -1
  24. package/build/components/error-boundary/warning.js +5 -28
  25. package/build/components/error-boundary/warning.js.map +1 -1
  26. package/build/components/global-styles/block-preview-panel.js +2 -2
  27. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  28. package/build/components/global-styles/border-panel.js +17 -9
  29. package/build/components/global-styles/border-panel.js.map +1 -1
  30. package/build/components/global-styles/color-palette-panel.js +13 -7
  31. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  32. package/build/components/global-styles/context-menu.js +39 -4
  33. package/build/components/global-styles/context-menu.js.map +1 -1
  34. package/build/components/global-styles/custom-css.js +65 -14
  35. package/build/components/global-styles/custom-css.js.map +1 -1
  36. package/build/components/global-styles/dimensions-panel.js +49 -31
  37. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  38. package/build/components/global-styles/global-styles-provider.js +13 -3
  39. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  40. package/build/components/global-styles/gradients-palette-panel.js +17 -11
  41. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  42. package/build/components/global-styles/hooks.js +21 -142
  43. package/build/components/global-styles/hooks.js.map +1 -1
  44. package/build/components/global-styles/index.js +0 -28
  45. package/build/components/global-styles/index.js.map +1 -1
  46. package/build/components/global-styles/palette.js +11 -4
  47. package/build/components/global-styles/palette.js.map +1 -1
  48. package/build/components/global-styles/preview.js +18 -15
  49. package/build/components/global-styles/preview.js.map +1 -1
  50. package/build/components/global-styles/screen-background-color.js +27 -13
  51. package/build/components/global-styles/screen-background-color.js.map +1 -1
  52. package/build/components/global-styles/screen-border.js +10 -4
  53. package/build/components/global-styles/screen-border.js.map +1 -1
  54. package/build/components/global-styles/screen-button-color.js +16 -9
  55. package/build/components/global-styles/screen-button-color.js.map +1 -1
  56. package/build/components/global-styles/screen-colors.js +43 -34
  57. package/build/components/global-styles/screen-colors.js.map +1 -1
  58. package/build/components/global-styles/screen-css.js +20 -8
  59. package/build/components/global-styles/screen-css.js.map +1 -1
  60. package/build/components/global-styles/screen-heading-color.js +23 -16
  61. package/build/components/global-styles/screen-heading-color.js.map +1 -1
  62. package/build/components/global-styles/screen-layout.js +3 -3
  63. package/build/components/global-styles/screen-layout.js.map +1 -1
  64. package/build/components/global-styles/screen-link-color.js +18 -11
  65. package/build/components/global-styles/screen-link-color.js.map +1 -1
  66. package/build/components/global-styles/screen-root.js +25 -9
  67. package/build/components/global-styles/screen-root.js.map +1 -1
  68. package/build/components/global-styles/screen-style-variations.js +8 -4
  69. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  70. package/build/components/global-styles/screen-text-color.js +14 -7
  71. package/build/components/global-styles/screen-text-color.js.map +1 -1
  72. package/build/components/global-styles/screen-typography.js +18 -12
  73. package/build/components/global-styles/screen-typography.js.map +1 -1
  74. package/build/components/global-styles/shadow-panel.js +196 -0
  75. package/build/components/global-styles/shadow-panel.js.map +1 -0
  76. package/build/components/global-styles/typography-panel.js +43 -29
  77. package/build/components/global-styles/typography-panel.js.map +1 -1
  78. package/build/components/global-styles/typography-preview.js +19 -9
  79. package/build/components/global-styles/typography-preview.js.map +1 -1
  80. package/build/components/global-styles/ui.js +85 -34
  81. package/build/components/global-styles/ui.js.map +1 -1
  82. package/build/components/global-styles/utils.js +5 -334
  83. package/build/components/global-styles/utils.js.map +1 -1
  84. package/build/components/global-styles-renderer/index.js +7 -5
  85. package/build/components/global-styles-renderer/index.js.map +1 -1
  86. package/build/components/header-edit-mode/document-actions/index.js +2 -2
  87. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  88. package/build/components/keyboard-shortcut-help-modal/index.js +0 -1
  89. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  90. package/build/components/layout/index.js +6 -8
  91. package/build/components/layout/index.js.map +1 -1
  92. package/build/components/list/actions/rename-menu-item.js +8 -11
  93. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  94. package/build/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +1 -2
  95. package/build/components/navigation-inspector/index.js.map +1 -0
  96. package/build/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +13 -15
  97. package/build/components/navigation-inspector/navigation-menu.js.map +1 -0
  98. package/build/components/sidebar/index.js +3 -1
  99. package/build/components/sidebar/index.js.map +1 -1
  100. package/build/components/sidebar-edit-mode/global-styles-sidebar.js +3 -18
  101. package/build/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  102. package/build/components/sidebar-edit-mode/index.js +1 -14
  103. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  104. package/build/components/sidebar-navigation-screen/index.js +3 -2
  105. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  106. package/build/components/sidebar-navigation-screen-main/index.js +23 -1
  107. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  108. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +35 -0
  109. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
  110. package/build/components/sidebar-navigation-screen-templates/index.js +3 -8
  111. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  112. package/build/components/site-hub/index.js +2 -2
  113. package/build/components/site-hub/index.js.map +1 -1
  114. package/build/components/site-icon/index.js +1 -1
  115. package/build/components/site-icon/index.js.map +1 -1
  116. package/build/components/style-book/index.js +7 -4
  117. package/build/components/style-book/index.js.map +1 -1
  118. package/build/components/template-part-converter/convert-to-template-part.js +5 -9
  119. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  120. package/build/experiments.js +19 -0
  121. package/build/experiments.js.map +1 -0
  122. package/build/hooks/push-changes-to-global-styles/index.js +65 -6
  123. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  124. package/build/index.js +53 -60
  125. package/build/index.js.map +1 -1
  126. package/build/store/selectors.js +7 -27
  127. package/build/store/selectors.js.map +1 -1
  128. package/build/store/utils.js +77 -0
  129. package/build/store/utils.js.map +1 -0
  130. package/build/utils/template-part-create.js +71 -0
  131. package/build/utils/template-part-create.js.map +1 -0
  132. package/build-module/components/add-new-template/add-custom-generic-template-modal.js +9 -11
  133. package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
  134. package/build-module/components/add-new-template/add-custom-template-modal.js +0 -1
  135. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
  136. package/build-module/components/add-new-template/new-template-part.js +4 -27
  137. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  138. package/build-module/components/add-new-template/utils.js +0 -5
  139. package/build-module/components/add-new-template/utils.js.map +1 -1
  140. package/build-module/components/app/index.js +2 -7
  141. package/build-module/components/app/index.js.map +1 -1
  142. package/build-module/components/block-editor/index.js +14 -12
  143. package/build-module/components/block-editor/index.js.map +1 -1
  144. package/build-module/components/block-editor/inserter-media-categories.js +225 -0
  145. package/build-module/components/block-editor/inserter-media-categories.js.map +1 -0
  146. package/build-module/components/canvas-spinner/index.js +12 -0
  147. package/build-module/components/canvas-spinner/index.js.map +1 -0
  148. package/build-module/components/create-template-part-modal/index.js +5 -3
  149. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  150. package/build-module/components/editor/index.js +3 -2
  151. package/build-module/components/editor/index.js.map +1 -1
  152. package/build-module/components/error-boundary/index.js +2 -12
  153. package/build-module/components/error-boundary/index.js.map +1 -1
  154. package/build-module/components/error-boundary/warning.js +5 -28
  155. package/build-module/components/error-boundary/warning.js.map +1 -1
  156. package/build-module/components/global-styles/block-preview-panel.js +2 -2
  157. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  158. package/build-module/components/global-styles/border-panel.js +17 -11
  159. package/build-module/components/global-styles/border-panel.js.map +1 -1
  160. package/build-module/components/global-styles/color-palette-panel.js +11 -7
  161. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  162. package/build-module/components/global-styles/context-menu.js +40 -8
  163. package/build-module/components/global-styles/context-menu.js.map +1 -1
  164. package/build-module/components/global-styles/custom-css.js +61 -15
  165. package/build-module/components/global-styles/custom-css.js.map +1 -1
  166. package/build-module/components/global-styles/dimensions-panel.js +49 -32
  167. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  168. package/build-module/components/global-styles/global-styles-provider.js +7 -2
  169. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  170. package/build-module/components/global-styles/gradients-palette-panel.js +15 -11
  171. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  172. package/build-module/components/global-styles/hooks.js +23 -134
  173. package/build-module/components/global-styles/hooks.js.map +1 -1
  174. package/build-module/components/global-styles/index.js +0 -2
  175. package/build-module/components/global-styles/index.js.map +1 -1
  176. package/build-module/components/global-styles/palette.js +10 -5
  177. package/build-module/components/global-styles/palette.js.map +1 -1
  178. package/build-module/components/global-styles/preview.js +18 -14
  179. package/build-module/components/global-styles/preview.js.map +1 -1
  180. package/build-module/components/global-styles/screen-background-color.js +26 -15
  181. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  182. package/build-module/components/global-styles/screen-border.js +10 -5
  183. package/build-module/components/global-styles/screen-border.js.map +1 -1
  184. package/build-module/components/global-styles/screen-button-color.js +16 -11
  185. package/build-module/components/global-styles/screen-button-color.js.map +1 -1
  186. package/build-module/components/global-styles/screen-colors.js +43 -37
  187. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  188. package/build-module/components/global-styles/screen-css.js +21 -9
  189. package/build-module/components/global-styles/screen-css.js.map +1 -1
  190. package/build-module/components/global-styles/screen-heading-color.js +23 -18
  191. package/build-module/components/global-styles/screen-heading-color.js.map +1 -1
  192. package/build-module/components/global-styles/screen-layout.js +4 -4
  193. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  194. package/build-module/components/global-styles/screen-link-color.js +18 -13
  195. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  196. package/build-module/components/global-styles/screen-root.js +23 -9
  197. package/build-module/components/global-styles/screen-root.js.map +1 -1
  198. package/build-module/components/global-styles/screen-style-variations.js +5 -2
  199. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  200. package/build-module/components/global-styles/screen-text-color.js +14 -9
  201. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  202. package/build-module/components/global-styles/screen-typography.js +16 -12
  203. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  204. package/build-module/components/global-styles/shadow-panel.js +177 -0
  205. package/build-module/components/global-styles/shadow-panel.js.map +1 -0
  206. package/build-module/components/global-styles/typography-panel.js +43 -31
  207. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  208. package/build-module/components/global-styles/typography-preview.js +17 -9
  209. package/build-module/components/global-styles/typography-preview.js.map +1 -1
  210. package/build-module/components/global-styles/ui.js +80 -35
  211. package/build-module/components/global-styles/ui.js.map +1 -1
  212. package/build-module/components/global-styles/utils.js +4 -319
  213. package/build-module/components/global-styles/utils.js.map +1 -1
  214. package/build-module/components/global-styles-renderer/index.js +5 -5
  215. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  216. package/build-module/components/header-edit-mode/document-actions/index.js +2 -2
  217. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  218. package/build-module/components/keyboard-shortcut-help-modal/index.js +0 -1
  219. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  220. package/build-module/components/layout/index.js +6 -8
  221. package/build-module/components/layout/index.js.map +1 -1
  222. package/build-module/components/list/actions/rename-menu-item.js +9 -12
  223. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  224. package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +1 -2
  225. package/build-module/components/navigation-inspector/index.js.map +1 -0
  226. package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +13 -16
  227. package/build-module/components/navigation-inspector/navigation-menu.js.map +1 -0
  228. package/build-module/components/sidebar/index.js +2 -1
  229. package/build-module/components/sidebar/index.js.map +1 -1
  230. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js +6 -21
  231. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  232. package/build-module/components/sidebar-edit-mode/index.js +1 -13
  233. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  234. package/build-module/components/sidebar-navigation-screen/index.js +3 -2
  235. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  236. package/build-module/components/sidebar-navigation-screen-main/index.js +22 -2
  237. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  238. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +23 -0
  239. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
  240. package/build-module/components/sidebar-navigation-screen-templates/index.js +4 -9
  241. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  242. package/build-module/components/site-hub/index.js +2 -2
  243. package/build-module/components/site-hub/index.js.map +1 -1
  244. package/build-module/components/site-icon/index.js +1 -1
  245. package/build-module/components/site-icon/index.js.map +1 -1
  246. package/build-module/components/style-book/index.js +8 -5
  247. package/build-module/components/style-book/index.js.map +1 -1
  248. package/build-module/components/template-part-converter/convert-to-template-part.js +5 -9
  249. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  250. package/build-module/experiments.js +9 -0
  251. package/build-module/experiments.js.map +1 -0
  252. package/build-module/hooks/push-changes-to-global-styles/index.js +62 -3
  253. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  254. package/build-module/index.js +52 -60
  255. package/build-module/index.js.map +1 -1
  256. package/build-module/store/selectors.js +6 -26
  257. package/build-module/store/selectors.js.map +1 -1
  258. package/build-module/store/utils.js +66 -0
  259. package/build-module/store/utils.js.map +1 -0
  260. package/build-module/utils/template-part-create.js +53 -0
  261. package/build-module/utils/template-part-create.js.map +1 -0
  262. package/build-style/style-rtl.css +314 -216
  263. package/build-style/style.css +314 -216
  264. package/package.json +32 -30
  265. package/src/components/add-new-template/add-custom-generic-template-modal.js +20 -28
  266. package/src/components/add-new-template/add-custom-template-modal.js +0 -1
  267. package/src/components/add-new-template/new-template-part.js +11 -32
  268. package/src/components/add-new-template/style.scss +0 -4
  269. package/src/components/add-new-template/utils.js +0 -14
  270. package/src/components/app/index.js +2 -2
  271. package/src/components/block-editor/index.js +12 -25
  272. package/src/components/block-editor/inserter-media-categories.js +247 -0
  273. package/src/components/block-editor/style.scss +19 -7
  274. package/src/components/canvas-spinner/index.js +12 -0
  275. package/src/components/canvas-spinner/style.scss +7 -0
  276. package/src/components/create-template-part-modal/index.js +75 -67
  277. package/src/components/create-template-part-modal/style.scss +0 -10
  278. package/src/components/editor/index.js +4 -2
  279. package/src/components/error-boundary/index.js +2 -10
  280. package/src/components/error-boundary/warning.js +6 -35
  281. package/src/components/global-styles/README.md +1 -75
  282. package/src/components/global-styles/block-preview-panel.js +2 -2
  283. package/src/components/global-styles/border-panel.js +19 -17
  284. package/src/components/global-styles/color-palette-panel.js +10 -7
  285. package/src/components/global-styles/context-menu.js +114 -44
  286. package/src/components/global-styles/custom-css.js +76 -19
  287. package/src/components/global-styles/dimensions-panel.js +46 -36
  288. package/src/components/global-styles/global-styles-provider.js +6 -2
  289. package/src/components/global-styles/gradients-palette-panel.js +17 -11
  290. package/src/components/global-styles/hooks.js +31 -155
  291. package/src/components/global-styles/index.js +0 -2
  292. package/src/components/global-styles/palette.js +9 -5
  293. package/src/components/global-styles/preview.js +19 -13
  294. package/src/components/global-styles/screen-background-color.js +37 -21
  295. package/src/components/global-styles/screen-border.js +10 -5
  296. package/src/components/global-styles/screen-button-color.js +21 -19
  297. package/src/components/global-styles/screen-colors.js +48 -65
  298. package/src/components/global-styles/screen-css.js +30 -14
  299. package/src/components/global-styles/screen-heading-color.js +32 -27
  300. package/src/components/global-styles/screen-layout.js +4 -7
  301. package/src/components/global-styles/screen-link-color.js +26 -26
  302. package/src/components/global-styles/screen-root.js +24 -9
  303. package/src/components/global-styles/screen-style-variations.js +7 -2
  304. package/src/components/global-styles/screen-text-color.js +15 -19
  305. package/src/components/global-styles/screen-typography.js +27 -12
  306. package/src/components/global-styles/shadow-panel.js +174 -0
  307. package/src/components/global-styles/style.scss +85 -1
  308. package/src/components/global-styles/typography-panel.js +60 -48
  309. package/src/components/global-styles/typography-preview.js +28 -9
  310. package/src/components/global-styles/ui.js +78 -53
  311. package/src/components/global-styles/utils.js +4 -371
  312. package/src/components/global-styles-renderer/index.js +3 -4
  313. package/src/components/header-edit-mode/document-actions/index.js +1 -1
  314. package/src/components/keyboard-shortcut-help-modal/index.js +0 -1
  315. package/src/components/layout/index.js +9 -2
  316. package/src/components/layout/style.scss +4 -5
  317. package/src/components/list/actions/rename-menu-item.js +14 -23
  318. package/src/components/list/style.scss +0 -4
  319. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +1 -4
  320. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +10 -12
  321. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/style.scss +0 -17
  322. package/src/components/sidebar/index.js +2 -0
  323. package/src/components/sidebar-edit-mode/global-styles-sidebar.js +8 -32
  324. package/src/components/sidebar-edit-mode/index.js +0 -11
  325. package/src/components/sidebar-edit-mode/settings-header/style.scss +8 -0
  326. package/src/components/sidebar-navigation-item/style.scss +28 -3
  327. package/src/components/sidebar-navigation-screen/index.js +4 -3
  328. package/src/components/sidebar-navigation-screen/style.scss +2 -0
  329. package/src/components/sidebar-navigation-screen-main/index.js +23 -1
  330. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +25 -0
  331. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +12 -0
  332. package/src/components/sidebar-navigation-screen-templates/index.js +12 -19
  333. package/src/components/site-hub/index.js +1 -1
  334. package/src/components/site-hub/style.scss +7 -1
  335. package/src/components/site-icon/index.js +1 -1
  336. package/src/components/site-icon/style.scss +2 -2
  337. package/src/components/style-book/index.js +10 -5
  338. package/src/components/template-part-converter/convert-to-template-part.js +12 -10
  339. package/src/experiments.js +10 -0
  340. package/src/hooks/push-changes-to-global-styles/index.js +63 -5
  341. package/src/index.js +51 -59
  342. package/src/store/selectors.js +6 -26
  343. package/src/store/test/utils.js +181 -0
  344. package/src/store/utils.js +69 -0
  345. package/src/style.scss +4 -2
  346. package/src/utils/template-part-create.js +62 -0
  347. package/src/utils/test/template-part-create.js +63 -0
  348. package/build/components/global-styles/context.js +0 -22
  349. package/build/components/global-styles/context.js.map +0 -1
  350. package/build/components/global-styles/typography-utils.js +0 -92
  351. package/build/components/global-styles/typography-utils.js.map +0 -1
  352. package/build/components/global-styles/use-global-styles-output.js +0 -943
  353. package/build/components/global-styles/use-global-styles-output.js.map +0 -1
  354. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -42
  355. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
  356. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  357. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  358. package/build-module/components/global-styles/context.js +0 -12
  359. package/build-module/components/global-styles/context.js.map +0 -1
  360. package/build-module/components/global-styles/typography-utils.js +0 -84
  361. package/build-module/components/global-styles/typography-utils.js.map +0 -1
  362. package/build-module/components/global-styles/use-global-styles-output.js +0 -901
  363. package/build-module/components/global-styles/use-global-styles-output.js.map +0 -1
  364. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -28
  365. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
  366. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  367. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  368. package/src/components/global-styles/context.js +0 -15
  369. package/src/components/global-styles/test/typography-utils.js +0 -393
  370. package/src/components/global-styles/test/use-global-styles-output.js +0 -814
  371. package/src/components/global-styles/test/utils.js +0 -206
  372. package/src/components/global-styles/typography-utils.js +0 -87
  373. package/src/components/global-styles/use-global-styles-output.js +0 -1059
  374. package/src/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -37
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { kebabCase } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -24,12 +19,18 @@ import { symbolFilled } from '@wordpress/icons';
24
19
  */
25
20
  import CreateTemplatePartModal from '../create-template-part-modal';
26
21
  import { store as editSiteStore } from '../../store';
22
+ import {
23
+ useExistingTemplateParts,
24
+ getUniqueTemplatePartTitle,
25
+ getCleanTemplatePartSlug,
26
+ } from '../../utils/template-part-create';
27
27
 
28
28
  export default function ConvertToTemplatePart( { clientIds, blocks } ) {
29
29
  const [ isModalOpen, setIsModalOpen ] = useState( false );
30
30
  const { replaceBlocks } = useDispatch( blockEditorStore );
31
31
  const { saveEntityRecord } = useDispatch( coreStore );
32
32
  const { createSuccessNotice } = useDispatch( noticesStore );
33
+ const existingTemplateParts = useExistingTemplateParts();
33
34
 
34
35
  const { canCreate } = useSelect( ( select ) => {
35
36
  const { supportsTemplatePartsMode } =
@@ -44,17 +45,18 @@ export default function ConvertToTemplatePart( { clientIds, blocks } ) {
44
45
  }
45
46
 
46
47
  const onConvert = async ( { title, area } ) => {
47
- // Currently template parts only allow latin chars.
48
- // Fallback slug will receive suffix by default.
49
- const cleanSlug =
50
- kebabCase( title ).replace( /[^\w-]+/g, '' ) || 'wp-custom-part';
48
+ const uniqueTitle = getUniqueTemplatePartTitle(
49
+ title,
50
+ existingTemplateParts
51
+ );
52
+ const cleanSlug = getCleanTemplatePartSlug( uniqueTitle );
51
53
 
52
54
  const templatePart = await saveEntityRecord(
53
55
  'postType',
54
56
  'wp_template_part',
55
57
  {
56
58
  slug: cleanSlug,
57
- title,
59
+ title: uniqueTitle,
58
60
  content: serialize( blocks ),
59
61
  area,
60
62
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/experiments';
5
+
6
+ export const { lock, unlock } =
7
+ __dangerousOptInToUnstableAPIsOnlyForCoreModules(
8
+ 'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',
9
+ '@wordpress/edit-site'
10
+ );
@@ -11,6 +11,7 @@ import { createHigherOrderComponent } from '@wordpress/compose';
11
11
  import {
12
12
  InspectorAdvancedControls,
13
13
  store as blockEditorStore,
14
+ experiments as blockEditorExperiments,
14
15
  } from '@wordpress/block-editor';
15
16
  import { BaseControl, Button } from '@wordpress/components';
16
17
  import { __, sprintf } from '@wordpress/i18n';
@@ -26,11 +27,68 @@ import { store as noticesStore } from '@wordpress/notices';
26
27
  * Internal dependencies
27
28
  */
28
29
  import { getSupportedGlobalStylesPanels } from '../../components/global-styles/hooks';
29
- import { GlobalStylesContext } from '../../components/global-styles/context';
30
- import {
31
- STYLE_PATH_TO_CSS_VAR_INFIX,
32
- STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE,
33
- } from '../../components/global-styles/utils';
30
+ import { unlock } from '../../experiments';
31
+
32
+ const { GlobalStylesContext } = unlock( blockEditorExperiments );
33
+
34
+ // TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
35
+ // removed by moving PushChangesToGlobalStylesControl to
36
+ // @wordpress/block-editor.
37
+ const STYLE_PATH_TO_CSS_VAR_INFIX = {
38
+ 'color.background': 'color',
39
+ 'color.text': 'color',
40
+ 'elements.link.color.text': 'color',
41
+ 'elements.link.:hover.color.text': 'color',
42
+ 'elements.link.typography.fontFamily': 'font-family',
43
+ 'elements.link.typography.fontSize': 'font-size',
44
+ 'elements.button.color.text': 'color',
45
+ 'elements.button.color.background': 'color',
46
+ 'elements.button.typography.fontFamily': 'font-family',
47
+ 'elements.button.typography.fontSize': 'font-size',
48
+ 'elements.heading.color': 'color',
49
+ 'elements.heading.color.background': 'color',
50
+ 'elements.heading.typography.fontFamily': 'font-family',
51
+ 'elements.heading.gradient': 'gradient',
52
+ 'elements.heading.color.gradient': 'gradient',
53
+ 'elements.h1.color': 'color',
54
+ 'elements.h1.color.background': 'color',
55
+ 'elements.h1.typography.fontFamily': 'font-family',
56
+ 'elements.h1.color.gradient': 'gradient',
57
+ 'elements.h2.color': 'color',
58
+ 'elements.h2.color.background': 'color',
59
+ 'elements.h2.typography.fontFamily': 'font-family',
60
+ 'elements.h2.color.gradient': 'gradient',
61
+ 'elements.h3.color': 'color',
62
+ 'elements.h3.color.background': 'color',
63
+ 'elements.h3.typography.fontFamily': 'font-family',
64
+ 'elements.h3.color.gradient': 'gradient',
65
+ 'elements.h4.color': 'color',
66
+ 'elements.h4.color.background': 'color',
67
+ 'elements.h4.typography.fontFamily': 'font-family',
68
+ 'elements.h4.color.gradient': 'gradient',
69
+ 'elements.h5.color': 'color',
70
+ 'elements.h5.color.background': 'color',
71
+ 'elements.h5.typography.fontFamily': 'font-family',
72
+ 'elements.h5.color.gradient': 'gradient',
73
+ 'elements.h6.color': 'color',
74
+ 'elements.h6.color.background': 'color',
75
+ 'elements.h6.typography.fontFamily': 'font-family',
76
+ 'elements.h6.color.gradient': 'gradient',
77
+ 'color.gradient': 'gradient',
78
+ 'typography.fontSize': 'font-size',
79
+ 'typography.fontFamily': 'font-family',
80
+ };
81
+
82
+ // TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
83
+ // removed by moving PushChangesToGlobalStylesControl to
84
+ // @wordpress/block-editor.
85
+ const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {
86
+ 'color.background': 'backgroundColor',
87
+ 'color.text': 'textColor',
88
+ 'color.gradient': 'gradient',
89
+ 'typography.fontSize': 'fontSize',
90
+ 'typography.fontFamily': 'fontFamily',
91
+ };
34
92
 
35
93
  function getChangesToPush( name, attributes ) {
36
94
  return getSupportedGlobalStylesPanels( name ).flatMap( ( key ) => {
package/src/index.js CHANGED
@@ -7,7 +7,8 @@ import {
7
7
  __experimentalRegisterExperimentalCoreBlocks,
8
8
  } from '@wordpress/block-library';
9
9
  import { dispatch } from '@wordpress/data';
10
- import { render, unmountComponentAtNode } from '@wordpress/element';
10
+ import deprecated from '@wordpress/deprecated';
11
+ import { createRoot } from '@wordpress/element';
11
12
  import {
12
13
  __experimentalFetchLinkSuggestions as fetchLinkSuggestions,
13
14
  __experimentalFetchUrlData as fetchUrlData,
@@ -26,14 +27,27 @@ import { store as editSiteStore } from './store';
26
27
  import App from './components/app';
27
28
 
28
29
  /**
29
- * Reinitializes the editor after the user chooses to reboot the editor after
30
- * an unhandled error occurs, replacing previously mounted editor element using
31
- * an initial state from prior to the crash.
30
+ * Initializes the site editor screen.
32
31
  *
33
- * @param {Element} target DOM node in which editor is rendered.
34
- * @param {?Object} settings Editor settings object.
32
+ * @param {string} id ID of the root element to render the screen in.
33
+ * @param {Object} settings Editor settings.
35
34
  */
36
- export function reinitializeEditor( target, settings ) {
35
+ export function initializeEditor( id, settings ) {
36
+ const target = document.getElementById( id );
37
+ const root = createRoot( target );
38
+
39
+ settings.__experimentalFetchLinkSuggestions = ( search, searchOptions ) =>
40
+ fetchLinkSuggestions( search, searchOptions, settings );
41
+ settings.__experimentalFetchRichUrlData = fetchUrlData;
42
+
43
+ dispatch( blocksStore ).__experimentalReapplyBlockTypeFilters();
44
+ registerCoreBlocks();
45
+ registerLegacyWidgetBlock( { inserter: false } );
46
+ if ( process.env.IS_GUTENBERG_PLUGIN ) {
47
+ __experimentalRegisterExperimentalCoreBlocks( {
48
+ enableFSEBlocks: true,
49
+ } );
50
+ }
37
51
  /*
38
52
  * Prevent adding the Clasic block in the site editor.
39
53
  * Only add the filter when the site editor is initialized, not imported.
@@ -54,70 +68,48 @@ export function reinitializeEditor( target, settings ) {
54
68
  }
55
69
  );
56
70
 
57
- // This will be a no-op if the target doesn't have any React nodes.
58
- unmountComponentAtNode( target );
59
- const reboot = reinitializeEditor.bind( null, target, settings );
60
-
61
71
  // We dispatch actions and update the store synchronously before rendering
62
72
  // so that we won't trigger unnecessary re-renders with useEffect.
63
- {
64
- dispatch( preferencesStore ).setDefaults( 'core/edit-site', {
65
- editorMode: 'visual',
66
- fixedToolbar: false,
67
- focusMode: false,
68
- keepCaretInsideBlock: false,
69
- welcomeGuide: true,
70
- welcomeGuideStyles: true,
71
- showListViewByDefault: false,
72
- } );
73
+ dispatch( preferencesStore ).setDefaults( 'core/edit-site', {
74
+ editorMode: 'visual',
75
+ fixedToolbar: false,
76
+ focusMode: false,
77
+ keepCaretInsideBlock: false,
78
+ welcomeGuide: true,
79
+ welcomeGuideStyles: true,
80
+ showListViewByDefault: false,
81
+ } );
73
82
 
74
- dispatch( interfaceStore ).setDefaultComplementaryArea(
75
- 'core/edit-site',
76
- 'edit-site/template'
77
- );
83
+ dispatch( interfaceStore ).setDefaultComplementaryArea(
84
+ 'core/edit-site',
85
+ 'edit-site/template'
86
+ );
78
87
 
79
- dispatch( editSiteStore ).updateSettings( settings );
88
+ dispatch( editSiteStore ).updateSettings( settings );
80
89
 
81
- // Keep the defaultTemplateTypes in the core/editor settings too,
82
- // so that they can be selected with core/editor selectors in any editor.
83
- // This is needed because edit-site doesn't initialize with EditorProvider,
84
- // which internally uses updateEditorSettings as well.
85
- dispatch( editorStore ).updateEditorSettings( {
86
- defaultTemplateTypes: settings.defaultTemplateTypes,
87
- defaultTemplatePartAreas: settings.defaultTemplatePartAreas,
88
- } );
89
- }
90
+ // Keep the defaultTemplateTypes in the core/editor settings too,
91
+ // so that they can be selected with core/editor selectors in any editor.
92
+ // This is needed because edit-site doesn't initialize with EditorProvider,
93
+ // which internally uses updateEditorSettings as well.
94
+ dispatch( editorStore ).updateEditorSettings( {
95
+ defaultTemplateTypes: settings.defaultTemplateTypes,
96
+ defaultTemplatePartAreas: settings.defaultTemplatePartAreas,
97
+ } );
90
98
 
91
99
  // Prevent the default browser action for files dropped outside of dropzones.
92
100
  window.addEventListener( 'dragover', ( e ) => e.preventDefault(), false );
93
101
  window.addEventListener( 'drop', ( e ) => e.preventDefault(), false );
94
102
 
95
- render( <App reboot={ reboot } />, target );
96
- }
97
-
98
- /**
99
- * Initializes the site editor screen.
100
- *
101
- * @param {string} id ID of the root element to render the screen in.
102
- * @param {Object} settings Editor settings.
103
- */
104
- export function initializeEditor( id, settings ) {
105
- settings.__experimentalFetchLinkSuggestions = ( search, searchOptions ) =>
106
- fetchLinkSuggestions( search, searchOptions, settings );
107
- settings.__experimentalFetchRichUrlData = fetchUrlData;
103
+ root.render( <App /> );
108
104
 
109
- const target = document.getElementById( id );
110
-
111
- dispatch( blocksStore ).__experimentalReapplyBlockTypeFilters();
112
- registerCoreBlocks();
113
- registerLegacyWidgetBlock( { inserter: false } );
114
- if ( process.env.IS_GUTENBERG_PLUGIN ) {
115
- __experimentalRegisterExperimentalCoreBlocks( {
116
- enableFSEBlocks: true,
117
- } );
118
- }
105
+ return root;
106
+ }
119
107
 
120
- reinitializeEditor( target, settings );
108
+ export function reinitializeEditor() {
109
+ deprecated( 'wp.editSite.reinitializeEditor', {
110
+ since: '6.2',
111
+ version: '6.3',
112
+ } );
121
113
  }
122
114
 
123
115
  export { default as PluginSidebar } from './components/sidebar-edit-mode/plugin-sidebar';
@@ -10,10 +10,14 @@ import { store as coreDataStore } from '@wordpress/core-data';
10
10
  import { createRegistrySelector } from '@wordpress/data';
11
11
  import deprecated from '@wordpress/deprecated';
12
12
  import { uploadMedia } from '@wordpress/media-utils';
13
- import { isTemplatePart } from '@wordpress/blocks';
14
13
  import { Platform } from '@wordpress/element';
15
14
  import { store as preferencesStore } from '@wordpress/preferences';
16
15
 
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import { getFilteredTemplatePartBlocks } from './utils';
20
+
17
21
  /**
18
22
  * @typedef {'template'|'template_type'} TemplateType Template type.
19
23
  */
@@ -268,32 +272,8 @@ export const getCurrentTemplateTemplateParts = createRegistrySelector(
268
272
  'wp_template_part',
269
273
  { per_page: -1 }
270
274
  );
271
- const templatePartsById = templateParts
272
- ? // Key template parts by their ID.
273
- templateParts.reduce(
274
- ( newTemplateParts, part ) => ( {
275
- ...newTemplateParts,
276
- [ part.id ]: part,
277
- } ),
278
- {}
279
- )
280
- : {};
281
-
282
- return ( template.blocks ?? [] )
283
- .filter( ( block ) => isTemplatePart( block ) )
284
- .map( ( block ) => {
285
- const {
286
- attributes: { theme, slug },
287
- } = block;
288
- const templatePartId = `${ theme }//${ slug }`;
289
- const templatePart = templatePartsById[ templatePartId ];
290
275
 
291
- return {
292
- templatePart,
293
- block,
294
- };
295
- } )
296
- .filter( ( { templatePart } ) => !! templatePart );
276
+ return getFilteredTemplatePartBlocks( template.blocks, templateParts );
297
277
  }
298
278
  );
299
279
 
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { getFilteredTemplatePartBlocks } from '../utils';
5
+
6
+ const NESTED_BLOCKS = [
7
+ {
8
+ clientId: '1',
9
+ name: 'core/group',
10
+ innerBlocks: [
11
+ {
12
+ clientId: '2',
13
+ name: 'core/template-part',
14
+ attributes: {
15
+ slug: 'header',
16
+ theme: 'my-theme',
17
+ },
18
+ innerBlocks: [
19
+ {
20
+ clientId: '3',
21
+ name: 'core/group',
22
+ innerBlocks: [],
23
+ },
24
+ ],
25
+ },
26
+ {
27
+ clientId: '4',
28
+ name: 'core/template-part',
29
+ attributes: {
30
+ slug: 'aside',
31
+ theme: 'my-theme',
32
+ },
33
+ innerBlocks: [],
34
+ },
35
+ ],
36
+ },
37
+ {
38
+ clientId: '5',
39
+ name: 'core/paragraph',
40
+ innerBlocks: [],
41
+ },
42
+ {
43
+ clientId: '6',
44
+ name: 'core/template-part',
45
+ attributes: {
46
+ slug: 'footer',
47
+ theme: 'my-theme',
48
+ },
49
+ innerBlocks: [],
50
+ },
51
+ ];
52
+
53
+ const FLATTENED_BLOCKS = [
54
+ {
55
+ block: {
56
+ clientId: '2',
57
+ name: 'core/template-part',
58
+ attributes: {
59
+ slug: 'header',
60
+ theme: 'my-theme',
61
+ },
62
+ },
63
+ templatePart: {
64
+ id: 'my-theme//header',
65
+ slug: 'header',
66
+ theme: 'my-theme',
67
+ },
68
+ },
69
+ {
70
+ block: {
71
+ clientId: '4',
72
+ name: 'core/template-part',
73
+ attributes: {
74
+ slug: 'aside',
75
+ theme: 'my-theme',
76
+ },
77
+ },
78
+ templatePart: {
79
+ id: 'my-theme//aside',
80
+ slug: 'aside',
81
+ theme: 'my-theme',
82
+ },
83
+ },
84
+ {
85
+ block: {
86
+ clientId: '6',
87
+ name: 'core/template-part',
88
+ attributes: {
89
+ slug: 'footer',
90
+ theme: 'my-theme',
91
+ },
92
+ },
93
+ templatePart: {
94
+ id: 'my-theme//footer',
95
+ slug: 'footer',
96
+ theme: 'my-theme',
97
+ },
98
+ },
99
+ ];
100
+
101
+ const SINGLE_TEMPLATE_PART_BLOCK = {
102
+ clientId: '1',
103
+ name: 'core/template-part',
104
+ innerBlocks: [],
105
+ attributes: {
106
+ slug: 'aside',
107
+ theme: 'my-theme',
108
+ },
109
+ };
110
+
111
+ const TEMPLATE_PARTS = [
112
+ {
113
+ id: 'my-theme//header',
114
+ slug: 'header',
115
+ theme: 'my-theme',
116
+ },
117
+ {
118
+ id: 'my-theme//aside',
119
+ slug: 'aside',
120
+ theme: 'my-theme',
121
+ },
122
+ {
123
+ id: 'my-theme//footer',
124
+ slug: 'footer',
125
+ theme: 'my-theme',
126
+ },
127
+ ];
128
+
129
+ describe( 'utils', () => {
130
+ describe( 'getFilteredTemplatePartBlocks', () => {
131
+ it( 'returns a flattened list of filtered template parts preserving a depth-first order', () => {
132
+ const flattenedFilteredTemplateParts =
133
+ getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS );
134
+ expect( flattenedFilteredTemplateParts ).toEqual(
135
+ FLATTENED_BLOCKS
136
+ );
137
+ } );
138
+
139
+ it( 'returns a cached result when passed the same params', () => {
140
+ // Clear the cache and call the function twice.
141
+ getFilteredTemplatePartBlocks.clear();
142
+ getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS );
143
+ expect(
144
+ getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS )
145
+ ).toEqual( FLATTENED_BLOCKS );
146
+
147
+ // The function has been called twice with the same params, so the cache size should be 1.
148
+ const [ , , originalSize ] =
149
+ getFilteredTemplatePartBlocks.getCache();
150
+ expect( originalSize ).toBe( 1 );
151
+
152
+ // Call the function again, with different params.
153
+ expect(
154
+ getFilteredTemplatePartBlocks(
155
+ [ SINGLE_TEMPLATE_PART_BLOCK ],
156
+ TEMPLATE_PARTS
157
+ )
158
+ ).toEqual( [
159
+ {
160
+ block: {
161
+ clientId: '1',
162
+ name: 'core/template-part',
163
+ attributes: {
164
+ slug: 'aside',
165
+ theme: 'my-theme',
166
+ },
167
+ },
168
+ templatePart: {
169
+ id: 'my-theme//aside',
170
+ slug: 'aside',
171
+ theme: 'my-theme',
172
+ },
173
+ },
174
+ ] );
175
+
176
+ // The function has been called with different params, so the cache size should now be 2.
177
+ const [ , , finalSize ] = getFilteredTemplatePartBlocks.getCache();
178
+ expect( finalSize ).toBe( 2 );
179
+ } );
180
+ } );
181
+ } );
@@ -0,0 +1,69 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import memoize from 'memize';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { isTemplatePart } from '@wordpress/blocks';
10
+
11
+ const EMPTY_ARRAY = [];
12
+
13
+ /**
14
+ * Get a flattened and filtered list of template parts and the matching block for that template part.
15
+ *
16
+ * Takes a list of blocks defined within a template, and a list of template parts, and returns a
17
+ * flattened list of template parts and the matching block for that template part.
18
+ *
19
+ * @param {Array} blocks Blocks to flatten.
20
+ * @param {?Array} templateParts Available template parts.
21
+ * @return {Array} An array of template parts and their blocks.
22
+ */
23
+ function getFilteredTemplatePartBlocks( blocks = EMPTY_ARRAY, templateParts ) {
24
+ const templatePartsById = templateParts
25
+ ? // Key template parts by their ID.
26
+ templateParts.reduce(
27
+ ( newTemplateParts, part ) => ( {
28
+ ...newTemplateParts,
29
+ [ part.id ]: part,
30
+ } ),
31
+ {}
32
+ )
33
+ : {};
34
+
35
+ const result = [];
36
+
37
+ // Iterate over all blocks, recursing into inner blocks.
38
+ // Output will be based on a depth-first traversal.
39
+ const stack = [ ...blocks ];
40
+ while ( stack.length ) {
41
+ const { innerBlocks, ...block } = stack.shift();
42
+ // Place inner blocks at the beginning of the stack to preserve order.
43
+ stack.unshift( ...innerBlocks );
44
+
45
+ if ( isTemplatePart( block ) ) {
46
+ const {
47
+ attributes: { theme, slug },
48
+ } = block;
49
+ const templatePartId = `${ theme }//${ slug }`;
50
+ const templatePart = templatePartsById[ templatePartId ];
51
+
52
+ // Only add to output if the found template part block is in the list of available template parts.
53
+ if ( templatePart ) {
54
+ result.push( {
55
+ templatePart,
56
+ block,
57
+ } );
58
+ }
59
+ }
60
+ }
61
+
62
+ return result;
63
+ }
64
+
65
+ const memoizedGetFilteredTemplatePartBlocks = memoize(
66
+ getFilteredTemplatePartBlocks
67
+ );
68
+
69
+ export { memoizedGetFilteredTemplatePartBlocks as getFilteredTemplatePartBlocks };
package/src/style.scss CHANGED
@@ -1,15 +1,16 @@
1
1
  @import "../../interface/src/style.scss";
2
2
 
3
+ @import "./components/add-new-template/style.scss";
3
4
  @import "./components/block-editor/style.scss";
5
+ @import "./components/canvas-spinner/style.scss";
4
6
  @import "./components/code-editor/style.scss";
5
7
  @import "./components/global-styles/style.scss";
6
8
  @import "./components/header-edit-mode/style.scss";
7
9
  @import "./components/header-edit-mode/document-actions/style.scss";
8
10
  @import "./components/list/style.scss";
9
- @import "./components/add-new-template/style.scss";
11
+ @import "./components/navigation-inspector/style.scss";
10
12
  @import "./components/sidebar-edit-mode/style.scss";
11
13
  @import "./components/sidebar-edit-mode/settings-header/style.scss";
12
- @import "./components/sidebar-edit-mode/navigation-menu-sidebar/style.scss";
13
14
  @import "./components/sidebar-edit-mode/template-card/style.scss";
14
15
  @import "./components/editor/style.scss";
15
16
  @import "./components/template-details/style.scss";
@@ -23,6 +24,7 @@
23
24
  @import "./components/sidebar-navigation-screen/style.scss";
24
25
  @import "./components/sidebar-navigation-screen-templates/style.scss";
25
26
  @import "./components/site-hub/style.scss";
27
+ @import "./components/sidebar-navigation-screen-navigation-menus/style.scss";
26
28
  @import "./components/site-icon/style.scss";
27
29
  @import "./components/style-book/style.scss";
28
30
  @import "./hooks/push-changes-to-global-styles/style.scss";
@@ -0,0 +1,62 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { kebabCase } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useSelect } from '@wordpress/data';
10
+ import { store as coreStore } from '@wordpress/core-data';
11
+
12
+ export const useExistingTemplateParts = () => {
13
+ return useSelect(
14
+ ( select ) =>
15
+ select( coreStore ).getEntityRecords(
16
+ 'postType',
17
+ 'wp_template_part',
18
+ {
19
+ per_page: -1,
20
+ }
21
+ ),
22
+ []
23
+ );
24
+ };
25
+
26
+ /**
27
+ * Return a unique template part title based on
28
+ * the given title and existing template parts.
29
+ *
30
+ * @param {string} title The original template part title.
31
+ * @param {Object} templateParts The array of template part entities.
32
+ * @return {string} A unique template part title.
33
+ */
34
+ export const getUniqueTemplatePartTitle = ( title, templateParts ) => {
35
+ const lowercaseTitle = title.toLowerCase();
36
+ const existingTitles = templateParts.map( ( templatePart ) =>
37
+ templatePart.title.rendered.toLowerCase()
38
+ );
39
+
40
+ if ( ! existingTitles.includes( lowercaseTitle ) ) {
41
+ return title;
42
+ }
43
+
44
+ let suffix = 2;
45
+ while ( existingTitles.includes( `${ lowercaseTitle } ${ suffix }` ) ) {
46
+ suffix++;
47
+ }
48
+
49
+ return `${ title } ${ suffix }`;
50
+ };
51
+
52
+ /**
53
+ * Get a valid slug for a template part.
54
+ * Currently template parts only allow latin chars.
55
+ * The fallback slug will receive suffix by default.
56
+ *
57
+ * @param {string} title The template part title.
58
+ * @return {string} A valid template part slug.
59
+ */
60
+ export const getCleanTemplatePartSlug = ( title ) => {
61
+ return kebabCase( title ).replace( /[^\w-]+/g, '' ) || 'wp-custom-part';
62
+ };