@wordpress/editor 13.12.0 → 13.12.2

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 (133) hide show
  1. package/build/components/deprecated.js +4 -5
  2. package/build/components/deprecated.js.map +1 -1
  3. package/build/components/editor-help/help-detail-navigation-screen.native.js +2 -4
  4. package/build/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
  5. package/build/components/editor-help/index.native.js +2 -4
  6. package/build/components/editor-help/index.native.js.map +1 -1
  7. package/build/components/editor-history/redo.js +2 -6
  8. package/build/components/editor-history/redo.js.map +1 -1
  9. package/build/components/editor-history/undo.js +2 -6
  10. package/build/components/editor-history/undo.js.map +1 -1
  11. package/build/components/entities-saved-states/hooks/use-is-dirty.js +3 -1
  12. package/build/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -1
  13. package/build/components/entities-saved-states/index.js +8 -9
  14. package/build/components/entities-saved-states/index.js.map +1 -1
  15. package/build/components/index.js +9 -0
  16. package/build/components/index.js.map +1 -1
  17. package/build/components/page-attributes/order.js +2 -1
  18. package/build/components/page-attributes/order.js.map +1 -1
  19. package/build/components/post-excerpt/check.js +2 -4
  20. package/build/components/post-excerpt/check.js.map +1 -1
  21. package/build/components/post-featured-image/check.js +2 -4
  22. package/build/components/post-featured-image/check.js.map +1 -1
  23. package/build/components/post-format/check.js +2 -4
  24. package/build/components/post-format/check.js.map +1 -1
  25. package/build/components/post-publish-button/index.js +4 -6
  26. package/build/components/post-publish-button/index.js.map +1 -1
  27. package/build/components/post-publish-panel/index.js +4 -5
  28. package/build/components/post-publish-panel/index.js.map +1 -1
  29. package/build/components/post-publish-panel/maybe-upload-media.js +150 -0
  30. package/build/components/post-publish-panel/maybe-upload-media.js.map +1 -0
  31. package/build/components/post-publish-panel/prepublish.js +3 -1
  32. package/build/components/post-publish-panel/prepublish.js.map +1 -1
  33. package/build/components/post-sync-status/index.js +67 -0
  34. package/build/components/post-sync-status/index.js.map +1 -0
  35. package/build/components/post-taxonomies/flat-term-selector.js +25 -34
  36. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  37. package/build/components/post-title/index.js +8 -1
  38. package/build/components/post-title/index.js.map +1 -1
  39. package/build/components/post-visibility/index.js +4 -7
  40. package/build/components/post-visibility/index.js.map +1 -1
  41. package/build/components/provider/index.js +3 -5
  42. package/build/components/provider/index.js.map +1 -1
  43. package/build/components/provider/index.native.js +5 -10
  44. package/build/components/provider/index.native.js.map +1 -1
  45. package/build/components/provider/use-block-editor-settings.js +1 -1
  46. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  47. package/build/components/provider/with-registry-provider.js +4 -2
  48. package/build/components/provider/with-registry-provider.js.map +1 -1
  49. package/build/components/table-of-contents/index.js +2 -4
  50. package/build/components/table-of-contents/index.js.map +1 -1
  51. package/build/hooks/custom-sources-backwards-compatibility.js +4 -7
  52. package/build/hooks/custom-sources-backwards-compatibility.js.map +1 -1
  53. package/build/{lockUnlock.js → lock-unlock.js} +1 -1
  54. package/build/lock-unlock.js.map +1 -0
  55. package/build/private-apis.js +1 -1
  56. package/build/private-apis.js.map +1 -1
  57. package/build-module/components/deprecated.js +4 -4
  58. package/build-module/components/deprecated.js.map +1 -1
  59. package/build-module/components/editor-help/help-detail-navigation-screen.native.js +2 -3
  60. package/build-module/components/editor-help/help-detail-navigation-screen.native.js.map +1 -1
  61. package/build-module/components/editor-help/index.native.js +2 -3
  62. package/build-module/components/editor-help/index.native.js.map +1 -1
  63. package/build-module/components/editor-history/redo.js +2 -3
  64. package/build-module/components/editor-history/redo.js.map +1 -1
  65. package/build-module/components/editor-history/undo.js +2 -3
  66. package/build-module/components/editor-history/undo.js.map +1 -1
  67. package/build-module/components/entities-saved-states/hooks/use-is-dirty.js +3 -1
  68. package/build-module/components/entities-saved-states/hooks/use-is-dirty.js.map +1 -1
  69. package/build-module/components/entities-saved-states/index.js +8 -8
  70. package/build-module/components/entities-saved-states/index.js.map +1 -1
  71. package/build-module/components/index.js +1 -0
  72. package/build-module/components/index.js.map +1 -1
  73. package/build-module/components/page-attributes/order.js +2 -1
  74. package/build-module/components/page-attributes/order.js.map +1 -1
  75. package/build-module/components/post-excerpt/check.js +2 -3
  76. package/build-module/components/post-excerpt/check.js.map +1 -1
  77. package/build-module/components/post-featured-image/check.js +2 -3
  78. package/build-module/components/post-featured-image/check.js.map +1 -1
  79. package/build-module/components/post-format/check.js +2 -3
  80. package/build-module/components/post-format/check.js.map +1 -1
  81. package/build-module/components/post-publish-button/index.js +4 -5
  82. package/build-module/components/post-publish-button/index.js.map +1 -1
  83. package/build-module/components/post-publish-panel/index.js +4 -4
  84. package/build-module/components/post-publish-panel/index.js.map +1 -1
  85. package/build-module/components/post-publish-panel/maybe-upload-media.js +138 -0
  86. package/build-module/components/post-publish-panel/maybe-upload-media.js.map +1 -0
  87. package/build-module/components/post-publish-panel/prepublish.js +2 -1
  88. package/build-module/components/post-publish-panel/prepublish.js.map +1 -1
  89. package/build-module/components/post-sync-status/index.js +56 -0
  90. package/build-module/components/post-sync-status/index.js.map +1 -0
  91. package/build-module/components/post-taxonomies/flat-term-selector.js +25 -32
  92. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  93. package/build-module/components/post-title/index.js +8 -1
  94. package/build-module/components/post-title/index.js.map +1 -1
  95. package/build-module/components/post-visibility/index.js +4 -4
  96. package/build-module/components/post-visibility/index.js.map +1 -1
  97. package/build-module/components/provider/index.js +3 -4
  98. package/build-module/components/provider/index.js.map +1 -1
  99. package/build-module/components/provider/index.native.js +5 -9
  100. package/build-module/components/provider/index.native.js.map +1 -1
  101. package/build-module/components/provider/use-block-editor-settings.js +1 -1
  102. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  103. package/build-module/components/provider/with-registry-provider.js +4 -2
  104. package/build-module/components/provider/with-registry-provider.js.map +1 -1
  105. package/build-module/components/table-of-contents/index.js +2 -3
  106. package/build-module/components/table-of-contents/index.js.map +1 -1
  107. package/build-module/hooks/custom-sources-backwards-compatibility.js +4 -4
  108. package/build-module/hooks/custom-sources-backwards-compatibility.js.map +1 -1
  109. package/build-module/{lockUnlock.js → lock-unlock.js} +1 -1
  110. package/build-module/lock-unlock.js.map +1 -0
  111. package/build-module/private-apis.js +1 -1
  112. package/build-module/private-apis.js.map +1 -1
  113. package/build-style/style-rtl.css +15 -1
  114. package/build-style/style.css +15 -1
  115. package/package.json +30 -31
  116. package/src/components/editor-help/test/index.native.js +3 -2
  117. package/src/components/entities-saved-states/hooks/use-is-dirty.js +2 -0
  118. package/src/components/index.js +1 -0
  119. package/src/components/post-publish-panel/maybe-upload-media.js +167 -0
  120. package/src/components/post-publish-panel/prepublish.js +2 -0
  121. package/src/components/post-publish-panel/style.scss +1 -1
  122. package/src/components/post-sync-status/index.js +55 -0
  123. package/src/components/post-sync-status/style.scss +16 -0
  124. package/src/components/post-taxonomies/flat-term-selector.js +20 -30
  125. package/src/components/post-title/index.js +3 -1
  126. package/src/components/provider/index.js +1 -1
  127. package/src/components/provider/index.native.js +2 -9
  128. package/src/components/provider/use-block-editor-settings.js +1 -0
  129. package/src/private-apis.js +1 -1
  130. package/src/style.scss +1 -0
  131. package/build/lockUnlock.js.map +0 -1
  132. package/build-module/lockUnlock.js.map +0 -1
  133. /package/src/{lockUnlock.js → lock-unlock.js} +0 -0
@@ -0,0 +1,138 @@
1
+ import { createElement } from "@wordpress/element";
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { PanelBody, Button, Spinner, __unstableMotion as motion, __unstableAnimatePresence as AnimatePresence } from '@wordpress/components';
7
+ import { useSelect, useDispatch } from '@wordpress/data';
8
+ import { __ } from '@wordpress/i18n';
9
+ import { upload } from '@wordpress/icons';
10
+ import { store as blockEditorStore } from '@wordpress/block-editor';
11
+ import { useState } from '@wordpress/element';
12
+ import { isBlobURL } from '@wordpress/blob';
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+
17
+ import { store as editorStore } from '../../store';
18
+
19
+ function flattenBlocks(blocks) {
20
+ const result = [];
21
+ blocks.forEach(block => {
22
+ result.push(block);
23
+ result.push(...flattenBlocks(block.innerBlocks));
24
+ });
25
+ return result;
26
+ }
27
+
28
+ function Image(block) {
29
+ const {
30
+ selectBlock
31
+ } = useDispatch(blockEditorStore);
32
+ return createElement(motion.img, {
33
+ tabIndex: 0,
34
+ role: "button",
35
+ "aria-label": __('Select image block.'),
36
+ onClick: () => {
37
+ selectBlock(block.clientId);
38
+ },
39
+ onKeyDown: event => {
40
+ if (event.key === 'Enter' || event.key === ' ') {
41
+ selectBlock(block.clientId);
42
+ event.preventDefault();
43
+ }
44
+ },
45
+ key: block.clientId,
46
+ alt: block.attributes.alt,
47
+ src: block.attributes.url,
48
+ animate: {
49
+ opacity: 1
50
+ },
51
+ exit: {
52
+ opacity: 0,
53
+ scale: 0
54
+ },
55
+ style: {
56
+ width: '36px',
57
+ height: '36px',
58
+ objectFit: 'cover',
59
+ borderRadius: '2px',
60
+ cursor: 'pointer'
61
+ },
62
+ whileHover: {
63
+ scale: 1.08
64
+ }
65
+ });
66
+ }
67
+
68
+ export default function PostFormatPanel() {
69
+ const [isUploading, setIsUploading] = useState(false);
70
+ const {
71
+ editorBlocks,
72
+ mediaUpload
73
+ } = useSelect(select => ({
74
+ editorBlocks: select(editorStore).getEditorBlocks(),
75
+ mediaUpload: select(blockEditorStore).getSettings().mediaUpload
76
+ }), []);
77
+ const externalImages = flattenBlocks(editorBlocks).filter(block => block.name === 'core/image' && block.attributes.url && !block.attributes.id);
78
+ const {
79
+ updateBlockAttributes
80
+ } = useDispatch(blockEditorStore);
81
+
82
+ if (!mediaUpload || !externalImages.length) {
83
+ return null;
84
+ }
85
+
86
+ const panelBodyTitle = [__('Suggestion:'), createElement("span", {
87
+ className: "editor-post-publish-panel__link",
88
+ key: "label"
89
+ }, __('External media'))];
90
+
91
+ function uploadImages() {
92
+ setIsUploading(true);
93
+ Promise.all(externalImages.map(image => window.fetch(image.attributes.url.includes('?') ? image.attributes.url : image.attributes.url + '?').then(response => response.blob()).then(blob => new Promise((resolve, reject) => {
94
+ mediaUpload({
95
+ filesList: [blob],
96
+ onFileChange: ([media]) => {
97
+ if (isBlobURL(media.url)) {
98
+ return;
99
+ }
100
+
101
+ updateBlockAttributes(image.clientId, {
102
+ id: media.id,
103
+ url: media.url
104
+ });
105
+ resolve();
106
+ },
107
+
108
+ onError() {
109
+ reject();
110
+ }
111
+
112
+ });
113
+ })))).finally(() => {
114
+ setIsUploading(false);
115
+ });
116
+ }
117
+
118
+ return createElement(PanelBody, {
119
+ initialOpen: true,
120
+ title: panelBodyTitle
121
+ }, createElement("p", null, __('There are some external images in the post which can be uploaded to the media library. Images coming from different domains may not always display correctly, load slowly for visitors, or be removed unexpectedly.')), createElement("div", {
122
+ style: {
123
+ display: 'inline-flex',
124
+ flexWrap: 'wrap',
125
+ gap: '8px'
126
+ }
127
+ }, createElement(AnimatePresence, null, externalImages.map(image => {
128
+ return createElement(Image, {
129
+ key: image.clientId,
130
+ ...image
131
+ });
132
+ })), isUploading ? createElement(Spinner, null) : createElement(Button, {
133
+ icon: upload,
134
+ variant: "primary",
135
+ onClick: uploadImages
136
+ }, __('Upload all'))));
137
+ }
138
+ //# sourceMappingURL=maybe-upload-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-publish-panel/maybe-upload-media.js"],"names":["PanelBody","Button","Spinner","__unstableMotion","motion","__unstableAnimatePresence","AnimatePresence","useSelect","useDispatch","__","upload","store","blockEditorStore","useState","isBlobURL","editorStore","flattenBlocks","blocks","result","forEach","block","push","innerBlocks","Image","selectBlock","clientId","event","key","preventDefault","attributes","alt","url","opacity","scale","width","height","objectFit","borderRadius","cursor","PostFormatPanel","isUploading","setIsUploading","editorBlocks","mediaUpload","select","getEditorBlocks","getSettings","externalImages","filter","name","id","updateBlockAttributes","length","panelBodyTitle","uploadImages","Promise","all","map","image","window","fetch","includes","then","response","blob","resolve","reject","filesList","onFileChange","media","onError","finally","display","flexWrap","gap"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tPanelBody,\n\tButton,\n\tSpinner,\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { upload } from '@wordpress/icons';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useState } from '@wordpress/element';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nfunction flattenBlocks( blocks ) {\n\tconst result = [];\n\n\tblocks.forEach( ( block ) => {\n\t\tresult.push( block );\n\t\tresult.push( ...flattenBlocks( block.innerBlocks ) );\n\t} );\n\n\treturn result;\n}\n\nfunction Image( block ) {\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\treturn (\n\t\t<motion.img\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"button\"\n\t\t\taria-label={ __( 'Select image block.' ) }\n\t\t\tonClick={ () => {\n\t\t\t\tselectBlock( block.clientId );\n\t\t\t} }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\t\tselectBlock( block.clientId );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} }\n\t\t\tkey={ block.clientId }\n\t\t\talt={ block.attributes.alt }\n\t\t\tsrc={ block.attributes.url }\n\t\t\tanimate={ { opacity: 1 } }\n\t\t\texit={ { opacity: 0, scale: 0 } }\n\t\t\tstyle={ {\n\t\t\t\twidth: '36px',\n\t\t\t\theight: '36px',\n\t\t\t\tobjectFit: 'cover',\n\t\t\t\tborderRadius: '2px',\n\t\t\t\tcursor: 'pointer',\n\t\t\t} }\n\t\t\twhileHover={ { scale: 1.08 } }\n\t\t/>\n\t);\n}\n\nexport default function PostFormatPanel() {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { editorBlocks, mediaUpload } = useSelect(\n\t\t( select ) => ( {\n\t\t\teditorBlocks: select( editorStore ).getEditorBlocks(),\n\t\t\tmediaUpload: select( blockEditorStore ).getSettings().mediaUpload,\n\t\t} ),\n\t\t[]\n\t);\n\tconst externalImages = flattenBlocks( editorBlocks ).filter(\n\t\t( block ) =>\n\t\t\tblock.name === 'core/image' &&\n\t\t\tblock.attributes.url &&\n\t\t\t! block.attributes.id\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\tif ( ! mediaUpload || ! externalImages.length ) {\n\t\treturn null;\n\t}\n\n\tconst panelBodyTitle = [\n\t\t__( 'Suggestion:' ),\n\t\t<span className=\"editor-post-publish-panel__link\" key=\"label\">\n\t\t\t{ __( 'External media' ) }\n\t\t</span>,\n\t];\n\n\tfunction uploadImages() {\n\t\tsetIsUploading( true );\n\t\tPromise.all(\n\t\t\texternalImages.map( ( image ) =>\n\t\t\t\twindow\n\t\t\t\t\t.fetch(\n\t\t\t\t\t\timage.attributes.url.includes( '?' )\n\t\t\t\t\t\t\t? image.attributes.url\n\t\t\t\t\t\t\t: image.attributes.url + '?'\n\t\t\t\t\t)\n\t\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t\t.then(\n\t\t\t\t\t\t( blob ) =>\n\t\t\t\t\t\t\tnew Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\t\tmediaUpload( {\n\t\t\t\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\t\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\t\t\t\t\t\t\tif ( isBlobURL( media.url ) ) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tupdateBlockAttributes( image.clientId, {\n\t\t\t\t\t\t\t\t\t\t\tid: media.id,\n\t\t\t\t\t\t\t\t\t\t\turl: media.url,\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonError() {\n\t\t\t\t\t\t\t\t\t\treject();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t).finally( () => {\n\t\t\tsetIsUploading( false );\n\t\t} );\n\t}\n\n\treturn (\n\t\t<PanelBody initialOpen={ true } title={ panelBodyTitle }>\n\t\t\t<p>\n\t\t\t\t{ __(\n\t\t\t\t\t'There are some external images in the post which can be uploaded to the media library. Images coming from different domains may not always display correctly, load slowly for visitors, or be removed unexpectedly.'\n\t\t\t\t) }\n\t\t\t</p>\n\t\t\t<div\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\tgap: '8px',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{ externalImages.map( ( image ) => {\n\t\t\t\t\t\treturn <Image key={ image.clientId } { ...image } />;\n\t\t\t\t\t} ) }\n\t\t\t\t</AnimatePresence>\n\t\t\t\t{ isUploading ? (\n\t\t\t\t\t<Spinner />\n\t\t\t\t) : (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tonClick={ uploadImages }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Upload all' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</PanelBody>\n\t);\n}\n"]}
@@ -22,6 +22,7 @@ import MaybeTagsPanel from './maybe-tags-panel';
22
22
  import MaybePostFormatPanel from './maybe-post-format-panel';
23
23
  import { store as editorStore } from '../../store';
24
24
  import MaybeCategoryPanel from './maybe-category-panel';
25
+ import MaybeUploadMedia from './maybe-upload-media';
25
26
 
26
27
  function PostPublishPanelPrepublish({
27
28
  children
@@ -95,7 +96,7 @@ function PostPublishPanelPrepublish({
95
96
  className: "components-site-name"
96
97
  }, decodeEntities(siteTitle) || __('(Untitled)')), createElement("span", {
97
98
  className: "components-site-home"
98
- }, siteHome))), hasPublishAction && createElement(Fragment, null, createElement(PanelBody, {
99
+ }, siteHome))), createElement(MaybeUploadMedia, null), hasPublishAction && createElement(Fragment, null, createElement(PanelBody, {
99
100
  initialOpen: false,
100
101
  title: [__('Visibility:'), createElement("span", {
101
102
  className: "editor-post-publish-panel__link",
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-publish-panel/prepublish.js"],"names":["__","Icon","PanelBody","useSelect","wordpress","filterURLForDisplay","store","coreStore","decodeEntities","PostVisibility","PostVisibilityLabel","PostSchedule","PostScheduleLabel","MaybeTagsPanel","MaybePostFormatPanel","editorStore","MaybeCategoryPanel","PostPublishPanelPrepublish","children","isBeingScheduled","isRequestingSiteIcon","hasPublishAction","siteIconUrl","siteTitle","siteHome","select","getCurrentPost","isEditedPostBeingScheduled","getEntityRecord","isResolving","siteData","undefined","_links","site_icon_url","name","home","siteIcon","prePublishTitle","prePublishBodyText"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Icon, PanelBody } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { wordpress } from '@wordpress/icons';\nimport { filterURLForDisplay } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport PostVisibility from '../post-visibility';\nimport PostVisibilityLabel from '../post-visibility/label';\nimport PostSchedule from '../post-schedule';\nimport PostScheduleLabel from '../post-schedule/label';\nimport MaybeTagsPanel from './maybe-tags-panel';\nimport MaybePostFormatPanel from './maybe-post-format-panel';\nimport { store as editorStore } from '../../store';\nimport MaybeCategoryPanel from './maybe-category-panel';\n\nfunction PostPublishPanelPrepublish( { children } ) {\n\tconst {\n\t\tisBeingScheduled,\n\t\tisRequestingSiteIcon,\n\t\thasPublishAction,\n\t\tsiteIconUrl,\n\t\tsiteTitle,\n\t\tsiteHome,\n\t} = useSelect( ( select ) => {\n\t\tconst { getCurrentPost, isEditedPostBeingScheduled } =\n\t\t\tselect( editorStore );\n\t\tconst { getEntityRecord, isResolving } = select( coreStore );\n\t\tconst siteData =\n\t\t\tgetEntityRecord( 'root', '__unstableBase', undefined ) || {};\n\n\t\treturn {\n\t\t\thasPublishAction:\n\t\t\t\tgetCurrentPost()._links?.[ 'wp:action-publish' ] ?? false,\n\t\t\tisBeingScheduled: isEditedPostBeingScheduled(),\n\t\t\tisRequestingSiteIcon: isResolving( 'getEntityRecord', [\n\t\t\t\t'root',\n\t\t\t\t'__unstableBase',\n\t\t\t\tundefined,\n\t\t\t] ),\n\t\t\tsiteIconUrl: siteData.site_icon_url,\n\t\t\tsiteTitle: siteData.name,\n\t\t\tsiteHome: siteData.home && filterURLForDisplay( siteData.home ),\n\t\t};\n\t}, [] );\n\n\tlet siteIcon = (\n\t\t<Icon className=\"components-site-icon\" size=\"36px\" icon={ wordpress } />\n\t);\n\n\tif ( siteIconUrl ) {\n\t\tsiteIcon = (\n\t\t\t<img\n\t\t\t\talt={ __( 'Site Icon' ) }\n\t\t\t\tclassName=\"components-site-icon\"\n\t\t\t\tsrc={ siteIconUrl }\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ( isRequestingSiteIcon ) {\n\t\tsiteIcon = null;\n\t}\n\n\tlet prePublishTitle, prePublishBodyText;\n\n\tif ( ! hasPublishAction ) {\n\t\tprePublishTitle = __( 'Are you ready to submit for review?' );\n\t\tprePublishBodyText = __(\n\t\t\t'When you’re ready, submit your work for review, and an Editor will be able to approve it for you.'\n\t\t);\n\t} else if ( isBeingScheduled ) {\n\t\tprePublishTitle = __( 'Are you ready to schedule?' );\n\t\tprePublishBodyText = __(\n\t\t\t'Your work will be published at the specified date and time.'\n\t\t);\n\t} else {\n\t\tprePublishTitle = __( 'Are you ready to publish?' );\n\t\tprePublishBodyText = __(\n\t\t\t'Double-check your settings before publishing.'\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"editor-post-publish-panel__prepublish\">\n\t\t\t<div>\n\t\t\t\t<strong>{ prePublishTitle }</strong>\n\t\t\t</div>\n\t\t\t<p>{ prePublishBodyText }</p>\n\t\t\t<div className=\"components-site-card\">\n\t\t\t\t{ siteIcon }\n\t\t\t\t<div className=\"components-site-info\">\n\t\t\t\t\t<span className=\"components-site-name\">\n\t\t\t\t\t\t{ decodeEntities( siteTitle ) || __( '(Untitled)' ) }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"components-site-home\">{ siteHome }</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{ hasPublishAction && (\n\t\t\t\t<>\n\t\t\t\t\t<PanelBody\n\t\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t\t\ttitle={ [\n\t\t\t\t\t\t\t__( 'Visibility:' ),\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"editor-post-publish-panel__link\"\n\t\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PostVisibilityLabel />\n\t\t\t\t\t\t\t</span>,\n\t\t\t\t\t\t] }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PostVisibility />\n\t\t\t\t\t</PanelBody>\n\t\t\t\t\t<PanelBody\n\t\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t\t\ttitle={ [\n\t\t\t\t\t\t\t__( 'Publish:' ),\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"editor-post-publish-panel__link\"\n\t\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PostScheduleLabel />\n\t\t\t\t\t\t\t</span>,\n\t\t\t\t\t\t] }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PostSchedule />\n\t\t\t\t\t</PanelBody>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t<MaybePostFormatPanel />\n\t\t\t<MaybeTagsPanel />\n\t\t\t<MaybeCategoryPanel />\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nexport default PostPublishPanelPrepublish;\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-publish-panel/prepublish.js"],"names":["__","Icon","PanelBody","useSelect","wordpress","filterURLForDisplay","store","coreStore","decodeEntities","PostVisibility","PostVisibilityLabel","PostSchedule","PostScheduleLabel","MaybeTagsPanel","MaybePostFormatPanel","editorStore","MaybeCategoryPanel","MaybeUploadMedia","PostPublishPanelPrepublish","children","isBeingScheduled","isRequestingSiteIcon","hasPublishAction","siteIconUrl","siteTitle","siteHome","select","getCurrentPost","isEditedPostBeingScheduled","getEntityRecord","isResolving","siteData","undefined","_links","site_icon_url","name","home","siteIcon","prePublishTitle","prePublishBodyText"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,IAAT,EAAeC,SAAf,QAAgC,uBAAhC;AACA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,mBAAT,QAAoC,gBAApC;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AACA,SAASC,cAAT,QAA+B,0BAA/B;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,oBAA3B;AACA,OAAOC,mBAAP,MAAgC,0BAAhC;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,OAAOC,iBAAP,MAA8B,wBAA9B;AACA,OAAOC,cAAP,MAA2B,oBAA3B;AACA,OAAOC,oBAAP,MAAiC,2BAAjC;AACA,SAASR,KAAK,IAAIS,WAAlB,QAAqC,aAArC;AACA,OAAOC,kBAAP,MAA+B,wBAA/B;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;;AAEA,SAASC,0BAAT,CAAqC;AAAEC,EAAAA;AAAF,CAArC,EAAoD;AACnD,QAAM;AACLC,IAAAA,gBADK;AAELC,IAAAA,oBAFK;AAGLC,IAAAA,gBAHK;AAILC,IAAAA,WAJK;AAKLC,IAAAA,SALK;AAMLC,IAAAA;AANK,MAOFtB,SAAS,CAAIuB,MAAF,IAAc;AAAA;;AAC5B,UAAM;AAAEC,MAAAA,cAAF;AAAkBC,MAAAA;AAAlB,QACLF,MAAM,CAAEX,WAAF,CADP;AAEA,UAAM;AAAEc,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAAmCJ,MAAM,CAAEnB,SAAF,CAA/C;AACA,UAAMwB,QAAQ,GACbF,eAAe,CAAE,MAAF,EAAU,gBAAV,EAA4BG,SAA5B,CAAf,IAA0D,EAD3D;AAGA,WAAO;AACNV,MAAAA,gBAAgB,2BACfK,cAAc,GAAGM,MAAjB,GAA2B,mBAA3B,CADe,yEACqC,KAF/C;AAGNb,MAAAA,gBAAgB,EAAEQ,0BAA0B,EAHtC;AAINP,MAAAA,oBAAoB,EAAES,WAAW,CAAE,iBAAF,EAAqB,CACrD,MADqD,EAErD,gBAFqD,EAGrDE,SAHqD,CAArB,CAJ3B;AASNT,MAAAA,WAAW,EAAEQ,QAAQ,CAACG,aAThB;AAUNV,MAAAA,SAAS,EAAEO,QAAQ,CAACI,IAVd;AAWNV,MAAAA,QAAQ,EAAEM,QAAQ,CAACK,IAAT,IAAiB/B,mBAAmB,CAAE0B,QAAQ,CAACK,IAAX;AAXxC,KAAP;AAaA,GApBY,EAoBV,EApBU,CAPb;AA6BA,MAAIC,QAAQ,GACX,cAAC,IAAD;AAAM,IAAA,SAAS,EAAC,sBAAhB;AAAuC,IAAA,IAAI,EAAC,MAA5C;AAAmD,IAAA,IAAI,EAAGjC;AAA1D,IADD;;AAIA,MAAKmB,WAAL,EAAmB;AAClBc,IAAAA,QAAQ,GACP;AACC,MAAA,GAAG,EAAGrC,EAAE,CAAE,WAAF,CADT;AAEC,MAAA,SAAS,EAAC,sBAFX;AAGC,MAAA,GAAG,EAAGuB;AAHP,MADD;AAOA;;AAED,MAAKF,oBAAL,EAA4B;AAC3BgB,IAAAA,QAAQ,GAAG,IAAX;AACA;;AAED,MAAIC,eAAJ,EAAqBC,kBAArB;;AAEA,MAAK,CAAEjB,gBAAP,EAA0B;AACzBgB,IAAAA,eAAe,GAAGtC,EAAE,CAAE,qCAAF,CAApB;AACAuC,IAAAA,kBAAkB,GAAGvC,EAAE,CACtB,mGADsB,CAAvB;AAGA,GALD,MAKO,IAAKoB,gBAAL,EAAwB;AAC9BkB,IAAAA,eAAe,GAAGtC,EAAE,CAAE,4BAAF,CAApB;AACAuC,IAAAA,kBAAkB,GAAGvC,EAAE,CACtB,6DADsB,CAAvB;AAGA,GALM,MAKA;AACNsC,IAAAA,eAAe,GAAGtC,EAAE,CAAE,2BAAF,CAApB;AACAuC,IAAAA,kBAAkB,GAAGvC,EAAE,CACtB,+CADsB,CAAvB;AAGA;;AAED,SACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,2BACC,8BAAUsC,eAAV,CADD,CADD,EAIC,yBAAKC,kBAAL,CAJD,EAKC;AAAK,IAAA,SAAS,EAAC;AAAf,KACGF,QADH,EAEC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACG7B,cAAc,CAAEgB,SAAF,CAAd,IAA+BxB,EAAE,CAAE,YAAF,CADpC,CADD,EAIC;AAAM,IAAA,SAAS,EAAC;AAAhB,KAAyCyB,QAAzC,CAJD,CAFD,CALD,EAcC,cAAC,gBAAD,OAdD,EAeGH,gBAAgB,IACjB,8BACC,cAAC,SAAD;AACC,IAAA,WAAW,EAAG,KADf;AAEC,IAAA,KAAK,EAAG,CACPtB,EAAE,CAAE,aAAF,CADK,EAEP;AACC,MAAA,SAAS,EAAC,iCADX;AAEC,MAAA,GAAG,EAAC;AAFL,OAIC,cAAC,mBAAD,OAJD,CAFO;AAFT,KAYC,cAAC,cAAD,OAZD,CADD,EAeC,cAAC,SAAD;AACC,IAAA,WAAW,EAAG,KADf;AAEC,IAAA,KAAK,EAAG,CACPA,EAAE,CAAE,UAAF,CADK,EAEP;AACC,MAAA,SAAS,EAAC,iCADX;AAEC,MAAA,GAAG,EAAC;AAFL,OAIC,cAAC,iBAAD,OAJD,CAFO;AAFT,KAYC,cAAC,YAAD,OAZD,CAfD,CAhBF,EA+CC,cAAC,oBAAD,OA/CD,EAgDC,cAAC,cAAD,OAhDD,EAiDC,cAAC,kBAAD,OAjDD,EAkDGmB,QAlDH,CADD;AAsDA;;AAED,eAAeD,0BAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Icon, PanelBody } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { wordpress } from '@wordpress/icons';\nimport { filterURLForDisplay } from '@wordpress/url';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport PostVisibility from '../post-visibility';\nimport PostVisibilityLabel from '../post-visibility/label';\nimport PostSchedule from '../post-schedule';\nimport PostScheduleLabel from '../post-schedule/label';\nimport MaybeTagsPanel from './maybe-tags-panel';\nimport MaybePostFormatPanel from './maybe-post-format-panel';\nimport { store as editorStore } from '../../store';\nimport MaybeCategoryPanel from './maybe-category-panel';\nimport MaybeUploadMedia from './maybe-upload-media';\n\nfunction PostPublishPanelPrepublish( { children } ) {\n\tconst {\n\t\tisBeingScheduled,\n\t\tisRequestingSiteIcon,\n\t\thasPublishAction,\n\t\tsiteIconUrl,\n\t\tsiteTitle,\n\t\tsiteHome,\n\t} = useSelect( ( select ) => {\n\t\tconst { getCurrentPost, isEditedPostBeingScheduled } =\n\t\t\tselect( editorStore );\n\t\tconst { getEntityRecord, isResolving } = select( coreStore );\n\t\tconst siteData =\n\t\t\tgetEntityRecord( 'root', '__unstableBase', undefined ) || {};\n\n\t\treturn {\n\t\t\thasPublishAction:\n\t\t\t\tgetCurrentPost()._links?.[ 'wp:action-publish' ] ?? false,\n\t\t\tisBeingScheduled: isEditedPostBeingScheduled(),\n\t\t\tisRequestingSiteIcon: isResolving( 'getEntityRecord', [\n\t\t\t\t'root',\n\t\t\t\t'__unstableBase',\n\t\t\t\tundefined,\n\t\t\t] ),\n\t\t\tsiteIconUrl: siteData.site_icon_url,\n\t\t\tsiteTitle: siteData.name,\n\t\t\tsiteHome: siteData.home && filterURLForDisplay( siteData.home ),\n\t\t};\n\t}, [] );\n\n\tlet siteIcon = (\n\t\t<Icon className=\"components-site-icon\" size=\"36px\" icon={ wordpress } />\n\t);\n\n\tif ( siteIconUrl ) {\n\t\tsiteIcon = (\n\t\t\t<img\n\t\t\t\talt={ __( 'Site Icon' ) }\n\t\t\t\tclassName=\"components-site-icon\"\n\t\t\t\tsrc={ siteIconUrl }\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ( isRequestingSiteIcon ) {\n\t\tsiteIcon = null;\n\t}\n\n\tlet prePublishTitle, prePublishBodyText;\n\n\tif ( ! hasPublishAction ) {\n\t\tprePublishTitle = __( 'Are you ready to submit for review?' );\n\t\tprePublishBodyText = __(\n\t\t\t'When you’re ready, submit your work for review, and an Editor will be able to approve it for you.'\n\t\t);\n\t} else if ( isBeingScheduled ) {\n\t\tprePublishTitle = __( 'Are you ready to schedule?' );\n\t\tprePublishBodyText = __(\n\t\t\t'Your work will be published at the specified date and time.'\n\t\t);\n\t} else {\n\t\tprePublishTitle = __( 'Are you ready to publish?' );\n\t\tprePublishBodyText = __(\n\t\t\t'Double-check your settings before publishing.'\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"editor-post-publish-panel__prepublish\">\n\t\t\t<div>\n\t\t\t\t<strong>{ prePublishTitle }</strong>\n\t\t\t</div>\n\t\t\t<p>{ prePublishBodyText }</p>\n\t\t\t<div className=\"components-site-card\">\n\t\t\t\t{ siteIcon }\n\t\t\t\t<div className=\"components-site-info\">\n\t\t\t\t\t<span className=\"components-site-name\">\n\t\t\t\t\t\t{ decodeEntities( siteTitle ) || __( '(Untitled)' ) }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"components-site-home\">{ siteHome }</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<MaybeUploadMedia />\n\t\t\t{ hasPublishAction && (\n\t\t\t\t<>\n\t\t\t\t\t<PanelBody\n\t\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t\t\ttitle={ [\n\t\t\t\t\t\t\t__( 'Visibility:' ),\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"editor-post-publish-panel__link\"\n\t\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PostVisibilityLabel />\n\t\t\t\t\t\t\t</span>,\n\t\t\t\t\t\t] }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PostVisibility />\n\t\t\t\t\t</PanelBody>\n\t\t\t\t\t<PanelBody\n\t\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t\t\ttitle={ [\n\t\t\t\t\t\t\t__( 'Publish:' ),\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"editor-post-publish-panel__link\"\n\t\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PostScheduleLabel />\n\t\t\t\t\t\t\t</span>,\n\t\t\t\t\t\t] }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PostSchedule />\n\t\t\t\t\t</PanelBody>\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t<MaybePostFormatPanel />\n\t\t\t<MaybeTagsPanel />\n\t\t\t<MaybeCategoryPanel />\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nexport default PostPublishPanelPrepublish;\n"]}
@@ -0,0 +1,56 @@
1
+ import { createElement } from "@wordpress/element";
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { useSelect, useDispatch } from '@wordpress/data';
7
+ import { __ } from '@wordpress/i18n';
8
+ import { ToggleControl, PanelRow } from '@wordpress/components';
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+
13
+ import { store as editorStore } from '../../store';
14
+ export default function PostSyncStatus() {
15
+ const {
16
+ editPost
17
+ } = useDispatch(editorStore);
18
+ const {
19
+ meta,
20
+ postType
21
+ } = useSelect(select => {
22
+ const {
23
+ getEditedPostAttribute
24
+ } = select(editorStore);
25
+ return {
26
+ meta: getEditedPostAttribute('meta'),
27
+ postType: getEditedPostAttribute('type')
28
+ };
29
+ }, []);
30
+
31
+ if (postType !== 'wp_block') {
32
+ return null;
33
+ }
34
+
35
+ const onUpdateSync = syncStatus => editPost({
36
+ meta: { ...meta,
37
+ wp_block: syncStatus === 'unsynced' ? {
38
+ sync_status: syncStatus
39
+ } : null
40
+ }
41
+ });
42
+
43
+ const syncStatus = meta?.wp_block?.sync_status;
44
+ const isFullySynced = !syncStatus;
45
+ return createElement(PanelRow, {
46
+ className: "edit-post-sync-status"
47
+ }, createElement("span", null, __('Syncing')), createElement(ToggleControl, {
48
+ __nextHasNoMarginBottom: true,
49
+ label: isFullySynced ? __('Fully synced') : __('Not synced'),
50
+ checked: isFullySynced,
51
+ onChange: () => {
52
+ onUpdateSync(syncStatus === 'unsynced' ? 'fully' : 'unsynced');
53
+ }
54
+ }));
55
+ }
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-sync-status/index.js"],"names":["useSelect","useDispatch","__","ToggleControl","PanelRow","store","editorStore","PostSyncStatus","editPost","meta","postType","select","getEditedPostAttribute","onUpdateSync","syncStatus","wp_block","sync_status","isFullySynced"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,aAAT,EAAwBC,QAAxB,QAAwC,uBAAxC;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,WAAlB,QAAqC,aAArC;AAEA,eAAe,SAASC,cAAT,GAA0B;AACxC,QAAM;AAAEC,IAAAA;AAAF,MAAeP,WAAW,CAAEK,WAAF,CAAhC;AACA,QAAM;AAAEG,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBV,SAAS,CAAIW,MAAF,IAAc;AACnD,UAAM;AAAEC,MAAAA;AAAF,QAA6BD,MAAM,CAAEL,WAAF,CAAzC;AACA,WAAO;AACNG,MAAAA,IAAI,EAAEG,sBAAsB,CAAE,MAAF,CADtB;AAENF,MAAAA,QAAQ,EAAEE,sBAAsB,CAAE,MAAF;AAF1B,KAAP;AAIA,GANmC,EAMjC,EANiC,CAApC;;AAOA,MAAKF,QAAQ,KAAK,UAAlB,EAA+B;AAC9B,WAAO,IAAP;AACA;;AACD,QAAMG,YAAY,GAAKC,UAAF,IACpBN,QAAQ,CAAE;AACTC,IAAAA,IAAI,EAAE,EACL,GAAGA,IADE;AAELM,MAAAA,QAAQ,EACPD,UAAU,KAAK,UAAf,GACG;AAAEE,QAAAA,WAAW,EAAEF;AAAf,OADH,GAEG;AALC;AADG,GAAF,CADT;;AAUA,QAAMA,UAAU,GAAGL,IAAI,EAAEM,QAAN,EAAgBC,WAAnC;AACA,QAAMC,aAAa,GAAG,CAAEH,UAAxB;AAEA,SACC,cAAC,QAAD;AAAU,IAAA,SAAS,EAAC;AAApB,KACC,4BAAQZ,EAAE,CAAE,SAAF,CAAV,CADD,EAEC,cAAC,aAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EACJe,aAAa,GAAGf,EAAE,CAAE,cAAF,CAAL,GAA0BA,EAAE,CAAE,YAAF,CAH3C;AAKC,IAAA,OAAO,EAAGe,aALX;AAMC,IAAA,QAAQ,EAAG,MAAM;AAChBJ,MAAAA,YAAY,CACXC,UAAU,KAAK,UAAf,GAA4B,OAA5B,GAAsC,UAD3B,CAAZ;AAGA;AAVF,IAFD,CADD;AAiBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { ToggleControl, PanelRow } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostSyncStatus() {\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { meta, postType } = useSelect( ( select ) => {\n\t\tconst { getEditedPostAttribute } = select( editorStore );\n\t\treturn {\n\t\t\tmeta: getEditedPostAttribute( 'meta' ),\n\t\t\tpostType: getEditedPostAttribute( 'type' ),\n\t\t};\n\t}, [] );\n\tif ( postType !== 'wp_block' ) {\n\t\treturn null;\n\t}\n\tconst onUpdateSync = ( syncStatus ) =>\n\t\teditPost( {\n\t\t\tmeta: {\n\t\t\t\t...meta,\n\t\t\t\twp_block:\n\t\t\t\t\tsyncStatus === 'unsynced'\n\t\t\t\t\t\t? { sync_status: syncStatus }\n\t\t\t\t\t\t: null,\n\t\t\t},\n\t\t} );\n\tconst syncStatus = meta?.wp_block?.sync_status;\n\tconst isFullySynced = ! syncStatus;\n\n\treturn (\n\t\t<PanelRow className=\"edit-post-sync-status\">\n\t\t\t<span>{ __( 'Syncing' ) }</span>\n\t\t\t<ToggleControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\tlabel={\n\t\t\t\t\tisFullySynced ? __( 'Fully synced' ) : __( 'Not synced' )\n\t\t\t\t}\n\t\t\t\tchecked={ isFullySynced }\n\t\t\t\tonChange={ () => {\n\t\t\t\t\tonUpdateSync(\n\t\t\t\t\t\tsyncStatus === 'unsynced' ? 'fully' : 'unsynced'\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PanelRow>\n\t);\n}\n"]}
@@ -1,20 +1,14 @@
1
1
  import { createElement, Fragment } from "@wordpress/element";
2
2
 
3
- /**
4
- * External dependencies
5
- */
6
- import escapeHtml from 'escape-html';
7
3
  /**
8
4
  * WordPress dependencies
9
5
  */
10
-
11
6
  import { __, _x, sprintf } from '@wordpress/i18n';
12
7
  import { useEffect, useMemo, useState } from '@wordpress/element';
13
8
  import { FormTokenField, withFilters } from '@wordpress/components';
14
9
  import { useSelect, useDispatch } from '@wordpress/data';
15
10
  import { store as coreStore } from '@wordpress/core-data';
16
11
  import { useDebounce } from '@wordpress/compose';
17
- import apiFetch from '@wordpress/api-fetch';
18
12
  import { speak } from '@wordpress/a11y';
19
13
  /**
20
14
  * Internal dependencies
@@ -46,28 +40,7 @@ const isSameTermName = (termA, termB) => unescapeString(termA).toLowerCase() ===
46
40
 
47
41
  const termNamesToIds = (names, terms) => {
48
42
  return names.map(termName => terms.find(term => isSameTermName(term.name, termName)).id);
49
- }; // Tries to create a term or fetch it if it already exists.
50
-
51
-
52
- function findOrCreateTerm(termName, restBase, namespace) {
53
- const escapedTermName = escapeHtml(termName);
54
- return apiFetch({
55
- path: `/${namespace}/${restBase}`,
56
- method: 'POST',
57
- data: {
58
- name: escapedTermName
59
- }
60
- }).catch(error => {
61
- if (error.code !== 'term_exists') {
62
- return Promise.reject(error);
63
- }
64
-
65
- return Promise.resolve({
66
- id: error.data.term_id,
67
- name: termName
68
- });
69
- }).then(unescapeTerm);
70
- }
43
+ };
71
44
 
72
45
  export function FlatTermSelector({
73
46
  slug
@@ -142,11 +115,32 @@ export function FlatTermSelector({
142
115
  const {
143
116
  editPost
144
117
  } = useDispatch(editorStore);
118
+ const {
119
+ saveEntityRecord
120
+ } = useDispatch(coreStore);
145
121
 
146
122
  if (!hasAssignAction) {
147
123
  return null;
148
124
  }
149
125
 
126
+ async function findOrCreateTerm(term) {
127
+ try {
128
+ const newTerm = await saveEntityRecord('taxonomy', slug, term, {
129
+ throwOnError: true
130
+ });
131
+ return unescapeTerm(newTerm);
132
+ } catch (error) {
133
+ if (error.code !== 'term_exists') {
134
+ throw error;
135
+ }
136
+
137
+ return {
138
+ id: error.data.term_id,
139
+ name: term.name
140
+ };
141
+ }
142
+ }
143
+
150
144
  function onUpdateTerms(newTermIds) {
151
145
  editPost({
152
146
  [taxonomy.rest_base]: newTermIds
@@ -154,8 +148,6 @@ export function FlatTermSelector({
154
148
  }
155
149
 
156
150
  function onChange(termNames) {
157
- var _taxonomy$rest_namesp;
158
-
159
151
  const availableTerms = [...(terms !== null && terms !== void 0 ? terms : []), ...(searchResults !== null && searchResults !== void 0 ? searchResults : [])];
160
152
  const uniqueTerms = termNames.reduce((acc, name) => {
161
153
  if (!acc.some(n => n.toLowerCase() === name.toLowerCase())) {
@@ -177,8 +169,9 @@ export function FlatTermSelector({
177
169
  return;
178
170
  }
179
171
 
180
- const namespace = (_taxonomy$rest_namesp = taxonomy?.rest_namespace) !== null && _taxonomy$rest_namesp !== void 0 ? _taxonomy$rest_namesp : 'wp/v2';
181
- Promise.all(newTermNames.map(termName => findOrCreateTerm(termName, taxonomy.rest_base, namespace))).then(newTerms => {
172
+ Promise.all(newTermNames.map(termName => findOrCreateTerm({
173
+ name: termName
174
+ }))).then(newTerms => {
182
175
  const newAvailableTerms = availableTerms.concat(newTerms);
183
176
  return onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms));
184
177
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["escapeHtml","__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","withFilters","useSelect","useDispatch","store","coreStore","useDebounce","apiFetch","speak","editorStore","unescapeString","unescapeTerm","MostUsedTerms","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","find","term","name","id","findOrCreateTerm","restBase","namespace","escapedTermName","path","method","data","catch","error","code","Promise","reject","resolve","term_id","then","FlatTermSelector","slug","values","setValues","search","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","getCurrentPost","getEditedPostAttribute","getEntityRecords","getTaxonomy","hasFinishedResolution","post","_taxonomy","_termIds","rest_base","query","include","join","_links","length","searchResults","newValues","suggestions","editPost","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","reduce","acc","some","n","push","newTermNames","filter","rest_namespace","all","newTerms","newAvailableTerms","concat","appendTerm","newTerm","includes","defaultName","termAddedMessage","labels","singular_name","newTermLabel","add_new_item","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport escapeHtml from 'escape-html';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, withFilters } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport apiFetch from '@wordpress/api-fetch';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm } from '../../utils/terms';\nimport MostUsedTerms from './most-used-terms';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tterms.find( ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\n// Tries to create a term or fetch it if it already exists.\nfunction findOrCreateTerm( termName, restBase, namespace ) {\n\tconst escapedTermName = escapeHtml( termName );\n\n\treturn apiFetch( {\n\t\tpath: `/${ namespace }/${ restBase }`,\n\t\tmethod: 'POST',\n\t\tdata: { name: escapedTermName },\n\t} )\n\t\t.catch( ( error ) => {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\treturn Promise.reject( error );\n\t\t\t}\n\n\t\t\treturn Promise.resolve( {\n\t\t\t\tid: error.data.term_id,\n\t\t\t\tname: termName,\n\t\t\t} );\n\t\t} )\n\t\t.then( unescapeTerm );\n}\n\nexport function FlatTermSelector( { slug } ) {\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttermIds,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPost, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst { getEntityRecords, getTaxonomy, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst post = getCurrentPost();\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds = _taxonomy\n\t\t\t\t? getEditedPostAttribute( _taxonomy.rest_base )\n\t\t\t\t: EMPTY_ARRAY;\n\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search, slug ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = ( terms ?? [] ).map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditPost( { [ taxonomy.rest_base ]: newTermIds } );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [\n\t\t\t...( terms ?? [] ),\n\t\t\t...( searchResults ?? [] ),\n\t\t];\n\t\tconst uniqueTerms = termNames.reduce( ( acc, name ) => {\n\t\t\tif (\n\t\t\t\t! acc.some( ( n ) => n.toLowerCase() === name.toLowerCase() )\n\t\t\t) {\n\t\t\t\tacc.push( name );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! availableTerms.find( ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst namespace = taxonomy?.rest_namespace ?? 'wp/v2';\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( termName, taxonomy.rest_base, namespace )\n\t\t\t)\n\t\t).then( ( newTerms ) => {\n\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction appendTerm( newTerm ) {\n\t\tif ( termIds.includes( newTerm.id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newTermIds = [ ...termIds, newTerm.id ];\n\t\tconst defaultName = slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' );\n\t\tconst termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\ttaxonomy?.labels?.singular_name ?? defaultName\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel =\n\t\ttaxonomy?.labels?.add_new_item ??\n\t\t( slug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' ) );\n\tconst singularName =\n\t\ttaxonomy?.labels?.singular_name ??\n\t\t( slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' ) );\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<FormTokenField\n\t\t\t\tvalue={ values }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\tlabel={ newTermLabel }\n\t\t\t\tmessages={ {\n\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<MostUsedTerms taxonomy={ taxonomy } onSelect={ appendTerm } />\n\t\t</>\n\t);\n}\n\nexport default withFilters( 'editor.PostTaxonomyType' )( FlatTermSelector );\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-taxonomies/flat-term-selector.js"],"names":["__","_x","sprintf","useEffect","useMemo","useState","FormTokenField","withFilters","useSelect","useDispatch","store","coreStore","useDebounce","speak","editorStore","unescapeString","unescapeTerm","MostUsedTerms","EMPTY_ARRAY","MAX_TERMS_SUGGESTIONS","DEFAULT_QUERY","per_page","_fields","context","isSameTermName","termA","termB","toLowerCase","termNamesToIds","names","terms","map","termName","find","term","name","id","FlatTermSelector","slug","values","setValues","search","setSearch","debouncedSearch","termIds","taxonomy","hasAssignAction","hasCreateAction","hasResolvedTerms","select","getCurrentPost","getEditedPostAttribute","getEntityRecords","getTaxonomy","hasFinishedResolution","post","_taxonomy","_termIds","rest_base","query","include","join","_links","length","searchResults","newValues","suggestions","editPost","saveEntityRecord","findOrCreateTerm","newTerm","throwOnError","error","code","data","term_id","onUpdateTerms","newTermIds","onChange","termNames","availableTerms","uniqueTerms","reduce","acc","some","n","push","newTermNames","filter","Promise","all","then","newTerms","newAvailableTerms","concat","appendTerm","includes","defaultName","termAddedMessage","labels","singular_name","newTermLabel","add_new_item","singularName","termAddedLabel","termRemovedLabel","removeTermLabel","added","removed","remove"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,EAAb,EAAiBC,OAAjB,QAAgC,iBAAhC;AACA,SAASC,SAAT,EAAoBC,OAApB,EAA6BC,QAA7B,QAA6C,oBAA7C;AACA,SAASC,cAAT,EAAyBC,WAAzB,QAA4C,uBAA5C;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AACA,SAASC,WAAT,QAA4B,oBAA5B;AACA,SAASC,KAAT,QAAsB,iBAAtB;AAEA;AACA;AACA;;AACA,SAASH,KAAK,IAAII,WAAlB,QAAqC,aAArC;AACA,SAASC,cAAT,EAAyBC,YAAzB,QAA6C,mBAA7C;AACA,OAAOC,aAAP,MAA0B,mBAA1B;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,WAAW,GAAG,EAApB;AAEA;AACA;AACA;;AACA,MAAMC,qBAAqB,GAAG,EAA9B;AACA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAEF,qBADW;AAErBG,EAAAA,OAAO,EAAE,SAFY;AAGrBC,EAAAA,OAAO,EAAE;AAHY,CAAtB;;AAMA,MAAMC,cAAc,GAAG,CAAEC,KAAF,EAASC,KAAT,KACtBX,cAAc,CAAEU,KAAF,CAAd,CAAwBE,WAAxB,OACAZ,cAAc,CAAEW,KAAF,CAAd,CAAwBC,WAAxB,EAFD;;AAIA,MAAMC,cAAc,GAAG,CAAEC,KAAF,EAASC,KAAT,KAAoB;AAC1C,SAAOD,KAAK,CAACE,GAAN,CACJC,QAAF,IACCF,KAAK,CAACG,IAAN,CAAcC,IAAF,IAAYV,cAAc,CAAEU,IAAI,CAACC,IAAP,EAAaH,QAAb,CAAtC,EAAgEI,EAF3D,CAAP;AAIA,CALD;;AAOA,OAAO,SAASC,gBAAT,CAA2B;AAAEC,EAAAA;AAAF,CAA3B,EAAsC;AAAA;;AAC5C,QAAM,CAAEC,MAAF,EAAUC,SAAV,IAAwBnC,QAAQ,CAAE,EAAF,CAAtC;AACA,QAAM,CAAEoC,MAAF,EAAUC,SAAV,IAAwBrC,QAAQ,CAAE,EAAF,CAAtC;AACA,QAAMsC,eAAe,GAAG/B,WAAW,CAAE8B,SAAF,EAAa,GAAb,CAAnC;AAEA,QAAM;AACLZ,IAAAA,KADK;AAELc,IAAAA,OAFK;AAGLC,IAAAA,QAHK;AAILC,IAAAA,eAJK;AAKLC,IAAAA,eALK;AAMLC,IAAAA;AANK,MAOFxC,SAAS,CACVyC,MAAF,IAAc;AAAA;;AACb,UAAM;AAAEC,MAAAA,cAAF;AAAkBC,MAAAA;AAAlB,QACLF,MAAM,CAAEnC,WAAF,CADP;AAEA,UAAM;AAAEsC,MAAAA,gBAAF;AAAoBC,MAAAA,WAApB;AAAiCC,MAAAA;AAAjC,QACLL,MAAM,CAAEtC,SAAF,CADP;AAEA,UAAM4C,IAAI,GAAGL,cAAc,EAA3B;;AACA,UAAMM,SAAS,GAAGH,WAAW,CAAEf,IAAF,CAA7B;;AACA,UAAMmB,QAAQ,GAAGD,SAAS,GACvBL,sBAAsB,CAAEK,SAAS,CAACE,SAAZ,CADC,GAEvBxC,WAFH;;AAIA,UAAMyC,KAAK,GAAG,EACb,GAAGvC,aADU;AAEbwC,MAAAA,OAAO,EAAEH,QAAQ,CAACI,IAAT,CAAe,GAAf,CAFI;AAGbxC,MAAAA,QAAQ,EAAE,CAAC;AAHE,KAAd;AAMA,WAAO;AACN0B,MAAAA,eAAe,EAAES,SAAS,mBACvBD,IAAI,CAACO,MAAL,GACA,sBAAsBN,SAAS,CAACE,SADhC,CADuB,uDAGlB,KAHkB,GAIvB,KALG;AAMNZ,MAAAA,eAAe,EAAEU,SAAS,oBACvBD,IAAI,CAACO,MAAL,GACA,sBAAsBN,SAAS,CAACE,SADhC,CADuB,yDAGlB,KAHkB,GAIvB,KAVG;AAWNb,MAAAA,QAAQ,EAAEW,SAXJ;AAYNZ,MAAAA,OAAO,EAAEa,QAZH;AAaN3B,MAAAA,KAAK,EAAE2B,QAAQ,CAACM,MAAT,GACJX,gBAAgB,CAAE,UAAF,EAAcd,IAAd,EAAoBqB,KAApB,CADZ,GAEJzC,WAfG;AAgBN8B,MAAAA,gBAAgB,EAAEM,qBAAqB,CAAE,kBAAF,EAAsB,CAC5D,UAD4D,EAE5DhB,IAF4D,EAG5DqB,KAH4D,CAAtB;AAhBjC,KAAP;AAsBA,GAxCW,EAyCZ,CAAErB,IAAF,CAzCY,CAPb;AAmDA,QAAM;AAAE0B,IAAAA;AAAF,MAAoBxD,SAAS,CAChCyC,MAAF,IAAc;AACb,UAAM;AAAEG,MAAAA;AAAF,QAAuBH,MAAM,CAAEtC,SAAF,CAAnC;AAEA,WAAO;AACNqD,MAAAA,aAAa,EAAE,CAAC,CAAEvB,MAAH,GACZW,gBAAgB,CAAE,UAAF,EAAcd,IAAd,EAAoB,EACpC,GAAGlB,aADiC;AAEpCqB,QAAAA;AAFoC,OAApB,CADJ,GAKZvB;AANG,KAAP;AAQA,GAZiC,EAalC,CAAEuB,MAAF,EAAUH,IAAV,CAbkC,CAAnC,CAxD4C,CAwE5C;AACA;AACA;;AACAnC,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAK6C,gBAAL,EAAwB;AACvB,YAAMiB,SAAS,GAAG,CAAEnC,KAAF,aAAEA,KAAF,cAAEA,KAAF,GAAW,EAAX,EAAgBC,GAAhB,CAAuBG,IAAF,IACtCnB,cAAc,CAAEmB,IAAI,CAACC,IAAP,CADG,CAAlB;AAIAK,MAAAA,SAAS,CAAEyB,SAAF,CAAT;AACA;AACD,GARQ,EAQN,CAAEnC,KAAF,EAASkB,gBAAT,CARM,CAAT;AAUA,QAAMkB,WAAW,GAAG9D,OAAO,CAAE,MAAM;AAClC,WAAO,CAAE4D,aAAF,aAAEA,aAAF,cAAEA,aAAF,GAAmB,EAAnB,EAAwBjC,GAAxB,CAA+BG,IAAF,IACnCnB,cAAc,CAAEmB,IAAI,CAACC,IAAP,CADR,CAAP;AAGA,GAJ0B,EAIxB,CAAE6B,aAAF,CAJwB,CAA3B;AAMA,QAAM;AAAEG,IAAAA;AAAF,MAAe1D,WAAW,CAAEK,WAAF,CAAhC;AACA,QAAM;AAAEsD,IAAAA;AAAF,MAAuB3D,WAAW,CAAEE,SAAF,CAAxC;;AAEA,MAAK,CAAEmC,eAAP,EAAyB;AACxB,WAAO,IAAP;AACA;;AAED,iBAAeuB,gBAAf,CAAiCnC,IAAjC,EAAwC;AACvC,QAAI;AACH,YAAMoC,OAAO,GAAG,MAAMF,gBAAgB,CAAE,UAAF,EAAc9B,IAAd,EAAoBJ,IAApB,EAA0B;AAC/DqC,QAAAA,YAAY,EAAE;AADiD,OAA1B,CAAtC;AAGA,aAAOvD,YAAY,CAAEsD,OAAF,CAAnB;AACA,KALD,CAKE,OAAQE,KAAR,EAAgB;AACjB,UAAKA,KAAK,CAACC,IAAN,KAAe,aAApB,EAAoC;AACnC,cAAMD,KAAN;AACA;;AAED,aAAO;AACNpC,QAAAA,EAAE,EAAEoC,KAAK,CAACE,IAAN,CAAWC,OADT;AAENxC,QAAAA,IAAI,EAAED,IAAI,CAACC;AAFL,OAAP;AAIA;AACD;;AAED,WAASyC,aAAT,CAAwBC,UAAxB,EAAqC;AACpCV,IAAAA,QAAQ,CAAE;AAAE,OAAEtB,QAAQ,CAACa,SAAX,GAAwBmB;AAA1B,KAAF,CAAR;AACA;;AAED,WAASC,QAAT,CAAmBC,SAAnB,EAA+B;AAC9B,UAAMC,cAAc,GAAG,CACtB,IAAKlD,KAAL,aAAKA,KAAL,cAAKA,KAAL,GAAc,EAAd,CADsB,EAEtB,IAAKkC,aAAL,aAAKA,aAAL,cAAKA,aAAL,GAAsB,EAAtB,CAFsB,CAAvB;AAIA,UAAMiB,WAAW,GAAGF,SAAS,CAACG,MAAV,CAAkB,CAAEC,GAAF,EAAOhD,IAAP,KAAiB;AACtD,UACC,CAAEgD,GAAG,CAACC,IAAJ,CAAYC,CAAF,IAASA,CAAC,CAAC1D,WAAF,OAAoBQ,IAAI,CAACR,WAAL,EAAvC,CADH,EAEE;AACDwD,QAAAA,GAAG,CAACG,IAAJ,CAAUnD,IAAV;AACA;;AACD,aAAOgD,GAAP;AACA,KAPmB,EAOjB,EAPiB,CAApB;AASA,UAAMI,YAAY,GAAGN,WAAW,CAACO,MAAZ,CAClBxD,QAAF,IACC,CAAEgD,cAAc,CAAC/C,IAAf,CAAuBC,IAAF,IACtBV,cAAc,CAAEU,IAAI,CAACC,IAAP,EAAaH,QAAb,CADb,CAFiB,CAArB,CAd8B,CAqB9B;AACA;;AACAQ,IAAAA,SAAS,CAAEyC,WAAF,CAAT;;AAEA,QAAKM,YAAY,CAACxB,MAAb,KAAwB,CAA7B,EAAiC;AAChC,aAAOa,aAAa,CACnBhD,cAAc,CAAEqD,WAAF,EAAeD,cAAf,CADK,CAApB;AAGA;;AAED,QAAK,CAAEjC,eAAP,EAAyB;AACxB;AACA;;AAED0C,IAAAA,OAAO,CAACC,GAAR,CACCH,YAAY,CAACxD,GAAb,CAAoBC,QAAF,IACjBqC,gBAAgB,CAAE;AAAElC,MAAAA,IAAI,EAAEH;AAAR,KAAF,CADjB,CADD,EAIE2D,IAJF,CAIUC,QAAF,IAAgB;AACvB,YAAMC,iBAAiB,GAAGb,cAAc,CAACc,MAAf,CAAuBF,QAAvB,CAA1B;AACA,aAAOhB,aAAa,CACnBhD,cAAc,CAAEqD,WAAF,EAAeY,iBAAf,CADK,CAApB;AAGA,KATD;AAUA;;AAED,WAASE,UAAT,CAAqBzB,OAArB,EAA+B;AAAA;;AAC9B,QAAK1B,OAAO,CAACoD,QAAR,CAAkB1B,OAAO,CAAClC,EAA1B,CAAL,EAAsC;AACrC;AACA;;AAED,UAAMyC,UAAU,GAAG,CAAE,GAAGjC,OAAL,EAAc0B,OAAO,CAAClC,EAAtB,CAAnB;AACA,UAAM6D,WAAW,GAAG3D,IAAI,KAAK,UAAT,GAAsBtC,EAAE,CAAE,KAAF,CAAxB,GAAoCA,EAAE,CAAE,MAAF,CAA1D;AACA,UAAMkG,gBAAgB,GAAGhG,OAAO;AAC/B;AACAD,IAAAA,EAAE,CAAE,UAAF,EAAc,MAAd,CAF6B,2BAG/B4C,QAAQ,EAAEsD,MAAV,EAAkBC,aAHa,yEAGIH,WAHJ,CAAhC;AAMApF,IAAAA,KAAK,CAAEqF,gBAAF,EAAoB,WAApB,CAAL;AACAtB,IAAAA,aAAa,CAAEC,UAAF,CAAb;AACA;;AAED,QAAMwB,YAAY,4BACjBxD,QAAQ,EAAEsD,MAAV,EAAkBG,YADD,yEAEfhE,IAAI,KAAK,UAAT,GAAsBtC,EAAE,CAAE,aAAF,CAAxB,GAA4CA,EAAE,CAAE,cAAF,CAFjD;AAGA,QAAMuG,YAAY,6BACjB1D,QAAQ,EAAEsD,MAAV,EAAkBC,aADD,2EAEf9D,IAAI,KAAK,UAAT,GAAsBtC,EAAE,CAAE,KAAF,CAAxB,GAAoCA,EAAE,CAAE,MAAF,CAFzC;AAGA,QAAMwG,cAAc,GAAGtG,OAAO;AAC7B;AACAD,EAAAA,EAAE,CAAE,UAAF,EAAc,MAAd,CAF2B,EAG7BsG,YAH6B,CAA9B;AAKA,QAAME,gBAAgB,GAAGvG,OAAO;AAC/B;AACAD,EAAAA,EAAE,CAAE,YAAF,EAAgB,MAAhB,CAF6B,EAG/BsG,YAH+B,CAAhC;AAKA,QAAMG,eAAe,GAAGxG,OAAO;AAC9B;AACAD,EAAAA,EAAE,CAAE,WAAF,EAAe,MAAf,CAF4B,EAG9BsG,YAH8B,CAA/B;AAMA,SACC,8BACC,cAAC,cAAD;AACC,IAAA,KAAK,EAAGhE,MADT;AAEC,IAAA,WAAW,EAAG2B,WAFf;AAGC,IAAA,QAAQ,EAAGY,QAHZ;AAIC,IAAA,aAAa,EAAGnC,eAJjB;AAKC,IAAA,cAAc,EAAGxB,qBALlB;AAMC,IAAA,KAAK,EAAGkF,YANT;AAOC,IAAA,QAAQ,EAAG;AACVM,MAAAA,KAAK,EAAEH,cADG;AAEVI,MAAAA,OAAO,EAAEH,gBAFC;AAGVI,MAAAA,MAAM,EAAEH;AAHE;AAPZ,IADD,EAcC,cAAC,aAAD;AAAe,IAAA,QAAQ,EAAG7D,QAA1B;AAAqC,IAAA,QAAQ,EAAGkD;AAAhD,IAdD,CADD;AAkBA;AAED,eAAexF,WAAW,CAAE,yBAAF,CAAX,CAA0C8B,gBAA1C,CAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useEffect, useMemo, useState } from '@wordpress/element';\nimport { FormTokenField, withFilters } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDebounce } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unescapeString, unescapeTerm } from '../../utils/terms';\nimport MostUsedTerms from './most-used-terms';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array<any>}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Module constants\n */\nconst MAX_TERMS_SUGGESTIONS = 20;\nconst DEFAULT_QUERY = {\n\tper_page: MAX_TERMS_SUGGESTIONS,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nconst isSameTermName = ( termA, termB ) =>\n\tunescapeString( termA ).toLowerCase() ===\n\tunescapeString( termB ).toLowerCase();\n\nconst termNamesToIds = ( names, terms ) => {\n\treturn names.map(\n\t\t( termName ) =>\n\t\t\tterms.find( ( term ) => isSameTermName( term.name, termName ) ).id\n\t);\n};\n\nexport function FlatTermSelector( { slug } ) {\n\tconst [ values, setValues ] = useState( [] );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst debouncedSearch = useDebounce( setSearch, 500 );\n\n\tconst {\n\t\tterms,\n\t\ttermIds,\n\t\ttaxonomy,\n\t\thasAssignAction,\n\t\thasCreateAction,\n\t\thasResolvedTerms,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPost, getEditedPostAttribute } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst { getEntityRecords, getTaxonomy, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst post = getCurrentPost();\n\t\t\tconst _taxonomy = getTaxonomy( slug );\n\t\t\tconst _termIds = _taxonomy\n\t\t\t\t? getEditedPostAttribute( _taxonomy.rest_base )\n\t\t\t\t: EMPTY_ARRAY;\n\n\t\t\tconst query = {\n\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\tinclude: _termIds.join( ',' ),\n\t\t\t\tper_page: -1,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\thasCreateAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-create-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\thasAssignAction: _taxonomy\n\t\t\t\t\t? post._links?.[\n\t\t\t\t\t\t\t'wp:action-assign-' + _taxonomy.rest_base\n\t\t\t\t\t ] ?? false\n\t\t\t\t\t: false,\n\t\t\t\ttaxonomy: _taxonomy,\n\t\t\t\ttermIds: _termIds,\n\t\t\t\tterms: _termIds.length\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, query )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t\thasResolvedTerms: hasFinishedResolution( 'getEntityRecords', [\n\t\t\t\t\t'taxonomy',\n\t\t\t\t\tslug,\n\t\t\t\t\tquery,\n\t\t\t\t] ),\n\t\t\t};\n\t\t},\n\t\t[ slug ]\n\t);\n\n\tconst { searchResults } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\treturn {\n\t\t\t\tsearchResults: !! search\n\t\t\t\t\t? getEntityRecords( 'taxonomy', slug, {\n\t\t\t\t\t\t\t...DEFAULT_QUERY,\n\t\t\t\t\t\t\tsearch,\n\t\t\t\t\t } )\n\t\t\t\t\t: EMPTY_ARRAY,\n\t\t\t};\n\t\t},\n\t\t[ search, slug ]\n\t);\n\n\t// Update terms state only after the selectors are resolved.\n\t// We're using this to avoid terms temporarily disappearing on slow networks\n\t// while core data makes REST API requests.\n\tuseEffect( () => {\n\t\tif ( hasResolvedTerms ) {\n\t\t\tconst newValues = ( terms ?? [] ).map( ( term ) =>\n\t\t\t\tunescapeString( term.name )\n\t\t\t);\n\n\t\t\tsetValues( newValues );\n\t\t}\n\t}, [ terms, hasResolvedTerms ] );\n\n\tconst suggestions = useMemo( () => {\n\t\treturn ( searchResults ?? [] ).map( ( term ) =>\n\t\t\tunescapeString( term.name )\n\t\t);\n\t}, [ searchResults ] );\n\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tif ( ! hasAssignAction ) {\n\t\treturn null;\n\t}\n\n\tasync function findOrCreateTerm( term ) {\n\t\ttry {\n\t\t\tconst newTerm = await saveEntityRecord( 'taxonomy', slug, term, {\n\t\t\t\tthrowOnError: true,\n\t\t\t} );\n\t\t\treturn unescapeTerm( newTerm );\n\t\t} catch ( error ) {\n\t\t\tif ( error.code !== 'term_exists' ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: error.data.term_id,\n\t\t\t\tname: term.name,\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction onUpdateTerms( newTermIds ) {\n\t\teditPost( { [ taxonomy.rest_base ]: newTermIds } );\n\t}\n\n\tfunction onChange( termNames ) {\n\t\tconst availableTerms = [\n\t\t\t...( terms ?? [] ),\n\t\t\t...( searchResults ?? [] ),\n\t\t];\n\t\tconst uniqueTerms = termNames.reduce( ( acc, name ) => {\n\t\t\tif (\n\t\t\t\t! acc.some( ( n ) => n.toLowerCase() === name.toLowerCase() )\n\t\t\t) {\n\t\t\t\tacc.push( name );\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, [] );\n\n\t\tconst newTermNames = uniqueTerms.filter(\n\t\t\t( termName ) =>\n\t\t\t\t! availableTerms.find( ( term ) =>\n\t\t\t\t\tisSameTermName( term.name, termName )\n\t\t\t\t)\n\t\t);\n\n\t\t// Optimistically update term values.\n\t\t// The selector will always re-fetch terms later.\n\t\tsetValues( uniqueTerms );\n\n\t\tif ( newTermNames.length === 0 ) {\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, availableTerms )\n\t\t\t);\n\t\t}\n\n\t\tif ( ! hasCreateAction ) {\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.all(\n\t\t\tnewTermNames.map( ( termName ) =>\n\t\t\t\tfindOrCreateTerm( { name: termName } )\n\t\t\t)\n\t\t).then( ( newTerms ) => {\n\t\t\tconst newAvailableTerms = availableTerms.concat( newTerms );\n\t\t\treturn onUpdateTerms(\n\t\t\t\ttermNamesToIds( uniqueTerms, newAvailableTerms )\n\t\t\t);\n\t\t} );\n\t}\n\n\tfunction appendTerm( newTerm ) {\n\t\tif ( termIds.includes( newTerm.id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newTermIds = [ ...termIds, newTerm.id ];\n\t\tconst defaultName = slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' );\n\t\tconst termAddedMessage = sprintf(\n\t\t\t/* translators: %s: term name. */\n\t\t\t_x( '%s added', 'term' ),\n\t\t\ttaxonomy?.labels?.singular_name ?? defaultName\n\t\t);\n\n\t\tspeak( termAddedMessage, 'assertive' );\n\t\tonUpdateTerms( newTermIds );\n\t}\n\n\tconst newTermLabel =\n\t\ttaxonomy?.labels?.add_new_item ??\n\t\t( slug === 'post_tag' ? __( 'Add new tag' ) : __( 'Add new Term' ) );\n\tconst singularName =\n\t\ttaxonomy?.labels?.singular_name ??\n\t\t( slug === 'post_tag' ? __( 'Tag' ) : __( 'Term' ) );\n\tconst termAddedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s added', 'term' ),\n\t\tsingularName\n\t);\n\tconst termRemovedLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( '%s removed', 'term' ),\n\t\tsingularName\n\t);\n\tconst removeTermLabel = sprintf(\n\t\t/* translators: %s: term name. */\n\t\t_x( 'Remove %s', 'term' ),\n\t\tsingularName\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<FormTokenField\n\t\t\t\tvalue={ values }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tmaxSuggestions={ MAX_TERMS_SUGGESTIONS }\n\t\t\t\tlabel={ newTermLabel }\n\t\t\t\tmessages={ {\n\t\t\t\t\tadded: termAddedLabel,\n\t\t\t\t\tremoved: termRemovedLabel,\n\t\t\t\t\tremove: removeTermLabel,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<MostUsedTerms taxonomy={ taxonomy } onSelect={ appendTerm } />\n\t\t</>\n\t);\n}\n\nexport default withFilters( 'editor.PostTaxonomyType' )( FlatTermSelector );\n"]}
@@ -75,7 +75,14 @@ function PostTitle(_, forwardedRef) {
75
75
  return;
76
76
  }
77
77
 
78
- const ownerDocument = ref.current.ownerDocument.defaultView.top.document;
78
+ const {
79
+ defaultView
80
+ } = ref.current.ownerDocument;
81
+ const {
82
+ name,
83
+ parent
84
+ } = defaultView;
85
+ const ownerDocument = name === 'editor-canvas' ? parent.document : defaultView.document;
79
86
  const {
80
87
  activeElement,
81
88
  body
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-title/index.js"],"names":["classnames","__","forwardRef","useEffect","useImperativeHandle","useRef","useState","decodeEntities","ENTER","useSelect","useDispatch","pasteHandler","store","blockEditorStore","__unstableUseRichText","useRichText","create","toHTMLString","insert","useMergeRefs","__unstableStripHTML","stripHTML","PostTypeSupportCheck","editorStore","REGEXP_NEWLINES","PostTitle","_","forwardedRef","ref","isSelected","setIsSelected","editPost","insertDefaultBlock","clearSelectedBlock","insertBlocks","isCleanNewPost","title","placeholder","hasFixedToolbar","select","getEditedPostAttribute","_isCleanNewPost","getSettings","titlePlaceholder","_hasFixedToolbar","focus","current","ownerDocument","defaultView","top","document","activeElement","body","onEnterPress","undefined","onInsertBlockAfter","blocks","onUpdate","newTitle","selection","setSelection","onSelect","onUnselect","onChange","value","replace","onKeyDown","event","keyCode","preventDefault","onPaste","clipboardData","plainText","html","getData","error1","error2","window","console","log","content","HTML","length","firstBlock","name","attributes","slice","newValue","start","end","className","decodedPlaceholder","richTextRef","selectionStart","selectionEnd","onSelectionChange","newStart","newEnd","sel","__unstableDisableFormats","preserveWhiteSpace"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tforwardRef,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { ENTER } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { pasteHandler } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\t__unstableUseRichText as useRichText,\n\tcreate,\n\ttoHTMLString,\n\tinsert,\n} from '@wordpress/rich-text';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport PostTypeSupportCheck from '../post-type-support-check';\nimport { store as editorStore } from '../../store';\n\n/**\n * Constants\n */\nconst REGEXP_NEWLINES = /[\\r\\n]+/g;\n\nfunction PostTitle( _, forwardedRef ) {\n\tconst ref = useRef();\n\tconst [ isSelected, setIsSelected ] = useState( false );\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { insertDefaultBlock, clearSelectedBlock, insertBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { isCleanNewPost, title, placeholder, hasFixedToolbar } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedPostAttribute, isCleanNewPost: _isCleanNewPost } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst { getSettings } = select( blockEditorStore );\n\t\t\tconst { titlePlaceholder, hasFixedToolbar: _hasFixedToolbar } =\n\t\t\t\tgetSettings();\n\n\t\t\treturn {\n\t\t\t\tisCleanNewPost: _isCleanNewPost(),\n\t\t\t\ttitle: getEditedPostAttribute( 'title' ),\n\t\t\t\tplaceholder: titlePlaceholder,\n\t\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseImperativeHandle( forwardedRef, () => ( {\n\t\tfocus: () => {\n\t\t\tref?.current?.focus();\n\t\t},\n\t} ) );\n\n\tuseEffect( () => {\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ownerDocument =\n\t\t\tref.current.ownerDocument.defaultView.top.document;\n\t\tconst { activeElement, body } = ownerDocument;\n\n\t\t// Only autofocus the title when the post is entirely empty. This should\n\t\t// only happen for a new post, which means we focus the title on new\n\t\t// post so the author can start typing right away, without needing to\n\t\t// click anything.\n\t\tif ( isCleanNewPost && ( ! activeElement || body === activeElement ) ) {\n\t\t\tref.current.focus();\n\t\t}\n\t}, [ isCleanNewPost ] );\n\n\tfunction onEnterPress() {\n\t\tinsertDefaultBlock( undefined, undefined, 0 );\n\t}\n\n\tfunction onInsertBlockAfter( blocks ) {\n\t\tinsertBlocks( blocks, 0 );\n\t}\n\n\tfunction onUpdate( newTitle ) {\n\t\teditPost( { title: newTitle } );\n\t}\n\n\tconst [ selection, setSelection ] = useState( {} );\n\n\tfunction onSelect() {\n\t\tsetIsSelected( true );\n\t\tclearSelectedBlock();\n\t}\n\n\tfunction onUnselect() {\n\t\tsetIsSelected( false );\n\t\tsetSelection( {} );\n\t}\n\n\tfunction onChange( value ) {\n\t\tonUpdate( value.replace( REGEXP_NEWLINES, ' ' ) );\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.keyCode === ENTER ) {\n\t\t\tevent.preventDefault();\n\t\t\tonEnterPress();\n\t\t}\n\t}\n\n\tfunction onPaste( event ) {\n\t\tconst clipboardData = event.clipboardData;\n\n\t\tlet plainText = '';\n\t\tlet html = '';\n\n\t\t// IE11 only supports `Text` as an argument for `getData` and will\n\t\t// otherwise throw an invalid argument error, so we try the standard\n\t\t// arguments first, then fallback to `Text` if they fail.\n\t\ttry {\n\t\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\t\thtml = clipboardData.getData( 'text/html' );\n\t\t} catch ( error1 ) {\n\t\t\ttry {\n\t\t\t\thtml = clipboardData.getData( 'Text' );\n\t\t\t} catch ( error2 ) {\n\t\t\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t\t\t// don't support clipboardData at all, so allow default\n\t\t\t\t// behaviour.\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\tconst content = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t} );\n\n\t\tevent.preventDefault();\n\n\t\tif ( ! content.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( typeof content !== 'string' ) {\n\t\t\tconst [ firstBlock ] = content;\n\n\t\t\tif (\n\t\t\t\t! title &&\n\t\t\t\t( firstBlock.name === 'core/heading' ||\n\t\t\t\t\tfirstBlock.name === 'core/paragraph' )\n\t\t\t) {\n\t\t\t\tonUpdate( stripHTML( firstBlock.attributes.content ) );\n\t\t\t\tonInsertBlockAfter( content.slice( 1 ) );\n\t\t\t} else {\n\t\t\t\tonInsertBlockAfter( content );\n\t\t\t}\n\t\t} else {\n\t\t\tconst value = {\n\t\t\t\t...create( { html: title } ),\n\t\t\t\t...selection,\n\t\t\t};\n\t\t\tconst newValue = insert(\n\t\t\t\tvalue,\n\t\t\t\tcreate( { html: stripHTML( content ) } )\n\t\t\t);\n\t\t\tonUpdate( toHTMLString( { value: newValue } ) );\n\t\t\tsetSelection( {\n\t\t\t\tstart: newValue.start,\n\t\t\t\tend: newValue.end,\n\t\t\t} );\n\t\t}\n\t}\n\n\t// The wp-block className is important for editor styles.\n\t// This same block is used in both the visual and the code editor.\n\tconst className = classnames(\n\t\t'wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text',\n\t\t{\n\t\t\t'is-selected': isSelected,\n\t\t\t'has-fixed-toolbar': hasFixedToolbar,\n\t\t}\n\t);\n\tconst decodedPlaceholder =\n\t\tdecodeEntities( placeholder ) || __( 'Add title' );\n\tconst { ref: richTextRef } = useRichText( {\n\t\tvalue: title,\n\t\tonChange,\n\t\tplaceholder: decodedPlaceholder,\n\t\tselectionStart: selection.start,\n\t\tselectionEnd: selection.end,\n\t\tonSelectionChange( newStart, newEnd ) {\n\t\t\tsetSelection( ( sel ) => {\n\t\t\t\tconst { start, end } = sel;\n\t\t\t\tif ( start === newStart && end === newEnd ) {\n\t\t\t\t\treturn sel;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstart: newStart,\n\t\t\t\t\tend: newEnd,\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t\t__unstableDisableFormats: true,\n\t\tpreserveWhiteSpace: true,\n\t} );\n\n\t/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */\n\treturn (\n\t\t<PostTypeSupportCheck supportKeys=\"title\">\n\t\t\t<h1\n\t\t\t\tref={ useMergeRefs( [ richTextRef, ref ] ) }\n\t\t\t\tcontentEditable\n\t\t\t\tclassName={ className }\n\t\t\t\taria-label={ decodedPlaceholder }\n\t\t\t\trole=\"textbox\"\n\t\t\t\taria-multiline=\"true\"\n\t\t\t\tonFocus={ onSelect }\n\t\t\t\tonBlur={ onUnselect }\n\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\tonKeyPress={ onUnselect }\n\t\t\t\tonPaste={ onPaste }\n\t\t\t/>\n\t\t</PostTypeSupportCheck>\n\t);\n\t/* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */\n}\n\nexport default forwardRef( PostTitle );\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-title/index.js"],"names":["classnames","__","forwardRef","useEffect","useImperativeHandle","useRef","useState","decodeEntities","ENTER","useSelect","useDispatch","pasteHandler","store","blockEditorStore","__unstableUseRichText","useRichText","create","toHTMLString","insert","useMergeRefs","__unstableStripHTML","stripHTML","PostTypeSupportCheck","editorStore","REGEXP_NEWLINES","PostTitle","_","forwardedRef","ref","isSelected","setIsSelected","editPost","insertDefaultBlock","clearSelectedBlock","insertBlocks","isCleanNewPost","title","placeholder","hasFixedToolbar","select","getEditedPostAttribute","_isCleanNewPost","getSettings","titlePlaceholder","_hasFixedToolbar","focus","current","defaultView","ownerDocument","name","parent","document","activeElement","body","onEnterPress","undefined","onInsertBlockAfter","blocks","onUpdate","newTitle","selection","setSelection","onSelect","onUnselect","onChange","value","replace","onKeyDown","event","keyCode","preventDefault","onPaste","clipboardData","plainText","html","getData","error1","error2","window","console","log","content","HTML","length","firstBlock","attributes","slice","newValue","start","end","className","decodedPlaceholder","richTextRef","selectionStart","selectionEnd","onSelectionChange","newStart","newEnd","sel","__unstableDisableFormats","preserveWhiteSpace"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tforwardRef,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { ENTER } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { pasteHandler } from '@wordpress/blocks';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport {\n\t__unstableUseRichText as useRichText,\n\tcreate,\n\ttoHTMLString,\n\tinsert,\n} from '@wordpress/rich-text';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport PostTypeSupportCheck from '../post-type-support-check';\nimport { store as editorStore } from '../../store';\n\n/**\n * Constants\n */\nconst REGEXP_NEWLINES = /[\\r\\n]+/g;\n\nfunction PostTitle( _, forwardedRef ) {\n\tconst ref = useRef();\n\tconst [ isSelected, setIsSelected ] = useState( false );\n\tconst { editPost } = useDispatch( editorStore );\n\tconst { insertDefaultBlock, clearSelectedBlock, insertBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { isCleanNewPost, title, placeholder, hasFixedToolbar } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedPostAttribute, isCleanNewPost: _isCleanNewPost } =\n\t\t\t\tselect( editorStore );\n\t\t\tconst { getSettings } = select( blockEditorStore );\n\t\t\tconst { titlePlaceholder, hasFixedToolbar: _hasFixedToolbar } =\n\t\t\t\tgetSettings();\n\n\t\t\treturn {\n\t\t\t\tisCleanNewPost: _isCleanNewPost(),\n\t\t\t\ttitle: getEditedPostAttribute( 'title' ),\n\t\t\t\tplaceholder: titlePlaceholder,\n\t\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseImperativeHandle( forwardedRef, () => ( {\n\t\tfocus: () => {\n\t\t\tref?.current?.focus();\n\t\t},\n\t} ) );\n\n\tuseEffect( () => {\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { defaultView } = ref.current.ownerDocument;\n\t\tconst { name, parent } = defaultView;\n\t\tconst ownerDocument =\n\t\t\tname === 'editor-canvas' ? parent.document : defaultView.document;\n\t\tconst { activeElement, body } = ownerDocument;\n\n\t\t// Only autofocus the title when the post is entirely empty. This should\n\t\t// only happen for a new post, which means we focus the title on new\n\t\t// post so the author can start typing right away, without needing to\n\t\t// click anything.\n\t\tif ( isCleanNewPost && ( ! activeElement || body === activeElement ) ) {\n\t\t\tref.current.focus();\n\t\t}\n\t}, [ isCleanNewPost ] );\n\n\tfunction onEnterPress() {\n\t\tinsertDefaultBlock( undefined, undefined, 0 );\n\t}\n\n\tfunction onInsertBlockAfter( blocks ) {\n\t\tinsertBlocks( blocks, 0 );\n\t}\n\n\tfunction onUpdate( newTitle ) {\n\t\teditPost( { title: newTitle } );\n\t}\n\n\tconst [ selection, setSelection ] = useState( {} );\n\n\tfunction onSelect() {\n\t\tsetIsSelected( true );\n\t\tclearSelectedBlock();\n\t}\n\n\tfunction onUnselect() {\n\t\tsetIsSelected( false );\n\t\tsetSelection( {} );\n\t}\n\n\tfunction onChange( value ) {\n\t\tonUpdate( value.replace( REGEXP_NEWLINES, ' ' ) );\n\t}\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.keyCode === ENTER ) {\n\t\t\tevent.preventDefault();\n\t\t\tonEnterPress();\n\t\t}\n\t}\n\n\tfunction onPaste( event ) {\n\t\tconst clipboardData = event.clipboardData;\n\n\t\tlet plainText = '';\n\t\tlet html = '';\n\n\t\t// IE11 only supports `Text` as an argument for `getData` and will\n\t\t// otherwise throw an invalid argument error, so we try the standard\n\t\t// arguments first, then fallback to `Text` if they fail.\n\t\ttry {\n\t\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\t\thtml = clipboardData.getData( 'text/html' );\n\t\t} catch ( error1 ) {\n\t\t\ttry {\n\t\t\t\thtml = clipboardData.getData( 'Text' );\n\t\t\t} catch ( error2 ) {\n\t\t\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t\t\t// don't support clipboardData at all, so allow default\n\t\t\t\t// behaviour.\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Allows us to ask for this information when we get a report.\n\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\tconst content = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t} );\n\n\t\tevent.preventDefault();\n\n\t\tif ( ! content.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( typeof content !== 'string' ) {\n\t\t\tconst [ firstBlock ] = content;\n\n\t\t\tif (\n\t\t\t\t! title &&\n\t\t\t\t( firstBlock.name === 'core/heading' ||\n\t\t\t\t\tfirstBlock.name === 'core/paragraph' )\n\t\t\t) {\n\t\t\t\tonUpdate( stripHTML( firstBlock.attributes.content ) );\n\t\t\t\tonInsertBlockAfter( content.slice( 1 ) );\n\t\t\t} else {\n\t\t\t\tonInsertBlockAfter( content );\n\t\t\t}\n\t\t} else {\n\t\t\tconst value = {\n\t\t\t\t...create( { html: title } ),\n\t\t\t\t...selection,\n\t\t\t};\n\t\t\tconst newValue = insert(\n\t\t\t\tvalue,\n\t\t\t\tcreate( { html: stripHTML( content ) } )\n\t\t\t);\n\t\t\tonUpdate( toHTMLString( { value: newValue } ) );\n\t\t\tsetSelection( {\n\t\t\t\tstart: newValue.start,\n\t\t\t\tend: newValue.end,\n\t\t\t} );\n\t\t}\n\t}\n\n\t// The wp-block className is important for editor styles.\n\t// This same block is used in both the visual and the code editor.\n\tconst className = classnames(\n\t\t'wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text',\n\t\t{\n\t\t\t'is-selected': isSelected,\n\t\t\t'has-fixed-toolbar': hasFixedToolbar,\n\t\t}\n\t);\n\tconst decodedPlaceholder =\n\t\tdecodeEntities( placeholder ) || __( 'Add title' );\n\tconst { ref: richTextRef } = useRichText( {\n\t\tvalue: title,\n\t\tonChange,\n\t\tplaceholder: decodedPlaceholder,\n\t\tselectionStart: selection.start,\n\t\tselectionEnd: selection.end,\n\t\tonSelectionChange( newStart, newEnd ) {\n\t\t\tsetSelection( ( sel ) => {\n\t\t\t\tconst { start, end } = sel;\n\t\t\t\tif ( start === newStart && end === newEnd ) {\n\t\t\t\t\treturn sel;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstart: newStart,\n\t\t\t\t\tend: newEnd,\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t\t__unstableDisableFormats: true,\n\t\tpreserveWhiteSpace: true,\n\t} );\n\n\t/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */\n\treturn (\n\t\t<PostTypeSupportCheck supportKeys=\"title\">\n\t\t\t<h1\n\t\t\t\tref={ useMergeRefs( [ richTextRef, ref ] ) }\n\t\t\t\tcontentEditable\n\t\t\t\tclassName={ className }\n\t\t\t\taria-label={ decodedPlaceholder }\n\t\t\t\trole=\"textbox\"\n\t\t\t\taria-multiline=\"true\"\n\t\t\t\tonFocus={ onSelect }\n\t\t\t\tonBlur={ onUnselect }\n\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\tonKeyPress={ onUnselect }\n\t\t\t\tonPaste={ onPaste }\n\t\t\t/>\n\t\t</PostTypeSupportCheck>\n\t);\n\t/* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */\n}\n\nexport default forwardRef( PostTitle );\n"]}
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import { createElement } from "@wordpress/element";
3
2
 
4
3
  /**
@@ -135,14 +134,15 @@ function PostVisibilityChoice({
135
134
  }) {
136
135
  return createElement("div", {
137
136
  className: "editor-post-visibility__choice"
138
- }, createElement("input", _extends({
137
+ }, createElement("input", {
139
138
  type: "radio",
140
139
  name: `editor-post-visibility__setting-${instanceId}`,
141
140
  value: value,
142
141
  id: `editor-post-${value}-${instanceId}`,
143
142
  "aria-describedby": `editor-post-${value}-${instanceId}-description`,
144
- className: "editor-post-visibility__radio"
145
- }, props)), createElement("label", {
143
+ className: "editor-post-visibility__radio",
144
+ ...props
145
+ }), createElement("label", {
146
146
  htmlFor: `editor-post-${value}-${instanceId}`,
147
147
  className: "editor-post-visibility__label"
148
148
  }, label), createElement("p", {