@wordpress/editor 14.44.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 (363) 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-note.cjs +100 -0
  5. package/build/components/collab-sidebar/add-note.cjs.map +7 -0
  6. package/build/components/collab-sidebar/board-store.cjs +106 -0
  7. package/build/components/collab-sidebar/board-store.cjs.map +7 -0
  8. package/build/components/collab-sidebar/floating-container.cjs +63 -0
  9. package/build/components/collab-sidebar/floating-container.cjs.map +7 -0
  10. package/build/components/collab-sidebar/hooks.cjs +105 -140
  11. package/build/components/collab-sidebar/hooks.cjs.map +3 -3
  12. package/build/components/collab-sidebar/index.cjs +28 -90
  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} +46 -45
  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 +80 -14
  29. package/build/components/collab-sidebar/utils.cjs.map +2 -2
  30. package/build/components/collaborators-presence/avatar/component.cjs.map +1 -1
  31. package/build/components/collaborators-presence/index.cjs +3 -3
  32. package/build/components/collaborators-presence/index.cjs.map +2 -2
  33. package/build/components/collaborators-presence/list.cjs +3 -3
  34. package/build/components/collaborators-presence/list.cjs.map +2 -2
  35. package/build/components/document-bar/index.cjs.map +3 -3
  36. package/build/components/error-boundary/index.cjs.map +3 -3
  37. package/build/components/list-view-sidebar/list-view-outline.cjs.map +3 -3
  38. package/build/components/media/media-editor-modal.cjs +93 -0
  39. package/build/components/media/media-editor-modal.cjs.map +7 -0
  40. package/build/components/media-categories/index.cjs +1 -1
  41. package/build/components/media-categories/index.cjs.map +1 -1
  42. package/build/components/more-menu/index.cjs +4 -3
  43. package/build/components/more-menu/index.cjs.map +2 -2
  44. package/build/components/post-actions/set-as-homepage.cjs.map +3 -3
  45. package/build/components/post-actions/set-as-posts-page.cjs.map +3 -3
  46. package/build/components/post-card-panel/index.cjs +2 -2
  47. package/build/components/post-card-panel/index.cjs.map +3 -3
  48. package/build/components/post-content-information/index.cjs.map +3 -3
  49. package/build/components/post-excerpt/panel.cjs.map +3 -3
  50. package/build/components/post-last-edited-panel/index.cjs.map +3 -3
  51. package/build/components/post-preview-button/index.cjs +3 -2
  52. package/build/components/post-preview-button/index.cjs.map +2 -2
  53. package/build/components/post-publish-button/index.cjs +2 -2
  54. package/build/components/post-publish-button/index.cjs.map +2 -2
  55. package/build/components/post-publish-button/label.cjs +4 -2
  56. package/build/components/post-publish-button/label.cjs.map +2 -2
  57. package/build/components/post-publish-panel/maybe-upload-media.cjs +1 -1
  58. package/build/components/post-publish-panel/maybe-upload-media.cjs.map +1 -1
  59. package/build/components/post-publish-panel/postpublish.cjs +3 -2
  60. package/build/components/post-publish-panel/postpublish.cjs.map +2 -2
  61. package/build/components/post-revisions-panel/index.cjs +2 -2
  62. package/build/components/post-revisions-panel/index.cjs.map +2 -2
  63. package/build/components/post-revisions-preview/diff-markers.cjs +1 -1
  64. package/build/components/post-revisions-preview/diff-markers.cjs.map +2 -2
  65. package/build/components/post-revisions-preview/revisions-slider.cjs +1 -0
  66. package/build/components/post-revisions-preview/revisions-slider.cjs.map +2 -2
  67. package/build/components/post-saved-state/index.cjs +4 -1
  68. package/build/components/post-saved-state/index.cjs.map +2 -2
  69. package/build/components/post-text-editor/index.cjs +3 -4
  70. package/build/components/post-text-editor/index.cjs.map +2 -2
  71. package/build/components/preview-dropdown/index.cjs +3 -2
  72. package/build/components/preview-dropdown/index.cjs.map +2 -2
  73. package/build/components/provider/index.cjs +3 -1
  74. package/build/components/provider/index.cjs.map +3 -3
  75. package/build/components/provider/use-block-editor-settings.cjs +7 -1
  76. package/build/components/provider/use-block-editor-settings.cjs.map +3 -3
  77. package/build/components/provider/use-upload-save-lock.cjs +2 -12
  78. package/build/components/provider/use-upload-save-lock.cjs.map +2 -2
  79. package/build/components/resizable-editor/resize-handle.cjs +2 -1
  80. package/build/components/resizable-editor/resize-handle.cjs.map +2 -2
  81. package/build/components/revision-created-panel/index.cjs.map +3 -3
  82. package/build/components/site-discussion/index.cjs.map +2 -2
  83. package/build/components/style-book/constants.cjs +1 -1
  84. package/build/components/style-book/constants.cjs.map +1 -1
  85. package/build/components/style-book/index.cjs +1 -1
  86. package/build/components/style-book/index.cjs.map +1 -1
  87. package/build/components/template-actions-panel/classic-theme-content.cjs.map +2 -2
  88. package/build/components/template-part-menu-items/convert-to-regular.cjs +54 -11
  89. package/build/components/template-part-menu-items/convert-to-regular.cjs.map +3 -3
  90. package/build/components/visual-editor/index.cjs +5 -22
  91. package/build/components/visual-editor/index.cjs.map +2 -2
  92. package/build/store/private-actions.cjs +0 -8
  93. package/build/store/private-actions.cjs.map +2 -2
  94. package/build/store/private-selectors.cjs +0 -5
  95. package/build/store/private-selectors.cjs.map +2 -2
  96. package/build/store/reducer.cjs +0 -10
  97. package/build/store/reducer.cjs.map +2 -2
  98. package/build/utils/media-finalize/index.cjs +3 -2
  99. package/build/utils/media-finalize/index.cjs.map +2 -2
  100. package/build/utils/media-upload/index.cjs +14 -25
  101. package/build/utils/media-upload/index.cjs.map +2 -2
  102. package/build-module/components/collab-sidebar/{comment-menu-item.mjs → add-note-menu-item.mjs} +10 -11
  103. package/build-module/components/collab-sidebar/add-note-menu-item.mjs.map +7 -0
  104. package/build-module/components/collab-sidebar/add-note.mjs +78 -0
  105. package/build-module/components/collab-sidebar/add-note.mjs.map +7 -0
  106. package/build-module/components/collab-sidebar/board-store.mjs +81 -0
  107. package/build-module/components/collab-sidebar/board-store.mjs.map +7 -0
  108. package/build-module/components/collab-sidebar/floating-container.mjs +28 -0
  109. package/build-module/components/collab-sidebar/floating-container.mjs.map +7 -0
  110. package/build-module/components/collab-sidebar/hooks.mjs +105 -144
  111. package/build-module/components/collab-sidebar/hooks.mjs.map +2 -2
  112. package/build-module/components/collab-sidebar/index.mjs +29 -95
  113. package/build-module/components/collab-sidebar/index.mjs.map +2 -2
  114. package/build-module/components/collab-sidebar/{comment-author-info.mjs → note-byline.mjs} +7 -7
  115. package/build-module/components/collab-sidebar/note-byline.mjs.map +7 -0
  116. package/build-module/components/collab-sidebar/note-card.mjs +33 -0
  117. package/build-module/components/collab-sidebar/note-card.mjs.map +7 -0
  118. package/build-module/components/collab-sidebar/note-form.mjs +84 -0
  119. package/build-module/components/collab-sidebar/note-form.mjs.map +7 -0
  120. package/build-module/components/collab-sidebar/{comment-indicator-toolbar.mjs → note-indicator-toolbar.mjs} +25 -29
  121. package/build-module/components/collab-sidebar/note-indicator-toolbar.mjs.map +7 -0
  122. package/build-module/components/collab-sidebar/note-thread.mjs +289 -0
  123. package/build-module/components/collab-sidebar/note-thread.mjs.map +7 -0
  124. package/build-module/components/collab-sidebar/note.mjs +176 -0
  125. package/build-module/components/collab-sidebar/note.mjs.map +7 -0
  126. package/build-module/components/collab-sidebar/notes.mjs +215 -0
  127. package/build-module/components/collab-sidebar/notes.mjs.map +7 -0
  128. package/build-module/components/collab-sidebar/utils.mjs +76 -10
  129. package/build-module/components/collab-sidebar/utils.mjs.map +2 -2
  130. package/build-module/components/collaborators-presence/avatar/component.mjs.map +1 -1
  131. package/build-module/components/collaborators-presence/index.mjs +3 -3
  132. package/build-module/components/collaborators-presence/index.mjs.map +2 -2
  133. package/build-module/components/collaborators-presence/list.mjs +3 -3
  134. package/build-module/components/collaborators-presence/list.mjs.map +2 -2
  135. package/build-module/components/document-bar/index.mjs +3 -3
  136. package/build-module/components/document-bar/index.mjs.map +2 -2
  137. package/build-module/components/error-boundary/index.mjs +2 -2
  138. package/build-module/components/error-boundary/index.mjs.map +2 -2
  139. package/build-module/components/list-view-sidebar/list-view-outline.mjs +5 -5
  140. package/build-module/components/list-view-sidebar/list-view-outline.mjs.map +2 -2
  141. package/build-module/components/media/media-editor-modal.mjs +62 -0
  142. package/build-module/components/media/media-editor-modal.mjs.map +7 -0
  143. package/build-module/components/media-categories/index.mjs +1 -1
  144. package/build-module/components/media-categories/index.mjs.map +1 -1
  145. package/build-module/components/more-menu/index.mjs +4 -8
  146. package/build-module/components/more-menu/index.mjs.map +2 -2
  147. package/build-module/components/post-actions/set-as-homepage.mjs +2 -2
  148. package/build-module/components/post-actions/set-as-homepage.mjs.map +2 -2
  149. package/build-module/components/post-actions/set-as-posts-page.mjs +2 -2
  150. package/build-module/components/post-actions/set-as-posts-page.mjs.map +2 -2
  151. package/build-module/components/post-card-panel/index.mjs +5 -5
  152. package/build-module/components/post-card-panel/index.mjs.map +2 -2
  153. package/build-module/components/post-content-information/index.mjs +2 -2
  154. package/build-module/components/post-content-information/index.mjs.map +2 -2
  155. package/build-module/components/post-excerpt/panel.mjs +2 -2
  156. package/build-module/components/post-excerpt/panel.mjs.map +2 -2
  157. package/build-module/components/post-last-edited-panel/index.mjs +2 -2
  158. package/build-module/components/post-last-edited-panel/index.mjs.map +2 -2
  159. package/build-module/components/post-preview-button/index.mjs +3 -2
  160. package/build-module/components/post-preview-button/index.mjs.map +2 -2
  161. package/build-module/components/post-publish-button/index.mjs +2 -2
  162. package/build-module/components/post-publish-button/index.mjs.map +2 -2
  163. package/build-module/components/post-publish-button/label.mjs +4 -2
  164. package/build-module/components/post-publish-button/label.mjs.map +2 -2
  165. package/build-module/components/post-publish-panel/maybe-upload-media.mjs +1 -1
  166. package/build-module/components/post-publish-panel/maybe-upload-media.mjs.map +1 -1
  167. package/build-module/components/post-publish-panel/postpublish.mjs +3 -3
  168. package/build-module/components/post-publish-panel/postpublish.mjs.map +2 -2
  169. package/build-module/components/post-revisions-panel/index.mjs +2 -2
  170. package/build-module/components/post-revisions-panel/index.mjs.map +2 -2
  171. package/build-module/components/post-revisions-preview/diff-markers.mjs +1 -1
  172. package/build-module/components/post-revisions-preview/diff-markers.mjs.map +2 -2
  173. package/build-module/components/post-revisions-preview/revisions-slider.mjs +1 -0
  174. package/build-module/components/post-revisions-preview/revisions-slider.mjs.map +2 -2
  175. package/build-module/components/post-saved-state/index.mjs +4 -1
  176. package/build-module/components/post-saved-state/index.mjs.map +2 -2
  177. package/build-module/components/post-text-editor/index.mjs +2 -3
  178. package/build-module/components/post-text-editor/index.mjs.map +2 -2
  179. package/build-module/components/preview-dropdown/index.mjs +2 -2
  180. package/build-module/components/preview-dropdown/index.mjs.map +2 -2
  181. package/build-module/components/provider/index.mjs +3 -1
  182. package/build-module/components/provider/index.mjs.map +2 -2
  183. package/build-module/components/provider/use-block-editor-settings.mjs +7 -1
  184. package/build-module/components/provider/use-block-editor-settings.mjs.map +2 -2
  185. package/build-module/components/provider/use-upload-save-lock.mjs +2 -12
  186. package/build-module/components/provider/use-upload-save-lock.mjs.map +2 -2
  187. package/build-module/components/resizable-editor/resize-handle.mjs +2 -5
  188. package/build-module/components/resizable-editor/resize-handle.mjs.map +2 -2
  189. package/build-module/components/revision-created-panel/index.mjs +2 -2
  190. package/build-module/components/revision-created-panel/index.mjs.map +2 -2
  191. package/build-module/components/site-discussion/index.mjs +2 -2
  192. package/build-module/components/site-discussion/index.mjs.map +2 -2
  193. package/build-module/components/style-book/constants.mjs +1 -1
  194. package/build-module/components/style-book/constants.mjs.map +1 -1
  195. package/build-module/components/style-book/index.mjs +1 -1
  196. package/build-module/components/style-book/index.mjs.map +1 -1
  197. package/build-module/components/template-actions-panel/classic-theme-content.mjs +2 -2
  198. package/build-module/components/template-actions-panel/classic-theme-content.mjs.map +2 -2
  199. package/build-module/components/template-part-menu-items/convert-to-regular.mjs +60 -14
  200. package/build-module/components/template-part-menu-items/convert-to-regular.mjs.map +2 -2
  201. package/build-module/components/visual-editor/index.mjs +5 -22
  202. package/build-module/components/visual-editor/index.mjs.map +2 -2
  203. package/build-module/store/private-actions.mjs +0 -7
  204. package/build-module/store/private-actions.mjs.map +2 -2
  205. package/build-module/store/private-selectors.mjs +0 -4
  206. package/build-module/store/private-selectors.mjs.map +2 -2
  207. package/build-module/store/reducer.mjs +0 -9
  208. package/build-module/store/reducer.mjs.map +2 -2
  209. package/build-module/utils/media-finalize/index.mjs +3 -2
  210. package/build-module/utils/media-finalize/index.mjs.map +2 -2
  211. package/build-module/utils/media-upload/index.mjs +14 -25
  212. package/build-module/utils/media-upload/index.mjs.map +2 -2
  213. package/build-style/style-rtl.css +397 -171
  214. package/build-style/style.css +397 -171
  215. package/build-types/components/collab-sidebar/add-note-menu-item.d.ts +5 -0
  216. package/build-types/components/collab-sidebar/add-note-menu-item.d.ts.map +1 -0
  217. package/build-types/components/collab-sidebar/add-note.d.ts +6 -0
  218. package/build-types/components/collab-sidebar/add-note.d.ts.map +1 -0
  219. package/build-types/components/collab-sidebar/board-store.d.ts +9 -0
  220. package/build-types/components/collab-sidebar/board-store.d.ts.map +1 -0
  221. package/build-types/components/collab-sidebar/floating-container.d.ts +8 -0
  222. package/build-types/components/collab-sidebar/floating-container.d.ts.map +1 -0
  223. package/build-types/components/collab-sidebar/hooks.d.ts +13 -22
  224. package/build-types/components/collab-sidebar/hooks.d.ts.map +1 -1
  225. package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
  226. package/build-types/components/collab-sidebar/note-byline.d.ts +7 -0
  227. package/build-types/components/collab-sidebar/note-byline.d.ts.map +1 -0
  228. package/build-types/components/collab-sidebar/note-card.d.ts +8 -0
  229. package/build-types/components/collab-sidebar/note-card.d.ts.map +1 -0
  230. package/build-types/components/collab-sidebar/note-form.d.ts +7 -0
  231. package/build-types/components/collab-sidebar/note-form.d.ts.map +1 -0
  232. package/build-types/components/collab-sidebar/note-indicator-toolbar.d.ts +5 -0
  233. package/build-types/components/collab-sidebar/note-indicator-toolbar.d.ts.map +1 -0
  234. package/build-types/components/collab-sidebar/note-thread.d.ts +11 -0
  235. package/build-types/components/collab-sidebar/note-thread.d.ts.map +1 -0
  236. package/build-types/components/collab-sidebar/note.d.ts +9 -0
  237. package/build-types/components/collab-sidebar/note.d.ts.map +1 -0
  238. package/build-types/components/collab-sidebar/notes.d.ts +7 -0
  239. package/build-types/components/collab-sidebar/notes.d.ts.map +1 -0
  240. package/build-types/components/collab-sidebar/utils.d.ts +41 -17
  241. package/build-types/components/collab-sidebar/utils.d.ts.map +1 -1
  242. package/build-types/components/media/media-editor-modal.d.ts +11 -0
  243. package/build-types/components/media/media-editor-modal.d.ts.map +1 -0
  244. package/build-types/components/more-menu/index.d.ts.map +1 -1
  245. package/build-types/components/post-preview-button/index.d.ts.map +1 -1
  246. package/build-types/components/post-publish-button/index.d.ts.map +1 -1
  247. package/build-types/components/post-publish-button/label.d.ts.map +1 -1
  248. package/build-types/components/post-revisions-preview/revisions-slider.d.ts.map +1 -1
  249. package/build-types/components/post-saved-state/index.d.ts.map +1 -1
  250. package/build-types/components/provider/index.d.ts.map +1 -1
  251. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  252. package/build-types/components/provider/use-upload-save-lock.d.ts +0 -2
  253. package/build-types/components/provider/use-upload-save-lock.d.ts.map +1 -1
  254. package/build-types/components/resizable-editor/resize-handle.d.ts.map +1 -1
  255. package/build-types/components/style-book/constants.d.ts +1 -1
  256. package/build-types/components/style-book/constants.d.ts.map +1 -1
  257. package/build-types/components/template-part-menu-items/convert-to-regular.d.ts.map +1 -1
  258. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  259. package/build-types/store/private-actions.d.ts +0 -7
  260. package/build-types/store/private-actions.d.ts.map +1 -1
  261. package/build-types/store/private-selectors.d.ts +0 -7
  262. package/build-types/store/private-selectors.d.ts.map +1 -1
  263. package/build-types/store/reducer.d.ts +0 -10
  264. package/build-types/store/reducer.d.ts.map +1 -1
  265. package/build-types/utils/media-finalize/index.d.ts +1 -1
  266. package/build-types/utils/media-finalize/index.d.ts.map +1 -1
  267. package/build-types/utils/media-upload/index.d.ts.map +1 -1
  268. package/package.json +46 -46
  269. package/src/components/collab-sidebar/README.md +117 -0
  270. package/src/components/collab-sidebar/{comment-menu-item.js → add-note-menu-item.js} +8 -10
  271. package/src/components/collab-sidebar/{add-comment.js → add-note.js} +26 -49
  272. package/src/components/collab-sidebar/board-store.js +85 -0
  273. package/src/components/collab-sidebar/floating-container.js +30 -0
  274. package/src/components/collab-sidebar/hooks.js +130 -178
  275. package/src/components/collab-sidebar/index.js +35 -106
  276. package/src/components/collab-sidebar/{comment-author-info.js → note-byline.js} +5 -6
  277. package/src/components/collab-sidebar/note-card.js +36 -0
  278. package/src/components/collab-sidebar/{comment-form.js → note-form.js} +29 -40
  279. package/src/components/collab-sidebar/{comment-indicator-toolbar.js → note-indicator-toolbar.js} +29 -32
  280. package/src/components/collab-sidebar/note-thread.js +331 -0
  281. package/src/components/collab-sidebar/note.js +209 -0
  282. package/src/components/collab-sidebar/notes.js +276 -0
  283. package/src/components/collab-sidebar/style.scss +21 -11
  284. package/src/components/collab-sidebar/test/utils.js +155 -0
  285. package/src/components/collab-sidebar/utils.js +125 -19
  286. package/src/components/collaborators-presence/avatar/component.tsx +1 -1
  287. package/src/components/collaborators-presence/styles/collaborators-list.scss +1 -1
  288. package/src/components/collaborators-presence/styles/collaborators-presence.scss +1 -1
  289. package/src/components/document-bar/index.js +4 -4
  290. package/src/components/document-outline/style.scss +1 -1
  291. package/src/components/error-boundary/index.js +3 -3
  292. package/src/components/list-view-sidebar/list-view-outline.js +6 -6
  293. package/src/components/media/media-editor-modal.js +95 -0
  294. package/src/components/media-categories/index.js +1 -1
  295. package/src/components/more-menu/index.js +4 -8
  296. package/src/components/post-actions/set-as-homepage.js +2 -2
  297. package/src/components/post-actions/set-as-posts-page.js +2 -2
  298. package/src/components/post-card-panel/index.js +7 -7
  299. package/src/components/post-content-information/index.js +3 -3
  300. package/src/components/post-excerpt/panel.js +3 -3
  301. package/src/components/post-last-edited-panel/index.js +3 -3
  302. package/src/components/post-preview-button/index.js +3 -2
  303. package/src/components/post-publish-button/index.js +6 -5
  304. package/src/components/post-publish-button/label.js +3 -1
  305. package/src/components/post-publish-panel/maybe-upload-media.js +1 -1
  306. package/src/components/post-publish-panel/postpublish.js +2 -2
  307. package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +10 -16
  308. package/src/components/post-revisions-panel/index.js +3 -3
  309. package/src/components/post-revisions-preview/diff-markers.js +1 -1
  310. package/src/components/post-revisions-preview/revisions-slider.js +1 -0
  311. package/src/components/post-revisions-preview/style.scss +1 -1
  312. package/src/components/post-saved-state/index.js +4 -1
  313. package/src/components/post-saved-state/test/__snapshots__/index.js.snap +0 -1
  314. package/src/components/post-text-editor/index.js +3 -3
  315. package/src/components/preview-dropdown/index.js +2 -2
  316. package/src/components/provider/index.js +4 -0
  317. package/src/components/provider/use-block-editor-settings.js +10 -0
  318. package/src/components/provider/use-upload-save-lock.js +2 -17
  319. package/src/components/resizable-editor/resize-handle.js +2 -5
  320. package/src/components/revision-created-panel/index.js +3 -3
  321. package/src/components/site-discussion/index.js +3 -3
  322. package/src/components/style-book/constants.ts +1 -1
  323. package/src/components/style-book/index.js +1 -1
  324. package/src/components/template-actions-panel/classic-theme-content.js +3 -3
  325. package/src/components/template-actions-panel/style.scss +1 -1
  326. package/src/components/template-part-menu-items/convert-to-regular.js +74 -12
  327. package/src/components/visual-editor/index.js +2 -29
  328. package/src/store/private-actions.js +0 -13
  329. package/src/store/private-selectors.js +0 -10
  330. package/src/store/reducer.js +0 -16
  331. package/src/utils/media-finalize/index.js +2 -1
  332. package/src/utils/media-finalize/test/index.js +25 -1
  333. package/src/utils/media-upload/index.js +26 -29
  334. package/build/components/collab-sidebar/add-comment.cjs +0 -129
  335. package/build/components/collab-sidebar/add-comment.cjs.map +0 -7
  336. package/build/components/collab-sidebar/comment-author-info.cjs.map +0 -7
  337. package/build/components/collab-sidebar/comment-form.cjs.map +0 -7
  338. package/build/components/collab-sidebar/comment-indicator-toolbar.cjs.map +0 -7
  339. package/build/components/collab-sidebar/comment-menu-item.cjs.map +0 -7
  340. package/build/components/collab-sidebar/comments.cjs +0 -816
  341. package/build/components/collab-sidebar/comments.cjs.map +0 -7
  342. package/build-module/components/collab-sidebar/add-comment.mjs +0 -100
  343. package/build-module/components/collab-sidebar/add-comment.mjs.map +0 -7
  344. package/build-module/components/collab-sidebar/comment-author-info.mjs.map +0 -7
  345. package/build-module/components/collab-sidebar/comment-form.mjs +0 -90
  346. package/build-module/components/collab-sidebar/comment-form.mjs.map +0 -7
  347. package/build-module/components/collab-sidebar/comment-indicator-toolbar.mjs.map +0 -7
  348. package/build-module/components/collab-sidebar/comment-menu-item.mjs.map +0 -7
  349. package/build-module/components/collab-sidebar/comments.mjs +0 -799
  350. package/build-module/components/collab-sidebar/comments.mjs.map +0 -7
  351. package/build-types/components/collab-sidebar/add-comment.d.ts +0 -10
  352. package/build-types/components/collab-sidebar/add-comment.d.ts.map +0 -1
  353. package/build-types/components/collab-sidebar/comment-author-info.d.ts +0 -8
  354. package/build-types/components/collab-sidebar/comment-author-info.d.ts.map +0 -1
  355. package/build-types/components/collab-sidebar/comment-form.d.ts +0 -11
  356. package/build-types/components/collab-sidebar/comment-form.d.ts.map +0 -1
  357. package/build-types/components/collab-sidebar/comment-indicator-toolbar.d.ts +0 -6
  358. package/build-types/components/collab-sidebar/comment-indicator-toolbar.d.ts.map +0 -1
  359. package/build-types/components/collab-sidebar/comment-menu-item.d.ts +0 -6
  360. package/build-types/components/collab-sidebar/comment-menu-item.d.ts.map +0 -1
  361. package/build-types/components/collab-sidebar/comments.d.ts +0 -12
  362. package/build-types/components/collab-sidebar/comments.d.ts.map +0 -1
  363. package/src/components/collab-sidebar/comments.js +0 -985
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { Tooltip, __experimentalVStack as VStack } from '@wordpress/components';
4
+ import { Tooltip } from '@wordpress/components';
5
+ import { Stack } from '@wordpress/ui';
5
6
  import { __, _x } from '@wordpress/i18n';
6
7
  import {
7
8
  dateI18n,
@@ -18,7 +19,7 @@ import { store as blockEditorStore } from '@wordpress/block-editor';
18
19
  */
19
20
  import { getAvatarBorderColor } from './utils';
20
21
 
21
- function CommentAuthorInfo( { avatar, name, date, userId } ) {
22
+ export function NoteByline( { avatar, name, date, userId } ) {
22
23
  const hasAvatar = !! avatar;
23
24
  const dateSettings = getDateSettings();
24
25
  const {
@@ -89,7 +90,7 @@ function CommentAuthorInfo( { avatar, name, date, userId } ) {
89
90
  ),
90
91
  } }
91
92
  />
92
- <VStack spacing="0">
93
+ <Stack direction="column">
93
94
  <span className="editor-collab-sidebar-panel__user-name">
94
95
  { name ?? currentUserName }
95
96
  </span>
@@ -103,9 +104,7 @@ function CommentAuthorInfo( { avatar, name, date, userId } ) {
103
104
  </time>
104
105
  </Tooltip>
105
106
  ) }
106
- </VStack>
107
+ </Stack>
107
108
  </>
108
109
  );
109
110
  }
110
-
111
- export default CommentAuthorInfo;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { FlexItem } from '@wordpress/components';
5
+ import { Stack } from '@wordpress/ui';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { NoteByline } from './note-byline';
11
+
12
+ export function NoteCard( { note, actions, className, children, ...props } ) {
13
+ return (
14
+ <Stack direction="column" gap="sm" className={ className } { ...props }>
15
+ <Stack direction="row" align="center" justify="flex-start" gap="md">
16
+ <NoteByline
17
+ avatar={ note?.author_avatar_urls?.[ 48 ] }
18
+ name={ note?.author_name }
19
+ date={ note?.date }
20
+ userId={ note?.author }
21
+ />
22
+ { actions && (
23
+ <FlexItem
24
+ className="editor-collab-sidebar-panel__note-actions"
25
+ onClick={ ( event ) => event.stopPropagation() }
26
+ >
27
+ <Stack direction="row" align="center">
28
+ { actions }
29
+ </Stack>
30
+ </FlexItem>
31
+ ) }
32
+ </Stack>
33
+ { children }
34
+ </Stack>
35
+ );
36
+ }
@@ -8,66 +8,51 @@ import TextareaAutosize from 'react-autosize-textarea';
8
8
  */
9
9
  import { useState } from '@wordpress/element';
10
10
  import {
11
- __experimentalVStack as VStack,
12
- __experimentalHStack as HStack,
13
11
  __experimentalTruncate as Truncate,
14
12
  Button,
15
- VisuallyHidden,
16
13
  } from '@wordpress/components';
14
+ import { Stack, VisuallyHidden } from '@wordpress/ui';
17
15
  import { __ } from '@wordpress/i18n';
18
- import { useInstanceId, useDebounce } from '@wordpress/compose';
16
+ import { useInstanceId } from '@wordpress/compose';
19
17
  import { isKeyboardEvent } from '@wordpress/keycodes';
20
18
 
21
19
  /**
22
20
  * Internal dependencies
23
21
  */
24
- import { sanitizeCommentString, noop } from './utils';
22
+ import { sanitizeNoteContent } from './utils';
25
23
 
26
- function CommentForm( {
27
- onSubmit,
28
- onCancel,
29
- thread,
30
- submitButtonText,
31
- labelText,
32
- reflowComments = noop,
33
- } ) {
24
+ export function NoteForm( { onSubmit, onCancel, note, labels } ) {
34
25
  const [ inputComment, setInputComment ] = useState(
35
- thread?.content?.raw ?? ''
26
+ note?.content?.raw ?? ''
36
27
  );
37
28
 
38
- // Regularly trigger a reflow as the user types since the textarea may grow or shrink.
39
- const debouncedCommentUpdated = useDebounce( reflowComments, 100 );
40
-
41
- const updateComment = ( value ) => {
42
- setInputComment( value );
43
- };
44
-
45
- const inputId = useInstanceId( CommentForm, 'comment-input' );
29
+ const inputId = useInstanceId( NoteForm, 'comment-input' );
46
30
  const isDisabled =
47
- inputComment === thread?.content?.raw ||
48
- ! sanitizeCommentString( inputComment ).length;
31
+ inputComment === note?.content?.raw ||
32
+ ! sanitizeNoteContent( inputComment ).length;
49
33
 
50
34
  return (
51
- <VStack
52
- className="editor-collab-sidebar-panel__comment-form"
53
- spacing="4"
54
- as="form"
35
+ <Stack
36
+ className="editor-collab-sidebar-panel__note-form"
37
+ direction="column"
38
+ gap="lg"
39
+ render={ <form /> }
55
40
  onSubmit={ ( event ) => {
56
41
  event.preventDefault();
57
42
  onSubmit( inputComment );
58
43
  setInputComment( '' );
59
44
  } }
60
45
  >
61
- <VisuallyHidden as="label" htmlFor={ inputId }>
62
- { labelText ?? __( 'Note' ) }
46
+ { /* eslint-disable-next-line jsx-a11y/label-has-associated-control */ }
47
+ <VisuallyHidden render={ <label htmlFor={ inputId } /> }>
48
+ { labels?.input ?? __( 'Note' ) }
63
49
  </VisuallyHidden>
64
50
  <TextareaAutosize
65
51
  id={ inputId }
66
52
  value={ inputComment ?? '' }
67
- onChange={ ( comment ) => {
68
- updateComment( comment.target.value );
69
- debouncedCommentUpdated();
70
- } }
53
+ onChange={ ( comment ) =>
54
+ setInputComment( comment.target.value )
55
+ }
71
56
  rows={ 1 }
72
57
  maxRows={ 20 }
73
58
  onKeyDown={ ( event ) => {
@@ -85,7 +70,13 @@ function CommentForm( {
85
70
  }
86
71
  } }
87
72
  />
88
- <HStack spacing="2" justify="flex-end" wrap>
73
+ <Stack
74
+ direction="row"
75
+ align="center"
76
+ justify="flex-end"
77
+ gap="sm"
78
+ wrap="wrap"
79
+ >
89
80
  <Button size="compact" variant="tertiary" onClick={ onCancel }>
90
81
  <Truncate>{ __( 'Cancel' ) }</Truncate>
91
82
  </Button>
@@ -96,11 +87,9 @@ function CommentForm( {
96
87
  type="submit"
97
88
  disabled={ isDisabled }
98
89
  >
99
- <Truncate>{ submitButtonText }</Truncate>
90
+ <Truncate>{ labels?.submit ?? __( 'Add note' ) }</Truncate>
100
91
  </Button>
101
- </HStack>
102
- </VStack>
92
+ </Stack>
93
+ </Stack>
103
94
  );
104
95
  }
105
-
106
- export default CommentForm;
@@ -1,11 +1,8 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- ToolbarButton,
6
- __experimentalText as Text,
7
- __experimentalHStack as HStack,
8
- } from '@wordpress/components';
4
+ import { ToolbarButton } from '@wordpress/components';
5
+ import { Stack } from '@wordpress/ui';
9
6
  import { __, sprintf } from '@wordpress/i18n';
10
7
  import { useMemo } from '@wordpress/element';
11
8
  import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
@@ -16,38 +13,38 @@ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
16
13
  import { unlock } from '../../lock-unlock';
17
14
  import { getAvatarBorderColor } from './utils';
18
15
 
19
- const { CommentIconToolbarSlotFill } = unlock( blockEditorPrivateApis );
16
+ const { NoteIconToolbarSlotFill } = unlock( blockEditorPrivateApis );
20
17
 
21
- const CommentAvatarIndicator = ( { onClick, thread } ) => {
18
+ export function NoteAvatarIndicator( { onClick, note } ) {
22
19
  const threadParticipants = useMemo( () => {
23
- if ( ! thread ) {
20
+ if ( ! note ) {
24
21
  return [];
25
22
  }
26
23
 
27
24
  const participantsMap = new Map();
28
- const allComments = [ thread, ...thread.reply ];
25
+ const allNotes = [ note, ...note.reply ];
29
26
 
30
27
  // Sort by date to show participants in chronological order.
31
- allComments.sort( ( a, b ) => new Date( a.date ) - new Date( b.date ) );
28
+ allNotes.sort( ( a, b ) => new Date( a.date ) - new Date( b.date ) );
32
29
 
33
- allComments.forEach( ( comment ) => {
34
- // Track thread participants (original commenter + repliers).
35
- if ( comment.author_name && comment.author_avatar_urls ) {
36
- if ( ! participantsMap.has( comment.author ) ) {
37
- participantsMap.set( comment.author, {
38
- name: comment.author_name,
30
+ allNotes.forEach( ( entry ) => {
31
+ // Track thread participants (original author + repliers).
32
+ if ( entry.author_name && entry.author_avatar_urls ) {
33
+ if ( ! participantsMap.has( entry.author ) ) {
34
+ participantsMap.set( entry.author, {
35
+ name: entry.author_name,
39
36
  avatar:
40
- comment.author_avatar_urls?.[ '48' ] ||
41
- comment.author_avatar_urls?.[ '96' ],
42
- id: comment.author,
43
- date: comment.date,
37
+ entry.author_avatar_urls?.[ '48' ] ||
38
+ entry.author_avatar_urls?.[ '96' ],
39
+ id: entry.author,
40
+ date: entry.date,
44
41
  } );
45
42
  }
46
43
  }
47
44
  } );
48
45
 
49
46
  return Array.from( participantsMap.values() );
50
- }, [ thread ] );
47
+ }, [ note ] );
51
48
 
52
49
  if ( ! threadParticipants.length ) {
53
50
  return null;
@@ -65,7 +62,7 @@ const CommentAvatarIndicator = ( { onClick, thread } ) => {
65
62
  );
66
63
  const threadHasMoreParticipants = threadParticipants.length > 100;
67
64
 
68
- // If we hit the comment limit, show "100+" instead of exact overflow count.
65
+ // If we hit the note limit, show "100+" instead of exact overflow count.
69
66
  const overflowText =
70
67
  threadHasMoreParticipants && overflowCount > 0
71
68
  ? __( '100+' )
@@ -76,20 +73,20 @@ const CommentAvatarIndicator = ( { onClick, thread } ) => {
76
73
  );
77
74
 
78
75
  return (
79
- <CommentIconToolbarSlotFill.Fill>
76
+ <NoteIconToolbarSlotFill.Fill>
80
77
  <ToolbarButton
81
- className="comment-avatar-indicator"
78
+ className="editor-note-indicator"
82
79
  label={ __( 'View notes' ) }
83
80
  onClick={ () => onClick() }
84
81
  showTooltip
85
82
  >
86
- <HStack spacing="1">
83
+ <Stack direction="row" align="center" gap="xs">
87
84
  { visibleParticipants.map( ( participant ) => (
88
85
  <img
89
86
  key={ participant.id }
90
87
  src={ participant.avatar }
91
88
  alt={ participant.name }
92
- className="comment-avatar"
89
+ className="editor-note-indicator__avatar"
93
90
  style={ {
94
91
  borderColor: getAvatarBorderColor(
95
92
  participant.id
@@ -98,12 +95,12 @@ const CommentAvatarIndicator = ( { onClick, thread } ) => {
98
95
  />
99
96
  ) ) }
100
97
  { overflowCount > 0 && (
101
- <Text weight={ 500 }>{ overflowText }</Text>
98
+ <span className="editor-note-indicator__overflow">
99
+ { overflowText }
100
+ </span>
102
101
  ) }
103
- </HStack>
102
+ </Stack>
104
103
  </ToolbarButton>
105
- </CommentIconToolbarSlotFill.Fill>
104
+ </NoteIconToolbarSlotFill.Fill>
106
105
  );
107
- };
108
-
109
- export default CommentAvatarIndicator;
106
+ }
@@ -0,0 +1,331 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useEffect, useRef } from '@wordpress/element';
10
+ import { Button } from '@wordpress/components';
11
+ import { Stack } from '@wordpress/ui';
12
+ import { useDebounce } from '@wordpress/compose';
13
+ import { __, _n, sprintf } from '@wordpress/i18n';
14
+ import { useDispatch } from '@wordpress/data';
15
+ import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
16
+ import {
17
+ store as blockEditorStore,
18
+ privateApis as blockEditorPrivateApis,
19
+ } from '@wordpress/block-editor';
20
+
21
+ /**
22
+ * Internal dependencies
23
+ */
24
+ import { AddNote } from './add-note';
25
+ import { Note } from './note';
26
+ import { NoteCard } from './note-card';
27
+ import { NoteForm } from './note-form';
28
+ import { FloatingContainer } from './floating-container';
29
+ import { focusNoteThread, getNoteExcerpt } from './utils';
30
+ import { store as editorStore } from '../../store';
31
+ import { unlock } from '../../lock-unlock';
32
+
33
+ const { useBlockElement } = unlock( blockEditorPrivateApis );
34
+
35
+ export function NoteThread( {
36
+ note,
37
+ onEditNote,
38
+ onAddReply,
39
+ onDeleteNote,
40
+ isSelected,
41
+ sidebarRef,
42
+ floating,
43
+ onKeyDown,
44
+ } ) {
45
+ const isFloating = !! floating;
46
+ const { toggleBlockHighlight, selectBlock, toggleBlockSpotlight } = unlock(
47
+ useDispatch( blockEditorStore )
48
+ );
49
+ const { selectNote } = unlock( useDispatch( editorStore ) );
50
+ const relatedBlockElement = useBlockElement( note.blockClientId );
51
+ const debouncedToggleBlockHighlight = useDebounce(
52
+ toggleBlockHighlight,
53
+ 50
54
+ );
55
+ const floatingRef = useRef( null );
56
+ const isKeyboardTabbingRef = useRef( false );
57
+
58
+ const registerThread = floating?.registerThread;
59
+ const unregisterThread = floating?.unregisterThread;
60
+
61
+ // Register block + floating elements with the board.
62
+ // The board's ResizeObserver and autoUpdate track changes automatically.
63
+ useEffect( () => {
64
+ const floatingEl = floatingRef.current;
65
+ if ( floatingEl && registerThread ) {
66
+ registerThread( note.id, relatedBlockElement, floatingEl );
67
+ }
68
+ return () => unregisterThread?.( note.id );
69
+ }, [ relatedBlockElement, note.id, registerThread, unregisterThread ] );
70
+
71
+ const onMouseEnter = () => {
72
+ debouncedToggleBlockHighlight( note.blockClientId, true );
73
+ };
74
+
75
+ const onMouseLeave = () => {
76
+ debouncedToggleBlockHighlight( note.blockClientId, false );
77
+ };
78
+
79
+ const onFocus = () => {
80
+ toggleBlockHighlight( note.blockClientId, true );
81
+ };
82
+
83
+ const onBlur = ( event ) => {
84
+ // Don't deselect notes when the browser window/tab loses focus.
85
+ if ( ! document.hasFocus() ) {
86
+ return;
87
+ }
88
+
89
+ const isNoteFocused = event.relatedTarget?.closest(
90
+ '.editor-collab-sidebar-panel__thread'
91
+ );
92
+ const isDialogFocused =
93
+ event.relatedTarget?.closest( '[role="dialog"]' );
94
+ const isTabbing = isKeyboardTabbingRef.current;
95
+
96
+ // When another note is clicked, do nothing because the current note is automatically closed.
97
+ if ( isNoteFocused && ! isTabbing ) {
98
+ return;
99
+ }
100
+ // When deleting a note, a dialog appears, but the note should not be collapsed.
101
+ if ( isDialogFocused ) {
102
+ return;
103
+ }
104
+ // When tabbing, do nothing if the focus is within the current note.
105
+ if (
106
+ isTabbing &&
107
+ event.currentTarget.contains( event.relatedTarget )
108
+ ) {
109
+ return;
110
+ }
111
+
112
+ // Closes a note that has lost focus when any of the following conditions are met:
113
+ // - An element other than a note is clicked.
114
+ // - Focus was lost by tabbing.
115
+ toggleBlockHighlight( note.blockClientId, false );
116
+ unselectNote();
117
+ };
118
+
119
+ const handleNoteSelect = () => {
120
+ selectNote( note.id );
121
+ toggleBlockSpotlight( note.blockClientId, true );
122
+ if ( !! note.blockClientId ) {
123
+ // Pass `null` as the second parameter to prevent focusing the block.
124
+ selectBlock( note.blockClientId, null );
125
+ }
126
+ };
127
+
128
+ const unselectNote = () => {
129
+ selectNote( undefined );
130
+ toggleBlockSpotlight( note.blockClientId, false );
131
+ };
132
+
133
+ const handleResolve = () => {
134
+ onEditNote( { id: note.id, status: 'approved' } );
135
+ unselectNote();
136
+ if ( isFloating ) {
137
+ relatedBlockElement?.focus();
138
+ } else {
139
+ focusNoteThread( note.id, sidebarRef.current );
140
+ }
141
+ };
142
+
143
+ const allReplies = note?.reply || [];
144
+ const lastReply =
145
+ allReplies.length > 0 ? allReplies[ allReplies.length - 1 ] : undefined;
146
+ const restReplies = allReplies.length > 0 ? allReplies.slice( 0, -1 ) : [];
147
+
148
+ const noteExcerpt = getNoteExcerpt(
149
+ stripHTML( note.content?.rendered ),
150
+ 10
151
+ );
152
+ const ariaLabel = !! note.blockClientId
153
+ ? sprintf(
154
+ // translators: %s: note excerpt
155
+ __( 'Note: %s' ),
156
+ noteExcerpt
157
+ )
158
+ : sprintf(
159
+ // translators: %s: note excerpt
160
+ __( 'Original block deleted. Note: %s' ),
161
+ noteExcerpt
162
+ );
163
+
164
+ if ( isFloating && note.id === 'new' ) {
165
+ return (
166
+ <AddNote
167
+ onSubmit={ onAddReply }
168
+ sidebarRef={ sidebarRef }
169
+ floating={ { y: floating.y, ref: floatingRef } }
170
+ />
171
+ );
172
+ }
173
+
174
+ return (
175
+ <FloatingContainer
176
+ floating={
177
+ isFloating ? { y: floating.y, ref: floatingRef } : undefined
178
+ }
179
+ className={ clsx( 'editor-collab-sidebar-panel__thread', {
180
+ 'is-selected': isSelected,
181
+ } ) }
182
+ id={ `note-thread-${ note.id }` }
183
+ gap="md"
184
+ onClick={ handleNoteSelect }
185
+ onMouseEnter={ onMouseEnter }
186
+ onMouseLeave={ onMouseLeave }
187
+ onFocus={ onFocus }
188
+ onBlur={ onBlur }
189
+ onKeyUp={ ( event ) => {
190
+ if ( event.key === 'Tab' ) {
191
+ isKeyboardTabbingRef.current = false;
192
+ }
193
+ } }
194
+ onKeyDown={ ( event ) => {
195
+ if ( event.key === 'Tab' ) {
196
+ isKeyboardTabbingRef.current = true;
197
+ } else {
198
+ onKeyDown( event );
199
+ }
200
+ } }
201
+ tabIndex={ 0 }
202
+ role="treeitem"
203
+ aria-label={ ariaLabel }
204
+ aria-expanded={ isSelected }
205
+ >
206
+ <Button
207
+ className="editor-collab-sidebar-panel__skip-to-note"
208
+ variant="secondary"
209
+ size="compact"
210
+ onClick={ () => {
211
+ focusNoteThread( note.id, sidebarRef.current, 'textarea' );
212
+ } }
213
+ >
214
+ { __( 'Add new reply' ) }
215
+ </Button>
216
+ { ! note.blockClientId && (
217
+ <p className="editor-collab-sidebar-panel__deleted-block-notice">
218
+ { __( 'Original block deleted.' ) }
219
+ </p>
220
+ ) }
221
+ <Note
222
+ note={ note }
223
+ isSelected={ isSelected }
224
+ onEditNote={ onEditNote }
225
+ onDeleteNote={ onDeleteNote }
226
+ onResolve={ handleResolve }
227
+ />
228
+ { isSelected &&
229
+ allReplies.map( ( reply ) => (
230
+ <Note
231
+ key={ reply.id }
232
+ note={ reply }
233
+ parentNote={ note }
234
+ isSelected={ isSelected }
235
+ onEditNote={ onEditNote }
236
+ onDeleteNote={ onDeleteNote }
237
+ />
238
+ ) ) }
239
+ { ! isSelected && restReplies.length > 0 && (
240
+ <Stack
241
+ direction="row"
242
+ align="center"
243
+ justify="space-between"
244
+ className="editor-collab-sidebar-panel__more-reply-separator"
245
+ >
246
+ <Button
247
+ size="compact"
248
+ variant="tertiary"
249
+ className="editor-collab-sidebar-panel__more-reply-button"
250
+ onClick={ () => {
251
+ selectNote( note.id );
252
+ focusNoteThread( note.id, sidebarRef.current );
253
+ } }
254
+ >
255
+ { sprintf(
256
+ // translators: %s: number of replies.
257
+ _n(
258
+ '%s more reply',
259
+ '%s more replies',
260
+ restReplies.length
261
+ ),
262
+ restReplies.length
263
+ ) }
264
+ </Button>
265
+ </Stack>
266
+ ) }
267
+ { ! isSelected && lastReply && (
268
+ <Note
269
+ note={ lastReply }
270
+ parentNote={ note }
271
+ isSelected={ false }
272
+ onEditNote={ onEditNote }
273
+ onDeleteNote={ onDeleteNote }
274
+ />
275
+ ) }
276
+ { isSelected && (
277
+ <NoteCard role="treeitem">
278
+ <NoteForm
279
+ onSubmit={ ( inputComment ) => {
280
+ if ( 'approved' === note.status ) {
281
+ // For reopening, include the content in the reopen action.
282
+ onEditNote( {
283
+ id: note.id,
284
+ status: 'hold',
285
+ content: inputComment,
286
+ } );
287
+ } else {
288
+ // For regular replies, add as separate comment.
289
+ onAddReply( {
290
+ content: inputComment,
291
+ parent: note.id,
292
+ } );
293
+ }
294
+ } }
295
+ onCancel={ ( event ) => {
296
+ // Prevent the parent onClick from being triggered.
297
+ event.stopPropagation();
298
+ unselectNote();
299
+ focusNoteThread( note.id, sidebarRef.current );
300
+ } }
301
+ labels={ {
302
+ submit:
303
+ 'approved' === note.status
304
+ ? __( 'Reopen & Reply' )
305
+ : __( 'Reply' ),
306
+ input: sprintf(
307
+ // translators: %1$s: note identifier, %2$s: author name
308
+ __( 'Reply to note %1$s by %2$s' ),
309
+ note.id,
310
+ note.author_name
311
+ ),
312
+ } }
313
+ />
314
+ </NoteCard>
315
+ ) }
316
+ { !! note.blockClientId && (
317
+ <Button
318
+ className="editor-collab-sidebar-panel__skip-to-block"
319
+ variant="secondary"
320
+ size="compact"
321
+ onClick={ ( event ) => {
322
+ event.stopPropagation();
323
+ relatedBlockElement?.focus();
324
+ } }
325
+ >
326
+ { __( 'Back to block' ) }
327
+ </Button>
328
+ ) }
329
+ </FloatingContainer>
330
+ );
331
+ }