@wordpress/editor 12.5.4 → 12.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/post-featured-image/index.js +84 -41
  3. package/build/components/post-featured-image/index.js.map +1 -1
  4. package/build/components/post-text-editor/index.js +11 -0
  5. package/build/components/post-text-editor/index.js.map +1 -1
  6. package/build/components/post-title/index.js +13 -2
  7. package/build/components/post-title/index.js.map +1 -1
  8. package/build/components/post-visibility/index.js +132 -167
  9. package/build/components/post-visibility/index.js.map +1 -1
  10. package/build/components/post-visibility/label.js +5 -22
  11. package/build/components/post-visibility/label.js.map +1 -1
  12. package/build/components/post-visibility/utils.js +14 -13
  13. package/build/components/post-visibility/utils.js.map +1 -1
  14. package/build-module/components/post-featured-image/index.js +86 -42
  15. package/build-module/components/post-featured-image/index.js.map +1 -1
  16. package/build-module/components/post-text-editor/index.js +12 -1
  17. package/build-module/components/post-text-editor/index.js.map +1 -1
  18. package/build-module/components/post-title/index.js +12 -2
  19. package/build-module/components/post-title/index.js.map +1 -1
  20. package/build-module/components/post-visibility/index.js +132 -166
  21. package/build-module/components/post-visibility/index.js.map +1 -1
  22. package/build-module/components/post-visibility/label.js +5 -20
  23. package/build-module/components/post-visibility/label.js.map +1 -1
  24. package/build-module/components/post-visibility/utils.js +14 -13
  25. package/build-module/components/post-visibility/utils.js.map +1 -1
  26. package/build-style/style-rtl.css +42 -51
  27. package/build-style/style.css +42 -51
  28. package/package.json +28 -27
  29. package/src/components/autosave-monitor/test/index.js +3 -0
  30. package/src/components/post-featured-image/index.js +102 -69
  31. package/src/components/post-text-editor/index.js +14 -1
  32. package/src/components/post-title/index.js +16 -2
  33. package/src/components/post-visibility/index.js +130 -150
  34. package/src/components/post-visibility/label.js +6 -15
  35. package/src/components/post-visibility/style.scss +25 -20
  36. package/src/components/post-visibility/utils.js +7 -12
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 12.7.0 (2022-05-04)
6
+
7
+ ## 12.6.0 (2022-04-21)
8
+
5
9
  ## 12.5.0 (2022-04-08)
6
10
 
7
11
  ## 12.4.0 (2022-03-23)
@@ -17,6 +17,8 @@ var _hooks = require("@wordpress/hooks");
17
17
 
18
18
  var _components = require("@wordpress/components");
19
19
 
20
+ var _blob = require("@wordpress/blob");
21
+
20
22
  var _compose = require("@wordpress/compose");
21
23
 
22
24
  var _data = require("@wordpress/data");
@@ -45,6 +47,41 @@ const ALLOWED_MEDIA_TYPES = ['image']; // Used when labels from post type were n
45
47
  const DEFAULT_FEATURE_IMAGE_LABEL = (0, _i18n.__)('Featured image');
46
48
  const DEFAULT_SET_FEATURE_IMAGE_LABEL = (0, _i18n.__)('Set featured image');
47
49
  const DEFAULT_REMOVE_FEATURE_IMAGE_LABEL = (0, _i18n.__)('Remove image');
50
+ const instructions = (0, _element.createElement)("p", null, (0, _i18n.__)('To edit the featured image, you need permission to upload media.'));
51
+
52
+ function getMediaDetails(media, postId) {
53
+ if (!media) {
54
+ return {};
55
+ }
56
+
57
+ const defaultSize = (0, _hooks.applyFilters)('editor.PostFeaturedImage.imageSize', 'large', media.id, postId);
58
+
59
+ if ((0, _lodash.has)(media, ['media_details', 'sizes', defaultSize])) {
60
+ return {
61
+ mediaWidth: media.media_details.sizes[defaultSize].width,
62
+ mediaHeight: media.media_details.sizes[defaultSize].height,
63
+ mediaSourceUrl: media.media_details.sizes[defaultSize].source_url
64
+ };
65
+ } // Use fallbackSize when defaultSize is not available.
66
+
67
+
68
+ const fallbackSize = (0, _hooks.applyFilters)('editor.PostFeaturedImage.imageSize', 'thumbnail', media.id, postId);
69
+
70
+ if ((0, _lodash.has)(media, ['media_details', 'sizes', fallbackSize])) {
71
+ return {
72
+ mediaWidth: media.media_details.sizes[fallbackSize].width,
73
+ mediaHeight: media.media_details.sizes[fallbackSize].height,
74
+ mediaSourceUrl: media.media_details.sizes[fallbackSize].source_url
75
+ };
76
+ } // Use full image size when fallbackSize and defaultSize are not available.
77
+
78
+
79
+ return {
80
+ mediaWidth: media.media_details.width,
81
+ mediaHeight: media.media_details.height,
82
+ mediaSourceUrl: media.source_url
83
+ };
84
+ }
48
85
 
49
86
  function PostFeaturedImage(_ref) {
50
87
  var _media$media_details$, _media$media_details$2;
@@ -53,40 +90,46 @@ function PostFeaturedImage(_ref) {
53
90
  currentPostId,
54
91
  featuredImageId,
55
92
  onUpdateImage,
56
- onDropImage,
57
93
  onRemoveImage,
58
94
  media,
59
95
  postType,
60
- noticeUI
96
+ noticeUI,
97
+ noticeOperations
61
98
  } = _ref;
99
+ const [isLoading, setIsLoading] = (0, _element.useState)(false);
100
+ const mediaUpload = (0, _data.useSelect)(select => {
101
+ return select(_blockEditor.store).getSettings().mediaUpload;
102
+ }, []);
62
103
  const postLabel = (0, _lodash.get)(postType, ['labels'], {});
63
- const instructions = (0, _element.createElement)("p", null, (0, _i18n.__)('To edit the featured image, you need permission to upload media.'));
64
- let mediaWidth, mediaHeight, mediaSourceUrl;
65
-
66
- if (media) {
67
- const mediaSize = (0, _hooks.applyFilters)('editor.PostFeaturedImage.imageSize', 'post-thumbnail', media.id, currentPostId);
68
-
69
- if ((0, _lodash.has)(media, ['media_details', 'sizes', mediaSize])) {
70
- // Use mediaSize when available.
71
- mediaWidth = media.media_details.sizes[mediaSize].width;
72
- mediaHeight = media.media_details.sizes[mediaSize].height;
73
- mediaSourceUrl = media.media_details.sizes[mediaSize].source_url;
74
- } else {
75
- // Get fallbackMediaSize if mediaSize is not available.
76
- const fallbackMediaSize = (0, _hooks.applyFilters)('editor.PostFeaturedImage.imageSize', 'thumbnail', media.id, currentPostId);
77
-
78
- if ((0, _lodash.has)(media, ['media_details', 'sizes', fallbackMediaSize])) {
79
- // Use fallbackMediaSize when mediaSize is not available.
80
- mediaWidth = media.media_details.sizes[fallbackMediaSize].width;
81
- mediaHeight = media.media_details.sizes[fallbackMediaSize].height;
82
- mediaSourceUrl = media.media_details.sizes[fallbackMediaSize].source_url;
83
- } else {
84
- // Use full image size when mediaFallbackSize and mediaSize are not available.
85
- mediaWidth = media.media_details.width;
86
- mediaHeight = media.media_details.height;
87
- mediaSourceUrl = media.source_url;
104
+ const {
105
+ mediaWidth,
106
+ mediaHeight,
107
+ mediaSourceUrl
108
+ } = getMediaDetails(media, currentPostId);
109
+
110
+ function onDropFiles(filesList) {
111
+ mediaUpload({
112
+ allowedTypes: ['image'],
113
+ filesList,
114
+
115
+ onFileChange(_ref2) {
116
+ let [image] = _ref2;
117
+
118
+ if ((0, _blob.isBlobURL)(image === null || image === void 0 ? void 0 : image.url)) {
119
+ setIsLoading(true);
120
+ return;
121
+ }
122
+
123
+ onUpdateImage(image);
124
+ setIsLoading(false);
125
+ },
126
+
127
+ onError(message) {
128
+ noticeOperations.removeAllNotices();
129
+ noticeOperations.createErrorNotice(message);
88
130
  }
89
- }
131
+
132
+ });
90
133
  }
91
134
 
92
135
  return (0, _element.createElement)(_check.default, null, noticeUI, (0, _element.createElement)("div", {
@@ -104,10 +147,10 @@ function PostFeaturedImage(_ref) {
104
147
  unstableFeaturedImageFlow: true,
105
148
  allowedTypes: ALLOWED_MEDIA_TYPES,
106
149
  modalClass: "editor-post-featured-image__media-modal",
107
- render: _ref2 => {
150
+ render: _ref3 => {
108
151
  let {
109
152
  open
110
- } = _ref2;
153
+ } = _ref3;
111
154
  return (0, _element.createElement)("div", {
112
155
  className: "editor-post-featured-image__container"
113
156
  }, (0, _element.createElement)(_components.Button, {
@@ -122,27 +165,27 @@ function PostFeaturedImage(_ref) {
122
165
  }, (0, _element.createElement)("img", {
123
166
  src: mediaSourceUrl,
124
167
  alt: ""
125
- })), !!featuredImageId && !media && (0, _element.createElement)(_components.Spinner, null), !featuredImageId && (postLabel.set_featured_image || DEFAULT_SET_FEATURE_IMAGE_LABEL)), (0, _element.createElement)(_components.DropZone, {
126
- onFilesDrop: onDropImage
168
+ })), isLoading && (0, _element.createElement)(_components.Spinner, null), !featuredImageId && !isLoading && (postLabel.set_featured_image || DEFAULT_SET_FEATURE_IMAGE_LABEL)), (0, _element.createElement)(_components.DropZone, {
169
+ onFilesDrop: onDropFiles
127
170
  }));
128
171
  },
129
172
  value: featuredImageId
130
- })), !!featuredImageId && media && !media.isLoading && (0, _element.createElement)(_blockEditor.MediaUploadCheck, null, (0, _element.createElement)(_blockEditor.MediaUpload, {
173
+ })), !!featuredImageId && (0, _element.createElement)(_blockEditor.MediaUploadCheck, null, media && (0, _element.createElement)(_blockEditor.MediaUpload, {
131
174
  title: postLabel.featured_image || DEFAULT_FEATURE_IMAGE_LABEL,
132
175
  onSelect: onUpdateImage,
133
176
  unstableFeaturedImageFlow: true,
134
177
  allowedTypes: ALLOWED_MEDIA_TYPES,
135
178
  modalClass: "editor-post-featured-image__media-modal",
136
- render: _ref3 => {
179
+ render: _ref4 => {
137
180
  let {
138
181
  open
139
- } = _ref3;
182
+ } = _ref4;
140
183
  return (0, _element.createElement)(_components.Button, {
141
184
  onClick: open,
142
185
  variant: "secondary"
143
186
  }, (0, _i18n.__)('Replace Image'));
144
187
  }
145
- })), !!featuredImageId && (0, _element.createElement)(_blockEditor.MediaUploadCheck, null, (0, _element.createElement)(_components.Button, {
188
+ }), (0, _element.createElement)(_components.Button, {
146
189
  onClick: onRemoveImage,
147
190
  variant: "link",
148
191
  isDestructive: true
@@ -168,13 +211,13 @@ const applyWithSelect = (0, _data.withSelect)(select => {
168
211
  featuredImageId
169
212
  };
170
213
  });
171
- const applyWithDispatch = (0, _data.withDispatch)((dispatch, _ref4, _ref5) => {
214
+ const applyWithDispatch = (0, _data.withDispatch)((dispatch, _ref5, _ref6) => {
172
215
  let {
173
216
  noticeOperations
174
- } = _ref4;
217
+ } = _ref5;
175
218
  let {
176
219
  select
177
- } = _ref5;
220
+ } = _ref6;
178
221
  const {
179
222
  editPost
180
223
  } = dispatch(_store.store);
@@ -190,8 +233,8 @@ const applyWithDispatch = (0, _data.withDispatch)((dispatch, _ref4, _ref5) => {
190
233
  allowedTypes: ['image'],
191
234
  filesList,
192
235
 
193
- onFileChange(_ref6) {
194
- let [image] = _ref6;
236
+ onFileChange(_ref7) {
237
+ let [image] = _ref7;
195
238
  editPost({
196
239
  featured_media: image.id
197
240
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-featured-image/index.js"],"names":["ALLOWED_MEDIA_TYPES","DEFAULT_FEATURE_IMAGE_LABEL","DEFAULT_SET_FEATURE_IMAGE_LABEL","DEFAULT_REMOVE_FEATURE_IMAGE_LABEL","PostFeaturedImage","currentPostId","featuredImageId","onUpdateImage","onDropImage","onRemoveImage","media","postType","noticeUI","postLabel","instructions","mediaWidth","mediaHeight","mediaSourceUrl","mediaSize","id","media_details","sizes","width","height","source_url","fallbackMediaSize","alt_text","full","file","slug","featured_image","open","set_featured_image","isLoading","remove_featured_image","applyWithSelect","select","getMedia","getPostType","coreStore","getCurrentPostId","getEditedPostAttribute","editorStore","context","applyWithDispatch","dispatch","noticeOperations","editPost","image","featured_media","filesList","blockEditorStore","getSettings","mediaUpload","allowedTypes","onFileChange","onError","message","removeAllNotices","createErrorNotice","withNotices"],"mappings":";;;;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AAQA;;AACA;;AACA;;AAKA;;AAKA;;AACA;;AA/BA;AACA;AACA;;AAGA;AACA;AACA;;AAoBA;AACA;AACA;AAIA,MAAMA,mBAAmB,GAAG,CAAE,OAAF,CAA5B,C,CAEA;;AACA,MAAMC,2BAA2B,GAAG,cAAI,gBAAJ,CAApC;AACA,MAAMC,+BAA+B,GAAG,cAAI,oBAAJ,CAAxC;AACA,MAAMC,kCAAkC,GAAG,cAAI,cAAJ,CAA3C;;AAEA,SAASC,iBAAT,OASI;AAAA;;AAAA,MATwB;AAC3BC,IAAAA,aAD2B;AAE3BC,IAAAA,eAF2B;AAG3BC,IAAAA,aAH2B;AAI3BC,IAAAA,WAJ2B;AAK3BC,IAAAA,aAL2B;AAM3BC,IAAAA,KAN2B;AAO3BC,IAAAA,QAP2B;AAQ3BC,IAAAA;AAR2B,GASxB;AACH,QAAMC,SAAS,GAAG,iBAAKF,QAAL,EAAe,CAAE,QAAF,CAAf,EAA6B,EAA7B,CAAlB;AACA,QAAMG,YAAY,GACjB,uCACG,cACD,kEADC,CADH,CADD;AAQA,MAAIC,UAAJ,EAAgBC,WAAhB,EAA6BC,cAA7B;;AACA,MAAKP,KAAL,EAAa;AACZ,UAAMQ,SAAS,GAAG,yBACjB,oCADiB,EAEjB,gBAFiB,EAGjBR,KAAK,CAACS,EAHW,EAIjBd,aAJiB,CAAlB;;AAMA,QAAK,iBAAKK,KAAL,EAAY,CAAE,eAAF,EAAmB,OAAnB,EAA4BQ,SAA5B,CAAZ,CAAL,EAA6D;AAC5D;AACAH,MAAAA,UAAU,GAAGL,KAAK,CAACU,aAAN,CAAoBC,KAApB,CAA2BH,SAA3B,EAAuCI,KAApD;AACAN,MAAAA,WAAW,GAAGN,KAAK,CAACU,aAAN,CAAoBC,KAApB,CAA2BH,SAA3B,EAAuCK,MAArD;AACAN,MAAAA,cAAc,GAAGP,KAAK,CAACU,aAAN,CAAoBC,KAApB,CAA2BH,SAA3B,EAAuCM,UAAxD;AACA,KALD,MAKO;AACN;AACA,YAAMC,iBAAiB,GAAG,yBACzB,oCADyB,EAEzB,WAFyB,EAGzBf,KAAK,CAACS,EAHmB,EAIzBd,aAJyB,CAA1B;;AAMA,UACC,iBAAKK,KAAL,EAAY,CAAE,eAAF,EAAmB,OAAnB,EAA4Be,iBAA5B,CAAZ,CADD,EAEE;AACD;AACAV,QAAAA,UAAU,GACTL,KAAK,CAACU,aAAN,CAAoBC,KAApB,CAA2BI,iBAA3B,EAA+CH,KADhD;AAEAN,QAAAA,WAAW,GACVN,KAAK,CAACU,aAAN,CAAoBC,KAApB,CAA2BI,iBAA3B,EAA+CF,MADhD;AAEAN,QAAAA,cAAc,GACbP,KAAK,CAACU,aAAN,CAAoBC,KAApB,CAA2BI,iBAA3B,EAA+CD,UADhD;AAEA,OAVD,MAUO;AACN;AACAT,QAAAA,UAAU,GAAGL,KAAK,CAACU,aAAN,CAAoBE,KAAjC;AACAN,QAAAA,WAAW,GAAGN,KAAK,CAACU,aAAN,CAAoBG,MAAlC;AACAN,QAAAA,cAAc,GAAGP,KAAK,CAACc,UAAvB;AACA;AACD;AACD;;AAED,SACC,4BAAC,cAAD,QACGZ,QADH,EAEC;AAAK,IAAA,SAAS,EAAC;AAAf,KACGF,KAAK,IACN;AACC,IAAA,EAAE,EAAI,8BAA8BJ,eAAiB,cADtD;AAEC,IAAA,SAAS,EAAC;AAFX,KAIGI,KAAK,CAACgB,QAAN,IACD,oBACC;AACA,gBAAI,mBAAJ,CAFD,EAGChB,KAAK,CAACgB,QAHP,CALF,EAUG,CAAEhB,KAAK,CAACgB,QAAR,IACD,oBACC;AACA,gBACC,iEADD,CAFD,EAKC,0BAAAhB,KAAK,CAACU,aAAN,CAAoBC,KAApB,0GAA2BM,IAA3B,kFAAiCC,IAAjC,KACClB,KAAK,CAACmB,IANR,CAXF,CAFF,EAuBC,4BAAC,6BAAD;AAAkB,IAAA,QAAQ,EAAGf;AAA7B,KACC,4BAAC,wBAAD;AACC,IAAA,KAAK,EACJD,SAAS,CAACiB,cAAV,IACA7B,2BAHF;AAKC,IAAA,QAAQ,EAAGM,aALZ;AAMC,IAAA,yBAAyB,MAN1B;AAOC,IAAA,YAAY,EAAGP,mBAPhB;AAQC,IAAA,UAAU,EAAC,yCARZ;AASC,IAAA,MAAM,EAAG;AAAA,UAAE;AAAE+B,QAAAA;AAAF,OAAF;AAAA,aACR;AAAK,QAAA,SAAS,EAAC;AAAf,SACC,4BAAC,kBAAD;AACC,QAAA,SAAS,EACR,CAAEzB,eAAF,GACG,oCADH,GAEG,qCAJL;AAMC,QAAA,OAAO,EAAGyB,IANX;AAOC,sBACC,CAAEzB,eAAF,GACG,IADH,GAEG,cAAI,0BAAJ,CAVL;AAYC,4BACC,CAAEA,eAAF,GACG,IADH,GAEI,8BAA8BA,eAAiB;AAfrD,SAkBG,CAAC,CAAEA,eAAH,IAAsBI,KAAtB,IACD,4BAAC,6BAAD;AACC,QAAA,YAAY,EAAGK,UADhB;AAEC,QAAA,aAAa,EAAGC,WAFjB;AAGC,QAAA,QAAQ;AAHT,SAKC;AACC,QAAA,GAAG,EAAGC,cADP;AAEC,QAAA,GAAG,EAAC;AAFL,QALD,CAnBF,EA8BG,CAAC,CAAEX,eAAH,IAAsB,CAAEI,KAAxB,IACD,4BAAC,mBAAD,OA/BF,EAiCG,CAAEJ,eAAF,KACCO,SAAS,CAACmB,kBAAV,IACD9B,+BAFA,CAjCH,CADD,EAsCC,4BAAC,oBAAD;AAAU,QAAA,WAAW,EAAGM;AAAxB,QAtCD,CADQ;AAAA,KATV;AAmDC,IAAA,KAAK,EAAGF;AAnDT,IADD,CAvBD,EA8EG,CAAC,CAAEA,eAAH,IAAsBI,KAAtB,IAA+B,CAAEA,KAAK,CAACuB,SAAvC,IACD,4BAAC,6BAAD,QACC,4BAAC,wBAAD;AACC,IAAA,KAAK,EACJpB,SAAS,CAACiB,cAAV,IACA7B,2BAHF;AAKC,IAAA,QAAQ,EAAGM,aALZ;AAMC,IAAA,yBAAyB,MAN1B;AAOC,IAAA,YAAY,EAAGP,mBAPhB;AAQC,IAAA,UAAU,EAAC,yCARZ;AASC,IAAA,MAAM,EAAG;AAAA,UAAE;AAAE+B,QAAAA;AAAF,OAAF;AAAA,aACR,4BAAC,kBAAD;AAAQ,QAAA,OAAO,EAAGA,IAAlB;AAAyB,QAAA,OAAO,EAAC;AAAjC,SACG,cAAI,eAAJ,CADH,CADQ;AAAA;AATV,IADD,CA/EF,EAiGG,CAAC,CAAEzB,eAAH,IACD,4BAAC,6BAAD,QACC,4BAAC,kBAAD;AACC,IAAA,OAAO,EAAGG,aADX;AAEC,IAAA,OAAO,EAAC,MAFT;AAGC,IAAA,aAAa;AAHd,KAKGI,SAAS,CAACqB,qBAAV,IACD/B,kCANF,CADD,CAlGF,CAFD,CADD;AAmHA;;AAED,MAAMgC,eAAe,GAAG,sBAAcC,MAAF,IAAc;AACjD,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAA4BF,MAAM,CAAEG,eAAF,CAAxC;AACA,QAAM;AAAEC,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAA+CL,MAAM,CAAEM,YAAF,CAA3D;AACA,QAAMpC,eAAe,GAAGmC,sBAAsB,CAAE,gBAAF,CAA9C;AAEA,SAAO;AACN/B,IAAAA,KAAK,EAAEJ,eAAe,GACnB+B,QAAQ,CAAE/B,eAAF,EAAmB;AAAEqC,MAAAA,OAAO,EAAE;AAAX,KAAnB,CADW,GAEnB,IAHG;AAINtC,IAAAA,aAAa,EAAEmC,gBAAgB,EAJzB;AAKN7B,IAAAA,QAAQ,EAAE2B,WAAW,CAAEG,sBAAsB,CAAE,MAAF,CAAxB,CALf;AAMNnC,IAAAA;AANM,GAAP;AAQA,CAbuB,CAAxB;AAeA,MAAMsC,iBAAiB,GAAG,wBACzB,CAAEC,QAAF,mBAAkD;AAAA,MAAtC;AAAEC,IAAAA;AAAF,GAAsC;AAAA,MAAhB;AAAEV,IAAAA;AAAF,GAAgB;AACjD,QAAM;AAAEW,IAAAA;AAAF,MAAeF,QAAQ,CAAEH,YAAF,CAA7B;AACA,SAAO;AACNnC,IAAAA,aAAa,CAAEyC,KAAF,EAAU;AACtBD,MAAAA,QAAQ,CAAE;AAAEE,QAAAA,cAAc,EAAED,KAAK,CAAC7B;AAAxB,OAAF,CAAR;AACA,KAHK;;AAINX,IAAAA,WAAW,CAAE0C,SAAF,EAAc;AACxBd,MAAAA,MAAM,CAAEe,kBAAF,CAAN,CACEC,WADF,GAEEC,WAFF,CAEe;AACbC,QAAAA,YAAY,EAAE,CAAE,OAAF,CADD;AAEbJ,QAAAA,SAFa;;AAGbK,QAAAA,YAAY,QAAc;AAAA,cAAZ,CAAEP,KAAF,CAAY;AACzBD,UAAAA,QAAQ,CAAE;AAAEE,YAAAA,cAAc,EAAED,KAAK,CAAC7B;AAAxB,WAAF,CAAR;AACA,SALY;;AAMbqC,QAAAA,OAAO,CAAEC,OAAF,EAAY;AAClBX,UAAAA,gBAAgB,CAACY,gBAAjB;AACAZ,UAAAA,gBAAgB,CAACa,iBAAjB,CAAoCF,OAApC;AACA;;AATY,OAFf;AAaA,KAlBK;;AAmBNhD,IAAAA,aAAa,GAAG;AACfsC,MAAAA,QAAQ,CAAE;AAAEE,QAAAA,cAAc,EAAE;AAAlB,OAAF,CAAR;AACA;;AArBK,GAAP;AAuBA,CA1BwB,CAA1B;;eA6Be,sBACdW,uBADc,EAEdzB,eAFc,EAGdS,iBAHc,EAId,6BAAa,0BAAb,CAJc,EAKZxC,iBALY,C","sourcesContent":["/**\n * External dependencies\n */\nimport { has, get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { applyFilters } from '@wordpress/hooks';\nimport {\n\tDropZone,\n\tButton,\n\tSpinner,\n\tResponsiveWrapper,\n\twithNotices,\n\twithFilters,\n} from '@wordpress/components';\nimport { compose } from '@wordpress/compose';\nimport { withSelect, withDispatch } from '@wordpress/data';\nimport {\n\tMediaUpload,\n\tMediaUploadCheck,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport PostFeaturedImageCheck from './check';\nimport { store as editorStore } from '../../store';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\n\n// Used when labels from post type were not yet loaded or when they are not present.\nconst DEFAULT_FEATURE_IMAGE_LABEL = __( 'Featured image' );\nconst DEFAULT_SET_FEATURE_IMAGE_LABEL = __( 'Set featured image' );\nconst DEFAULT_REMOVE_FEATURE_IMAGE_LABEL = __( 'Remove image' );\n\nfunction PostFeaturedImage( {\n\tcurrentPostId,\n\tfeaturedImageId,\n\tonUpdateImage,\n\tonDropImage,\n\tonRemoveImage,\n\tmedia,\n\tpostType,\n\tnoticeUI,\n} ) {\n\tconst postLabel = get( postType, [ 'labels' ], {} );\n\tconst instructions = (\n\t\t<p>\n\t\t\t{ __(\n\t\t\t\t'To edit the featured image, you need permission to upload media.'\n\t\t\t) }\n\t\t</p>\n\t);\n\n\tlet mediaWidth, mediaHeight, mediaSourceUrl;\n\tif ( media ) {\n\t\tconst mediaSize = applyFilters(\n\t\t\t'editor.PostFeaturedImage.imageSize',\n\t\t\t'post-thumbnail',\n\t\t\tmedia.id,\n\t\t\tcurrentPostId\n\t\t);\n\t\tif ( has( media, [ 'media_details', 'sizes', mediaSize ] ) ) {\n\t\t\t// Use mediaSize when available.\n\t\t\tmediaWidth = media.media_details.sizes[ mediaSize ].width;\n\t\t\tmediaHeight = media.media_details.sizes[ mediaSize ].height;\n\t\t\tmediaSourceUrl = media.media_details.sizes[ mediaSize ].source_url;\n\t\t} else {\n\t\t\t// Get fallbackMediaSize if mediaSize is not available.\n\t\t\tconst fallbackMediaSize = applyFilters(\n\t\t\t\t'editor.PostFeaturedImage.imageSize',\n\t\t\t\t'thumbnail',\n\t\t\t\tmedia.id,\n\t\t\t\tcurrentPostId\n\t\t\t);\n\t\t\tif (\n\t\t\t\thas( media, [ 'media_details', 'sizes', fallbackMediaSize ] )\n\t\t\t) {\n\t\t\t\t// Use fallbackMediaSize when mediaSize is not available.\n\t\t\t\tmediaWidth =\n\t\t\t\t\tmedia.media_details.sizes[ fallbackMediaSize ].width;\n\t\t\t\tmediaHeight =\n\t\t\t\t\tmedia.media_details.sizes[ fallbackMediaSize ].height;\n\t\t\t\tmediaSourceUrl =\n\t\t\t\t\tmedia.media_details.sizes[ fallbackMediaSize ].source_url;\n\t\t\t} else {\n\t\t\t\t// Use full image size when mediaFallbackSize and mediaSize are not available.\n\t\t\t\tmediaWidth = media.media_details.width;\n\t\t\t\tmediaHeight = media.media_details.height;\n\t\t\t\tmediaSourceUrl = media.source_url;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (\n\t\t<PostFeaturedImageCheck>\n\t\t\t{ noticeUI }\n\t\t\t<div className=\"editor-post-featured-image\">\n\t\t\t\t{ media && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tid={ `editor-post-featured-image-${ featuredImageId }-describedby` }\n\t\t\t\t\t\tclassName=\"hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ media.alt_text &&\n\t\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t\t// Translators: %s: The selected image alt text.\n\t\t\t\t\t\t\t\t__( 'Current image: %s' ),\n\t\t\t\t\t\t\t\tmedia.alt_text\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! media.alt_text &&\n\t\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t\t// Translators: %s: The selected image filename.\n\t\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t\t'The current image has no alternative text. The file name is: %s'\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tmedia.media_details.sizes?.full?.file ||\n\t\t\t\t\t\t\t\t\tmedia.slug\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t<MediaUploadCheck fallback={ instructions }>\n\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tpostLabel.featured_image ||\n\t\t\t\t\t\t\tDEFAULT_FEATURE_IMAGE_LABEL\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ onUpdateImage }\n\t\t\t\t\t\tunstableFeaturedImageFlow\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\tmodalClass=\"editor-post-featured-image__media-modal\"\n\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t<div className=\"editor-post-featured-image__container\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\t! featuredImageId\n\t\t\t\t\t\t\t\t\t\t\t? 'editor-post-featured-image__toggle'\n\t\t\t\t\t\t\t\t\t\t\t: 'editor-post-featured-image__preview'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\t! featuredImageId\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: __( 'Edit or update the image' )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-describedby={\n\t\t\t\t\t\t\t\t\t\t! featuredImageId\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: `editor-post-featured-image-${ featuredImageId }-describedby`\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\t\t{ !! featuredImageId && media && (\n\t\t\t\t\t\t\t\t\t\t<ResponsiveWrapper\n\t\t\t\t\t\t\t\t\t\t\tnaturalWidth={ mediaWidth }\n\t\t\t\t\t\t\t\t\t\t\tnaturalHeight={ mediaHeight }\n\t\t\t\t\t\t\t\t\t\t\tisInline\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={ mediaSourceUrl }\n\t\t\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</ResponsiveWrapper>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ !! featuredImageId && ! media && (\n\t\t\t\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ ! featuredImageId &&\n\t\t\t\t\t\t\t\t\t\t( postLabel.set_featured_image ||\n\t\t\t\t\t\t\t\t\t\t\tDEFAULT_SET_FEATURE_IMAGE_LABEL ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t<DropZone onFilesDrop={ onDropImage } />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tvalue={ featuredImageId }\n\t\t\t\t\t/>\n\t\t\t\t</MediaUploadCheck>\n\t\t\t\t{ !! featuredImageId && media && ! media.isLoading && (\n\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\tpostLabel.featured_image ||\n\t\t\t\t\t\t\t\tDEFAULT_FEATURE_IMAGE_LABEL\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonSelect={ onUpdateImage }\n\t\t\t\t\t\t\tunstableFeaturedImageFlow\n\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\tmodalClass=\"editor-post-featured-image__media-modal\"\n\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t<Button onClick={ open } variant=\"secondary\">\n\t\t\t\t\t\t\t\t\t{ __( 'Replace Image' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t) }\n\t\t\t\t{ !! featuredImageId && (\n\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tonClick={ onRemoveImage }\n\t\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\t\tisDestructive\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ postLabel.remove_featured_image ||\n\t\t\t\t\t\t\t\tDEFAULT_REMOVE_FEATURE_IMAGE_LABEL }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</PostFeaturedImageCheck>\n\t);\n}\n\nconst applyWithSelect = withSelect( ( select ) => {\n\tconst { getMedia, getPostType } = select( coreStore );\n\tconst { getCurrentPostId, getEditedPostAttribute } = select( editorStore );\n\tconst featuredImageId = getEditedPostAttribute( 'featured_media' );\n\n\treturn {\n\t\tmedia: featuredImageId\n\t\t\t? getMedia( featuredImageId, { context: 'view' } )\n\t\t\t: null,\n\t\tcurrentPostId: getCurrentPostId(),\n\t\tpostType: getPostType( getEditedPostAttribute( 'type' ) ),\n\t\tfeaturedImageId,\n\t};\n} );\n\nconst applyWithDispatch = withDispatch(\n\t( dispatch, { noticeOperations }, { select } ) => {\n\t\tconst { editPost } = dispatch( editorStore );\n\t\treturn {\n\t\t\tonUpdateImage( image ) {\n\t\t\t\teditPost( { featured_media: image.id } );\n\t\t\t},\n\t\t\tonDropImage( filesList ) {\n\t\t\t\tselect( blockEditorStore )\n\t\t\t\t\t.getSettings()\n\t\t\t\t\t.mediaUpload( {\n\t\t\t\t\t\tallowedTypes: [ 'image' ],\n\t\t\t\t\t\tfilesList,\n\t\t\t\t\t\tonFileChange( [ image ] ) {\n\t\t\t\t\t\t\teditPost( { featured_media: image.id } );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError( message ) {\n\t\t\t\t\t\t\tnoticeOperations.removeAllNotices();\n\t\t\t\t\t\t\tnoticeOperations.createErrorNotice( message );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t},\n\t\t\tonRemoveImage() {\n\t\t\t\teditPost( { featured_media: 0 } );\n\t\t\t},\n\t\t};\n\t}\n);\n\nexport default compose(\n\twithNotices,\n\tapplyWithSelect,\n\tapplyWithDispatch,\n\twithFilters( 'editor.PostFeaturedImage' )\n)( PostFeaturedImage );\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-featured-image/index.js"],"names":["ALLOWED_MEDIA_TYPES","DEFAULT_FEATURE_IMAGE_LABEL","DEFAULT_SET_FEATURE_IMAGE_LABEL","DEFAULT_REMOVE_FEATURE_IMAGE_LABEL","instructions","getMediaDetails","media","postId","defaultSize","id","mediaWidth","media_details","sizes","width","mediaHeight","height","mediaSourceUrl","source_url","fallbackSize","PostFeaturedImage","currentPostId","featuredImageId","onUpdateImage","onRemoveImage","postType","noticeUI","noticeOperations","isLoading","setIsLoading","mediaUpload","select","blockEditorStore","getSettings","postLabel","onDropFiles","filesList","allowedTypes","onFileChange","image","url","onError","message","removeAllNotices","createErrorNotice","alt_text","full","file","slug","featured_image","open","set_featured_image","remove_featured_image","applyWithSelect","getMedia","getPostType","coreStore","getCurrentPostId","getEditedPostAttribute","editorStore","context","applyWithDispatch","dispatch","editPost","featured_media","onDropImage","withNotices"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { has, get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { applyFilters } from '@wordpress/hooks';\nimport {\n\tDropZone,\n\tButton,\n\tSpinner,\n\tResponsiveWrapper,\n\twithNotices,\n\twithFilters,\n} from '@wordpress/components';\nimport { isBlobURL } from '@wordpress/blob';\nimport { useState } from '@wordpress/element';\nimport { compose } from '@wordpress/compose';\nimport { useSelect, withDispatch, withSelect } from '@wordpress/data';\nimport {\n\tMediaUpload,\n\tMediaUploadCheck,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport PostFeaturedImageCheck from './check';\nimport { store as editorStore } from '../../store';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\n\n// Used when labels from post type were not yet loaded or when they are not present.\nconst DEFAULT_FEATURE_IMAGE_LABEL = __( 'Featured image' );\nconst DEFAULT_SET_FEATURE_IMAGE_LABEL = __( 'Set featured image' );\nconst DEFAULT_REMOVE_FEATURE_IMAGE_LABEL = __( 'Remove image' );\n\nconst instructions = (\n\t<p>\n\t\t{ __(\n\t\t\t'To edit the featured image, you need permission to upload media.'\n\t\t) }\n\t</p>\n);\n\nfunction getMediaDetails( media, postId ) {\n\tif ( ! media ) {\n\t\treturn {};\n\t}\n\n\tconst defaultSize = applyFilters(\n\t\t'editor.PostFeaturedImage.imageSize',\n\t\t'large',\n\t\tmedia.id,\n\t\tpostId\n\t);\n\tif ( has( media, [ 'media_details', 'sizes', defaultSize ] ) ) {\n\t\treturn {\n\t\t\tmediaWidth: media.media_details.sizes[ defaultSize ].width,\n\t\t\tmediaHeight: media.media_details.sizes[ defaultSize ].height,\n\t\t\tmediaSourceUrl: media.media_details.sizes[ defaultSize ].source_url,\n\t\t};\n\t}\n\n\t// Use fallbackSize when defaultSize is not available.\n\tconst fallbackSize = applyFilters(\n\t\t'editor.PostFeaturedImage.imageSize',\n\t\t'thumbnail',\n\t\tmedia.id,\n\t\tpostId\n\t);\n\tif ( has( media, [ 'media_details', 'sizes', fallbackSize ] ) ) {\n\t\treturn {\n\t\t\tmediaWidth: media.media_details.sizes[ fallbackSize ].width,\n\t\t\tmediaHeight: media.media_details.sizes[ fallbackSize ].height,\n\t\t\tmediaSourceUrl:\n\t\t\t\tmedia.media_details.sizes[ fallbackSize ].source_url,\n\t\t};\n\t}\n\n\t// Use full image size when fallbackSize and defaultSize are not available.\n\treturn {\n\t\tmediaWidth: media.media_details.width,\n\t\tmediaHeight: media.media_details.height,\n\t\tmediaSourceUrl: media.source_url,\n\t};\n}\n\nfunction PostFeaturedImage( {\n\tcurrentPostId,\n\tfeaturedImageId,\n\tonUpdateImage,\n\tonRemoveImage,\n\tmedia,\n\tpostType,\n\tnoticeUI,\n\tnoticeOperations,\n} ) {\n\tconst [ isLoading, setIsLoading ] = useState( false );\n\tconst mediaUpload = useSelect( ( select ) => {\n\t\treturn select( blockEditorStore ).getSettings().mediaUpload;\n\t}, [] );\n\tconst postLabel = get( postType, [ 'labels' ], {} );\n\tconst { mediaWidth, mediaHeight, mediaSourceUrl } = getMediaDetails(\n\t\tmedia,\n\t\tcurrentPostId\n\t);\n\n\tfunction onDropFiles( filesList ) {\n\t\tmediaUpload( {\n\t\t\tallowedTypes: [ 'image' ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tif ( isBlobURL( image?.url ) ) {\n\t\t\t\t\tsetIsLoading( true );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonUpdateImage( image );\n\t\t\t\tsetIsLoading( false );\n\t\t\t},\n\t\t\tonError( message ) {\n\t\t\t\tnoticeOperations.removeAllNotices();\n\t\t\t\tnoticeOperations.createErrorNotice( message );\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn (\n\t\t<PostFeaturedImageCheck>\n\t\t\t{ noticeUI }\n\t\t\t<div className=\"editor-post-featured-image\">\n\t\t\t\t{ media && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tid={ `editor-post-featured-image-${ featuredImageId }-describedby` }\n\t\t\t\t\t\tclassName=\"hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ media.alt_text &&\n\t\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t\t// Translators: %s: The selected image alt text.\n\t\t\t\t\t\t\t\t__( 'Current image: %s' ),\n\t\t\t\t\t\t\t\tmedia.alt_text\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! media.alt_text &&\n\t\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t\t// Translators: %s: The selected image filename.\n\t\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t\t'The current image has no alternative text. The file name is: %s'\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tmedia.media_details.sizes?.full?.file ||\n\t\t\t\t\t\t\t\t\tmedia.slug\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t<MediaUploadCheck fallback={ instructions }>\n\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tpostLabel.featured_image ||\n\t\t\t\t\t\t\tDEFAULT_FEATURE_IMAGE_LABEL\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonSelect={ onUpdateImage }\n\t\t\t\t\t\tunstableFeaturedImageFlow\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\tmodalClass=\"editor-post-featured-image__media-modal\"\n\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t<div className=\"editor-post-featured-image__container\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\t! featuredImageId\n\t\t\t\t\t\t\t\t\t\t\t? 'editor-post-featured-image__toggle'\n\t\t\t\t\t\t\t\t\t\t\t: 'editor-post-featured-image__preview'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\t! featuredImageId\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: __( 'Edit or update the image' )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-describedby={\n\t\t\t\t\t\t\t\t\t\t! featuredImageId\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: `editor-post-featured-image-${ featuredImageId }-describedby`\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\t\t{ !! featuredImageId && media && (\n\t\t\t\t\t\t\t\t\t\t<ResponsiveWrapper\n\t\t\t\t\t\t\t\t\t\t\tnaturalWidth={ mediaWidth }\n\t\t\t\t\t\t\t\t\t\t\tnaturalHeight={ mediaHeight }\n\t\t\t\t\t\t\t\t\t\t\tisInline\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={ mediaSourceUrl }\n\t\t\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</ResponsiveWrapper>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ isLoading && <Spinner /> }\n\t\t\t\t\t\t\t\t\t{ ! featuredImageId &&\n\t\t\t\t\t\t\t\t\t\t! isLoading &&\n\t\t\t\t\t\t\t\t\t\t( postLabel.set_featured_image ||\n\t\t\t\t\t\t\t\t\t\t\tDEFAULT_SET_FEATURE_IMAGE_LABEL ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t<DropZone onFilesDrop={ onDropFiles } />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tvalue={ featuredImageId }\n\t\t\t\t\t/>\n\t\t\t\t</MediaUploadCheck>\n\t\t\t\t{ !! featuredImageId && (\n\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t{ media && (\n\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\tpostLabel.featured_image ||\n\t\t\t\t\t\t\t\t\tDEFAULT_FEATURE_IMAGE_LABEL\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonSelect={ onUpdateImage }\n\t\t\t\t\t\t\t\tunstableFeaturedImageFlow\n\t\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\t\tmodalClass=\"editor-post-featured-image__media-modal\"\n\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Replace Image' ) }\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tonClick={ onRemoveImage }\n\t\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\t\tisDestructive\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ postLabel.remove_featured_image ||\n\t\t\t\t\t\t\t\tDEFAULT_REMOVE_FEATURE_IMAGE_LABEL }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</PostFeaturedImageCheck>\n\t);\n}\n\nconst applyWithSelect = withSelect( ( select ) => {\n\tconst { getMedia, getPostType } = select( coreStore );\n\tconst { getCurrentPostId, getEditedPostAttribute } = select( editorStore );\n\tconst featuredImageId = getEditedPostAttribute( 'featured_media' );\n\n\treturn {\n\t\tmedia: featuredImageId\n\t\t\t? getMedia( featuredImageId, { context: 'view' } )\n\t\t\t: null,\n\t\tcurrentPostId: getCurrentPostId(),\n\t\tpostType: getPostType( getEditedPostAttribute( 'type' ) ),\n\t\tfeaturedImageId,\n\t};\n} );\n\nconst applyWithDispatch = withDispatch(\n\t( dispatch, { noticeOperations }, { select } ) => {\n\t\tconst { editPost } = dispatch( editorStore );\n\t\treturn {\n\t\t\tonUpdateImage( image ) {\n\t\t\t\teditPost( { featured_media: image.id } );\n\t\t\t},\n\t\t\tonDropImage( filesList ) {\n\t\t\t\tselect( blockEditorStore )\n\t\t\t\t\t.getSettings()\n\t\t\t\t\t.mediaUpload( {\n\t\t\t\t\t\tallowedTypes: [ 'image' ],\n\t\t\t\t\t\tfilesList,\n\t\t\t\t\t\tonFileChange( [ image ] ) {\n\t\t\t\t\t\t\teditPost( { featured_media: image.id } );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError( message ) {\n\t\t\t\t\t\t\tnoticeOperations.removeAllNotices();\n\t\t\t\t\t\t\tnoticeOperations.createErrorNotice( message );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t},\n\t\t\tonRemoveImage() {\n\t\t\t\teditPost( { featured_media: 0 } );\n\t\t\t},\n\t\t};\n\t}\n);\n\nexport default compose(\n\twithNotices,\n\tapplyWithSelect,\n\tapplyWithDispatch,\n\twithFilters( 'editor.PostFeaturedImage' )\n)( PostFeaturedImage );\n"]}
@@ -43,6 +43,7 @@ function PostTextEditor() {
43
43
  const [value, setValue] = (0, _element.useState)(postContent);
44
44
  const [isDirty, setIsDirty] = (0, _element.useState)(false);
45
45
  const instanceId = (0, _compose.useInstanceId)(PostTextEditor);
46
+ const valueRef = (0, _element.useRef)();
46
47
 
47
48
  if (!isDirty && value !== postContent) {
48
49
  setValue(postContent);
@@ -83,6 +84,16 @@ function PostTextEditor() {
83
84
  }
84
85
  };
85
86
 
87
+ (0, _element.useEffect)(() => {
88
+ valueRef.current = value;
89
+ }, [value]); // Ensure changes aren't lost when component unmounts.
90
+
91
+ (0, _element.useEffect)(() => {
92
+ return () => {
93
+ const blocks = (0, _blocks.parse)(valueRef.current);
94
+ resetEditorBlocks(blocks);
95
+ };
96
+ }, []);
86
97
  return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.VisuallyHidden, {
87
98
  as: "label",
88
99
  htmlFor: `post-content-${instanceId}`
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-text-editor/index.js"],"names":["PostTextEditor","postContent","select","editorStore","getEditedPostContent","editPost","resetEditorBlocks","value","setValue","isDirty","setIsDirty","instanceId","onChange","event","newValue","target","content","stopEditing","blocks"],"mappings":";;;;;;;;;AASA;;AANA;;AAKA;;AAEA;;AACA;;AACA;;AACA;;AAKA;;AAlBA;AACA;AACA;;AAGA;AACA;AACA;;AAQA;AACA;AACA;AAGe,SAASA,cAAT,GAA0B;AACxC,QAAMC,WAAW,GAAG,qBACjBC,MAAF,IAAcA,MAAM,CAAEC,YAAF,CAAN,CAAsBC,oBAAtB,EADK,EAEnB,EAFmB,CAApB;AAKA,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAkC,uBAAaH,YAAb,CAAxC;AAEA,QAAM,CAAEI,KAAF,EAASC,QAAT,IAAsB,uBAAUP,WAAV,CAA5B;AACA,QAAM,CAAEQ,OAAF,EAAWC,UAAX,IAA0B,uBAAU,KAAV,CAAhC;AACA,QAAMC,UAAU,GAAG,4BAAeX,cAAf,CAAnB;;AAEA,MAAK,CAAES,OAAF,IAAaF,KAAK,KAAKN,WAA5B,EAA0C;AACzCO,IAAAA,QAAQ,CAAEP,WAAF,CAAR;AACA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,QAAMW,QAAQ,GAAKC,KAAF,IAAa;AAC7B,UAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAN,CAAaR,KAA9B;AACAF,IAAAA,QAAQ,CAAE;AAAEW,MAAAA,OAAO,EAAEF;AAAX,KAAF,CAAR;AACAN,IAAAA,QAAQ,CAAEM,QAAF,CAAR;AACAJ,IAAAA,UAAU,CAAE,IAAF,CAAV;AACA,GALD;AAOA;AACD;AACA;AACA;AACA;;;AACC,QAAMO,WAAW,GAAG,MAAM;AACzB,QAAKR,OAAL,EAAe;AACd,YAAMS,MAAM,GAAG,mBAAOX,KAAP,CAAf;AACAD,MAAAA,iBAAiB,CAAEY,MAAF,CAAjB;AACAR,MAAAA,UAAU,CAAE,KAAF,CAAV;AACA;AACD,GAND;;AAQA,SACC,qDACC,4BAAC,0BAAD;AACC,IAAA,EAAE,EAAC,OADJ;AAEC,IAAA,OAAO,EAAI,gBAAgBC,UAAY;AAFxC,KAIG,cAAI,mBAAJ,CAJH,CADD,EAOC,4BAAC,8BAAD;AACC,IAAA,YAAY,EAAC,KADd;AAEC,IAAA,GAAG,EAAC,MAFL;AAGC,IAAA,KAAK,EAAGJ,KAHT;AAIC,IAAA,QAAQ,EAAGK,QAJZ;AAKC,IAAA,MAAM,EAAGK,WALV;AAMC,IAAA,SAAS,EAAC,yBANX;AAOC,IAAA,EAAE,EAAI,gBAAgBN,UAAY,EAPnC;AAQC,IAAA,WAAW,EAAG,cAAI,iCAAJ;AARf,IAPD,CADD;AAoBA","sourcesContent":["/**\n * External dependencies\n */\nimport Textarea from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { parse } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostTextEditor() {\n\tconst postContent = useSelect(\n\t\t( select ) => select( editorStore ).getEditedPostContent(),\n\t\t[]\n\t);\n\n\tconst { editPost, resetEditorBlocks } = useDispatch( editorStore );\n\n\tconst [ value, setValue ] = useState( postContent );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst instanceId = useInstanceId( PostTextEditor );\n\n\tif ( ! isDirty && value !== postContent ) {\n\t\tsetValue( postContent );\n\t}\n\n\t/**\n\t * Handles a textarea change event to notify the onChange prop callback and\n\t * reflect the new value in the component's own state. This marks the start\n\t * of the user's edits, if not already changed, preventing future props\n\t * changes to value from replacing the rendered value. This is expected to\n\t * be followed by a reset to dirty state via `stopEditing`.\n\t *\n\t * @see stopEditing\n\t *\n\t * @param {Event} event Change event.\n\t */\n\tconst onChange = ( event ) => {\n\t\tconst newValue = event.target.value;\n\t\teditPost( { content: newValue } );\n\t\tsetValue( newValue );\n\t\tsetIsDirty( true );\n\t};\n\n\t/**\n\t * Function called when the user has completed their edits, responsible for\n\t * ensuring that changes, if made, are surfaced to the onPersist prop\n\t * callback and resetting dirty state.\n\t */\n\tconst stopEditing = () => {\n\t\tif ( isDirty ) {\n\t\t\tconst blocks = parse( value );\n\t\t\tresetEditorBlocks( blocks );\n\t\t\tsetIsDirty( false );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<VisuallyHidden\n\t\t\t\tas=\"label\"\n\t\t\t\thtmlFor={ `post-content-${ instanceId }` }\n\t\t\t>\n\t\t\t\t{ __( 'Type text or HTML' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t<Textarea\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonBlur={ stopEditing }\n\t\t\t\tclassName=\"editor-post-text-editor\"\n\t\t\t\tid={ `post-content-${ instanceId }` }\n\t\t\t\tplaceholder={ __( 'Start writing with text or HTML' ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-text-editor/index.js"],"names":["PostTextEditor","postContent","select","editorStore","getEditedPostContent","editPost","resetEditorBlocks","value","setValue","isDirty","setIsDirty","instanceId","valueRef","onChange","event","newValue","target","content","stopEditing","blocks","current"],"mappings":";;;;;;;;;AASA;;AANA;;AAKA;;AAEA;;AACA;;AACA;;AACA;;AAKA;;AAlBA;AACA;AACA;;AAGA;AACA;AACA;;AAQA;AACA;AACA;AAGe,SAASA,cAAT,GAA0B;AACxC,QAAMC,WAAW,GAAG,qBACjBC,MAAF,IAAcA,MAAM,CAAEC,YAAF,CAAN,CAAsBC,oBAAtB,EADK,EAEnB,EAFmB,CAApB;AAKA,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAkC,uBAAaH,YAAb,CAAxC;AAEA,QAAM,CAAEI,KAAF,EAASC,QAAT,IAAsB,uBAAUP,WAAV,CAA5B;AACA,QAAM,CAAEQ,OAAF,EAAWC,UAAX,IAA0B,uBAAU,KAAV,CAAhC;AACA,QAAMC,UAAU,GAAG,4BAAeX,cAAf,CAAnB;AACA,QAAMY,QAAQ,GAAG,sBAAjB;;AAEA,MAAK,CAAEH,OAAF,IAAaF,KAAK,KAAKN,WAA5B,EAA0C;AACzCO,IAAAA,QAAQ,CAAEP,WAAF,CAAR;AACA;AAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,QAAMY,QAAQ,GAAKC,KAAF,IAAa;AAC7B,UAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAN,CAAaT,KAA9B;AACAF,IAAAA,QAAQ,CAAE;AAAEY,MAAAA,OAAO,EAAEF;AAAX,KAAF,CAAR;AACAP,IAAAA,QAAQ,CAAEO,QAAF,CAAR;AACAL,IAAAA,UAAU,CAAE,IAAF,CAAV;AACA,GALD;AAOA;AACD;AACA;AACA;AACA;;;AACC,QAAMQ,WAAW,GAAG,MAAM;AACzB,QAAKT,OAAL,EAAe;AACd,YAAMU,MAAM,GAAG,mBAAOZ,KAAP,CAAf;AACAD,MAAAA,iBAAiB,CAAEa,MAAF,CAAjB;AACAT,MAAAA,UAAU,CAAE,KAAF,CAAV;AACA;AACD,GAND;;AAQA,0BAAW,MAAM;AAChBE,IAAAA,QAAQ,CAACQ,OAAT,GAAmBb,KAAnB;AACA,GAFD,EAEG,CAAEA,KAAF,CAFH,EAhDwC,CAoDxC;;AACA,0BAAW,MAAM;AAChB,WAAO,MAAM;AACZ,YAAMY,MAAM,GAAG,mBAAOP,QAAQ,CAACQ,OAAhB,CAAf;AACAd,MAAAA,iBAAiB,CAAEa,MAAF,CAAjB;AACA,KAHD;AAIA,GALD,EAKG,EALH;AAOA,SACC,qDACC,4BAAC,0BAAD;AACC,IAAA,EAAE,EAAC,OADJ;AAEC,IAAA,OAAO,EAAI,gBAAgBR,UAAY;AAFxC,KAIG,cAAI,mBAAJ,CAJH,CADD,EAOC,4BAAC,8BAAD;AACC,IAAA,YAAY,EAAC,KADd;AAEC,IAAA,GAAG,EAAC,MAFL;AAGC,IAAA,KAAK,EAAGJ,KAHT;AAIC,IAAA,QAAQ,EAAGM,QAJZ;AAKC,IAAA,MAAM,EAAGK,WALV;AAMC,IAAA,SAAS,EAAC,yBANX;AAOC,IAAA,EAAE,EAAI,gBAAgBP,UAAY,EAPnC;AAQC,IAAA,WAAW,EAAG,cAAI,iCAAJ;AARf,IAPD,CADD;AAoBA","sourcesContent":["/**\n * External dependencies\n */\nimport Textarea from 'react-autosize-textarea';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useEffect, useState, useRef } from '@wordpress/element';\nimport { parse } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useInstanceId } from '@wordpress/compose';\nimport { VisuallyHidden } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\nexport default function PostTextEditor() {\n\tconst postContent = useSelect(\n\t\t( select ) => select( editorStore ).getEditedPostContent(),\n\t\t[]\n\t);\n\n\tconst { editPost, resetEditorBlocks } = useDispatch( editorStore );\n\n\tconst [ value, setValue ] = useState( postContent );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst instanceId = useInstanceId( PostTextEditor );\n\tconst valueRef = useRef();\n\n\tif ( ! isDirty && value !== postContent ) {\n\t\tsetValue( postContent );\n\t}\n\n\t/**\n\t * Handles a textarea change event to notify the onChange prop callback and\n\t * reflect the new value in the component's own state. This marks the start\n\t * of the user's edits, if not already changed, preventing future props\n\t * changes to value from replacing the rendered value. This is expected to\n\t * be followed by a reset to dirty state via `stopEditing`.\n\t *\n\t * @see stopEditing\n\t *\n\t * @param {Event} event Change event.\n\t */\n\tconst onChange = ( event ) => {\n\t\tconst newValue = event.target.value;\n\t\teditPost( { content: newValue } );\n\t\tsetValue( newValue );\n\t\tsetIsDirty( true );\n\t};\n\n\t/**\n\t * Function called when the user has completed their edits, responsible for\n\t * ensuring that changes, if made, are surfaced to the onPersist prop\n\t * callback and resetting dirty state.\n\t */\n\tconst stopEditing = () => {\n\t\tif ( isDirty ) {\n\t\t\tconst blocks = parse( value );\n\t\t\tresetEditorBlocks( blocks );\n\t\t\tsetIsDirty( false );\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tvalueRef.current = value;\n\t}, [ value ] );\n\n\t// Ensure changes aren't lost when component unmounts.\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tconst blocks = parse( valueRef.current );\n\t\t\tresetEditorBlocks( blocks );\n\t\t};\n\t}, [] );\n\n\treturn (\n\t\t<>\n\t\t\t<VisuallyHidden\n\t\t\t\tas=\"label\"\n\t\t\t\thtmlFor={ `post-content-${ instanceId }` }\n\t\t\t>\n\t\t\t\t{ __( 'Type text or HTML' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t<Textarea\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tonBlur={ stopEditing }\n\t\t\t\tclassName=\"editor-post-text-editor\"\n\t\t\t\tid={ `post-content-${ instanceId }` }\n\t\t\t\tplaceholder={ __( 'Start writing with text or HTML' ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = PostTitle;
8
+ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
@@ -48,7 +48,7 @@ var _store = require("../../store");
48
48
  */
49
49
  const REGEXP_NEWLINES = /[\r\n]+/g;
50
50
 
51
- function PostTitle() {
51
+ function PostTitle(_, forwardedRef) {
52
52
  const ref = (0, _element.useRef)();
53
53
  const [isSelected, setIsSelected] = (0, _element.useState)(false);
54
54
  const {
@@ -86,6 +86,13 @@ function PostTitle() {
86
86
  hasFixedToolbar: _hasFixedToolbar
87
87
  };
88
88
  }, []);
89
+ (0, _element.useImperativeHandle)(forwardedRef, () => ({
90
+ focus: () => {
91
+ var _ref$current;
92
+
93
+ ref === null || ref === void 0 ? void 0 : (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
94
+ }
95
+ }));
89
96
  (0, _element.useEffect)(() => {
90
97
  if (!ref.current) {
91
98
  return;
@@ -243,4 +250,8 @@ function PostTitle() {
243
250
  }));
244
251
  /* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */
245
252
  }
253
+
254
+ var _default = (0, _element.forwardRef)(PostTitle);
255
+
256
+ exports.default = _default;
246
257
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/editor/src/components/post-title/index.js"],"names":["REGEXP_NEWLINES","PostTitle","ref","isSelected","setIsSelected","editPost","editorStore","insertDefaultBlock","clearSelectedBlock","insertBlocks","blockEditorStore","isCleanNewPost","title","placeholder","isFocusMode","hasFixedToolbar","select","getEditedPostAttribute","_isCleanNewPost","getSettings","titlePlaceholder","focusMode","_hasFixedToolbar","current","ownerDocument","activeElement","body","focus","onEnterPress","undefined","onInsertBlockAfter","blocks","onUpdate","newTitle","selection","setSelection","onSelect","onUnselect","onChange","value","replace","onKeyDown","event","keyCode","ENTER","preventDefault","onPaste","clipboardData","plainText","html","getData","error1","error2","window","console","log","content","HTML","length","firstBlock","name","attributes","slice","className","decodedPlaceholder","richTextRef","selectionStart","start","selectionEnd","end","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 { useEffect, useRef, useState } 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 { __unstableUseRichText as useRichText } from '@wordpress/rich-text';\nimport { useMergeRefs } from '@wordpress/compose';\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\nexport default function PostTitle() {\n\tconst ref = useRef();\n\tconst [ isSelected, setIsSelected ] = useState( false );\n\tconst { editPost } = useDispatch( editorStore );\n\tconst {\n\t\tinsertDefaultBlock,\n\t\tclearSelectedBlock,\n\t\tinsertBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst {\n\t\tisCleanNewPost,\n\t\ttitle,\n\t\tplaceholder,\n\t\tisFocusMode,\n\t\thasFixedToolbar,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetEditedPostAttribute,\n\t\t\tisCleanNewPost: _isCleanNewPost,\n\t\t} = select( editorStore );\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst {\n\t\t\ttitlePlaceholder,\n\t\t\tfocusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t} = getSettings();\n\n\t\treturn {\n\t\t\tisCleanNewPost: _isCleanNewPost(),\n\t\t\ttitle: getEditedPostAttribute( 'title' ),\n\t\t\tplaceholder: titlePlaceholder,\n\t\t\tisFocusMode: focusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\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 } = ref.current;\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\tif ( typeof content !== 'string' && content.length ) {\n\t\t\tevent.preventDefault();\n\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( 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}\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'is-focus-mode': isFocusMode,\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"]}
1
+ {"version":3,"sources":["@wordpress/editor/src/components/post-title/index.js"],"names":["REGEXP_NEWLINES","PostTitle","_","forwardedRef","ref","isSelected","setIsSelected","editPost","editorStore","insertDefaultBlock","clearSelectedBlock","insertBlocks","blockEditorStore","isCleanNewPost","title","placeholder","isFocusMode","hasFixedToolbar","select","getEditedPostAttribute","_isCleanNewPost","getSettings","titlePlaceholder","focusMode","_hasFixedToolbar","focus","current","ownerDocument","activeElement","body","onEnterPress","undefined","onInsertBlockAfter","blocks","onUpdate","newTitle","selection","setSelection","onSelect","onUnselect","onChange","value","replace","onKeyDown","event","keyCode","ENTER","preventDefault","onPaste","clipboardData","plainText","html","getData","error1","error2","window","console","log","content","HTML","length","firstBlock","name","attributes","slice","className","decodedPlaceholder","richTextRef","selectionStart","start","selectionEnd","end","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 { __unstableUseRichText as useRichText } from '@wordpress/rich-text';\nimport { useMergeRefs } from '@wordpress/compose';\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 {\n\t\tinsertDefaultBlock,\n\t\tclearSelectedBlock,\n\t\tinsertBlocks,\n\t} = useDispatch( blockEditorStore );\n\tconst {\n\t\tisCleanNewPost,\n\t\ttitle,\n\t\tplaceholder,\n\t\tisFocusMode,\n\t\thasFixedToolbar,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetEditedPostAttribute,\n\t\t\tisCleanNewPost: _isCleanNewPost,\n\t\t} = select( editorStore );\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst {\n\t\t\ttitlePlaceholder,\n\t\t\tfocusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\n\t\t} = getSettings();\n\n\t\treturn {\n\t\t\tisCleanNewPost: _isCleanNewPost(),\n\t\t\ttitle: getEditedPostAttribute( 'title' ),\n\t\t\tplaceholder: titlePlaceholder,\n\t\t\tisFocusMode: focusMode,\n\t\t\thasFixedToolbar: _hasFixedToolbar,\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 } = ref.current;\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\tif ( typeof content !== 'string' && content.length ) {\n\t\t\tevent.preventDefault();\n\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( 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}\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'is-focus-mode': isFocusMode,\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"]}