@wordpress/edit-site 3.0.24 → 4.0.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 (275) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +7 -1
  4. package/build/components/block-editor/resizable-editor.js +1 -0
  5. package/build/components/block-editor/resizable-editor.js.map +1 -1
  6. package/build/components/code-editor/code-editor-text-area.js +95 -0
  7. package/build/components/code-editor/code-editor-text-area.js.map +1 -0
  8. package/build/components/code-editor/index.js +79 -0
  9. package/build/components/code-editor/index.js.map +1 -0
  10. package/build/components/editor/index.js +39 -9
  11. package/build/components/editor/index.js.map +1 -1
  12. package/build/components/global-styles/border-panel.js +81 -22
  13. package/build/components/global-styles/border-panel.js.map +1 -1
  14. package/build/components/global-styles/context-menu.js +4 -6
  15. package/build/components/global-styles/context-menu.js.map +1 -1
  16. package/build/components/global-styles/global-styles-provider.js +1 -0
  17. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  18. package/build/components/global-styles/header.js +2 -7
  19. package/build/components/global-styles/header.js.map +1 -1
  20. package/build/components/global-styles/navigation-button.js +35 -12
  21. package/build/components/global-styles/navigation-button.js.map +1 -1
  22. package/build/components/global-styles/palette.js +3 -3
  23. package/build/components/global-styles/palette.js.map +1 -1
  24. package/build/components/global-styles/preview.js +46 -15
  25. package/build/components/global-styles/preview.js.map +1 -1
  26. package/build/components/global-styles/screen-background-color.js +9 -12
  27. package/build/components/global-styles/screen-background-color.js.map +1 -1
  28. package/build/components/global-styles/screen-block-list.js +2 -3
  29. package/build/components/global-styles/screen-block-list.js.map +1 -1
  30. package/build/components/global-styles/screen-block.js +0 -1
  31. package/build/components/global-styles/screen-block.js.map +1 -1
  32. package/build/components/global-styles/screen-color-palette.js +0 -2
  33. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  34. package/build/components/global-styles/screen-colors.js +5 -6
  35. package/build/components/global-styles/screen-colors.js.map +1 -1
  36. package/build/components/global-styles/screen-layout.js +0 -2
  37. package/build/components/global-styles/screen-layout.js.map +1 -1
  38. package/build/components/global-styles/screen-link-color.js +6 -12
  39. package/build/components/global-styles/screen-link-color.js.map +1 -1
  40. package/build/components/global-styles/screen-root.js +22 -3
  41. package/build/components/global-styles/screen-root.js.map +1 -1
  42. package/build/components/global-styles/screen-style-variations.js +138 -0
  43. package/build/components/global-styles/screen-style-variations.js.map +1 -0
  44. package/build/components/global-styles/screen-text-color.js +6 -12
  45. package/build/components/global-styles/screen-text-color.js.map +1 -1
  46. package/build/components/global-styles/screen-typography-element.js +0 -2
  47. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  48. package/build/components/global-styles/screen-typography.js +2 -3
  49. package/build/components/global-styles/screen-typography.js.map +1 -1
  50. package/build/components/global-styles/ui.js +31 -14
  51. package/build/components/global-styles/ui.js.map +1 -1
  52. package/build/components/header/index.js +12 -4
  53. package/build/components/header/index.js.map +1 -1
  54. package/build/components/header/mode-switcher/index.js +78 -0
  55. package/build/components/header/mode-switcher/index.js.map +1 -0
  56. package/build/components/header/more-menu/copy-content-menu-item.js +74 -0
  57. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -0
  58. package/build/components/header/more-menu/index.js +72 -39
  59. package/build/components/header/more-menu/index.js.map +1 -1
  60. package/build/{plugins → components/header/more-menu}/site-export.js +0 -0
  61. package/build/components/header/more-menu/site-export.js.map +1 -0
  62. package/build/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  63. package/build/components/header/more-menu/welcome-guide-menu-item.js.map +1 -0
  64. package/build/components/header/tools-more-menu-group/index.js +1 -5
  65. package/build/components/header/tools-more-menu-group/index.js.map +1 -1
  66. package/build/components/keyboard-shortcut-help-modal/config.js +45 -0
  67. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  68. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +56 -0
  69. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  70. package/build/components/keyboard-shortcut-help-modal/index.js +137 -0
  71. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  72. package/build/components/keyboard-shortcut-help-modal/shortcut.js +65 -0
  73. package/build/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  74. package/build/components/keyboard-shortcuts/index.js +26 -1
  75. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  76. package/build/components/list/actions/index.js +5 -4
  77. package/build/components/list/actions/index.js.map +1 -1
  78. package/build/components/list/actions/rename-menu-item.js +3 -3
  79. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  80. package/build/components/list/added-by.js +51 -50
  81. package/build/components/list/added-by.js.map +1 -1
  82. package/build/components/routes/redirect-to-homepage.js +87 -0
  83. package/build/components/routes/redirect-to-homepage.js.map +1 -0
  84. package/build/components/secondary-sidebar/inserter-sidebar.js +13 -3
  85. package/build/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  86. package/build/components/secondary-sidebar/list-view-sidebar.js +7 -5
  87. package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  88. package/build/components/sidebar/default-sidebar.js +4 -2
  89. package/build/components/sidebar/default-sidebar.js.map +1 -1
  90. package/build/components/sidebar/global-styles-sidebar.js +1 -0
  91. package/build/components/sidebar/global-styles-sidebar.js.map +1 -1
  92. package/build/components/url-query-controller/index.js +1 -38
  93. package/build/components/url-query-controller/index.js.map +1 -1
  94. package/build/index.js +10 -5
  95. package/build/index.js.map +1 -1
  96. package/build/store/actions.js +29 -27
  97. package/build/store/actions.js.map +1 -1
  98. package/build/store/defaults.js +2 -1
  99. package/build/store/defaults.js.map +1 -1
  100. package/build/store/reducer.js +11 -0
  101. package/build/store/reducer.js.map +1 -1
  102. package/build/store/selectors.js +13 -0
  103. package/build/store/selectors.js.map +1 -1
  104. package/build-module/components/block-editor/resizable-editor.js +1 -0
  105. package/build-module/components/block-editor/resizable-editor.js.map +1 -1
  106. package/build-module/components/code-editor/code-editor-text-area.js +83 -0
  107. package/build-module/components/code-editor/code-editor-text-area.js.map +1 -0
  108. package/build-module/components/code-editor/index.js +62 -0
  109. package/build-module/components/code-editor/index.js.map +1 -0
  110. package/build-module/components/editor/index.js +38 -10
  111. package/build-module/components/editor/index.js.map +1 -1
  112. package/build-module/components/global-styles/border-panel.js +82 -23
  113. package/build-module/components/global-styles/border-panel.js.map +1 -1
  114. package/build-module/components/global-styles/context-menu.js +1 -1
  115. package/build-module/components/global-styles/context-menu.js.map +1 -1
  116. package/build-module/components/global-styles/global-styles-provider.js +1 -1
  117. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  118. package/build-module/components/global-styles/header.js +2 -5
  119. package/build-module/components/global-styles/header.js.map +1 -1
  120. package/build-module/components/global-styles/navigation-button.js +35 -10
  121. package/build-module/components/global-styles/navigation-button.js.map +1 -1
  122. package/build-module/components/global-styles/palette.js +2 -2
  123. package/build-module/components/global-styles/palette.js.map +1 -1
  124. package/build-module/components/global-styles/preview.js +45 -15
  125. package/build-module/components/global-styles/preview.js.map +1 -1
  126. package/build-module/components/global-styles/screen-background-color.js +9 -13
  127. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  128. package/build-module/components/global-styles/screen-block-list.js +1 -2
  129. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  130. package/build-module/components/global-styles/screen-block.js +0 -1
  131. package/build-module/components/global-styles/screen-block.js.map +1 -1
  132. package/build-module/components/global-styles/screen-color-palette.js +0 -2
  133. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  134. package/build-module/components/global-styles/screen-colors.js +2 -3
  135. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  136. package/build-module/components/global-styles/screen-layout.js +0 -2
  137. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  138. package/build-module/components/global-styles/screen-link-color.js +7 -13
  139. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  140. package/build-module/components/global-styles/screen-root.js +21 -4
  141. package/build-module/components/global-styles/screen-root.js.map +1 -1
  142. package/build-module/components/global-styles/screen-style-variations.js +119 -0
  143. package/build-module/components/global-styles/screen-style-variations.js.map +1 -0
  144. package/build-module/components/global-styles/screen-text-color.js +7 -13
  145. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  146. package/build-module/components/global-styles/screen-typography-element.js +0 -2
  147. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  148. package/build-module/components/global-styles/screen-typography.js +1 -2
  149. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  150. package/build-module/components/global-styles/ui.js +29 -14
  151. package/build-module/components/global-styles/ui.js.map +1 -1
  152. package/build-module/components/header/index.js +13 -5
  153. package/build-module/components/header/index.js.map +1 -1
  154. package/build-module/components/header/mode-switcher/index.js +65 -0
  155. package/build-module/components/header/mode-switcher/index.js.map +1 -0
  156. package/build-module/components/header/more-menu/copy-content-menu-item.js +59 -0
  157. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -0
  158. package/build-module/components/header/more-menu/index.js +67 -40
  159. package/build-module/components/header/more-menu/index.js.map +1 -1
  160. package/build-module/{plugins → components/header/more-menu}/site-export.js +0 -0
  161. package/build-module/components/header/more-menu/site-export.js.map +1 -0
  162. package/build-module/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  163. package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +1 -0
  164. package/build-module/components/header/tools-more-menu-group/index.js +2 -5
  165. package/build-module/components/header/tools-more-menu-group/index.js.map +1 -1
  166. package/build-module/components/keyboard-shortcut-help-modal/config.js +36 -0
  167. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  168. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +44 -0
  169. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  170. package/build-module/components/keyboard-shortcut-help-modal/index.js +120 -0
  171. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  172. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js +58 -0
  173. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  174. package/build-module/components/keyboard-shortcuts/index.js +26 -1
  175. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  176. package/build-module/components/list/actions/index.js +5 -4
  177. package/build-module/components/list/actions/index.js.map +1 -1
  178. package/build-module/components/list/actions/rename-menu-item.js +3 -3
  179. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  180. package/build-module/components/list/added-by.js +52 -51
  181. package/build-module/components/list/added-by.js.map +1 -1
  182. package/build-module/components/routes/redirect-to-homepage.js +75 -0
  183. package/build-module/components/routes/redirect-to-homepage.js.map +1 -0
  184. package/build-module/components/secondary-sidebar/inserter-sidebar.js +14 -4
  185. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  186. package/build-module/components/secondary-sidebar/list-view-sidebar.js +7 -5
  187. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  188. package/build-module/components/sidebar/default-sidebar.js +4 -2
  189. package/build-module/components/sidebar/default-sidebar.js.map +1 -1
  190. package/build-module/components/sidebar/global-styles-sidebar.js +1 -0
  191. package/build-module/components/sidebar/global-styles-sidebar.js.map +1 -1
  192. package/build-module/components/url-query-controller/index.js +3 -40
  193. package/build-module/components/url-query-controller/index.js.map +1 -1
  194. package/build-module/index.js +9 -4
  195. package/build-module/index.js.map +1 -1
  196. package/build-module/store/actions.js +25 -25
  197. package/build-module/store/actions.js.map +1 -1
  198. package/build-module/store/defaults.js +2 -1
  199. package/build-module/store/defaults.js.map +1 -1
  200. package/build-module/store/reducer.js +11 -0
  201. package/build-module/store/reducer.js.map +1 -1
  202. package/build-module/store/selectors.js +11 -0
  203. package/build-module/store/selectors.js.map +1 -1
  204. package/build-style/style-rtl.css +202 -72
  205. package/build-style/style.css +202 -72
  206. package/package.json +28 -30
  207. package/src/components/block-editor/resizable-editor.js +1 -0
  208. package/src/components/block-editor/style.scss +15 -23
  209. package/src/components/code-editor/code-editor-text-area.js +79 -0
  210. package/src/components/code-editor/index.js +65 -0
  211. package/src/components/code-editor/style.scss +100 -0
  212. package/src/components/editor/index.js +55 -10
  213. package/src/components/global-styles/border-panel.js +106 -42
  214. package/src/components/global-styles/context-menu.js +1 -1
  215. package/src/components/global-styles/global-styles-provider.js +1 -2
  216. package/src/components/global-styles/header.js +3 -5
  217. package/src/components/global-styles/navigation-button.js +31 -10
  218. package/src/components/global-styles/palette.js +6 -2
  219. package/src/components/global-styles/preview.js +46 -18
  220. package/src/components/global-styles/screen-background-color.js +7 -12
  221. package/src/components/global-styles/screen-block-list.js +1 -2
  222. package/src/components/global-styles/screen-block.js +1 -1
  223. package/src/components/global-styles/screen-color-palette.js +0 -2
  224. package/src/components/global-styles/screen-colors.js +2 -3
  225. package/src/components/global-styles/screen-layout.js +1 -5
  226. package/src/components/global-styles/screen-link-color.js +6 -16
  227. package/src/components/global-styles/screen-root.js +32 -3
  228. package/src/components/global-styles/screen-style-variations.js +130 -0
  229. package/src/components/global-styles/screen-text-color.js +6 -16
  230. package/src/components/global-styles/screen-typography-element.js +0 -4
  231. package/src/components/global-styles/screen-typography.js +2 -3
  232. package/src/components/global-styles/style.scss +24 -25
  233. package/src/components/global-styles/ui.js +55 -25
  234. package/src/components/header/document-actions/style.scss +1 -9
  235. package/src/components/header/index.js +10 -2
  236. package/src/components/header/mode-switcher/index.js +67 -0
  237. package/src/components/header/more-menu/copy-content-menu-item.js +53 -0
  238. package/src/components/header/more-menu/index.js +107 -44
  239. package/src/{plugins → components/header/more-menu}/site-export.js +0 -0
  240. package/src/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  241. package/src/components/header/style.scss +2 -1
  242. package/src/components/header/tools-more-menu-group/index.js +2 -7
  243. package/src/components/keyboard-shortcut-help-modal/config.js +27 -0
  244. package/src/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +41 -0
  245. package/src/components/keyboard-shortcut-help-modal/index.js +135 -0
  246. package/src/components/keyboard-shortcut-help-modal/shortcut.js +73 -0
  247. package/src/components/keyboard-shortcut-help-modal/style.scss +66 -0
  248. package/src/components/keyboard-shortcuts/index.js +27 -1
  249. package/src/components/list/actions/index.js +5 -4
  250. package/src/components/list/actions/rename-menu-item.js +3 -3
  251. package/src/components/list/added-by.js +57 -63
  252. package/src/components/routes/redirect-to-homepage.js +71 -0
  253. package/src/components/secondary-sidebar/inserter-sidebar.js +14 -3
  254. package/src/components/secondary-sidebar/list-view-sidebar.js +12 -5
  255. package/src/components/secondary-sidebar/style.scss +0 -4
  256. package/src/components/sidebar/default-sidebar.js +2 -0
  257. package/src/components/sidebar/global-styles-sidebar.js +1 -0
  258. package/src/components/sidebar/style.scss +21 -14
  259. package/src/components/url-query-controller/index.js +3 -35
  260. package/src/index.js +10 -3
  261. package/src/store/actions.js +24 -37
  262. package/src/store/defaults.js +1 -0
  263. package/src/store/reducer.js +6 -0
  264. package/src/store/selectors.js +11 -0
  265. package/src/store/test/actions.js +2 -92
  266. package/src/style.scss +2 -0
  267. package/build/plugins/index.js +0 -28
  268. package/build/plugins/index.js.map +0 -1
  269. package/build/plugins/site-export.js.map +0 -1
  270. package/build/plugins/welcome-guide-menu-item.js.map +0 -1
  271. package/build-module/plugins/index.js +0 -20
  272. package/build-module/plugins/index.js.map +0 -1
  273. package/build-module/plugins/site-export.js.map +0 -1
  274. package/build-module/plugins/welcome-guide-menu-item.js.map +0 -1
  275. package/src/plugins/index.js +0 -24
@@ -0,0 +1,100 @@
1
+ .edit-site-code-editor {
2
+ position: relative;
3
+ width: 100%;
4
+ background-color: $white;
5
+ flex-grow: 1;
6
+
7
+ &__body {
8
+ width: 100%;
9
+ padding: 0 $grid-unit-15 $grid-unit-15 $grid-unit-15;
10
+ max-width: $break-xlarge;
11
+ margin-left: auto;
12
+ margin-right: auto;
13
+
14
+ @include break-large() {
15
+ padding: $grid-unit-20 $grid-unit-30 #{ $grid-unit-60 * 2 } $grid-unit-30;
16
+ padding: 0 $grid-unit-30 $grid-unit-30 $grid-unit-30;
17
+ }
18
+ }
19
+
20
+ // Exit code editor toolbar.
21
+ &__toolbar {
22
+ position: sticky;
23
+ z-index: z-index(".edit-site-code-editor__toolbar");
24
+ top: 0;
25
+ left: 0;
26
+ right: 0;
27
+ display: flex;
28
+ background: rgba($white, 0.8);
29
+ padding: $grid-unit-05 $grid-unit-15;
30
+
31
+ @include break-small() {
32
+ padding: $grid-unit-15;
33
+ }
34
+
35
+ @include break-large() {
36
+ padding: $grid-unit-15 $grid-unit-30;
37
+ }
38
+
39
+ h2 {
40
+ line-height: $button-size;
41
+ margin: 0 auto 0 0;
42
+ font-size: $default-font-size;
43
+ color: $gray-900;
44
+ }
45
+
46
+ .components-button svg {
47
+ order: 1;
48
+ }
49
+ }
50
+ }
51
+
52
+ textarea.edit-site-code-editor-text-area.edit-site-code-editor-text-area {
53
+ border: $border-width solid $gray-600;
54
+ border-radius: 0;
55
+ display: block;
56
+ margin: 0;
57
+ width: 100%;
58
+ box-shadow: none;
59
+ resize: none;
60
+ overflow: hidden;
61
+ font-family: $editor-html-font;
62
+ line-height: 2.4;
63
+ min-height: 200px;
64
+ transition: border 0.1s ease-out, box-shadow 0.1s linear;
65
+ @include reduce-motion("transition");
66
+
67
+ // Same padding as title.
68
+ padding: $grid-unit-20;
69
+ @include break-small() {
70
+ padding: $grid-unit-30;
71
+ }
72
+
73
+ /* Fonts smaller than 16px causes mobile safari to zoom. */
74
+ font-size: $mobile-text-min-font-size !important;
75
+ @include break-small {
76
+ font-size: $text-editor-font-size !important;
77
+ }
78
+
79
+ &:focus {
80
+ border-color: var(--wp-admin-theme-color);
81
+ box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
82
+
83
+ // Elevate the z-index on focus so the focus style is uncropped.
84
+ position: relative;
85
+ }
86
+
87
+ &::-webkit-input-placeholder {
88
+ color: $dark-gray-placeholder;
89
+ }
90
+
91
+ &::-moz-placeholder {
92
+ color: $dark-gray-placeholder;
93
+ // Override Firefox default.
94
+ opacity: 1;
95
+ }
96
+
97
+ &:-ms-input-placeholder {
98
+ color: $dark-gray-placeholder;
99
+ }
100
+ }
@@ -16,12 +16,13 @@ import {
16
16
  EditorSnackbars,
17
17
  EntitiesSavedStates,
18
18
  } from '@wordpress/editor';
19
- import { __ } from '@wordpress/i18n';
19
+ import { __, sprintf } from '@wordpress/i18n';
20
20
  import { PluginArea } from '@wordpress/plugins';
21
21
  import {
22
22
  ShortcutProvider,
23
23
  store as keyboardShortcutsStore,
24
24
  } from '@wordpress/keyboard-shortcuts';
25
+ import { store as noticesStore } from '@wordpress/notices';
25
26
 
26
27
  /**
27
28
  * Internal dependencies
@@ -30,6 +31,7 @@ import Header from '../header';
30
31
  import { SidebarComplementaryAreaFills } from '../sidebar';
31
32
  import NavigationSidebar from '../navigation-sidebar';
32
33
  import BlockEditor from '../block-editor';
34
+ import CodeEditor from '../code-editor';
33
35
  import KeyboardShortcuts from '../keyboard-shortcuts';
34
36
  import URLQueryController from '../url-query-controller';
35
37
  import InserterSidebar from '../secondary-sidebar/inserter-sidebar';
@@ -60,6 +62,7 @@ function Editor( { onError } ) {
60
62
  isNavigationOpen,
61
63
  previousShortcut,
62
64
  nextShortcut,
65
+ editorMode,
63
66
  } = useSelect( ( select ) => {
64
67
  const {
65
68
  isInserterOpened,
@@ -69,6 +72,7 @@ function Editor( { onError } ) {
69
72
  getEditedPostId,
70
73
  getPage,
71
74
  isNavigationOpened,
75
+ getEditorMode,
72
76
  } = select( editSiteStore );
73
77
  const { hasFinishedResolution, getEntityRecord } = select( coreStore );
74
78
  const postType = getEditedPostType();
@@ -102,9 +106,12 @@ function Editor( { onError } ) {
102
106
  nextShortcut: select(
103
107
  keyboardShortcutsStore
104
108
  ).getAllShortcutKeyCombinations( 'core/edit-site/next-region' ),
109
+ editorMode: getEditorMode(),
105
110
  };
106
111
  }, [] );
107
112
  const { setPage, setIsInserterOpened } = useDispatch( editSiteStore );
113
+ const { enableComplementaryArea } = useDispatch( interfaceStore );
114
+ const { createErrorNotice } = useDispatch( noticesStore );
108
115
 
109
116
  const [
110
117
  isEntitiesSavedStatesOpen,
@@ -147,6 +154,19 @@ function Editor( { onError } ) {
147
154
  }
148
155
  }, [ isNavigationOpen ] );
149
156
 
157
+ useEffect(
158
+ function openGlobalStylesOnLoad() {
159
+ const searchParams = new URLSearchParams( window.location.search );
160
+ if ( searchParams.get( 'styles' ) === 'open' ) {
161
+ enableComplementaryArea(
162
+ 'core/edit-site',
163
+ 'edit-site/global-styles'
164
+ );
165
+ }
166
+ },
167
+ [ enableComplementaryArea ]
168
+ );
169
+
150
170
  // Don't render the Editor until the settings are set and loaded
151
171
  const isReady =
152
172
  settings?.siteUrl &&
@@ -163,6 +183,18 @@ function Editor( { onError } ) {
163
183
  return null;
164
184
  };
165
185
 
186
+ function onPluginAreaError( name ) {
187
+ createErrorNotice(
188
+ sprintf(
189
+ /* translators: %s: plugin name */
190
+ __(
191
+ 'The "%s" plugin has encountered an error and cannot be rendered.'
192
+ ),
193
+ name
194
+ )
195
+ );
196
+ }
197
+
166
198
  // Only announce the title once the editor is ready to prevent "Replace"
167
199
  // action in <URlQueryController> from double-announcing.
168
200
  useTitle( isReady && __( 'Editor (beta)' ) );
@@ -206,13 +238,18 @@ function Editor( { onError } ) {
206
238
  content={
207
239
  <>
208
240
  <EditorNotices />
209
- { template && (
210
- <BlockEditor
211
- setIsInserterOpen={
212
- setIsInserterOpened
213
- }
214
- />
215
- ) }
241
+ { editorMode === 'visual' &&
242
+ template && (
243
+ <BlockEditor
244
+ setIsInserterOpen={
245
+ setIsInserterOpened
246
+ }
247
+ />
248
+ ) }
249
+ { editorMode === 'text' &&
250
+ template && (
251
+ <CodeEditor />
252
+ ) }
216
253
  { templateResolved &&
217
254
  ! template &&
218
255
  settings?.siteUrl &&
@@ -263,7 +300,13 @@ function Editor( { onError } ) {
263
300
  ) }
264
301
  </>
265
302
  }
266
- footer={ <BlockBreadcrumb /> }
303
+ footer={
304
+ <BlockBreadcrumb
305
+ rootLabelText={ __(
306
+ 'Template'
307
+ ) }
308
+ />
309
+ }
267
310
  shortcuts={ {
268
311
  previous: previousShortcut,
269
312
  next: nextShortcut,
@@ -271,7 +314,9 @@ function Editor( { onError } ) {
271
314
  />
272
315
  <WelcomeGuide />
273
316
  <Popover.Slot />
274
- <PluginArea />
317
+ <PluginArea
318
+ onError={ onPluginAreaError }
319
+ />
275
320
  </ErrorBoundary>
276
321
  </BlockContextProvider>
277
322
  </GlobalStylesProvider>
@@ -7,7 +7,8 @@ import {
7
7
  __experimentalColorGradientControl as ColorGradientControl,
8
8
  } from '@wordpress/block-editor';
9
9
  import {
10
- PanelBody,
10
+ __experimentalToolsPanel as ToolsPanel,
11
+ __experimentalToolsPanelItem as ToolsPanelItem,
11
12
  __experimentalUnitControl as UnitControl,
12
13
  __experimentalUseCustomUnits as useCustomUnits,
13
14
  } from '@wordpress/components';
@@ -68,6 +69,18 @@ function useHasBorderWidthControl( name ) {
68
69
  }
69
70
 
70
71
  export default function BorderPanel( { name } ) {
72
+ // To better reflect if the user has customized a value we need to
73
+ // ensure the style value being checked is from the `user` origin.
74
+ const [ userBorderStyles ] = useStyle( 'border', name, 'user' );
75
+ const createHasValueCallback = ( feature ) => () =>
76
+ !! userBorderStyles?.[ feature ];
77
+
78
+ const createResetCallback = ( setStyle ) => () => setStyle( undefined );
79
+
80
+ const handleOnChange = ( setStyle ) => ( value ) => {
81
+ setStyle( value || undefined );
82
+ };
83
+
71
84
  const units = useCustomUnits( {
72
85
  availableUnits: useSetting( 'spacing.units' )[ 0 ] || [
73
86
  'px',
@@ -77,70 +90,121 @@ export default function BorderPanel( { name } ) {
77
90
  } );
78
91
 
79
92
  // Border width.
80
- const hasBorderWidth = useHasBorderWidthControl( name );
93
+ const showBorderWidth = useHasBorderWidthControl( name );
81
94
  const [ borderWidthValue, setBorderWidth ] = useStyle(
82
95
  'border.width',
83
96
  name
84
97
  );
85
98
 
86
99
  // Border style.
87
- const hasBorderStyle = useHasBorderStyleControl( name );
100
+ const showBorderStyle = useHasBorderStyleControl( name );
88
101
  const [ borderStyle, setBorderStyle ] = useStyle( 'border.style', name );
89
102
 
90
103
  // Border color.
104
+ const showBorderColor = useHasBorderColorControl( name );
105
+ const [ borderColor, setBorderColor ] = useStyle( 'border.color', name );
91
106
  const [ colors = EMPTY_ARRAY ] = useSetting( 'color.palette' );
92
107
  const disableCustomColors = ! useSetting( 'color.custom' )[ 0 ];
93
108
  const disableCustomGradients = ! useSetting( 'color.customGradient' )[ 0 ];
94
- const hasBorderColor = useHasBorderColorControl( name );
95
- const [ borderColor, setBorderColor ] = useStyle( 'border.color', name );
96
109
 
97
110
  // Border radius.
98
- const hasBorderRadius = useHasBorderRadiusControl( name );
111
+ const showBorderRadius = useHasBorderRadiusControl( name );
99
112
  const [ borderRadiusValues, setBorderRadius ] = useStyle(
100
113
  'border.radius',
101
114
  name
102
115
  );
116
+ const hasBorderRadius = () => {
117
+ const borderValues = userBorderStyles?.radius;
118
+ if ( typeof borderValues === 'object' ) {
119
+ return Object.entries( borderValues ).some( Boolean );
120
+ }
121
+ return !! borderValues;
122
+ };
123
+
124
+ const resetAll = () => {
125
+ setBorderColor( undefined );
126
+ setBorderRadius( undefined );
127
+ setBorderStyle( undefined );
128
+ setBorderWidth( undefined );
129
+ };
130
+
131
+ // When we set a border color or width ensure we have a style so the user
132
+ // can see a visible border.
133
+ const handleOnChangeWithStyle = ( setStyle ) => ( value ) => {
134
+ if ( !! value && ! borderStyle ) {
135
+ setBorderStyle( 'solid' );
136
+ }
137
+
138
+ setStyle( value || undefined );
139
+ };
103
140
 
104
141
  return (
105
- <PanelBody title={ __( 'Border' ) } initialOpen={ true }>
106
- { ( hasBorderWidth || hasBorderStyle ) && (
107
- <div className="edit-site-global-styles-sidebar__border-controls-row">
108
- { hasBorderWidth && (
109
- <UnitControl
110
- value={ borderWidthValue }
111
- label={ __( 'Width' ) }
112
- min={ MIN_BORDER_WIDTH }
113
- onChange={ ( value ) => {
114
- setBorderWidth( value || undefined );
115
- } }
116
- units={ units }
117
- />
118
- ) }
119
- { hasBorderStyle && (
120
- <BorderStyleControl
121
- value={ borderStyle }
122
- onChange={ setBorderStyle }
123
- />
124
- ) }
125
- </div>
142
+ <ToolsPanel label={ __( 'Border' ) } resetAll={ resetAll }>
143
+ { showBorderWidth && (
144
+ <ToolsPanelItem
145
+ className="single-column"
146
+ hasValue={ createHasValueCallback( 'width' ) }
147
+ label={ __( 'Width' ) }
148
+ onDeselect={ createResetCallback( setBorderWidth ) }
149
+ isShownByDefault={ true }
150
+ >
151
+ <UnitControl
152
+ value={ borderWidthValue }
153
+ label={ __( 'Width' ) }
154
+ min={ MIN_BORDER_WIDTH }
155
+ onChange={ handleOnChangeWithStyle( setBorderWidth ) }
156
+ units={ units }
157
+ />
158
+ </ToolsPanelItem>
159
+ ) }
160
+ { showBorderStyle && (
161
+ <ToolsPanelItem
162
+ className="single-column"
163
+ hasValue={ createHasValueCallback( 'style' ) }
164
+ label={ __( 'Style' ) }
165
+ onDeselect={ createResetCallback( setBorderStyle ) }
166
+ isShownByDefault={ true }
167
+ >
168
+ <BorderStyleControl
169
+ value={ borderStyle }
170
+ onChange={ handleOnChange( setBorderStyle ) }
171
+ />
172
+ </ToolsPanelItem>
126
173
  ) }
127
- { hasBorderColor && (
128
- <ColorGradientControl
174
+ { showBorderColor && (
175
+ <ToolsPanelItem
176
+ hasValue={ createHasValueCallback( 'color' ) }
129
177
  label={ __( 'Color' ) }
130
- colorValue={ borderColor }
131
- colors={ colors }
132
- gradients={ undefined }
133
- disableCustomColors={ disableCustomColors }
134
- disableCustomGradients={ disableCustomGradients }
135
- onColorChange={ setBorderColor }
136
- />
178
+ onDeselect={ createResetCallback( setBorderColor ) }
179
+ isShownByDefault={ true }
180
+ >
181
+ <ColorGradientControl
182
+ label={ __( 'Color' ) }
183
+ colorValue={ borderColor }
184
+ colors={ colors }
185
+ gradients={ undefined }
186
+ disableCustomColors={ disableCustomColors }
187
+ disableCustomGradients={ disableCustomGradients }
188
+ onColorChange={ handleOnChangeWithStyle(
189
+ setBorderColor
190
+ ) }
191
+ clearable={ false }
192
+ />
193
+ </ToolsPanelItem>
137
194
  ) }
138
- { hasBorderRadius && (
139
- <BorderRadiusControl
140
- values={ borderRadiusValues }
141
- onChange={ setBorderRadius }
142
- />
195
+ { showBorderRadius && (
196
+ <ToolsPanelItem
197
+ hasValue={ hasBorderRadius }
198
+ label={ __( 'Radius' ) }
199
+ onDeselect={ createResetCallback( setBorderRadius ) }
200
+ isShownByDefault={ true }
201
+ >
202
+ <BorderRadiusControl
203
+ values={ borderRadiusValues }
204
+ onChange={ handleOnChange( setBorderRadius ) }
205
+ />
206
+ </ToolsPanelItem>
143
207
  ) }
144
- </PanelBody>
208
+ </ToolsPanel>
145
209
  );
146
210
  }
@@ -12,7 +12,7 @@ import { useHasBorderPanel } from './border-panel';
12
12
  import { useHasColorPanel } from './color-utils';
13
13
  import { useHasDimensionsPanel } from './dimensions-panel';
14
14
  import { useHasTypographyPanel } from './typography-panel';
15
- import NavigationButton from './navigation-button';
15
+ import { NavigationButton } from './navigation-button';
16
16
 
17
17
  function ContextMenu( { name, parentMenu = '' } ) {
18
18
  const hasTypographyPanel = useHasTypographyPanel( name );
@@ -31,7 +31,7 @@ function mergeTreesCustomizer( _, srcValue ) {
31
31
  }
32
32
  }
33
33
 
34
- function mergeBaseAndUserConfigs( base, user ) {
34
+ export function mergeBaseAndUserConfigs( base, user ) {
35
35
  return mergeWith( {}, base, user, mergeTreesCustomizer );
36
36
  }
37
37
 
@@ -67,7 +67,6 @@ function useGlobalStylesUserConfig() {
67
67
 
68
68
  const { getEditedEntityRecord } = useSelect( coreStore );
69
69
  const { editEntityRecord } = useDispatch( coreStore );
70
-
71
70
  const config = useMemo( () => {
72
71
  return {
73
72
  settings: settings ?? {},
@@ -14,15 +14,14 @@ import { chevronRight, chevronLeft, Icon } from '@wordpress/icons';
14
14
  /**
15
15
  * Internal dependencies
16
16
  */
17
- import NavigationButton from './navigation-button';
17
+ import { NavigationBackButton } from './navigation-button';
18
18
 
19
- function ScreenHeader( { back, title, description } ) {
19
+ function ScreenHeader( { title, description } ) {
20
20
  return (
21
21
  <VStack spacing={ 2 }>
22
22
  <HStack spacing={ 2 }>
23
23
  <View>
24
- <NavigationButton
25
- path={ back }
24
+ <NavigationBackButton
26
25
  icon={
27
26
  <Icon
28
27
  icon={ isRTL() ? chevronRight : chevronLeft }
@@ -30,7 +29,6 @@ function ScreenHeader( { back, title, description } ) {
30
29
  />
31
30
  }
32
31
  size="small"
33
- isBack
34
32
  aria-label={ __( 'Navigate to the previous view' ) }
35
33
  />
36
34
  </View>
@@ -9,16 +9,9 @@ import {
9
9
  } from '@wordpress/components';
10
10
  import { Icon } from '@wordpress/icons';
11
11
 
12
- function NavigationButton( {
13
- path,
14
- icon,
15
- children,
16
- isBack = false,
17
- ...props
18
- } ) {
19
- const navigator = useNavigator();
12
+ function GenericNavigationButton( { icon, children, ...props } ) {
20
13
  return (
21
- <Item onClick={ () => navigator.push( path, { isBack } ) } { ...props }>
14
+ <Item { ...props }>
22
15
  { icon && (
23
16
  <HStack justify="flex-start">
24
17
  <FlexItem>
@@ -32,4 +25,32 @@ function NavigationButton( {
32
25
  );
33
26
  }
34
27
 
35
- export default NavigationButton;
28
+ function NavigationButton( { path, ...props } ) {
29
+ const { goTo } = useNavigator();
30
+
31
+ const dataAttrName = 'data-navigator-focusable-id';
32
+ const dataAttrValue = path;
33
+
34
+ const dataAttrCssSelector = `[${ dataAttrName }="${ dataAttrValue }"]`;
35
+
36
+ const buttonProps = {
37
+ ...props,
38
+ [ dataAttrName ]: dataAttrValue,
39
+ };
40
+
41
+ return (
42
+ <GenericNavigationButton
43
+ onClick={ () =>
44
+ goTo( path, { focusTargetSelector: dataAttrCssSelector } )
45
+ }
46
+ { ...buttonProps }
47
+ />
48
+ );
49
+ }
50
+
51
+ function NavigationBackButton( { ...props } ) {
52
+ const { goBack } = useNavigator();
53
+ return <GenericNavigationButton onClick={ goBack } { ...props } />;
54
+ }
55
+
56
+ export { NavigationButton, NavigationBackButton };
@@ -17,7 +17,7 @@ import { useMemo } from '@wordpress/element';
17
17
  * Internal dependencies
18
18
  */
19
19
  import Subtitle from './subtitle';
20
- import NavigationButton from './navigation-button';
20
+ import { NavigationButton } from './navigation-button';
21
21
  import { useSetting } from './hooks';
22
22
 
23
23
  const EMPTY_COLORS = [];
@@ -59,7 +59,11 @@ function Palette( { name } ) {
59
59
  <Subtitle>{ __( 'Palette' ) }</Subtitle>
60
60
  <ItemGroup isBordered isSeparated>
61
61
  <NavigationButton path={ screenPath }>
62
- <HStack isReversed={ colors.length === 0 }>
62
+ <HStack
63
+ direction={
64
+ colors.length === 0 ? 'row-reverse' : 'row'
65
+ }
66
+ >
63
67
  <FlexBlock>
64
68
  <ZStack isLayered={ false } offset={ -8 }>
65
69
  { colors.slice( 0, 5 ).map( ( { color } ) => (
@@ -2,41 +2,69 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import {
5
- __experimentalHStack as HStack,
6
- __experimentalVStack as VStack,
7
- Card,
8
- ColorIndicator,
9
- } from '@wordpress/components';
5
+ __unstableIframe as Iframe,
6
+ __unstableEditorStyles as EditorStyles,
7
+ } from '@wordpress/block-editor';
10
8
 
11
9
  /**
12
10
  * Internal dependencies
13
11
  */
14
12
  import { useStyle } from './hooks';
13
+ import { useGlobalStylesOutput } from './use-global-styles-output';
15
14
 
16
- const StylesPreview = () => {
15
+ const StylesPreview = ( { height = 150 } ) => {
17
16
  const [ fontFamily = 'serif' ] = useStyle( 'typography.fontFamily' );
18
17
  const [ textColor = 'black' ] = useStyle( 'color.text' );
19
18
  const [ linkColor = 'blue' ] = useStyle( 'elements.link.color.text' );
20
19
  const [ backgroundColor = 'white' ] = useStyle( 'color.background' );
21
20
  const [ gradientValue ] = useStyle( 'color.gradient' );
21
+ const [ styles ] = useGlobalStylesOutput();
22
22
 
23
23
  return (
24
- <Card
25
- className="edit-site-global-styles-preview"
26
- style={ { background: gradientValue ?? backgroundColor } }
24
+ <Iframe
25
+ className="edit-site-global-styles-preview__iframe"
26
+ head={ <EditorStyles styles={ styles } /> }
27
+ style={ { height } }
27
28
  >
28
- <HStack spacing={ 5 }>
29
+ <div
30
+ style={ {
31
+ display: 'flex',
32
+ gap: 20,
33
+ alignItems: 'center',
34
+ justifyContent: 'center',
35
+ height: '100%',
36
+ transform: `scale(${ height / 150 })`,
37
+ background: gradientValue ?? backgroundColor,
38
+ cursor: 'pointer',
39
+ } }
40
+ >
41
+ <div style={ { fontFamily, fontSize: '80px' } }>Aa</div>
29
42
  <div
30
- style={ { fontFamily, fontSize: '80px', color: textColor } }
43
+ style={ {
44
+ display: 'flex',
45
+ gap: 20,
46
+ flexDirection: 'column',
47
+ } }
31
48
  >
32
- Aa
49
+ <div
50
+ style={ {
51
+ height: 40,
52
+ width: 40,
53
+ background: textColor,
54
+ borderRadius: 20,
55
+ } }
56
+ />{ ' ' }
57
+ <div
58
+ style={ {
59
+ height: 40,
60
+ width: 40,
61
+ background: linkColor,
62
+ borderRadius: 20,
63
+ } }
64
+ />
33
65
  </div>
34
- <VStack spacing={ 2 }>
35
- <ColorIndicator colorValue={ textColor } />
36
- <ColorIndicator colorValue={ linkColor } />
37
- </VStack>
38
- </HStack>
39
- </Card>
66
+ </div>
67
+ </Iframe>
40
68
  );
41
69
  };
42
70