@wordpress/editor 14.32.1-next.ff1cebbba.0 → 14.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/bindings/api.js +2 -2
  3. package/build/bindings/api.js.map +3 -3
  4. package/build/bindings/post-data.js +50 -13
  5. package/build/bindings/post-data.js.map +3 -3
  6. package/build/bindings/term-data.js +165 -0
  7. package/build/bindings/term-data.js.map +7 -0
  8. package/build/components/collab-sidebar/add-comment.js +11 -15
  9. package/build/components/collab-sidebar/add-comment.js.map +2 -2
  10. package/build/components/collab-sidebar/comment-menu-item.js +1 -1
  11. package/build/components/collab-sidebar/comment-menu-item.js.map +2 -2
  12. package/build/components/collab-sidebar/comments.js +89 -67
  13. package/build/components/collab-sidebar/comments.js.map +2 -2
  14. package/build/components/collab-sidebar/constants.js +3 -0
  15. package/build/components/collab-sidebar/constants.js.map +2 -2
  16. package/build/components/collab-sidebar/hooks.js +13 -6
  17. package/build/components/collab-sidebar/hooks.js.map +2 -2
  18. package/build/components/collab-sidebar/index.js +28 -15
  19. package/build/components/collab-sidebar/index.js.map +3 -3
  20. package/build/components/post-fields/index.js +3 -25
  21. package/build/components/post-fields/index.js.map +2 -2
  22. package/build/components/post-template/create-new-template-modal.js +2 -1
  23. package/build/components/post-template/create-new-template-modal.js.map +2 -2
  24. package/build/components/provider/index.js +3 -2
  25. package/build/components/provider/index.js.map +2 -2
  26. package/build/components/provider/use-hide-blocks-from-inserter.js +4 -26
  27. package/build/components/provider/use-hide-blocks-from-inserter.js.map +3 -3
  28. package/build/store/actions.js +12 -11
  29. package/build/store/actions.js.map +2 -2
  30. package/build-module/bindings/api.js +2 -2
  31. package/build-module/bindings/api.js.map +2 -2
  32. package/build-module/bindings/post-data.js +50 -13
  33. package/build-module/bindings/post-data.js.map +2 -2
  34. package/build-module/bindings/term-data.js +145 -0
  35. package/build-module/bindings/term-data.js.map +7 -0
  36. package/build-module/components/collab-sidebar/add-comment.js +12 -16
  37. package/build-module/components/collab-sidebar/add-comment.js.map +2 -2
  38. package/build-module/components/collab-sidebar/comment-menu-item.js +1 -1
  39. package/build-module/components/collab-sidebar/comment-menu-item.js.map +2 -2
  40. package/build-module/components/collab-sidebar/comments.js +89 -67
  41. package/build-module/components/collab-sidebar/comments.js.map +2 -2
  42. package/build-module/components/collab-sidebar/constants.js +2 -0
  43. package/build-module/components/collab-sidebar/constants.js.map +2 -2
  44. package/build-module/components/collab-sidebar/hooks.js +13 -6
  45. package/build-module/components/collab-sidebar/hooks.js.map +2 -2
  46. package/build-module/components/collab-sidebar/index.js +33 -16
  47. package/build-module/components/collab-sidebar/index.js.map +2 -2
  48. package/build-module/components/post-fields/index.js +4 -26
  49. package/build-module/components/post-fields/index.js.map +2 -2
  50. package/build-module/components/post-template/create-new-template-modal.js +2 -1
  51. package/build-module/components/post-template/create-new-template-modal.js.map +2 -2
  52. package/build-module/components/provider/index.js +3 -2
  53. package/build-module/components/provider/index.js.map +2 -2
  54. package/build-module/components/provider/use-hide-blocks-from-inserter.js +4 -26
  55. package/build-module/components/provider/use-hide-blocks-from-inserter.js.map +2 -2
  56. package/build-module/store/actions.js +12 -11
  57. package/build-module/store/actions.js.map +2 -2
  58. package/build-style/style-rtl.css +1 -0
  59. package/build-style/style.css +1 -0
  60. package/build-types/bindings/post-data.d.ts +7 -4
  61. package/build-types/bindings/term-data.d.ts +42 -0
  62. package/build-types/bindings/term-data.d.ts.map +1 -0
  63. package/build-types/components/collab-sidebar/add-comment.d.ts.map +1 -1
  64. package/build-types/components/collab-sidebar/comments.d.ts.map +1 -1
  65. package/build-types/components/collab-sidebar/constants.d.ts +1 -0
  66. package/build-types/components/collab-sidebar/constants.d.ts.map +1 -1
  67. package/build-types/components/collab-sidebar/hooks.d.ts.map +1 -1
  68. package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
  69. package/build-types/components/post-fields/index.d.ts +1 -5
  70. package/build-types/components/post-fields/index.d.ts.map +1 -1
  71. package/build-types/components/post-template/create-new-template-modal.d.ts.map +1 -1
  72. package/build-types/components/provider/index.d.ts.map +1 -1
  73. package/build-types/components/provider/use-hide-blocks-from-inserter.d.ts.map +1 -1
  74. package/build-types/store/actions.d.ts.map +1 -1
  75. package/package.json +38 -38
  76. package/src/bindings/api.js +2 -2
  77. package/src/bindings/post-data.js +80 -17
  78. package/src/bindings/term-data.js +224 -0
  79. package/src/components/collab-sidebar/add-comment.js +12 -23
  80. package/src/components/collab-sidebar/comment-menu-item.js +1 -1
  81. package/src/components/collab-sidebar/comments.js +111 -63
  82. package/src/components/collab-sidebar/constants.js +1 -0
  83. package/src/components/collab-sidebar/hooks.js +16 -9
  84. package/src/components/collab-sidebar/index.js +66 -49
  85. package/src/components/collab-sidebar/style.scss +1 -0
  86. package/src/components/post-fields/index.ts +5 -42
  87. package/src/components/post-template/create-new-template-modal.js +1 -0
  88. package/src/components/provider/index.js +5 -2
  89. package/src/components/provider/use-hide-blocks-from-inserter.js +6 -37
  90. package/src/store/actions.js +15 -17
  91. package/tsconfig.tsbuildinfo +1 -1
  92. package/build/bindings/entity.js +0 -78
  93. package/build/bindings/entity.js.map +0 -7
  94. package/build-module/bindings/entity.js +0 -58
  95. package/build-module/bindings/entity.js.map +0 -7
  96. package/build-types/bindings/entity.d.ts +0 -16
  97. package/build-types/bindings/entity.d.ts.map +0 -1
  98. package/src/bindings/entity.js +0 -89
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { __, _x } from "@wordpress/i18n";
2
+ import { __ } from "@wordpress/i18n";
3
3
  import { useSelect } from "@wordpress/data";
4
4
  import {
5
5
  __experimentalHStack as HStack,
@@ -9,7 +9,6 @@ import {
9
9
  store as blockEditorStore,
10
10
  privateApis as blockEditorPrivateApis
11
11
  } from "@wordpress/block-editor";
12
- import { isUnmodifiedDefaultBlock } from "@wordpress/blocks";
13
12
  import { unlock } from "../../lock-unlock";
14
13
  import CommentAuthorInfo from "./comment-author-info";
15
14
  import CommentForm from "./comment-form";
@@ -21,20 +20,16 @@ function AddComment({
21
20
  setShowCommentBoard,
22
21
  commentSidebarRef
23
22
  }) {
24
- const { clientId, blockCommentId, isEmptyDefaultBlock } = useSelect(
25
- (select) => {
26
- const { getSelectedBlock } = select(blockEditorStore);
27
- const selectedBlock = getSelectedBlock();
28
- return {
29
- clientId: selectedBlock?.clientId,
30
- blockCommentId: selectedBlock?.attributes?.metadata?.commentId,
31
- isEmptyDefaultBlock: selectedBlock ? isUnmodifiedDefaultBlock(selectedBlock) : false
32
- };
33
- },
34
- []
35
- );
23
+ const { clientId, blockCommentId } = useSelect((select) => {
24
+ const { getSelectedBlock } = select(blockEditorStore);
25
+ const selectedBlock = getSelectedBlock();
26
+ return {
27
+ clientId: selectedBlock?.clientId,
28
+ blockCommentId: selectedBlock?.attributes?.metadata?.noteId
29
+ };
30
+ }, []);
36
31
  const blockElement = useBlockElement(clientId);
37
- if (!showCommentBoard || !clientId || void 0 !== blockCommentId || isEmptyDefaultBlock) {
32
+ if (!showCommentBoard || !clientId || void 0 !== blockCommentId) {
38
33
  return null;
39
34
  }
40
35
  return /* @__PURE__ */ jsxs(
@@ -52,12 +47,13 @@ function AddComment({
52
47
  onSubmit: async (inputComment) => {
53
48
  const { id } = await onSubmit({ content: inputComment });
54
49
  focusCommentThread(id, commentSidebarRef.current);
50
+ setShowCommentBoard(false);
55
51
  },
56
52
  onCancel: () => {
57
53
  setShowCommentBoard(false);
58
54
  blockElement?.focus();
59
55
  },
60
- submitButtonText: _x("Note", "Add note button"),
56
+ submitButtonText: __("Add note"),
61
57
  labelText: __("New Note")
62
58
  }
63
59
  )
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/collab-sidebar/add-comment.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { isUnmodifiedDefaultBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport CommentAuthorInfo from './comment-author-info';\nimport CommentForm from './comment-form';\nimport { focusCommentThread } from './utils';\n\nconst { useBlockElement } = unlock( blockEditorPrivateApis );\n\nexport function AddComment( {\n\tonSubmit,\n\tshowCommentBoard,\n\tsetShowCommentBoard,\n\tcommentSidebarRef,\n} ) {\n\tconst { clientId, blockCommentId, isEmptyDefaultBlock } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSelectedBlock } = select( blockEditorStore );\n\t\t\tconst selectedBlock = getSelectedBlock();\n\t\t\treturn {\n\t\t\t\tclientId: selectedBlock?.clientId,\n\t\t\t\tblockCommentId: selectedBlock?.attributes?.metadata?.commentId,\n\t\t\t\tisEmptyDefaultBlock: selectedBlock\n\t\t\t\t\t? isUnmodifiedDefaultBlock( selectedBlock )\n\t\t\t\t\t: false,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst blockElement = useBlockElement( clientId );\n\n\tif (\n\t\t! showCommentBoard ||\n\t\t! clientId ||\n\t\tundefined !== blockCommentId ||\n\t\tisEmptyDefaultBlock\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<VStack\n\t\t\tclassName=\"editor-collab-sidebar-panel__thread is-selected\"\n\t\t\tspacing=\"3\"\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"listitem\"\n\t\t>\n\t\t\t<HStack alignment=\"left\" spacing=\"3\">\n\t\t\t\t<CommentAuthorInfo />\n\t\t\t</HStack>\n\t\t\t<CommentForm\n\t\t\t\tonSubmit={ async ( inputComment ) => {\n\t\t\t\t\tconst { id } = await onSubmit( { content: inputComment } );\n\t\t\t\t\tfocusCommentThread( id, commentSidebarRef.current );\n\t\t\t\t} }\n\t\t\t\tonCancel={ () => {\n\t\t\t\t\tsetShowCommentBoard( false );\n\t\t\t\t\tblockElement?.focus();\n\t\t\t\t} }\n\t\t\t\tsubmitButtonText={ _x( 'Note', 'Add note button' ) }\n\t\t\t\tlabelText={ __( 'New Note' ) }\n\t\t\t/>\n\t\t</VStack>\n\t);\n}\n"],
5
- "mappings": "AAyDE,SAOE,KAPF;AAtDF,SAAS,IAAI,UAAU;AACvB,SAAS,iBAAiB;AAC1B;AAAA,EACC,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,OAClB;AACP;AAAA,EACC,SAAS;AAAA,EACT,eAAe;AAAA,OACT;AACP,SAAS,gCAAgC;AAKzC,SAAS,cAAc;AACvB,OAAO,uBAAuB;AAC9B,OAAO,iBAAiB;AACxB,SAAS,0BAA0B;AAEnC,MAAM,EAAE,gBAAgB,IAAI,OAAQ,sBAAuB;AAEpD,SAAS,WAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,UAAU,gBAAgB,oBAAoB,IAAI;AAAA,IACzD,CAAE,WAAY;AACb,YAAM,EAAE,iBAAiB,IAAI,OAAQ,gBAAiB;AACtD,YAAM,gBAAgB,iBAAiB;AACvC,aAAO;AAAA,QACN,UAAU,eAAe;AAAA,QACzB,gBAAgB,eAAe,YAAY,UAAU;AAAA,QACrD,qBAAqB,gBAClB,yBAA0B,aAAc,IACxC;AAAA,MACJ;AAAA,IACD;AAAA,IACA,CAAC;AAAA,EACF;AACA,QAAM,eAAe,gBAAiB,QAAS;AAE/C,MACC,CAAE,oBACF,CAAE,YACF,WAAc,kBACd,qBACC;AACD,WAAO;AAAA,EACR;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,UAAW;AAAA,MACX,MAAK;AAAA,MAEL;AAAA,4BAAC,UAAO,WAAU,QAAO,SAAQ,KAChC,8BAAC,qBAAkB,GACpB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,UAAW,OAAQ,iBAAkB;AACpC,oBAAM,EAAE,GAAG,IAAI,MAAM,SAAU,EAAE,SAAS,aAAa,CAAE;AACzD,iCAAoB,IAAI,kBAAkB,OAAQ;AAAA,YACnD;AAAA,YACA,UAAW,MAAM;AAChB,kCAAqB,KAAM;AAC3B,4BAAc,MAAM;AAAA,YACrB;AAAA,YACA,kBAAmB,GAAI,QAAQ,iBAAkB;AAAA,YACjD,WAAY,GAAI,UAAW;AAAA;AAAA,QAC5B;AAAA;AAAA;AAAA,EACD;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\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 } from './utils';\n\nconst { useBlockElement } = unlock( blockEditorPrivateApis );\n\nexport function AddComment( {\n\tonSubmit,\n\tshowCommentBoard,\n\tsetShowCommentBoard,\n\tcommentSidebarRef,\n} ) {\n\tconst { clientId, blockCommentId } = useSelect( ( select ) => {\n\t\tconst { getSelectedBlock } = select( blockEditorStore );\n\t\tconst selectedBlock = getSelectedBlock();\n\t\treturn {\n\t\t\tclientId: selectedBlock?.clientId,\n\t\t\tblockCommentId: selectedBlock?.attributes?.metadata?.noteId,\n\t\t};\n\t}, [] );\n\tconst blockElement = useBlockElement( clientId );\n\n\tif ( ! showCommentBoard || ! clientId || undefined !== blockCommentId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<VStack\n\t\t\tclassName=\"editor-collab-sidebar-panel__thread is-selected\"\n\t\t\tspacing=\"3\"\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"listitem\"\n\t\t>\n\t\t\t<HStack alignment=\"left\" spacing=\"3\">\n\t\t\t\t<CommentAuthorInfo />\n\t\t\t</HStack>\n\t\t\t<CommentForm\n\t\t\t\tonSubmit={ async ( inputComment ) => {\n\t\t\t\t\tconst { id } = await onSubmit( { content: inputComment } );\n\t\t\t\t\tfocusCommentThread( id, commentSidebarRef.current );\n\t\t\t\t\tsetShowCommentBoard( false );\n\t\t\t\t} }\n\t\t\t\tonCancel={ () => {\n\t\t\t\t\tsetShowCommentBoard( false );\n\t\t\t\t\tblockElement?.focus();\n\t\t\t\t} }\n\t\t\t\tsubmitButtonText={ __( 'Add note' ) }\n\t\t\t\tlabelText={ __( 'New Note' ) }\n\t\t\t/>\n\t\t</VStack>\n\t);\n}\n"],
5
+ "mappings": "AA6CE,SAOE,KAPF;AA1CF,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAC1B;AAAA,EACC,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,OAClB;AACP;AAAA,EACC,SAAS;AAAA,EACT,eAAe;AAAA,OACT;AAKP,SAAS,cAAc;AACvB,OAAO,uBAAuB;AAC9B,OAAO,iBAAiB;AACxB,SAAS,0BAA0B;AAEnC,MAAM,EAAE,gBAAgB,IAAI,OAAQ,sBAAuB;AAEpD,SAAS,WAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,UAAU,eAAe,IAAI,UAAW,CAAE,WAAY;AAC7D,UAAM,EAAE,iBAAiB,IAAI,OAAQ,gBAAiB;AACtD,UAAM,gBAAgB,iBAAiB;AACvC,WAAO;AAAA,MACN,UAAU,eAAe;AAAA,MACzB,gBAAgB,eAAe,YAAY,UAAU;AAAA,IACtD;AAAA,EACD,GAAG,CAAC,CAAE;AACN,QAAM,eAAe,gBAAiB,QAAS;AAE/C,MAAK,CAAE,oBAAoB,CAAE,YAAY,WAAc,gBAAiB;AACvE,WAAO;AAAA,EACR;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,UAAW;AAAA,MACX,MAAK;AAAA,MAEL;AAAA,4BAAC,UAAO,WAAU,QAAO,SAAQ,KAChC,8BAAC,qBAAkB,GACpB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,UAAW,OAAQ,iBAAkB;AACpC,oBAAM,EAAE,GAAG,IAAI,MAAM,SAAU,EAAE,SAAS,aAAa,CAAE;AACzD,iCAAoB,IAAI,kBAAkB,OAAQ;AAClD,kCAAqB,KAAM;AAAA,YAC5B;AAAA,YACA,UAAW,MAAM;AAChB,kCAAqB,KAAM;AAC3B,4BAAc,MAAM;AAAA,YACrB;AAAA,YACA,kBAAmB,GAAI,UAAW;AAAA,YAClC,WAAY,GAAI,UAAW;AAAA;AAAA,QAC5B;AAAA;AAAA;AAAA,EACD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -15,7 +15,7 @@ const AddCommentMenuItem = ({ onClick }) => {
15
15
  onClose();
16
16
  },
17
17
  "aria-haspopup": "dialog",
18
- children: __("Note")
18
+ children: __("Add note")
19
19
  }
20
20
  ) });
21
21
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/collab-sidebar/comment-menu-item.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { comment as commentIcon } from '@wordpress/icons';\n\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { CommentIconSlotFill } = unlock( blockEditorPrivateApis );\n\nconst AddCommentMenuItem = ( { onClick } ) => {\n\treturn (\n\t\t<CommentIconSlotFill.Fill>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<MenuItem\n\t\t\t\t\ticon={ commentIcon }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tonClick();\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Note' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</CommentIconSlotFill.Fill>\n\t);\n};\n\nexport default AddCommentMenuItem;\n"],
5
- "mappings": "AAoBI;AAjBJ,SAAS,gBAAgB;AACzB,SAAS,UAAU;AACnB,SAAS,WAAW,mBAAmB;AAEvC,SAAS,eAAe,8BAA8B;AAKtD,SAAS,cAAc;AAEvB,MAAM,EAAE,oBAAoB,IAAI,OAAQ,sBAAuB;AAE/D,MAAM,qBAAqB,CAAE,EAAE,QAAQ,MAAO;AAC7C,SACC,oBAAC,oBAAoB,MAApB,EACE,WAAE,EAAE,QAAQ,MACb;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,SAAU,MAAM;AACf,gBAAQ;AACR,gBAAQ;AAAA,MACT;AAAA,MACA,iBAAc;AAAA,MAEZ,aAAI,MAAO;AAAA;AAAA,EACd,GAEF;AAEF;AAEA,IAAO,4BAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { comment as commentIcon } from '@wordpress/icons';\n\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\n\nconst { CommentIconSlotFill } = unlock( blockEditorPrivateApis );\n\nconst AddCommentMenuItem = ( { onClick } ) => {\n\treturn (\n\t\t<CommentIconSlotFill.Fill>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<MenuItem\n\t\t\t\t\ticon={ commentIcon }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tonClick();\n\t\t\t\t\t\tonClose();\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Add note' ) }\n\t\t\t\t</MenuItem>\n\t\t\t) }\n\t\t</CommentIconSlotFill.Fill>\n\t);\n};\n\nexport default AddCommentMenuItem;\n"],
5
+ "mappings": "AAoBI;AAjBJ,SAAS,gBAAgB;AACzB,SAAS,UAAU;AACnB,SAAS,WAAW,mBAAmB;AAEvC,SAAS,eAAe,8BAA8B;AAKtD,SAAS,cAAc;AAEvB,MAAM,EAAE,oBAAoB,IAAI,OAAQ,sBAAuB;AAE/D,MAAM,qBAAqB,CAAE,EAAE,QAAQ,MAAO;AAC7C,SACC,oBAAC,oBAAoB,MAApB,EACE,WAAE,EAAE,QAAQ,MACb;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,SAAU,MAAM;AACf,gBAAQ;AACR,gBAAQ;AAAA,MACT;AAAA,MACA,iBAAc;AAAA,MAEZ,aAAI,UAAW;AAAA;AAAA,EAClB,GAEF;AAEF;AAEA,IAAO,4BAAQ;",
6
6
  "names": []
7
7
  }
@@ -41,22 +41,14 @@ function Comments({
41
41
  const [selectedThread, setSelectedThread] = useState(null);
42
42
  const [boardOffsets, setBoardOffsets] = useState({});
43
43
  const [blockRefs, setBlockRefs] = useState({});
44
- const { blockCommentId, selectedBlockClientId, blockIds } = useSelect(
45
- (select) => {
46
- const {
47
- getBlockAttributes,
48
- getSelectedBlockClientId,
49
- getBlockOrder
50
- } = select(blockEditorStore);
51
- const clientId = getSelectedBlockClientId();
52
- return {
53
- blockCommentId: clientId ? getBlockAttributes(clientId)?.metadata?.commentId : null,
54
- selectedBlockClientId: clientId,
55
- blockIds: getBlockOrder()
56
- };
57
- },
58
- []
59
- );
44
+ const { blockCommentId, selectedBlockClientId } = useSelect((select) => {
45
+ const { getBlockAttributes, getSelectedBlockClientId } = select(blockEditorStore);
46
+ const clientId = getSelectedBlockClientId();
47
+ return {
48
+ blockCommentId: clientId ? getBlockAttributes(clientId)?.metadata?.noteId : null,
49
+ selectedBlockClientId: clientId
50
+ };
51
+ }, []);
60
52
  const relatedBlockElement = useBlockElement(selectedBlockClientId);
61
53
  const handleDelete = async (comment) => {
62
54
  const currentIndex = threads.findIndex((t) => t.id === comment.id);
@@ -89,73 +81,103 @@ function Comments({
89
81
  useEffect(() => {
90
82
  const calculateAllOffsets = () => {
91
83
  const offsets = {};
92
- let previousThreadData = null;
93
84
  if (!isFloating) {
94
- return;
85
+ return offsets;
86
+ }
87
+ const selectedThreadIndex = threads.findIndex(
88
+ (t) => t.id === selectedThread
89
+ );
90
+ const breakIndex = selectedThreadIndex === -1 ? 0 : selectedThreadIndex;
91
+ const selectedThreadData = threads[breakIndex];
92
+ if (!selectedThreadData || !blockRefs[selectedThreadData.id]) {
93
+ return offsets;
95
94
  }
96
- threads.forEach((thread) => {
95
+ let blockElement = blockRefs[selectedThreadData.id];
96
+ let blockRect = blockElement?.getBoundingClientRect();
97
+ const selectedThreadTop = blockRect?.top || 0;
98
+ const selectedThreadHeight = heights[selectedThreadData.id] || 0;
99
+ offsets[selectedThreadData.id] = -16;
100
+ let previousThreadData = {
101
+ threadTop: selectedThreadTop - 16,
102
+ threadHeight: selectedThreadHeight
103
+ };
104
+ for (let i = breakIndex + 1; i < threads.length; i++) {
105
+ const thread = threads[i];
97
106
  if (!blockRefs[thread.id]) {
98
- return;
107
+ continue;
99
108
  }
100
- const blockElement = blockRefs[thread.id];
101
- const blockRect = blockElement?.getBoundingClientRect();
109
+ blockElement = blockRefs[thread.id];
110
+ blockRect = blockElement?.getBoundingClientRect();
102
111
  const threadTop = blockRect?.top || 0;
103
112
  const threadHeight = heights[thread.id] || 0;
104
113
  let additionalOffset = -16;
105
- if (previousThreadData) {
106
- const previousBottom = previousThreadData.threadTop + previousThreadData.threadHeight;
107
- if (threadTop < previousBottom) {
108
- additionalOffset = previousBottom - threadTop + 20;
109
- }
114
+ const previousBottom = previousThreadData.threadTop + previousThreadData.threadHeight;
115
+ if (threadTop < previousBottom + 16) {
116
+ additionalOffset = previousBottom - threadTop + 20;
110
117
  }
118
+ offsets[thread.id] = additionalOffset;
111
119
  previousThreadData = {
112
120
  threadTop: threadTop + additionalOffset,
113
121
  threadHeight
114
122
  };
123
+ }
124
+ let nextThreadData = {
125
+ threadTop: selectedThreadTop - 16
126
+ };
127
+ for (let i = selectedThreadIndex - 1; i >= 0; i--) {
128
+ const thread = threads[i];
129
+ if (!blockRefs[thread.id]) {
130
+ continue;
131
+ }
132
+ blockElement = blockRefs[thread.id];
133
+ blockRect = blockElement?.getBoundingClientRect();
134
+ const threadTop = blockRect?.top || 0;
135
+ const threadHeight = heights[thread.id] || 0;
136
+ let additionalOffset = -16;
137
+ const threadBottom = threadTop + threadHeight;
138
+ if (threadBottom > nextThreadData.threadTop) {
139
+ additionalOffset = nextThreadData.threadTop - threadTop - threadHeight - 20;
140
+ }
115
141
  offsets[thread.id] = additionalOffset;
116
- });
142
+ nextThreadData = {
143
+ threadTop: threadTop + additionalOffset
144
+ };
145
+ }
117
146
  return offsets;
118
147
  };
119
148
  const newOffsets = calculateAllOffsets();
120
- setBoardOffsets(newOffsets);
121
- }, [heights, blockIds, blockRefs, isFloating, threads]);
149
+ if (Object.keys(newOffsets).length > 0) {
150
+ setBoardOffsets(newOffsets);
151
+ }
152
+ }, [heights, blockRefs, isFloating, threads, selectedThread]);
122
153
  const hasThreads = Array.isArray(threads) && threads.length > 0;
123
154
  if (!hasThreads) {
124
- return /* @__PURE__ */ jsx(
125
- VStack,
126
- {
127
- alignment: "left",
128
- className: "editor-collab-sidebar-panel__thread",
129
- justify: "flex-start",
130
- spacing: "3",
131
- children: __("No notes available.")
132
- }
133
- );
155
+ return /* @__PURE__ */ jsxs(VStack, { alignment: "left", justify: "flex-start", spacing: "2", children: [
156
+ /* @__PURE__ */ jsx(Text, { as: "p", children: __("No notes available.") }),
157
+ /* @__PURE__ */ jsx(Text, { as: "p", variant: "muted", children: __("Only logged in users can see Notes.") })
158
+ ] });
134
159
  }
135
- return /* @__PURE__ */ jsxs(VStack, { spacing: "3", children: [
136
- !isFloating && /* @__PURE__ */ jsx(Text, { as: "p", variant: "muted", children: __("Only logged in users can see Notes") }),
137
- threads.map((thread) => /* @__PURE__ */ jsx(
138
- Thread,
139
- {
140
- thread,
141
- onAddReply,
142
- onCommentDelete: handleDelete,
143
- onEditComment,
144
- isSelected: selectedThread === thread.id,
145
- setSelectedThread,
146
- setShowCommentBoard,
147
- commentSidebarRef,
148
- reflowComments,
149
- isFloating,
150
- calculatedOffset: boardOffsets ? boardOffsets[thread.id] : 0,
151
- setHeights,
152
- setBlockRef,
153
- selectedThread,
154
- commentLastUpdated
155
- },
156
- thread.id
157
- ))
158
- ] });
160
+ return /* @__PURE__ */ jsx(VStack, { spacing: "3", children: threads.map((thread) => /* @__PURE__ */ jsx(
161
+ Thread,
162
+ {
163
+ thread,
164
+ onAddReply,
165
+ onCommentDelete: handleDelete,
166
+ onEditComment,
167
+ isSelected: selectedThread === thread.id,
168
+ setSelectedThread,
169
+ setShowCommentBoard,
170
+ commentSidebarRef,
171
+ reflowComments,
172
+ isFloating,
173
+ calculatedOffset: boardOffsets[thread.id] ?? 0,
174
+ setHeights,
175
+ setBlockRef,
176
+ selectedThread,
177
+ commentLastUpdated
178
+ },
179
+ thread.id
180
+ )) });
159
181
  }
160
182
  function Thread({
161
183
  thread,
@@ -375,9 +397,9 @@ function Thread({
375
397
  rows: "approved" === thread.status ? 2 : 4,
376
398
  labelText: sprintf(
377
399
  // translators: %1$s: note identifier, %2$s: author name
378
- __("Reply to Note %1$s by %2$s"),
400
+ __("Reply to note %1$s by %2$s"),
379
401
  thread.id,
380
- thread?.author_name || "Unknown"
402
+ thread.author_name
381
403
  ),
382
404
  reflowComments
383
405
  }
@@ -534,7 +556,7 @@ const CommentBoard = ({
534
556
  // translators: %1$s: note identifier, %2$s: author name.
535
557
  __("Edit note %1$s by %2$s"),
536
558
  thread.id,
537
- thread?.author_name || "Unknown"
559
+ thread.author_name
538
560
  ),
539
561
  reflowComments
540
562
  }
@@ -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 { useState, RawHTML, useEffect, useCallback } 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 { getCommentExcerpt, focusCommentThread } from './utils';\nimport { useFloatingThread } from './hooks';\n\nconst { useBlockElement } = unlock( blockEditorPrivateApis );\nconst { Menu } = unlock( componentsPrivateApis );\n\n/**\n * Renders the Comments component.\n *\n * @param {Object} props - The component props.\n * @param {Array} props.threads - The array of comment threads.\n * @param {Function} props.onEditComment - The function to handle comment editing.\n * @param {Function} props.onAddReply - The function to add a reply to a comment.\n * @param {Function} props.onCommentDelete - The function to delete a comment.\n * @param {Function} props.setShowCommentBoard - The function to set the comment board visibility.\n * @param {Ref} props.commentSidebarRef - The ref to the comment sidebar.\n * @param {Function} props.reflowComments - The function to call indicating a comment is updated.\n * @param {boolean} props.isFloating - Whether the comment thread is floating.\n * @param {number} props.commentLastUpdated - Timestamp of the last comment update.\n * @return {React.ReactNode} The rendered Comments component.\n */\nexport function Comments( {\n\tthreads,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tsetShowCommentBoard,\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 { blockCommentId, selectedBlockClientId, blockIds } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\tgetBlockOrder,\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?.commentId\n\t\t\t\t\t: null,\n\t\t\t\tselectedBlockClientId: clientId,\n\t\t\t\tblockIds: getBlockOrder(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst relatedBlockElement = useBlockElement( selectedBlockClientId );\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\tsetShowCommentBoard( false );\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\tsetSelectedThread( blockCommentId ?? undefined );\n\t}, [ blockCommentId ] );\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\t\t\tlet previousThreadData = null;\n\n\t\t\tif ( ! isFloating ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Go through the comment threads from top to bottom.\n\t\t\tthreads.forEach( ( thread ) => {\n\t\t\t\tif ( ! blockRefs[ thread.id ] ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// The thread's starting top position is determined by its\n\t\t\t\t// associated block's position.\n\t\t\t\tconst blockElement = blockRefs[ thread.id ];\n\t\t\t\tconst blockRect = blockElement?.getBoundingClientRect();\n\t\t\t\tconst threadTop = blockRect?.top || 0;\n\n\t\t\t\t// Heights are tracked by the comment threads themselves.\n\t\t\t\tconst threadHeight = heights[ thread.id ] || 0;\n\n\t\t\t\t// By default, remove the top margin by shifting the block up\n\t\t\t\t// so it more precisely aligns with the block.\n\t\t\t\tlet additionalOffset = -16;\n\n\t\t\t\t// The first block never needs to be adjusted.\n\t\t\t\tif ( previousThreadData ) {\n\t\t\t\t\t// Check if the thread overlaps with the previous one.\n\t\t\t\t\tconst previousBottom =\n\t\t\t\t\t\tpreviousThreadData.threadTop +\n\t\t\t\t\t\tpreviousThreadData.threadHeight;\n\t\t\t\t\tif ( threadTop < previousBottom ) {\n\t\t\t\t\t\t// Shift down by the difference plus a margin to avoid overlap.\n\t\t\t\t\t\tadditionalOffset = previousBottom - threadTop + 20;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Store the current thread's position and height for the 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\n\t\t\t\toffsets[ thread.id ] = additionalOffset;\n\t\t\t} );\n\n\t\t\treturn offsets;\n\t\t};\n\t\tconst newOffsets = calculateAllOffsets();\n\t\tsetBoardOffsets( newOffsets );\n\t}, [ heights, blockIds, blockRefs, isFloating, threads ] );\n\n\tconst hasThreads = Array.isArray( threads ) && threads.length > 0;\n\tif ( ! hasThreads ) {\n\t\treturn (\n\t\t\t<VStack\n\t\t\t\talignment=\"left\"\n\t\t\t\tclassName=\"editor-collab-sidebar-panel__thread\"\n\t\t\t\tjustify=\"flex-start\"\n\t\t\t\tspacing=\"3\"\n\t\t\t>\n\t\t\t\t{ __( 'No notes available.' ) }\n\t\t\t</VStack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<VStack spacing=\"3\">\n\t\t\t{ ! isFloating && (\n\t\t\t\t<Text as=\"p\" variant=\"muted\">\n\t\t\t\t\t{ __( 'Only logged in users can see Notes' ) }\n\t\t\t\t</Text>\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\tsetShowCommentBoard={ setShowCommentBoard }\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={\n\t\t\t\t\t\tboardOffsets ? boardOffsets[ thread.id ] : 0\n\t\t\t\t\t}\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/>\n\t\t\t) ) }\n\t\t</VStack>\n\t);\n}\n\nfunction Thread( {\n\tthread,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tisSelected,\n\tsetShowCommentBoard,\n\tcommentSidebarRef,\n\treflowComments,\n\tisFloating,\n\tcalculatedOffset,\n\tsetHeights,\n\tsetBlockRef,\n\tsetSelectedThread,\n\tselectedThread,\n\tcommentLastUpdated,\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\tsetShowCommentBoard( false );\n\t\tsetSelectedThread( thread.id );\n\t\t// pass `null` as the second parameter to prevent focusing the block.\n\t\tselectBlock( thread.blockClientId, null );\n\t\ttoggleBlockSpotlight( thread.blockClientId, true );\n\t};\n\n\tconst unselectThread = () => {\n\t\tsetSelectedThread( null );\n\t\tsetShowCommentBoard( false );\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 = relatedBlockElement\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\treturn (\n\t\t// Disable reason: role=\"listitem\" does in fact support aria-expanded.\n\t\t// eslint-disable-next-line jsx-a11y/role-supports-aria-props\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\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=\"listitem\"\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{ ! relatedBlockElement && (\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\tconst { status } = params;\n\t\t\t\t\tonEditComment( params );\n\t\t\t\t\tif ( status === 'approved' ) {\n\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\tcommentSidebarRef.current\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\">\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 || 'Unknown'\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<Button\n\t\t\t\tclassName=\"editor-collab-sidebar-panel__skip-to-block\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"compact\"\n\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\trelatedBlockElement?.focus();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Back to block' ) }\n\t\t\t</Button>\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\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};\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 spacing=\"2\">\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\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} }\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 || 'Unknown'\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{ __( 'Are you sure you want to delete this note?' ) }\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 { useState, RawHTML, useEffect, useCallback } 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 { getCommentExcerpt, focusCommentThread } from './utils';\nimport { useFloatingThread } from './hooks';\n\nconst { useBlockElement } = unlock( blockEditorPrivateApis );\nconst { Menu } = unlock( componentsPrivateApis );\n\n/**\n * Renders the Comments component.\n *\n * @param {Object} props - The component props.\n * @param {Array} props.threads - The array of comment threads.\n * @param {Function} props.onEditComment - The function to handle comment editing.\n * @param {Function} props.onAddReply - The function to add a reply to a comment.\n * @param {Function} props.onCommentDelete - The function to delete a comment.\n * @param {Function} props.setShowCommentBoard - The function to set the comment board visibility.\n * @param {Ref} props.commentSidebarRef - The ref to the comment sidebar.\n * @param {Function} props.reflowComments - The function to call indicating a comment is updated.\n * @param {boolean} props.isFloating - Whether the comment thread is floating.\n * @param {number} props.commentLastUpdated - Timestamp of the last comment update.\n * @return {React.ReactNode} The rendered Comments component.\n */\nexport function Comments( {\n\tthreads,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tsetShowCommentBoard,\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 { blockCommentId, selectedBlockClientId } = useSelect( ( select ) => {\n\t\tconst { getBlockAttributes, getSelectedBlockClientId } =\n\t\t\tselect( blockEditorStore );\n\t\tconst clientId = getSelectedBlockClientId();\n\t\treturn {\n\t\t\tblockCommentId: clientId\n\t\t\t\t? getBlockAttributes( clientId )?.metadata?.noteId\n\t\t\t\t: null,\n\t\t\tselectedBlockClientId: clientId,\n\t\t};\n\t}, [] );\n\n\tconst relatedBlockElement = useBlockElement( selectedBlockClientId );\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\tsetShowCommentBoard( false );\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\tsetSelectedThread( blockCommentId ?? undefined );\n\t}, [ blockCommentId ] );\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;\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;\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\t\t\treturn offsets;\n\t\t};\n\t\tconst newOffsets = calculateAllOffsets();\n\t\tif ( Object.keys( newOffsets ).length > 0 ) {\n\t\t\tsetBoardOffsets( newOffsets );\n\t\t}\n\t}, [ heights, blockRefs, isFloating, threads, selectedThread ] );\n\n\tconst hasThreads = Array.isArray( threads ) && threads.length > 0;\n\tif ( ! hasThreads ) {\n\t\treturn (\n\t\t\t<VStack alignment=\"left\" justify=\"flex-start\" spacing=\"2\">\n\t\t\t\t<Text as=\"p\">{ __( 'No notes available.' ) }</Text>\n\t\t\t\t<Text as=\"p\" variant=\"muted\">\n\t\t\t\t\t{ __( 'Only logged in users can see Notes.' ) }\n\t\t\t\t</Text>\n\t\t\t</VStack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<VStack spacing=\"3\">\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\tsetShowCommentBoard={ setShowCommentBoard }\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/>\n\t\t\t) ) }\n\t\t</VStack>\n\t);\n}\n\nfunction Thread( {\n\tthread,\n\tonEditComment,\n\tonAddReply,\n\tonCommentDelete,\n\tisSelected,\n\tsetShowCommentBoard,\n\tcommentSidebarRef,\n\treflowComments,\n\tisFloating,\n\tcalculatedOffset,\n\tsetHeights,\n\tsetBlockRef,\n\tsetSelectedThread,\n\tselectedThread,\n\tcommentLastUpdated,\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\tsetShowCommentBoard( false );\n\t\tsetSelectedThread( thread.id );\n\t\t// pass `null` as the second parameter to prevent focusing the block.\n\t\tselectBlock( thread.blockClientId, null );\n\t\ttoggleBlockSpotlight( thread.blockClientId, true );\n\t};\n\n\tconst unselectThread = () => {\n\t\tsetSelectedThread( null );\n\t\tsetShowCommentBoard( false );\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 = relatedBlockElement\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\treturn (\n\t\t// Disable reason: role=\"listitem\" does in fact support aria-expanded.\n\t\t// eslint-disable-next-line jsx-a11y/role-supports-aria-props\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\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=\"listitem\"\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{ ! relatedBlockElement && (\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\tconst { status } = params;\n\t\t\t\t\tonEditComment( params );\n\t\t\t\t\tif ( status === 'approved' ) {\n\t\t\t\t\t\tunselectThread();\n\t\t\t\t\t\tfocusCommentThread(\n\t\t\t\t\t\t\tthread.id,\n\t\t\t\t\t\t\tcommentSidebarRef.current\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\">\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<Button\n\t\t\t\tclassName=\"editor-collab-sidebar-panel__skip-to-block\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"compact\"\n\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\trelatedBlockElement?.focus();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Back to block' ) }\n\t\t\t</Button>\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\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};\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 spacing=\"2\">\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\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} }\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{ __( 'Are you sure you want to delete this note?' ) }\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
  }
@@ -1,6 +1,8 @@
1
1
  const collabHistorySidebarName = "edit-post/collab-history-sidebar";
2
2
  const collabSidebarName = "edit-post/collab-sidebar";
3
+ const SIDEBARS = [collabHistorySidebarName, collabSidebarName];
3
4
  export {
5
+ SIDEBARS,
4
6
  collabHistorySidebarName,
5
7
  collabSidebarName
6
8
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/collab-sidebar/constants.js"],
4
- "sourcesContent": ["export const collabHistorySidebarName = 'edit-post/collab-history-sidebar';\nexport const collabSidebarName = 'edit-post/collab-sidebar';\n"],
5
- "mappings": "AAAO,MAAM,2BAA2B;AACjC,MAAM,oBAAoB;",
4
+ "sourcesContent": ["export const collabHistorySidebarName = 'edit-post/collab-history-sidebar';\nexport const collabSidebarName = 'edit-post/collab-sidebar';\nexport const SIDEBARS = [ collabHistorySidebarName, collabSidebarName ];\n"],
5
+ "mappings": "AAAO,MAAM,2BAA2B;AACjC,MAAM,oBAAoB;AAC1B,MAAM,WAAW,CAAE,0BAA0B,iBAAkB;",
6
6
  "names": []
7
7
  }
@@ -53,7 +53,7 @@ function useBlockComments(postId) {
53
53
  }, []);
54
54
  const { resultComments, unresolvedSortedThreads } = useMemo(() => {
55
55
  const blocksWithComments = clientIds.reduce((results, clientId) => {
56
- const commentId = getBlockAttributes(clientId)?.metadata?.commentId;
56
+ const commentId = getBlockAttributes(clientId)?.metadata?.noteId;
57
57
  if (commentId) {
58
58
  results[clientId] = commentId;
59
59
  }
@@ -89,15 +89,22 @@ function useBlockComments(postId) {
89
89
  const threadIdMap = new Map(
90
90
  updatedResult.map((thread) => [String(thread.id), thread])
91
91
  );
92
+ const mappedIds = new Set(
93
+ Object.values(blocksWithComments).map((id) => String(id))
94
+ );
92
95
  const unresolvedSortedComments = Object.values(blocksWithComments).map((commentId) => threadIdMap.get(String(commentId))).filter(
93
96
  (thread) => thread !== void 0 && thread.status === "hold"
94
97
  );
95
98
  const resolvedSortedComments = Object.values(blocksWithComments).map((commentId) => threadIdMap.get(String(commentId))).filter(
96
99
  (thread) => thread !== void 0 && thread.status === "approved"
97
100
  );
101
+ const orphanedComments = updatedResult.filter(
102
+ (thread) => !mappedIds.has(String(thread.id))
103
+ );
98
104
  const allSortedComments = [
99
105
  ...unresolvedSortedComments,
100
- ...resolvedSortedComments
106
+ ...resolvedSortedComments,
107
+ ...orphanedComments
101
108
  ];
102
109
  return {
103
110
  resultComments: allSortedComments,
@@ -145,13 +152,13 @@ function useBlockCommentsActions(reflowComments = noop) {
145
152
  updateBlockAttributes(clientId, {
146
153
  metadata: {
147
154
  ...metadata,
148
- commentId: savedRecord.id
155
+ noteId: savedRecord.id
149
156
  }
150
157
  });
151
158
  }
152
159
  createNotice(
153
160
  "snackbar",
154
- parent ? __("Reply added successfully.") : __("Note added successfully."),
161
+ parent ? __("Reply added.") : __("Note added."),
155
162
  {
156
163
  type: "snackbar",
157
164
  isDismissible: true
@@ -239,11 +246,11 @@ function useBlockCommentsActions(reflowComments = noop) {
239
246
  updateBlockAttributes(clientId, {
240
247
  metadata: cleanEmptyObject({
241
248
  ...metadata,
242
- commentId: void 0
249
+ noteId: void 0
243
250
  })
244
251
  });
245
252
  }
246
- createNotice("snackbar", __("Note deleted successfully."), {
253
+ createNotice("snackbar", __("Note deleted."), {
247
254
  type: "snackbar",
248
255
  isDismissible: true
249
256
  });