@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.
- package/CHANGELOG.md +2 -0
- package/build/components/collab-sidebar/{comment-menu-item.cjs → add-note-menu-item.cjs} +17 -14
- package/build/components/collab-sidebar/add-note-menu-item.cjs.map +7 -0
- package/build/components/collab-sidebar/{add-comment.cjs → add-note.cjs} +28 -41
- package/build/components/collab-sidebar/add-note.cjs.map +7 -0
- package/build/components/collab-sidebar/board-store.cjs +3 -0
- package/build/components/collab-sidebar/board-store.cjs.map +2 -2
- package/build/components/collab-sidebar/floating-container.cjs +4 -3
- package/build/components/collab-sidebar/floating-container.cjs.map +3 -3
- package/build/components/collab-sidebar/hooks.cjs +92 -135
- package/build/components/collab-sidebar/hooks.cjs.map +3 -3
- package/build/components/collab-sidebar/index.cjs +28 -79
- package/build/components/collab-sidebar/index.cjs.map +3 -3
- package/build/components/collab-sidebar/{comment-author-info.cjs → note-byline.cjs} +13 -9
- package/build/components/collab-sidebar/note-byline.cjs.map +7 -0
- package/build/components/collab-sidebar/note-card.cjs +58 -0
- package/build/components/collab-sidebar/note-card.cjs.map +7 -0
- package/build/components/collab-sidebar/{comment-form.cjs → note-form.cjs} +45 -36
- package/build/components/collab-sidebar/note-form.cjs.map +7 -0
- package/build/components/collab-sidebar/{comment-indicator-toolbar.cjs → note-indicator-toolbar.cjs} +31 -27
- package/build/components/collab-sidebar/note-indicator-toolbar.cjs.map +7 -0
- package/build/components/collab-sidebar/note-thread.cjs +321 -0
- package/build/components/collab-sidebar/note-thread.cjs.map +7 -0
- package/build/components/collab-sidebar/note.cjs +207 -0
- package/build/components/collab-sidebar/note.cjs.map +7 -0
- package/build/components/collab-sidebar/notes.cjs +237 -0
- package/build/components/collab-sidebar/notes.cjs.map +7 -0
- package/build/components/collab-sidebar/utils.cjs +23 -25
- package/build/components/collab-sidebar/utils.cjs.map +2 -2
- package/build/components/document-bar/index.cjs.map +3 -3
- package/build/components/error-boundary/index.cjs.map +3 -3
- package/build/components/list-view-sidebar/list-view-outline.cjs.map +3 -3
- package/build/components/media/media-editor-modal.cjs +93 -0
- package/build/components/media/media-editor-modal.cjs.map +7 -0
- package/build/components/more-menu/index.cjs +3 -2
- package/build/components/more-menu/index.cjs.map +2 -2
- package/build/components/post-actions/set-as-homepage.cjs.map +3 -3
- package/build/components/post-actions/set-as-posts-page.cjs.map +3 -3
- package/build/components/post-card-panel/index.cjs +2 -2
- package/build/components/post-card-panel/index.cjs.map +3 -3
- package/build/components/post-content-information/index.cjs.map +3 -3
- package/build/components/post-excerpt/panel.cjs.map +3 -3
- package/build/components/post-last-edited-panel/index.cjs.map +3 -3
- package/build/components/post-preview-button/index.cjs +3 -2
- package/build/components/post-preview-button/index.cjs.map +2 -2
- package/build/components/post-publish-button/index.cjs +2 -2
- package/build/components/post-publish-button/index.cjs.map +2 -2
- package/build/components/post-publish-button/label.cjs +4 -2
- package/build/components/post-publish-button/label.cjs.map +2 -2
- package/build/components/post-publish-panel/postpublish.cjs +3 -2
- package/build/components/post-publish-panel/postpublish.cjs.map +2 -2
- package/build/components/post-revisions-panel/index.cjs +2 -2
- package/build/components/post-revisions-panel/index.cjs.map +2 -2
- package/build/components/post-revisions-preview/diff-markers.cjs +1 -1
- package/build/components/post-revisions-preview/diff-markers.cjs.map +2 -2
- package/build/components/post-revisions-preview/revisions-slider.cjs +1 -0
- package/build/components/post-revisions-preview/revisions-slider.cjs.map +2 -2
- package/build/components/post-saved-state/index.cjs +4 -1
- package/build/components/post-saved-state/index.cjs.map +2 -2
- package/build/components/post-text-editor/index.cjs +3 -4
- package/build/components/post-text-editor/index.cjs.map +2 -2
- package/build/components/preview-dropdown/index.cjs +3 -2
- package/build/components/preview-dropdown/index.cjs.map +2 -2
- package/build/components/provider/index.cjs +3 -1
- package/build/components/provider/index.cjs.map +3 -3
- package/build/components/provider/use-block-editor-settings.cjs +7 -1
- package/build/components/provider/use-block-editor-settings.cjs.map +3 -3
- package/build/components/provider/use-upload-save-lock.cjs +2 -12
- package/build/components/provider/use-upload-save-lock.cjs.map +2 -2
- package/build/components/resizable-editor/resize-handle.cjs +2 -1
- package/build/components/resizable-editor/resize-handle.cjs.map +2 -2
- package/build/components/revision-created-panel/index.cjs.map +3 -3
- package/build/components/site-discussion/index.cjs.map +2 -2
- package/build/components/template-actions-panel/classic-theme-content.cjs.map +2 -2
- package/build/components/template-part-menu-items/convert-to-regular.cjs +54 -11
- package/build/components/template-part-menu-items/convert-to-regular.cjs.map +3 -3
- package/build/components/visual-editor/index.cjs +5 -22
- package/build/components/visual-editor/index.cjs.map +2 -2
- package/build/store/private-actions.cjs +0 -8
- package/build/store/private-actions.cjs.map +2 -2
- package/build/store/private-selectors.cjs +0 -5
- package/build/store/private-selectors.cjs.map +2 -2
- package/build/store/reducer.cjs +0 -10
- package/build/store/reducer.cjs.map +2 -2
- package/build/utils/media-finalize/index.cjs +3 -2
- package/build/utils/media-finalize/index.cjs.map +2 -2
- package/build/utils/media-upload/index.cjs +14 -25
- package/build/utils/media-upload/index.cjs.map +2 -2
- package/build-module/components/collab-sidebar/{comment-menu-item.mjs → add-note-menu-item.mjs} +10 -11
- package/build-module/components/collab-sidebar/add-note-menu-item.mjs.map +7 -0
- package/build-module/components/collab-sidebar/{add-comment.mjs → add-note.mjs} +26 -29
- package/build-module/components/collab-sidebar/add-note.mjs.map +7 -0
- package/build-module/components/collab-sidebar/board-store.mjs +3 -0
- package/build-module/components/collab-sidebar/board-store.mjs.map +2 -2
- package/build-module/components/collab-sidebar/floating-container.mjs +4 -3
- package/build-module/components/collab-sidebar/floating-container.mjs.map +2 -2
- package/build-module/components/collab-sidebar/hooks.mjs +91 -137
- package/build-module/components/collab-sidebar/hooks.mjs.map +2 -2
- package/build-module/components/collab-sidebar/index.mjs +29 -84
- package/build-module/components/collab-sidebar/index.mjs.map +2 -2
- package/build-module/components/collab-sidebar/{comment-author-info.mjs → note-byline.mjs} +7 -7
- package/build-module/components/collab-sidebar/note-byline.mjs.map +7 -0
- package/build-module/components/collab-sidebar/note-card.mjs +33 -0
- package/build-module/components/collab-sidebar/note-card.mjs.map +7 -0
- package/build-module/components/collab-sidebar/note-form.mjs +84 -0
- package/build-module/components/collab-sidebar/note-form.mjs.map +7 -0
- package/build-module/components/collab-sidebar/{comment-indicator-toolbar.mjs → note-indicator-toolbar.mjs} +25 -29
- package/build-module/components/collab-sidebar/note-indicator-toolbar.mjs.map +7 -0
- package/build-module/components/collab-sidebar/note-thread.mjs +289 -0
- package/build-module/components/collab-sidebar/note-thread.mjs.map +7 -0
- package/build-module/components/collab-sidebar/note.mjs +176 -0
- package/build-module/components/collab-sidebar/note.mjs.map +7 -0
- package/build-module/components/collab-sidebar/notes.mjs +215 -0
- package/build-module/components/collab-sidebar/notes.mjs.map +7 -0
- package/build-module/components/collab-sidebar/utils.mjs +19 -21
- package/build-module/components/collab-sidebar/utils.mjs.map +2 -2
- package/build-module/components/document-bar/index.mjs +3 -3
- package/build-module/components/document-bar/index.mjs.map +2 -2
- package/build-module/components/error-boundary/index.mjs +2 -2
- package/build-module/components/error-boundary/index.mjs.map +2 -2
- package/build-module/components/list-view-sidebar/list-view-outline.mjs +5 -5
- package/build-module/components/list-view-sidebar/list-view-outline.mjs.map +2 -2
- package/build-module/components/media/media-editor-modal.mjs +62 -0
- package/build-module/components/media/media-editor-modal.mjs.map +7 -0
- package/build-module/components/more-menu/index.mjs +3 -7
- package/build-module/components/more-menu/index.mjs.map +2 -2
- package/build-module/components/post-actions/set-as-homepage.mjs +2 -2
- package/build-module/components/post-actions/set-as-homepage.mjs.map +2 -2
- package/build-module/components/post-actions/set-as-posts-page.mjs +2 -2
- package/build-module/components/post-actions/set-as-posts-page.mjs.map +2 -2
- package/build-module/components/post-card-panel/index.mjs +5 -5
- package/build-module/components/post-card-panel/index.mjs.map +2 -2
- package/build-module/components/post-content-information/index.mjs +2 -2
- package/build-module/components/post-content-information/index.mjs.map +2 -2
- package/build-module/components/post-excerpt/panel.mjs +2 -2
- package/build-module/components/post-excerpt/panel.mjs.map +2 -2
- package/build-module/components/post-last-edited-panel/index.mjs +2 -2
- package/build-module/components/post-last-edited-panel/index.mjs.map +2 -2
- package/build-module/components/post-preview-button/index.mjs +3 -2
- package/build-module/components/post-preview-button/index.mjs.map +2 -2
- package/build-module/components/post-publish-button/index.mjs +2 -2
- package/build-module/components/post-publish-button/index.mjs.map +2 -2
- package/build-module/components/post-publish-button/label.mjs +4 -2
- package/build-module/components/post-publish-button/label.mjs.map +2 -2
- package/build-module/components/post-publish-panel/postpublish.mjs +3 -3
- package/build-module/components/post-publish-panel/postpublish.mjs.map +2 -2
- package/build-module/components/post-revisions-panel/index.mjs +2 -2
- package/build-module/components/post-revisions-panel/index.mjs.map +2 -2
- package/build-module/components/post-revisions-preview/diff-markers.mjs +1 -1
- package/build-module/components/post-revisions-preview/diff-markers.mjs.map +2 -2
- package/build-module/components/post-revisions-preview/revisions-slider.mjs +1 -0
- package/build-module/components/post-revisions-preview/revisions-slider.mjs.map +2 -2
- package/build-module/components/post-saved-state/index.mjs +4 -1
- package/build-module/components/post-saved-state/index.mjs.map +2 -2
- package/build-module/components/post-text-editor/index.mjs +2 -3
- package/build-module/components/post-text-editor/index.mjs.map +2 -2
- package/build-module/components/preview-dropdown/index.mjs +2 -2
- package/build-module/components/preview-dropdown/index.mjs.map +2 -2
- package/build-module/components/provider/index.mjs +3 -1
- package/build-module/components/provider/index.mjs.map +2 -2
- package/build-module/components/provider/use-block-editor-settings.mjs +7 -1
- package/build-module/components/provider/use-block-editor-settings.mjs.map +2 -2
- package/build-module/components/provider/use-upload-save-lock.mjs +2 -12
- package/build-module/components/provider/use-upload-save-lock.mjs.map +2 -2
- package/build-module/components/resizable-editor/resize-handle.mjs +2 -5
- package/build-module/components/resizable-editor/resize-handle.mjs.map +2 -2
- package/build-module/components/revision-created-panel/index.mjs +2 -2
- package/build-module/components/revision-created-panel/index.mjs.map +2 -2
- package/build-module/components/site-discussion/index.mjs +2 -2
- package/build-module/components/site-discussion/index.mjs.map +2 -2
- package/build-module/components/template-actions-panel/classic-theme-content.mjs +2 -2
- package/build-module/components/template-actions-panel/classic-theme-content.mjs.map +2 -2
- package/build-module/components/template-part-menu-items/convert-to-regular.mjs +60 -14
- package/build-module/components/template-part-menu-items/convert-to-regular.mjs.map +2 -2
- package/build-module/components/visual-editor/index.mjs +5 -22
- package/build-module/components/visual-editor/index.mjs.map +2 -2
- package/build-module/store/private-actions.mjs +0 -7
- package/build-module/store/private-actions.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +0 -4
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs +0 -9
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/utils/media-finalize/index.mjs +3 -2
- package/build-module/utils/media-finalize/index.mjs.map +2 -2
- package/build-module/utils/media-upload/index.mjs +14 -25
- package/build-module/utils/media-upload/index.mjs.map +2 -2
- package/build-style/style-rtl.css +386 -142
- package/build-style/style.css +386 -142
- package/build-types/components/collab-sidebar/add-note-menu-item.d.ts +5 -0
- package/build-types/components/collab-sidebar/add-note-menu-item.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/add-note.d.ts +6 -0
- package/build-types/components/collab-sidebar/add-note.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/board-store.d.ts +1 -0
- package/build-types/components/collab-sidebar/board-store.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/floating-container.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/hooks.d.ts +8 -21
- package/build-types/components/collab-sidebar/hooks.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/note-byline.d.ts +7 -0
- package/build-types/components/collab-sidebar/note-byline.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/note-card.d.ts +8 -0
- package/build-types/components/collab-sidebar/note-card.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/note-form.d.ts +7 -0
- package/build-types/components/collab-sidebar/note-form.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/note-indicator-toolbar.d.ts +5 -0
- package/build-types/components/collab-sidebar/note-indicator-toolbar.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/note-thread.d.ts +11 -0
- package/build-types/components/collab-sidebar/note-thread.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/note.d.ts +9 -0
- package/build-types/components/collab-sidebar/note.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/notes.d.ts +7 -0
- package/build-types/components/collab-sidebar/notes.d.ts.map +1 -0
- package/build-types/components/collab-sidebar/utils.d.ts +21 -20
- package/build-types/components/collab-sidebar/utils.d.ts.map +1 -1
- package/build-types/components/media/media-editor-modal.d.ts +11 -0
- package/build-types/components/media/media-editor-modal.d.ts.map +1 -0
- package/build-types/components/more-menu/index.d.ts.map +1 -1
- package/build-types/components/post-preview-button/index.d.ts.map +1 -1
- package/build-types/components/post-publish-button/index.d.ts.map +1 -1
- package/build-types/components/post-publish-button/label.d.ts.map +1 -1
- package/build-types/components/post-revisions-preview/revisions-slider.d.ts.map +1 -1
- package/build-types/components/post-saved-state/index.d.ts.map +1 -1
- package/build-types/components/provider/index.d.ts.map +1 -1
- package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
- package/build-types/components/provider/use-upload-save-lock.d.ts +0 -2
- package/build-types/components/provider/use-upload-save-lock.d.ts.map +1 -1
- package/build-types/components/resizable-editor/resize-handle.d.ts.map +1 -1
- package/build-types/components/template-part-menu-items/convert-to-regular.d.ts.map +1 -1
- package/build-types/components/visual-editor/index.d.ts.map +1 -1
- package/build-types/store/private-actions.d.ts +0 -7
- package/build-types/store/private-actions.d.ts.map +1 -1
- package/build-types/store/private-selectors.d.ts +0 -7
- package/build-types/store/private-selectors.d.ts.map +1 -1
- package/build-types/store/reducer.d.ts +0 -10
- package/build-types/store/reducer.d.ts.map +1 -1
- package/build-types/utils/media-finalize/index.d.ts +1 -1
- package/build-types/utils/media-finalize/index.d.ts.map +1 -1
- package/build-types/utils/media-upload/index.d.ts.map +1 -1
- package/package.json +46 -46
- package/src/components/collab-sidebar/README.md +117 -0
- package/src/components/collab-sidebar/{comment-menu-item.js → add-note-menu-item.js} +8 -10
- package/src/components/collab-sidebar/{add-comment.js → add-note.js} +20 -21
- package/src/components/collab-sidebar/board-store.js +4 -2
- package/src/components/collab-sidebar/floating-container.js +5 -4
- package/src/components/collab-sidebar/hooks.js +115 -175
- package/src/components/collab-sidebar/index.js +35 -95
- package/src/components/collab-sidebar/{comment-author-info.js → note-byline.js} +5 -6
- package/src/components/collab-sidebar/note-card.js +36 -0
- package/src/components/collab-sidebar/{comment-form.js → note-form.js} +25 -27
- package/src/components/collab-sidebar/{comment-indicator-toolbar.js → note-indicator-toolbar.js} +29 -32
- package/src/components/collab-sidebar/note-thread.js +331 -0
- package/src/components/collab-sidebar/note.js +209 -0
- package/src/components/collab-sidebar/notes.js +276 -0
- package/src/components/collab-sidebar/style.scss +21 -11
- package/src/components/collab-sidebar/test/utils.js +65 -63
- package/src/components/collab-sidebar/utils.js +33 -35
- package/src/components/document-bar/index.js +4 -4
- package/src/components/error-boundary/index.js +3 -3
- package/src/components/list-view-sidebar/list-view-outline.js +6 -6
- package/src/components/media/media-editor-modal.js +95 -0
- package/src/components/more-menu/index.js +3 -7
- package/src/components/post-actions/set-as-homepage.js +2 -2
- package/src/components/post-actions/set-as-posts-page.js +2 -2
- package/src/components/post-card-panel/index.js +7 -7
- package/src/components/post-content-information/index.js +3 -3
- package/src/components/post-excerpt/panel.js +3 -3
- package/src/components/post-last-edited-panel/index.js +3 -3
- package/src/components/post-preview-button/index.js +3 -2
- package/src/components/post-publish-button/index.js +6 -5
- package/src/components/post-publish-button/label.js +3 -1
- package/src/components/post-publish-panel/postpublish.js +2 -2
- package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +8 -14
- package/src/components/post-revisions-panel/index.js +3 -3
- package/src/components/post-revisions-preview/diff-markers.js +1 -1
- package/src/components/post-revisions-preview/revisions-slider.js +1 -0
- package/src/components/post-saved-state/index.js +4 -1
- package/src/components/post-saved-state/test/__snapshots__/index.js.snap +0 -1
- package/src/components/post-text-editor/index.js +3 -3
- package/src/components/preview-dropdown/index.js +2 -2
- package/src/components/provider/index.js +4 -0
- package/src/components/provider/use-block-editor-settings.js +10 -0
- package/src/components/provider/use-upload-save-lock.js +2 -17
- package/src/components/resizable-editor/resize-handle.js +2 -5
- package/src/components/revision-created-panel/index.js +3 -3
- package/src/components/site-discussion/index.js +3 -3
- package/src/components/template-actions-panel/classic-theme-content.js +3 -3
- package/src/components/template-part-menu-items/convert-to-regular.js +74 -12
- package/src/components/visual-editor/index.js +2 -29
- package/src/store/private-actions.js +0 -13
- package/src/store/private-selectors.js +0 -10
- package/src/store/reducer.js +0 -16
- package/src/utils/media-finalize/index.js +2 -1
- package/src/utils/media-finalize/test/index.js +25 -1
- package/src/utils/media-upload/index.js +26 -29
- package/build/components/collab-sidebar/add-comment.cjs.map +0 -7
- package/build/components/collab-sidebar/comment-author-info.cjs.map +0 -7
- package/build/components/collab-sidebar/comment-form.cjs.map +0 -7
- package/build/components/collab-sidebar/comment-indicator-toolbar.cjs.map +0 -7
- package/build/components/collab-sidebar/comment-menu-item.cjs.map +0 -7
- package/build/components/collab-sidebar/comments.cjs +0 -696
- package/build/components/collab-sidebar/comments.cjs.map +0 -7
- package/build-module/components/collab-sidebar/add-comment.mjs.map +0 -7
- package/build-module/components/collab-sidebar/comment-author-info.mjs.map +0 -7
- package/build-module/components/collab-sidebar/comment-form.mjs +0 -82
- package/build-module/components/collab-sidebar/comment-form.mjs.map +0 -7
- package/build-module/components/collab-sidebar/comment-indicator-toolbar.mjs.map +0 -7
- package/build-module/components/collab-sidebar/comment-menu-item.mjs.map +0 -7
- package/build-module/components/collab-sidebar/comments.mjs +0 -678
- package/build-module/components/collab-sidebar/comments.mjs.map +0 -7
- package/build-types/components/collab-sidebar/add-comment.d.ts +0 -6
- package/build-types/components/collab-sidebar/add-comment.d.ts.map +0 -1
- package/build-types/components/collab-sidebar/comment-author-info.d.ts +0 -8
- package/build-types/components/collab-sidebar/comment-author-info.d.ts.map +0 -1
- package/build-types/components/collab-sidebar/comment-form.d.ts +0 -9
- package/build-types/components/collab-sidebar/comment-form.d.ts.map +0 -1
- package/build-types/components/collab-sidebar/comment-indicator-toolbar.d.ts +0 -6
- package/build-types/components/collab-sidebar/comment-indicator-toolbar.d.ts.map +0 -1
- package/build-types/components/collab-sidebar/comment-menu-item.d.ts +0 -6
- package/build-types/components/collab-sidebar/comment-menu-item.d.ts.map +0 -1
- package/build-types/components/collab-sidebar/comments.d.ts +0 -10
- package/build-types/components/collab-sidebar/comments.d.ts.map +0 -1
- package/src/components/collab-sidebar/comments.js +0 -812
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Notes Sidebar
|
|
2
|
+
|
|
3
|
+
The Notes sidebar (a.k.a. collab sidebar) lets users attach threaded notes to individual blocks. It renders in two modes:
|
|
4
|
+
|
|
5
|
+
- **All notes** - a full sidebar (opened from the editor's More menu) listing every note thread on the current post.
|
|
6
|
+
- **Floating notes** - on larger viewports, unresolved notes also float next to their associated blocks in the canvas, positioned to track scroll and avoid overlap.
|
|
7
|
+
|
|
8
|
+
Notes are stored as WordPress comments (`type: 'note'`) attached to the post. A block references its thread via `metadata.noteId` on block attributes. Each thread has a top-level note plus replies; threads can be resolved (stored as status `approved`) or reopened.
|
|
9
|
+
|
|
10
|
+
## File structure
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
collab-sidebar/
|
|
14
|
+
├── README.md this file
|
|
15
|
+
├── index.js NotesSidebarContainer → NotesSidebar (entry, toolbar slot fills)
|
|
16
|
+
├── notes.js Notes - coordinator (outer Stack, actions, keyboard nav)
|
|
17
|
+
├── note-thread.js NoteThread - per-thread (selection, floating registration, reply form)
|
|
18
|
+
├── note.js Note - per-card state (edit/delete mode, menu, dialog)
|
|
19
|
+
├── note-card.js NoteCard - presentational shell (byline + actions slot + children)
|
|
20
|
+
├── note-byline.js NoteByline - avatar + name + relative date
|
|
21
|
+
├── note-form.js NoteForm - autosizing textarea + submit/cancel
|
|
22
|
+
├── add-note.js AddNote - new-note surface (floating + template-locked cases)
|
|
23
|
+
├── add-note-menu-item.js AddNoteMenuItem - block-toolbar "Add note" trigger
|
|
24
|
+
├── note-indicator-toolbar.js NoteAvatarIndicator - toolbar participants avatars
|
|
25
|
+
├── floating-container.js FloatingContainer - stack wrapper that applies `top` in floating mode
|
|
26
|
+
│
|
|
27
|
+
├── hooks.js useNoteThreads, useNoteActions, useFloatingBoard, useEnableFloatingSidebar
|
|
28
|
+
├── utils.js focusNoteThread, getNoteExcerpt, sanitizeNoteContent, calculateNotePositions, getAvatarBorderColor
|
|
29
|
+
├── board-store.js createBoardStore - ResizeObserver + ref registry for floating layout
|
|
30
|
+
├── constants.js sidebar identifier strings
|
|
31
|
+
├── style.scss
|
|
32
|
+
└── test/
|
|
33
|
+
└── utils.js
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Component hierarchy
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
NotesSidebarContainer (index.js) - gates on post type support
|
|
40
|
+
└── NotesSidebar (index.js) - owns sidebarRef + useNoteThreads + sidebar registration
|
|
41
|
+
├── AddNoteMenuItem - slot fill in the block toolbar
|
|
42
|
+
├── NoteAvatarIndicator - slot fill in the block toolbar (per-thread avatars)
|
|
43
|
+
├── PluginSidebar (all-notes) - full sidebar
|
|
44
|
+
│ └── Notes (notes.js) - owns outer Stack + aria-label + useNoteActions + keyboard nav
|
|
45
|
+
│ ├── AddNote - rendered when no threads (template-locked) or selectedNote === 'new'
|
|
46
|
+
│ └── NoteThread[] - per thread
|
|
47
|
+
│ └── <FloatingContainer>
|
|
48
|
+
│ ├── Note - top-level note (own state: edit/delete/dialog)
|
|
49
|
+
│ │ └── NoteCard
|
|
50
|
+
│ │ └── NoteByline + actions slot + body children
|
|
51
|
+
│ ├── Note[] - replies (when selected)
|
|
52
|
+
│ └── NoteCard + NoteForm - inline reply form (when selected)
|
|
53
|
+
└── PluginSidebar (floating) - floating sidebar (large viewport, unresolved notes)
|
|
54
|
+
└── Notes (same) - isFloating
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`Notes` is reused for both sidebar surfaces. The only visual difference is driven by `isFloating` (whether to layer threads over the canvas or stack them in a panel).
|
|
58
|
+
|
|
59
|
+
## Floating board
|
|
60
|
+
|
|
61
|
+
Goal: in the floating sidebar, each unresolved note appears beside its associated block, tracks canvas scroll, and shifts up/down to avoid overlapping with neighbors - all without re-rendering threads as the canvas scrolls.
|
|
62
|
+
|
|
63
|
+
Three layers cooperate:
|
|
64
|
+
|
|
65
|
+
### 1. `board-store.js` - imperative DOM registry
|
|
66
|
+
|
|
67
|
+
A plain JS module returning a store created via `createBoardStore()` (one per mounted `Notes`). Holds:
|
|
68
|
+
|
|
69
|
+
- `blockRefs: Map<noteId, HTMLElement>` - each note's associated block element.
|
|
70
|
+
- `floatingRefs: Map<noteId, HTMLElement>` - each note's floating DOM node.
|
|
71
|
+
- `idByElement: WeakMap<HTMLElement, noteId>` - reverse lookup for the `ResizeObserver`.
|
|
72
|
+
- `heights: { [noteId]: number }` - observed heights of floating elements.
|
|
73
|
+
- `snapshot: { ... }` - frozen shallow copy of `heights` (for `useSyncExternalStore`).
|
|
74
|
+
|
|
75
|
+
A single shared `ResizeObserver` watches every registered floating element; when a floating note changes height, it updates `heights`, snapshots, and calls every `listener` in the store's `Set`.
|
|
76
|
+
|
|
77
|
+
API:
|
|
78
|
+
- `subscribe(listener)` / `getSnapshot()` - wired to React via `useSyncExternalStore`. Disconnects the observer when the last subscriber leaves.
|
|
79
|
+
- `registerThread(id, blockEl, floatingEl)` - called by each `NoteThread` once mounted. Adds the block ref, swaps the floating ref (unobserving the previous one), starts observing the new one, emits.
|
|
80
|
+
- `unregisterThread(id)` - inverse; called on unmount.
|
|
81
|
+
- `getBlockRects()` - returns a batched snapshot of block `getBoundingClientRect()` values. Batches reads so subsequent CSS writes don't trigger layout thrash.
|
|
82
|
+
- `getFirstBlockElement()` - the first registered block, used to locate the canvas scroll container.
|
|
83
|
+
|
|
84
|
+
The store owns DOM references directly, not through React - floating note height changes must update layout without re-rendering the thread list.
|
|
85
|
+
|
|
86
|
+
### 2. `useFloatingBoard` - the React bridge (in `hooks.js`)
|
|
87
|
+
|
|
88
|
+
Lives inside `Notes`. Holds one store instance (`useState(createBoardStore)`) and:
|
|
89
|
+
|
|
90
|
+
1. Subscribes to `heights` via `useSyncExternalStore(store.subscribe, store.getSnapshot)`.
|
|
91
|
+
2. In a `useEffect` keyed on `threads + heights + selectedNoteId + isFloating + sidebarRef`:
|
|
92
|
+
- Resolves the canvas scroll container by climbing from the first registered block to `.is-root-container` and calling `getScrollContainer()` on it.
|
|
93
|
+
- Schedules a single `requestAnimationFrame` that calls `calculateNotePositions({ threads, selectedNoteId, blockRects: store.getBlockRects(), heights, scrollTop })` (pure function in `utils.js`) and stores the result in React state (`notePositions`).
|
|
94
|
+
- Attaches a capture-phase `scroll` listener on the canvas's `defaultView` that writes a CSS variable `--canvas-scroll` to the sidebar panel. (`window` capture catches scrolls on the document root, which don't bubble.)
|
|
95
|
+
3. Returns `{ notePositions, registerThread, unregisterThread }` - the positions flow down as props; the two register callbacks flow to each `NoteThread`.
|
|
96
|
+
|
|
97
|
+
### 3. `calculateNotePositions` - pure layout math (in `utils.js`)
|
|
98
|
+
|
|
99
|
+
Given the list of threads, the currently selected note id, the block rects, the floating heights, and the canvas scroll offset, returns `{ positions: { [noteId]: top } }` where `top` is the final canvas-space y-coordinate for each floating thread.
|
|
100
|
+
|
|
101
|
+
Algorithm, keyed on the selected note as an **anchor**:
|
|
102
|
+
|
|
103
|
+
1. Anchor the selected note at `blockRect.top + THREAD_ALIGN_OFFSET` (−16). If no selected note, anchor the first thread.
|
|
104
|
+
2. Walk forward from the anchor: each subsequent thread starts at its block's top; if it would overlap the previous thread's bottom (plus `THREAD_GAP` of 16), push it further down by `OVERLAP_MARGIN` (20).
|
|
105
|
+
3. Walk backward from the anchor: mirror - push upward into any overlap.
|
|
106
|
+
4. Convert each final offset into content-space by adding `blockRect.top + scrollTop`.
|
|
107
|
+
|
|
108
|
+
### 4. `FloatingContainer` - the render shell
|
|
109
|
+
|
|
110
|
+
Renders a `Stack` with `top: floating.y` when in floating mode. CSS uses the `--canvas-scroll` custom property to translate the whole panel in sync with the canvas, so per-thread `top` values stay stable while scrolling.
|
|
111
|
+
|
|
112
|
+
### Why this shape
|
|
113
|
+
|
|
114
|
+
- `ResizeObserver` is canonical for height changes that must drive layout without polling.
|
|
115
|
+
- `useSyncExternalStore` is the right React 18 primitive for "external mutable source with snapshot" - gives concurrent-mode-safe subscriptions without a provider.
|
|
116
|
+
- The scroll listener updates a CSS variable rather than React state, so scrolling doesn't re-render. Per-note `top` only recomputes when threads, heights, selection, or structural inputs change.
|
|
117
|
+
- Batching `getBoundingClientRect` reads inside the `rAF` and separating them from style writes avoids forced layout.
|
|
@@ -16,9 +16,9 @@ import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
|
|
|
16
16
|
*/
|
|
17
17
|
import { unlock } from '../../lock-unlock';
|
|
18
18
|
|
|
19
|
-
const {
|
|
19
|
+
const { NoteIconSlotFill } = unlock( blockEditorPrivateApis );
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
function NoteMenuItem( { clientId, onClick, isDistractionFree } ) {
|
|
22
22
|
const block = useSelect(
|
|
23
23
|
( select ) => {
|
|
24
24
|
return select( blockEditorStore ).getBlock( clientId );
|
|
@@ -61,13 +61,13 @@ const AddCommentMenuItem = ( { clientId, onClick, isDistractionFree } ) => {
|
|
|
61
61
|
{ __( 'Add note' ) }
|
|
62
62
|
</MenuItem>
|
|
63
63
|
);
|
|
64
|
-
}
|
|
64
|
+
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
export function AddNoteMenuItem( { onClick, isDistractionFree } ) {
|
|
67
67
|
return (
|
|
68
|
-
<
|
|
68
|
+
<NoteIconSlotFill.Fill>
|
|
69
69
|
{ ( { clientId, onClose } ) => (
|
|
70
|
-
<
|
|
70
|
+
<NoteMenuItem
|
|
71
71
|
clientId={ clientId }
|
|
72
72
|
isDistractionFree={ isDistractionFree }
|
|
73
73
|
onClick={ () => {
|
|
@@ -76,8 +76,6 @@ const AddCommentMenuItemFill = ( { onClick, isDistractionFree } ) => {
|
|
|
76
76
|
} }
|
|
77
77
|
/>
|
|
78
78
|
) }
|
|
79
|
-
</
|
|
79
|
+
</NoteIconSlotFill.Fill>
|
|
80
80
|
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export default AddCommentMenuItemFill;
|
|
81
|
+
}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
6
|
-
import { __experimentalHStack as HStack } from '@wordpress/components';
|
|
7
6
|
import {
|
|
8
7
|
store as blockEditorStore,
|
|
9
8
|
privateApis as blockEditorPrivateApis,
|
|
@@ -12,16 +11,16 @@ import {
|
|
|
12
11
|
/**
|
|
13
12
|
* Internal dependencies
|
|
14
13
|
*/
|
|
15
|
-
import {
|
|
16
|
-
import
|
|
17
|
-
import CommentForm from './comment-form';
|
|
14
|
+
import { NoteCard } from './note-card';
|
|
15
|
+
import { NoteForm } from './note-form';
|
|
18
16
|
import { FloatingContainer } from './floating-container';
|
|
19
|
-
import {
|
|
17
|
+
import { focusNoteThread } from './utils';
|
|
20
18
|
import { store as editorStore } from '../../store';
|
|
19
|
+
import { unlock } from '../../lock-unlock';
|
|
21
20
|
|
|
22
21
|
const { useBlockElement } = unlock( blockEditorPrivateApis );
|
|
23
22
|
|
|
24
|
-
export function
|
|
23
|
+
export function AddNote( { onSubmit, sidebarRef, floating } ) {
|
|
25
24
|
const { clientId } = useSelect( ( select ) => {
|
|
26
25
|
const { getSelectedBlockClientId } = select( blockEditorStore );
|
|
27
26
|
return {
|
|
@@ -36,7 +35,7 @@ export function AddComment( { onSubmit, commentSidebarRef, floating } ) {
|
|
|
36
35
|
const { toggleBlockSpotlight } = unlock( useDispatch( blockEditorStore ) );
|
|
37
36
|
const { selectNote } = unlock( useDispatch( editorStore ) );
|
|
38
37
|
|
|
39
|
-
const
|
|
38
|
+
const unselectNote = () => {
|
|
40
39
|
selectNote( undefined );
|
|
41
40
|
blockElement?.focus();
|
|
42
41
|
toggleBlockSpotlight( clientId, false );
|
|
@@ -50,7 +49,7 @@ export function AddComment( { onSubmit, commentSidebarRef, floating } ) {
|
|
|
50
49
|
<FloatingContainer
|
|
51
50
|
floating={ floating }
|
|
52
51
|
className="editor-collab-sidebar-panel__thread is-selected"
|
|
53
|
-
|
|
52
|
+
gap="md"
|
|
54
53
|
tabIndex={ 0 }
|
|
55
54
|
aria-label={ __( 'New note' ) }
|
|
56
55
|
role="treeitem"
|
|
@@ -69,19 +68,19 @@ export function AddComment( { onSubmit, commentSidebarRef, floating } ) {
|
|
|
69
68
|
selectNote( undefined );
|
|
70
69
|
} }
|
|
71
70
|
>
|
|
72
|
-
<
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
71
|
+
<NoteCard>
|
|
72
|
+
<NoteForm
|
|
73
|
+
onSubmit={ async ( inputComment ) => {
|
|
74
|
+
const { id } = await onSubmit( {
|
|
75
|
+
content: inputComment,
|
|
76
|
+
} );
|
|
77
|
+
selectNote( id );
|
|
78
|
+
focusNoteThread( id, sidebarRef.current );
|
|
79
|
+
} }
|
|
80
|
+
onCancel={ unselectNote }
|
|
81
|
+
labels={ { input: __( 'New note' ) } }
|
|
82
|
+
/>
|
|
83
|
+
</NoteCard>
|
|
85
84
|
</FloatingContainer>
|
|
86
85
|
);
|
|
87
86
|
}
|
|
@@ -45,7 +45,6 @@ export function createBoardStore() {
|
|
|
45
45
|
|
|
46
46
|
registerThread( id, blockEl, floatingEl ) {
|
|
47
47
|
blockRefs.set( id, blockEl );
|
|
48
|
-
|
|
49
48
|
const prev = floatingRefs.get( id );
|
|
50
49
|
if ( prev && prev !== floatingEl ) {
|
|
51
50
|
observer.unobserve( prev );
|
|
@@ -56,7 +55,6 @@ export function createBoardStore() {
|
|
|
56
55
|
idByElement.set( floatingEl, id );
|
|
57
56
|
observer.observe( floatingEl );
|
|
58
57
|
}
|
|
59
|
-
|
|
60
58
|
emit();
|
|
61
59
|
},
|
|
62
60
|
|
|
@@ -79,5 +77,9 @@ export function createBoardStore() {
|
|
|
79
77
|
)
|
|
80
78
|
);
|
|
81
79
|
},
|
|
80
|
+
|
|
81
|
+
getFirstBlockElement() {
|
|
82
|
+
return blockRefs.values().next().value ?? null;
|
|
83
|
+
},
|
|
82
84
|
};
|
|
83
85
|
}
|
|
@@ -6,7 +6,7 @@ import clsx from 'clsx';
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { Stack } from '@wordpress/ui';
|
|
10
10
|
|
|
11
11
|
export function FloatingContainer( {
|
|
12
12
|
floating,
|
|
@@ -17,13 +17,14 @@ export function FloatingContainer( {
|
|
|
17
17
|
} ) {
|
|
18
18
|
const isFloating = !! floating;
|
|
19
19
|
return (
|
|
20
|
-
<
|
|
20
|
+
<Stack
|
|
21
|
+
direction="column"
|
|
21
22
|
className={ clsx( className, { 'is-floating': isFloating } ) }
|
|
22
|
-
ref={ isFloating ? floating.
|
|
23
|
+
ref={ isFloating ? floating.ref : undefined }
|
|
23
24
|
style={ isFloating ? { top: floating.y, ...style } : style }
|
|
24
25
|
{ ...props }
|
|
25
26
|
>
|
|
26
27
|
{ children }
|
|
27
|
-
</
|
|
28
|
+
</Stack>
|
|
28
29
|
);
|
|
29
30
|
}
|