@wordpress/edit-post 7.35.0 → 8.0.1

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 (204) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/commands/use-commands.js +56 -0
  3. package/build/commands/use-commands.js.map +1 -0
  4. package/build/components/{header/fullscreen-mode-close/index.js → back-button/fullscreen-mode-close.js} +16 -14
  5. package/build/components/back-button/fullscreen-mode-close.js.map +1 -0
  6. package/build/components/back-button/index.js +59 -0
  7. package/build/components/back-button/index.js.map +1 -0
  8. package/build/components/header/header-toolbar/index.native.js +63 -62
  9. package/build/components/header/header-toolbar/index.native.js.map +1 -1
  10. package/build/components/header/index.native.js +2 -2
  11. package/build/components/header/index.native.js.map +1 -1
  12. package/build/components/init-pattern-modal/index.js +50 -43
  13. package/build/components/init-pattern-modal/index.js.map +1 -1
  14. package/build/components/layout/index.js +93 -155
  15. package/build/components/layout/index.js.map +1 -1
  16. package/build/components/layout/index.native.js +28 -21
  17. package/build/components/layout/index.native.js.map +1 -1
  18. package/build/components/layout/use-padding-appender.js.map +1 -0
  19. package/build/components/layout/use-should-iframe.js +46 -0
  20. package/build/components/layout/use-should-iframe.js.map +1 -0
  21. package/build/components/meta-boxes/index.js +10 -9
  22. package/build/components/meta-boxes/index.js.map +1 -1
  23. package/build/components/meta-boxes/meta-boxes-area/index.js +11 -11
  24. package/build/components/meta-boxes/meta-boxes-area/index.js.map +1 -1
  25. package/build/components/more-menu/index.js +49 -0
  26. package/build/components/more-menu/index.js.map +1 -0
  27. package/build/components/{header/more-menu → more-menu}/manage-patterns-menu-item.js +5 -4
  28. package/build/components/more-menu/manage-patterns-menu-item.js.map +1 -0
  29. package/build/components/{header/more-menu → more-menu}/welcome-guide-menu-item.js +2 -2
  30. package/build/components/more-menu/welcome-guide-menu-item.js.map +1 -0
  31. package/build/components/preferences-modal/enable-custom-fields.js +24 -18
  32. package/build/components/preferences-modal/enable-custom-fields.js.map +1 -1
  33. package/build/components/preferences-modal/index.js +4 -4
  34. package/build/components/preferences-modal/index.js.map +1 -1
  35. package/build/components/preferences-modal/meta-boxes-section.js +13 -13
  36. package/build/components/preferences-modal/meta-boxes-section.js.map +1 -1
  37. package/build/components/visual-editor/header.native.js +11 -10
  38. package/build/components/visual-editor/header.native.js.map +1 -1
  39. package/build/components/visual-editor/index.native.js +3 -3
  40. package/build/components/visual-editor/index.native.js.map +1 -1
  41. package/build/components/welcome-guide/default.js +50 -33
  42. package/build/components/welcome-guide/default.js.map +1 -1
  43. package/build/components/welcome-guide/image.js +13 -12
  44. package/build/components/welcome-guide/image.js.map +1 -1
  45. package/build/components/welcome-guide/index.js +2 -2
  46. package/build/components/welcome-guide/index.js.map +1 -1
  47. package/build/components/welcome-guide/template.js +12 -8
  48. package/build/components/welcome-guide/template.js.map +1 -1
  49. package/build/deprecated.js +9 -9
  50. package/build/deprecated.js.map +1 -1
  51. package/build/editor.js +16 -11
  52. package/build/editor.js.map +1 -1
  53. package/build/editor.native.js +18 -12
  54. package/build/editor.native.js.map +1 -1
  55. package/build/index.js +12 -13
  56. package/build/index.js.map +1 -1
  57. package/build/index.native.js +2 -2
  58. package/build/index.native.js.map +1 -1
  59. package/build/store/selectors.js +1 -1
  60. package/build/store/selectors.js.map +1 -1
  61. package/build-module/commands/use-commands.js +49 -0
  62. package/build-module/commands/use-commands.js.map +1 -0
  63. package/build-module/components/{header/fullscreen-mode-close/index.js → back-button/fullscreen-mode-close.js} +16 -14
  64. package/build-module/components/back-button/fullscreen-mode-close.js.map +1 -0
  65. package/build-module/components/back-button/index.js +51 -0
  66. package/build-module/components/back-button/index.js.map +1 -0
  67. package/build-module/components/header/header-toolbar/index.native.js +64 -62
  68. package/build-module/components/header/header-toolbar/index.native.js.map +1 -1
  69. package/build-module/components/header/index.native.js +2 -2
  70. package/build-module/components/header/index.native.js.map +1 -1
  71. package/build-module/components/init-pattern-modal/index.js +52 -43
  72. package/build-module/components/init-pattern-modal/index.js.map +1 -1
  73. package/build-module/components/layout/index.js +98 -158
  74. package/build-module/components/layout/index.js.map +1 -1
  75. package/build-module/components/layout/index.native.js +30 -21
  76. package/build-module/components/layout/index.native.js.map +1 -1
  77. package/build-module/components/layout/use-padding-appender.js.map +1 -0
  78. package/build-module/components/layout/use-should-iframe.js +39 -0
  79. package/build-module/components/layout/use-should-iframe.js.map +1 -0
  80. package/build-module/components/meta-boxes/index.js +12 -9
  81. package/build-module/components/meta-boxes/index.js.map +1 -1
  82. package/build-module/components/meta-boxes/meta-boxes-area/index.js +11 -9
  83. package/build-module/components/meta-boxes/meta-boxes-area/index.js.map +1 -1
  84. package/build-module/components/more-menu/index.js +43 -0
  85. package/build-module/components/more-menu/index.js.map +1 -0
  86. package/build-module/components/{header/more-menu → more-menu}/manage-patterns-menu-item.js +5 -4
  87. package/build-module/components/more-menu/manage-patterns-menu-item.js.map +1 -0
  88. package/build-module/components/{header/more-menu → more-menu}/welcome-guide-menu-item.js +2 -2
  89. package/build-module/components/more-menu/welcome-guide-menu-item.js.map +1 -0
  90. package/build-module/components/preferences-modal/enable-custom-fields.js +26 -18
  91. package/build-module/components/preferences-modal/enable-custom-fields.js.map +1 -1
  92. package/build-module/components/preferences-modal/index.js +4 -4
  93. package/build-module/components/preferences-modal/index.js.map +1 -1
  94. package/build-module/components/preferences-modal/meta-boxes-section.js +14 -13
  95. package/build-module/components/preferences-modal/meta-boxes-section.js.map +1 -1
  96. package/build-module/components/visual-editor/header.native.js +11 -10
  97. package/build-module/components/visual-editor/header.native.js.map +1 -1
  98. package/build-module/components/visual-editor/index.native.js +3 -3
  99. package/build-module/components/visual-editor/index.native.js.map +1 -1
  100. package/build-module/components/welcome-guide/default.js +52 -33
  101. package/build-module/components/welcome-guide/default.js.map +1 -1
  102. package/build-module/components/welcome-guide/image.js +14 -12
  103. package/build-module/components/welcome-guide/image.js.map +1 -1
  104. package/build-module/components/welcome-guide/index.js +2 -2
  105. package/build-module/components/welcome-guide/index.js.map +1 -1
  106. package/build-module/components/welcome-guide/template.js +14 -8
  107. package/build-module/components/welcome-guide/template.js.map +1 -1
  108. package/build-module/deprecated.js +9 -9
  109. package/build-module/deprecated.js.map +1 -1
  110. package/build-module/editor.js +17 -11
  111. package/build-module/editor.js.map +1 -1
  112. package/build-module/editor.native.js +18 -12
  113. package/build-module/editor.native.js.map +1 -1
  114. package/build-module/index.js +10 -7
  115. package/build-module/index.js.map +1 -1
  116. package/build-module/index.native.js +2 -2
  117. package/build-module/index.native.js.map +1 -1
  118. package/build-module/store/selectors.js +1 -1
  119. package/build-module/store/selectors.js.map +1 -1
  120. package/build-style/style-rtl.css +27 -128
  121. package/build-style/style.css +27 -128
  122. package/package.json +32 -32
  123. package/src/commands/use-commands.js +48 -0
  124. package/src/components/{header/fullscreen-mode-close/index.js → back-button/fullscreen-mode-close.js} +1 -1
  125. package/src/components/back-button/index.js +41 -0
  126. package/src/components/{header/fullscreen-mode-close → back-button}/style.scss +16 -2
  127. package/src/components/{header/fullscreen-mode-close/test/index.js → back-button/test/fullscreen-mode-close.js} +1 -1
  128. package/src/components/init-pattern-modal/index.js +1 -4
  129. package/src/components/layout/index.js +88 -202
  130. package/src/components/layout/style.scss +9 -17
  131. package/src/components/layout/use-should-iframe.js +40 -0
  132. package/src/components/{header/more-menu → more-menu}/index.js +2 -2
  133. package/src/components/preferences-modal/enable-custom-fields.js +1 -0
  134. package/src/index.js +11 -6
  135. package/src/store/selectors.js +8 -5
  136. package/src/style.scss +2 -5
  137. package/src/test/__snapshots__/editor.native.js.snap +72 -0
  138. package/src/test/editor.native.js +77 -0
  139. package/build/components/header/fullscreen-mode-close/index.js.map +0 -1
  140. package/build/components/header/index.js +0 -69
  141. package/build/components/header/index.js.map +0 -1
  142. package/build/components/header/main-dashboard-button/index.js +0 -33
  143. package/build/components/header/main-dashboard-button/index.js.map +0 -1
  144. package/build/components/header/more-menu/index.js +0 -43
  145. package/build/components/header/more-menu/index.js.map +0 -1
  146. package/build/components/header/more-menu/manage-patterns-menu-item.js.map +0 -1
  147. package/build/components/header/more-menu/welcome-guide-menu-item.js.map +0 -1
  148. package/build/components/text-editor/index.js +0 -61
  149. package/build/components/text-editor/index.js.map +0 -1
  150. package/build/components/visual-editor/block-inspector-button.js +0 -55
  151. package/build/components/visual-editor/block-inspector-button.js.map +0 -1
  152. package/build/components/visual-editor/index.js +0 -98
  153. package/build/components/visual-editor/index.js.map +0 -1
  154. package/build/components/visual-editor/use-padding-appender.js.map +0 -1
  155. package/build/hooks/commands/use-common-commands.js +0 -119
  156. package/build/hooks/commands/use-common-commands.js.map +0 -1
  157. package/build/hooks/components/index.js +0 -11
  158. package/build/hooks/components/index.js.map +0 -1
  159. package/build/hooks/index.js +0 -5
  160. package/build/hooks/index.js.map +0 -1
  161. package/build/hooks/validate-multiple-use/index.js +0 -134
  162. package/build/hooks/validate-multiple-use/index.js.map +0 -1
  163. package/build-module/components/header/fullscreen-mode-close/index.js.map +0 -1
  164. package/build-module/components/header/index.js +0 -61
  165. package/build-module/components/header/index.js.map +0 -1
  166. package/build-module/components/header/main-dashboard-button/index.js +0 -26
  167. package/build-module/components/header/main-dashboard-button/index.js.map +0 -1
  168. package/build-module/components/header/more-menu/index.js +0 -35
  169. package/build-module/components/header/more-menu/index.js.map +0 -1
  170. package/build-module/components/header/more-menu/manage-patterns-menu-item.js.map +0 -1
  171. package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +0 -1
  172. package/build-module/components/text-editor/index.js +0 -54
  173. package/build-module/components/text-editor/index.js.map +0 -1
  174. package/build-module/components/visual-editor/block-inspector-button.js +0 -47
  175. package/build-module/components/visual-editor/block-inspector-button.js.map +0 -1
  176. package/build-module/components/visual-editor/index.js +0 -90
  177. package/build-module/components/visual-editor/index.js.map +0 -1
  178. package/build-module/components/visual-editor/use-padding-appender.js.map +0 -1
  179. package/build-module/hooks/commands/use-common-commands.js +0 -112
  180. package/build-module/hooks/commands/use-common-commands.js.map +0 -1
  181. package/build-module/hooks/components/index.js +0 -8
  182. package/build-module/hooks/components/index.js.map +0 -1
  183. package/build-module/hooks/index.js +0 -6
  184. package/build-module/hooks/index.js.map +0 -1
  185. package/build-module/hooks/validate-multiple-use/index.js +0 -132
  186. package/build-module/hooks/validate-multiple-use/index.js.map +0 -1
  187. package/src/components/header/index.js +0 -53
  188. package/src/components/header/main-dashboard-button/index.js +0 -28
  189. package/src/components/header/style.scss +0 -14
  190. package/src/components/text-editor/index.js +0 -63
  191. package/src/components/text-editor/style.scss +0 -71
  192. package/src/components/visual-editor/block-inspector-button.js +0 -59
  193. package/src/components/visual-editor/index.js +0 -108
  194. package/src/components/visual-editor/style.scss +0 -53
  195. package/src/hooks/commands/use-common-commands.js +0 -126
  196. package/src/hooks/components/index.js +0 -13
  197. package/src/hooks/index.js +0 -5
  198. package/src/hooks/validate-multiple-use/index.js +0 -163
  199. /package/build/components/{visual-editor → layout}/use-padding-appender.js +0 -0
  200. /package/build-module/components/{visual-editor → layout}/use-padding-appender.js +0 -0
  201. /package/src/components/{header/fullscreen-mode-close/test/__snapshots__/index.js.snap → back-button/test/__snapshots__/fullscreen-mode-close.js.snap} +0 -0
  202. /package/src/components/{visual-editor → layout}/use-padding-appender.js +0 -0
  203. /package/src/components/{header/more-menu → more-menu}/manage-patterns-menu-item.js +0 -0
  204. /package/src/components/{header/more-menu → more-menu}/welcome-guide-menu-item.js +0 -0
@@ -1,59 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { MenuItem } from '@wordpress/components';
6
- import { useSelect, useDispatch } from '@wordpress/data';
7
- import { speak } from '@wordpress/a11y';
8
- import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
9
-
10
- /**
11
- * Internal dependencies
12
- */
13
- import { store as editPostStore } from '../../store';
14
-
15
- const noop = () => {};
16
-
17
- export function BlockInspectorButton( { onClick = noop, small = false } ) {
18
- const { shortcut, areAdvancedSettingsOpened } = useSelect(
19
- ( select ) => ( {
20
- shortcut: select(
21
- keyboardShortcutsStore
22
- ).getShortcutRepresentation( 'core/editor/toggle-sidebar' ),
23
- areAdvancedSettingsOpened:
24
- select( editPostStore ).getActiveGeneralSidebarName() ===
25
- 'edit-post/block',
26
- } ),
27
- []
28
- );
29
- const { openGeneralSidebar, closeGeneralSidebar } =
30
- useDispatch( editPostStore );
31
-
32
- const label = areAdvancedSettingsOpened
33
- ? __( 'Hide more settings' )
34
- : __( 'Show more settings' );
35
-
36
- return (
37
- <MenuItem
38
- onClick={ () => {
39
- if ( areAdvancedSettingsOpened ) {
40
- closeGeneralSidebar();
41
- speak( __( 'Block settings closed' ) );
42
- } else {
43
- openGeneralSidebar( 'edit-post/block' );
44
- speak(
45
- __(
46
- 'Additional settings are now available in the Editor block settings sidebar'
47
- )
48
- );
49
- }
50
- onClick();
51
- } }
52
- shortcut={ shortcut }
53
- >
54
- { ! small && label }
55
- </MenuItem>
56
- );
57
- }
58
-
59
- export default BlockInspectorButton;
@@ -1,108 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import {
10
- store as editorStore,
11
- privateApis as editorPrivateApis,
12
- } from '@wordpress/editor';
13
- import { useMemo } from '@wordpress/element';
14
- import { useSelect } from '@wordpress/data';
15
- import { store as blocksStore } from '@wordpress/blocks';
16
- import { store as blockEditorStore } from '@wordpress/block-editor';
17
-
18
- /**
19
- * Internal dependencies
20
- */
21
- import { store as editPostStore } from '../../store';
22
- import { unlock } from '../../lock-unlock';
23
- import { usePaddingAppender } from './use-padding-appender';
24
-
25
- const { EditorCanvas } = unlock( editorPrivateApis );
26
-
27
- const isGutenbergPlugin = process.env.IS_GUTENBERG_PLUGIN ? true : false;
28
-
29
- export default function VisualEditor( { styles } ) {
30
- const {
31
- isWelcomeGuideVisible,
32
- renderingMode,
33
- isBlockBasedTheme,
34
- hasV3BlocksOnly,
35
- isEditingTemplate,
36
- isZoomedOutView,
37
- } = useSelect( ( select ) => {
38
- const { isFeatureActive } = select( editPostStore );
39
- const { getEditorSettings, getRenderingMode } = select( editorStore );
40
- const { getBlockTypes } = select( blocksStore );
41
- const { __unstableGetEditorMode } = select( blockEditorStore );
42
- const editorSettings = getEditorSettings();
43
- return {
44
- isWelcomeGuideVisible: isFeatureActive( 'welcomeGuide' ),
45
- renderingMode: getRenderingMode(),
46
- isBlockBasedTheme: editorSettings.__unstableIsBlockBasedTheme,
47
- hasV3BlocksOnly: getBlockTypes().every( ( type ) => {
48
- return type.apiVersion >= 3;
49
- } ),
50
- isEditingTemplate:
51
- select( editorStore ).getCurrentPostType() === 'wp_template',
52
- isZoomedOutView: __unstableGetEditorMode() === 'zoom-out',
53
- };
54
- }, [] );
55
- const hasMetaBoxes = useSelect(
56
- ( select ) => select( editPostStore ).hasMetaBoxes(),
57
- []
58
- );
59
-
60
- const paddingAppenderRef = usePaddingAppender();
61
-
62
- let paddingBottom;
63
-
64
- // Add a constant padding for the typewritter effect. When typing at the
65
- // bottom, there needs to be room to scroll up.
66
- if (
67
- ! isZoomedOutView &&
68
- ! hasMetaBoxes &&
69
- renderingMode === 'post-only'
70
- ) {
71
- paddingBottom = '40vh';
72
- }
73
-
74
- styles = useMemo(
75
- () => [
76
- ...styles,
77
- {
78
- // We should move this in to future to the body.
79
- css: paddingBottom
80
- ? `body{padding-bottom:${ paddingBottom }}`
81
- : '',
82
- },
83
- ],
84
- [ styles, paddingBottom ]
85
- );
86
-
87
- const isToBeIframed =
88
- ( ( hasV3BlocksOnly || ( isGutenbergPlugin && isBlockBasedTheme ) ) &&
89
- ! hasMetaBoxes ) ||
90
- isEditingTemplate;
91
-
92
- return (
93
- <div
94
- className={ clsx( 'edit-post-visual-editor', {
95
- 'has-inline-canvas': ! isToBeIframed,
96
- } ) }
97
- >
98
- <EditorCanvas
99
- disableIframe={ ! isToBeIframed }
100
- styles={ styles }
101
- // We should auto-focus the canvas (title) on load.
102
- // eslint-disable-next-line jsx-a11y/no-autofocus
103
- autoFocus={ ! isWelcomeGuideVisible }
104
- contentRef={ paddingAppenderRef }
105
- />
106
- </div>
107
- );
108
- }
@@ -1,53 +0,0 @@
1
- .edit-post-visual-editor {
2
- position: relative;
3
- display: flex;
4
- flex-flow: column;
5
- // In the iframed canvas this keeps extra scrollbars from appearing (when block toolbars overflow). In the
6
- // legacy (non-iframed) canvas, overflow must not be hidden in order to maintain support for sticky positioning.
7
- &:not(.has-inline-canvas) {
8
- overflow: hidden;
9
- }
10
-
11
- // Gray preview overlay (desktop/tablet/mobile) is intentionally not set on an element with scrolling content like
12
- // interface-interface-skeleton__content. This causes graphical glitches (flashes of the background color)
13
- // when scrolling in Safari due to incorrect ordering of large compositing layers (GPU acceleration).
14
- background-color: $gray-300;
15
-
16
- // The button element easily inherits styles that are meant for the editor style.
17
- // These rules enhance the specificity to reduce that inheritance.
18
- // This is duplicated in edit-site.
19
- & .components-button {
20
- font-family: $default-font;
21
- font-size: $default-font-size;
22
- padding: 6px 12px;
23
-
24
- &.has-icon {
25
- padding: 6px;
26
- }
27
- }
28
-
29
- // The following flex rule is important for the canvas layout, please be careful when refactoring,
30
- // as older browser interpret flex height behavior differently. Be sure to test on Safari 13.
31
- // The syntax is `flex: [flex-grow] [flex-shrink] [flex-basis];`
32
- // We set the canvas to be allowed to grow (vertically), but not shrink.
33
- flex: 1 0 auto;
34
-
35
- // Since the parent container is also a flex container, a `flex-basis: 100%;` is not needed,
36
- // as align-items: stretch is inherited by default.Additionally due to older browser's flex height
37
- // interpretation, any percentage value is likely going to cause issues, such as metaboxes overlapping.
38
- // See also https://www.w3.org/TR/CSS22/visudet.html#the-height-property.
39
- }
40
-
41
- .edit-post-visual-editor__content-area {
42
- width: 100%;
43
- height: 100%;
44
- position: relative;
45
- box-sizing: border-box;
46
- display: flex;
47
-
48
- // This is necessary for older browsers due to their flex height interpretation.
49
- // These browsers (including Safari 13) ignore the percentage value entirely.
50
- // By setting flex-grow, the element stretches to fill the parent.
51
- // See also https://www.w3.org/TR/CSS22/visudet.html#the-height-property
52
- flex-grow: 1;
53
- }
@@ -1,126 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useSelect, useDispatch } from '@wordpress/data';
5
- import { __, isRTL } from '@wordpress/i18n';
6
- import {
7
- drawerLeft,
8
- drawerRight,
9
- blockDefault,
10
- fullscreen,
11
- formatListBullets,
12
- } from '@wordpress/icons';
13
- import { useCommand } from '@wordpress/commands';
14
- import { store as preferencesStore } from '@wordpress/preferences';
15
- import {
16
- store as editorStore,
17
- privateApis as editorPrivateApis,
18
- } from '@wordpress/editor';
19
- import { store as noticesStore } from '@wordpress/notices';
20
-
21
- /**
22
- * Internal dependencies
23
- */
24
- import { store as editPostStore } from '../../store';
25
- import { unlock } from '../../lock-unlock';
26
-
27
- const { interfaceStore } = unlock( editorPrivateApis );
28
-
29
- export default function useCommonCommands() {
30
- const { openGeneralSidebar, closeGeneralSidebar } =
31
- useDispatch( editPostStore );
32
- const { activeSidebar, isFullscreen, isPublishSidebarEnabled } = useSelect(
33
- ( select ) => {
34
- const { get } = select( preferencesStore );
35
-
36
- return {
37
- activeSidebar:
38
- select( interfaceStore ).getActiveComplementaryArea(
39
- 'core'
40
- ),
41
- isPublishSidebarEnabled:
42
- select( editorStore ).isPublishSidebarEnabled(),
43
- isFullscreen: get( 'core/edit-post', 'fullscreenMode' ),
44
- };
45
- },
46
- []
47
- );
48
- const { toggle } = useDispatch( preferencesStore );
49
- const { createInfoNotice } = useDispatch( noticesStore );
50
-
51
- useCommand( {
52
- name: 'core/open-settings-sidebar',
53
- label: __( 'Toggle settings sidebar' ),
54
- icon: isRTL() ? drawerLeft : drawerRight,
55
- callback: ( { close } ) => {
56
- close();
57
- if ( activeSidebar === 'edit-post/document' ) {
58
- closeGeneralSidebar();
59
- } else {
60
- openGeneralSidebar( 'edit-post/document' );
61
- }
62
- },
63
- } );
64
-
65
- useCommand( {
66
- name: 'core/open-block-inspector',
67
- label: __( 'Toggle block inspector' ),
68
- icon: blockDefault,
69
- callback: ( { close } ) => {
70
- close();
71
- if ( activeSidebar === 'edit-post/block' ) {
72
- closeGeneralSidebar();
73
- } else {
74
- openGeneralSidebar( 'edit-post/block' );
75
- }
76
- },
77
- } );
78
-
79
- useCommand( {
80
- name: 'core/toggle-fullscreen-mode',
81
- label: isFullscreen
82
- ? __( 'Exit fullscreen' )
83
- : __( 'Enter fullscreen' ),
84
- icon: fullscreen,
85
- callback: ( { close } ) => {
86
- toggle( 'core/edit-post', 'fullscreenMode' );
87
- close();
88
- createInfoNotice(
89
- isFullscreen ? __( 'Fullscreen off.' ) : __( 'Fullscreen on.' ),
90
- {
91
- id: 'core/edit-post/toggle-fullscreen-mode/notice',
92
- type: 'snackbar',
93
- actions: [
94
- {
95
- label: __( 'Undo' ),
96
- onClick: () => {
97
- toggle( 'core/edit-post', 'fullscreenMode' );
98
- },
99
- },
100
- ],
101
- }
102
- );
103
- },
104
- } );
105
-
106
- useCommand( {
107
- name: 'core/toggle-publish-sidebar',
108
- label: isPublishSidebarEnabled
109
- ? __( 'Disable pre-publish checks' )
110
- : __( 'Enable pre-publish checks' ),
111
- icon: formatListBullets,
112
- callback: ( { close } ) => {
113
- close();
114
- toggle( 'core', 'isPublishSidebarEnabled' );
115
- createInfoNotice(
116
- isPublishSidebarEnabled
117
- ? __( 'Pre-publish checks disabled.' )
118
- : __( 'Pre-publish checks enabled.' ),
119
- {
120
- id: 'core/editor/publish-sidebar/notice',
121
- type: 'snackbar',
122
- }
123
- );
124
- },
125
- } );
126
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { addFilter } from '@wordpress/hooks';
5
- import { MediaUpload } from '@wordpress/media-utils';
6
-
7
- const replaceMediaUpload = () => MediaUpload;
8
-
9
- addFilter(
10
- 'editor.MediaUpload',
11
- 'core/edit-post/replace-media-upload',
12
- replaceMediaUpload
13
- );
@@ -1,5 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import './components';
5
- import './validate-multiple-use';
@@ -1,163 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import {
5
- createBlock,
6
- findTransform,
7
- getBlockTransforms,
8
- getBlockType,
9
- hasBlockSupport,
10
- } from '@wordpress/blocks';
11
- import { Button } from '@wordpress/components';
12
- import { withSelect, withDispatch } from '@wordpress/data';
13
- import { Warning, store as blockEditorStore } from '@wordpress/block-editor';
14
- import { addFilter } from '@wordpress/hooks';
15
- import { __ } from '@wordpress/i18n';
16
- import { compose, createHigherOrderComponent } from '@wordpress/compose';
17
-
18
- /**
19
- * Recursively find very first block of an specific block type.
20
- *
21
- * @param {Object[]} blocks List of blocks.
22
- * @param {string} name Block name to search.
23
- *
24
- * @return {Object|undefined} Return block object or undefined.
25
- */
26
- function findFirstOfSameType( blocks, name ) {
27
- if ( ! Array.isArray( blocks ) || ! blocks.length ) {
28
- return;
29
- }
30
-
31
- for ( const block of blocks ) {
32
- if ( block.name === name ) {
33
- return block;
34
- }
35
-
36
- // Search inside innerBlocks.
37
- const firstBlock = findFirstOfSameType( block.innerBlocks, name );
38
-
39
- if ( firstBlock ) {
40
- return firstBlock;
41
- }
42
- }
43
- }
44
-
45
- const enhance = compose(
46
- /**
47
- * For blocks whose block type doesn't support `multiple`, provides the
48
- * wrapped component with `originalBlockClientId` -- a reference to the
49
- * first block of the same type in the content -- if and only if that
50
- * "original" block is not the current one. Thus, an inexisting
51
- * `originalBlockClientId` prop signals that the block is valid.
52
- *
53
- * @param {Component} WrappedBlockEdit A filtered BlockEdit instance.
54
- *
55
- * @return {Component} Enhanced component with merged state data props.
56
- */
57
- withSelect( ( select, block ) => {
58
- const multiple = hasBlockSupport( block.name, 'multiple', true );
59
-
60
- // For block types with `multiple` support, there is no "original
61
- // block" to be found in the content, as the block itself is valid.
62
- if ( multiple ) {
63
- return {};
64
- }
65
-
66
- // Otherwise, only pass `originalBlockClientId` if it refers to a different
67
- // block from the current one.
68
- const blocks = select( blockEditorStore ).getBlocks();
69
- const firstOfSameType = findFirstOfSameType( blocks, block.name );
70
- const isInvalid =
71
- firstOfSameType && firstOfSameType.clientId !== block.clientId;
72
- return {
73
- originalBlockClientId: isInvalid && firstOfSameType.clientId,
74
- };
75
- } ),
76
- withDispatch( ( dispatch, { originalBlockClientId } ) => ( {
77
- selectFirst: () =>
78
- dispatch( blockEditorStore ).selectBlock( originalBlockClientId ),
79
- } ) )
80
- );
81
-
82
- const withMultipleValidation = createHigherOrderComponent( ( BlockEdit ) => {
83
- return enhance( ( { originalBlockClientId, selectFirst, ...props } ) => {
84
- if ( ! originalBlockClientId ) {
85
- return <BlockEdit { ...props } />;
86
- }
87
-
88
- const blockType = getBlockType( props.name );
89
- const outboundType = getOutboundType( props.name );
90
-
91
- return [
92
- <div key="invalid-preview" style={ { minHeight: '60px' } }>
93
- <BlockEdit key="block-edit" { ...props } />
94
- </div>,
95
- <Warning
96
- key="multiple-use-warning"
97
- actions={ [
98
- <Button
99
- key="find-original"
100
- variant="secondary"
101
- onClick={ selectFirst }
102
- >
103
- { __( 'Find original' ) }
104
- </Button>,
105
- <Button
106
- key="remove"
107
- variant="secondary"
108
- onClick={ () => props.onReplace( [] ) }
109
- >
110
- { __( 'Remove' ) }
111
- </Button>,
112
- outboundType && (
113
- <Button
114
- key="transform"
115
- variant="secondary"
116
- onClick={ () =>
117
- props.onReplace(
118
- createBlock(
119
- outboundType.name,
120
- props.attributes
121
- )
122
- )
123
- }
124
- >
125
- { __( 'Transform into:' ) } { outboundType.title }
126
- </Button>
127
- ),
128
- ] }
129
- >
130
- <strong>{ blockType?.title }: </strong>
131
- { __( 'This block can only be used once.' ) }
132
- </Warning>,
133
- ];
134
- } );
135
- }, 'withMultipleValidation' );
136
-
137
- /**
138
- * Given a base block name, returns the default block type to which to offer
139
- * transforms.
140
- *
141
- * @param {string} blockName Base block name.
142
- *
143
- * @return {?Object} The chosen default block type.
144
- */
145
- function getOutboundType( blockName ) {
146
- // Grab the first outbound transform.
147
- const transform = findTransform(
148
- getBlockTransforms( 'to', blockName ),
149
- ( { type, blocks } ) => type === 'block' && blocks.length === 1 // What about when .length > 1?
150
- );
151
-
152
- if ( ! transform ) {
153
- return null;
154
- }
155
-
156
- return getBlockType( transform.blocks[ 0 ] );
157
- }
158
-
159
- addFilter(
160
- 'editor.BlockEdit',
161
- 'core/edit-post/validate-multiple-use/with-multiple-validation',
162
- withMultipleValidation
163
- );