@wordpress/edit-site 3.0.10 → 3.0.14

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 (186) hide show
  1. package/build/components/add-new-template/new-template-part.js +34 -18
  2. package/build/components/add-new-template/new-template-part.js.map +1 -1
  3. package/build/components/add-new-template/new-template.js +41 -23
  4. package/build/components/add-new-template/new-template.js.map +1 -1
  5. package/build/components/block-editor/index.js +3 -1
  6. package/build/components/block-editor/index.js.map +1 -1
  7. package/build/components/editor/index.js +12 -6
  8. package/build/components/editor/index.js.map +1 -1
  9. package/build/components/global-styles/color-palette-panel.js +29 -6
  10. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  11. package/build/components/global-styles/global-styles-provider.js +5 -43
  12. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  13. package/build/components/global-styles/gradients-palette-panel.js +71 -0
  14. package/build/components/global-styles/gradients-palette-panel.js.map +1 -0
  15. package/build/components/global-styles/hooks.js +5 -5
  16. package/build/components/global-styles/hooks.js.map +1 -1
  17. package/build/components/global-styles/palette.js +11 -5
  18. package/build/components/global-styles/palette.js.map +1 -1
  19. package/build/components/global-styles/screen-background-color.js +3 -1
  20. package/build/components/global-styles/screen-background-color.js.map +1 -1
  21. package/build/components/global-styles/screen-color-palette.js +23 -3
  22. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  23. package/build/components/global-styles/screen-link-color.js +3 -1
  24. package/build/components/global-styles/screen-link-color.js.map +1 -1
  25. package/build/components/global-styles/screen-text-color.js +3 -1
  26. package/build/components/global-styles/screen-text-color.js.map +1 -1
  27. package/build/components/global-styles/screen-typography-element.js +54 -0
  28. package/build/components/global-styles/screen-typography-element.js.map +1 -0
  29. package/build/components/global-styles/screen-typography.js +74 -6
  30. package/build/components/global-styles/screen-typography.js.map +1 -1
  31. package/build/components/global-styles/typography-panel.js +28 -8
  32. package/build/components/global-styles/typography-panel.js.map +1 -1
  33. package/build/components/global-styles/ui.js +12 -0
  34. package/build/components/global-styles/ui.js.map +1 -1
  35. package/build/components/global-styles/use-global-styles-output.js +2 -2
  36. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  37. package/build/components/global-styles/utils.js +1 -1
  38. package/build/components/global-styles/utils.js.map +1 -1
  39. package/build/components/keyboard-shortcuts/index.js +26 -0
  40. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  41. package/build/components/list/actions/index.js +104 -0
  42. package/build/components/list/actions/index.js.map +1 -0
  43. package/build/components/list/actions/rename-menu-item.js +112 -0
  44. package/build/components/list/actions/rename-menu-item.js.map +1 -0
  45. package/build/components/list/added-by.js +180 -0
  46. package/build/components/list/added-by.js.map +1 -0
  47. package/build/components/list/index.js +54 -7
  48. package/build/components/list/index.js.map +1 -1
  49. package/build/components/list/table.js +58 -68
  50. package/build/components/list/table.js.map +1 -1
  51. package/build/components/list/use-register-shortcuts.js +52 -0
  52. package/build/components/list/use-register-shortcuts.js.map +1 -0
  53. package/build/components/navigation-sidebar/index.js +24 -9
  54. package/build/components/navigation-sidebar/index.js.map +1 -1
  55. package/build/components/navigation-sidebar/navigation-panel/index.js +35 -17
  56. package/build/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  57. package/build/components/navigation-sidebar/navigation-toggle/index.js +14 -5
  58. package/build/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  59. package/build/components/template-details/edit-template-title.js +33 -0
  60. package/build/components/template-details/edit-template-title.js.map +1 -0
  61. package/build/components/template-details/index.js +8 -4
  62. package/build/components/template-details/index.js.map +1 -1
  63. package/build/components/template-details/template-areas.js +1 -1
  64. package/build/components/template-details/template-areas.js.map +1 -1
  65. package/build/index.js +8 -2
  66. package/build/index.js.map +1 -1
  67. package/build/store/actions.js +47 -18
  68. package/build/store/actions.js.map +1 -1
  69. package/build/store/selectors.js +25 -5
  70. package/build/store/selectors.js.map +1 -1
  71. package/build-module/components/add-new-template/new-template-part.js +30 -17
  72. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  73. package/build-module/components/add-new-template/new-template.js +40 -24
  74. package/build-module/components/add-new-template/new-template.js.map +1 -1
  75. package/build-module/components/block-editor/index.js +2 -1
  76. package/build-module/components/block-editor/index.js.map +1 -1
  77. package/build-module/components/editor/index.js +13 -7
  78. package/build-module/components/editor/index.js.map +1 -1
  79. package/build-module/components/global-styles/color-palette-panel.js +29 -7
  80. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  81. package/build-module/components/global-styles/global-styles-provider.js +6 -39
  82. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  83. package/build-module/components/global-styles/gradients-palette-panel.js +60 -0
  84. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -0
  85. package/build-module/components/global-styles/hooks.js +5 -5
  86. package/build-module/components/global-styles/hooks.js.map +1 -1
  87. package/build-module/components/global-styles/palette.js +12 -5
  88. package/build-module/components/global-styles/palette.js.map +1 -1
  89. package/build-module/components/global-styles/screen-background-color.js +3 -1
  90. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  91. package/build-module/components/global-styles/screen-color-palette.js +22 -3
  92. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  93. package/build-module/components/global-styles/screen-link-color.js +3 -1
  94. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  95. package/build-module/components/global-styles/screen-text-color.js +3 -1
  96. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  97. package/build-module/components/global-styles/screen-typography-element.js +41 -0
  98. package/build-module/components/global-styles/screen-typography-element.js.map +1 -0
  99. package/build-module/components/global-styles/screen-typography.js +70 -6
  100. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  101. package/build-module/components/global-styles/typography-panel.js +28 -8
  102. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  103. package/build-module/components/global-styles/ui.js +11 -0
  104. package/build-module/components/global-styles/ui.js.map +1 -1
  105. package/build-module/components/global-styles/use-global-styles-output.js +2 -2
  106. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  107. package/build-module/components/global-styles/utils.js +1 -1
  108. package/build-module/components/global-styles/utils.js.map +1 -1
  109. package/build-module/components/keyboard-shortcuts/index.js +26 -0
  110. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  111. package/build-module/components/list/actions/index.js +85 -0
  112. package/build-module/components/list/actions/index.js.map +1 -0
  113. package/build-module/components/list/actions/rename-menu-item.js +101 -0
  114. package/build-module/components/list/actions/rename-menu-item.js.map +1 -0
  115. package/build-module/components/list/added-by.js +166 -0
  116. package/build-module/components/list/added-by.js.map +1 -0
  117. package/build-module/components/list/index.js +49 -8
  118. package/build-module/components/list/index.js.map +1 -1
  119. package/build-module/components/list/table.js +60 -70
  120. package/build-module/components/list/table.js.map +1 -1
  121. package/build-module/components/list/use-register-shortcuts.js +41 -0
  122. package/build-module/components/list/use-register-shortcuts.js.map +1 -0
  123. package/build-module/components/navigation-sidebar/index.js +22 -10
  124. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  125. package/build-module/components/navigation-sidebar/navigation-panel/index.js +33 -18
  126. package/build-module/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  127. package/build-module/components/navigation-sidebar/navigation-toggle/index.js +14 -6
  128. package/build-module/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  129. package/build-module/components/template-details/edit-template-title.js +23 -0
  130. package/build-module/components/template-details/edit-template-title.js.map +1 -0
  131. package/build-module/components/template-details/index.js +7 -4
  132. package/build-module/components/template-details/index.js.map +1 -1
  133. package/build-module/components/template-details/template-areas.js +1 -1
  134. package/build-module/components/template-details/template-areas.js.map +1 -1
  135. package/build-module/index.js +8 -3
  136. package/build-module/index.js.map +1 -1
  137. package/build-module/store/actions.js +48 -19
  138. package/build-module/store/actions.js.map +1 -1
  139. package/build-module/store/selectors.js +21 -3
  140. package/build-module/store/selectors.js.map +1 -1
  141. package/build-style/style-rtl.css +146 -21
  142. package/build-style/style.css +146 -21
  143. package/package.json +10 -8
  144. package/src/components/add-new-template/new-template-part.js +32 -18
  145. package/src/components/add-new-template/new-template.js +39 -20
  146. package/src/components/block-editor/index.js +2 -0
  147. package/src/components/editor/index.js +17 -6
  148. package/src/components/global-styles/color-palette-panel.js +64 -7
  149. package/src/components/global-styles/global-styles-provider.js +3 -33
  150. package/src/components/global-styles/gradients-palette-panel.js +99 -0
  151. package/src/components/global-styles/hooks.js +4 -4
  152. package/src/components/global-styles/palette.js +30 -10
  153. package/src/components/global-styles/screen-background-color.js +2 -0
  154. package/src/components/global-styles/screen-color-palette.js +30 -3
  155. package/src/components/global-styles/screen-link-color.js +2 -0
  156. package/src/components/global-styles/screen-text-color.js +2 -0
  157. package/src/components/global-styles/screen-typography-element.js +39 -0
  158. package/src/components/global-styles/screen-typography.js +84 -3
  159. package/src/components/global-styles/style.scss +45 -6
  160. package/src/components/global-styles/test/use-global-styles-output.js +1 -1
  161. package/src/components/global-styles/test/utils.js +1 -1
  162. package/src/components/global-styles/typography-panel.js +37 -7
  163. package/src/components/global-styles/ui.js +9 -0
  164. package/src/components/global-styles/use-global-styles-output.js +2 -2
  165. package/src/components/global-styles/utils.js +1 -1
  166. package/src/components/keyboard-shortcuts/index.js +32 -0
  167. package/src/components/list/actions/index.js +95 -0
  168. package/src/components/list/actions/rename-menu-item.js +134 -0
  169. package/src/components/list/added-by.js +179 -0
  170. package/src/components/list/index.js +63 -5
  171. package/src/components/list/style.scss +106 -11
  172. package/src/components/list/table.js +65 -76
  173. package/src/components/list/use-register-shortcuts.js +45 -0
  174. package/src/components/navigation-sidebar/index.js +21 -12
  175. package/src/components/navigation-sidebar/navigation-panel/index.js +32 -15
  176. package/src/components/navigation-sidebar/navigation-toggle/index.js +29 -17
  177. package/src/components/navigation-sidebar/navigation-toggle/test/index.js +2 -0
  178. package/src/components/sidebar/style.scss +2 -1
  179. package/src/components/template-details/edit-template-title.js +28 -0
  180. package/src/components/template-details/index.js +15 -10
  181. package/src/components/template-details/template-areas.js +1 -1
  182. package/src/index.js +10 -2
  183. package/src/store/actions.js +82 -34
  184. package/src/store/selectors.js +22 -4
  185. package/src/store/test/actions.js +0 -24
  186. package/src/store/test/selectors.js +24 -0
@@ -5,7 +5,7 @@ import { parse, __unstableSerializeAndClean } from '@wordpress/blocks';
5
5
  import { controls, dispatch } from '@wordpress/data';
6
6
  import { apiFetch } from '@wordpress/data-controls';
7
7
  import { addQueryArgs, getPathAndQueryString } from '@wordpress/url';
8
- import { __ } from '@wordpress/i18n';
8
+ import { __, sprintf } from '@wordpress/i18n';
9
9
  import { store as noticesStore } from '@wordpress/notices';
10
10
  import { store as coreStore } from '@wordpress/core-data';
11
11
  import { store as interfaceStore } from '@wordpress/interface';
@@ -111,14 +111,51 @@ export function* addTemplate( template ) {
111
111
  * @param {Object} template The template object.
112
112
  */
113
113
  export function* removeTemplate( template ) {
114
- yield controls.dispatch(
115
- coreStore,
116
- 'deleteEntityRecord',
117
- 'postType',
118
- template.type,
119
- template.id,
120
- { force: true }
121
- );
114
+ try {
115
+ yield controls.dispatch(
116
+ coreStore,
117
+ 'deleteEntityRecord',
118
+ 'postType',
119
+ template.type,
120
+ template.id,
121
+ { force: true }
122
+ );
123
+
124
+ const lastError = yield controls.select(
125
+ coreStore,
126
+ 'getLastEntityDeleteError',
127
+ 'postType',
128
+ template.type,
129
+ template.id
130
+ );
131
+
132
+ if ( lastError ) {
133
+ throw lastError;
134
+ }
135
+
136
+ yield controls.dispatch(
137
+ noticesStore,
138
+ 'createSuccessNotice',
139
+ sprintf(
140
+ /* translators: The template/part's name. */
141
+ __( '"%s" removed.' ),
142
+ template.title.rendered
143
+ ),
144
+ { type: 'snackbar' }
145
+ );
146
+ } catch ( error ) {
147
+ const errorMessage =
148
+ error.message && error.code !== 'unknown_error'
149
+ ? error.message
150
+ : __( 'An error occurred while deleting the template.' );
151
+
152
+ yield controls.dispatch(
153
+ noticesStore,
154
+ 'createErrorNotice',
155
+ errorMessage,
156
+ { type: 'snackbar' }
157
+ );
158
+ }
122
159
  }
123
160
 
124
161
  /**
@@ -338,9 +375,12 @@ export function setIsListViewOpened( isOpen ) {
338
375
  /**
339
376
  * Reverts a template to its original theme-provided file.
340
377
  *
341
- * @param {Object} template The template to revert.
378
+ * @param {Object} template The template to revert.
379
+ * @param {Object} [options]
380
+ * @param {boolean} [options.allowUndo] Whether to allow the user to undo
381
+ * reverting the template. Default true.
342
382
  */
343
- export function* revertTemplate( template ) {
383
+ export function* revertTemplate( template, { allowUndo = true } = {} ) {
344
384
  if ( ! isTemplateRevertable( template ) ) {
345
385
  yield controls.dispatch(
346
386
  noticesStore,
@@ -428,32 +468,40 @@ export function* revertTemplate( template ) {
428
468
  }
429
469
  );
430
470
 
431
- const undoRevert = async () => {
432
- await dispatch( coreStore ).editEntityRecord(
433
- 'postType',
434
- template.type,
435
- edited.id,
471
+ if ( allowUndo ) {
472
+ const undoRevert = async () => {
473
+ await dispatch( coreStore ).editEntityRecord(
474
+ 'postType',
475
+ template.type,
476
+ edited.id,
477
+ {
478
+ content: serializeBlocks,
479
+ blocks: edited.blocks,
480
+ source: 'custom',
481
+ }
482
+ );
483
+ };
484
+ yield controls.dispatch(
485
+ noticesStore,
486
+ 'createSuccessNotice',
487
+ __( 'Template reverted.' ),
436
488
  {
437
- content: serializeBlocks,
438
- blocks: edited.blocks,
439
- source: 'custom',
489
+ type: 'snackbar',
490
+ actions: [
491
+ {
492
+ label: __( 'Undo' ),
493
+ onClick: undoRevert,
494
+ },
495
+ ],
440
496
  }
441
497
  );
442
- };
443
- yield controls.dispatch(
444
- noticesStore,
445
- 'createSuccessNotice',
446
- __( 'Template reverted.' ),
447
- {
448
- type: 'snackbar',
449
- actions: [
450
- {
451
- label: __( 'Undo' ),
452
- onClick: undoRevert,
453
- },
454
- ],
455
- }
456
- );
498
+ } else {
499
+ yield controls.dispatch(
500
+ noticesStore,
501
+ 'createSuccessNotice',
502
+ __( 'Template reverted.' )
503
+ );
504
+ }
457
505
  } catch ( error ) {
458
506
  const errorMessage =
459
507
  error.message && error.code !== 'unknown_error'
@@ -11,6 +11,7 @@ import { store as coreDataStore } from '@wordpress/core-data';
11
11
  import { createRegistrySelector } from '@wordpress/data';
12
12
  import { uploadMedia } from '@wordpress/media-utils';
13
13
  import { isTemplatePart } from '@wordpress/blocks';
14
+ import { Platform } from '@wordpress/element';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -64,6 +65,22 @@ export const getCanUserCreateMedia = createRegistrySelector( ( select ) => () =>
64
65
  select( coreDataStore ).canUser( 'create', 'media' )
65
66
  );
66
67
 
68
+ /**
69
+ * Returns any available Reusable blocks.
70
+ *
71
+ * @param {Object} state Global application state.
72
+ *
73
+ * @return {Array} The available reusable blocks.
74
+ */
75
+ export const getReusableBlocks = createRegistrySelector( ( select ) => () => {
76
+ const isWeb = Platform.OS === 'web';
77
+ return isWeb
78
+ ? select( coreDataStore ).getEntityRecords( 'postType', 'wp_block', {
79
+ per_page: -1,
80
+ } )
81
+ : [];
82
+ } );
83
+
67
84
  /**
68
85
  * Returns the settings, taking into account active features and permissions.
69
86
  *
@@ -80,6 +97,7 @@ export const getSettings = createSelector(
80
97
  focusMode: isFeatureActive( state, 'focusMode' ),
81
98
  hasFixedToolbar: isFeatureActive( state, 'fixedToolbar' ),
82
99
  __experimentalSetIsInserterOpened: setIsInserterOpen,
100
+ __experimentalReusableBlocks: getReusableBlocks( state ),
83
101
  };
84
102
 
85
103
  const canUserCreateMedia = getCanUserCreateMedia( state );
@@ -101,6 +119,7 @@ export const getSettings = createSelector(
101
119
  state.settings,
102
120
  isFeatureActive( state, 'focusMode' ),
103
121
  isFeatureActive( state, 'fixedToolbar' ),
122
+ getReusableBlocks( state ),
104
123
  ]
105
124
  );
106
125
 
@@ -309,10 +328,9 @@ export const getCurrentTemplateTemplateParts = createRegistrySelector(
309
328
  templateId
310
329
  );
311
330
 
312
- const templateParts = select( coreDataStore ).getEntityRecords(
313
- 'postType',
314
- 'wp_template_part'
315
- );
331
+ const templateParts = select(
332
+ coreDataStore
333
+ ).getEntityRecords( 'postType', 'wp_template_part', { per_page: -1 } );
316
334
  const templatePartsById = keyBy(
317
335
  templateParts,
318
336
  ( templatePart ) => templatePart.id
@@ -5,7 +5,6 @@ import {
5
5
  toggleFeature,
6
6
  setTemplate,
7
7
  addTemplate,
8
- removeTemplate,
9
8
  setTemplatePart,
10
9
  setPage,
11
10
  showHomepage,
@@ -76,29 +75,6 @@ describe( 'actions', () => {
76
75
  } );
77
76
  } );
78
77
 
79
- describe( 'removeTemplate', () => {
80
- it( 'should issue a deleteEntityRecord request', () => {
81
- const template = {
82
- id: 'tt1-blocks//general',
83
- type: 'wp_template_part',
84
- };
85
-
86
- const it = removeTemplate( template );
87
- expect( it.next().value ).toEqual( {
88
- actionName: 'deleteEntityRecord',
89
- args: [
90
- 'postType',
91
- 'wp_template_part',
92
- 'tt1-blocks//general',
93
- { force: true },
94
- ],
95
- storeKey: 'core',
96
- type: '@@data/DISPATCH',
97
- } );
98
- expect( it.next().done ).toBe( true );
99
- } );
100
- } );
101
-
102
78
  describe( 'setTemplatePart', () => {
103
79
  it( 'should return the SET_TEMPLATE_PART action', () => {
104
80
  const templatePartId = 1;
@@ -17,6 +17,7 @@ import {
17
17
  getPreviousEditedPostId,
18
18
  getPage,
19
19
  getNavigationPanelActiveMenu,
20
+ getReusableBlocks,
20
21
  isNavigationOpened,
21
22
  isInserterOpened,
22
23
  isListViewOpened,
@@ -24,9 +25,13 @@ import {
24
25
 
25
26
  describe( 'selectors', () => {
26
27
  const canUser = jest.fn( () => true );
28
+ const getEntityRecords = jest.fn( () => [] );
27
29
  getCanUserCreateMedia.registry = {
28
30
  select: jest.fn( () => ( { canUser } ) ),
29
31
  };
32
+ getReusableBlocks.registry = {
33
+ select: jest.fn( () => ( { getEntityRecords } ) ),
34
+ };
30
35
 
31
36
  describe( 'isFeatureActive', () => {
32
37
  it( 'is tolerant to an undefined features preference', () => {
@@ -83,6 +88,22 @@ describe( 'selectors', () => {
83
88
  } );
84
89
  } );
85
90
 
91
+ describe( 'getReusableBlocks', () => {
92
+ it( "selects `getEntityRecords( 'postType', 'wp_block' )` from the core store", () => {
93
+ expect( getReusableBlocks() ).toEqual( [] );
94
+ expect( getReusableBlocks.registry.select ).toHaveBeenCalledWith(
95
+ coreDataStore
96
+ );
97
+ expect( getEntityRecords ).toHaveBeenCalledWith(
98
+ 'postType',
99
+ 'wp_block',
100
+ {
101
+ per_page: -1,
102
+ }
103
+ );
104
+ } );
105
+ } );
106
+
86
107
  describe( 'getSettings', () => {
87
108
  it( "returns the settings when the user can't create media", () => {
88
109
  canUser.mockReturnValueOnce( false );
@@ -94,6 +115,7 @@ describe( 'selectors', () => {
94
115
  focusMode: false,
95
116
  hasFixedToolbar: false,
96
117
  __experimentalSetIsInserterOpened: setInserterOpened,
118
+ __experimentalReusableBlocks: [],
97
119
  } );
98
120
  } );
99
121
 
@@ -108,12 +130,14 @@ describe( 'selectors', () => {
108
130
  },
109
131
  };
110
132
  const setInserterOpened = () => {};
133
+
111
134
  expect( getSettings( state, setInserterOpened ) ).toEqual( {
112
135
  outlineMode: true,
113
136
  key: 'value',
114
137
  focusMode: true,
115
138
  hasFixedToolbar: true,
116
139
  __experimentalSetIsInserterOpened: setInserterOpened,
140
+ __experimentalReusableBlocks: [],
117
141
  mediaUpload: expect.any( Function ),
118
142
  } );
119
143
  } );