@wordpress/editor 14.44.1-next.v.202604201441.0 → 14.45.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 (322) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/collab-sidebar/{comment-menu-item.cjs → add-note-menu-item.cjs} +17 -14
  3. package/build/components/collab-sidebar/add-note-menu-item.cjs.map +7 -0
  4. package/build/components/collab-sidebar/{add-comment.cjs → add-note.cjs} +28 -41
  5. package/build/components/collab-sidebar/add-note.cjs.map +7 -0
  6. package/build/components/collab-sidebar/board-store.cjs +3 -0
  7. package/build/components/collab-sidebar/board-store.cjs.map +2 -2
  8. package/build/components/collab-sidebar/floating-container.cjs +4 -3
  9. package/build/components/collab-sidebar/floating-container.cjs.map +3 -3
  10. package/build/components/collab-sidebar/hooks.cjs +92 -135
  11. package/build/components/collab-sidebar/hooks.cjs.map +3 -3
  12. package/build/components/collab-sidebar/index.cjs +28 -79
  13. package/build/components/collab-sidebar/index.cjs.map +3 -3
  14. package/build/components/collab-sidebar/{comment-author-info.cjs → note-byline.cjs} +13 -9
  15. package/build/components/collab-sidebar/note-byline.cjs.map +7 -0
  16. package/build/components/collab-sidebar/note-card.cjs +58 -0
  17. package/build/components/collab-sidebar/note-card.cjs.map +7 -0
  18. package/build/components/collab-sidebar/{comment-form.cjs → note-form.cjs} +45 -36
  19. package/build/components/collab-sidebar/note-form.cjs.map +7 -0
  20. package/build/components/collab-sidebar/{comment-indicator-toolbar.cjs → note-indicator-toolbar.cjs} +31 -27
  21. package/build/components/collab-sidebar/note-indicator-toolbar.cjs.map +7 -0
  22. package/build/components/collab-sidebar/note-thread.cjs +321 -0
  23. package/build/components/collab-sidebar/note-thread.cjs.map +7 -0
  24. package/build/components/collab-sidebar/note.cjs +207 -0
  25. package/build/components/collab-sidebar/note.cjs.map +7 -0
  26. package/build/components/collab-sidebar/notes.cjs +237 -0
  27. package/build/components/collab-sidebar/notes.cjs.map +7 -0
  28. package/build/components/collab-sidebar/utils.cjs +23 -25
  29. package/build/components/collab-sidebar/utils.cjs.map +2 -2
  30. package/build/components/document-bar/index.cjs.map +3 -3
  31. package/build/components/error-boundary/index.cjs.map +3 -3
  32. package/build/components/list-view-sidebar/list-view-outline.cjs.map +3 -3
  33. package/build/components/media/media-editor-modal.cjs +93 -0
  34. package/build/components/media/media-editor-modal.cjs.map +7 -0
  35. package/build/components/more-menu/index.cjs +3 -2
  36. package/build/components/more-menu/index.cjs.map +2 -2
  37. package/build/components/post-actions/set-as-homepage.cjs.map +3 -3
  38. package/build/components/post-actions/set-as-posts-page.cjs.map +3 -3
  39. package/build/components/post-card-panel/index.cjs +2 -2
  40. package/build/components/post-card-panel/index.cjs.map +3 -3
  41. package/build/components/post-content-information/index.cjs.map +3 -3
  42. package/build/components/post-excerpt/panel.cjs.map +3 -3
  43. package/build/components/post-last-edited-panel/index.cjs.map +3 -3
  44. package/build/components/post-preview-button/index.cjs +3 -2
  45. package/build/components/post-preview-button/index.cjs.map +2 -2
  46. package/build/components/post-publish-button/index.cjs +2 -2
  47. package/build/components/post-publish-button/index.cjs.map +2 -2
  48. package/build/components/post-publish-button/label.cjs +4 -2
  49. package/build/components/post-publish-button/label.cjs.map +2 -2
  50. package/build/components/post-publish-panel/postpublish.cjs +3 -2
  51. package/build/components/post-publish-panel/postpublish.cjs.map +2 -2
  52. package/build/components/post-revisions-panel/index.cjs +2 -2
  53. package/build/components/post-revisions-panel/index.cjs.map +2 -2
  54. package/build/components/post-revisions-preview/diff-markers.cjs +1 -1
  55. package/build/components/post-revisions-preview/diff-markers.cjs.map +2 -2
  56. package/build/components/post-revisions-preview/revisions-slider.cjs +1 -0
  57. package/build/components/post-revisions-preview/revisions-slider.cjs.map +2 -2
  58. package/build/components/post-saved-state/index.cjs +4 -1
  59. package/build/components/post-saved-state/index.cjs.map +2 -2
  60. package/build/components/post-text-editor/index.cjs +3 -4
  61. package/build/components/post-text-editor/index.cjs.map +2 -2
  62. package/build/components/preview-dropdown/index.cjs +3 -2
  63. package/build/components/preview-dropdown/index.cjs.map +2 -2
  64. package/build/components/provider/index.cjs +3 -1
  65. package/build/components/provider/index.cjs.map +3 -3
  66. package/build/components/provider/use-block-editor-settings.cjs +7 -1
  67. package/build/components/provider/use-block-editor-settings.cjs.map +3 -3
  68. package/build/components/provider/use-upload-save-lock.cjs +2 -12
  69. package/build/components/provider/use-upload-save-lock.cjs.map +2 -2
  70. package/build/components/resizable-editor/resize-handle.cjs +2 -1
  71. package/build/components/resizable-editor/resize-handle.cjs.map +2 -2
  72. package/build/components/revision-created-panel/index.cjs.map +3 -3
  73. package/build/components/site-discussion/index.cjs.map +2 -2
  74. package/build/components/template-actions-panel/classic-theme-content.cjs.map +2 -2
  75. package/build/components/template-part-menu-items/convert-to-regular.cjs +54 -11
  76. package/build/components/template-part-menu-items/convert-to-regular.cjs.map +3 -3
  77. package/build/components/visual-editor/index.cjs +5 -22
  78. package/build/components/visual-editor/index.cjs.map +2 -2
  79. package/build/store/private-actions.cjs +0 -8
  80. package/build/store/private-actions.cjs.map +2 -2
  81. package/build/store/private-selectors.cjs +0 -5
  82. package/build/store/private-selectors.cjs.map +2 -2
  83. package/build/store/reducer.cjs +0 -10
  84. package/build/store/reducer.cjs.map +2 -2
  85. package/build/utils/media-finalize/index.cjs +3 -2
  86. package/build/utils/media-finalize/index.cjs.map +2 -2
  87. package/build/utils/media-upload/index.cjs +14 -25
  88. package/build/utils/media-upload/index.cjs.map +2 -2
  89. package/build-module/components/collab-sidebar/{comment-menu-item.mjs → add-note-menu-item.mjs} +10 -11
  90. package/build-module/components/collab-sidebar/add-note-menu-item.mjs.map +7 -0
  91. package/build-module/components/collab-sidebar/{add-comment.mjs → add-note.mjs} +26 -29
  92. package/build-module/components/collab-sidebar/add-note.mjs.map +7 -0
  93. package/build-module/components/collab-sidebar/board-store.mjs +3 -0
  94. package/build-module/components/collab-sidebar/board-store.mjs.map +2 -2
  95. package/build-module/components/collab-sidebar/floating-container.mjs +4 -3
  96. package/build-module/components/collab-sidebar/floating-container.mjs.map +2 -2
  97. package/build-module/components/collab-sidebar/hooks.mjs +91 -137
  98. package/build-module/components/collab-sidebar/hooks.mjs.map +2 -2
  99. package/build-module/components/collab-sidebar/index.mjs +29 -84
  100. package/build-module/components/collab-sidebar/index.mjs.map +2 -2
  101. package/build-module/components/collab-sidebar/{comment-author-info.mjs → note-byline.mjs} +7 -7
  102. package/build-module/components/collab-sidebar/note-byline.mjs.map +7 -0
  103. package/build-module/components/collab-sidebar/note-card.mjs +33 -0
  104. package/build-module/components/collab-sidebar/note-card.mjs.map +7 -0
  105. package/build-module/components/collab-sidebar/note-form.mjs +84 -0
  106. package/build-module/components/collab-sidebar/note-form.mjs.map +7 -0
  107. package/build-module/components/collab-sidebar/{comment-indicator-toolbar.mjs → note-indicator-toolbar.mjs} +25 -29
  108. package/build-module/components/collab-sidebar/note-indicator-toolbar.mjs.map +7 -0
  109. package/build-module/components/collab-sidebar/note-thread.mjs +289 -0
  110. package/build-module/components/collab-sidebar/note-thread.mjs.map +7 -0
  111. package/build-module/components/collab-sidebar/note.mjs +176 -0
  112. package/build-module/components/collab-sidebar/note.mjs.map +7 -0
  113. package/build-module/components/collab-sidebar/notes.mjs +215 -0
  114. package/build-module/components/collab-sidebar/notes.mjs.map +7 -0
  115. package/build-module/components/collab-sidebar/utils.mjs +19 -21
  116. package/build-module/components/collab-sidebar/utils.mjs.map +2 -2
  117. package/build-module/components/document-bar/index.mjs +3 -3
  118. package/build-module/components/document-bar/index.mjs.map +2 -2
  119. package/build-module/components/error-boundary/index.mjs +2 -2
  120. package/build-module/components/error-boundary/index.mjs.map +2 -2
  121. package/build-module/components/list-view-sidebar/list-view-outline.mjs +5 -5
  122. package/build-module/components/list-view-sidebar/list-view-outline.mjs.map +2 -2
  123. package/build-module/components/media/media-editor-modal.mjs +62 -0
  124. package/build-module/components/media/media-editor-modal.mjs.map +7 -0
  125. package/build-module/components/more-menu/index.mjs +3 -7
  126. package/build-module/components/more-menu/index.mjs.map +2 -2
  127. package/build-module/components/post-actions/set-as-homepage.mjs +2 -2
  128. package/build-module/components/post-actions/set-as-homepage.mjs.map +2 -2
  129. package/build-module/components/post-actions/set-as-posts-page.mjs +2 -2
  130. package/build-module/components/post-actions/set-as-posts-page.mjs.map +2 -2
  131. package/build-module/components/post-card-panel/index.mjs +5 -5
  132. package/build-module/components/post-card-panel/index.mjs.map +2 -2
  133. package/build-module/components/post-content-information/index.mjs +2 -2
  134. package/build-module/components/post-content-information/index.mjs.map +2 -2
  135. package/build-module/components/post-excerpt/panel.mjs +2 -2
  136. package/build-module/components/post-excerpt/panel.mjs.map +2 -2
  137. package/build-module/components/post-last-edited-panel/index.mjs +2 -2
  138. package/build-module/components/post-last-edited-panel/index.mjs.map +2 -2
  139. package/build-module/components/post-preview-button/index.mjs +3 -2
  140. package/build-module/components/post-preview-button/index.mjs.map +2 -2
  141. package/build-module/components/post-publish-button/index.mjs +2 -2
  142. package/build-module/components/post-publish-button/index.mjs.map +2 -2
  143. package/build-module/components/post-publish-button/label.mjs +4 -2
  144. package/build-module/components/post-publish-button/label.mjs.map +2 -2
  145. package/build-module/components/post-publish-panel/postpublish.mjs +3 -3
  146. package/build-module/components/post-publish-panel/postpublish.mjs.map +2 -2
  147. package/build-module/components/post-revisions-panel/index.mjs +2 -2
  148. package/build-module/components/post-revisions-panel/index.mjs.map +2 -2
  149. package/build-module/components/post-revisions-preview/diff-markers.mjs +1 -1
  150. package/build-module/components/post-revisions-preview/diff-markers.mjs.map +2 -2
  151. package/build-module/components/post-revisions-preview/revisions-slider.mjs +1 -0
  152. package/build-module/components/post-revisions-preview/revisions-slider.mjs.map +2 -2
  153. package/build-module/components/post-saved-state/index.mjs +4 -1
  154. package/build-module/components/post-saved-state/index.mjs.map +2 -2
  155. package/build-module/components/post-text-editor/index.mjs +2 -3
  156. package/build-module/components/post-text-editor/index.mjs.map +2 -2
  157. package/build-module/components/preview-dropdown/index.mjs +2 -2
  158. package/build-module/components/preview-dropdown/index.mjs.map +2 -2
  159. package/build-module/components/provider/index.mjs +3 -1
  160. package/build-module/components/provider/index.mjs.map +2 -2
  161. package/build-module/components/provider/use-block-editor-settings.mjs +7 -1
  162. package/build-module/components/provider/use-block-editor-settings.mjs.map +2 -2
  163. package/build-module/components/provider/use-upload-save-lock.mjs +2 -12
  164. package/build-module/components/provider/use-upload-save-lock.mjs.map +2 -2
  165. package/build-module/components/resizable-editor/resize-handle.mjs +2 -5
  166. package/build-module/components/resizable-editor/resize-handle.mjs.map +2 -2
  167. package/build-module/components/revision-created-panel/index.mjs +2 -2
  168. package/build-module/components/revision-created-panel/index.mjs.map +2 -2
  169. package/build-module/components/site-discussion/index.mjs +2 -2
  170. package/build-module/components/site-discussion/index.mjs.map +2 -2
  171. package/build-module/components/template-actions-panel/classic-theme-content.mjs +2 -2
  172. package/build-module/components/template-actions-panel/classic-theme-content.mjs.map +2 -2
  173. package/build-module/components/template-part-menu-items/convert-to-regular.mjs +60 -14
  174. package/build-module/components/template-part-menu-items/convert-to-regular.mjs.map +2 -2
  175. package/build-module/components/visual-editor/index.mjs +5 -22
  176. package/build-module/components/visual-editor/index.mjs.map +2 -2
  177. package/build-module/store/private-actions.mjs +0 -7
  178. package/build-module/store/private-actions.mjs.map +2 -2
  179. package/build-module/store/private-selectors.mjs +0 -4
  180. package/build-module/store/private-selectors.mjs.map +2 -2
  181. package/build-module/store/reducer.mjs +0 -9
  182. package/build-module/store/reducer.mjs.map +2 -2
  183. package/build-module/utils/media-finalize/index.mjs +3 -2
  184. package/build-module/utils/media-finalize/index.mjs.map +2 -2
  185. package/build-module/utils/media-upload/index.mjs +14 -25
  186. package/build-module/utils/media-upload/index.mjs.map +2 -2
  187. package/build-style/style-rtl.css +386 -142
  188. package/build-style/style.css +386 -142
  189. package/build-types/components/collab-sidebar/add-note-menu-item.d.ts +5 -0
  190. package/build-types/components/collab-sidebar/add-note-menu-item.d.ts.map +1 -0
  191. package/build-types/components/collab-sidebar/add-note.d.ts +6 -0
  192. package/build-types/components/collab-sidebar/add-note.d.ts.map +1 -0
  193. package/build-types/components/collab-sidebar/board-store.d.ts +1 -0
  194. package/build-types/components/collab-sidebar/board-store.d.ts.map +1 -1
  195. package/build-types/components/collab-sidebar/floating-container.d.ts.map +1 -1
  196. package/build-types/components/collab-sidebar/hooks.d.ts +8 -21
  197. package/build-types/components/collab-sidebar/hooks.d.ts.map +1 -1
  198. package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
  199. package/build-types/components/collab-sidebar/note-byline.d.ts +7 -0
  200. package/build-types/components/collab-sidebar/note-byline.d.ts.map +1 -0
  201. package/build-types/components/collab-sidebar/note-card.d.ts +8 -0
  202. package/build-types/components/collab-sidebar/note-card.d.ts.map +1 -0
  203. package/build-types/components/collab-sidebar/note-form.d.ts +7 -0
  204. package/build-types/components/collab-sidebar/note-form.d.ts.map +1 -0
  205. package/build-types/components/collab-sidebar/note-indicator-toolbar.d.ts +5 -0
  206. package/build-types/components/collab-sidebar/note-indicator-toolbar.d.ts.map +1 -0
  207. package/build-types/components/collab-sidebar/note-thread.d.ts +11 -0
  208. package/build-types/components/collab-sidebar/note-thread.d.ts.map +1 -0
  209. package/build-types/components/collab-sidebar/note.d.ts +9 -0
  210. package/build-types/components/collab-sidebar/note.d.ts.map +1 -0
  211. package/build-types/components/collab-sidebar/notes.d.ts +7 -0
  212. package/build-types/components/collab-sidebar/notes.d.ts.map +1 -0
  213. package/build-types/components/collab-sidebar/utils.d.ts +21 -20
  214. package/build-types/components/collab-sidebar/utils.d.ts.map +1 -1
  215. package/build-types/components/media/media-editor-modal.d.ts +11 -0
  216. package/build-types/components/media/media-editor-modal.d.ts.map +1 -0
  217. package/build-types/components/more-menu/index.d.ts.map +1 -1
  218. package/build-types/components/post-preview-button/index.d.ts.map +1 -1
  219. package/build-types/components/post-publish-button/index.d.ts.map +1 -1
  220. package/build-types/components/post-publish-button/label.d.ts.map +1 -1
  221. package/build-types/components/post-revisions-preview/revisions-slider.d.ts.map +1 -1
  222. package/build-types/components/post-saved-state/index.d.ts.map +1 -1
  223. package/build-types/components/provider/index.d.ts.map +1 -1
  224. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  225. package/build-types/components/provider/use-upload-save-lock.d.ts +0 -2
  226. package/build-types/components/provider/use-upload-save-lock.d.ts.map +1 -1
  227. package/build-types/components/resizable-editor/resize-handle.d.ts.map +1 -1
  228. package/build-types/components/template-part-menu-items/convert-to-regular.d.ts.map +1 -1
  229. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  230. package/build-types/store/private-actions.d.ts +0 -7
  231. package/build-types/store/private-actions.d.ts.map +1 -1
  232. package/build-types/store/private-selectors.d.ts +0 -7
  233. package/build-types/store/private-selectors.d.ts.map +1 -1
  234. package/build-types/store/reducer.d.ts +0 -10
  235. package/build-types/store/reducer.d.ts.map +1 -1
  236. package/build-types/utils/media-finalize/index.d.ts +1 -1
  237. package/build-types/utils/media-finalize/index.d.ts.map +1 -1
  238. package/build-types/utils/media-upload/index.d.ts.map +1 -1
  239. package/package.json +46 -46
  240. package/src/components/collab-sidebar/README.md +117 -0
  241. package/src/components/collab-sidebar/{comment-menu-item.js → add-note-menu-item.js} +8 -10
  242. package/src/components/collab-sidebar/{add-comment.js → add-note.js} +20 -21
  243. package/src/components/collab-sidebar/board-store.js +4 -2
  244. package/src/components/collab-sidebar/floating-container.js +5 -4
  245. package/src/components/collab-sidebar/hooks.js +115 -175
  246. package/src/components/collab-sidebar/index.js +35 -95
  247. package/src/components/collab-sidebar/{comment-author-info.js → note-byline.js} +5 -6
  248. package/src/components/collab-sidebar/note-card.js +36 -0
  249. package/src/components/collab-sidebar/{comment-form.js → note-form.js} +25 -27
  250. package/src/components/collab-sidebar/{comment-indicator-toolbar.js → note-indicator-toolbar.js} +29 -32
  251. package/src/components/collab-sidebar/note-thread.js +331 -0
  252. package/src/components/collab-sidebar/note.js +209 -0
  253. package/src/components/collab-sidebar/notes.js +276 -0
  254. package/src/components/collab-sidebar/style.scss +21 -11
  255. package/src/components/collab-sidebar/test/utils.js +65 -63
  256. package/src/components/collab-sidebar/utils.js +33 -35
  257. package/src/components/document-bar/index.js +4 -4
  258. package/src/components/error-boundary/index.js +3 -3
  259. package/src/components/list-view-sidebar/list-view-outline.js +6 -6
  260. package/src/components/media/media-editor-modal.js +95 -0
  261. package/src/components/more-menu/index.js +3 -7
  262. package/src/components/post-actions/set-as-homepage.js +2 -2
  263. package/src/components/post-actions/set-as-posts-page.js +2 -2
  264. package/src/components/post-card-panel/index.js +7 -7
  265. package/src/components/post-content-information/index.js +3 -3
  266. package/src/components/post-excerpt/panel.js +3 -3
  267. package/src/components/post-last-edited-panel/index.js +3 -3
  268. package/src/components/post-preview-button/index.js +3 -2
  269. package/src/components/post-publish-button/index.js +6 -5
  270. package/src/components/post-publish-button/label.js +3 -1
  271. package/src/components/post-publish-panel/postpublish.js +2 -2
  272. package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +8 -14
  273. package/src/components/post-revisions-panel/index.js +3 -3
  274. package/src/components/post-revisions-preview/diff-markers.js +1 -1
  275. package/src/components/post-revisions-preview/revisions-slider.js +1 -0
  276. package/src/components/post-saved-state/index.js +4 -1
  277. package/src/components/post-saved-state/test/__snapshots__/index.js.snap +0 -1
  278. package/src/components/post-text-editor/index.js +3 -3
  279. package/src/components/preview-dropdown/index.js +2 -2
  280. package/src/components/provider/index.js +4 -0
  281. package/src/components/provider/use-block-editor-settings.js +10 -0
  282. package/src/components/provider/use-upload-save-lock.js +2 -17
  283. package/src/components/resizable-editor/resize-handle.js +2 -5
  284. package/src/components/revision-created-panel/index.js +3 -3
  285. package/src/components/site-discussion/index.js +3 -3
  286. package/src/components/template-actions-panel/classic-theme-content.js +3 -3
  287. package/src/components/template-part-menu-items/convert-to-regular.js +74 -12
  288. package/src/components/visual-editor/index.js +2 -29
  289. package/src/store/private-actions.js +0 -13
  290. package/src/store/private-selectors.js +0 -10
  291. package/src/store/reducer.js +0 -16
  292. package/src/utils/media-finalize/index.js +2 -1
  293. package/src/utils/media-finalize/test/index.js +25 -1
  294. package/src/utils/media-upload/index.js +26 -29
  295. package/build/components/collab-sidebar/add-comment.cjs.map +0 -7
  296. package/build/components/collab-sidebar/comment-author-info.cjs.map +0 -7
  297. package/build/components/collab-sidebar/comment-form.cjs.map +0 -7
  298. package/build/components/collab-sidebar/comment-indicator-toolbar.cjs.map +0 -7
  299. package/build/components/collab-sidebar/comment-menu-item.cjs.map +0 -7
  300. package/build/components/collab-sidebar/comments.cjs +0 -696
  301. package/build/components/collab-sidebar/comments.cjs.map +0 -7
  302. package/build-module/components/collab-sidebar/add-comment.mjs.map +0 -7
  303. package/build-module/components/collab-sidebar/comment-author-info.mjs.map +0 -7
  304. package/build-module/components/collab-sidebar/comment-form.mjs +0 -82
  305. package/build-module/components/collab-sidebar/comment-form.mjs.map +0 -7
  306. package/build-module/components/collab-sidebar/comment-indicator-toolbar.mjs.map +0 -7
  307. package/build-module/components/collab-sidebar/comment-menu-item.mjs.map +0 -7
  308. package/build-module/components/collab-sidebar/comments.mjs +0 -678
  309. package/build-module/components/collab-sidebar/comments.mjs.map +0 -7
  310. package/build-types/components/collab-sidebar/add-comment.d.ts +0 -6
  311. package/build-types/components/collab-sidebar/add-comment.d.ts.map +0 -1
  312. package/build-types/components/collab-sidebar/comment-author-info.d.ts +0 -8
  313. package/build-types/components/collab-sidebar/comment-author-info.d.ts.map +0 -1
  314. package/build-types/components/collab-sidebar/comment-form.d.ts +0 -9
  315. package/build-types/components/collab-sidebar/comment-form.d.ts.map +0 -1
  316. package/build-types/components/collab-sidebar/comment-indicator-toolbar.d.ts +0 -6
  317. package/build-types/components/collab-sidebar/comment-indicator-toolbar.d.ts.map +0 -1
  318. package/build-types/components/collab-sidebar/comment-menu-item.d.ts +0 -6
  319. package/build-types/components/collab-sidebar/comment-menu-item.d.ts.map +0 -1
  320. package/build-types/components/collab-sidebar/comments.d.ts +0 -10
  321. package/build-types/components/collab-sidebar/comments.d.ts.map +0 -1
  322. package/src/components/collab-sidebar/comments.js +0 -812
@@ -1,812 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import {
10
- useState,
11
- RawHTML,
12
- useEffect,
13
- useMemo,
14
- useRef,
15
- } from '@wordpress/element';
16
- import {
17
- __experimentalText as Text,
18
- __experimentalHStack as HStack,
19
- __experimentalVStack as VStack,
20
- __experimentalConfirmDialog as ConfirmDialog,
21
- Button,
22
- FlexItem,
23
- privateApis as componentsPrivateApis,
24
- } from '@wordpress/components';
25
- import { useDebounce } from '@wordpress/compose';
26
-
27
- import { published, moreVertical } from '@wordpress/icons';
28
- import { __, _x, sprintf, _n } from '@wordpress/i18n';
29
- import { useSelect, useDispatch } from '@wordpress/data';
30
- import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
31
- import {
32
- store as blockEditorStore,
33
- privateApis as blockEditorPrivateApis,
34
- } from '@wordpress/block-editor';
35
-
36
- /**
37
- * Internal dependencies
38
- */
39
- import { unlock } from '../../lock-unlock';
40
- import CommentAuthorInfo from './comment-author-info';
41
- import CommentForm from './comment-form';
42
- import { focusCommentThread, getCommentExcerpt } from './utils';
43
- import { useFloatingBoard, useFloatingThread } from './hooks';
44
- import { FloatingContainer } from './floating-container';
45
- import { AddComment } from './add-comment';
46
- import { store as editorStore } from '../../store';
47
-
48
- const { useBlockElement } = unlock( blockEditorPrivateApis );
49
- const { Menu } = unlock( componentsPrivateApis );
50
-
51
- export function Comments( {
52
- threads: noteThreads,
53
- onEditComment,
54
- onAddReply,
55
- onCommentDelete,
56
- commentSidebarRef,
57
- isFloating = false,
58
- } ) {
59
- const { selectNote } = unlock( useDispatch( editorStore ) );
60
- const { selectBlock, toggleBlockSpotlight } = unlock(
61
- useDispatch( blockEditorStore )
62
- );
63
-
64
- const { blockCommentId, selectedBlockClientId, orderedBlockIds } =
65
- useSelect( ( select ) => {
66
- const {
67
- getBlockAttributes,
68
- getSelectedBlockClientId,
69
- getClientIdsWithDescendants,
70
- } = select( blockEditorStore );
71
- const clientId = getSelectedBlockClientId();
72
- return {
73
- blockCommentId: clientId
74
- ? getBlockAttributes( clientId )?.metadata?.noteId
75
- : null,
76
- selectedBlockClientId: clientId,
77
- orderedBlockIds: getClientIdsWithDescendants(),
78
- };
79
- }, [] );
80
- const { selectedNote, noteFocused } = useSelect( ( select ) => {
81
- const { getSelectedNote, isNoteFocused } = unlock(
82
- select( editorStore )
83
- );
84
- return {
85
- selectedNote: getSelectedNote(),
86
- noteFocused: isNoteFocused(),
87
- };
88
- }, [] );
89
-
90
- const relatedBlockElement = useBlockElement( selectedBlockClientId );
91
-
92
- const threads = useMemo( () => {
93
- const t = [ ...noteThreads ];
94
- const orderedThreads = [];
95
- // In floating mode, when the note board is shown, and as long
96
- // as the selected block doesn't have an existing note attached -
97
- // add a "new note" entry to the threads. This special thread type
98
- // gets sorted and floated like regular threads, but shows an AddComment
99
- // component instead of a regular comment thread.
100
- if ( isFloating && selectedNote === 'new' ) {
101
- // Insert the new note entry at the correct location for its blockId.
102
- const newNoteThread = {
103
- id: 'new',
104
- blockClientId: selectedBlockClientId,
105
- content: { rendered: '' },
106
- };
107
- // Insert the new comment block at the right order within the threads.
108
- orderedBlockIds.forEach( ( blockId ) => {
109
- if ( blockId === selectedBlockClientId ) {
110
- orderedThreads.push( newNoteThread );
111
- } else {
112
- const threadForBlock = t.find(
113
- ( thread ) => thread.blockClientId === blockId
114
- );
115
- if ( threadForBlock ) {
116
- orderedThreads.push( threadForBlock );
117
- }
118
- }
119
- } );
120
- return orderedThreads;
121
- }
122
- return t;
123
- }, [
124
- noteThreads,
125
- isFloating,
126
- selectedNote,
127
- selectedBlockClientId,
128
- orderedBlockIds,
129
- ] );
130
-
131
- const handleDelete = async ( comment ) => {
132
- const currentIndex = threads.findIndex( ( t ) => t.id === comment.id );
133
- const nextThread = threads[ currentIndex + 1 ];
134
- const prevThread = threads[ currentIndex - 1 ];
135
-
136
- await onCommentDelete( comment );
137
-
138
- if ( comment.parent !== 0 ) {
139
- // Move focus to the parent thread when a reply was deleted.
140
- selectNote( comment.parent );
141
- focusCommentThread( comment.parent, commentSidebarRef.current );
142
- return;
143
- }
144
-
145
- if ( nextThread ) {
146
- selectNote( nextThread.id );
147
- focusCommentThread( nextThread.id, commentSidebarRef.current );
148
- } else if ( prevThread ) {
149
- selectNote( prevThread.id );
150
- focusCommentThread( prevThread.id, commentSidebarRef.current );
151
- } else {
152
- selectNote( undefined );
153
- toggleBlockSpotlight( comment.blockClientId, false );
154
- // Move focus to the related block.
155
- relatedBlockElement?.focus();
156
- }
157
- };
158
-
159
- // Auto-select the related comment thread when a block is selected.
160
- useEffect( () => {
161
- selectNote( blockCommentId ?? undefined );
162
- }, [ blockCommentId, selectNote ] );
163
-
164
- // Focus the selected note when requested.
165
- useEffect( () => {
166
- if ( noteFocused && selectedNote ) {
167
- focusCommentThread(
168
- selectedNote,
169
- commentSidebarRef.current,
170
- selectedNote === 'new' ? 'textarea' : undefined
171
- );
172
- // Clear focus flag to avoid re-triggering.
173
- selectNote( selectedNote );
174
- }
175
- }, [ noteFocused, selectedNote, selectNote, commentSidebarRef ] );
176
-
177
- const { boardOffsets, registerThread, unregisterThread } = useFloatingBoard(
178
- {
179
- threads,
180
- selectedNoteId: selectedNote,
181
- isFloating,
182
- }
183
- );
184
-
185
- const handleThreadNavigation = ( event, thread, isSelected ) => {
186
- if ( event.defaultPrevented ) {
187
- return;
188
- }
189
-
190
- const currentIndex = threads.findIndex( ( t ) => t.id === thread.id );
191
-
192
- if (
193
- ( event.key === 'Enter' || event.key === 'ArrowRight' ) &&
194
- event.currentTarget === event.target &&
195
- ! isSelected
196
- ) {
197
- // Expand thread.
198
- selectNote( thread.id );
199
- if ( !! thread.blockClientId ) {
200
- // Pass `null` as the second parameter to prevent focusing the block.
201
- selectBlock( thread.blockClientId, null );
202
- toggleBlockSpotlight( thread.blockClientId, true );
203
- }
204
- } else if (
205
- ( ( event.key === 'Enter' || event.key === 'ArrowLeft' ) &&
206
- event.currentTarget === event.target &&
207
- isSelected ) ||
208
- event.key === 'Escape'
209
- ) {
210
- // Collapse thread.
211
- selectNote( undefined );
212
- if ( thread.blockClientId ) {
213
- toggleBlockSpotlight( thread.blockClientId, false );
214
- }
215
- focusCommentThread( thread.id, commentSidebarRef.current );
216
- } else if (
217
- event.key === 'ArrowDown' &&
218
- currentIndex < threads.length - 1 &&
219
- event.currentTarget === event.target
220
- ) {
221
- // Move to the next thread.
222
- const nextThread = threads[ currentIndex + 1 ];
223
- focusCommentThread( nextThread.id, commentSidebarRef.current );
224
- } else if (
225
- event.key === 'ArrowUp' &&
226
- currentIndex > 0 &&
227
- event.currentTarget === event.target
228
- ) {
229
- // Move to the previous thread.
230
- const prevThread = threads[ currentIndex - 1 ];
231
- focusCommentThread( prevThread.id, commentSidebarRef.current );
232
- } else if (
233
- event.key === 'Home' &&
234
- event.currentTarget === event.target
235
- ) {
236
- // Move to the first thread.
237
- focusCommentThread( threads[ 0 ].id, commentSidebarRef.current );
238
- } else if (
239
- event.key === 'End' &&
240
- event.currentTarget === event.target
241
- ) {
242
- // Move to the last thread.
243
- focusCommentThread(
244
- threads[ threads.length - 1 ].id,
245
- commentSidebarRef.current
246
- );
247
- }
248
- };
249
-
250
- const hasThreads = Array.isArray( threads ) && threads.length > 0;
251
- // A special case for `template-locked` mode - https://github.com/WordPress/gutenberg/pull/72646.
252
- if ( ! hasThreads && ! isFloating ) {
253
- return (
254
- <AddComment
255
- onSubmit={ onAddReply }
256
- commentSidebarRef={ commentSidebarRef }
257
- />
258
- );
259
- }
260
-
261
- return (
262
- <>
263
- { ! isFloating && selectedNote === 'new' && (
264
- <AddComment
265
- onSubmit={ onAddReply }
266
- commentSidebarRef={ commentSidebarRef }
267
- />
268
- ) }
269
- { threads.map( ( thread ) => (
270
- <Thread
271
- key={ thread.id }
272
- thread={ thread }
273
- onAddReply={ onAddReply }
274
- onCommentDelete={ handleDelete }
275
- onEditComment={ onEditComment }
276
- isSelected={ selectedNote === thread.id }
277
- commentSidebarRef={ commentSidebarRef }
278
- floating={
279
- isFloating
280
- ? {
281
- calculatedOffset:
282
- boardOffsets[ thread.id ] ?? 0,
283
- registerThread,
284
- unregisterThread,
285
- }
286
- : undefined
287
- }
288
- onKeyDown={ ( event ) =>
289
- handleThreadNavigation(
290
- event,
291
- thread,
292
- selectedNote === thread.id
293
- )
294
- }
295
- />
296
- ) ) }
297
- </>
298
- );
299
- }
300
-
301
- function Thread( {
302
- thread,
303
- onEditComment,
304
- onAddReply,
305
- onCommentDelete,
306
- isSelected,
307
- commentSidebarRef,
308
- floating,
309
- onKeyDown,
310
- } ) {
311
- const isFloating = !! floating;
312
- const { toggleBlockHighlight, selectBlock, toggleBlockSpotlight } = unlock(
313
- useDispatch( blockEditorStore )
314
- );
315
- const { selectNote } = unlock( useDispatch( editorStore ) );
316
- const relatedBlockElement = useBlockElement( thread.blockClientId );
317
- const debouncedToggleBlockHighlight = useDebounce(
318
- toggleBlockHighlight,
319
- 50
320
- );
321
- const { y, refs } = useFloatingThread( {
322
- thread,
323
- calculatedOffset: floating?.calculatedOffset ?? 0,
324
- registerThread: floating?.registerThread,
325
- unregisterThread: floating?.unregisterThread,
326
- } );
327
- const isKeyboardTabbingRef = useRef( false );
328
-
329
- const onMouseEnter = () => {
330
- debouncedToggleBlockHighlight( thread.blockClientId, true );
331
- };
332
-
333
- const onMouseLeave = () => {
334
- debouncedToggleBlockHighlight( thread.blockClientId, false );
335
- };
336
-
337
- const onFocus = () => {
338
- toggleBlockHighlight( thread.blockClientId, true );
339
- };
340
-
341
- const onBlur = ( event ) => {
342
- // Don't deselect notes when the browser window/tab loses focus.
343
- if ( ! document.hasFocus() ) {
344
- return;
345
- }
346
-
347
- const isNoteFocused = event.relatedTarget?.closest(
348
- '.editor-collab-sidebar-panel__thread'
349
- );
350
- const isDialogFocused =
351
- event.relatedTarget?.closest( '[role="dialog"]' );
352
- const isTabbing = isKeyboardTabbingRef.current;
353
-
354
- // When another note is clicked, do nothing because the current note is automatically closed.
355
- if ( isNoteFocused && ! isTabbing ) {
356
- return;
357
- }
358
- // When deleting a note, a dialog appears, but the note should not be collapsed.
359
- if ( isDialogFocused ) {
360
- return;
361
- }
362
- // When tabbing, do nothing if the focus is within the current note.
363
- if (
364
- isTabbing &&
365
- event.currentTarget.contains( event.relatedTarget )
366
- ) {
367
- return;
368
- }
369
-
370
- // Closes a note that has lost focus when any of the following conditions are met:
371
- // - An element other than a note is clicked.
372
- // - Focus was lost by tabbing.
373
- toggleBlockHighlight( thread.blockClientId, false );
374
- unselectThread();
375
- };
376
-
377
- const handleCommentSelect = () => {
378
- selectNote( thread.id );
379
- toggleBlockSpotlight( thread.blockClientId, true );
380
- if ( !! thread.blockClientId ) {
381
- // Pass `null` as the second parameter to prevent focusing the block.
382
- selectBlock( thread.blockClientId, null );
383
- }
384
- };
385
-
386
- const unselectThread = () => {
387
- selectNote( undefined );
388
- toggleBlockSpotlight( thread.blockClientId, false );
389
- };
390
-
391
- const allReplies = thread?.reply || [];
392
- const lastReply =
393
- allReplies.length > 0 ? allReplies[ allReplies.length - 1 ] : undefined;
394
- const restReplies = allReplies.length > 0 ? allReplies.slice( 0, -1 ) : [];
395
-
396
- const commentExcerpt = getCommentExcerpt(
397
- stripHTML( thread.content?.rendered ),
398
- 10
399
- );
400
- const ariaLabel = !! thread.blockClientId
401
- ? sprintf(
402
- // translators: %s: note excerpt
403
- __( 'Note: %s' ),
404
- commentExcerpt
405
- )
406
- : sprintf(
407
- // translators: %s: note excerpt
408
- __( 'Original block deleted. Note: %s' ),
409
- commentExcerpt
410
- );
411
-
412
- if ( isFloating && thread.id === 'new' ) {
413
- return (
414
- <AddComment
415
- onSubmit={ onAddReply }
416
- commentSidebarRef={ commentSidebarRef }
417
- floating={ { y, refs } }
418
- />
419
- );
420
- }
421
-
422
- return (
423
- <FloatingContainer
424
- floating={ isFloating ? { y, refs } : undefined }
425
- className={ clsx( 'editor-collab-sidebar-panel__thread', {
426
- 'is-selected': isSelected,
427
- } ) }
428
- id={ `comment-thread-${ thread.id }` }
429
- spacing="3"
430
- onClick={ handleCommentSelect }
431
- onMouseEnter={ onMouseEnter }
432
- onMouseLeave={ onMouseLeave }
433
- onFocus={ onFocus }
434
- onBlur={ onBlur }
435
- onKeyUp={ ( event ) => {
436
- if ( event.key === 'Tab' ) {
437
- isKeyboardTabbingRef.current = false;
438
- }
439
- } }
440
- onKeyDown={ ( event ) => {
441
- if ( event.key === 'Tab' ) {
442
- isKeyboardTabbingRef.current = true;
443
- } else {
444
- onKeyDown( event );
445
- }
446
- } }
447
- tabIndex={ 0 }
448
- role="treeitem"
449
- aria-label={ ariaLabel }
450
- aria-expanded={ isSelected }
451
- >
452
- <Button
453
- className="editor-collab-sidebar-panel__skip-to-comment"
454
- variant="secondary"
455
- size="compact"
456
- onClick={ () => {
457
- focusCommentThread(
458
- thread.id,
459
- commentSidebarRef.current,
460
- 'textarea'
461
- );
462
- } }
463
- >
464
- { __( 'Add new reply' ) }
465
- </Button>
466
- { ! thread.blockClientId && (
467
- <Text as="p" weight={ 500 } variant="muted">
468
- { __( 'Original block deleted.' ) }
469
- </Text>
470
- ) }
471
- <CommentBoard
472
- thread={ thread }
473
- isExpanded={ isSelected }
474
- onEdit={ ( params = {} ) => {
475
- onEditComment( params );
476
- if ( params.status === 'approved' ) {
477
- unselectThread();
478
- if ( isFloating ) {
479
- relatedBlockElement?.focus();
480
- } else {
481
- focusCommentThread(
482
- thread.id,
483
- commentSidebarRef.current
484
- );
485
- }
486
- }
487
- } }
488
- onDelete={ onCommentDelete }
489
- />
490
- { isSelected &&
491
- allReplies.map( ( reply ) => (
492
- <CommentBoard
493
- key={ reply.id }
494
- thread={ reply }
495
- parent={ thread }
496
- isExpanded={ isSelected }
497
- onEdit={ onEditComment }
498
- onDelete={ onCommentDelete }
499
- />
500
- ) ) }
501
- { ! isSelected && restReplies.length > 0 && (
502
- <HStack className="editor-collab-sidebar-panel__more-reply-separator">
503
- <Button
504
- size="compact"
505
- variant="tertiary"
506
- className="editor-collab-sidebar-panel__more-reply-button"
507
- onClick={ () => {
508
- selectNote( thread.id );
509
- focusCommentThread(
510
- thread.id,
511
- commentSidebarRef.current
512
- );
513
- } }
514
- >
515
- { sprintf(
516
- // translators: %s: number of replies.
517
- _n(
518
- '%s more reply',
519
- '%s more replies',
520
- restReplies.length
521
- ),
522
- restReplies.length
523
- ) }
524
- </Button>
525
- </HStack>
526
- ) }
527
- { ! isSelected && lastReply && (
528
- <CommentBoard
529
- thread={ lastReply }
530
- parent={ thread }
531
- isExpanded={ isSelected }
532
- onEdit={ onEditComment }
533
- onDelete={ onCommentDelete }
534
- />
535
- ) }
536
- { isSelected && (
537
- <VStack spacing="2" role="treeitem">
538
- <HStack alignment="left" spacing="3" justify="flex-start">
539
- <CommentAuthorInfo />
540
- </HStack>
541
- <VStack spacing="2">
542
- <CommentForm
543
- onSubmit={ ( inputComment ) => {
544
- if ( 'approved' === thread.status ) {
545
- // For reopening, include the content in the reopen action.
546
- onEditComment( {
547
- id: thread.id,
548
- status: 'hold',
549
- content: inputComment,
550
- } );
551
- } else {
552
- // For regular replies, add as separate comment.
553
- onAddReply( {
554
- content: inputComment,
555
- parent: thread.id,
556
- } );
557
- }
558
- } }
559
- onCancel={ ( event ) => {
560
- // Prevent the parent onClick from being triggered.
561
- event.stopPropagation();
562
- unselectThread();
563
- focusCommentThread(
564
- thread.id,
565
- commentSidebarRef.current
566
- );
567
- } }
568
- submitButtonText={
569
- 'approved' === thread.status
570
- ? __( 'Reopen & Reply' )
571
- : __( 'Reply' )
572
- }
573
- rows={ 'approved' === thread.status ? 2 : 4 }
574
- labelText={ sprintf(
575
- // translators: %1$s: note identifier, %2$s: author name
576
- __( 'Reply to note %1$s by %2$s' ),
577
- thread.id,
578
- thread.author_name
579
- ) }
580
- />
581
- </VStack>
582
- </VStack>
583
- ) }
584
- { !! thread.blockClientId && (
585
- <Button
586
- className="editor-collab-sidebar-panel__skip-to-block"
587
- variant="secondary"
588
- size="compact"
589
- onClick={ ( event ) => {
590
- event.stopPropagation();
591
- relatedBlockElement?.focus();
592
- } }
593
- >
594
- { __( 'Back to block' ) }
595
- </Button>
596
- ) }
597
- </FloatingContainer>
598
- );
599
- }
600
-
601
- const CommentBoard = ( { thread, parent, isExpanded, onEdit, onDelete } ) => {
602
- const [ actionState, setActionState ] = useState( false );
603
- const [ showConfirmDialog, setShowConfirmDialog ] = useState( false );
604
- const actionButtonRef = useRef( null );
605
- const handleConfirmDelete = () => {
606
- onDelete( thread );
607
- setActionState( false );
608
- setShowConfirmDialog( false );
609
- };
610
-
611
- const handleCancel = () => {
612
- setActionState( false );
613
- setShowConfirmDialog( false );
614
- actionButtonRef.current?.focus();
615
- };
616
-
617
- // Check if this is a resolution comment by checking metadata.
618
- const isResolutionComment =
619
- thread.type === 'note' &&
620
- thread.meta &&
621
- ( thread.meta._wp_note_status === 'resolved' ||
622
- thread.meta._wp_note_status === 'reopen' );
623
-
624
- const actions = [
625
- {
626
- id: 'edit',
627
- title: __( 'Edit' ),
628
- isEligible: ( { status } ) => status !== 'approved',
629
- onClick: () => {
630
- setActionState( 'edit' );
631
- },
632
- },
633
- {
634
- id: 'reopen',
635
- title: _x( 'Reopen', 'Reopen note' ),
636
- isEligible: ( { status } ) => status === 'approved',
637
- onClick: () => {
638
- onEdit( { id: thread.id, status: 'hold' } );
639
- },
640
- },
641
- {
642
- id: 'delete',
643
- title: __( 'Delete' ),
644
- isEligible: () => true,
645
- onClick: () => {
646
- setActionState( 'delete' );
647
- setShowConfirmDialog( true );
648
- },
649
- },
650
- ];
651
-
652
- const canResolve = thread.parent === 0;
653
- const moreActions =
654
- parent?.status !== 'approved'
655
- ? actions.filter( ( item ) => item.isEligible( thread ) )
656
- : [];
657
-
658
- const deleteConfirmMessage =
659
- // When deleting a top level note, descendants will also be deleted.
660
- thread.parent === 0
661
- ? __(
662
- "Are you sure you want to delete this note? This will also delete all of this note's replies."
663
- )
664
- : __( 'Are you sure you want to delete this reply?' );
665
-
666
- return (
667
- <VStack
668
- spacing="2"
669
- role={ thread.parent !== 0 ? 'treeitem' : undefined }
670
- >
671
- <HStack alignment="left" spacing="3" justify="flex-start">
672
- <CommentAuthorInfo
673
- avatar={ thread?.author_avatar_urls?.[ 48 ] }
674
- name={ thread?.author_name }
675
- date={ thread?.date }
676
- userId={ thread?.author }
677
- />
678
- { isExpanded && (
679
- <FlexItem
680
- className="editor-collab-sidebar-panel__comment-status"
681
- onClick={ ( event ) => {
682
- // Prevent the thread from being selected.
683
- event.stopPropagation();
684
- } }
685
- >
686
- <HStack spacing="0">
687
- { canResolve && (
688
- <Button
689
- label={ _x(
690
- 'Resolve',
691
- 'Mark note as resolved'
692
- ) }
693
- size="small"
694
- icon={ published }
695
- disabled={ thread.status === 'approved' }
696
- accessibleWhenDisabled={
697
- thread.status === 'approved'
698
- }
699
- onClick={ () => {
700
- onEdit( {
701
- id: thread.id,
702
- status: 'approved',
703
- } );
704
- } }
705
- />
706
- ) }
707
- <Menu placement="bottom-end">
708
- <Menu.TriggerButton
709
- render={
710
- <Button
711
- ref={ actionButtonRef }
712
- size="small"
713
- icon={ moreVertical }
714
- label={ __( 'Actions' ) }
715
- disabled={ ! moreActions.length }
716
- accessibleWhenDisabled
717
- />
718
- }
719
- />
720
- <Menu.Popover
721
- // The menu popover is rendered in a portal, which causes focus to be
722
- // lost and the note to be collapsed unintentionally. To prevent this,
723
- // the popover should be rendered as an inline.
724
- modal={ false }
725
- >
726
- { moreActions.map( ( action ) => (
727
- <Menu.Item
728
- key={ action.id }
729
- onClick={ () => action.onClick() }
730
- >
731
- <Menu.ItemLabel>
732
- { action.title }
733
- </Menu.ItemLabel>
734
- </Menu.Item>
735
- ) ) }
736
- </Menu.Popover>
737
- </Menu>
738
- </HStack>
739
- </FlexItem>
740
- ) }
741
- </HStack>
742
- { 'edit' === actionState ? (
743
- <CommentForm
744
- onSubmit={ ( value ) => {
745
- onEdit( {
746
- id: thread.id,
747
- content: value,
748
- } );
749
- setActionState( false );
750
- actionButtonRef.current?.focus();
751
- } }
752
- onCancel={ () => handleCancel() }
753
- thread={ thread }
754
- submitButtonText={ _x( 'Update', 'verb' ) }
755
- labelText={ sprintf(
756
- // translators: %1$s: note identifier, %2$s: author name.
757
- __( 'Edit note %1$s by %2$s' ),
758
- thread.id,
759
- thread.author_name
760
- ) }
761
- />
762
- ) : (
763
- <RawHTML
764
- className={ clsx(
765
- 'editor-collab-sidebar-panel__user-comment',
766
- {
767
- 'editor-collab-sidebar-panel__resolution-text':
768
- isResolutionComment,
769
- }
770
- ) }
771
- >
772
- { isResolutionComment
773
- ? ( () => {
774
- const actionText =
775
- thread.meta._wp_note_status === 'resolved'
776
- ? __( 'Marked as resolved' )
777
- : __( 'Reopened' );
778
- const content = thread?.content?.raw;
779
-
780
- if (
781
- content &&
782
- typeof content === 'string' &&
783
- content.trim() !== ''
784
- ) {
785
- return sprintf(
786
- // translators: %1$s: action label ("Marked as resolved" or "Reopened"); %2$s: note text.
787
- __( '%1$s: %2$s' ),
788
- actionText,
789
- content
790
- );
791
- }
792
- // If no content, just show the action.
793
- return actionText;
794
- } )()
795
- : thread?.content?.rendered }
796
- </RawHTML>
797
- ) }
798
- { 'delete' === actionState && (
799
- <ConfirmDialog
800
- isOpen={ showConfirmDialog }
801
- onConfirm={ handleConfirmDelete }
802
- onCancel={ handleCancel }
803
- confirmButtonText={ __( 'Delete' ) }
804
- >
805
- { deleteConfirmMessage }
806
- </ConfirmDialog>
807
- ) }
808
- </VStack>
809
- );
810
- };
811
-
812
- export default Comments;