@wordpress/edit-site 5.1.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 (415) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +1 -1
  3. package/build/components/add-new-template/add-custom-generic-template-modal.js +8 -10
  4. package/build/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
  5. package/build/components/add-new-template/add-custom-template-modal.js +0 -1
  6. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
  7. package/build/components/add-new-template/new-template-part.js +5 -9
  8. package/build/components/add-new-template/new-template-part.js.map +1 -1
  9. package/build/components/app/index.js +2 -7
  10. package/build/components/app/index.js.map +1 -1
  11. package/build/components/block-editor/editor-canvas.js +0 -1
  12. package/build/components/block-editor/editor-canvas.js.map +1 -1
  13. package/build/components/block-editor/index.js +25 -59
  14. package/build/components/block-editor/index.js.map +1 -1
  15. package/build/components/block-editor/inserter-media-categories.js +237 -0
  16. package/build/components/block-editor/inserter-media-categories.js.map +1 -0
  17. package/build/components/block-editor/resize-handle.js +2 -1
  18. package/build/components/block-editor/resize-handle.js.map +1 -1
  19. package/build/components/canvas-spinner/index.js +20 -0
  20. package/build/components/canvas-spinner/index.js.map +1 -0
  21. package/build/components/create-template-part-modal/index.js +4 -2
  22. package/build/components/create-template-part-modal/index.js.map +1 -1
  23. package/build/components/editor/index.js +4 -2
  24. package/build/components/editor/index.js.map +1 -1
  25. package/build/components/error-boundary/index.js +2 -12
  26. package/build/components/error-boundary/index.js.map +1 -1
  27. package/build/components/error-boundary/warning.js +5 -28
  28. package/build/components/error-boundary/warning.js.map +1 -1
  29. package/build/components/global-styles/block-preview-panel.js +10 -4
  30. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  31. package/build/components/global-styles/border-panel.js +18 -9
  32. package/build/components/global-styles/border-panel.js.map +1 -1
  33. package/build/components/global-styles/color-palette-panel.js +13 -7
  34. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  35. package/build/components/global-styles/context-menu.js +47 -4
  36. package/build/components/global-styles/context-menu.js.map +1 -1
  37. package/build/components/global-styles/custom-css.js +65 -14
  38. package/build/components/global-styles/custom-css.js.map +1 -1
  39. package/build/components/global-styles/dimensions-panel.js +50 -27
  40. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  41. package/build/components/global-styles/global-styles-provider.js +13 -3
  42. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  43. package/build/components/global-styles/gradients-palette-panel.js +17 -11
  44. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  45. package/build/components/global-styles/hooks.js +21 -142
  46. package/build/components/global-styles/hooks.js.map +1 -1
  47. package/build/components/global-styles/index.js +0 -28
  48. package/build/components/global-styles/index.js.map +1 -1
  49. package/build/components/global-styles/palette.js +11 -4
  50. package/build/components/global-styles/palette.js.map +1 -1
  51. package/build/components/global-styles/preview.js +18 -15
  52. package/build/components/global-styles/preview.js.map +1 -1
  53. package/build/components/global-styles/screen-background-color.js +28 -13
  54. package/build/components/global-styles/screen-background-color.js.map +1 -1
  55. package/build/components/global-styles/screen-block-list.js +4 -1
  56. package/build/components/global-styles/screen-block-list.js.map +1 -1
  57. package/build/components/global-styles/screen-border.js +16 -4
  58. package/build/components/global-styles/screen-border.js.map +1 -1
  59. package/build/components/global-styles/screen-button-color.js +17 -9
  60. package/build/components/global-styles/screen-button-color.js.map +1 -1
  61. package/build/components/global-styles/screen-colors.js +59 -26
  62. package/build/components/global-styles/screen-colors.js.map +1 -1
  63. package/build/components/global-styles/screen-css.js +20 -8
  64. package/build/components/global-styles/screen-css.js.map +1 -1
  65. package/build/components/global-styles/screen-heading-color.js +24 -16
  66. package/build/components/global-styles/screen-heading-color.js.map +1 -1
  67. package/build/components/global-styles/screen-layout.js +9 -3
  68. package/build/components/global-styles/screen-layout.js.map +1 -1
  69. package/build/components/global-styles/screen-link-color.js +19 -11
  70. package/build/components/global-styles/screen-link-color.js.map +1 -1
  71. package/build/components/global-styles/screen-root.js +25 -9
  72. package/build/components/global-styles/screen-root.js.map +1 -1
  73. package/build/components/global-styles/screen-style-variations.js +8 -4
  74. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  75. package/build/components/global-styles/screen-text-color.js +15 -7
  76. package/build/components/global-styles/screen-text-color.js.map +1 -1
  77. package/build/components/global-styles/screen-typography.js +23 -11
  78. package/build/components/global-styles/screen-typography.js.map +1 -1
  79. package/build/components/global-styles/screen-variations.js +71 -0
  80. package/build/components/global-styles/screen-variations.js.map +1 -0
  81. package/build/components/global-styles/shadow-panel.js +196 -0
  82. package/build/components/global-styles/shadow-panel.js.map +1 -0
  83. package/build/components/global-styles/typography-panel.js +37 -22
  84. package/build/components/global-styles/typography-panel.js.map +1 -1
  85. package/build/components/global-styles/typography-preview.js +19 -9
  86. package/build/components/global-styles/typography-preview.js.map +1 -1
  87. package/build/components/global-styles/ui.js +139 -21
  88. package/build/components/global-styles/ui.js.map +1 -1
  89. package/build/components/global-styles/utils.js +8 -290
  90. package/build/components/global-styles/utils.js.map +1 -1
  91. package/build/components/global-styles/variations-panel.js +85 -0
  92. package/build/components/global-styles/variations-panel.js.map +1 -0
  93. package/build/components/global-styles-renderer/index.js +7 -5
  94. package/build/components/global-styles-renderer/index.js.map +1 -1
  95. package/build/components/header-edit-mode/document-actions/index.js +2 -2
  96. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  97. package/build/components/keyboard-shortcut-help-modal/index.js +0 -1
  98. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  99. package/build/components/layout/index.js +86 -15
  100. package/build/components/layout/index.js.map +1 -1
  101. package/build/components/list/actions/rename-menu-item.js +8 -11
  102. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  103. package/build/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +3 -2
  104. package/build/components/navigation-inspector/index.js.map +1 -0
  105. package/build/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +13 -15
  106. package/build/components/navigation-inspector/navigation-menu.js.map +1 -0
  107. package/build/components/sidebar/index.js +3 -1
  108. package/build/components/sidebar/index.js.map +1 -1
  109. package/build/components/sidebar-edit-mode/global-styles-sidebar.js +3 -18
  110. package/build/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  111. package/build/components/sidebar-edit-mode/index.js +1 -14
  112. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  113. package/build/components/sidebar-navigation-screen/index.js +3 -2
  114. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  115. package/build/components/sidebar-navigation-screen-main/index.js +23 -1
  116. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  117. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +35 -0
  118. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
  119. package/build/components/sidebar-navigation-screen-templates/index.js +3 -8
  120. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  121. package/build/components/site-hub/index.js +11 -11
  122. package/build/components/site-hub/index.js.map +1 -1
  123. package/build/components/site-icon/index.js +1 -1
  124. package/build/components/site-icon/index.js.map +1 -1
  125. package/build/components/style-book/index.js +7 -4
  126. package/build/components/style-book/index.js.map +1 -1
  127. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +54 -0
  128. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -0
  129. package/build/components/template-details/edit-template-title.js +1 -0
  130. package/build/components/template-details/edit-template-title.js.map +1 -1
  131. package/build/components/template-details/template-part-area-selector.js +1 -0
  132. package/build/components/template-details/template-part-area-selector.js.map +1 -1
  133. package/build/components/template-part-converter/convert-to-template-part.js +5 -9
  134. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  135. package/build/experiments.js +19 -0
  136. package/build/experiments.js.map +1 -0
  137. package/build/hooks/push-changes-to-global-styles/index.js +68 -9
  138. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  139. package/build/index.js +53 -60
  140. package/build/index.js.map +1 -1
  141. package/build/store/reducer.js +1 -1
  142. package/build/store/reducer.js.map +1 -1
  143. package/build/store/selectors.js +7 -27
  144. package/build/store/selectors.js.map +1 -1
  145. package/build/store/utils.js +77 -0
  146. package/build/store/utils.js.map +1 -0
  147. package/build/utils/template-part-create.js +71 -0
  148. package/build/utils/template-part-create.js.map +1 -0
  149. package/build-module/components/add-new-template/add-custom-generic-template-modal.js +9 -11
  150. package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
  151. package/build-module/components/add-new-template/add-custom-template-modal.js +0 -1
  152. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
  153. package/build-module/components/add-new-template/new-template-part.js +5 -9
  154. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  155. package/build-module/components/app/index.js +2 -7
  156. package/build-module/components/app/index.js.map +1 -1
  157. package/build-module/components/block-editor/editor-canvas.js +0 -1
  158. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  159. package/build-module/components/block-editor/index.js +27 -57
  160. package/build-module/components/block-editor/index.js.map +1 -1
  161. package/build-module/components/block-editor/inserter-media-categories.js +225 -0
  162. package/build-module/components/block-editor/inserter-media-categories.js.map +1 -0
  163. package/build-module/components/block-editor/resize-handle.js +2 -1
  164. package/build-module/components/block-editor/resize-handle.js.map +1 -1
  165. package/build-module/components/canvas-spinner/index.js +12 -0
  166. package/build-module/components/canvas-spinner/index.js.map +1 -0
  167. package/build-module/components/create-template-part-modal/index.js +5 -3
  168. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  169. package/build-module/components/editor/index.js +3 -2
  170. package/build-module/components/editor/index.js.map +1 -1
  171. package/build-module/components/error-boundary/index.js +2 -12
  172. package/build-module/components/error-boundary/index.js.map +1 -1
  173. package/build-module/components/error-boundary/warning.js +5 -28
  174. package/build-module/components/error-boundary/warning.js.map +1 -1
  175. package/build-module/components/global-styles/block-preview-panel.js +10 -4
  176. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  177. package/build-module/components/global-styles/border-panel.js +18 -11
  178. package/build-module/components/global-styles/border-panel.js.map +1 -1
  179. package/build-module/components/global-styles/color-palette-panel.js +11 -7
  180. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  181. package/build-module/components/global-styles/context-menu.js +46 -8
  182. package/build-module/components/global-styles/context-menu.js.map +1 -1
  183. package/build-module/components/global-styles/custom-css.js +61 -15
  184. package/build-module/components/global-styles/custom-css.js.map +1 -1
  185. package/build-module/components/global-styles/dimensions-panel.js +50 -28
  186. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  187. package/build-module/components/global-styles/global-styles-provider.js +7 -2
  188. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  189. package/build-module/components/global-styles/gradients-palette-panel.js +15 -11
  190. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  191. package/build-module/components/global-styles/hooks.js +23 -134
  192. package/build-module/components/global-styles/hooks.js.map +1 -1
  193. package/build-module/components/global-styles/index.js +0 -2
  194. package/build-module/components/global-styles/index.js.map +1 -1
  195. package/build-module/components/global-styles/palette.js +10 -5
  196. package/build-module/components/global-styles/palette.js.map +1 -1
  197. package/build-module/components/global-styles/preview.js +18 -14
  198. package/build-module/components/global-styles/preview.js.map +1 -1
  199. package/build-module/components/global-styles/screen-background-color.js +27 -15
  200. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  201. package/build-module/components/global-styles/screen-block-list.js +3 -1
  202. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  203. package/build-module/components/global-styles/screen-border.js +14 -4
  204. package/build-module/components/global-styles/screen-border.js.map +1 -1
  205. package/build-module/components/global-styles/screen-button-color.js +17 -11
  206. package/build-module/components/global-styles/screen-button-color.js.map +1 -1
  207. package/build-module/components/global-styles/screen-colors.js +56 -27
  208. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  209. package/build-module/components/global-styles/screen-css.js +21 -9
  210. package/build-module/components/global-styles/screen-css.js.map +1 -1
  211. package/build-module/components/global-styles/screen-heading-color.js +24 -18
  212. package/build-module/components/global-styles/screen-heading-color.js.map +1 -1
  213. package/build-module/components/global-styles/screen-layout.js +8 -3
  214. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  215. package/build-module/components/global-styles/screen-link-color.js +19 -13
  216. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  217. package/build-module/components/global-styles/screen-root.js +23 -9
  218. package/build-module/components/global-styles/screen-root.js.map +1 -1
  219. package/build-module/components/global-styles/screen-style-variations.js +5 -2
  220. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  221. package/build-module/components/global-styles/screen-text-color.js +15 -9
  222. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  223. package/build-module/components/global-styles/screen-typography.js +19 -10
  224. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  225. package/build-module/components/global-styles/screen-variations.js +54 -0
  226. package/build-module/components/global-styles/screen-variations.js.map +1 -0
  227. package/build-module/components/global-styles/shadow-panel.js +177 -0
  228. package/build-module/components/global-styles/shadow-panel.js.map +1 -0
  229. package/build-module/components/global-styles/typography-panel.js +37 -24
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/global-styles/typography-preview.js +17 -9
  232. package/build-module/components/global-styles/typography-preview.js.map +1 -1
  233. package/build-module/components/global-styles/ui.js +132 -22
  234. package/build-module/components/global-styles/ui.js.map +1 -1
  235. package/build-module/components/global-styles/utils.js +7 -277
  236. package/build-module/components/global-styles/utils.js.map +1 -1
  237. package/build-module/components/global-styles/variations-panel.js +68 -0
  238. package/build-module/components/global-styles/variations-panel.js.map +1 -0
  239. package/build-module/components/global-styles-renderer/index.js +5 -5
  240. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  241. package/build-module/components/header-edit-mode/document-actions/index.js +2 -2
  242. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  243. package/build-module/components/keyboard-shortcut-help-modal/index.js +0 -1
  244. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  245. package/build-module/components/layout/index.js +86 -17
  246. package/build-module/components/layout/index.js.map +1 -1
  247. package/build-module/components/list/actions/rename-menu-item.js +9 -12
  248. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  249. package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +3 -2
  250. package/build-module/components/navigation-inspector/index.js.map +1 -0
  251. package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +13 -16
  252. package/build-module/components/navigation-inspector/navigation-menu.js.map +1 -0
  253. package/build-module/components/sidebar/index.js +2 -1
  254. package/build-module/components/sidebar/index.js.map +1 -1
  255. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js +6 -21
  256. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  257. package/build-module/components/sidebar-edit-mode/index.js +1 -13
  258. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  259. package/build-module/components/sidebar-navigation-screen/index.js +3 -2
  260. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  261. package/build-module/components/sidebar-navigation-screen-main/index.js +22 -2
  262. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  263. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +23 -0
  264. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
  265. package/build-module/components/sidebar-navigation-screen-templates/index.js +4 -9
  266. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  267. package/build-module/components/site-hub/index.js +12 -11
  268. package/build-module/components/site-hub/index.js.map +1 -1
  269. package/build-module/components/site-icon/index.js +1 -1
  270. package/build-module/components/site-icon/index.js.map +1 -1
  271. package/build-module/components/style-book/index.js +8 -5
  272. package/build-module/components/style-book/index.js.map +1 -1
  273. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +43 -0
  274. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -0
  275. package/build-module/components/template-details/edit-template-title.js +1 -0
  276. package/build-module/components/template-details/edit-template-title.js.map +1 -1
  277. package/build-module/components/template-details/template-part-area-selector.js +1 -0
  278. package/build-module/components/template-details/template-part-area-selector.js.map +1 -1
  279. package/build-module/components/template-part-converter/convert-to-template-part.js +5 -9
  280. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  281. package/build-module/experiments.js +9 -0
  282. package/build-module/experiments.js.map +1 -0
  283. package/build-module/hooks/push-changes-to-global-styles/index.js +65 -6
  284. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  285. package/build-module/index.js +52 -60
  286. package/build-module/index.js.map +1 -1
  287. package/build-module/store/reducer.js +1 -1
  288. package/build-module/store/reducer.js.map +1 -1
  289. package/build-module/store/selectors.js +6 -26
  290. package/build-module/store/selectors.js.map +1 -1
  291. package/build-module/store/utils.js +66 -0
  292. package/build-module/store/utils.js.map +1 -0
  293. package/build-module/utils/template-part-create.js +53 -0
  294. package/build-module/utils/template-part-create.js.map +1 -0
  295. package/build-style/style-rtl.css +448 -278
  296. package/build-style/style.css +448 -278
  297. package/package.json +32 -30
  298. package/src/components/add-new-template/add-custom-generic-template-modal.js +20 -28
  299. package/src/components/add-new-template/add-custom-template-modal.js +0 -1
  300. package/src/components/add-new-template/new-template-part.js +12 -11
  301. package/src/components/add-new-template/style.scss +0 -4
  302. package/src/components/app/index.js +2 -2
  303. package/src/components/block-editor/editor-canvas.js +0 -1
  304. package/src/components/block-editor/index.js +21 -77
  305. package/src/components/block-editor/inserter-media-categories.js +247 -0
  306. package/src/components/block-editor/resize-handle.js +6 -2
  307. package/src/components/block-editor/style.scss +55 -7
  308. package/src/components/canvas-spinner/index.js +12 -0
  309. package/src/components/canvas-spinner/style.scss +7 -0
  310. package/src/components/create-template-part-modal/index.js +75 -67
  311. package/src/components/create-template-part-modal/style.scss +0 -10
  312. package/src/components/editor/index.js +5 -3
  313. package/src/components/error-boundary/index.js +2 -10
  314. package/src/components/error-boundary/warning.js +6 -35
  315. package/src/components/global-styles/README.md +1 -75
  316. package/src/components/global-styles/block-preview-panel.js +16 -4
  317. package/src/components/global-styles/border-panel.js +22 -16
  318. package/src/components/global-styles/color-palette-panel.js +10 -7
  319. package/src/components/global-styles/context-menu.js +117 -41
  320. package/src/components/global-styles/custom-css.js +76 -19
  321. package/src/components/global-styles/dimensions-panel.js +58 -31
  322. package/src/components/global-styles/global-styles-provider.js +6 -2
  323. package/src/components/global-styles/gradients-palette-panel.js +17 -11
  324. package/src/components/global-styles/hooks.js +31 -155
  325. package/src/components/global-styles/index.js +0 -2
  326. package/src/components/global-styles/palette.js +9 -5
  327. package/src/components/global-styles/preview.js +19 -13
  328. package/src/components/global-styles/screen-background-color.js +42 -19
  329. package/src/components/global-styles/screen-block-list.js +6 -1
  330. package/src/components/global-styles/screen-border.js +13 -5
  331. package/src/components/global-styles/screen-button-color.js +21 -19
  332. package/src/components/global-styles/screen-colors.js +66 -22
  333. package/src/components/global-styles/screen-css.js +30 -14
  334. package/src/components/global-styles/screen-heading-color.js +32 -27
  335. package/src/components/global-styles/screen-layout.js +7 -4
  336. package/src/components/global-styles/screen-link-color.js +34 -22
  337. package/src/components/global-styles/screen-root.js +24 -9
  338. package/src/components/global-styles/screen-style-variations.js +7 -2
  339. package/src/components/global-styles/screen-text-color.js +15 -15
  340. package/src/components/global-styles/screen-typography.js +34 -12
  341. package/src/components/global-styles/screen-variations.js +47 -0
  342. package/src/components/global-styles/shadow-panel.js +174 -0
  343. package/src/components/global-styles/style.scss +94 -1
  344. package/src/components/global-styles/typography-panel.js +58 -23
  345. package/src/components/global-styles/typography-preview.js +28 -9
  346. package/src/components/global-styles/ui.js +130 -17
  347. package/src/components/global-styles/utils.js +7 -330
  348. package/src/components/global-styles/variations-panel.js +78 -0
  349. package/src/components/global-styles-renderer/index.js +3 -4
  350. package/src/components/header-edit-mode/document-actions/index.js +1 -1
  351. package/src/components/keyboard-shortcut-help-modal/index.js +0 -1
  352. package/src/components/layout/index.js +116 -21
  353. package/src/components/layout/style.scss +29 -5
  354. package/src/components/list/actions/rename-menu-item.js +14 -23
  355. package/src/components/list/style.scss +0 -4
  356. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +3 -4
  357. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +10 -12
  358. package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/style.scss +4 -17
  359. package/src/components/sidebar/index.js +2 -0
  360. package/src/components/sidebar-edit-mode/global-styles-sidebar.js +8 -32
  361. package/src/components/sidebar-edit-mode/index.js +0 -11
  362. package/src/components/sidebar-edit-mode/settings-header/style.scss +8 -0
  363. package/src/components/sidebar-navigation-item/style.scss +28 -3
  364. package/src/components/sidebar-navigation-screen/index.js +4 -3
  365. package/src/components/sidebar-navigation-screen/style.scss +2 -0
  366. package/src/components/sidebar-navigation-screen-main/index.js +23 -1
  367. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +25 -0
  368. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +12 -0
  369. package/src/components/sidebar-navigation-screen-templates/index.js +12 -19
  370. package/src/components/site-hub/index.js +120 -109
  371. package/src/components/site-hub/style.scss +7 -1
  372. package/src/components/site-icon/index.js +1 -1
  373. package/src/components/site-icon/style.scss +2 -2
  374. package/src/components/style-book/index.js +10 -5
  375. package/src/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +40 -0
  376. package/src/components/template-details/edit-template-title.js +1 -0
  377. package/src/components/template-details/template-part-area-selector.js +1 -0
  378. package/src/components/template-part-converter/convert-to-template-part.js +12 -10
  379. package/src/experiments.js +10 -0
  380. package/src/hooks/push-changes-to-global-styles/index.js +66 -8
  381. package/src/index.js +51 -59
  382. package/src/store/reducer.js +1 -1
  383. package/src/store/selectors.js +6 -26
  384. package/src/store/test/utils.js +181 -0
  385. package/src/store/utils.js +69 -0
  386. package/src/style.scss +4 -2
  387. package/src/utils/template-part-create.js +62 -0
  388. package/src/utils/test/template-part-create.js +63 -0
  389. package/build/components/global-styles/context.js +0 -22
  390. package/build/components/global-styles/context.js.map +0 -1
  391. package/build/components/global-styles/typography-utils.js +0 -92
  392. package/build/components/global-styles/typography-utils.js.map +0 -1
  393. package/build/components/global-styles/use-global-styles-output.js +0 -857
  394. package/build/components/global-styles/use-global-styles-output.js.map +0 -1
  395. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -42
  396. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
  397. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  398. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  399. package/build-module/components/global-styles/context.js +0 -12
  400. package/build-module/components/global-styles/context.js.map +0 -1
  401. package/build-module/components/global-styles/typography-utils.js +0 -84
  402. package/build-module/components/global-styles/typography-utils.js.map +0 -1
  403. package/build-module/components/global-styles/use-global-styles-output.js +0 -815
  404. package/build-module/components/global-styles/use-global-styles-output.js.map +0 -1
  405. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -28
  406. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
  407. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  408. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  409. package/src/components/global-styles/context.js +0 -15
  410. package/src/components/global-styles/test/typography-utils.js +0 -393
  411. package/src/components/global-styles/test/use-global-styles-output.js +0 -814
  412. package/src/components/global-styles/test/utils.js +0 -206
  413. package/src/components/global-styles/typography-utils.js +0 -87
  414. package/src/components/global-styles/use-global-styles-output.js +0 -936
  415. 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';
@@ -131,7 +131,7 @@ export function saveViewPanel( state = false, action ) {
131
131
  * @param {Object} state Current state.
132
132
  * @param {Object} action Dispatched action.
133
133
  */
134
- function canvasMode( state = 'view', action ) {
134
+ function canvasMode( state = 'init', action ) {
135
135
  switch ( action.type ) {
136
136
  case 'SET_CANVAS_MODE':
137
137
  return action.mode;
@@ -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
+ };
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import {
5
+ getUniqueTemplatePartTitle,
6
+ getCleanTemplatePartSlug,
7
+ } from '../template-part-create';
8
+
9
+ describe( 'getUniqueTemplatePartTitle', () => {
10
+ it( 'should return the title if it is unique', () => {
11
+ const title = 'My Template Part';
12
+ const templateParts = [
13
+ {
14
+ title: {
15
+ rendered: 'Template Part With Another Title',
16
+ },
17
+ },
18
+ ];
19
+
20
+ expect( getUniqueTemplatePartTitle( title, templateParts ) ).toBe(
21
+ title
22
+ );
23
+ } );
24
+
25
+ it( 'should return the title with a suffix if it is not unique', () => {
26
+ const title = 'My Template Part';
27
+ const templateParts = [
28
+ {
29
+ title: {
30
+ rendered: 'My Template Part',
31
+ },
32
+ },
33
+ {
34
+ title: {
35
+ rendered: 'My Template Part 2',
36
+ },
37
+ },
38
+ ];
39
+
40
+ expect( getUniqueTemplatePartTitle( title, templateParts ) ).toBe(
41
+ 'My Template Part 3'
42
+ );
43
+ } );
44
+ } );
45
+
46
+ describe( 'getCleanTemplatePartSlug', () => {
47
+ it( 'should return a slug with only latin chars', () => {
48
+ const title = 'Myɶ Template Partɮ';
49
+ expect( getCleanTemplatePartSlug( title ) ).toBe( 'my-template-part' );
50
+ } );
51
+
52
+ it( 'should return a slug with only latin chars and numbers', () => {
53
+ const title = 'My Template Part 2';
54
+ expect( getCleanTemplatePartSlug( title ) ).toBe(
55
+ 'my-template-part-2'
56
+ );
57
+ } );
58
+
59
+ it( 'should default the slug to wp-custom-part', () => {
60
+ const title = '';
61
+ expect( getCleanTemplatePartSlug( title ) ).toBe( 'wp-custom-part' );
62
+ } );
63
+ } );
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.GlobalStylesContext = exports.DEFAULT_GLOBAL_STYLES_CONTEXT = void 0;
7
-
8
- var _element = require("@wordpress/element");
9
-
10
- /**
11
- * WordPress dependencies
12
- */
13
- const DEFAULT_GLOBAL_STYLES_CONTEXT = {
14
- user: {},
15
- base: {},
16
- merged: {},
17
- setUserConfig: () => {}
18
- };
19
- exports.DEFAULT_GLOBAL_STYLES_CONTEXT = DEFAULT_GLOBAL_STYLES_CONTEXT;
20
- const GlobalStylesContext = (0, _element.createContext)(DEFAULT_GLOBAL_STYLES_CONTEXT);
21
- exports.GlobalStylesContext = GlobalStylesContext;
22
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/context.js"],"names":["DEFAULT_GLOBAL_STYLES_CONTEXT","user","base","merged","setUserConfig","GlobalStylesContext"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;AAGO,MAAMA,6BAA6B,GAAG;AAC5CC,EAAAA,IAAI,EAAE,EADsC;AAE5CC,EAAAA,IAAI,EAAE,EAFsC;AAG5CC,EAAAA,MAAM,EAAE,EAHoC;AAI5CC,EAAAA,aAAa,EAAE,MAAM,CAAE;AAJqB,CAAtC;;AAOA,MAAMC,mBAAmB,GAAG,4BAClCL,6BADkC,CAA5B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\nexport const DEFAULT_GLOBAL_STYLES_CONTEXT = {\n\tuser: {},\n\tbase: {},\n\tmerged: {},\n\tsetUserConfig: () => {},\n};\n\nexport const GlobalStylesContext = createContext(\n\tDEFAULT_GLOBAL_STYLES_CONTEXT\n);\n"]}