@wordpress/edit-site 4.5.0 → 4.8.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 (165) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/add-new-template/new-template.js +24 -22
  3. package/build/components/add-new-template/new-template.js.map +1 -1
  4. package/build/components/block-editor/block-inspector-button.js.map +1 -1
  5. package/build/components/block-editor/index.js +28 -22
  6. package/build/components/block-editor/index.js.map +1 -1
  7. package/build/components/code-editor/code-editor-text-area.js +11 -9
  8. package/build/components/code-editor/code-editor-text-area.js.map +1 -1
  9. package/build/components/edit-template-part-menu-button/index.js.map +1 -1
  10. package/build/components/editor/index.js.map +1 -1
  11. package/build/components/global-styles/border-panel.js +2 -7
  12. package/build/components/global-styles/border-panel.js.map +1 -1
  13. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  14. package/build/components/global-styles/gradients-palette-panel.js +3 -7
  15. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  16. package/build/components/global-styles/hooks.js +2 -2
  17. package/build/components/global-styles/hooks.js.map +1 -1
  18. package/build/components/global-styles/preview.js +13 -2
  19. package/build/components/global-styles/preview.js.map +1 -1
  20. package/build/components/global-styles/screen-block-list.js.map +1 -1
  21. package/build/components/global-styles/screen-root.js.map +1 -1
  22. package/build/components/global-styles/screen-style-variations.js +9 -1
  23. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  24. package/build/components/global-styles/use-global-styles-output.js +1 -7
  25. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  26. package/build/components/header/index.js.map +1 -1
  27. package/build/components/header/mode-switcher/index.js.map +1 -1
  28. package/build/components/header/more-menu/copy-content-menu-item.js +1 -1
  29. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  30. package/build/components/header/more-menu/site-export.js.map +1 -1
  31. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  32. package/build/components/list/actions/index.js.map +1 -1
  33. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  34. package/build/components/list/added-by.js.map +1 -1
  35. package/build/components/list/table.js +1 -1
  36. package/build/components/list/table.js.map +1 -1
  37. package/build/components/navigation-sidebar/index.js.map +1 -1
  38. package/build/components/navigation-sidebar/navigation-panel/constants.js +2 -2
  39. package/build/components/navigation-sidebar/navigation-panel/constants.js.map +1 -1
  40. package/build/components/preferences-modal/index.js +5 -1
  41. package/build/components/preferences-modal/index.js.map +1 -1
  42. package/build/components/routes/use-title.js +3 -1
  43. package/build/components/routes/use-title.js.map +1 -1
  44. package/build/components/save-button/index.js.map +1 -1
  45. package/build/components/sidebar/global-styles-sidebar.js +2 -4
  46. package/build/components/sidebar/global-styles-sidebar.js.map +1 -1
  47. package/build/components/sidebar/index.js.map +1 -1
  48. package/build/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  49. package/build/components/sidebar/template-card/index.js.map +1 -1
  50. package/build/components/sidebar/template-card/template-areas.js.map +1 -1
  51. package/build/components/template-details/index.js +4 -2
  52. package/build/components/template-details/index.js.map +1 -1
  53. package/build/components/template-details/template-areas.js.map +1 -1
  54. package/build/components/template-part-converter/index.js.map +1 -1
  55. package/build/components/url-query-controller/index.js.map +1 -1
  56. package/build/index.js +11 -2
  57. package/build/index.js.map +1 -1
  58. package/build/store/actions.js.map +1 -1
  59. package/build/store/selectors.js.map +1 -1
  60. package/build-module/components/add-new-template/new-template.js +24 -23
  61. package/build-module/components/add-new-template/new-template.js.map +1 -1
  62. package/build-module/components/block-editor/block-inspector-button.js.map +1 -1
  63. package/build-module/components/block-editor/index.js +28 -23
  64. package/build-module/components/block-editor/index.js.map +1 -1
  65. package/build-module/components/code-editor/code-editor-text-area.js +12 -10
  66. package/build-module/components/code-editor/code-editor-text-area.js.map +1 -1
  67. package/build-module/components/edit-template-part-menu-button/index.js.map +1 -1
  68. package/build-module/components/editor/index.js.map +1 -1
  69. package/build-module/components/global-styles/border-panel.js +2 -7
  70. package/build-module/components/global-styles/border-panel.js.map +1 -1
  71. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  72. package/build-module/components/global-styles/gradients-palette-panel.js +3 -5
  73. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  74. package/build-module/components/global-styles/hooks.js +2 -2
  75. package/build-module/components/global-styles/hooks.js.map +1 -1
  76. package/build-module/components/global-styles/preview.js +14 -3
  77. package/build-module/components/global-styles/preview.js.map +1 -1
  78. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  79. package/build-module/components/global-styles/screen-root.js.map +1 -1
  80. package/build-module/components/global-styles/screen-style-variations.js +9 -1
  81. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  82. package/build-module/components/global-styles/use-global-styles-output.js +1 -7
  83. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  84. package/build-module/components/header/index.js.map +1 -1
  85. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  86. package/build-module/components/header/more-menu/copy-content-menu-item.js +1 -1
  87. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  88. package/build-module/components/header/more-menu/site-export.js.map +1 -1
  89. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  90. package/build-module/components/list/actions/index.js.map +1 -1
  91. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  92. package/build-module/components/list/added-by.js.map +1 -1
  93. package/build-module/components/list/table.js +1 -1
  94. package/build-module/components/list/table.js.map +1 -1
  95. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  96. package/build-module/components/navigation-sidebar/navigation-panel/constants.js +2 -2
  97. package/build-module/components/navigation-sidebar/navigation-panel/constants.js.map +1 -1
  98. package/build-module/components/preferences-modal/index.js +5 -1
  99. package/build-module/components/preferences-modal/index.js.map +1 -1
  100. package/build-module/components/routes/use-title.js +2 -1
  101. package/build-module/components/routes/use-title.js.map +1 -1
  102. package/build-module/components/save-button/index.js.map +1 -1
  103. package/build-module/components/sidebar/global-styles-sidebar.js +2 -4
  104. package/build-module/components/sidebar/global-styles-sidebar.js.map +1 -1
  105. package/build-module/components/sidebar/index.js.map +1 -1
  106. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  107. package/build-module/components/sidebar/template-card/index.js.map +1 -1
  108. package/build-module/components/sidebar/template-card/template-areas.js.map +1 -1
  109. package/build-module/components/template-details/index.js +4 -2
  110. package/build-module/components/template-details/index.js.map +1 -1
  111. package/build-module/components/template-details/template-areas.js.map +1 -1
  112. package/build-module/components/template-part-converter/index.js.map +1 -1
  113. package/build-module/components/url-query-controller/index.js.map +1 -1
  114. package/build-module/index.js +10 -2
  115. package/build-module/index.js.map +1 -1
  116. package/build-module/store/actions.js.map +1 -1
  117. package/build-module/store/selectors.js.map +1 -1
  118. package/build-style/style-rtl.css +8 -50
  119. package/build-style/style.css +8 -50
  120. package/package.json +30 -30
  121. package/src/components/add-new-template/new-template.js +24 -20
  122. package/src/components/block-editor/block-inspector-button.js +2 -3
  123. package/src/components/block-editor/index.js +53 -37
  124. package/src/components/code-editor/code-editor-text-area.js +12 -7
  125. package/src/components/edit-template-part-menu-button/index.js +2 -3
  126. package/src/components/editor/index.js +4 -5
  127. package/src/components/global-styles/border-panel.js +2 -12
  128. package/src/components/global-styles/global-styles-provider.js +4 -8
  129. package/src/components/global-styles/gradients-palette-panel.js +2 -5
  130. package/src/components/global-styles/hooks.js +5 -4
  131. package/src/components/global-styles/preview.js +17 -2
  132. package/src/components/global-styles/screen-block-list.js +4 -4
  133. package/src/components/global-styles/screen-root.js +4 -3
  134. package/src/components/global-styles/screen-style-variations.js +10 -4
  135. package/src/components/global-styles/use-global-styles-output.js +1 -4
  136. package/src/components/header/document-actions/style.scss +1 -1
  137. package/src/components/header/index.js +2 -3
  138. package/src/components/header/mode-switcher/index.js +4 -4
  139. package/src/components/header/more-menu/copy-content-menu-item.js +3 -4
  140. package/src/components/header/more-menu/site-export.js +2 -3
  141. package/src/components/keyboard-shortcuts/index.js +6 -10
  142. package/src/components/list/actions/index.js +2 -3
  143. package/src/components/list/actions/rename-menu-item.js +4 -6
  144. package/src/components/list/added-by.js +4 -3
  145. package/src/components/list/style.scss +1 -0
  146. package/src/components/list/table.js +1 -4
  147. package/src/components/navigation-sidebar/index.js +2 -4
  148. package/src/components/navigation-sidebar/navigation-panel/constants.js +2 -2
  149. package/src/components/preferences-modal/index.js +8 -1
  150. package/src/components/routes/use-title.js +3 -2
  151. package/src/components/save-button/index.js +2 -4
  152. package/src/components/sidebar/global-styles-sidebar.js +1 -1
  153. package/src/components/sidebar/index.js +8 -6
  154. package/src/components/sidebar/navigation-menu-sidebar/navigation-inspector.js +6 -9
  155. package/src/components/sidebar/navigation-menu-sidebar/style.scss +0 -1
  156. package/src/components/sidebar/style.scss +0 -49
  157. package/src/components/sidebar/template-card/index.js +2 -3
  158. package/src/components/sidebar/template-card/template-areas.js +6 -6
  159. package/src/components/template-details/index.js +4 -1
  160. package/src/components/template-details/template-areas.js +6 -6
  161. package/src/components/template-part-converter/index.js +2 -3
  162. package/src/components/url-query-controller/index.js +2 -3
  163. package/src/index.js +17 -0
  164. package/src/store/actions.js +257 -233
  165. package/src/store/selectors.js +9 -10
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { filter, find, includes, map } from 'lodash';
4
+ import { filter, includes, map } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -37,10 +37,11 @@ import { store as noticesStore } from '@wordpress/notices';
37
37
  * Internal dependencies
38
38
  */
39
39
  import { useHistory } from '../routes';
40
+ import { store as editSiteStore } from '../../store';
40
41
 
41
42
  const DEFAULT_TEMPLATE_SLUGS = [
42
43
  'front-page',
43
- 'single-post',
44
+ 'single',
44
45
  'page',
45
46
  'index',
46
47
  'archive',
@@ -55,7 +56,7 @@ const DEFAULT_TEMPLATE_SLUGS = [
55
56
 
56
57
  const TEMPLATE_ICONS = {
57
58
  'front-page': home,
58
- 'single-post': post,
59
+ single: post,
59
60
  page,
60
61
  archive,
61
62
  search,
@@ -78,38 +79,41 @@ export default function NewTemplate( { postType } ) {
78
79
  'wp_template',
79
80
  { per_page: -1 }
80
81
  ),
81
- defaultTemplateTypes: select(
82
- editorStore
83
- ).__experimentalGetDefaultTemplateTypes(),
82
+ defaultTemplateTypes:
83
+ select( editorStore ).__experimentalGetDefaultTemplateTypes(),
84
84
  } ),
85
85
  []
86
86
  );
87
87
  const { saveEntityRecord } = useDispatch( coreStore );
88
88
  const { createErrorNotice } = useDispatch( noticesStore );
89
+ const { setTemplate } = useDispatch( editSiteStore );
89
90
 
90
- async function createTemplate( { slug } ) {
91
+ async function createTemplate( template ) {
91
92
  try {
92
- const { title, description } = find( defaultTemplateTypes, {
93
- slug,
94
- } );
93
+ const { title, description, slug } = template;
95
94
 
96
- const template = await saveEntityRecord(
95
+ const newTemplate = await saveEntityRecord(
97
96
  'postType',
98
97
  'wp_template',
99
98
  {
100
- excerpt: description,
99
+ description,
101
100
  // Slugs need to be strings, so this is for template `404`
102
101
  slug: slug.toString(),
103
102
  status: 'publish',
104
103
  title,
104
+ // This adds a post meta field in template that is part of `is_custom` value calculation.
105
+ is_wp_suggestion: true,
105
106
  },
106
107
  { throwOnError: true }
107
108
  );
108
109
 
110
+ // Set template before navigating away to avoid initial stale value.
111
+ setTemplate( newTemplate.id, newTemplate.slug );
112
+
109
113
  // Navigate to the created template editor.
110
114
  history.push( {
111
- postId: template.id,
112
- postType: template.type,
115
+ postId: newTemplate.id,
116
+ postType: newTemplate.type,
113
117
  } );
114
118
 
115
119
  // TODO: Add a success notice?
@@ -162,23 +166,23 @@ export default function NewTemplate( { postType } ) {
162
166
  { () => (
163
167
  <NavigableMenu className="edit-site-new-template-dropdown__popover">
164
168
  <MenuGroup label={ postType.labels.add_new_item }>
165
- { map(
166
- missingTemplates,
167
- ( { title, description, slug } ) => (
169
+ { map( missingTemplates, ( template ) => {
170
+ const { title, description, slug } = template;
171
+ return (
168
172
  <MenuItem
169
173
  icon={ TEMPLATE_ICONS[ slug ] }
170
174
  iconPosition="left"
171
175
  info={ description }
172
176
  key={ slug }
173
177
  onClick={ () => {
174
- createTemplate( { slug } );
178
+ createTemplate( template );
175
179
  // We will be navigated way so no need to close the dropdown.
176
180
  } }
177
181
  >
178
182
  { title }
179
183
  </MenuItem>
180
- )
181
- ) }
184
+ );
185
+ } ) }
182
186
  </MenuGroup>
183
187
  </NavigableMenu>
184
188
  ) }
@@ -30,9 +30,8 @@ export default function BlockInspectorButton( { onClick = () => {} } ) {
30
30
  } ),
31
31
  []
32
32
  );
33
- const { enableComplementaryArea, disableComplementaryArea } = useDispatch(
34
- interfaceStore
35
- );
33
+ const { enableComplementaryArea, disableComplementaryArea } =
34
+ useDispatch( interfaceStore );
36
35
 
37
36
  const label = isBlockInspectorOpen
38
37
  ? __( 'Hide more settings' )
@@ -2,12 +2,13 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
+ import { omit, unionBy } from 'lodash';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
8
9
  */
9
10
  import { useSelect, useDispatch } from '@wordpress/data';
10
- import { useCallback, useRef, Fragment } from '@wordpress/element';
11
+ import { useCallback, useMemo, useRef, Fragment } from '@wordpress/element';
11
12
  import { useEntityBlockEditor, store as coreStore } from '@wordpress/core-data';
12
13
  import {
13
14
  BlockList,
@@ -48,44 +49,13 @@ const LAYOUT = {
48
49
  };
49
50
 
50
51
  export default function BlockEditor( { setIsInserterOpen } ) {
51
- const { settings } = useSelect(
52
+ const { storedSettings, templateType, templateId, page } = useSelect(
52
53
  ( select ) => {
53
- let storedSettings = select( editSiteStore ).getSettings(
54
- setIsInserterOpen
55
- );
56
-
57
- if ( ! storedSettings.__experimentalBlockPatterns ) {
58
- storedSettings = {
59
- ...storedSettings,
60
- __experimentalBlockPatterns: select(
61
- coreStore
62
- ).getBlockPatterns(),
63
- };
64
- }
65
-
66
- if ( ! storedSettings.__experimentalBlockPatternCategories ) {
67
- storedSettings = {
68
- ...storedSettings,
69
- __experimentalBlockPatternCategories: select(
70
- coreStore
71
- ).getBlockPatternCategories(),
72
- };
73
- }
74
-
75
- return {
76
- settings: storedSettings,
77
- };
78
- },
79
- [ setIsInserterOpen ]
80
- );
81
-
82
- const { templateType, templateId, page } = useSelect(
83
- ( select ) => {
84
- const { getEditedPostType, getEditedPostId, getPage } = select(
85
- editSiteStore
86
- );
54
+ const { getSettings, getEditedPostType, getEditedPostId, getPage } =
55
+ select( editSiteStore );
87
56
 
88
57
  return {
58
+ storedSettings: getSettings( setIsInserterOpen ),
89
59
  templateType: getEditedPostType(),
90
60
  templateId: getEditedPostId(),
91
61
  page: getPage(),
@@ -94,6 +64,49 @@ export default function BlockEditor( { setIsInserterOpen } ) {
94
64
  [ setIsInserterOpen ]
95
65
  );
96
66
 
67
+ const settingsBlockPatterns =
68
+ storedSettings.__experimentalAdditionalBlockPatterns ?? // WP 6.0
69
+ storedSettings.__experimentalBlockPatterns; // WP 5.9
70
+ const settingsBlockPatternCategories =
71
+ storedSettings.__experimentalAdditionalBlockPatternCategories ?? // WP 6.0
72
+ storedSettings.__experimentalBlockPatternCategories; // WP 5.9
73
+
74
+ const { restBlockPatterns, restBlockPatternCategories } = useSelect(
75
+ ( select ) => ( {
76
+ restBlockPatterns: select( coreStore ).getBlockPatterns(),
77
+ restBlockPatternCategories:
78
+ select( coreStore ).getBlockPatternCategories(),
79
+ } ),
80
+ []
81
+ );
82
+
83
+ const blockPatterns = useMemo(
84
+ () => unionBy( settingsBlockPatterns, restBlockPatterns, 'name' ),
85
+ [ settingsBlockPatterns, restBlockPatterns ]
86
+ );
87
+
88
+ const blockPatternCategories = useMemo(
89
+ () =>
90
+ unionBy(
91
+ settingsBlockPatternCategories,
92
+ restBlockPatternCategories,
93
+ 'name'
94
+ ),
95
+ [ settingsBlockPatternCategories, restBlockPatternCategories ]
96
+ );
97
+
98
+ const settings = useMemo(
99
+ () => ( {
100
+ ...omit( storedSettings, [
101
+ '__experimentalAdditionalBlockPatterns',
102
+ '__experimentalAdditionalBlockPatternCategories',
103
+ ] ),
104
+ __experimentalBlockPatterns: blockPatterns,
105
+ __experimentalBlockPatternCategories: blockPatternCategories,
106
+ } ),
107
+ [ storedSettings, blockPatterns, blockPatternCategories ]
108
+ );
109
+
97
110
  const [ blocks, onInput, onChange ] = useEntityBlockEditor(
98
111
  'postType',
99
112
  templateType
@@ -112,6 +125,7 @@ export default function BlockEditor( { setIsInserterOpen } ) {
112
125
  const { clearSelectedBlock } = useDispatch( blockEditorStore );
113
126
 
114
127
  const isTemplatePart = templateType === 'wp_template_part';
128
+ const hasBlocks = blocks.length !== 0;
115
129
 
116
130
  const NavMenuSidebarToggle = () => (
117
131
  <ToolbarGroup>
@@ -186,7 +200,9 @@ export default function BlockEditor( { setIsInserterOpen } ) {
186
200
  <BlockList
187
201
  className="edit-site-block-editor__block-list wp-site-blocks"
188
202
  __experimentalLayout={ LAYOUT }
189
- renderAppender={ isTemplatePart ? false : undefined }
203
+ renderAppender={
204
+ isTemplatePart && hasBlocks ? false : undefined
205
+ }
190
206
  />
191
207
  </ResizableEditor>
192
208
  <__unstableBlockSettingsMenuFirstItem>
@@ -3,17 +3,11 @@
3
3
  */
4
4
  import Textarea from 'react-autosize-textarea';
5
5
 
6
- /**
7
- * WordPress dependencies
8
- */
9
- /**
10
- * WordPress dependencies
11
- */
12
6
  /**
13
7
  * WordPress dependencies
14
8
  */
15
9
  import { __ } from '@wordpress/i18n';
16
- import { useState } from '@wordpress/element';
10
+ import { useEffect, useState, useRef } from '@wordpress/element';
17
11
  import { useInstanceId } from '@wordpress/compose';
18
12
  import { VisuallyHidden } from '@wordpress/components';
19
13
 
@@ -21,6 +15,7 @@ export default function CodeEditorTextArea( { value, onChange, onInput } ) {
21
15
  const [ stateValue, setStateValue ] = useState( value );
22
16
  const [ isDirty, setIsDirty ] = useState( false );
23
17
  const instanceId = useInstanceId( CodeEditorTextArea );
18
+ const valueRef = useRef();
24
19
 
25
20
  if ( ! isDirty && stateValue !== value ) {
26
21
  setStateValue( value );
@@ -42,6 +37,7 @@ export default function CodeEditorTextArea( { value, onChange, onInput } ) {
42
37
  onInput( newValue );
43
38
  setStateValue( newValue );
44
39
  setIsDirty( true );
40
+ valueRef.current = newValue;
45
41
  };
46
42
 
47
43
  /**
@@ -56,6 +52,15 @@ export default function CodeEditorTextArea( { value, onChange, onInput } ) {
56
52
  }
57
53
  };
58
54
 
55
+ // Ensure changes aren't lost when component unmounts.
56
+ useEffect( () => {
57
+ return () => {
58
+ if ( valueRef.current ) {
59
+ onChange( valueRef.current );
60
+ }
61
+ };
62
+ }, [] );
63
+
59
64
  return (
60
65
  <>
61
66
  <VisuallyHidden
@@ -34,9 +34,8 @@ function EditTemplatePartMenuItem( { selectedClientId, onClose } ) {
34
34
  const { params } = useLocation();
35
35
  const selectedTemplatePart = useSelect(
36
36
  ( select ) => {
37
- const block = select( blockEditorStore ).getBlock(
38
- selectedClientId
39
- );
37
+ const block =
38
+ select( blockEditorStore ).getBlock( selectedClientId );
40
39
 
41
40
  if ( block && isTemplatePart( block ) ) {
42
41
  const { theme, slug } = block.attributes;
@@ -119,10 +119,8 @@ function Editor( { onError } ) {
119
119
  const { setPage, setIsInserterOpened } = useDispatch( editSiteStore );
120
120
  const { enableComplementaryArea } = useDispatch( interfaceStore );
121
121
 
122
- const [
123
- isEntitiesSavedStatesOpen,
124
- setIsEntitiesSavedStatesOpen,
125
- ] = useState( false );
122
+ const [ isEntitiesSavedStatesOpen, setIsEntitiesSavedStatesOpen ] =
123
+ useState( false );
126
124
  const openEntitiesSavedStates = useCallback(
127
125
  () => setIsEntitiesSavedStatesOpen( true ),
128
126
  []
@@ -217,7 +215,8 @@ function Editor( { onError } ) {
217
215
  <InterfaceSkeleton
218
216
  labels={ {
219
217
  ...interfaceLabels,
220
- secondarySidebar: secondarySidebarLabel,
218
+ secondarySidebar:
219
+ secondarySidebarLabel,
221
220
  } }
222
221
  className={
223
222
  showIconLabels &&
@@ -182,18 +182,8 @@ export default function BorderPanel( { name } ) {
182
182
  onChange={ onBorderChange }
183
183
  showStyle={ showBorderStyle }
184
184
  value={ border }
185
- popoverClassNames={ {
186
- linked:
187
- 'edit-site-global-styles-sidebar__border-box-control__popover',
188
- top:
189
- 'edit-site-global-styles-sidebar__border-box-control__popover-top',
190
- right:
191
- 'edit-site-global-styles-sidebar__border-box-control__popover-right',
192
- bottom:
193
- 'edit-site-global-styles-sidebar__border-box-control__popover-bottom',
194
- left:
195
- 'edit-site-global-styles-sidebar__border-box-control__popover-left',
196
- } }
185
+ popoverPlacement="left-start"
186
+ popoverOffset={ 40 }
197
187
  __experimentalHasMultipleOrigins={ true }
198
188
  __experimentalIsRenderedInSidebar={ true }
199
189
  />
@@ -48,9 +48,8 @@ const cleanEmptyObject = ( object ) => {
48
48
 
49
49
  function useGlobalStylesUserConfig() {
50
50
  const { globalStylesId, settings, styles } = useSelect( ( select ) => {
51
- const _globalStylesId = select(
52
- coreStore
53
- ).__experimentalGetCurrentGlobalStylesId();
51
+ const _globalStylesId =
52
+ select( coreStore ).__experimentalGetCurrentGlobalStylesId();
54
53
  const record = _globalStylesId
55
54
  ? select( coreStore ).getEditedEntityRecord(
56
55
  'root',
@@ -108,11 +107,8 @@ function useGlobalStylesBaseConfig() {
108
107
  }
109
108
 
110
109
  function useGlobalStylesContext() {
111
- const [
112
- isUserConfigReady,
113
- userConfig,
114
- setUserConfig,
115
- ] = useGlobalStylesUserConfig();
110
+ const [ isUserConfigReady, userConfig, setUserConfig ] =
111
+ useGlobalStylesUserConfig();
116
112
  const [ isBaseConfigReady, baseConfig ] = useGlobalStylesBaseConfig();
117
113
  const mergedConfig = useMemo( () => {
118
114
  if ( ! baseConfig || ! userConfig ) {
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { noop } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -20,6 +15,8 @@ import { __ } from '@wordpress/i18n';
20
15
  import { useSetting } from './hooks';
21
16
  import Subtitle from './subtitle';
22
17
 
18
+ const noop = () => {};
19
+
23
20
  export default function GradientPalettePanel( { name } ) {
24
21
  const [ themeGradients, setThemeGradients ] = useSetting(
25
22
  'color.gradients.theme',
@@ -20,16 +20,17 @@ import {
20
20
  import { getValueFromVariable, getPresetVariableFromValue } from './utils';
21
21
  import { GlobalStylesContext } from './context';
22
22
 
23
- const EMPTY_CONFIG = { isGlobalStylesUserThemeJSON: true, version: 1 };
23
+ const EMPTY_CONFIG = { settings: {}, styles: {} };
24
24
 
25
25
  export const useGlobalStylesReset = () => {
26
26
  const { user: config, setUserConfig } = useContext( GlobalStylesContext );
27
27
  const canReset = !! config && ! isEqual( config, EMPTY_CONFIG );
28
28
  return [
29
29
  canReset,
30
- useCallback( () => setUserConfig( () => EMPTY_CONFIG ), [
31
- setUserConfig,
32
- ] ),
30
+ useCallback(
31
+ () => setUserConfig( () => EMPTY_CONFIG ),
32
+ [ setUserConfig ]
33
+ ),
33
34
  ];
34
35
  };
35
36
 
@@ -11,7 +11,7 @@ import {
11
11
  __experimentalVStack as VStack,
12
12
  } from '@wordpress/components';
13
13
  import { useReducedMotion, useResizeObserver } from '@wordpress/compose';
14
- import { useState } from '@wordpress/element';
14
+ import { useState, useMemo } from '@wordpress/element';
15
15
 
16
16
  /**
17
17
  * Internal dependencies
@@ -79,10 +79,25 @@ const StylesPreview = ( { label, isFocused } ) => {
79
79
  )
80
80
  .slice( 0, 2 );
81
81
 
82
+ // Reset leaked styles from WP common.css.
83
+ const editorStyles = useMemo( () => {
84
+ if ( styles ) {
85
+ return [
86
+ ...styles,
87
+ {
88
+ css: 'body{min-width: 0;}',
89
+ isGlobalStyles: true,
90
+ },
91
+ ];
92
+ }
93
+
94
+ return styles;
95
+ }, [ styles ] );
96
+
82
97
  return (
83
98
  <Iframe
84
99
  className="edit-site-global-styles-preview__iframe"
85
- head={ <EditorStyles styles={ styles } /> }
100
+ head={ <EditorStyles styles={ editorStyles } /> }
86
101
  style={ {
87
102
  height: normalizedHeight * ratio,
88
103
  visibility: ! width ? 'hidden' : 'visible',
@@ -40,10 +40,10 @@ function useSortedBlockTypes() {
40
40
  type.push( block );
41
41
  return blocks;
42
42
  };
43
- const {
44
- core: coreItems,
45
- noncore: nonCoreItems,
46
- } = blockItems.reduce( groupByType, { core: [], noncore: [] } );
43
+ const { core: coreItems, noncore: nonCoreItems } = blockItems.reduce(
44
+ groupByType,
45
+ { core: [], noncore: [] }
46
+ );
47
47
  return [ ...coreItems, ...nonCoreItems ];
48
48
  }
49
49
 
@@ -28,9 +28,10 @@ import StylesPreview from './preview';
28
28
  function ScreenRoot() {
29
29
  const { variations } = useSelect( ( select ) => {
30
30
  return {
31
- variations: select(
32
- coreStore
33
- ).__experimentalGetCurrentThemeGlobalStylesVariations(),
31
+ variations:
32
+ select(
33
+ coreStore
34
+ ).__experimentalGetCurrentThemeGlobalStylesVariations(),
34
35
  };
35
36
  }, [] );
36
37
 
@@ -79,6 +79,7 @@ function Variation( { variation } ) {
79
79
  onKeyDown={ selectOnEnter }
80
80
  tabIndex="0"
81
81
  aria-label={ variation?.title }
82
+ aria-current={ isActive }
82
83
  onFocus={ () => setIsFocused( true ) }
83
84
  onBlur={ () => setIsFocused( false ) }
84
85
  >
@@ -96,9 +97,10 @@ function Variation( { variation } ) {
96
97
  function ScreenStyleVariations() {
97
98
  const { variations } = useSelect( ( select ) => {
98
99
  return {
99
- variations: select(
100
- coreStore
101
- ).__experimentalGetCurrentThemeGlobalStylesVariations(),
100
+ variations:
101
+ select(
102
+ coreStore
103
+ ).__experimentalGetCurrentThemeGlobalStylesVariations(),
102
104
  };
103
105
  }, [] );
104
106
 
@@ -109,7 +111,11 @@ function ScreenStyleVariations() {
109
111
  settings: {},
110
112
  styles: {},
111
113
  },
112
- ...variations,
114
+ ...variations.map( ( variation ) => ( {
115
+ ...variation,
116
+ settings: variation.settings ?? {},
117
+ styles: variation.styles ?? {},
118
+ } ) ),
113
119
  ];
114
120
  }, [ variations ] );
115
121
 
@@ -220,11 +220,8 @@ function getStylesDeclarations( blockStyles = {} ) {
220
220
 
221
221
  // The goal is to move everything to server side generated engine styles
222
222
  // This is temporary as we absorb more and more styles into the engine.
223
- const extraRules = getCSSRules( blockStyles, { selector: 'self' } );
223
+ const extraRules = getCSSRules( blockStyles );
224
224
  extraRules.forEach( ( rule ) => {
225
- if ( rule.selector !== 'self' ) {
226
- throw "This style can't be added as inline style";
227
- }
228
225
  const cssProperty = rule.key.startsWith( '--' )
229
226
  ? rule.key
230
227
  : kebabCase( rule.key );
@@ -66,7 +66,7 @@
66
66
  }
67
67
  }
68
68
 
69
- .edit-site-document-actions__info-dropdown > .components-popover__content > div {
69
+ .edit-site-document-actions__info-dropdown > .components-popover__content {
70
70
  padding: 0;
71
71
  min-width: 240px;
72
72
  }
@@ -57,9 +57,8 @@ export default function Header( {
57
57
  getEditorMode,
58
58
  } = select( editSiteStore );
59
59
  const { getEditedEntityRecord } = select( coreStore );
60
- const { __experimentalGetTemplateInfo: getTemplateInfo } = select(
61
- editorStore
62
- );
60
+ const { __experimentalGetTemplateInfo: getTemplateInfo } =
61
+ select( editorStore );
63
62
  const { getShortcutRepresentation } = select( keyboardShortcutsStore );
64
63
 
65
64
  const postType = getEditedPostType();
@@ -36,10 +36,10 @@ function ModeSwitcher() {
36
36
  shortcut: select(
37
37
  keyboardShortcutsStore
38
38
  ).getShortcutRepresentation( 'core/edit-site/toggle-mode' ),
39
- isRichEditingEnabled: select( editSiteStore ).getSettings()
40
- .richEditingEnabled,
41
- isCodeEditingEnabled: select( editSiteStore ).getSettings()
42
- .codeEditingEnabled,
39
+ isRichEditingEnabled:
40
+ select( editSiteStore ).getSettings().richEditingEnabled,
41
+ isCodeEditingEnabled:
42
+ select( editSiteStore ).getSettings().codeEditingEnabled,
43
43
  mode: select( editSiteStore ).getEditorMode(),
44
44
  } ),
45
45
  []
@@ -18,9 +18,8 @@ export default function CopyContentMenuItem() {
18
18
  const { createNotice } = useDispatch( noticesStore );
19
19
  const getText = useSelect( ( select ) => {
20
20
  return () => {
21
- const { getEditedPostId, getEditedPostType } = select(
22
- editSiteStore
23
- );
21
+ const { getEditedPostId, getEditedPostType } =
22
+ select( editSiteStore );
24
23
  const { getEditedEntityRecord } = select( coreStore );
25
24
  const record = getEditedEntityRecord(
26
25
  'postType',
@@ -49,5 +48,5 @@ export default function CopyContentMenuItem() {
49
48
 
50
49
  const ref = useCopyToClipboard( getText, onSuccess );
51
50
 
52
- return <MenuItem ref={ ref }>{ __( 'Copy all content' ) }</MenuItem>;
51
+ return <MenuItem ref={ ref }>{ __( 'Copy all blocks' ) }</MenuItem>;
53
52
  }
@@ -26,9 +26,8 @@ export default function SiteExport() {
26
26
  const contentDisposition = response.headers.get(
27
27
  'content-disposition'
28
28
  );
29
- const contentDispositionMatches = contentDisposition.match(
30
- /=(.+)\.zip/
31
- );
29
+ const contentDispositionMatches =
30
+ contentDisposition.match( /=(.+)\.zip/ );
32
31
  const fileName = contentDispositionMatches[ 1 ]
33
32
  ? contentDispositionMatches[ 1 ]
34
33
  : 'edit-site-export';
@@ -19,10 +19,8 @@ import { SIDEBAR_BLOCK } from '../sidebar/constants';
19
19
  import { STORE_NAME } from '../../store/constants';
20
20
 
21
21
  function KeyboardShortcuts( { openEntitiesSavedStates } ) {
22
- const {
23
- __experimentalGetDirtyEntityRecords,
24
- isSavingEntityRecord,
25
- } = useSelect( coreStore );
22
+ const { __experimentalGetDirtyEntityRecords, isSavingEntityRecord } =
23
+ useSelect( coreStore );
26
24
  const { getEditorMode } = useSelect( editSiteStore );
27
25
  const isListViewOpen = useSelect(
28
26
  ( select ) => select( editSiteStore ).isListViewOpened(),
@@ -36,12 +34,10 @@ function KeyboardShortcuts( { openEntitiesSavedStates } ) {
36
34
  []
37
35
  );
38
36
  const { redo, undo } = useDispatch( coreStore );
39
- const { setIsListViewOpened, switchEditorMode } = useDispatch(
40
- editSiteStore
41
- );
42
- const { enableComplementaryArea, disableComplementaryArea } = useDispatch(
43
- interfaceStore
44
- );
37
+ const { setIsListViewOpened, switchEditorMode } =
38
+ useDispatch( editSiteStore );
39
+ const { enableComplementaryArea, disableComplementaryArea } =
40
+ useDispatch( interfaceStore );
45
41
 
46
42
  useShortcut( 'core/edit-site/save', ( event ) => {
47
43
  event.preventDefault();
@@ -19,9 +19,8 @@ import RenameMenuItem from './rename-menu-item';
19
19
  export default function Actions( { template } ) {
20
20
  const { removeTemplate, revertTemplate } = useDispatch( editSiteStore );
21
21
  const { saveEditedEntityRecord } = useDispatch( coreStore );
22
- const { createSuccessNotice, createErrorNotice } = useDispatch(
23
- noticesStore
24
- );
22
+ const { createSuccessNotice, createErrorNotice } =
23
+ useDispatch( noticesStore );
25
24
 
26
25
  const isRemovable = isTemplateRemovable( template );
27
26
  const isRevertable = isTemplateRevertable( template );