@wordpress/editor 14.33.7 → 14.33.8
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/build/components/collab-sidebar/comment-form.js +14 -5
- package/build/components/collab-sidebar/comment-form.js.map +2 -2
- package/build/components/collab-sidebar/comments.js +46 -18
- package/build/components/collab-sidebar/comments.js.map +2 -2
- package/build/components/post-template/panel.js +9 -6
- package/build/components/post-template/panel.js.map +2 -2
- package/build-module/components/collab-sidebar/comment-form.js +14 -5
- package/build-module/components/collab-sidebar/comment-form.js.map +2 -2
- package/build-module/components/collab-sidebar/comments.js +46 -18
- package/build-module/components/collab-sidebar/comments.js.map +2 -2
- package/build-module/components/post-template/panel.js +9 -6
- package/build-module/components/post-template/panel.js.map +2 -2
- package/build-types/components/collab-sidebar/comment-form.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/comments.d.ts.map +1 -1
- package/build-types/components/post-template/panel.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/components/collab-sidebar/comment-form.js +16 -4
- package/src/components/collab-sidebar/comments.js +79 -21
- package/src/components/post-template/panel.js +11 -8
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/collab-sidebar/comments.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tRawHTML,\n\tuseEffect,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\nimport {\n\t__experimentalText as Text,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalConfirmDialog as ConfirmDialog,\n\tButton,\n\tFlexItem,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useDebounce } from '@wordpress/compose';\n\nimport { published, moreVertical } from '@wordpress/icons';\nimport { __, _x, sprintf, _n } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport CommentAuthorInfo from './comment-author-info';\nimport CommentForm from './comment-form';\nimport { focusCommentThread, getCommentExcerpt } from './utils';\nimport { useFloatingThread } from './hooks';\nimport { AddComment } from './add-comment';\nimport { store as editorStore } from '../../store';\n\nconst { useBlockElement } = unlock( blockEditorPrivateApis );\nconst { Menu } = unlock( componentsPrivateApis );\n\nexport function Comments( {\n\tthreads: noteThreads,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tnewNoteFormState,\n\tsetNewNoteFormState,\n\tcommentSidebarRef,\n\treflowComments,\n\tisFloating = false,\n\tcommentLastUpdated,\n} ) {\n\tconst [ heights, setHeights ] = useState( {} );\n\tconst [ selectedThread, setSelectedThread ] = useState( null );\n\tconst [ boardOffsets, setBoardOffsets ] = useState( {} );\n\tconst [ blockRefs, setBlockRefs ] = useState( {} );\n\n\tconst { setCanvasMinHeight } = unlock( useDispatch( editorStore ) );\n\tconst { blockCommentId, selectedBlockClientId, orderedBlockIds } =\n\t\tuseSelect( ( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetClientIdsWithDescendants,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst clientId = getSelectedBlockClientId();\n\t\t\treturn {\n\t\t\t\tblockCommentId: clientId\n\t\t\t\t\t? getBlockAttributes( clientId )?.metadata?.noteId\n\t\t\t\t\t: null,\n\t\t\t\tselectedBlockClientId: clientId,\n\t\t\t\torderedBlockIds: getClientIdsWithDescendants(),\n\t\t\t};\n\t\t}, [] );\n\n\tconst relatedBlockElement = useBlockElement( selectedBlockClientId );\n\n\tconst threads = useMemo( () => {\n\t\tconst t = [ ...noteThreads ];\n\t\tconst orderedThreads = [];\n\t\t// In floating mode, when the note board is shown, and as long\n\t\t// as the selected block doesn't have an existing note attached -\n\t\t// add a \"new note\" entry to the threads. This special thread type\n\t\t// gets sorted and floated like regular threads, but shows an AddComment\n\t\t// component instead of a regular comment thread.\n\t\tif ( isFloating && newNoteFormState === 'open' ) {\n\t\t\t// Insert the new note entry at the correct location for its blockId.\n\t\t\tconst newNoteThread = {\n\t\t\t\tid: 'new-note-thread',\n\t\t\t\tblockClientId: selectedBlockClientId,\n\t\t\t\tcontent: { rendered: '' },\n\t\t\t};\n\t\t\t// Insert the new comment block at the right order within the threads.\n\t\t\torderedBlockIds.forEach( ( blockId ) => {\n\t\t\t\tif ( blockId === selectedBlockClientId ) {\n\t\t\t\t\torderedThreads.push( newNoteThread );\n\t\t\t\t} else {\n\t\t\t\t\tconst threadForBlock = t.find(\n\t\t\t\t\t\t( thread ) => thread.blockClientId === blockId\n\t\t\t\t\t);\n\t\t\t\t\tif ( threadForBlock ) {\n\t\t\t\t\t\torderedThreads.push( threadForBlock );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn orderedThreads;\n\t\t}\n\t\treturn t;\n\t}, [\n\t\tnoteThreads,\n\t\tisFloating,\n\t\tnewNoteFormState,\n\t\tselectedBlockClientId,\n\t\torderedBlockIds,\n\t] );\n\n\tconst handleDelete = async ( comment ) => {\n\t\tconst currentIndex = threads.findIndex( ( t ) => t.id === comment.id );\n\t\tconst nextThread = threads[ currentIndex + 1 ];\n\t\tconst prevThread = threads[ currentIndex - 1 ];\n\n\t\tawait onCommentDelete( comment );\n\n\t\tif ( comment.parent !== 0 ) {\n\t\t\t// Move focus to the parent thread when a reply was deleted.\n\t\t\tsetSelectedThread( comment.parent );\n\t\t\tfocusCommentThread( comment.parent, commentSidebarRef.current );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nextThread ) {\n\t\t\tsetSelectedThread( nextThread.id );\n\t\t\tfocusCommentThread( nextThread.id, commentSidebarRef.current );\n\t\t} else if ( prevThread ) {\n\t\t\tsetSelectedThread( prevThread.id );\n\t\t\tfocusCommentThread( prevThread.id, commentSidebarRef.current );\n\t\t} else {\n\t\t\tsetSelectedThread( null );\n\t\t\tsetNewNoteFormState( 'closed' );\n\t\t\t// Move focus to the related block.\n\t\t\trelatedBlockElement?.focus();\n\t\t}\n\t};\n\n\t// Auto-select the related comment thread when a block is selected.\n\tuseEffect( () => {\n\t\t// Fallback to 'new-note-thread' when showing the comment board for a new note.\n\t\tsetSelectedThread(\n\t\t\tnewNoteFormState === 'open' ? 'new-note-thread' : blockCommentId\n\t\t);\n\t}, [ blockCommentId, newNoteFormState ] );\n\n\tconst setBlockRef = useCallback( ( id, blockRef ) => {\n\t\tsetBlockRefs( ( prev ) => ( { ...prev, [ id ]: blockRef } ) );\n\t}, [] );\n\n\t// Recalculate floating comment thread offsets whenever the heights change.\n\tuseEffect( () => {\n\t\t/**\n\t\t * Calculate the y offsets for all comment threads. Account for potentially\n\t\t * overlapping threads and adjust their positions accordingly.\n\t\t */\n\t\tconst calculateAllOffsets = () => {\n\t\t\tconst offsets = {};\n\n\t\t\tif ( ! isFloating ) {\n\t\t\t\treturn { offsets, minHeight: 0 };\n\t\t\t}\n\n\t\t\t// Find the index of the selected thread.\n\t\t\tconst selectedThreadIndex = threads.findIndex(\n\t\t\t\t( t ) => t.id === selectedThread\n\t\t\t);\n\n\t\t\tconst breakIndex =\n\t\t\t\tselectedThreadIndex === -1 ? 0 : selectedThreadIndex;\n\n\t\t\t// If there is a selected thread, push threads above up and threads below down.\n\t\t\tconst selectedThreadData = threads[ breakIndex ];\n\n\t\t\tif (\n\t\t\t\t! selectedThreadData ||\n\t\t\t\t! blockRefs[ selectedThreadData.id ]\n\t\t\t) {\n\t\t\t\treturn { offsets, minHeight: 0 };\n\t\t\t}\n\n\t\t\tlet blockElement = blockRefs[ selectedThreadData.id ];\n\t\t\tlet blockRect = blockElement?.getBoundingClientRect();\n\t\t\tconst selectedThreadTop = blockRect?.top || 0;\n\t\t\tconst selectedThreadHeight = heights[ selectedThreadData.id ] || 0;\n\n\t\t\toffsets[ selectedThreadData.id ] = -16;\n\n\t\t\tlet previousThreadData = {\n\t\t\t\tthreadTop: selectedThreadTop - 16,\n\t\t\t\tthreadHeight: selectedThreadHeight,\n\t\t\t};\n\n\t\t\t// Process threads after the selected thread, offsetting any overlapping\n\t\t\t// threads downward.\n\t\t\tfor ( let i = breakIndex + 1; i < threads.length; i++ ) {\n\t\t\t\tconst thread = threads[ i ];\n\t\t\t\tif ( ! blockRefs[ thread.id ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockElement = blockRefs[ thread.id ];\n\t\t\t\tblockRect = blockElement?.getBoundingClientRect();\n\t\t\t\tconst threadTop = blockRect?.top || 0;\n\t\t\t\tconst threadHeight = heights[ thread.id ] || 0;\n\n\t\t\t\tlet additionalOffset = -16;\n\n\t\t\t\t// Check if the thread overlaps with the previous one.\n\t\t\t\tconst previousBottom =\n\t\t\t\t\tpreviousThreadData.threadTop +\n\t\t\t\t\tpreviousThreadData.threadHeight;\n\t\t\t\tif ( threadTop < previousBottom + 16 ) {\n\t\t\t\t\t// Shift down by the difference plus a margin to avoid overlap.\n\t\t\t\t\tadditionalOffset = previousBottom - threadTop + 20;\n\t\t\t\t}\n\n\t\t\t\toffsets[ thread.id ] = additionalOffset;\n\n\t\t\t\t// Update for next iteration.\n\t\t\t\tpreviousThreadData = {\n\t\t\t\t\tthreadTop: threadTop + additionalOffset,\n\t\t\t\t\tthreadHeight,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Process threads before the selected thread, offsetting any overlapping\n\t\t\t// threads upward.\n\t\t\tlet nextThreadData = {\n\t\t\t\tthreadTop: selectedThreadTop - 16,\n\t\t\t};\n\n\t\t\tfor ( let i = selectedThreadIndex - 1; i >= 0; i-- ) {\n\t\t\t\tconst thread = threads[ i ];\n\t\t\t\tif ( ! blockRefs[ thread.id ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockElement = blockRefs[ thread.id ];\n\t\t\t\tblockRect = blockElement?.getBoundingClientRect();\n\t\t\t\tconst threadTop = blockRect?.top || 0;\n\t\t\t\tconst threadHeight = heights[ thread.id ] || 0;\n\n\t\t\t\tlet additionalOffset = -16;\n\n\t\t\t\t// Calculate the bottom position of this thread with default offset.\n\t\t\t\tconst threadBottom = threadTop + threadHeight;\n\n\t\t\t\t// Check if this thread's bottom would overlap with the next thread's top.\n\t\t\t\tif ( threadBottom > nextThreadData.threadTop ) {\n\t\t\t\t\t// Shift up by the difference plus a margin to avoid overlap.\n\t\t\t\t\tadditionalOffset =\n\t\t\t\t\t\tnextThreadData.threadTop -\n\t\t\t\t\t\tthreadTop -\n\t\t\t\t\t\tthreadHeight -\n\t\t\t\t\t\t20;\n\t\t\t\t}\n\n\t\t\t\toffsets[ thread.id ] = additionalOffset;\n\n\t\t\t\t// Update for next iteration (going upward).\n\t\t\t\tnextThreadData = {\n\t\t\t\t\tthreadTop: threadTop + additionalOffset,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet editorMinHeight = 0;\n\t\t\t// Take the calculated top of the final note plus its height as the editor min height.\n\t\t\tconst lastThread = threads[ threads.length - 1 ];\n\t\t\tif ( blockRefs[ lastThread.id ] ) {\n\t\t\t\tconst lastBlockElement = blockRefs[ lastThread.id ];\n\t\t\t\tconst lastBlockRect = lastBlockElement?.getBoundingClientRect();\n\t\t\t\tconst lastThreadTop = lastBlockRect?.top || 0;\n\t\t\t\tconst lastThreadHeight = heights[ lastThread.id ] || 0;\n\t\t\t\tconst lastThreadOffset = offsets[ lastThread.id ] || 0;\n\t\t\t\teditorMinHeight =\n\t\t\t\t\tlastThreadTop + lastThreadHeight + lastThreadOffset + 32;\n\t\t\t}\n\n\t\t\treturn { offsets, minHeight: editorMinHeight };\n\t\t};\n\t\tconst { offsets: newOffsets, minHeight } = calculateAllOffsets();\n\t\tif ( Object.keys( newOffsets ).length > 0 ) {\n\t\t\tsetBoardOffsets( newOffsets );\n\t\t}\n\t\t// Ensure the editor has enough height to scroll to all notes.\n\t\tsetCanvasMinHeight( minHeight );\n\t}, [\n\t\theights,\n\t\tblockRefs,\n\t\tisFloating,\n\t\tthreads,\n\t\tselectedThread,\n\t\tsetCanvasMinHeight,\n\t] );\n\n\tconst hasThreads = Array.isArray( threads ) && threads.length > 0;\n\t// This should no longer happen since https://github.com/WordPress/gutenberg/pull/72872.\n\tif ( ! hasThreads && ! isFloating ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isFloating && newNoteFormState === 'open' && (\n\t\t\t\t<AddComment\n\t\t\t\t\tonSubmit={ onAddReply }\n\t\t\t\t\tnewNoteFormState={ newNoteFormState }\n\t\t\t\t\tsetNewNoteFormState={ setNewNoteFormState }\n\t\t\t\t\tcommentSidebarRef={ commentSidebarRef }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ threads.map( ( thread ) => (\n\t\t\t\t<Thread\n\t\t\t\t\tkey={ thread.id }\n\t\t\t\t\tthread={ thread }\n\t\t\t\t\tonAddReply={ onAddReply }\n\t\t\t\t\tonCommentDelete={ handleDelete }\n\t\t\t\t\tonEditComment={ onEditComment }\n\t\t\t\t\tisSelected={ selectedThread === thread.id }\n\t\t\t\t\tsetSelectedThread={ setSelectedThread }\n\t\t\t\t\tsetNewNoteFormState={ setNewNoteFormState }\n\t\t\t\t\tcommentSidebarRef={ commentSidebarRef }\n\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t\tisFloating={ isFloating }\n\t\t\t\t\tcalculatedOffset={ boardOffsets[ thread.id ] ?? 0 }\n\t\t\t\t\tsetHeights={ setHeights }\n\t\t\t\t\tsetBlockRef={ setBlockRef }\n\t\t\t\t\tselectedThread={ selectedThread }\n\t\t\t\t\tcommentLastUpdated={ commentLastUpdated }\n\t\t\t\t\tnewNoteFormState={ newNoteFormState }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\nfunction Thread( {\n\tthread,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tisSelected,\n\tsetNewNoteFormState,\n\tcommentSidebarRef,\n\treflowComments,\n\tisFloating,\n\tcalculatedOffset,\n\tsetHeights,\n\tsetBlockRef,\n\tsetSelectedThread,\n\tselectedThread,\n\tcommentLastUpdated,\n\tnewNoteFormState,\n} ) {\n\tconst { toggleBlockHighlight, selectBlock, toggleBlockSpotlight } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst relatedBlockElement = useBlockElement( thread.blockClientId );\n\tconst debouncedToggleBlockHighlight = useDebounce(\n\t\ttoggleBlockHighlight,\n\t\t50\n\t);\n\tconst { y, refs } = useFloatingThread( {\n\t\tthread,\n\t\tcalculatedOffset,\n\t\tsetHeights,\n\t\tsetBlockRef,\n\t\tselectedThread,\n\t\tcommentLastUpdated,\n\t} );\n\n\tconst onMouseEnter = () => {\n\t\tdebouncedToggleBlockHighlight( thread.blockClientId, true );\n\t};\n\n\tconst onMouseLeave = () => {\n\t\tdebouncedToggleBlockHighlight( thread.blockClientId, false );\n\t};\n\n\tconst handleCommentSelect = () => {\n\t\tsetNewNoteFormState( 'closed' );\n\t\tsetSelectedThread( thread.id );\n\t\tif ( !! thread.blockClientId ) {\n\t\t\t// Pass `null` as the second parameter to prevent focusing the block.\n\t\t\tselectBlock( thread.blockClientId, null );\n\t\t\ttoggleBlockSpotlight( thread.blockClientId, true );\n\t\t}\n\t};\n\n\tconst unselectThread = () => {\n\t\tsetSelectedThread( null );\n\t\tsetNewNoteFormState( 'closed' );\n\t\ttoggleBlockSpotlight( thread.blockClientId, false );\n\t};\n\n\tconst allReplies = thread?.reply || [];\n\n\tconst lastReply =\n\t\tallReplies.length > 0 ? allReplies[ allReplies.length - 1 ] : undefined;\n\tconst restReplies = allReplies.length > 0 ? allReplies.slice( 0, -1 ) : [];\n\n\tconst commentExcerpt = getCommentExcerpt(\n\t\tstripHTML( thread.content?.rendered ),\n\t\t10\n\t);\n\tconst ariaLabel = !! thread.blockClientId\n\t\t? sprintf(\n\t\t\t\t// translators: %s: note excerpt\n\t\t\t\t__( 'Note: %s' ),\n\t\t\t\tcommentExcerpt\n\t\t )\n\t\t: sprintf(\n\t\t\t\t// translators: %s: note excerpt\n\t\t\t\t__( 'Original block deleted. Note: %s' ),\n\t\t\t\tcommentExcerpt\n\t\t );\n\n\tif (\n\t\tthread.id === 'new-note-thread' &&\n\t\tnewNoteFormState === 'open' &&\n\t\tisFloating\n\t) {\n\t\treturn (\n\t\t\t<AddComment\n\t\t\t\tonSubmit={ onAddReply }\n\t\t\t\tnewNoteFormState={ newNoteFormState }\n\t\t\t\tsetNewNoteFormState={ setNewNoteFormState }\n\t\t\t\tcommentSidebarRef={ commentSidebarRef }\n\t\t\t\treflowComments={ reflowComments }\n\t\t\t\tisFloating={ isFloating }\n\t\t\t\ty={ y }\n\t\t\t\trefs={ refs }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<VStack\n\t\t\tclassName={ clsx( 'editor-collab-sidebar-panel__thread', {\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-floating': isFloating,\n\t\t\t} ) }\n\t\t\tid={ `comment-thread-${ thread.id }` }\n\t\t\tspacing=\"3\"\n\t\t\tonClick={ handleCommentSelect }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Expand or Collapse thread.\n\t\t\t\tif (\n\t\t\t\t\tevent.key === 'Enter' &&\n\t\t\t\t\tevent.currentTarget === event.target\n\t\t\t\t) {\n\t\t\t\t\tif ( isSelected ) {\n\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandleCommentSelect();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Collapse thread and focus the thread.\n\t\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\t\tunselectThread();\n\t\t\t\t\tfocusCommentThread( thread.id, commentSidebarRef.current );\n\t\t\t\t}\n\t\t\t} }\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"treeitem\"\n\t\t\taria-label={ ariaLabel }\n\t\t\taria-expanded={ isSelected }\n\t\t\tref={ isFloating ? refs.setFloating : undefined }\n\t\t\tstyle={ isFloating ? { top: y } : undefined }\n\t\t>\n\t\t\t<Button\n\t\t\t\tclassName=\"editor-collab-sidebar-panel__skip-to-comment\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"compact\"\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\tcommentSidebarRef.current,\n\t\t\t\t\t\t'textarea'\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Add new note' ) }\n\t\t\t</Button>\n\t\t\t{ ! thread.blockClientId && (\n\t\t\t\t<Text as=\"p\" weight={ 500 } variant=\"muted\">\n\t\t\t\t\t{ __( 'Original block deleted.' ) }\n\t\t\t\t</Text>\n\t\t\t) }\n\t\t\t<CommentBoard\n\t\t\t\tthread={ thread }\n\t\t\t\tisExpanded={ isSelected }\n\t\t\t\tonEdit={ ( params = {} ) => {\n\t\t\t\t\tonEditComment( params );\n\t\t\t\t\tif ( params.status === 'approved' ) {\n\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t\tif ( isFloating ) {\n\t\t\t\t\t\t\trelatedBlockElement?.focus();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\tcommentSidebarRef.current\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tonDelete={ onCommentDelete }\n\t\t\t\treflowComments={ reflowComments }\n\t\t\t/>\n\t\t\t{ isSelected &&\n\t\t\t\tallReplies.map( ( reply ) => (\n\t\t\t\t\t<CommentBoard\n\t\t\t\t\t\tkey={ reply.id }\n\t\t\t\t\t\tthread={ reply }\n\t\t\t\t\t\tparent={ thread }\n\t\t\t\t\t\tisExpanded={ isSelected }\n\t\t\t\t\t\tonEdit={ onEditComment }\n\t\t\t\t\t\tonDelete={ onCommentDelete }\n\t\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t{ ! isSelected && restReplies.length > 0 && (\n\t\t\t\t<HStack className=\"editor-collab-sidebar-panel__more-reply-separator\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tclassName=\"editor-collab-sidebar-panel__more-reply-button\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetSelectedThread( thread.id );\n\t\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\tcommentSidebarRef.current\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %s: number of replies.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%s more reply',\n\t\t\t\t\t\t\t\t'%s more replies',\n\t\t\t\t\t\t\t\trestReplies.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\trestReplies.length\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t) }\n\t\t\t{ ! isSelected && lastReply && (\n\t\t\t\t<CommentBoard\n\t\t\t\t\tthread={ lastReply }\n\t\t\t\t\tparent={ thread }\n\t\t\t\t\tisExpanded={ isSelected }\n\t\t\t\t\tonEdit={ onEditComment }\n\t\t\t\t\tonDelete={ onCommentDelete }\n\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ isSelected && (\n\t\t\t\t<VStack spacing=\"2\" role=\"treeitem\">\n\t\t\t\t\t<HStack alignment=\"left\" spacing=\"3\" justify=\"flex-start\">\n\t\t\t\t\t\t<CommentAuthorInfo />\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<VStack spacing=\"2\">\n\t\t\t\t\t\t<CommentForm\n\t\t\t\t\t\t\tonSubmit={ ( inputComment ) => {\n\t\t\t\t\t\t\t\tif ( 'approved' === thread.status ) {\n\t\t\t\t\t\t\t\t\t// For reopening, include the content in the reopen action.\n\t\t\t\t\t\t\t\t\tonEditComment( {\n\t\t\t\t\t\t\t\t\t\tid: thread.id,\n\t\t\t\t\t\t\t\t\t\tstatus: 'hold',\n\t\t\t\t\t\t\t\t\t\tcontent: inputComment,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// For regular replies, add as separate comment.\n\t\t\t\t\t\t\t\t\tonAddReply( {\n\t\t\t\t\t\t\t\t\t\tcontent: inputComment,\n\t\t\t\t\t\t\t\t\t\tparent: thread.id,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonCancel={ ( event ) => {\n\t\t\t\t\t\t\t\t// Prevent the parent onClick from being triggered.\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\t\tcommentSidebarRef.current\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tsubmitButtonText={\n\t\t\t\t\t\t\t\t'approved' === thread.status\n\t\t\t\t\t\t\t\t\t? __( 'Reopen & Reply' )\n\t\t\t\t\t\t\t\t\t: __( 'Reply' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trows={ 'approved' === thread.status ? 2 : 4 }\n\t\t\t\t\t\t\tlabelText={ sprintf(\n\t\t\t\t\t\t\t\t// translators: %1$s: note identifier, %2$s: author name\n\t\t\t\t\t\t\t\t__( 'Reply to note %1$s by %2$s' ),\n\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\tthread.author_name\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VStack>\n\t\t\t\t</VStack>\n\t\t\t) }\n\t\t\t{ !! thread.blockClientId && (\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"editor-collab-sidebar-panel__skip-to-block\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\trelatedBlockElement?.focus();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Back to block' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t</VStack>\n\t);\n}\n\nconst CommentBoard = ( {\n\tthread,\n\tparent,\n\tisExpanded,\n\tonEdit,\n\tonDelete,\n\treflowComments,\n} ) => {\n\tconst [ actionState, setActionState ] = useState( false );\n\tconst [ showConfirmDialog, setShowConfirmDialog ] = useState( false );\n\tconst actionButtonRef = useRef( null );\n\tconst handleConfirmDelete = () => {\n\t\tonDelete( thread );\n\t\tsetActionState( false );\n\t\tsetShowConfirmDialog( false );\n\t};\n\n\tconst handleCancel = () => {\n\t\tsetActionState( false );\n\t\tsetShowConfirmDialog( false );\n\t\tactionButtonRef.current?.focus();\n\t};\n\n\t// Check if this is a resolution comment by checking metadata.\n\tconst isResolutionComment =\n\t\tthread.type === 'note' &&\n\t\tthread.meta &&\n\t\t( thread.meta._wp_note_status === 'resolved' ||\n\t\t\tthread.meta._wp_note_status === 'reopen' );\n\n\tconst actions = [\n\t\t{\n\t\t\tid: 'edit',\n\t\t\ttitle: __( 'Edit' ),\n\t\t\tisEligible: ( { status } ) => status !== 'approved',\n\t\t\tonClick: () => {\n\t\t\t\tsetActionState( 'edit' );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: 'reopen',\n\t\t\ttitle: _x( 'Reopen', 'Reopen note' ),\n\t\t\tisEligible: ( { status } ) => status === 'approved',\n\t\t\tonClick: () => {\n\t\t\t\tonEdit( { id: thread.id, status: 'hold' } );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: 'delete',\n\t\t\ttitle: __( 'Delete' ),\n\t\t\tisEligible: () => true,\n\t\t\tonClick: () => {\n\t\t\t\tsetActionState( 'delete' );\n\t\t\t\tsetShowConfirmDialog( true );\n\t\t\t},\n\t\t},\n\t];\n\n\tconst canResolve = thread.parent === 0;\n\tconst moreActions =\n\t\tparent?.status !== 'approved'\n\t\t\t? actions.filter( ( item ) => item.isEligible( thread ) )\n\t\t\t: [];\n\n\treturn (\n\t\t<VStack\n\t\t\tspacing=\"2\"\n\t\t\trole={ thread.parent !== 0 ? 'treeitem' : undefined }\n\t\t>\n\t\t\t<HStack alignment=\"left\" spacing=\"3\" justify=\"flex-start\">\n\t\t\t\t<CommentAuthorInfo\n\t\t\t\t\tavatar={ thread?.author_avatar_urls?.[ 48 ] }\n\t\t\t\t\tname={ thread?.author_name }\n\t\t\t\t\tdate={ thread?.date }\n\t\t\t\t\tuserId={ thread?.author }\n\t\t\t\t/>\n\t\t\t\t{ isExpanded && (\n\t\t\t\t\t<FlexItem\n\t\t\t\t\t\tclassName=\"editor-collab-sidebar-panel__comment-status\"\n\t\t\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t\t\t// Prevent the thread from being selected.\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack spacing=\"0\">\n\t\t\t\t\t\t\t{ canResolve && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t\t\t'Resolve',\n\t\t\t\t\t\t\t\t\t\t'Mark note as resolved'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\ticon={ published }\n\t\t\t\t\t\t\t\t\tdisabled={ thread.status === 'approved' }\n\t\t\t\t\t\t\t\t\taccessibleWhenDisabled={\n\t\t\t\t\t\t\t\t\t\tthread.status === 'approved'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tonEdit( {\n\t\t\t\t\t\t\t\t\t\t\tid: thread.id,\n\t\t\t\t\t\t\t\t\t\t\tstatus: 'approved',\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<Menu placement=\"bottom-end\">\n\t\t\t\t\t\t\t\t<Menu.TriggerButton\n\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tref={ actionButtonRef }\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t\t\t\tdisabled={ ! moreActions.length }\n\t\t\t\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Menu.Popover>\n\t\t\t\t\t\t\t\t\t{ moreActions.map( ( action ) => (\n\t\t\t\t\t\t\t\t\t\t<Menu.Item\n\t\t\t\t\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => action.onClick() }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Menu.ItemLabel>\n\t\t\t\t\t\t\t\t\t\t\t\t{ action.title }\n\t\t\t\t\t\t\t\t\t\t\t</Menu.ItemLabel>\n\t\t\t\t\t\t\t\t\t\t</Menu.Item>\n\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t</Menu.Popover>\n\t\t\t\t\t\t\t</Menu>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t\t{ 'edit' === actionState ? (\n\t\t\t\t<CommentForm\n\t\t\t\t\tonSubmit={ ( value ) => {\n\t\t\t\t\t\tonEdit( {\n\t\t\t\t\t\t\tid: thread.id,\n\t\t\t\t\t\t\tcontent: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tsetActionState( false );\n\t\t\t\t\t\tactionButtonRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t\tonCancel={ () => handleCancel() }\n\t\t\t\t\tthread={ thread }\n\t\t\t\t\tsubmitButtonText={ _x( 'Update', 'verb' ) }\n\t\t\t\t\tlabelText={ sprintf(\n\t\t\t\t\t\t// translators: %1$s: note identifier, %2$s: author name.\n\t\t\t\t\t\t__( 'Edit note %1$s by %2$s' ),\n\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\tthread.author_name\n\t\t\t\t\t) }\n\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<RawHTML\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'editor-collab-sidebar-panel__user-comment',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'editor-collab-sidebar-panel__resolution-text':\n\t\t\t\t\t\t\t\tisResolutionComment,\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t>\n\t\t\t\t\t{ isResolutionComment\n\t\t\t\t\t\t? ( () => {\n\t\t\t\t\t\t\t\tconst actionText =\n\t\t\t\t\t\t\t\t\tthread.meta._wp_note_status === 'resolved'\n\t\t\t\t\t\t\t\t\t\t? __( 'Marked as resolved' )\n\t\t\t\t\t\t\t\t\t\t: __( 'Reopened' );\n\t\t\t\t\t\t\t\tconst content = thread?.content?.raw;\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tcontent &&\n\t\t\t\t\t\t\t\t\ttypeof content === 'string' &&\n\t\t\t\t\t\t\t\t\tcontent.trim() !== ''\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t\t\t\t\t// translators: %1$s: action label (\"Marked as resolved\" or \"Reopened\"); %2$s: note text.\n\t\t\t\t\t\t\t\t\t\t__( '%1$s: %2$s' ),\n\t\t\t\t\t\t\t\t\t\tactionText,\n\t\t\t\t\t\t\t\t\t\tcontent\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// If no content, just show the action.\n\t\t\t\t\t\t\t\treturn actionText;\n\t\t\t\t\t\t } )()\n\t\t\t\t\t\t: thread?.content?.rendered }\n\t\t\t\t</RawHTML>\n\t\t\t) }\n\t\t\t{ 'delete' === actionState && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\tisOpen={ showConfirmDialog }\n\t\t\t\t\tonConfirm={ handleConfirmDelete }\n\t\t\t\t\tonCancel={ handleCancel }\n\t\t\t\t\tconfirmButtonText={ __( 'Delete' ) }\n\t\t\t\t>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t\"Are you sure you want to delete this note? This will also delete all of this note's replies.\"\n\t\t\t\t\t) }\n\t\t\t\t</ConfirmDialog>\n\t\t\t) }\n\t\t</VStack>\n\t);\n};\n\nexport default Comments;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tRawHTML,\n\tuseEffect,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\nimport {\n\t__experimentalText as Text,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\t__experimentalConfirmDialog as ConfirmDialog,\n\tButton,\n\tFlexItem,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useDebounce } from '@wordpress/compose';\n\nimport { published, moreVertical } from '@wordpress/icons';\nimport { __, _x, sprintf, _n } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport CommentAuthorInfo from './comment-author-info';\nimport CommentForm from './comment-form';\nimport { focusCommentThread, getCommentExcerpt } from './utils';\nimport { useFloatingThread } from './hooks';\nimport { AddComment } from './add-comment';\nimport { store as editorStore } from '../../store';\n\nconst { useBlockElement } = unlock( blockEditorPrivateApis );\nconst { Menu } = unlock( componentsPrivateApis );\n\nexport function Comments( {\n\tthreads: noteThreads,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tnewNoteFormState,\n\tsetNewNoteFormState,\n\tcommentSidebarRef,\n\treflowComments,\n\tisFloating = false,\n\tcommentLastUpdated,\n} ) {\n\tconst [ heights, setHeights ] = useState( {} );\n\tconst [ selectedThread, setSelectedThread ] = useState( null );\n\tconst [ boardOffsets, setBoardOffsets ] = useState( {} );\n\tconst [ blockRefs, setBlockRefs ] = useState( {} );\n\n\tconst { setCanvasMinHeight } = unlock( useDispatch( editorStore ) );\n\tconst { selectBlock, toggleBlockSpotlight } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst { blockCommentId, selectedBlockClientId, orderedBlockIds } =\n\t\tuseSelect( ( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetClientIdsWithDescendants,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst clientId = getSelectedBlockClientId();\n\t\t\treturn {\n\t\t\t\tblockCommentId: clientId\n\t\t\t\t\t? getBlockAttributes( clientId )?.metadata?.noteId\n\t\t\t\t\t: null,\n\t\t\t\tselectedBlockClientId: clientId,\n\t\t\t\torderedBlockIds: getClientIdsWithDescendants(),\n\t\t\t};\n\t\t}, [] );\n\n\tconst relatedBlockElement = useBlockElement( selectedBlockClientId );\n\n\tconst threads = useMemo( () => {\n\t\tconst t = [ ...noteThreads ];\n\t\tconst orderedThreads = [];\n\t\t// In floating mode, when the note board is shown, and as long\n\t\t// as the selected block doesn't have an existing note attached -\n\t\t// add a \"new note\" entry to the threads. This special thread type\n\t\t// gets sorted and floated like regular threads, but shows an AddComment\n\t\t// component instead of a regular comment thread.\n\t\tif ( isFloating && newNoteFormState === 'open' ) {\n\t\t\t// Insert the new note entry at the correct location for its blockId.\n\t\t\tconst newNoteThread = {\n\t\t\t\tid: 'new-note-thread',\n\t\t\t\tblockClientId: selectedBlockClientId,\n\t\t\t\tcontent: { rendered: '' },\n\t\t\t};\n\t\t\t// Insert the new comment block at the right order within the threads.\n\t\t\torderedBlockIds.forEach( ( blockId ) => {\n\t\t\t\tif ( blockId === selectedBlockClientId ) {\n\t\t\t\t\torderedThreads.push( newNoteThread );\n\t\t\t\t} else {\n\t\t\t\t\tconst threadForBlock = t.find(\n\t\t\t\t\t\t( thread ) => thread.blockClientId === blockId\n\t\t\t\t\t);\n\t\t\t\t\tif ( threadForBlock ) {\n\t\t\t\t\t\torderedThreads.push( threadForBlock );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn orderedThreads;\n\t\t}\n\t\treturn t;\n\t}, [\n\t\tnoteThreads,\n\t\tisFloating,\n\t\tnewNoteFormState,\n\t\tselectedBlockClientId,\n\t\torderedBlockIds,\n\t] );\n\n\tconst handleDelete = async ( comment ) => {\n\t\tconst currentIndex = threads.findIndex( ( t ) => t.id === comment.id );\n\t\tconst nextThread = threads[ currentIndex + 1 ];\n\t\tconst prevThread = threads[ currentIndex - 1 ];\n\n\t\tawait onCommentDelete( comment );\n\n\t\tif ( comment.parent !== 0 ) {\n\t\t\t// Move focus to the parent thread when a reply was deleted.\n\t\t\tsetSelectedThread( comment.parent );\n\t\t\tfocusCommentThread( comment.parent, commentSidebarRef.current );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nextThread ) {\n\t\t\tsetSelectedThread( nextThread.id );\n\t\t\tfocusCommentThread( nextThread.id, commentSidebarRef.current );\n\t\t} else if ( prevThread ) {\n\t\t\tsetSelectedThread( prevThread.id );\n\t\t\tfocusCommentThread( prevThread.id, commentSidebarRef.current );\n\t\t} else {\n\t\t\tsetSelectedThread( null );\n\t\t\tsetNewNoteFormState( 'closed' );\n\t\t\t// Move focus to the related block.\n\t\t\trelatedBlockElement?.focus();\n\t\t}\n\t};\n\n\t// Auto-select the related comment thread when a block is selected.\n\tuseEffect( () => {\n\t\t// Fallback to 'new-note-thread' when showing the comment board for a new note.\n\t\tsetSelectedThread(\n\t\t\tnewNoteFormState === 'open' ? 'new-note-thread' : blockCommentId\n\t\t);\n\t}, [ blockCommentId, newNoteFormState ] );\n\n\tconst setBlockRef = useCallback( ( id, blockRef ) => {\n\t\tsetBlockRefs( ( prev ) => ( { ...prev, [ id ]: blockRef } ) );\n\t}, [] );\n\n\t// Recalculate floating comment thread offsets whenever the heights change.\n\tuseEffect( () => {\n\t\t/**\n\t\t * Calculate the y offsets for all comment threads. Account for potentially\n\t\t * overlapping threads and adjust their positions accordingly.\n\t\t */\n\t\tconst calculateAllOffsets = () => {\n\t\t\tconst offsets = {};\n\n\t\t\tif ( ! isFloating ) {\n\t\t\t\treturn { offsets, minHeight: 0 };\n\t\t\t}\n\n\t\t\t// Find the index of the selected thread.\n\t\t\tconst selectedThreadIndex = threads.findIndex(\n\t\t\t\t( t ) => t.id === selectedThread\n\t\t\t);\n\n\t\t\tconst breakIndex =\n\t\t\t\tselectedThreadIndex === -1 ? 0 : selectedThreadIndex;\n\n\t\t\t// If there is a selected thread, push threads above up and threads below down.\n\t\t\tconst selectedThreadData = threads[ breakIndex ];\n\n\t\t\tif (\n\t\t\t\t! selectedThreadData ||\n\t\t\t\t! blockRefs[ selectedThreadData.id ]\n\t\t\t) {\n\t\t\t\treturn { offsets, minHeight: 0 };\n\t\t\t}\n\n\t\t\tlet blockElement = blockRefs[ selectedThreadData.id ];\n\t\t\tlet blockRect = blockElement?.getBoundingClientRect();\n\t\t\tconst selectedThreadTop = blockRect?.top || 0;\n\t\t\tconst selectedThreadHeight = heights[ selectedThreadData.id ] || 0;\n\n\t\t\toffsets[ selectedThreadData.id ] = -16;\n\n\t\t\tlet previousThreadData = {\n\t\t\t\tthreadTop: selectedThreadTop - 16,\n\t\t\t\tthreadHeight: selectedThreadHeight,\n\t\t\t};\n\n\t\t\t// Process threads after the selected thread, offsetting any overlapping\n\t\t\t// threads downward.\n\t\t\tfor ( let i = breakIndex + 1; i < threads.length; i++ ) {\n\t\t\t\tconst thread = threads[ i ];\n\t\t\t\tif ( ! blockRefs[ thread.id ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockElement = blockRefs[ thread.id ];\n\t\t\t\tblockRect = blockElement?.getBoundingClientRect();\n\t\t\t\tconst threadTop = blockRect?.top || 0;\n\t\t\t\tconst threadHeight = heights[ thread.id ] || 0;\n\n\t\t\t\tlet additionalOffset = -16;\n\n\t\t\t\t// Check if the thread overlaps with the previous one.\n\t\t\t\tconst previousBottom =\n\t\t\t\t\tpreviousThreadData.threadTop +\n\t\t\t\t\tpreviousThreadData.threadHeight;\n\t\t\t\tif ( threadTop < previousBottom + 16 ) {\n\t\t\t\t\t// Shift down by the difference plus a margin to avoid overlap.\n\t\t\t\t\tadditionalOffset = previousBottom - threadTop + 20;\n\t\t\t\t}\n\n\t\t\t\toffsets[ thread.id ] = additionalOffset;\n\n\t\t\t\t// Update for next iteration.\n\t\t\t\tpreviousThreadData = {\n\t\t\t\t\tthreadTop: threadTop + additionalOffset,\n\t\t\t\t\tthreadHeight,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Process threads before the selected thread, offsetting any overlapping\n\t\t\t// threads upward.\n\t\t\tlet nextThreadData = {\n\t\t\t\tthreadTop: selectedThreadTop - 16,\n\t\t\t};\n\n\t\t\tfor ( let i = selectedThreadIndex - 1; i >= 0; i-- ) {\n\t\t\t\tconst thread = threads[ i ];\n\t\t\t\tif ( ! blockRefs[ thread.id ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockElement = blockRefs[ thread.id ];\n\t\t\t\tblockRect = blockElement?.getBoundingClientRect();\n\t\t\t\tconst threadTop = blockRect?.top || 0;\n\t\t\t\tconst threadHeight = heights[ thread.id ] || 0;\n\n\t\t\t\tlet additionalOffset = -16;\n\n\t\t\t\t// Calculate the bottom position of this thread with default offset.\n\t\t\t\tconst threadBottom = threadTop + threadHeight;\n\n\t\t\t\t// Check if this thread's bottom would overlap with the next thread's top.\n\t\t\t\tif ( threadBottom > nextThreadData.threadTop ) {\n\t\t\t\t\t// Shift up by the difference plus a margin to avoid overlap.\n\t\t\t\t\tadditionalOffset =\n\t\t\t\t\t\tnextThreadData.threadTop -\n\t\t\t\t\t\tthreadTop -\n\t\t\t\t\t\tthreadHeight -\n\t\t\t\t\t\t20;\n\t\t\t\t}\n\n\t\t\t\toffsets[ thread.id ] = additionalOffset;\n\n\t\t\t\t// Update for next iteration (going upward).\n\t\t\t\tnextThreadData = {\n\t\t\t\t\tthreadTop: threadTop + additionalOffset,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet editorMinHeight = 0;\n\t\t\t// Take the calculated top of the final note plus its height as the editor min height.\n\t\t\tconst lastThread = threads[ threads.length - 1 ];\n\t\t\tif ( blockRefs[ lastThread.id ] ) {\n\t\t\t\tconst lastBlockElement = blockRefs[ lastThread.id ];\n\t\t\t\tconst lastBlockRect = lastBlockElement?.getBoundingClientRect();\n\t\t\t\tconst lastThreadTop = lastBlockRect?.top || 0;\n\t\t\t\tconst lastThreadHeight = heights[ lastThread.id ] || 0;\n\t\t\t\tconst lastThreadOffset = offsets[ lastThread.id ] || 0;\n\t\t\t\teditorMinHeight =\n\t\t\t\t\tlastThreadTop + lastThreadHeight + lastThreadOffset + 32;\n\t\t\t}\n\n\t\t\treturn { offsets, minHeight: editorMinHeight };\n\t\t};\n\t\tconst { offsets: newOffsets, minHeight } = calculateAllOffsets();\n\t\tif ( Object.keys( newOffsets ).length > 0 ) {\n\t\t\tsetBoardOffsets( newOffsets );\n\t\t}\n\t\t// Ensure the editor has enough height to scroll to all notes.\n\t\tsetCanvasMinHeight( minHeight );\n\t}, [\n\t\theights,\n\t\tblockRefs,\n\t\tisFloating,\n\t\tthreads,\n\t\tselectedThread,\n\t\tsetCanvasMinHeight,\n\t] );\n\n\tconst handleThreadNavigation = ( event, thread, isSelected ) => {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentIndex = threads.findIndex( ( t ) => t.id === thread.id );\n\n\t\tif (\n\t\t\t( event.key === 'Enter' || event.key === 'ArrowRight' ) &&\n\t\t\tevent.currentTarget === event.target &&\n\t\t\t! isSelected\n\t\t) {\n\t\t\t// Expand thread.\n\t\t\tsetNewNoteFormState( 'closed' );\n\t\t\tsetSelectedThread( thread.id );\n\t\t\tif ( !! thread.blockClientId ) {\n\t\t\t\t// Pass `null` as the second parameter to prevent focusing the block.\n\t\t\t\tselectBlock( thread.blockClientId, null );\n\t\t\t\ttoggleBlockSpotlight( thread.blockClientId, true );\n\t\t\t}\n\t\t} else if (\n\t\t\t( ( event.key === 'Enter' || event.key === 'ArrowLeft' ) &&\n\t\t\t\tevent.currentTarget === event.target &&\n\t\t\t\tisSelected ) ||\n\t\t\tevent.key === 'Escape'\n\t\t) {\n\t\t\t// Collapse thread.\n\t\t\tsetSelectedThread( null );\n\t\t\tsetNewNoteFormState( 'closed' );\n\t\t\tif ( thread.blockClientId ) {\n\t\t\t\ttoggleBlockSpotlight( thread.blockClientId, false );\n\t\t\t}\n\t\t\tfocusCommentThread( thread.id, commentSidebarRef.current );\n\t\t} else if (\n\t\t\tevent.key === 'ArrowDown' &&\n\t\t\tcurrentIndex < threads.length - 1 &&\n\t\t\tevent.currentTarget === event.target\n\t\t) {\n\t\t\t// Move to the next thread.\n\t\t\tconst nextThread = threads[ currentIndex + 1 ];\n\t\t\tfocusCommentThread( nextThread.id, commentSidebarRef.current );\n\t\t} else if (\n\t\t\tevent.key === 'ArrowUp' &&\n\t\t\tcurrentIndex > 0 &&\n\t\t\tevent.currentTarget === event.target\n\t\t) {\n\t\t\t// Move to the previous thread.\n\t\t\tconst prevThread = threads[ currentIndex - 1 ];\n\t\t\tfocusCommentThread( prevThread.id, commentSidebarRef.current );\n\t\t} else if (\n\t\t\tevent.key === 'Home' &&\n\t\t\tevent.currentTarget === event.target\n\t\t) {\n\t\t\t// Move to the first thread.\n\t\t\tfocusCommentThread( threads[ 0 ].id, commentSidebarRef.current );\n\t\t} else if (\n\t\t\tevent.key === 'End' &&\n\t\t\tevent.currentTarget === event.target\n\t\t) {\n\t\t\t// Move to the last thread.\n\t\t\tfocusCommentThread(\n\t\t\t\tthreads[ threads.length - 1 ].id,\n\t\t\t\tcommentSidebarRef.current\n\t\t\t);\n\t\t}\n\t};\n\n\tconst hasThreads = Array.isArray( threads ) && threads.length > 0;\n\t// This should no longer happen since https://github.com/WordPress/gutenberg/pull/72872.\n\tif ( ! hasThreads && ! isFloating ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ ! isFloating && newNoteFormState === 'open' && (\n\t\t\t\t<AddComment\n\t\t\t\t\tonSubmit={ onAddReply }\n\t\t\t\t\tnewNoteFormState={ newNoteFormState }\n\t\t\t\t\tsetNewNoteFormState={ setNewNoteFormState }\n\t\t\t\t\tcommentSidebarRef={ commentSidebarRef }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ threads.map( ( thread ) => (\n\t\t\t\t<Thread\n\t\t\t\t\tkey={ thread.id }\n\t\t\t\t\tthread={ thread }\n\t\t\t\t\tonAddReply={ onAddReply }\n\t\t\t\t\tonCommentDelete={ handleDelete }\n\t\t\t\t\tonEditComment={ onEditComment }\n\t\t\t\t\tisSelected={ selectedThread === thread.id }\n\t\t\t\t\tsetSelectedThread={ setSelectedThread }\n\t\t\t\t\tsetNewNoteFormState={ setNewNoteFormState }\n\t\t\t\t\tcommentSidebarRef={ commentSidebarRef }\n\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t\tisFloating={ isFloating }\n\t\t\t\t\tcalculatedOffset={ boardOffsets[ thread.id ] ?? 0 }\n\t\t\t\t\tsetHeights={ setHeights }\n\t\t\t\t\tsetBlockRef={ setBlockRef }\n\t\t\t\t\tselectedThread={ selectedThread }\n\t\t\t\t\tcommentLastUpdated={ commentLastUpdated }\n\t\t\t\t\tnewNoteFormState={ newNoteFormState }\n\t\t\t\t\tonKeyDown={ ( event ) =>\n\t\t\t\t\t\thandleThreadNavigation(\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\tthread,\n\t\t\t\t\t\t\tselectedThread === thread.id\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\nfunction Thread( {\n\tthread,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tisSelected,\n\tsetNewNoteFormState,\n\tcommentSidebarRef,\n\treflowComments,\n\tisFloating,\n\tcalculatedOffset,\n\tsetHeights,\n\tsetBlockRef,\n\tsetSelectedThread,\n\tselectedThread,\n\tcommentLastUpdated,\n\tnewNoteFormState,\n\tonKeyDown,\n} ) {\n\tconst { toggleBlockHighlight, selectBlock, toggleBlockSpotlight } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst relatedBlockElement = useBlockElement( thread.blockClientId );\n\tconst debouncedToggleBlockHighlight = useDebounce(\n\t\ttoggleBlockHighlight,\n\t\t50\n\t);\n\tconst { y, refs } = useFloatingThread( {\n\t\tthread,\n\t\tcalculatedOffset,\n\t\tsetHeights,\n\t\tsetBlockRef,\n\t\tselectedThread,\n\t\tcommentLastUpdated,\n\t} );\n\n\tconst onMouseEnter = () => {\n\t\tdebouncedToggleBlockHighlight( thread.blockClientId, true );\n\t};\n\n\tconst onMouseLeave = () => {\n\t\tdebouncedToggleBlockHighlight( thread.blockClientId, false );\n\t};\n\n\tconst handleCommentSelect = () => {\n\t\tsetNewNoteFormState( 'closed' );\n\t\tsetSelectedThread( thread.id );\n\t\tif ( !! thread.blockClientId ) {\n\t\t\t// Pass `null` as the second parameter to prevent focusing the block.\n\t\t\tselectBlock( thread.blockClientId, null );\n\t\t\ttoggleBlockSpotlight( thread.blockClientId, true );\n\t\t}\n\t};\n\n\tconst unselectThread = () => {\n\t\tsetSelectedThread( null );\n\t\tsetNewNoteFormState( 'closed' );\n\t\ttoggleBlockSpotlight( thread.blockClientId, false );\n\t};\n\n\tconst allReplies = thread?.reply || [];\n\n\tconst lastReply =\n\t\tallReplies.length > 0 ? allReplies[ allReplies.length - 1 ] : undefined;\n\tconst restReplies = allReplies.length > 0 ? allReplies.slice( 0, -1 ) : [];\n\n\tconst commentExcerpt = getCommentExcerpt(\n\t\tstripHTML( thread.content?.rendered ),\n\t\t10\n\t);\n\tconst ariaLabel = !! thread.blockClientId\n\t\t? sprintf(\n\t\t\t\t// translators: %s: note excerpt\n\t\t\t\t__( 'Note: %s' ),\n\t\t\t\tcommentExcerpt\n\t\t )\n\t\t: sprintf(\n\t\t\t\t// translators: %s: note excerpt\n\t\t\t\t__( 'Original block deleted. Note: %s' ),\n\t\t\t\tcommentExcerpt\n\t\t );\n\n\tif (\n\t\tthread.id === 'new-note-thread' &&\n\t\tnewNoteFormState === 'open' &&\n\t\tisFloating\n\t) {\n\t\treturn (\n\t\t\t<AddComment\n\t\t\t\tonSubmit={ onAddReply }\n\t\t\t\tnewNoteFormState={ newNoteFormState }\n\t\t\t\tsetNewNoteFormState={ setNewNoteFormState }\n\t\t\t\tcommentSidebarRef={ commentSidebarRef }\n\t\t\t\treflowComments={ reflowComments }\n\t\t\t\tisFloating={ isFloating }\n\t\t\t\ty={ y }\n\t\t\t\trefs={ refs }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<VStack\n\t\t\tclassName={ clsx( 'editor-collab-sidebar-panel__thread', {\n\t\t\t\t'is-selected': isSelected,\n\t\t\t\t'is-floating': isFloating,\n\t\t\t} ) }\n\t\t\tid={ `comment-thread-${ thread.id }` }\n\t\t\tspacing=\"3\"\n\t\t\tonClick={ handleCommentSelect }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"treeitem\"\n\t\t\taria-label={ ariaLabel }\n\t\t\taria-expanded={ isSelected }\n\t\t\tref={ isFloating ? refs.setFloating : undefined }\n\t\t\tstyle={ isFloating ? { top: y } : undefined }\n\t\t>\n\t\t\t<Button\n\t\t\t\tclassName=\"editor-collab-sidebar-panel__skip-to-comment\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"compact\"\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\tcommentSidebarRef.current,\n\t\t\t\t\t\t'textarea'\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Add new note' ) }\n\t\t\t</Button>\n\t\t\t{ ! thread.blockClientId && (\n\t\t\t\t<Text as=\"p\" weight={ 500 } variant=\"muted\">\n\t\t\t\t\t{ __( 'Original block deleted.' ) }\n\t\t\t\t</Text>\n\t\t\t) }\n\t\t\t<CommentBoard\n\t\t\t\tthread={ thread }\n\t\t\t\tisExpanded={ isSelected }\n\t\t\t\tonEdit={ ( params = {} ) => {\n\t\t\t\t\tonEditComment( params );\n\t\t\t\t\tif ( params.status === 'approved' ) {\n\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t\tif ( isFloating ) {\n\t\t\t\t\t\t\trelatedBlockElement?.focus();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\tcommentSidebarRef.current\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tonDelete={ onCommentDelete }\n\t\t\t\treflowComments={ reflowComments }\n\t\t\t/>\n\t\t\t{ isSelected &&\n\t\t\t\tallReplies.map( ( reply ) => (\n\t\t\t\t\t<CommentBoard\n\t\t\t\t\t\tkey={ reply.id }\n\t\t\t\t\t\tthread={ reply }\n\t\t\t\t\t\tparent={ thread }\n\t\t\t\t\t\tisExpanded={ isSelected }\n\t\t\t\t\t\tonEdit={ onEditComment }\n\t\t\t\t\t\tonDelete={ onCommentDelete }\n\t\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t{ ! isSelected && restReplies.length > 0 && (\n\t\t\t\t<HStack className=\"editor-collab-sidebar-panel__more-reply-separator\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tclassName=\"editor-collab-sidebar-panel__more-reply-button\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetSelectedThread( thread.id );\n\t\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\tcommentSidebarRef.current\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %s: number of replies.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%s more reply',\n\t\t\t\t\t\t\t\t'%s more replies',\n\t\t\t\t\t\t\t\trestReplies.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\trestReplies.length\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t) }\n\t\t\t{ ! isSelected && lastReply && (\n\t\t\t\t<CommentBoard\n\t\t\t\t\tthread={ lastReply }\n\t\t\t\t\tparent={ thread }\n\t\t\t\t\tisExpanded={ isSelected }\n\t\t\t\t\tonEdit={ onEditComment }\n\t\t\t\t\tonDelete={ onCommentDelete }\n\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ isSelected && (\n\t\t\t\t<VStack spacing=\"2\" role=\"treeitem\">\n\t\t\t\t\t<HStack alignment=\"left\" spacing=\"3\" justify=\"flex-start\">\n\t\t\t\t\t\t<CommentAuthorInfo />\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<VStack spacing=\"2\">\n\t\t\t\t\t\t<CommentForm\n\t\t\t\t\t\t\tonSubmit={ ( inputComment ) => {\n\t\t\t\t\t\t\t\tif ( 'approved' === thread.status ) {\n\t\t\t\t\t\t\t\t\t// For reopening, include the content in the reopen action.\n\t\t\t\t\t\t\t\t\tonEditComment( {\n\t\t\t\t\t\t\t\t\t\tid: thread.id,\n\t\t\t\t\t\t\t\t\t\tstatus: 'hold',\n\t\t\t\t\t\t\t\t\t\tcontent: inputComment,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// For regular replies, add as separate comment.\n\t\t\t\t\t\t\t\t\tonAddReply( {\n\t\t\t\t\t\t\t\t\t\tcontent: inputComment,\n\t\t\t\t\t\t\t\t\t\tparent: thread.id,\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonCancel={ ( event ) => {\n\t\t\t\t\t\t\t\t// Prevent the parent onClick from being triggered.\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\t\tcommentSidebarRef.current\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tsubmitButtonText={\n\t\t\t\t\t\t\t\t'approved' === thread.status\n\t\t\t\t\t\t\t\t\t? __( 'Reopen & Reply' )\n\t\t\t\t\t\t\t\t\t: __( 'Reply' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trows={ 'approved' === thread.status ? 2 : 4 }\n\t\t\t\t\t\t\tlabelText={ sprintf(\n\t\t\t\t\t\t\t\t// translators: %1$s: note identifier, %2$s: author name\n\t\t\t\t\t\t\t\t__( 'Reply to note %1$s by %2$s' ),\n\t\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\t\tthread.author_name\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VStack>\n\t\t\t\t</VStack>\n\t\t\t) }\n\t\t\t{ !! thread.blockClientId && (\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"editor-collab-sidebar-panel__skip-to-block\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\trelatedBlockElement?.focus();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Back to block' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t</VStack>\n\t);\n}\n\nconst CommentBoard = ( {\n\tthread,\n\tparent,\n\tisExpanded,\n\tonEdit,\n\tonDelete,\n\treflowComments,\n} ) => {\n\tconst [ actionState, setActionState ] = useState( false );\n\tconst [ showConfirmDialog, setShowConfirmDialog ] = useState( false );\n\tconst actionButtonRef = useRef( null );\n\tconst handleConfirmDelete = () => {\n\t\tonDelete( thread );\n\t\tsetActionState( false );\n\t\tsetShowConfirmDialog( false );\n\t};\n\n\tconst handleCancel = () => {\n\t\tsetActionState( false );\n\t\tsetShowConfirmDialog( false );\n\t\tactionButtonRef.current?.focus();\n\t};\n\n\t// Check if this is a resolution comment by checking metadata.\n\tconst isResolutionComment =\n\t\tthread.type === 'note' &&\n\t\tthread.meta &&\n\t\t( thread.meta._wp_note_status === 'resolved' ||\n\t\t\tthread.meta._wp_note_status === 'reopen' );\n\n\tconst actions = [\n\t\t{\n\t\t\tid: 'edit',\n\t\t\ttitle: __( 'Edit' ),\n\t\t\tisEligible: ( { status } ) => status !== 'approved',\n\t\t\tonClick: () => {\n\t\t\t\tsetActionState( 'edit' );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: 'reopen',\n\t\t\ttitle: _x( 'Reopen', 'Reopen note' ),\n\t\t\tisEligible: ( { status } ) => status === 'approved',\n\t\t\tonClick: () => {\n\t\t\t\tonEdit( { id: thread.id, status: 'hold' } );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: 'delete',\n\t\t\ttitle: __( 'Delete' ),\n\t\t\tisEligible: () => true,\n\t\t\tonClick: () => {\n\t\t\t\tsetActionState( 'delete' );\n\t\t\t\tsetShowConfirmDialog( true );\n\t\t\t},\n\t\t},\n\t];\n\n\tconst canResolve = thread.parent === 0;\n\tconst moreActions =\n\t\tparent?.status !== 'approved'\n\t\t\t? actions.filter( ( item ) => item.isEligible( thread ) )\n\t\t\t: [];\n\n\treturn (\n\t\t<VStack\n\t\t\tspacing=\"2\"\n\t\t\trole={ thread.parent !== 0 ? 'treeitem' : undefined }\n\t\t>\n\t\t\t<HStack alignment=\"left\" spacing=\"3\" justify=\"flex-start\">\n\t\t\t\t<CommentAuthorInfo\n\t\t\t\t\tavatar={ thread?.author_avatar_urls?.[ 48 ] }\n\t\t\t\t\tname={ thread?.author_name }\n\t\t\t\t\tdate={ thread?.date }\n\t\t\t\t\tuserId={ thread?.author }\n\t\t\t\t/>\n\t\t\t\t{ isExpanded && (\n\t\t\t\t\t<FlexItem\n\t\t\t\t\t\tclassName=\"editor-collab-sidebar-panel__comment-status\"\n\t\t\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t\t\t// Prevent the thread from being selected.\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack spacing=\"0\">\n\t\t\t\t\t\t\t{ canResolve && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t\t\t\t\t'Resolve',\n\t\t\t\t\t\t\t\t\t\t'Mark note as resolved'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\ticon={ published }\n\t\t\t\t\t\t\t\t\tdisabled={ thread.status === 'approved' }\n\t\t\t\t\t\t\t\t\taccessibleWhenDisabled={\n\t\t\t\t\t\t\t\t\t\tthread.status === 'approved'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\tonEdit( {\n\t\t\t\t\t\t\t\t\t\t\tid: thread.id,\n\t\t\t\t\t\t\t\t\t\t\tstatus: 'approved',\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<Menu placement=\"bottom-end\">\n\t\t\t\t\t\t\t\t<Menu.TriggerButton\n\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tref={ actionButtonRef }\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t\t\t\tdisabled={ ! moreActions.length }\n\t\t\t\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Menu.Popover>\n\t\t\t\t\t\t\t\t\t{ moreActions.map( ( action ) => (\n\t\t\t\t\t\t\t\t\t\t<Menu.Item\n\t\t\t\t\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => action.onClick() }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Menu.ItemLabel>\n\t\t\t\t\t\t\t\t\t\t\t\t{ action.title }\n\t\t\t\t\t\t\t\t\t\t\t</Menu.ItemLabel>\n\t\t\t\t\t\t\t\t\t\t</Menu.Item>\n\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t</Menu.Popover>\n\t\t\t\t\t\t\t</Menu>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t\t{ 'edit' === actionState ? (\n\t\t\t\t<CommentForm\n\t\t\t\t\tonSubmit={ ( value ) => {\n\t\t\t\t\t\tonEdit( {\n\t\t\t\t\t\t\tid: thread.id,\n\t\t\t\t\t\t\tcontent: value,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tsetActionState( false );\n\t\t\t\t\t\tactionButtonRef.current?.focus();\n\t\t\t\t\t} }\n\t\t\t\t\tonCancel={ () => handleCancel() }\n\t\t\t\t\tthread={ thread }\n\t\t\t\t\tsubmitButtonText={ _x( 'Update', 'verb' ) }\n\t\t\t\t\tlabelText={ sprintf(\n\t\t\t\t\t\t// translators: %1$s: note identifier, %2$s: author name.\n\t\t\t\t\t\t__( 'Edit note %1$s by %2$s' ),\n\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\tthread.author_name\n\t\t\t\t\t) }\n\t\t\t\t\treflowComments={ reflowComments }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<RawHTML\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'editor-collab-sidebar-panel__user-comment',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'editor-collab-sidebar-panel__resolution-text':\n\t\t\t\t\t\t\t\tisResolutionComment,\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t>\n\t\t\t\t\t{ isResolutionComment\n\t\t\t\t\t\t? ( () => {\n\t\t\t\t\t\t\t\tconst actionText =\n\t\t\t\t\t\t\t\t\tthread.meta._wp_note_status === 'resolved'\n\t\t\t\t\t\t\t\t\t\t? __( 'Marked as resolved' )\n\t\t\t\t\t\t\t\t\t\t: __( 'Reopened' );\n\t\t\t\t\t\t\t\tconst content = thread?.content?.raw;\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tcontent &&\n\t\t\t\t\t\t\t\t\ttypeof content === 'string' &&\n\t\t\t\t\t\t\t\t\tcontent.trim() !== ''\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t\t\t\t\t// translators: %1$s: action label (\"Marked as resolved\" or \"Reopened\"); %2$s: note text.\n\t\t\t\t\t\t\t\t\t\t__( '%1$s: %2$s' ),\n\t\t\t\t\t\t\t\t\t\tactionText,\n\t\t\t\t\t\t\t\t\t\tcontent\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// If no content, just show the action.\n\t\t\t\t\t\t\t\treturn actionText;\n\t\t\t\t\t\t } )()\n\t\t\t\t\t\t: thread?.content?.rendered }\n\t\t\t\t</RawHTML>\n\t\t\t) }\n\t\t\t{ 'delete' === actionState && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\tisOpen={ showConfirmDialog }\n\t\t\t\t\tonConfirm={ handleConfirmDelete }\n\t\t\t\t\tonCancel={ handleCancel }\n\t\t\t\t\tconfirmButtonText={ __( 'Delete' ) }\n\t\t\t\t>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t\"Are you sure you want to delete this note? This will also delete all of this note's replies.\"\n\t\t\t\t\t) }\n\t\t\t\t</ConfirmDialog>\n\t\t\t) }\n\t\t</VStack>\n\t);\n};\n\nexport default Comments;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,12 +32,15 @@ function PostTemplatePanel() {
|
|
|
32
32
|
}) ?? false;
|
|
33
33
|
return canCreateTemplates;
|
|
34
34
|
}, []);
|
|
35
|
-
const canViewTemplates = useSelect(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
const canViewTemplates = useSelect(
|
|
36
|
+
(select) => {
|
|
37
|
+
return isVisible ? select(coreStore).canUser("read", {
|
|
38
|
+
kind: "postType",
|
|
39
|
+
name: "wp_template"
|
|
40
|
+
}) : false;
|
|
41
|
+
},
|
|
42
|
+
[isVisible]
|
|
43
|
+
);
|
|
41
44
|
if ((!isBlockTheme || !canViewTemplates) && isVisible) {
|
|
42
45
|
return /* @__PURE__ */ jsx(ClassicThemeControl, {});
|
|
43
46
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/post-template/panel.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport ClassicThemeControl from './classic-theme';\nimport BlockThemeControl from './block-theme';\n\n/**\n * Displays the template controls based on the current editor settings and user permissions.\n *\n * @return {React.ReactNode} The rendered PostTemplatePanel component.\n */\nexport default function PostTemplatePanel() {\n\tconst { templateId, isBlockTheme } = useSelect( ( select ) => {\n\t\tconst { getCurrentTemplateId, getEditorSettings } =\n\t\t\tselect( editorStore );\n\t\treturn {\n\t\t\ttemplateId: getCurrentTemplateId(),\n\t\t\tisBlockTheme: getEditorSettings().__unstableIsBlockBasedTheme,\n\t\t};\n\t}, [] );\n\n\tconst isVisible = useSelect( ( select ) => {\n\t\tconst postTypeSlug = select( editorStore ).getCurrentPostType();\n\t\tconst postType = select( coreStore ).getPostType( postTypeSlug );\n\t\tif ( ! postType?.viewable ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst settings = select( editorStore ).getEditorSettings();\n\t\tconst hasTemplates =\n\t\t\t!! settings.availableTemplates &&\n\t\t\tObject.keys( settings.availableTemplates ).length > 0;\n\t\tif ( hasTemplates ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( ! settings.supportsTemplateMode ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst canCreateTemplates =\n\t\t\tselect( coreStore ).canUser( 'create', {\n\t\t\t\tkind: 'postType',\n\t\t\t\tname: 'wp_template',\n\t\t\t} ) ?? false;\n\t\treturn canCreateTemplates;\n\t}, [] );\n\n\tconst canViewTemplates = useSelect(
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport ClassicThemeControl from './classic-theme';\nimport BlockThemeControl from './block-theme';\n\n/**\n * Displays the template controls based on the current editor settings and user permissions.\n *\n * @return {React.ReactNode} The rendered PostTemplatePanel component.\n */\nexport default function PostTemplatePanel() {\n\tconst { templateId, isBlockTheme } = useSelect( ( select ) => {\n\t\tconst { getCurrentTemplateId, getEditorSettings } =\n\t\t\tselect( editorStore );\n\t\treturn {\n\t\t\ttemplateId: getCurrentTemplateId(),\n\t\t\tisBlockTheme: getEditorSettings().__unstableIsBlockBasedTheme,\n\t\t};\n\t}, [] );\n\n\tconst isVisible = useSelect( ( select ) => {\n\t\tconst postTypeSlug = select( editorStore ).getCurrentPostType();\n\t\tconst postType = select( coreStore ).getPostType( postTypeSlug );\n\t\tif ( ! postType?.viewable ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst settings = select( editorStore ).getEditorSettings();\n\t\tconst hasTemplates =\n\t\t\t!! settings.availableTemplates &&\n\t\t\tObject.keys( settings.availableTemplates ).length > 0;\n\t\tif ( hasTemplates ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( ! settings.supportsTemplateMode ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst canCreateTemplates =\n\t\t\tselect( coreStore ).canUser( 'create', {\n\t\t\t\tkind: 'postType',\n\t\t\t\tname: 'wp_template',\n\t\t\t} ) ?? false;\n\t\treturn canCreateTemplates;\n\t}, [] );\n\n\tconst canViewTemplates = useSelect(\n\t\t( select ) => {\n\t\t\treturn isVisible\n\t\t\t\t? select( coreStore ).canUser( 'read', {\n\t\t\t\t\t\tkind: 'postType',\n\t\t\t\t\t\tname: 'wp_template',\n\t\t\t\t } )\n\t\t\t\t: false;\n\t\t},\n\t\t[ isVisible ]\n\t);\n\n\tif ( ( ! isBlockTheme || ! canViewTemplates ) && isVisible ) {\n\t\treturn <ClassicThemeControl />;\n\t}\n\n\tif ( isBlockTheme && !! templateId ) {\n\t\treturn <BlockThemeControl id={ templateId } />;\n\t}\n\treturn null;\n}\n"],
|
|
5
|
+
"mappings": "AAoES;AAjET,SAAS,iBAAiB;AAC1B,SAAS,SAAS,iBAAiB;AAKnC,SAAS,SAAS,mBAAmB;AACrC,OAAO,yBAAyB;AAChC,OAAO,uBAAuB;AAOf,SAAR,oBAAqC;AAC3C,QAAM,EAAE,YAAY,aAAa,IAAI,UAAW,CAAE,WAAY;AAC7D,UAAM,EAAE,sBAAsB,kBAAkB,IAC/C,OAAQ,WAAY;AACrB,WAAO;AAAA,MACN,YAAY,qBAAqB;AAAA,MACjC,cAAc,kBAAkB,EAAE;AAAA,IACnC;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,YAAY,UAAW,CAAE,WAAY;AAC1C,UAAM,eAAe,OAAQ,WAAY,EAAE,mBAAmB;AAC9D,UAAM,WAAW,OAAQ,SAAU,EAAE,YAAa,YAAa;AAC/D,QAAK,CAAE,UAAU,UAAW;AAC3B,aAAO;AAAA,IACR;AAEA,UAAM,WAAW,OAAQ,WAAY,EAAE,kBAAkB;AACzD,UAAM,eACL,CAAC,CAAE,SAAS,sBACZ,OAAO,KAAM,SAAS,kBAAmB,EAAE,SAAS;AACrD,QAAK,cAAe;AACnB,aAAO;AAAA,IACR;AAEA,QAAK,CAAE,SAAS,sBAAuB;AACtC,aAAO;AAAA,IACR;AAEA,UAAM,qBACL,OAAQ,SAAU,EAAE,QAAS,UAAU;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,IACP,CAAE,KAAK;AACR,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,QAAM,mBAAmB;AAAA,IACxB,CAAE,WAAY;AACb,aAAO,YACJ,OAAQ,SAAU,EAAE,QAAS,QAAQ;AAAA,QACrC,MAAM;AAAA,QACN,MAAM;AAAA,MACN,CAAE,IACF;AAAA,IACJ;AAAA,IACA,CAAE,SAAU;AAAA,EACb;AAEA,OAAO,CAAE,gBAAgB,CAAE,qBAAsB,WAAY;AAC5D,WAAO,oBAAC,uBAAoB;AAAA,EAC7B;AAEA,MAAK,gBAAgB,CAAC,CAAE,YAAa;AACpC,WAAO,oBAAC,qBAAkB,IAAK,YAAa;AAAA,EAC7C;AACA,SAAO;AACR;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-form.d.ts","sourceRoot":"","sources":["../../../src/components/collab-sidebar/comment-form.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"comment-form.d.ts","sourceRoot":"","sources":["../../../src/components/collab-sidebar/comment-form.js"],"names":[],"mappings":";AAyBA;;;;;;;gCAwEC;qBA1E2C,SAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../src/components/collab-sidebar/comments.js"],"names":[],"mappings":"AAkDA;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../src/components/collab-sidebar/comments.js"],"names":[],"mappings":"AAkDA;;;;;;;;;;;uCA0XC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/components/post-template/panel.js"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,6CAFY,KAAK,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/components/post-template/panel.js"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,6CAFY,KAAK,CAAC,SAAS,CA2D1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/editor",
|
|
3
|
-
"version": "14.33.
|
|
3
|
+
"version": "14.33.8",
|
|
4
4
|
"description": "Enhanced block editor for WordPress posts.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -57,35 +57,35 @@
|
|
|
57
57
|
"@wordpress/api-fetch": "^7.33.1",
|
|
58
58
|
"@wordpress/base-styles": "^6.9.1",
|
|
59
59
|
"@wordpress/blob": "^4.33.1",
|
|
60
|
-
"@wordpress/block-editor": "^15.6.
|
|
61
|
-
"@wordpress/blocks": "^15.6.
|
|
62
|
-
"@wordpress/commands": "^1.33.
|
|
63
|
-
"@wordpress/components": "^30.6.
|
|
60
|
+
"@wordpress/block-editor": "^15.6.6",
|
|
61
|
+
"@wordpress/blocks": "^15.6.2",
|
|
62
|
+
"@wordpress/commands": "^1.33.4",
|
|
63
|
+
"@wordpress/components": "^30.6.4",
|
|
64
64
|
"@wordpress/compose": "^7.33.1",
|
|
65
|
-
"@wordpress/core-data": "^7.33.
|
|
65
|
+
"@wordpress/core-data": "^7.33.6",
|
|
66
66
|
"@wordpress/data": "^10.33.1",
|
|
67
|
-
"@wordpress/dataviews": "^10.1.
|
|
67
|
+
"@wordpress/dataviews": "^10.1.5",
|
|
68
68
|
"@wordpress/date": "^5.33.1",
|
|
69
69
|
"@wordpress/deprecated": "^4.33.1",
|
|
70
70
|
"@wordpress/dom": "^4.33.1",
|
|
71
71
|
"@wordpress/element": "^6.33.1",
|
|
72
|
-
"@wordpress/fields": "^0.25.
|
|
72
|
+
"@wordpress/fields": "^0.25.8",
|
|
73
73
|
"@wordpress/hooks": "^4.33.1",
|
|
74
74
|
"@wordpress/html-entities": "^4.33.1",
|
|
75
75
|
"@wordpress/i18n": "^6.6.1",
|
|
76
76
|
"@wordpress/icons": "^11.0.1",
|
|
77
|
-
"@wordpress/interface": "^9.18.
|
|
77
|
+
"@wordpress/interface": "^9.18.4",
|
|
78
78
|
"@wordpress/keyboard-shortcuts": "^5.33.1",
|
|
79
79
|
"@wordpress/keycodes": "^4.33.1",
|
|
80
80
|
"@wordpress/media-utils": "^5.33.1",
|
|
81
81
|
"@wordpress/notices": "^5.33.1",
|
|
82
|
-
"@wordpress/patterns": "^2.33.
|
|
83
|
-
"@wordpress/plugins": "^7.33.
|
|
84
|
-
"@wordpress/preferences": "^4.33.
|
|
82
|
+
"@wordpress/patterns": "^2.33.6",
|
|
83
|
+
"@wordpress/plugins": "^7.33.4",
|
|
84
|
+
"@wordpress/preferences": "^4.33.4",
|
|
85
85
|
"@wordpress/private-apis": "^1.33.1",
|
|
86
|
-
"@wordpress/reusable-blocks": "^5.33.
|
|
87
|
-
"@wordpress/rich-text": "^7.33.
|
|
88
|
-
"@wordpress/server-side-render": "^6.9.
|
|
86
|
+
"@wordpress/reusable-blocks": "^5.33.6",
|
|
87
|
+
"@wordpress/rich-text": "^7.33.2",
|
|
88
|
+
"@wordpress/server-side-render": "^6.9.4",
|
|
89
89
|
"@wordpress/url": "^4.33.1",
|
|
90
90
|
"@wordpress/warning": "^3.33.1",
|
|
91
91
|
"@wordpress/wordcount": "^4.33.1",
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"publishConfig": {
|
|
109
109
|
"access": "public"
|
|
110
110
|
},
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "e821b2ec0a90d60aa7cafc248ba049f13b4265b7"
|
|
112
112
|
}
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
} from '@wordpress/components';
|
|
17
17
|
import { __ } from '@wordpress/i18n';
|
|
18
18
|
import { useInstanceId, useDebounce } from '@wordpress/compose';
|
|
19
|
+
import { isKeyboardEvent } from '@wordpress/keycodes';
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Internal dependencies
|
|
@@ -50,6 +51,12 @@ function CommentForm( {
|
|
|
50
51
|
<VStack
|
|
51
52
|
className="editor-collab-sidebar-panel__comment-form"
|
|
52
53
|
spacing="4"
|
|
54
|
+
as="form"
|
|
55
|
+
onSubmit={ ( event ) => {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
onSubmit( inputComment );
|
|
58
|
+
setInputComment( '' );
|
|
59
|
+
} }
|
|
53
60
|
>
|
|
54
61
|
<VisuallyHidden as="label" htmlFor={ inputId }>
|
|
55
62
|
{ labelText ?? __( 'Note' ) }
|
|
@@ -63,6 +70,14 @@ function CommentForm( {
|
|
|
63
70
|
} }
|
|
64
71
|
rows={ 1 }
|
|
65
72
|
maxRows={ 20 }
|
|
73
|
+
onKeyDown={ ( event ) => {
|
|
74
|
+
if (
|
|
75
|
+
isKeyboardEvent.primary( event, 'Enter' ) &&
|
|
76
|
+
! isDisabled
|
|
77
|
+
) {
|
|
78
|
+
event.target.parentNode.requestSubmit();
|
|
79
|
+
}
|
|
80
|
+
} }
|
|
66
81
|
/>
|
|
67
82
|
<HStack spacing="2" justify="flex-end" wrap>
|
|
68
83
|
<Button size="compact" variant="tertiary" onClick={ onCancel }>
|
|
@@ -72,10 +87,7 @@ function CommentForm( {
|
|
|
72
87
|
size="compact"
|
|
73
88
|
accessibleWhenDisabled
|
|
74
89
|
variant="primary"
|
|
75
|
-
|
|
76
|
-
onSubmit( inputComment );
|
|
77
|
-
setInputComment( '' );
|
|
78
|
-
} }
|
|
90
|
+
type="submit"
|
|
79
91
|
disabled={ isDisabled }
|
|
80
92
|
>
|
|
81
93
|
<Truncate>{ submitButtonText }</Truncate>
|
|
@@ -66,6 +66,9 @@ export function Comments( {
|
|
|
66
66
|
const [ blockRefs, setBlockRefs ] = useState( {} );
|
|
67
67
|
|
|
68
68
|
const { setCanvasMinHeight } = unlock( useDispatch( editorStore ) );
|
|
69
|
+
const { selectBlock, toggleBlockSpotlight } = unlock(
|
|
70
|
+
useDispatch( blockEditorStore )
|
|
71
|
+
);
|
|
69
72
|
const { blockCommentId, selectedBlockClientId, orderedBlockIds } =
|
|
70
73
|
useSelect( ( select ) => {
|
|
71
74
|
const {
|
|
@@ -310,6 +313,73 @@ export function Comments( {
|
|
|
310
313
|
setCanvasMinHeight,
|
|
311
314
|
] );
|
|
312
315
|
|
|
316
|
+
const handleThreadNavigation = ( event, thread, isSelected ) => {
|
|
317
|
+
if ( event.defaultPrevented ) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const currentIndex = threads.findIndex( ( t ) => t.id === thread.id );
|
|
322
|
+
|
|
323
|
+
if (
|
|
324
|
+
( event.key === 'Enter' || event.key === 'ArrowRight' ) &&
|
|
325
|
+
event.currentTarget === event.target &&
|
|
326
|
+
! isSelected
|
|
327
|
+
) {
|
|
328
|
+
// Expand thread.
|
|
329
|
+
setNewNoteFormState( 'closed' );
|
|
330
|
+
setSelectedThread( thread.id );
|
|
331
|
+
if ( !! thread.blockClientId ) {
|
|
332
|
+
// Pass `null` as the second parameter to prevent focusing the block.
|
|
333
|
+
selectBlock( thread.blockClientId, null );
|
|
334
|
+
toggleBlockSpotlight( thread.blockClientId, true );
|
|
335
|
+
}
|
|
336
|
+
} else if (
|
|
337
|
+
( ( event.key === 'Enter' || event.key === 'ArrowLeft' ) &&
|
|
338
|
+
event.currentTarget === event.target &&
|
|
339
|
+
isSelected ) ||
|
|
340
|
+
event.key === 'Escape'
|
|
341
|
+
) {
|
|
342
|
+
// Collapse thread.
|
|
343
|
+
setSelectedThread( null );
|
|
344
|
+
setNewNoteFormState( 'closed' );
|
|
345
|
+
if ( thread.blockClientId ) {
|
|
346
|
+
toggleBlockSpotlight( thread.blockClientId, false );
|
|
347
|
+
}
|
|
348
|
+
focusCommentThread( thread.id, commentSidebarRef.current );
|
|
349
|
+
} else if (
|
|
350
|
+
event.key === 'ArrowDown' &&
|
|
351
|
+
currentIndex < threads.length - 1 &&
|
|
352
|
+
event.currentTarget === event.target
|
|
353
|
+
) {
|
|
354
|
+
// Move to the next thread.
|
|
355
|
+
const nextThread = threads[ currentIndex + 1 ];
|
|
356
|
+
focusCommentThread( nextThread.id, commentSidebarRef.current );
|
|
357
|
+
} else if (
|
|
358
|
+
event.key === 'ArrowUp' &&
|
|
359
|
+
currentIndex > 0 &&
|
|
360
|
+
event.currentTarget === event.target
|
|
361
|
+
) {
|
|
362
|
+
// Move to the previous thread.
|
|
363
|
+
const prevThread = threads[ currentIndex - 1 ];
|
|
364
|
+
focusCommentThread( prevThread.id, commentSidebarRef.current );
|
|
365
|
+
} else if (
|
|
366
|
+
event.key === 'Home' &&
|
|
367
|
+
event.currentTarget === event.target
|
|
368
|
+
) {
|
|
369
|
+
// Move to the first thread.
|
|
370
|
+
focusCommentThread( threads[ 0 ].id, commentSidebarRef.current );
|
|
371
|
+
} else if (
|
|
372
|
+
event.key === 'End' &&
|
|
373
|
+
event.currentTarget === event.target
|
|
374
|
+
) {
|
|
375
|
+
// Move to the last thread.
|
|
376
|
+
focusCommentThread(
|
|
377
|
+
threads[ threads.length - 1 ].id,
|
|
378
|
+
commentSidebarRef.current
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
|
|
313
383
|
const hasThreads = Array.isArray( threads ) && threads.length > 0;
|
|
314
384
|
// This should no longer happen since https://github.com/WordPress/gutenberg/pull/72872.
|
|
315
385
|
if ( ! hasThreads && ! isFloating ) {
|
|
@@ -345,6 +415,13 @@ export function Comments( {
|
|
|
345
415
|
selectedThread={ selectedThread }
|
|
346
416
|
commentLastUpdated={ commentLastUpdated }
|
|
347
417
|
newNoteFormState={ newNoteFormState }
|
|
418
|
+
onKeyDown={ ( event ) =>
|
|
419
|
+
handleThreadNavigation(
|
|
420
|
+
event,
|
|
421
|
+
thread,
|
|
422
|
+
selectedThread === thread.id
|
|
423
|
+
)
|
|
424
|
+
}
|
|
348
425
|
/>
|
|
349
426
|
) ) }
|
|
350
427
|
</>
|
|
@@ -368,6 +445,7 @@ function Thread( {
|
|
|
368
445
|
selectedThread,
|
|
369
446
|
commentLastUpdated,
|
|
370
447
|
newNoteFormState,
|
|
448
|
+
onKeyDown,
|
|
371
449
|
} ) {
|
|
372
450
|
const { toggleBlockHighlight, selectBlock, toggleBlockSpotlight } = unlock(
|
|
373
451
|
useDispatch( blockEditorStore )
|
|
@@ -464,27 +542,7 @@ function Thread( {
|
|
|
464
542
|
onMouseLeave={ onMouseLeave }
|
|
465
543
|
onFocus={ onMouseEnter }
|
|
466
544
|
onBlur={ onMouseLeave }
|
|
467
|
-
onKeyDown={
|
|
468
|
-
if ( event.defaultPrevented ) {
|
|
469
|
-
return;
|
|
470
|
-
}
|
|
471
|
-
// Expand or Collapse thread.
|
|
472
|
-
if (
|
|
473
|
-
event.key === 'Enter' &&
|
|
474
|
-
event.currentTarget === event.target
|
|
475
|
-
) {
|
|
476
|
-
if ( isSelected ) {
|
|
477
|
-
unselectThread();
|
|
478
|
-
} else {
|
|
479
|
-
handleCommentSelect();
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
// Collapse thread and focus the thread.
|
|
483
|
-
if ( event.key === 'Escape' ) {
|
|
484
|
-
unselectThread();
|
|
485
|
-
focusCommentThread( thread.id, commentSidebarRef.current );
|
|
486
|
-
}
|
|
487
|
-
} }
|
|
545
|
+
onKeyDown={ onKeyDown }
|
|
488
546
|
tabIndex={ 0 }
|
|
489
547
|
role="treeitem"
|
|
490
548
|
aria-label={ ariaLabel }
|
|
@@ -53,14 +53,17 @@ export default function PostTemplatePanel() {
|
|
|
53
53
|
return canCreateTemplates;
|
|
54
54
|
}, [] );
|
|
55
55
|
|
|
56
|
-
const canViewTemplates = useSelect(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
const canViewTemplates = useSelect(
|
|
57
|
+
( select ) => {
|
|
58
|
+
return isVisible
|
|
59
|
+
? select( coreStore ).canUser( 'read', {
|
|
60
|
+
kind: 'postType',
|
|
61
|
+
name: 'wp_template',
|
|
62
|
+
} )
|
|
63
|
+
: false;
|
|
64
|
+
},
|
|
65
|
+
[ isVisible ]
|
|
66
|
+
);
|
|
64
67
|
|
|
65
68
|
if ( ( ! isBlockTheme || ! canViewTemplates ) && isVisible ) {
|
|
66
69
|
return <ClassicThemeControl />;
|