@wordpress/edit-site 6.3.0 → 6.4.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 (221) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/add-new-pattern/index.js +8 -2
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/add-new-template/index.js +3 -1
  5. package/build/components/add-new-template/index.js.map +1 -1
  6. package/build/components/block-editor/use-site-editor-settings.js +1 -82
  7. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  8. package/build/components/global-styles/block-preview-panel.js +14 -5
  9. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  10. package/build/components/global-styles/font-families.js +42 -23
  11. package/build/components/global-styles/font-families.js.map +1 -1
  12. package/build/components/global-styles/font-library-modal/index.js +4 -4
  13. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  14. package/build/components/global-styles/font-library-modal/installed-fonts.js +58 -10
  15. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  16. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +39 -0
  17. package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  18. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +39 -0
  19. package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  20. package/build/components/global-styles/font-sizes/font-size-preview.js +44 -0
  21. package/build/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  22. package/build/components/global-styles/font-sizes/font-size.js +213 -0
  23. package/build/components/global-styles/font-sizes/font-size.js.map +1 -0
  24. package/build/components/global-styles/font-sizes/font-sizes-count.js +50 -0
  25. package/build/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  26. package/build/components/global-styles/font-sizes/font-sizes.js +163 -0
  27. package/build/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  28. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js +67 -0
  29. package/build/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  30. package/build/components/global-styles/screen-block.js +10 -8
  31. package/build/components/global-styles/screen-block.js.map +1 -1
  32. package/build/components/global-styles/screen-style-variations.js +2 -2
  33. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  34. package/build/components/global-styles/screen-typography.js +3 -2
  35. package/build/components/global-styles/screen-typography.js.map +1 -1
  36. package/build/components/global-styles/size-control/index.js +85 -0
  37. package/build/components/global-styles/size-control/index.js.map +1 -0
  38. package/build/components/global-styles/style-variations-container.js +3 -0
  39. package/build/components/global-styles/style-variations-container.js.map +1 -1
  40. package/build/components/global-styles/ui.js +8 -0
  41. package/build/components/global-styles/ui.js.map +1 -1
  42. package/build/components/global-styles/variations/variations-color.js.map +1 -1
  43. package/build/components/global-styles/variations/variations-typography.js +1 -1
  44. package/build/components/global-styles/variations/variations-typography.js.map +1 -1
  45. package/build/components/layout/index.js +6 -0
  46. package/build/components/layout/index.js.map +1 -1
  47. package/build/components/layout/router.js +14 -6
  48. package/build/components/layout/router.js.map +1 -1
  49. package/build/components/page-patterns/header.js +1 -1
  50. package/build/components/page-patterns/header.js.map +1 -1
  51. package/build/components/page-patterns/index.js +23 -11
  52. package/build/components/page-patterns/index.js.map +1 -1
  53. package/build/components/page-templates/index.js +41 -34
  54. package/build/components/page-templates/index.js.map +1 -1
  55. package/build/components/post-edit/index.js +105 -0
  56. package/build/components/post-edit/index.js.map +1 -0
  57. package/build/components/post-fields/index.js +314 -0
  58. package/build/components/post-fields/index.js.map +1 -0
  59. package/build/components/post-list/index.js +281 -0
  60. package/build/components/post-list/index.js.map +1 -0
  61. package/build/components/posts-app/router.js +3 -3
  62. package/build/components/posts-app/router.js.map +1 -1
  63. package/build/components/sidebar-dataviews/default-views.js +22 -10
  64. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  65. package/build/components/sidebar-dataviews/index.js +40 -1
  66. package/build/components/sidebar-dataviews/index.js.map +1 -1
  67. package/build/components/sidebar-navigation-screen-global-styles/content.js +64 -0
  68. package/build/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  69. package/build/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  70. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  71. package/build/hooks/push-changes-to-global-styles/index.js +1 -1
  72. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  73. package/build/index.js +5 -1
  74. package/build/index.js.map +1 -1
  75. package/build/store/selectors.js +34 -6
  76. package/build/store/selectors.js.map +1 -1
  77. package/build/utils/get-filtered-template-parts.js +64 -0
  78. package/build/utils/get-filtered-template-parts.js.map +1 -0
  79. package/build-module/components/add-new-pattern/index.js +8 -2
  80. package/build-module/components/add-new-pattern/index.js.map +1 -1
  81. package/build-module/components/add-new-template/index.js +3 -1
  82. package/build-module/components/add-new-template/index.js.map +1 -1
  83. package/build-module/components/block-editor/use-site-editor-settings.js +1 -82
  84. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  85. package/build-module/components/global-styles/block-preview-panel.js +14 -5
  86. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  87. package/build-module/components/global-styles/font-families.js +44 -25
  88. package/build-module/components/global-styles/font-families.js.map +1 -1
  89. package/build-module/components/global-styles/font-library-modal/index.js +4 -4
  90. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  91. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +61 -13
  92. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  93. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +32 -0
  94. package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
  95. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +32 -0
  96. package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
  97. package/build-module/components/global-styles/font-sizes/font-size-preview.js +37 -0
  98. package/build-module/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
  99. package/build-module/components/global-styles/font-sizes/font-size.js +207 -0
  100. package/build-module/components/global-styles/font-sizes/font-size.js.map +1 -0
  101. package/build-module/components/global-styles/font-sizes/font-sizes-count.js +43 -0
  102. package/build-module/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
  103. package/build-module/components/global-styles/font-sizes/font-sizes.js +157 -0
  104. package/build-module/components/global-styles/font-sizes/font-sizes.js.map +1 -0
  105. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js +61 -0
  106. package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
  107. package/build-module/components/global-styles/screen-block.js +10 -8
  108. package/build-module/components/global-styles/screen-block.js.map +1 -1
  109. package/build-module/components/global-styles/screen-style-variations.js +2 -2
  110. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  111. package/build-module/components/global-styles/screen-typography.js +3 -2
  112. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  113. package/build-module/components/global-styles/size-control/index.js +79 -0
  114. package/build-module/components/global-styles/size-control/index.js.map +1 -0
  115. package/build-module/components/global-styles/style-variations-container.js +3 -0
  116. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  117. package/build-module/components/global-styles/ui.js +8 -0
  118. package/build-module/components/global-styles/ui.js.map +1 -1
  119. package/build-module/components/global-styles/variations/variations-color.js +1 -1
  120. package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
  121. package/build-module/components/global-styles/variations/variations-typography.js +1 -2
  122. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
  123. package/build-module/components/layout/index.js +6 -0
  124. package/build-module/components/layout/index.js.map +1 -1
  125. package/build-module/components/layout/router.js +14 -6
  126. package/build-module/components/layout/router.js.map +1 -1
  127. package/build-module/components/page-patterns/header.js +1 -1
  128. package/build-module/components/page-patterns/header.js.map +1 -1
  129. package/build-module/components/page-patterns/index.js +23 -11
  130. package/build-module/components/page-patterns/index.js.map +1 -1
  131. package/build-module/components/page-templates/index.js +43 -37
  132. package/build-module/components/page-templates/index.js.map +1 -1
  133. package/build-module/components/post-edit/index.js +98 -0
  134. package/build-module/components/post-edit/index.js.map +1 -0
  135. package/build-module/components/post-fields/index.js +306 -0
  136. package/build-module/components/post-fields/index.js.map +1 -0
  137. package/build-module/components/post-list/index.js +275 -0
  138. package/build-module/components/post-list/index.js.map +1 -0
  139. package/build-module/components/posts-app/router.js +3 -3
  140. package/build-module/components/posts-app/router.js.map +1 -1
  141. package/build-module/components/sidebar-dataviews/default-views.js +21 -9
  142. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  143. package/build-module/components/sidebar-dataviews/index.js +42 -3
  144. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  145. package/build-module/components/sidebar-navigation-screen-global-styles/content.js +57 -0
  146. package/build-module/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
  147. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +2 -47
  148. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  149. package/build-module/hooks/push-changes-to-global-styles/index.js +1 -1
  150. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  151. package/build-module/index.js +5 -1
  152. package/build-module/index.js.map +1 -1
  153. package/build-module/store/selectors.js +35 -7
  154. package/build-module/store/selectors.js.map +1 -1
  155. package/build-module/utils/get-filtered-template-parts.js +57 -0
  156. package/build-module/utils/get-filtered-template-parts.js.map +1 -0
  157. package/build-style/posts-rtl.css +581 -503
  158. package/build-style/posts.css +581 -503
  159. package/build-style/style-rtl.css +621 -519
  160. package/build-style/style.css +621 -519
  161. package/package.json +41 -41
  162. package/src/components/add-new-pattern/index.js +8 -2
  163. package/src/components/add-new-template/index.js +4 -1
  164. package/src/components/add-new-template/style.scss +4 -6
  165. package/src/components/block-editor/use-site-editor-settings.js +15 -111
  166. package/src/components/global-styles/block-preview-panel.js +22 -9
  167. package/src/components/global-styles/font-families.js +66 -31
  168. package/src/components/global-styles/font-library-modal/index.js +4 -2
  169. package/src/components/global-styles/font-library-modal/installed-fonts.js +92 -11
  170. package/src/components/global-styles/font-library-modal/style.scss +9 -0
  171. package/src/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +43 -0
  172. package/src/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +37 -0
  173. package/src/components/global-styles/font-sizes/font-size-preview.js +43 -0
  174. package/src/components/global-styles/font-sizes/font-size.js +250 -0
  175. package/src/components/global-styles/font-sizes/font-sizes-count.js +40 -0
  176. package/src/components/global-styles/font-sizes/font-sizes.js +263 -0
  177. package/src/components/global-styles/font-sizes/rename-font-size-dialog.js +70 -0
  178. package/src/components/global-styles/screen-block.js +12 -14
  179. package/src/components/global-styles/screen-style-variations.js +2 -2
  180. package/src/components/global-styles/screen-typography.js +3 -2
  181. package/src/components/global-styles/size-control/index.js +86 -0
  182. package/src/components/global-styles/style-variations-container.js +4 -0
  183. package/src/components/global-styles/style.scss +13 -3
  184. package/src/components/global-styles/ui.js +10 -0
  185. package/src/components/global-styles/variations/variations-color.js +1 -1
  186. package/src/components/global-styles/variations/variations-typography.js +1 -2
  187. package/src/components/layout/index.js +11 -0
  188. package/src/components/layout/router.js +13 -5
  189. package/src/components/layout/style.scss +26 -8
  190. package/src/components/page-patterns/header.js +1 -1
  191. package/src/components/page-patterns/index.js +15 -8
  192. package/src/components/page-templates/index.js +51 -46
  193. package/src/components/page-templates/style.scss +5 -3
  194. package/src/components/post-edit/index.js +96 -0
  195. package/src/components/post-edit/style.scss +9 -0
  196. package/src/components/post-fields/index.js +345 -0
  197. package/src/components/post-list/index.js +326 -0
  198. package/src/components/{posts-app → post-list}/style.scss +12 -9
  199. package/src/components/posts-app/router.js +3 -3
  200. package/src/components/sidebar-dataviews/default-views.js +21 -9
  201. package/src/components/sidebar-dataviews/index.js +36 -1
  202. package/src/components/sidebar-navigation-screen-global-styles/content.js +55 -0
  203. package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -55
  204. package/src/hooks/push-changes-to-global-styles/index.js +1 -1
  205. package/src/index.js +7 -1
  206. package/src/posts.scss +1 -1
  207. package/src/store/selectors.js +53 -14
  208. package/src/store/test/selectors.js +1 -26
  209. package/src/style.scss +2 -1
  210. package/src/utils/get-filtered-template-parts.js +61 -0
  211. package/src/utils/test/get-filtered-template-parts.js +127 -0
  212. package/build/components/global-styles/screen-background.js +0 -36
  213. package/build/components/global-styles/screen-background.js.map +0 -1
  214. package/build/components/posts-app/posts-list.js +0 -568
  215. package/build/components/posts-app/posts-list.js.map +0 -1
  216. package/build-module/components/global-styles/screen-background.js +0 -30
  217. package/build-module/components/global-styles/screen-background.js.map +0 -1
  218. package/build-module/components/posts-app/posts-list.js +0 -560
  219. package/build-module/components/posts-app/posts-list.js.map +0 -1
  220. package/src/components/global-styles/screen-background.js +0 -29
  221. package/src/components/posts-app/posts-list.js +0 -651
@@ -175,8 +175,11 @@ html.canvas-mode-edit-transition::view-transition-group(toggle) {
175
175
  color: $white;
176
176
  }
177
177
 
178
+ &:focus-visible,
178
179
  &:focus {
179
- box-shadow: none;
180
+ box-shadow: 0 0 0 3px #1e1e1e, 0 0 0 6px var(--wp-admin-theme-color);
181
+ outline: 4px solid #0000;
182
+ outline-offset: 4px;
180
183
  }
181
184
 
182
185
  &::before {
@@ -193,13 +196,6 @@ html.canvas-mode-edit-transition::view-transition-group(toggle) {
193
196
  box-shadow: none;
194
197
  }
195
198
 
196
- // Lightened spot color focus.
197
- &:focus::before {
198
- box-shadow:
199
- inset 0 0 0 var(--wp-admin-border-width-focus) rgba($white, 0.1),
200
- inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
201
- }
202
-
203
199
  .edit-site-layout__view-mode-toggle-icon {
204
200
  display: flex;
205
201
  height: $grid-unit-80;
@@ -255,3 +251,25 @@ html.canvas-mode-edit-transition::view-transition-group(toggle) {
255
251
  padding-left: 16px;
256
252
  padding-right: 16px;
257
253
  }
254
+
255
+ .edit-site-layout.is-full-canvas {
256
+ .edit-site-layout__view-mode-toggle.components-button {
257
+ &:focus-visible,
258
+ &:focus {
259
+
260
+ box-shadow: none;
261
+ outline: none;
262
+ outline-offset: 0;
263
+
264
+ .edit-site-site-icon svg {
265
+ box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #3858e9);
266
+ outline: 3px solid #0000;
267
+ height: 40px;
268
+ width: 40px;
269
+ padding: 2px;
270
+ border-radius: 2px;
271
+ }
272
+
273
+ }
274
+ }
275
+ }
@@ -80,7 +80,7 @@ export default function PatternsHeader( {
80
80
  label={ __( 'Actions' ) }
81
81
  toggleProps={ {
82
82
  className: 'edit-site-patterns__button',
83
- describedBy: sprintf(
83
+ description: sprintf(
84
84
  /* translators: %s: pattern category name */
85
85
  __( 'Action menu for %s pattern category' ),
86
86
  title
@@ -62,6 +62,14 @@ const defaultLayouts = {
62
62
  [ LAYOUT_TABLE ]: {
63
63
  layout: {
64
64
  primaryField: 'title',
65
+ styles: {
66
+ preview: {
67
+ width: '1%',
68
+ },
69
+ author: {
70
+ width: '1%',
71
+ },
72
+ },
65
73
  },
66
74
  },
67
75
  [ LAYOUT_GRID ]: {
@@ -169,7 +177,7 @@ function Author( { item, viewType } ) {
169
177
  const withIcon = viewType !== LAYOUT_LIST;
170
178
 
171
179
  return (
172
- <HStack alignment="left" spacing={ 1 }>
180
+ <HStack alignment="left" spacing={ 0 }>
173
181
  { withIcon && imageUrl && (
174
182
  <div
175
183
  className={ clsx( 'page-templates-author-field__avatar', {
@@ -276,17 +284,17 @@ export default function DataviewsPatterns() {
276
284
  const fields = useMemo( () => {
277
285
  const _fields = [
278
286
  {
279
- header: __( 'Preview' ),
287
+ label: __( 'Preview' ),
280
288
  id: 'preview',
281
289
  render: ( { item } ) => (
282
290
  <Preview item={ item } viewType={ view.type } />
283
291
  ),
284
292
  enableSorting: false,
285
- width: '1%',
286
293
  },
287
294
  {
288
- header: __( 'Title' ),
295
+ label: __( 'Title' ),
289
296
  id: 'title',
297
+ getValue: ( { item } ) => item.title?.raw || item.title,
290
298
  render: ( { item } ) => <Title item={ item } />,
291
299
  enableHiding: false,
292
300
  },
@@ -294,7 +302,7 @@ export default function DataviewsPatterns() {
294
302
 
295
303
  if ( type === PATTERN_TYPES.user ) {
296
304
  _fields.push( {
297
- header: __( 'Sync status' ),
305
+ label: __( 'Sync status' ),
298
306
  id: 'sync-status',
299
307
  render: ( { item } ) => {
300
308
  const syncStatus =
@@ -325,7 +333,7 @@ export default function DataviewsPatterns() {
325
333
  } );
326
334
  } else if ( type === TEMPLATE_PART_POST_TYPE ) {
327
335
  _fields.push( {
328
- header: __( 'Author' ),
336
+ label: __( 'Author' ),
329
337
  id: 'author',
330
338
  getValue: ( { item } ) => item.author_text,
331
339
  render: ( { item } ) => {
@@ -335,7 +343,6 @@ export default function DataviewsPatterns() {
335
343
  filterBy: {
336
344
  isPrimary: true,
337
345
  },
338
- width: '1%',
339
346
  } );
340
347
  }
341
348
 
@@ -345,7 +352,7 @@ export default function DataviewsPatterns() {
345
352
  // Reset the page number when the category changes.
346
353
  useEffect( () => {
347
354
  if ( previousCategoryId !== categoryId ) {
348
- setView( DEFAULT_VIEW );
355
+ setView( ( prevView ) => ( { ...prevView, page: 1 } ) );
349
356
  }
350
357
  }, [ categoryId, previousCategoryId ] );
351
358
  const { data, paginationInfo } = useMemo( () => {
@@ -6,12 +6,7 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import {
10
- Icon,
11
- __experimentalText as Text,
12
- __experimentalHStack as HStack,
13
- VisuallyHidden,
14
- } from '@wordpress/components';
9
+ import { Icon, __experimentalHStack as HStack } from '@wordpress/components';
15
10
  import { __ } from '@wordpress/i18n';
16
11
  import { useState, useMemo, useCallback, useEffect } from '@wordpress/element';
17
12
  import { useEntityRecords } from '@wordpress/core-data';
@@ -23,7 +18,10 @@ import {
23
18
  } from '@wordpress/block-editor';
24
19
  import { DataViews, filterSortAndPaginate } from '@wordpress/dataviews';
25
20
  import { privateApis as routerPrivateApis } from '@wordpress/router';
26
- import { privateApis as editorPrivateApis } from '@wordpress/editor';
21
+ import {
22
+ privateApis as editorPrivateApis,
23
+ EditorProvider,
24
+ } from '@wordpress/editor';
27
25
 
28
26
  /**
29
27
  * Internal dependencies
@@ -47,20 +45,41 @@ import { useEditPostAction } from '../dataviews-actions';
47
45
 
48
46
  const { usePostActions } = unlock( editorPrivateApis );
49
47
 
50
- const { ExperimentalBlockEditorProvider, useGlobalStyle } = unlock(
51
- blockEditorPrivateApis
52
- );
48
+ const { useGlobalStyle } = unlock( blockEditorPrivateApis );
53
49
  const { useHistory, useLocation } = unlock( routerPrivateApis );
54
50
 
55
51
  const EMPTY_ARRAY = [];
56
52
 
57
53
  const defaultLayouts = {
58
54
  [ LAYOUT_TABLE ]: {
55
+ fields: [ 'template', 'author' ],
59
56
  layout: {
60
57
  primaryField: 'title',
58
+ combinedFields: [
59
+ {
60
+ id: 'template',
61
+ label: __( 'Template' ),
62
+ children: [ 'title', 'description' ],
63
+ direction: 'vertical',
64
+ },
65
+ ],
66
+ styles: {
67
+ template: {
68
+ maxWidth: 400,
69
+ minWidth: 320,
70
+ },
71
+ preview: {
72
+ minWidth: 120,
73
+ maxWidth: 120,
74
+ },
75
+ author: {
76
+ width: '1%',
77
+ },
78
+ },
61
79
  },
62
80
  },
63
81
  [ LAYOUT_GRID ]: {
82
+ fields: [ 'title', 'description', 'author' ],
64
83
  layout: {
65
84
  mediaField: 'preview',
66
85
  primaryField: 'title',
@@ -68,6 +87,7 @@ const defaultLayouts = {
68
87
  },
69
88
  },
70
89
  [ LAYOUT_LIST ]: {
90
+ fields: [ 'title', 'description', 'author' ],
71
91
  layout: {
72
92
  primaryField: 'title',
73
93
  mediaField: 'preview',
@@ -84,7 +104,7 @@ const DEFAULT_VIEW = {
84
104
  field: 'title',
85
105
  direction: 'asc',
86
106
  },
87
- fields: [ 'title', 'description', 'author' ],
107
+ fields: defaultLayouts[ LAYOUT_GRID ].fields,
88
108
  layout: defaultLayouts[ LAYOUT_GRID ].layout,
89
109
  filters: [],
90
110
  };
@@ -107,14 +127,13 @@ function Title( { item, viewType } ) {
107
127
  );
108
128
  }
109
129
 
110
- function AuthorField( { item, viewType } ) {
130
+ function AuthorField( { item } ) {
111
131
  const [ isImageLoaded, setIsImageLoaded ] = useState( false );
112
132
  const { text, icon, imageUrl } = useAddedBy( item.type, item.id );
113
- const withIcon = viewType !== LAYOUT_LIST;
114
133
 
115
134
  return (
116
- <HStack alignment="left" spacing={ 1 }>
117
- { withIcon && imageUrl && (
135
+ <HStack alignment="left" spacing={ 0 }>
136
+ { imageUrl && (
118
137
  <div
119
138
  className={ clsx( 'page-templates-author-field__avatar', {
120
139
  'is-loaded': isImageLoaded,
@@ -127,7 +146,7 @@ function AuthorField( { item, viewType } ) {
127
146
  />
128
147
  </div>
129
148
  ) }
130
- { withIcon && ! imageUrl && (
149
+ { ! imageUrl && (
131
150
  <div className="page-templates-author-field__icon">
132
151
  <Icon icon={ icon } />
133
152
  </div>
@@ -158,7 +177,7 @@ function Preview( { item, viewType } ) {
158
177
  // the block editor settings are needed in context where we don't have the block editor.
159
178
  // Explore how we can solve this in a better way.
160
179
  return (
161
- <ExperimentalBlockEditorProvider settings={ settings }>
180
+ <EditorProvider post={ item } settings={ settings }>
162
181
  <div
163
182
  className={ `page-templates-preview-field is-viewtype-${ viewType }` }
164
183
  style={ { backgroundColor } }
@@ -184,7 +203,7 @@ function Preview( { item, viewType } ) {
184
203
  </button>
185
204
  ) }
186
205
  </div>
187
- </ExperimentalBlockEditorProvider>
206
+ </EditorProvider>
188
207
  );
189
208
  }
190
209
 
@@ -199,6 +218,7 @@ export default function PageTemplates() {
199
218
  ...DEFAULT_VIEW,
200
219
  type: usedType,
201
220
  layout: defaultLayouts[ usedType ].layout,
221
+ fields: defaultLayouts[ usedType ].fields,
202
222
  filters:
203
223
  activeView !== 'all'
204
224
  ? [
@@ -236,12 +256,13 @@ export default function PageTemplates() {
236
256
  }
237
257
  );
238
258
  const history = useHistory();
239
- const onSelectionChange = useCallback(
259
+ const onChangeSelection = useCallback(
240
260
  ( items ) => {
261
+ setSelection( items );
241
262
  if ( view?.type === LAYOUT_LIST ) {
242
263
  history.push( {
243
264
  ...params,
244
- postId: items.length === 1 ? items[ 0 ].id : undefined,
265
+ postId: items.length === 1 ? items[ 0 ] : undefined,
245
266
  } );
246
267
  }
247
268
  },
@@ -265,61 +286,46 @@ export default function PageTemplates() {
265
286
  const fields = useMemo(
266
287
  () => [
267
288
  {
268
- header: __( 'Preview' ),
289
+ label: __( 'Preview' ),
269
290
  id: 'preview',
270
291
  render: ( { item } ) => {
271
292
  return <Preview item={ item } viewType={ view.type } />;
272
293
  },
273
- minWidth: 120,
274
- maxWidth: 120,
275
294
  enableSorting: false,
276
295
  },
277
296
  {
278
- header: __( 'Template' ),
297
+ label: __( 'Template' ),
279
298
  id: 'title',
280
299
  getValue: ( { item } ) => item.title?.rendered,
281
300
  render: ( { item } ) => (
282
301
  <Title item={ item } viewType={ view.type } />
283
302
  ),
284
- maxWidth: 400,
285
303
  enableHiding: false,
286
304
  enableGlobalSearch: true,
287
305
  },
288
306
  {
289
- header: __( 'Description' ),
307
+ label: __( 'Description' ),
290
308
  id: 'description',
291
309
  render: ( { item } ) => {
292
- return item.description ? (
293
- <span className="page-templates-description">
294
- { decodeEntities( item.description ) }
295
- </span>
296
- ) : (
297
- view.type === LAYOUT_TABLE && (
298
- <>
299
- <Text variant="muted" aria-hidden="true">
300
- &#8212;
301
- </Text>
302
- <VisuallyHidden>
303
- { __( 'No description.' ) }
304
- </VisuallyHidden>
305
- </>
310
+ return (
311
+ item.description && (
312
+ <span className="page-templates-description">
313
+ { decodeEntities( item.description ) }
314
+ </span>
306
315
  )
307
316
  );
308
317
  },
309
- maxWidth: 400,
310
- minWidth: 320,
311
318
  enableSorting: false,
312
319
  enableGlobalSearch: true,
313
320
  },
314
321
  {
315
- header: __( 'Author' ),
322
+ label: __( 'Author' ),
316
323
  id: 'author',
317
324
  getValue: ( { item } ) => item.author_text,
318
325
  render: ( { item } ) => {
319
326
  return <AuthorField viewType={ view.type } item={ item } />;
320
327
  },
321
328
  elements: authors,
322
- width: '1%',
323
329
  },
324
330
  ],
325
331
  [ authors, view.type ]
@@ -367,9 +373,8 @@ export default function PageTemplates() {
367
373
  isLoading={ isLoadingData }
368
374
  view={ view }
369
375
  onChangeView={ onChangeView }
370
- onSelectionChange={ onSelectionChange }
376
+ onChangeSelection={ onChangeSelection }
371
377
  selection={ selection }
372
- setSelection={ setSelection }
373
378
  defaultLayouts={ defaultLayouts }
374
379
  />
375
380
  </Page>
@@ -2,6 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  height: 100%;
5
+ width: 100%;
5
6
 
6
7
  .page-templates-preview-field__button {
7
8
  box-shadow: none;
@@ -67,12 +68,12 @@
67
68
  width: $grid-unit-30;
68
69
  height: $grid-unit-30;
69
70
  align-items: center;
70
- justify-content: center;
71
+ justify-content: left;
71
72
  display: flex;
72
73
 
73
74
  img {
74
- width: 20px;
75
- height: 20px;
75
+ width: $grid-unit-20;
76
+ height: $grid-unit-20;
76
77
  object-fit: cover;
77
78
  opacity: 0;
78
79
  transition: opacity 0.1s linear;
@@ -94,6 +95,7 @@
94
95
  height: $grid-unit-30;
95
96
 
96
97
  svg {
98
+ margin-left: -$grid-unit-05;
97
99
  fill: currentColor;
98
100
  }
99
101
  }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __ } from '@wordpress/i18n';
10
+ import { DataForm } from '@wordpress/dataviews';
11
+ import { useDispatch, useSelect, useRegistry } from '@wordpress/data';
12
+ import { store as coreDataStore } from '@wordpress/core-data';
13
+ import { Button } from '@wordpress/components';
14
+ import { useState, useMemo } from '@wordpress/element';
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import Page from '../page';
20
+ import usePostFields from '../post-fields';
21
+
22
+ function PostEditForm( { postType, postId } ) {
23
+ const ids = useMemo( () => postId.split( ',' ), [ postId ] );
24
+ const { initialEdits } = useSelect(
25
+ ( select ) => {
26
+ if ( ids.length !== 1 ) {
27
+ }
28
+ return {
29
+ initialEdits:
30
+ ids.length === 1
31
+ ? select( coreDataStore ).getEntityRecord(
32
+ 'postType',
33
+ postType,
34
+ ids[ 0 ]
35
+ )
36
+ : null,
37
+ };
38
+ },
39
+ [ postType, ids ]
40
+ );
41
+ const registry = useRegistry();
42
+ const { saveEntityRecord } = useDispatch( coreDataStore );
43
+ const { fields } = usePostFields();
44
+ const form = {
45
+ visibleFields: [ 'title' ],
46
+ };
47
+ const [ edits, setEdits ] = useState( {} );
48
+ const itemWithEdits = useMemo( () => {
49
+ return {
50
+ ...initialEdits,
51
+ ...edits,
52
+ };
53
+ }, [ initialEdits, edits ] );
54
+ const onSubmit = async ( event ) => {
55
+ event.preventDefault();
56
+ const { getEntityRecord } = registry.resolveSelect( coreDataStore );
57
+ for ( const id of ids ) {
58
+ const item = await getEntityRecord( 'postType', postType, id );
59
+ saveEntityRecord( 'postType', postType, {
60
+ ...item,
61
+ ...edits,
62
+ } );
63
+ }
64
+ setEdits( {} );
65
+ };
66
+
67
+ return (
68
+ <form onSubmit={ onSubmit }>
69
+ <DataForm
70
+ data={ itemWithEdits }
71
+ fields={ fields }
72
+ form={ form }
73
+ onChange={ setEdits }
74
+ />
75
+ <Button variant="primary" type="submit">
76
+ { __( 'Update' ) }
77
+ </Button>
78
+ </form>
79
+ );
80
+ }
81
+
82
+ export function PostEdit( { postType, postId } ) {
83
+ return (
84
+ <Page
85
+ className={ clsx( 'edit-site-post-edit', {
86
+ 'is-empty': ! postId,
87
+ } ) }
88
+ label={ __( 'Post Edit' ) }
89
+ >
90
+ { postId && (
91
+ <PostEditForm postType={ postType } postId={ postId } />
92
+ ) }
93
+ { ! postId && <p>{ __( 'Select a page to edit' ) }</p> }
94
+ </Page>
95
+ );
96
+ }
@@ -0,0 +1,9 @@
1
+ .edit-site-post-edit {
2
+ padding: $grid-unit-30;
3
+
4
+ &.is-empty .edit-site-page-content {
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ }
9
+ }