@wordpress/edit-site 5.2.0 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) 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 +9 -32
  7. package/build/components/add-new-template/new-template-part.js.map +1 -1
  8. package/build/components/add-new-template/new-template.js +5 -4
  9. package/build/components/add-new-template/new-template.js.map +1 -1
  10. package/build/components/add-new-template/utils.js +1 -9
  11. package/build/components/add-new-template/utils.js.map +1 -1
  12. package/build/components/app/index.js +2 -7
  13. package/build/components/app/index.js.map +1 -1
  14. package/build/components/block-editor/editor-canvas.js +13 -2
  15. package/build/components/block-editor/editor-canvas.js.map +1 -1
  16. package/build/components/block-editor/index.js +16 -14
  17. package/build/components/block-editor/index.js.map +1 -1
  18. package/build/components/block-editor/inserter-media-categories.js +237 -0
  19. package/build/components/block-editor/inserter-media-categories.js.map +1 -0
  20. package/build/components/canvas-spinner/index.js +20 -0
  21. package/build/components/canvas-spinner/index.js.map +1 -0
  22. package/build/components/create-template-part-modal/index.js +4 -2
  23. package/build/components/create-template-part-modal/index.js.map +1 -1
  24. package/build/components/editor/index.js +9 -5
  25. package/build/components/editor/index.js.map +1 -1
  26. package/build/components/error-boundary/index.js +2 -12
  27. package/build/components/error-boundary/index.js.map +1 -1
  28. package/build/components/error-boundary/warning.js +5 -28
  29. package/build/components/error-boundary/warning.js.map +1 -1
  30. package/build/components/global-styles/block-preview-panel.js +2 -2
  31. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  32. package/build/components/global-styles/border-panel.js +17 -9
  33. package/build/components/global-styles/border-panel.js.map +1 -1
  34. package/build/components/global-styles/color-palette-panel.js +13 -7
  35. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  36. package/build/components/global-styles/context-menu.js +39 -4
  37. package/build/components/global-styles/context-menu.js.map +1 -1
  38. package/build/components/global-styles/custom-css.js +65 -14
  39. package/build/components/global-styles/custom-css.js.map +1 -1
  40. package/build/components/global-styles/dimensions-panel.js +49 -31
  41. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  42. package/build/components/global-styles/global-styles-provider.js +13 -3
  43. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  44. package/build/components/global-styles/gradients-palette-panel.js +17 -11
  45. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  46. package/build/components/global-styles/hooks.js +21 -142
  47. package/build/components/global-styles/hooks.js.map +1 -1
  48. package/build/components/global-styles/index.js +0 -28
  49. package/build/components/global-styles/index.js.map +1 -1
  50. package/build/components/global-styles/palette.js +11 -4
  51. package/build/components/global-styles/palette.js.map +1 -1
  52. package/build/components/global-styles/preview.js +18 -15
  53. package/build/components/global-styles/preview.js.map +1 -1
  54. package/build/components/global-styles/screen-background-color.js +27 -13
  55. package/build/components/global-styles/screen-background-color.js.map +1 -1
  56. package/build/components/global-styles/screen-border.js +10 -4
  57. package/build/components/global-styles/screen-border.js.map +1 -1
  58. package/build/components/global-styles/screen-button-color.js +16 -9
  59. package/build/components/global-styles/screen-button-color.js.map +1 -1
  60. package/build/components/global-styles/screen-colors.js +43 -34
  61. package/build/components/global-styles/screen-colors.js.map +1 -1
  62. package/build/components/global-styles/screen-css.js +20 -8
  63. package/build/components/global-styles/screen-css.js.map +1 -1
  64. package/build/components/global-styles/screen-heading-color.js +23 -16
  65. package/build/components/global-styles/screen-heading-color.js.map +1 -1
  66. package/build/components/global-styles/screen-layout.js +3 -3
  67. package/build/components/global-styles/screen-layout.js.map +1 -1
  68. package/build/components/global-styles/screen-link-color.js +18 -11
  69. package/build/components/global-styles/screen-link-color.js.map +1 -1
  70. package/build/components/global-styles/screen-root.js +25 -9
  71. package/build/components/global-styles/screen-root.js.map +1 -1
  72. package/build/components/global-styles/screen-style-variations.js +8 -4
  73. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  74. package/build/components/global-styles/screen-text-color.js +14 -7
  75. package/build/components/global-styles/screen-text-color.js.map +1 -1
  76. package/build/components/global-styles/screen-typography.js +18 -12
  77. package/build/components/global-styles/screen-typography.js.map +1 -1
  78. package/build/components/global-styles/shadow-panel.js +196 -0
  79. package/build/components/global-styles/shadow-panel.js.map +1 -0
  80. package/build/components/global-styles/typography-panel.js +43 -29
  81. package/build/components/global-styles/typography-panel.js.map +1 -1
  82. package/build/components/global-styles/typography-preview.js +19 -9
  83. package/build/components/global-styles/typography-preview.js.map +1 -1
  84. package/build/components/global-styles/ui.js +104 -34
  85. package/build/components/global-styles/ui.js.map +1 -1
  86. package/build/components/global-styles/utils.js +5 -334
  87. package/build/components/global-styles/utils.js.map +1 -1
  88. package/build/components/global-styles-renderer/index.js +7 -5
  89. package/build/components/global-styles-renderer/index.js.map +1 -1
  90. package/build/components/header-edit-mode/document-actions/index.js +2 -2
  91. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  92. package/build/components/keyboard-shortcut-help-modal/index.js +0 -1
  93. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  94. package/build/components/layout/index.js +11 -11
  95. package/build/components/layout/index.js.map +1 -1
  96. package/build/components/list/actions/rename-menu-item.js +8 -11
  97. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  98. package/build/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +9 -6
  99. package/build/components/navigation-inspector/index.js.map +1 -0
  100. package/build/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +14 -14
  101. package/build/components/navigation-inspector/navigation-menu.js.map +1 -0
  102. package/build/components/sidebar/index.js +3 -1
  103. package/build/components/sidebar/index.js.map +1 -1
  104. package/build/components/sidebar-edit-mode/global-styles-sidebar.js +3 -18
  105. package/build/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  106. package/build/components/sidebar-edit-mode/index.js +1 -14
  107. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  108. package/build/components/sidebar-navigation-screen/index.js +3 -2
  109. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  110. package/build/components/sidebar-navigation-screen-main/index.js +23 -1
  111. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  112. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +52 -0
  113. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
  114. package/build/components/sidebar-navigation-screen-templates/index.js +3 -8
  115. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  116. package/build/components/site-hub/index.js +11 -10
  117. package/build/components/site-hub/index.js.map +1 -1
  118. package/build/components/site-icon/index.js +1 -1
  119. package/build/components/site-icon/index.js.map +1 -1
  120. package/build/components/style-book/index.js +7 -4
  121. package/build/components/style-book/index.js.map +1 -1
  122. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +6 -4
  123. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  124. package/build/components/template-part-converter/convert-to-template-part.js +5 -9
  125. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  126. package/build/experiments.js +19 -0
  127. package/build/experiments.js.map +1 -0
  128. package/build/hooks/push-changes-to-global-styles/index.js +65 -6
  129. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  130. package/build/index.js +53 -60
  131. package/build/index.js.map +1 -1
  132. package/build/store/actions.js +1 -27
  133. package/build/store/actions.js.map +1 -1
  134. package/build/store/index.js +8 -0
  135. package/build/store/index.js.map +1 -1
  136. package/build/store/private-actions.js +40 -0
  137. package/build/store/private-actions.js.map +1 -0
  138. package/build/store/private-selectors.js +18 -0
  139. package/build/store/private-selectors.js.map +1 -0
  140. package/build/store/selectors.js +7 -40
  141. package/build/store/selectors.js.map +1 -1
  142. package/build/store/utils.js +77 -0
  143. package/build/store/utils.js.map +1 -0
  144. package/build/utils/template-part-create.js +71 -0
  145. package/build/utils/template-part-create.js.map +1 -0
  146. package/build-module/components/add-new-template/add-custom-generic-template-modal.js +9 -11
  147. package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
  148. package/build-module/components/add-new-template/add-custom-template-modal.js +0 -1
  149. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
  150. package/build-module/components/add-new-template/new-template-part.js +8 -31
  151. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  152. package/build-module/components/add-new-template/new-template.js +4 -4
  153. package/build-module/components/add-new-template/new-template.js.map +1 -1
  154. package/build-module/components/add-new-template/utils.js +0 -5
  155. package/build-module/components/add-new-template/utils.js.map +1 -1
  156. package/build-module/components/app/index.js +2 -7
  157. package/build-module/components/app/index.js.map +1 -1
  158. package/build-module/components/block-editor/editor-canvas.js +13 -3
  159. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  160. package/build-module/components/block-editor/index.js +17 -15
  161. package/build-module/components/block-editor/index.js.map +1 -1
  162. package/build-module/components/block-editor/inserter-media-categories.js +225 -0
  163. package/build-module/components/block-editor/inserter-media-categories.js.map +1 -0
  164. package/build-module/components/canvas-spinner/index.js +12 -0
  165. package/build-module/components/canvas-spinner/index.js.map +1 -0
  166. package/build-module/components/create-template-part-modal/index.js +5 -3
  167. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  168. package/build-module/components/editor/index.js +7 -5
  169. package/build-module/components/editor/index.js.map +1 -1
  170. package/build-module/components/error-boundary/index.js +2 -12
  171. package/build-module/components/error-boundary/index.js.map +1 -1
  172. package/build-module/components/error-boundary/warning.js +5 -28
  173. package/build-module/components/error-boundary/warning.js.map +1 -1
  174. package/build-module/components/global-styles/block-preview-panel.js +2 -2
  175. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  176. package/build-module/components/global-styles/border-panel.js +17 -11
  177. package/build-module/components/global-styles/border-panel.js.map +1 -1
  178. package/build-module/components/global-styles/color-palette-panel.js +11 -7
  179. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  180. package/build-module/components/global-styles/context-menu.js +40 -8
  181. package/build-module/components/global-styles/context-menu.js.map +1 -1
  182. package/build-module/components/global-styles/custom-css.js +61 -15
  183. package/build-module/components/global-styles/custom-css.js.map +1 -1
  184. package/build-module/components/global-styles/dimensions-panel.js +49 -32
  185. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  186. package/build-module/components/global-styles/global-styles-provider.js +7 -2
  187. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  188. package/build-module/components/global-styles/gradients-palette-panel.js +15 -11
  189. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  190. package/build-module/components/global-styles/hooks.js +23 -134
  191. package/build-module/components/global-styles/hooks.js.map +1 -1
  192. package/build-module/components/global-styles/index.js +0 -2
  193. package/build-module/components/global-styles/index.js.map +1 -1
  194. package/build-module/components/global-styles/palette.js +10 -5
  195. package/build-module/components/global-styles/palette.js.map +1 -1
  196. package/build-module/components/global-styles/preview.js +18 -14
  197. package/build-module/components/global-styles/preview.js.map +1 -1
  198. package/build-module/components/global-styles/screen-background-color.js +26 -15
  199. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  200. package/build-module/components/global-styles/screen-border.js +10 -5
  201. package/build-module/components/global-styles/screen-border.js.map +1 -1
  202. package/build-module/components/global-styles/screen-button-color.js +16 -11
  203. package/build-module/components/global-styles/screen-button-color.js.map +1 -1
  204. package/build-module/components/global-styles/screen-colors.js +43 -37
  205. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  206. package/build-module/components/global-styles/screen-css.js +21 -9
  207. package/build-module/components/global-styles/screen-css.js.map +1 -1
  208. package/build-module/components/global-styles/screen-heading-color.js +23 -18
  209. package/build-module/components/global-styles/screen-heading-color.js.map +1 -1
  210. package/build-module/components/global-styles/screen-layout.js +4 -4
  211. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  212. package/build-module/components/global-styles/screen-link-color.js +18 -13
  213. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  214. package/build-module/components/global-styles/screen-root.js +23 -9
  215. package/build-module/components/global-styles/screen-root.js.map +1 -1
  216. package/build-module/components/global-styles/screen-style-variations.js +5 -2
  217. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  218. package/build-module/components/global-styles/screen-text-color.js +14 -9
  219. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  220. package/build-module/components/global-styles/screen-typography.js +16 -12
  221. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  222. package/build-module/components/global-styles/shadow-panel.js +177 -0
  223. package/build-module/components/global-styles/shadow-panel.js.map +1 -0
  224. package/build-module/components/global-styles/typography-panel.js +43 -31
  225. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  226. package/build-module/components/global-styles/typography-preview.js +17 -9
  227. package/build-module/components/global-styles/typography-preview.js.map +1 -1
  228. package/build-module/components/global-styles/ui.js +98 -35
  229. package/build-module/components/global-styles/ui.js.map +1 -1
  230. package/build-module/components/global-styles/utils.js +4 -319
  231. package/build-module/components/global-styles/utils.js.map +1 -1
  232. package/build-module/components/global-styles-renderer/index.js +5 -5
  233. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  234. package/build-module/components/header-edit-mode/document-actions/index.js +2 -2
  235. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  236. package/build-module/components/keyboard-shortcut-help-modal/index.js +0 -1
  237. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  238. package/build-module/components/layout/index.js +10 -11
  239. package/build-module/components/layout/index.js.map +1 -1
  240. package/build-module/components/list/actions/rename-menu-item.js +9 -12
  241. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  242. package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +9 -6
  243. package/build-module/components/navigation-inspector/index.js.map +1 -0
  244. package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +14 -15
  245. package/build-module/components/navigation-inspector/navigation-menu.js.map +1 -0
  246. package/build-module/components/sidebar/index.js +2 -1
  247. package/build-module/components/sidebar/index.js.map +1 -1
  248. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js +6 -21
  249. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  250. package/build-module/components/sidebar-edit-mode/index.js +1 -13
  251. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  252. package/build-module/components/sidebar-navigation-screen/index.js +3 -2
  253. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  254. package/build-module/components/sidebar-navigation-screen-main/index.js +22 -2
  255. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  256. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +40 -0
  257. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
  258. package/build-module/components/sidebar-navigation-screen-templates/index.js +4 -9
  259. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  260. package/build-module/components/site-hub/index.js +10 -10
  261. package/build-module/components/site-hub/index.js.map +1 -1
  262. package/build-module/components/site-icon/index.js +1 -1
  263. package/build-module/components/site-icon/index.js.map +1 -1
  264. package/build-module/components/style-book/index.js +8 -5
  265. package/build-module/components/style-book/index.js.map +1 -1
  266. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +5 -4
  267. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  268. package/build-module/components/template-part-converter/convert-to-template-part.js +5 -9
  269. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  270. package/build-module/experiments.js +9 -0
  271. package/build-module/experiments.js.map +1 -0
  272. package/build-module/hooks/push-changes-to-global-styles/index.js +62 -3
  273. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  274. package/build-module/index.js +52 -60
  275. package/build-module/index.js.map +1 -1
  276. package/build-module/store/actions.js +0 -23
  277. package/build-module/store/actions.js.map +1 -1
  278. package/build-module/store/index.js +5 -0
  279. package/build-module/store/index.js.map +1 -1
  280. package/build-module/store/private-actions.js +29 -0
  281. package/build-module/store/private-actions.js.map +1 -0
  282. package/build-module/store/private-selectors.js +11 -0
  283. package/build-module/store/private-selectors.js.map +1 -0
  284. package/build-module/store/selectors.js +6 -37
  285. package/build-module/store/selectors.js.map +1 -1
  286. package/build-module/store/utils.js +66 -0
  287. package/build-module/store/utils.js.map +1 -0
  288. package/build-module/utils/template-part-create.js +53 -0
  289. package/build-module/utils/template-part-create.js.map +1 -0
  290. package/build-style/style-rtl.css +314 -216
  291. package/build-style/style.css +314 -216
  292. package/package.json +32 -30
  293. package/src/components/add-new-template/add-custom-generic-template-modal.js +20 -28
  294. package/src/components/add-new-template/add-custom-template-modal.js +0 -1
  295. package/src/components/add-new-template/new-template-part.js +14 -34
  296. package/src/components/add-new-template/new-template.js +5 -3
  297. package/src/components/add-new-template/style.scss +0 -4
  298. package/src/components/add-new-template/utils.js +0 -14
  299. package/src/components/app/index.js +2 -2
  300. package/src/components/block-editor/editor-canvas.js +12 -2
  301. package/src/components/block-editor/index.js +16 -28
  302. package/src/components/block-editor/inserter-media-categories.js +247 -0
  303. package/src/components/block-editor/style.scss +20 -7
  304. package/src/components/canvas-spinner/index.js +12 -0
  305. package/src/components/canvas-spinner/style.scss +7 -0
  306. package/src/components/create-template-part-modal/index.js +75 -67
  307. package/src/components/create-template-part-modal/style.scss +0 -10
  308. package/src/components/editor/index.js +8 -5
  309. package/src/components/error-boundary/index.js +2 -10
  310. package/src/components/error-boundary/warning.js +6 -35
  311. package/src/components/global-styles/README.md +1 -75
  312. package/src/components/global-styles/block-preview-panel.js +2 -2
  313. package/src/components/global-styles/border-panel.js +19 -17
  314. package/src/components/global-styles/color-palette-panel.js +10 -7
  315. package/src/components/global-styles/context-menu.js +114 -44
  316. package/src/components/global-styles/custom-css.js +76 -19
  317. package/src/components/global-styles/dimensions-panel.js +46 -36
  318. package/src/components/global-styles/global-styles-provider.js +6 -2
  319. package/src/components/global-styles/gradients-palette-panel.js +17 -11
  320. package/src/components/global-styles/hooks.js +31 -155
  321. package/src/components/global-styles/index.js +0 -2
  322. package/src/components/global-styles/palette.js +9 -5
  323. package/src/components/global-styles/preview.js +19 -13
  324. package/src/components/global-styles/screen-background-color.js +37 -21
  325. package/src/components/global-styles/screen-border.js +10 -5
  326. package/src/components/global-styles/screen-button-color.js +21 -19
  327. package/src/components/global-styles/screen-colors.js +48 -65
  328. package/src/components/global-styles/screen-css.js +30 -14
  329. package/src/components/global-styles/screen-heading-color.js +32 -27
  330. package/src/components/global-styles/screen-layout.js +4 -7
  331. package/src/components/global-styles/screen-link-color.js +26 -26
  332. package/src/components/global-styles/screen-root.js +24 -9
  333. package/src/components/global-styles/screen-style-variations.js +7 -2
  334. package/src/components/global-styles/screen-text-color.js +15 -19
  335. package/src/components/global-styles/screen-typography.js +27 -12
  336. package/src/components/global-styles/shadow-panel.js +174 -0
  337. package/src/components/global-styles/style.scss +85 -1
  338. package/src/components/global-styles/typography-panel.js +60 -48
  339. package/src/components/global-styles/typography-preview.js +28 -9
  340. package/src/components/global-styles/ui.js +97 -53
  341. package/src/components/global-styles/utils.js +4 -371
  342. package/src/components/global-styles-renderer/index.js +3 -4
  343. package/src/components/header-edit-mode/document-actions/index.js +1 -1
  344. package/src/components/keyboard-shortcut-help-modal/index.js +0 -1
  345. package/src/components/layout/index.js +12 -4
  346. package/src/components/layout/style.scss +4 -5
  347. package/src/components/list/actions/rename-menu-item.js +14 -23
  348. package/src/components/list/style.scss +0 -4
  349. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +2 -2
  350. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +10 -12
  351. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/style.scss +0 -17
  352. package/src/components/sidebar/index.js +2 -0
  353. package/src/components/sidebar-edit-mode/global-styles-sidebar.js +8 -32
  354. package/src/components/sidebar-edit-mode/index.js +0 -11
  355. package/src/components/sidebar-edit-mode/settings-header/style.scss +8 -0
  356. package/src/components/sidebar-navigation-item/style.scss +28 -3
  357. package/src/components/sidebar-navigation-screen/index.js +4 -3
  358. package/src/components/sidebar-navigation-screen/style.scss +2 -0
  359. package/src/components/sidebar-navigation-screen-main/index.js +23 -1
  360. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +45 -0
  361. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +12 -0
  362. package/src/components/sidebar-navigation-screen-templates/index.js +12 -19
  363. package/src/components/site-hub/index.js +8 -10
  364. package/src/components/site-hub/style.scss +7 -1
  365. package/src/components/site-icon/index.js +1 -1
  366. package/src/components/site-icon/style.scss +2 -2
  367. package/src/components/style-book/index.js +10 -5
  368. package/src/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +4 -3
  369. package/src/components/template-part-converter/convert-to-template-part.js +12 -10
  370. package/src/experiments.js +10 -0
  371. package/src/hooks/push-changes-to-global-styles/index.js +63 -5
  372. package/src/index.js +51 -59
  373. package/src/store/actions.js +0 -24
  374. package/src/store/index.js +5 -0
  375. package/src/store/private-actions.js +29 -0
  376. package/src/store/private-selectors.js +10 -0
  377. package/src/store/selectors.js +6 -37
  378. package/src/store/test/utils.js +181 -0
  379. package/src/store/utils.js +69 -0
  380. package/src/style.scss +4 -2
  381. package/src/utils/template-part-create.js +62 -0
  382. package/src/utils/test/template-part-create.js +63 -0
  383. package/build/components/global-styles/context.js +0 -22
  384. package/build/components/global-styles/context.js.map +0 -1
  385. package/build/components/global-styles/typography-utils.js +0 -92
  386. package/build/components/global-styles/typography-utils.js.map +0 -1
  387. package/build/components/global-styles/use-global-styles-output.js +0 -943
  388. package/build/components/global-styles/use-global-styles-output.js.map +0 -1
  389. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -42
  390. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
  391. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  392. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  393. package/build-module/components/global-styles/context.js +0 -12
  394. package/build-module/components/global-styles/context.js.map +0 -1
  395. package/build-module/components/global-styles/typography-utils.js +0 -84
  396. package/build-module/components/global-styles/typography-utils.js.map +0 -1
  397. package/build-module/components/global-styles/use-global-styles-output.js +0 -901
  398. package/build-module/components/global-styles/use-global-styles-output.js.map +0 -1
  399. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -28
  400. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
  401. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  402. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  403. package/src/components/global-styles/context.js +0 -15
  404. package/src/components/global-styles/test/typography-utils.js +0 -393
  405. package/src/components/global-styles/test/use-global-styles-output.js +0 -814
  406. package/src/components/global-styles/test/utils.js +0 -206
  407. package/src/components/global-styles/typography-utils.js +0 -87
  408. package/src/components/global-styles/use-global-styles-output.js +0 -1059
  409. package/src/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -37
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';
@@ -530,27 +530,3 @@ export const switchEditorMode =
530
530
  speak( __( 'Mosaic view selected' ), 'assertive' );
531
531
  }
532
532
  };
533
-
534
- /**
535
- * Action that switches the canvas mode.
536
- *
537
- * @param {?string} mode Canvas mode.
538
- */
539
- export const __unstableSetCanvasMode =
540
- ( mode ) =>
541
- ( { registry, dispatch } ) => {
542
- registry.dispatch( blockEditorStore ).__unstableSetEditorMode( 'edit' );
543
- dispatch( {
544
- type: 'SET_CANVAS_MODE',
545
- mode,
546
- } );
547
- // Check if the block list view should be open by default.
548
- if (
549
- mode === 'edit' &&
550
- registry
551
- .select( preferencesStore )
552
- .get( 'core/edit-site', 'showListViewByDefault' )
553
- ) {
554
- dispatch.setIsListViewOpened( true );
555
- }
556
- };
@@ -8,8 +8,11 @@ import { createReduxStore, register } from '@wordpress/data';
8
8
  */
9
9
  import reducer from './reducer';
10
10
  import * as actions from './actions';
11
+ import * as privateActions from './private-actions';
11
12
  import * as selectors from './selectors';
13
+ import * as privateSelectors from './private-selectors';
12
14
  import { STORE_NAME } from './constants';
15
+ import { unlock } from '../experiments';
13
16
 
14
17
  export const storeConfig = {
15
18
  reducer,
@@ -19,3 +22,5 @@ export const storeConfig = {
19
22
 
20
23
  export const store = createReduxStore( STORE_NAME, storeConfig );
21
24
  register( store );
25
+ unlock( store ).registerPrivateSelectors( privateSelectors );
26
+ unlock( store ).registerPrivateActions( privateActions );
@@ -0,0 +1,29 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { store as blockEditorStore } from '@wordpress/block-editor';
5
+ import { store as preferencesStore } from '@wordpress/preferences';
6
+
7
+ /**
8
+ * Action that switches the canvas mode.
9
+ *
10
+ * @param {?string} mode Canvas mode.
11
+ */
12
+ export const setCanvasMode =
13
+ ( mode ) =>
14
+ ( { registry, dispatch } ) => {
15
+ registry.dispatch( blockEditorStore ).__unstableSetEditorMode( 'edit' );
16
+ dispatch( {
17
+ type: 'SET_CANVAS_MODE',
18
+ mode,
19
+ } );
20
+ // Check if the block list view should be open by default.
21
+ if (
22
+ mode === 'edit' &&
23
+ registry
24
+ .select( preferencesStore )
25
+ .get( 'core/edit-site', 'showListViewByDefault' )
26
+ ) {
27
+ dispatch.setIsListViewOpened( true );
28
+ }
29
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Returns the current canvas mode.
3
+ *
4
+ * @param {Object} state Global application state.
5
+ *
6
+ * @return {string} Canvas mode.
7
+ */
8
+ export function getCanvasMode( state ) {
9
+ return state.canvasMode;
10
+ }
@@ -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
275
 
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
-
291
- return {
292
- templatePart,
293
- block,
294
- };
295
- } )
296
- .filter( ( { templatePart } ) => !! templatePart );
276
+ return getFilteredTemplatePartBlocks( template.blocks, templateParts );
297
277
  }
298
278
  );
299
279
 
@@ -308,17 +288,6 @@ export function getEditorMode( state ) {
308
288
  return __unstableGetPreference( state, 'editorMode' );
309
289
  }
310
290
 
311
- /**
312
- * Returns the current canvas mode.
313
- *
314
- * @param {Object} state Global application state.
315
- *
316
- * @return {string} Canvas mode.
317
- */
318
- export function __unstableGetCanvasMode( state ) {
319
- return state.canvasMode;
320
- }
321
-
322
291
  /**
323
292
  * @deprecated
324
293
  */
@@ -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
+ };