@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,12 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import {
5
- useFloating,
6
- offset as offsetMiddleware,
7
- autoUpdate,
8
- } from '@floating-ui/react-dom';
9
-
10
1
  /**
11
2
  * WordPress dependencies
12
3
  */
@@ -24,6 +15,7 @@ import {
24
15
  privateApis as blockEditorPrivateApis,
25
16
  } from '@wordpress/block-editor';
26
17
  import { store as noticesStore } from '@wordpress/notices';
18
+ import { getScrollContainer } from '@wordpress/dom';
27
19
  import { decodeEntities } from '@wordpress/html-entities';
28
20
  import { store as interfaceStore } from '@wordpress/interface';
29
21
 
@@ -34,11 +26,11 @@ import { store as editorStore } from '../../store';
34
26
  import { FLOATING_NOTES_SIDEBAR } from './constants';
35
27
  import { unlock } from '../../lock-unlock';
36
28
  import { createBoardStore } from './board-store';
37
- import { calculateAllOffsets } from './utils';
29
+ import { calculateNotePositions } from './utils';
38
30
 
39
- const { useBlockElement, cleanEmptyObject } = unlock( blockEditorPrivateApis );
31
+ const { cleanEmptyObject } = unlock( blockEditorPrivateApis );
40
32
 
41
- export function useBlockComments( postId ) {
33
+ export function useNoteThreads( postId ) {
42
34
  const queryArgs = {
43
35
  post: postId,
44
36
  type: 'note',
@@ -61,110 +53,89 @@ export function useBlockComments( postId ) {
61
53
  };
62
54
  }, [] );
63
55
 
64
- // Process comments to build the tree structure.
65
- const { resultComments, unresolvedSortedThreads } = useMemo( () => {
56
+ // Process notes to build the tree structure.
57
+ const { notes, unresolvedNotes } = useMemo( () => {
66
58
  if ( ! threads || threads.length === 0 ) {
67
- return { resultComments: [], unresolvedSortedThreads: [] };
59
+ return { notes: [], unresolvedNotes: [] };
68
60
  }
69
61
 
70
- const blocksWithComments = clientIds.reduce( ( results, clientId ) => {
71
- const commentId = getBlockAttributes( clientId )?.metadata?.noteId;
72
- if ( commentId ) {
73
- results[ clientId ] = commentId;
62
+ // Single pass over clientIds: build clientId->noteId map AND reverse lookup.
63
+ const blocksWithNotes = {};
64
+ const clientIdByNoteId = new Map();
65
+ for ( const clientId of clientIds ) {
66
+ const noteId = getBlockAttributes( clientId )?.metadata?.noteId;
67
+ if ( noteId ) {
68
+ const key = String( noteId );
69
+ blocksWithNotes[ clientId ] = key;
70
+ clientIdByNoteId.set( key, clientId );
74
71
  }
75
- return results;
76
- }, {} );
77
-
78
- // Create a compare to store the references to all objects by id.
79
- const compare = {};
80
- const result = [];
81
-
82
- // Create a reverse map for faster lookup.
83
- const commentIdToBlockClientId = Object.keys(
84
- blocksWithComments
85
- ).reduce( ( mapping, clientId ) => {
86
- mapping[ blocksWithComments[ clientId ] ] = clientId;
87
- return mapping;
88
- }, {} );
89
-
90
- // Initialize each object with an empty `reply` array and map blockClientId.
91
- threads.forEach( ( item ) => {
92
- const itemBlock = commentIdToBlockClientId[ item.id ];
93
-
94
- compare[ item.id ] = {
72
+ }
73
+
74
+ // Materialize threads; collect roots; replies linked in a second pass
75
+ // via unshift to invert order (matches prior reverse semantics).
76
+ const threadsById = new Map();
77
+ const rootThreads = [];
78
+ for ( const item of threads ) {
79
+ const thread = {
95
80
  ...item,
96
81
  reply: [],
97
- blockClientId: item.parent === 0 ? itemBlock : null,
82
+ blockClientId:
83
+ item.parent === 0
84
+ ? clientIdByNoteId.get( String( item.id ) ) ?? null
85
+ : null,
98
86
  };
99
- } );
100
-
101
- // Iterate over the data to build the tree structure.
102
- threads.forEach( ( item ) => {
87
+ threadsById.set( item.id, thread );
103
88
  if ( item.parent === 0 ) {
104
- // If parent is 0, it's a root item, push it to the result array.
105
- result.push( compare[ item.id ] );
106
- } else if ( compare[ item.parent ] ) {
107
- // Otherwise, find its parent and push it to the parent's `reply` array.
108
- compare[ item.parent ].reply.push( compare[ item.id ] );
89
+ rootThreads.push( thread );
90
+ }
91
+ }
92
+ for ( const item of threads ) {
93
+ if ( item.parent !== 0 ) {
94
+ threadsById
95
+ .get( item.parent )
96
+ ?.reply.unshift( threadsById.get( item.id ) );
109
97
  }
110
- } );
111
-
112
- if ( 0 === result?.length ) {
113
- return { resultComments: [], unresolvedSortedThreads: [] };
114
98
  }
115
99
 
116
- const updatedResult = result.map( ( item ) => ( {
117
- ...item,
118
- reply: [ ...item.reply ].reverse(),
119
- } ) );
120
-
121
- const threadIdMap = new Map(
122
- updatedResult.map( ( thread ) => [ String( thread.id ), thread ] )
123
- );
124
-
125
- // Prepare sets to determine which threads are linked to existing blocks.
126
- const mappedIds = new Set(
127
- Object.values( blocksWithComments ).map( ( id ) => String( id ) )
128
- );
129
-
130
- // Get comments by block order, first unresolved, then resolved.
131
- const unresolvedSortedComments = Object.values( blocksWithComments )
132
- .map( ( commentId ) => threadIdMap.get( String( commentId ) ) )
133
- .filter(
134
- ( thread ) => thread !== undefined && thread.status === 'hold'
135
- );
100
+ if ( rootThreads.length === 0 ) {
101
+ return { notes: [], unresolvedNotes: [] };
102
+ }
136
103
 
137
- const resolvedSortedComments = Object.values( blocksWithComments )
138
- .map( ( commentId ) => threadIdMap.get( String( commentId ) ) )
139
- .filter(
140
- ( thread ) =>
141
- thread !== undefined && thread.status === 'approved'
142
- );
104
+ // Single partition over notes-in-block-order.
105
+ const unresolved = [];
106
+ const resolved = [];
107
+ for ( const noteId of Object.values( blocksWithNotes ) ) {
108
+ const thread =
109
+ threadsById.get( Number( noteId ) ) ??
110
+ threadsById.get( noteId );
111
+ if ( ! thread ) {
112
+ continue;
113
+ }
114
+ if ( thread.status === 'hold' ) {
115
+ unresolved.push( thread );
116
+ } else if ( thread.status === 'approved' ) {
117
+ resolved.push( thread );
118
+ }
119
+ }
143
120
 
144
- // Append orphaned notes (whose related block was deleted or missing).
145
- const orphanedComments = updatedResult.filter(
146
- ( thread ) => ! mappedIds.has( String( thread.id ) )
121
+ // Orphans: root threads without a linked block. They only need to come last.
122
+ const orphans = rootThreads.filter(
123
+ ( thread ) => ! thread.blockClientId
147
124
  );
148
125
 
149
- const allSortedComments = [
150
- ...unresolvedSortedComments,
151
- ...resolvedSortedComments,
152
- ...orphanedComments,
153
- ];
154
-
155
126
  return {
156
- resultComments: allSortedComments,
157
- unresolvedSortedThreads: unresolvedSortedComments,
127
+ notes: [ ...unresolved, ...resolved, ...orphans ],
128
+ unresolvedNotes: unresolved,
158
129
  };
159
130
  }, [ clientIds, threads, getBlockAttributes ] );
160
131
 
161
132
  return {
162
- resultComments,
163
- unresolvedSortedThreads,
133
+ notes,
134
+ unresolvedNotes,
164
135
  };
165
136
  }
166
137
 
167
- export function useBlockCommentsActions() {
138
+ export function useNoteActions() {
168
139
  const { createNotice } = useDispatch( noticesStore );
169
140
  const { saveEntityRecord, deleteEntityRecord } = useDispatch( coreStore );
170
141
  const { getCurrentPostId } = useSelect( editorStore );
@@ -198,7 +169,7 @@ export function useBlockCommentsActions() {
198
169
  { throwOnError: true }
199
170
  );
200
171
 
201
- // If it's a main comment, update the block attributes with the comment id.
172
+ // If it's a top-level note, update the block attributes with the note id.
202
173
  if ( ! parent && savedRecord?.id ) {
203
174
  const clientId = getSelectedBlockClientId();
204
175
  const metadata = getBlockAttributes( clientId )?.metadata;
@@ -248,8 +219,8 @@ export function useBlockCommentsActions() {
248
219
  }
249
220
  );
250
221
 
251
- // Then create a new comment with the metadata.
252
- const newCommentData = {
222
+ // Then create a new note with the metadata.
223
+ const newNoteData = {
253
224
  post: getCurrentPostId(),
254
225
  content: content || '', // Empty content for resolve, content for reopen.
255
226
  type: 'note',
@@ -261,7 +232,7 @@ export function useBlockCommentsActions() {
261
232
  },
262
233
  };
263
234
 
264
- await saveEntityRecord( 'root', 'comment', newCommentData, {
235
+ await saveEntityRecord( 'root', 'comment', newNoteData, {
265
236
  throwOnError: true,
266
237
  } );
267
238
  } else {
@@ -289,19 +260,13 @@ export function useBlockCommentsActions() {
289
260
  }
290
261
  };
291
262
 
292
- const onDelete = async ( comment ) => {
263
+ const onDelete = async ( note ) => {
293
264
  try {
294
- await deleteEntityRecord(
295
- 'root',
296
- 'comment',
297
- comment.id,
298
- undefined,
299
- {
300
- throwOnError: true,
301
- }
302
- );
265
+ await deleteEntityRecord( 'root', 'comment', note.id, undefined, {
266
+ throwOnError: true,
267
+ } );
303
268
 
304
- if ( ! comment.parent ) {
269
+ if ( ! note.parent ) {
305
270
  const clientId = getSelectedBlockClientId();
306
271
  const metadata = getBlockAttributes( clientId )?.metadata;
307
272
  updateBlockAttributes( clientId, {
@@ -354,92 +319,67 @@ export function useEnableFloatingSidebar( enabled = false ) {
354
319
  }, [ enabled, registry ] );
355
320
  }
356
321
 
357
- export function useFloatingBoard( { threads, selectedNoteId, isFloating } ) {
358
- const [ boardOffsets, setBoardOffsets ] = useState( {} );
322
+ export function useFloatingBoard( {
323
+ threads,
324
+ selectedNoteId,
325
+ isFloating,
326
+ sidebarRef,
327
+ } ) {
328
+ const [ notePositions, setNotePositions ] = useState( {} );
359
329
  const [ store ] = useState( createBoardStore );
360
- const { setCanvasMinHeight } = unlock( useDispatch( editorStore ) );
361
330
 
362
331
  const heights = useSyncExternalStore( store.subscribe, store.getSnapshot );
363
332
 
364
- // Recalc is deferred to a rAF; the cleanup cancels the pending frame
365
- // when deps change, so back-to-back updates collapse into one paint.
333
+ // Notes are positioned in canvas content-space; CSS inherits
334
+ // `--canvas-scroll` to translate each thread in sync with the canvas.
366
335
  useEffect( () => {
367
- if ( ! isFloating ) {
336
+ if ( ! isFloating || ! sidebarRef?.current ) {
368
337
  return;
369
338
  }
370
339
 
340
+ const panel = sidebarRef.current;
341
+ const blockEl = store.getFirstBlockElement();
342
+ // Climb to the block-list root so nested scroll containers
343
+ // (e.g. a Group with overflow:auto) don't shadow the canvas.
344
+ const rootEl = blockEl?.closest( '.is-root-container' ) ?? blockEl;
345
+ const canvas = rootEl ? getScrollContainer( rootEl ) : null;
346
+
347
+ const applyScroll = () => {
348
+ panel.style.setProperty(
349
+ '--canvas-scroll',
350
+ `${ -( canvas?.scrollTop ?? 0 ) }px`
351
+ );
352
+ };
353
+
354
+ // Recalc is deferred to a rAF; back-to-back updates collapse into one paint.
371
355
  const rafId = window.requestAnimationFrame( () => {
372
- const { offsets, minHeight } = calculateAllOffsets( {
356
+ const result = calculateNotePositions( {
373
357
  threads,
374
358
  selectedNoteId,
375
359
  blockRects: store.getBlockRects(),
376
360
  heights,
361
+ scrollTop: canvas?.scrollTop ?? 0,
377
362
  } );
378
- setBoardOffsets( offsets );
379
- setCanvasMinHeight( minHeight );
363
+
364
+ setNotePositions( result.positions );
365
+ applyScroll();
380
366
  } );
381
367
 
382
- return () => window.cancelAnimationFrame( rafId );
383
- }, [
384
- heights,
385
- isFloating,
386
- selectedNoteId,
387
- setCanvasMinHeight,
388
- store,
389
- threads,
390
- ] );
368
+ // Root scrolling elements (documentElement/body) don't fire scroll
369
+ // on themselves; capture on the window catches them in either canvas.
370
+ const view = canvas?.ownerDocument?.defaultView;
371
+ const listenerOptions = { passive: true, capture: true };
372
+ view?.addEventListener( 'scroll', applyScroll, listenerOptions );
373
+
374
+ return () => {
375
+ window.cancelAnimationFrame( rafId );
376
+ view?.removeEventListener( 'scroll', applyScroll, listenerOptions );
377
+ };
378
+ }, [ sidebarRef, heights, isFloating, selectedNoteId, store, threads ] );
391
379
 
392
380
  return {
393
- boardOffsets,
381
+ notePositions,
394
382
  registerThread: store.registerThread,
395
383
  unregisterThread: store.unregisterThread,
396
384
  };
397
385
  }
398
-
399
- export function useFloatingThread( {
400
- thread,
401
- calculatedOffset,
402
- registerThread,
403
- unregisterThread,
404
- } ) {
405
- const blockElement = useBlockElement( thread.blockClientId );
406
-
407
- // Use floating-ui to track the block element's position with the calculated offset.
408
- const { y, refs } = useFloating( {
409
- placement: 'right-start',
410
- middleware: [
411
- offsetMiddleware( {
412
- crossAxis: calculatedOffset || -16,
413
- } ),
414
- ],
415
- whileElementsMounted: autoUpdate,
416
- } );
417
-
418
- // Set the floating-ui reference element.
419
- useEffect( () => {
420
- if ( blockElement ) {
421
- refs.setReference( blockElement );
422
- }
423
- }, [ blockElement, refs ] );
424
-
425
- // Register block + floating elements with the board.
426
- // The board's ResizeObserver tracks height changes automatically.
427
- useEffect( () => {
428
- const floatingEl = refs.floating?.current;
429
- if ( floatingEl && registerThread ) {
430
- registerThread( thread.id, blockElement, floatingEl );
431
- }
432
- return () => unregisterThread?.( thread.id );
433
- }, [
434
- blockElement,
435
- thread.id,
436
- refs.floating,
437
- registerThread,
438
- unregisterThread,
439
- ] );
440
-
441
- return {
442
- y,
443
- refs,
444
- };
445
- }
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { useSelect, useDispatch } from '@wordpress/data';
6
- import { __experimentalVStack as VStack } from '@wordpress/components';
7
6
  import { useRef } from '@wordpress/element';
8
7
  import { useViewportMatch } from '@wordpress/compose';
9
8
  import { useShortcut } from '@wordpress/keyboard-shortcuts';
@@ -21,58 +20,15 @@ import {
21
20
  FLOATING_NOTES_SIDEBAR,
22
21
  SIDEBARS,
23
22
  } from './constants';
24
- import { Comments } from './comments';
23
+ import { Notes } from './notes';
25
24
  import { store as editorStore } from '../../store';
26
- import AddCommentMenuItem from './comment-menu-item';
27
- import CommentAvatarIndicator from './comment-indicator-toolbar';
25
+ import { AddNoteMenuItem } from './add-note-menu-item';
26
+ import { NoteAvatarIndicator } from './note-indicator-toolbar';
28
27
  import { useGlobalStylesContext } from '../global-styles-provider';
29
- import {
30
- useBlockComments,
31
- useBlockCommentsActions,
32
- useEnableFloatingSidebar,
33
- } from './hooks';
28
+ import { useNoteThreads, useEnableFloatingSidebar } from './hooks';
34
29
  import PostTypeSupportCheck from '../post-type-support-check';
35
30
  import { unlock } from '../../lock-unlock';
36
31
 
37
- function NotesSidebarContent( {
38
- styles,
39
- comments,
40
- commentSidebarRef,
41
- isFloating = false,
42
- } ) {
43
- const { onCreate, onEdit, onDelete } = useBlockCommentsActions();
44
-
45
- return (
46
- <VStack
47
- className="editor-collab-sidebar-panel"
48
- style={ styles }
49
- role="tree"
50
- spacing="3"
51
- justify="flex-start"
52
- ref={ ( node ) => {
53
- // Sometimes previous sidebar unmounts after the new one mounts.
54
- // This ensures we always have the latest reference.
55
- if ( node ) {
56
- // eslint-disable-next-line react-compiler/react-compiler
57
- commentSidebarRef.current = node;
58
- }
59
- } }
60
- aria-label={
61
- isFloating ? __( 'Unresolved notes' ) : __( 'All notes' )
62
- }
63
- >
64
- <Comments
65
- threads={ comments }
66
- onEditComment={ onEdit }
67
- onAddReply={ onCreate }
68
- onCommentDelete={ onDelete }
69
- commentSidebarRef={ commentSidebarRef }
70
- isFloating={ isFloating }
71
- />
72
- </VStack>
73
- );
74
- }
75
-
76
32
  function NotesSidebar( { postId } ) {
77
33
  const { getActiveComplementaryArea } = useSelect( interfaceStore );
78
34
  const { enableComplementaryArea } = useDispatch( interfaceStore );
@@ -81,28 +37,22 @@ function NotesSidebar( { postId } ) {
81
37
  );
82
38
  const { selectNote } = unlock( useDispatch( editorStore ) );
83
39
  const isLargeViewport = useViewportMatch( 'medium' );
84
- const commentSidebarRef = useRef( null );
40
+ const sidebarRef = useRef( null );
85
41
 
86
- const { clientId, blockCommentId, isClassicBlock } = useSelect(
87
- ( select ) => {
88
- const {
89
- getBlockAttributes,
90
- getSelectedBlockClientId,
91
- getBlockName,
92
- } = select( blockEditorStore );
93
- const _clientId = getSelectedBlockClientId();
94
- return {
95
- clientId: _clientId,
96
- blockCommentId: _clientId
97
- ? getBlockAttributes( _clientId )?.metadata?.noteId
98
- : null,
99
- isClassicBlock: _clientId
100
- ? getBlockName( _clientId ) === 'core/freeform'
101
- : false,
102
- };
103
- },
104
- []
105
- );
42
+ const { clientId, noteId, isClassicBlock } = useSelect( ( select ) => {
43
+ const { getBlockAttributes, getSelectedBlockClientId, getBlockName } =
44
+ select( blockEditorStore );
45
+ const _clientId = getSelectedBlockClientId();
46
+ return {
47
+ clientId: _clientId,
48
+ noteId: _clientId
49
+ ? getBlockAttributes( _clientId )?.metadata?.noteId
50
+ : null,
51
+ isClassicBlock: _clientId
52
+ ? getBlockName( _clientId ) === 'core/freeform'
53
+ : false,
54
+ };
55
+ }, [] );
106
56
  const { isDistractionFree } = useSelect( ( select ) => {
107
57
  const { get } = select( preferencesStore );
108
58
  return {
@@ -114,17 +64,15 @@ function NotesSidebar( { postId } ) {
114
64
  []
115
65
  );
116
66
 
117
- const { resultComments, unresolvedSortedThreads } =
118
- useBlockComments( postId );
67
+ const { notes, unresolvedNotes } = useNoteThreads( postId );
119
68
 
120
69
  // Only enable the floating sidebar for large viewports.
121
70
  const showFloatingSidebar = isLargeViewport;
122
71
  // Fallback to "All notes" sidebar on smaller viewports.
123
- const showAllNotesSidebar =
124
- resultComments.length > 0 || ! showFloatingSidebar;
72
+ const showAllNotesSidebar = notes.length > 0 || ! showFloatingSidebar;
125
73
  useEnableFloatingSidebar(
126
74
  showFloatingSidebar &&
127
- ( unresolvedSortedThreads.length > 0 || selectedNote !== undefined )
75
+ ( unresolvedNotes.length > 0 || selectedNote !== undefined )
128
76
  );
129
77
 
130
78
  useShortcut(
@@ -137,10 +85,7 @@ function NotesSidebar( { postId } ) {
137
85
  // When multiple notes per block are supported. Remove note ID check.
138
86
  // See: https://github.com/WordPress/gutenberg/pull/75147.
139
87
  isDisabled:
140
- isDistractionFree ||
141
- isClassicBlock ||
142
- ! clientId ||
143
- !! blockCommentId,
88
+ isDistractionFree || isClassicBlock || ! clientId || !! noteId,
144
89
  }
145
90
  );
146
91
 
@@ -149,8 +94,8 @@ function NotesSidebar( { postId } ) {
149
94
  const backgroundColor = GlobalStyles?.styles?.color?.background;
150
95
 
151
96
  // Find the current thread for the selected block.
152
- const currentThread = blockCommentId
153
- ? resultComments.find( ( thread ) => thread.id === blockCommentId )
97
+ const currentThread = noteId
98
+ ? notes.find( ( thread ) => thread.id === noteId )
154
99
  : null;
155
100
 
156
101
  async function openTheSidebar( selectedClientId ) {
@@ -160,7 +105,7 @@ function NotesSidebar( { postId } ) {
160
105
  selectedClientId && selectedClientId !== clientId
161
106
  ? selectedClientId
162
107
  : clientId;
163
- const targetNote = resultComments.find(
108
+ const targetNote = notes.find(
164
109
  ( note ) => note.blockClientId === targetClientId
165
110
  );
166
111
 
@@ -187,18 +132,18 @@ function NotesSidebar( { postId } ) {
187
132
  }
188
133
 
189
134
  if ( isDistractionFree ) {
190
- return <AddCommentMenuItem isDistractionFree />;
135
+ return <AddNoteMenuItem isDistractionFree />;
191
136
  }
192
137
 
193
138
  return (
194
139
  <>
195
140
  { !! currentThread && (
196
- <CommentAvatarIndicator
197
- thread={ currentThread }
141
+ <NoteAvatarIndicator
142
+ note={ currentThread }
198
143
  onClick={ openTheSidebar }
199
144
  />
200
145
  ) }
201
- <AddCommentMenuItem onClick={ openTheSidebar } />
146
+ <AddNoteMenuItem onClick={ openTheSidebar } />
202
147
  { showAllNotesSidebar && (
203
148
  <PluginSidebar
204
149
  identifier={ ALL_NOTES_SIDEBAR }
@@ -212,10 +157,7 @@ function NotesSidebar( { postId } ) {
212
157
  icon={ commentIcon }
213
158
  closeLabel={ __( 'Close Notes' ) }
214
159
  >
215
- <NotesSidebarContent
216
- comments={ resultComments }
217
- commentSidebarRef={ commentSidebarRef }
218
- />
160
+ <Notes notes={ notes } sidebarRef={ sidebarRef } />
219
161
  </PluginSidebar>
220
162
  ) }
221
163
  { isLargeViewport && (
@@ -227,12 +169,10 @@ function NotesSidebar( { postId } ) {
227
169
  headerClassName="editor-collab-sidebar__header"
228
170
  backgroundColor={ backgroundColor }
229
171
  >
230
- <NotesSidebarContent
231
- comments={ unresolvedSortedThreads }
232
- commentSidebarRef={ commentSidebarRef }
233
- styles={ {
234
- backgroundColor,
235
- } }
172
+ <Notes
173
+ notes={ unresolvedNotes }
174
+ sidebarRef={ sidebarRef }
175
+ styles={ { backgroundColor } }
236
176
  isFloating
237
177
  />
238
178
  </PluginSidebar>
@@ -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
+ }