@parhelia/core 0.3.12788 → 0.3.12798

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 (235) hide show
  1. package/dist/components/ui/LanguageSelector.js +4 -1
  2. package/dist/components/ui/LanguageSelector.js.map +1 -1
  3. package/dist/components/ui/PlaceholderInput.js +16 -2
  4. package/dist/components/ui/PlaceholderInput.js.map +1 -1
  5. package/dist/components/ui/select.js +12 -1
  6. package/dist/components/ui/select.js.map +1 -1
  7. package/dist/editor/FieldHistory.js +14 -4
  8. package/dist/editor/FieldHistory.js.map +1 -1
  9. package/dist/editor/ai/InlineAiDialog.js +35 -8
  10. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  11. package/dist/editor/ai/agentTodoExtraction.d.ts +1 -0
  12. package/dist/editor/ai/agentTodoExtraction.js +3 -0
  13. package/dist/editor/ai/agentTodoExtraction.js.map +1 -1
  14. package/dist/editor/ai/terminal/agentSessionState.js +26 -4
  15. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  16. package/dist/editor/ai/terminal/components/AgentProjectProgress.d.ts +4 -3
  17. package/dist/editor/ai/terminal/components/AgentProjectProgress.js +34 -50
  18. package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
  19. package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +2 -1
  20. package/dist/editor/ai/terminal/components/AgentTerminalView.js +2 -2
  21. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  22. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js +2 -1
  23. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js.map +1 -1
  24. package/dist/editor/ai/terminal/components/AiResponseMessage.js +55 -41
  25. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  26. package/dist/editor/ai/terminal/components/ApprovalCard.d.ts +1 -0
  27. package/dist/editor/ai/terminal/components/ApprovalCard.js +15 -1
  28. package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
  29. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.d.ts +24 -0
  30. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js +97 -0
  31. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js.map +1 -0
  32. package/dist/editor/ai/terminal/components/InitialThinkingSplash.js +2 -1
  33. package/dist/editor/ai/terminal/components/InitialThinkingSplash.js.map +1 -1
  34. package/dist/editor/ai/terminal/components/TodoListPanel.js +5 -3
  35. package/dist/editor/ai/terminal/components/TodoListPanel.js.map +1 -1
  36. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +4 -1
  37. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +33 -5
  38. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  39. package/dist/editor/ai/terminal/components/ValueDiff.d.ts +15 -0
  40. package/dist/editor/ai/terminal/components/ValueDiff.js +21 -0
  41. package/dist/editor/ai/terminal/components/ValueDiff.js.map +1 -0
  42. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +1 -0
  43. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +2 -0
  44. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -0
  45. package/dist/editor/ai/terminal/components/toolCallContentRenderers.d.ts +15 -0
  46. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +12 -0
  47. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -0
  48. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.d.ts +1 -0
  49. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js +6 -1
  50. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js.map +1 -1
  51. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +1 -0
  52. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  53. package/dist/editor/ai/terminal/useAgentTerminalController.js +1 -0
  54. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  55. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -0
  56. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js +2 -1
  57. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  58. package/dist/editor/ai/types.d.ts +1 -0
  59. package/dist/editor/bridge/protocol.d.ts +11 -0
  60. package/dist/editor/bridge/protocol.js +1 -0
  61. package/dist/editor/bridge/protocol.js.map +1 -1
  62. package/dist/editor/client/EditorShell.js +184 -68
  63. package/dist/editor/client/EditorShell.js.map +1 -1
  64. package/dist/editor/client/editContext.d.ts +13 -3
  65. package/dist/editor/client/editContext.js.map +1 -1
  66. package/dist/editor/client/hooks/activeSessionSnapshots.d.ts +2 -0
  67. package/dist/editor/client/hooks/activeSessionSnapshots.js +43 -0
  68. package/dist/editor/client/hooks/activeSessionSnapshots.js.map +1 -0
  69. package/dist/editor/client/hooks/feedbackSocketState.js +3 -0
  70. package/dist/editor/client/hooks/feedbackSocketState.js.map +1 -1
  71. package/dist/editor/client/hooks/operationRefreshDeduplication.d.ts +22 -0
  72. package/dist/editor/client/hooks/operationRefreshDeduplication.js +45 -0
  73. package/dist/editor/client/hooks/operationRefreshDeduplication.js.map +1 -0
  74. package/dist/editor/client/hooks/socketMessageRetention.d.ts +7 -0
  75. package/dist/editor/client/hooks/socketMessageRetention.js +11 -0
  76. package/dist/editor/client/hooks/socketMessageRetention.js.map +1 -0
  77. package/dist/editor/client/hooks/useSocketMessageHandler.js +53 -19
  78. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  79. package/dist/editor/client/hooks/useWorkbox.d.ts +4 -0
  80. package/dist/editor/client/hooks/useWorkbox.js +132 -2
  81. package/dist/editor/client/hooks/useWorkbox.js.map +1 -1
  82. package/dist/editor/client/itemsRepository.d.ts +7 -1
  83. package/dist/editor/client/itemsRepository.js +55 -19
  84. package/dist/editor/client/itemsRepository.js.map +1 -1
  85. package/dist/editor/client/operations.d.ts +7 -3
  86. package/dist/editor/client/operations.js +216 -150
  87. package/dist/editor/client/operations.js.map +1 -1
  88. package/dist/editor/client/pageModelBuilder.js +21 -4
  89. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  90. package/dist/editor/client/sidebarAvailability.d.ts +4 -0
  91. package/dist/editor/client/sidebarAvailability.js +15 -0
  92. package/dist/editor/client/sidebarAvailability.js.map +1 -1
  93. package/dist/editor/client/waitForEditOperationTerminal.js +1 -1
  94. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
  95. package/dist/editor/commands/itemCommands.js +1 -1
  96. package/dist/editor/commands/itemCommands.js.map +1 -1
  97. package/dist/editor/content-tree/TreeSettingsMenu.js +1 -1
  98. package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -1
  99. package/dist/editor/field-types/RichTextEditorComponent.js +6 -1
  100. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  101. package/dist/editor/field-types/SingleLineText.js +2 -3
  102. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  103. package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +6 -1
  104. package/dist/editor/field-types/richtext/components/ReactSlate.js +91 -5
  105. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  106. package/dist/editor/field-types/singleLineTextValue.d.ts +3 -0
  107. package/dist/editor/field-types/singleLineTextValue.js +9 -0
  108. package/dist/editor/field-types/singleLineTextValue.js.map +1 -0
  109. package/dist/editor/menubar/ItemLanguageVersion.js +1 -1
  110. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  111. package/dist/editor/menubar/VersionSelector.js +18 -6
  112. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  113. package/dist/editor/menubar/WorkflowButton.js +8 -3
  114. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  115. package/dist/editor/menubar/toolbar-sections/EditControls.js +1 -1
  116. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  117. package/dist/editor/notifications/NotificationCenter.js +26 -7
  118. package/dist/editor/notifications/NotificationCenter.js.map +1 -1
  119. package/dist/editor/notifications/useNotifications.d.ts +3 -1
  120. package/dist/editor/notifications/useNotifications.js +27 -9
  121. package/dist/editor/notifications/useNotifications.js.map +1 -1
  122. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +18 -0
  123. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  124. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +54 -19
  125. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  126. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +30 -8
  127. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -1
  128. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +30 -8
  129. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  130. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +4 -0
  131. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  132. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js +23 -1
  133. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js.map +1 -1
  134. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +5 -3
  135. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +111 -19
  136. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  137. package/dist/editor/page-viewer/EditorForm.d.ts +2 -1
  138. package/dist/editor/page-viewer/EditorForm.js +41 -12
  139. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  140. package/dist/editor/page-viewer/PageViewer.d.ts +2 -0
  141. package/dist/editor/page-viewer/PageViewer.js +11 -2
  142. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  143. package/dist/editor/page-viewer/PageViewerFrame.js +266 -44
  144. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  145. package/dist/editor/page-viewer/bridgeFieldPatch.js +1 -0
  146. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  147. package/dist/editor/page-viewer/bridgeInlineAiSelection.d.ts +17 -0
  148. package/dist/editor/page-viewer/bridgeInlineAiSelection.js +80 -0
  149. package/dist/editor/page-viewer/bridgeInlineAiSelection.js.map +1 -0
  150. package/dist/editor/page-viewer/bridgeInlineEditCommit.d.ts +18 -0
  151. package/dist/editor/page-viewer/bridgeInlineEditCommit.js +24 -0
  152. package/dist/editor/page-viewer/bridgeInlineEditCommit.js.map +1 -0
  153. package/dist/editor/page-viewer/bridgeInlineEditSession.d.ts +3 -0
  154. package/dist/editor/page-viewer/bridgeInlineEditSession.js +30 -0
  155. package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -1
  156. package/dist/editor/page-viewer/bridgeItemChangeTarget.d.ts +9 -0
  157. package/dist/editor/page-viewer/bridgeItemChangeTarget.js +38 -0
  158. package/dist/editor/page-viewer/bridgeItemChangeTarget.js.map +1 -0
  159. package/dist/editor/page-viewer/bridgePointerDragRelease.d.ts +31 -0
  160. package/dist/editor/page-viewer/bridgePointerDragRelease.js +32 -0
  161. package/dist/editor/page-viewer/bridgePointerDragRelease.js.map +1 -0
  162. package/dist/editor/page-viewer/renderUrl.d.ts +8 -0
  163. package/dist/editor/page-viewer/renderUrl.js +10 -0
  164. package/dist/editor/page-viewer/renderUrl.js.map +1 -1
  165. package/dist/editor/personalization/PersonalizationPanel.js +52 -25
  166. package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
  167. package/dist/editor/reviews/Comment.js +3 -1
  168. package/dist/editor/reviews/Comment.js.map +1 -1
  169. package/dist/editor/reviews/CommentDisplayPopover.js +2 -0
  170. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  171. package/dist/editor/reviews/Comments.js +16 -3
  172. package/dist/editor/reviews/Comments.js.map +1 -1
  173. package/dist/editor/reviews/SuggestedEdit.js +25 -2
  174. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  175. package/dist/editor/reviews/SuggestionCommentThread.js +2 -0
  176. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  177. package/dist/editor/reviews/applySuggestedEditActions.js +105 -25
  178. package/dist/editor/reviews/applySuggestedEditActions.js.map +1 -1
  179. package/dist/editor/reviews/commentState.d.ts +4 -0
  180. package/dist/editor/reviews/commentState.js +15 -0
  181. package/dist/editor/reviews/commentState.js.map +1 -0
  182. package/dist/editor/reviews/feedbackOrdering.d.ts +1 -0
  183. package/dist/editor/reviews/feedbackOrdering.js +6 -0
  184. package/dist/editor/reviews/feedbackOrdering.js.map +1 -1
  185. package/dist/editor/reviews/suggestionContentChange.d.ts +7 -0
  186. package/dist/editor/reviews/suggestionContentChange.js +10 -0
  187. package/dist/editor/reviews/suggestionContentChange.js.map +1 -1
  188. package/dist/editor/reviews/suggestionPatch.js +6 -0
  189. package/dist/editor/reviews/suggestionPatch.js.map +1 -1
  190. package/dist/editor/services/agentService.d.ts +6 -0
  191. package/dist/editor/services/agentService.js.map +1 -1
  192. package/dist/editor/services/personalizationService.js +30 -6
  193. package/dist/editor/services/personalizationService.js.map +1 -1
  194. package/dist/editor/services/suggestedEditsService.d.ts +1 -0
  195. package/dist/editor/services/suggestedEditsService.js +3 -0
  196. package/dist/editor/services/suggestedEditsService.js.map +1 -1
  197. package/dist/editor/settings/SettingsView.js +15 -7
  198. package/dist/editor/settings/SettingsView.js.map +1 -1
  199. package/dist/editor/settings/panels/MemoriesPanel.js +3 -2
  200. package/dist/editor/settings/panels/MemoriesPanel.js.map +1 -1
  201. package/dist/editor/settings/panels/ProjectTemplatesPanel.d.ts +7 -0
  202. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +232 -21
  203. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  204. package/dist/editor/settings/panels/projectTemplateDuplication.d.ts +5 -0
  205. package/dist/editor/settings/panels/projectTemplateDuplication.js +57 -0
  206. package/dist/editor/settings/panels/projectTemplateDuplication.js.map +1 -0
  207. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +9 -4
  208. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
  209. package/dist/editor/sidebar/MainContentTree.js +1 -1
  210. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  211. package/dist/editor/ui/PerfectTree.js +2 -2
  212. package/dist/editor/ui/PerfectTree.js.map +1 -1
  213. package/dist/editor/ui/PublishRestrictionsDialog.js +9 -1
  214. package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
  215. package/dist/editor/utils.js +5 -2
  216. package/dist/editor/utils.js.map +1 -1
  217. package/dist/editor/views/EditorSlot.js +5 -1
  218. package/dist/editor/views/EditorSlot.js.map +1 -1
  219. package/dist/editor/views/SingleEditView.d.ts +4 -1
  220. package/dist/editor/views/SingleEditView.js +2 -2
  221. package/dist/editor/views/SingleEditView.js.map +1 -1
  222. package/dist/licensing/LicenseContext.js +7 -0
  223. package/dist/licensing/LicenseContext.js.map +1 -1
  224. package/dist/revision.d.ts +2 -2
  225. package/dist/revision.js +2 -2
  226. package/dist/task-board/TaskBoardWorkspace.js +10 -10
  227. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  228. package/dist/task-board/taskExecutionRecords.d.ts +1 -0
  229. package/dist/task-board/taskExecutionRecords.js +29 -0
  230. package/dist/task-board/taskExecutionRecords.js.map +1 -1
  231. package/dist/task-board/types.d.ts +9 -0
  232. package/dist/task-board/views/DependencyGraphView.d.ts +1 -0
  233. package/dist/task-board/views/DependencyGraphView.js +15 -12
  234. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  235. package/package.json +1 -1
@@ -396,16 +396,22 @@ export type DragGestureStartedEventPayload = {
396
396
  componentName?: string;
397
397
  clientX: number;
398
398
  clientY: number;
399
+ /** Host scroll captured with this pointer sample for race-free coordinate mapping. */
400
+ scroll?: BridgeScroll;
399
401
  };
400
402
  export type DragGestureMovedEventPayload = {
401
403
  pointerId: number;
402
404
  clientX: number;
403
405
  clientY: number;
406
+ /** Host scroll captured with this pointer sample for race-free coordinate mapping. */
407
+ scroll?: BridgeScroll;
404
408
  };
405
409
  export type DragGestureEndedEventPayload = {
406
410
  pointerId: number;
407
411
  clientX: number;
408
412
  clientY: number;
413
+ /** Host scroll captured with this pointer sample for race-free coordinate mapping. */
414
+ scroll?: BridgeScroll;
409
415
  /** True when the gesture was aborted (Escape / pointercancel) rather than dropped. */
410
416
  canceled?: boolean;
411
417
  };
@@ -533,10 +539,14 @@ export type BeginInlineEditCommandPayload = {
533
539
  export type ApplyFieldPatchCommandPayload = {
534
540
  elementKey: string;
535
541
  fieldId: string;
542
+ item?: BridgeItemDescriptor;
536
543
  value: string;
537
544
  isRichText?: boolean;
538
545
  source?: "real" | "suggestion-preview" | "reset" | string;
539
546
  };
547
+ export type SyncRemoteFieldDraftsCommandPayload = {
548
+ drafts: ApplyFieldPatchCommandPayload[];
549
+ };
540
550
  export type ApplyRichTextCommandPayload = {
541
551
  elementKey: string;
542
552
  fieldId: string;
@@ -616,6 +626,7 @@ export type BridgeCommandPayloadByName = {
616
626
  queryGeometry: QueryGeometryCommandPayload;
617
627
  beginInlineEdit: BeginInlineEditCommandPayload;
618
628
  applyFieldPatch: ApplyFieldPatchCommandPayload;
629
+ syncRemoteFieldDrafts: SyncRemoteFieldDraftsCommandPayload;
619
630
  applyRichTextCommand: ApplyRichTextCommandPayload;
620
631
  textCompletion: TextCompletionCommandPayload;
621
632
  commitInlineEdit: CommitInlineEditCommandPayload;
@@ -36,6 +36,7 @@ const commandNames = new Set([
36
36
  "queryGeometry",
37
37
  "beginInlineEdit",
38
38
  "applyFieldPatch",
39
+ "syncRemoteFieldDrafts",
39
40
  "applyRichTextCommand",
40
41
  "textCompletion",
41
42
  "commitInlineEdit",
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/editor/bridge/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/editor/bridge/protocol.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { showExpandableErrorToast } from "./errorToast";
13
13
  import { isRedoStackEntry, reconcileNewHistoryOperation, } from "./editHistoryReconciliation";
14
14
  import { isManualShowMeFocusTransfer, isManualShowMeTarget, } from "./manualShowMeFocus";
15
15
  import { isAgentTerminalFocusTransfer, nextAgentTerminalInteractionAt, } from "./agentTerminalFocus";
16
- import { getAvailableSidebarsForWorkspace } from "./sidebarAvailability";
16
+ import { getAvailableSidebarsForWorkspace, parseSidebarUrlValue, sidebarUrlValue, } from "./sidebarAvailability";
17
17
  import { executeFieldAction as executeFieldServerAction, connectSocket, getEditHistory, getRunningOperations, reconnectSession, releaseFieldLocks, validateItems, } from "../services/editService";
18
18
  import { emitAgentDocumentsChanged } from "../services/agentService";
19
19
  import { onSocketReconnect as onAgentSocketReconnect } from "../services/agentSubscriptionRegistry";
@@ -37,6 +37,7 @@ import { EditorFormHintPopover } from "../page-viewer/EditorFormHintPopover";
37
37
  import { FieldEditorPopup } from "../FieldEditorPopup";
38
38
  import { ConcurrentUserLimitDialog } from "../ConcurrentUserLimitDialog";
39
39
  import { SessionExpiredOverlay } from "./SessionExpiredOverlay";
40
+ import { filterRemovedComments } from "../reviews/commentState";
40
41
  import { post } from "../services/serviceHelper";
41
42
  import { CONTENT_TREE_SIDEBAR_ID } from "../sidebar/contentTreeConstants";
42
43
  import { PageViewerFrame } from "../page-viewer/PageViewerFrame";
@@ -89,14 +90,9 @@ function getGlobalHistoryLoadMoreIncrement(filterBySession) {
89
90
  ? GLOBAL_SESSION_HISTORY_LOAD_MORE_INCREMENT
90
91
  : GLOBAL_HISTORY_LOAD_MORE_INCREMENT;
91
92
  }
92
- // Sentinel written to the `sidebar` URL param when the user has explicitly closed
93
- // every sidebar. Distinguishes "no preference yet" (param absent) from "user wants
94
- // nothing open" (param present with this value) so reload can honor the user's intent.
95
- const SIDEBAR_NONE_SENTINEL = "none";
96
93
  const PARHELIA_SETTINGS_ITEM_ID = "a2f3c168bb2841ff9673ee7f3cc624af";
97
94
  const PARHELIA_SETTINGS_ITEM_PATH = "/sitecore/system/parhelia/settings";
98
95
  const PARHELIA_SHOW_MINIMAP_FIELD_ID = "e75976d2179e4578b4140147b7525fa5";
99
- const sidebarUrlValue = (ids) => ids.length ? ids.join(",") : SIDEBAR_NONE_SENTINEL;
100
96
  // moved to hooks/useQuota
101
97
  function isParheliaSettingsSnapshotChange(changes) {
102
98
  return changes.some((change) => {
@@ -196,6 +192,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
196
192
  const [pageModelReadyToken, setPageModelReadyToken] = useState(0);
197
193
  const notifyPageModelReady = useCallback(() => setPageModelReadyToken((c) => c + 1), []);
198
194
  const [dragObject, setDragObject] = useState();
195
+ // Pointer gestures can start and end between React's commit and passive-effect
196
+ // phases. Keep the event-time payload synchronous so a bridge listener from
197
+ // the preceding render cannot observe a stale `dragObject` closure at drop.
198
+ const dragObjectRef = useRef(undefined);
199
199
  const [clipboard, setClipboard] = useState(null);
200
200
  // media selection handled by useMediaSelector hook
201
201
  const [scrollIntoView, setScrollIntoView] = useState();
@@ -373,17 +373,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
373
373
  // Sidebar state
374
374
  const [openSidebars, setOpenSidebars] = useState(() => {
375
375
  const sidebarParam = searchParams.get("sidebar");
376
- let sidebars = [];
377
- // Presence check (not truthiness) so the sentinel "none" is respected across reloads.
378
- if (sidebarParam !== null) {
379
- sidebars =
380
- sidebarParam === SIDEBAR_NONE_SENTINEL
381
- ? []
382
- : sidebarParam.split(",").filter(Boolean);
383
- }
384
- else {
385
- sidebars = getInitialOpenSidebars(configuration, initialWorkspaceId);
386
- }
376
+ let sidebars = parseSidebarUrlValue(sidebarParam) ??
377
+ getInitialOpenSidebars(configuration, initialWorkspaceId);
387
378
  // If workspace=reviews was requested, ensure reviews sidebar is open
388
379
  if (isReviewsSidebarRequest && !sidebars.includes("reviews")) {
389
380
  sidebars.push("reviews");
@@ -643,6 +634,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
643
634
  const [itemLanguages, setItemLanguages] = useState([]);
644
635
  const [itemVersions, setItemVersions] = useState([]);
645
636
  const [isLoadingVersions, setIsLoadingVersions] = useState(false);
637
+ const versionLoadRequestRef = useRef(0);
638
+ const visibleVersionLoadRef = useRef(0);
639
+ const versionLoadsInFlightRef = useRef(new Map());
646
640
  const [modifiedFields, setModifiedFields] = useState([]);
647
641
  useEffect(() => {
648
642
  const stores = getFieldModificationStores();
@@ -747,8 +741,16 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
747
741
  const [mode, setModeState] = useState("edit");
748
742
  const modeRef = useRef("edit");
749
743
  modeRef.current = mode;
744
+ const modeTransitionChainRef = useRef(Promise.resolve());
750
745
  const modeChangeParticipantsRef = useRef(new Set());
751
- const loadSuggestedEditsRef = useRef(async () => { });
746
+ const loadSuggestedEditsRef = useRef(async () => undefined);
747
+ const suggestedEditsLoadRequestRef = useRef(0);
748
+ const suggestedEditsAppliedRequestRef = useRef(0);
749
+ const suggestedEditsItemKey = item
750
+ ? `${item.descriptor.id}:${item.descriptor.language}:${item.descriptor.version}`
751
+ : undefined;
752
+ const suggestedEditsItemKeyRef = useRef(suggestedEditsItemKey);
753
+ suggestedEditsItemKeyRef.current = suggestedEditsItemKey;
752
754
  const [modeTransitionRevision, setModeTransitionRevision] = useState(0);
753
755
  const [previewDate, setPreviewDate] = useState();
754
756
  const [layoutMode, setLayoutMode] = useState("final");
@@ -763,12 +765,23 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
763
765
  if (nextMode === previousMode)
764
766
  return;
765
767
  const participants = Array.from(modeChangeParticipantsRef.current);
766
- for (const participant of participants) {
767
- await participant.beforeModeChange?.(nextMode, previousMode, options);
768
- }
769
- for (const participant of participants) {
770
- participant.clearInlineDedupe?.(nextMode, previousMode, options);
771
- }
768
+ // Start event-time capture while the current mode and its live iframe
769
+ // editing session still exist. These promises are awaited in the
770
+ // serialized transition below, but invoking them here prevents the mode
771
+ // render from making an uncommitted DOM value unreachable.
772
+ const captureBarriers = participants.map((participant) => {
773
+ try {
774
+ return Promise.resolve(participant.captureBeforeModeChange?.(nextMode, previousMode, options));
775
+ }
776
+ catch (error) {
777
+ return Promise.reject(error);
778
+ }
779
+ });
780
+ // Reflect the user's requested mode immediately. Persistence barriers
781
+ // still drain in order below, but keeping the old mode visible until a
782
+ // slow host/save round-trip finishes invites duplicate toggle actions
783
+ // and makes the editor appear unresponsive. Inline edit sessions retain
784
+ // modeAtStart, so the in-flight value keeps its original routing.
772
785
  flushSync(() => {
773
786
  modeRef.current = nextMode;
774
787
  setModeState(nextMode);
@@ -782,9 +795,22 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
782
795
  setShowComments(true);
783
796
  }
784
797
  });
785
- if (nextMode === "suggestions") {
786
- void loadSuggestedEditsRef.current();
787
- }
798
+ const transition = modeTransitionChainRef.current
799
+ .catch(() => undefined)
800
+ .then(async () => {
801
+ await Promise.all(captureBarriers);
802
+ for (const participant of participants) {
803
+ await participant.beforeModeChange?.(nextMode, previousMode, options);
804
+ }
805
+ for (const participant of participants) {
806
+ participant.clearInlineDedupe?.(nextMode, previousMode, options);
807
+ }
808
+ if (nextMode === "suggestions" && modeRef.current === nextMode) {
809
+ await loadSuggestedEditsRef.current();
810
+ }
811
+ });
812
+ modeTransitionChainRef.current = transition;
813
+ await transition;
788
814
  }, []);
789
815
  const setMode = useCallback((nextMode) => {
790
816
  const resolvedMode = typeof nextMode === "function" ? nextMode(modeRef.current) : nextMode;
@@ -1714,11 +1740,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1714
1740
  }
1715
1741
  // Handle sidebar changes — clear when absent so state matches the URL
1716
1742
  const sidebarParam = urlParams.get("sidebar");
1717
- const newSidebars = sidebarParam === SIDEBAR_NONE_SENTINEL
1718
- ? []
1719
- : sidebarParam
1720
- ? sidebarParam.split(",").filter(Boolean)
1721
- : [];
1743
+ const newSidebars = parseSidebarUrlValue(sidebarParam) ?? [];
1744
+ openSidebarsRef.current = newSidebars;
1722
1745
  setOpenSidebars(newSidebars);
1723
1746
  // Handle wizard ID changes
1724
1747
  const wizardId = urlParams.get("wizardid");
@@ -2010,7 +2033,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2010
2033
  if (handleErrorResult(result, ui, state))
2011
2034
  return;
2012
2035
  setComments((x) => {
2013
- const loadedComments = result.data;
2036
+ const loadedComments = filterRemovedComments(result.data);
2014
2037
  const newComments = x.filter((c) => c.isNew &&
2015
2038
  c.mainItemId === currentItemDescriptor.id &&
2016
2039
  c.language === currentItemDescriptor.language &&
@@ -2024,20 +2047,34 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2024
2047
  // Assuming currentItemDescriptor, ui, state, handleErrorResult, and setSuggestedEdits
2025
2048
  // are available in your component context.
2026
2049
  const loadSuggestedEdits = useCallback(async () => {
2050
+ const requestId = ++suggestedEditsLoadRequestRef.current;
2027
2051
  if (!item)
2028
- return;
2052
+ return undefined;
2053
+ const requestedItemKey = `${item.descriptor.id}:${item.descriptor.language}:${item.descriptor.version}`;
2029
2054
  const reviewId = searchParams.get("reviewId");
2030
2055
  const result = await getSuggestedEdits(item.descriptor.id, item.descriptor.language, item.descriptor.version, reviewId ?? undefined);
2056
+ // Item initialization, navigation, and realtime feedback notifications can
2057
+ // overlap. Accept the first response that can populate the current item,
2058
+ // then prevent older snapshots from replacing a newer one. This preserves
2059
+ // useful data while a second post-subscription refresh is still in flight.
2060
+ if (requestedItemKey !== suggestedEditsItemKeyRef.current)
2061
+ return undefined;
2062
+ if (requestId < suggestedEditsAppliedRequestRef.current) {
2063
+ return suggestedEditsRef.current;
2064
+ }
2031
2065
  if (handleErrorResult(result, ui, state))
2032
- return;
2066
+ return undefined;
2067
+ suggestedEditsAppliedRequestRef.current = requestId;
2033
2068
  // A refetch can race a locally reverted suggestion's server delete; don't
2034
2069
  // resurrect suggestions the user already removed.
2035
2070
  const edits = (result.data || []).filter((edit) => !isSuggestedEditRemoved(edit.id));
2036
2071
  setSuggestedEdits(edits);
2072
+ return edits;
2037
2073
  }, [item, searchParams]);
2038
- useEffect(() => {
2039
- loadSuggestedEditsRef.current = loadSuggestedEdits;
2040
- }, [loadSuggestedEdits]);
2074
+ // URL-driven mode initialization runs in an earlier effect. Update the ref
2075
+ // during render so entering suggestions on the first committed frame cannot
2076
+ // observe the initial no-op loader.
2077
+ loadSuggestedEditsRef.current = loadSuggestedEdits;
2041
2078
  const loadFavorites = useCallback(async () => {
2042
2079
  try {
2043
2080
  const result = await getAllFavorites();
@@ -2551,15 +2588,22 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2551
2588
  return;
2552
2589
  // The previous item's comments don't speak for the new one.
2553
2590
  setCommentsLoaded(false);
2554
- // Loading feedback before client-info is acknowledged creates a gap: an
2555
- // update can arrive after this REST response but before the realtime page
2556
- // subscription exists. Once acknowledged, the snapshot and event stream
2557
- // form one continuous view of the server state.
2558
- if (!isClientInfoAcknowledged)
2559
- return;
2591
+ // Load an immediate snapshot so an existing comment or suggestion does not
2592
+ // depend on websocket registration latency. The acknowledgement dependency
2593
+ // deliberately runs this effect again after the page topic is subscribed;
2594
+ // that second snapshot closes the gap between the first response and the
2595
+ // realtime event stream.
2560
2596
  loadComments();
2561
2597
  loadSuggestedEdits();
2562
- }, [currentItemDescriptor, isClientInfoAcknowledged]);
2598
+ }, [
2599
+ currentItemDescriptor?.id,
2600
+ currentItemDescriptor?.language,
2601
+ currentItemDescriptor?.version,
2602
+ isClientInfoAcknowledged,
2603
+ item?.descriptor.id,
2604
+ item?.descriptor.language,
2605
+ item?.descriptor.version,
2606
+ ]);
2563
2607
  // Track the previous history mode to detect mode changes
2564
2608
  const prevHistoryModeRef = useRef(historyMode);
2565
2609
  const historyInitialLoadDoneRef = useRef(false);
@@ -3237,26 +3281,69 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3237
3281
  useEffect(() => {
3238
3282
  loadItemVersions();
3239
3283
  }, [currentItemDescriptor]);
3240
- const loadItemVersions = useCallback(async () => {
3241
- if (!currentItemDescriptorRef.current) {
3242
- setItemVersions([]);
3243
- setItemLanguages([]);
3284
+ const loadItemVersions = useCallback(async (options) => {
3285
+ const descriptor = options?.descriptor
3286
+ ? getItemDescriptor(options.descriptor)
3287
+ : currentItemDescriptorRef.current
3288
+ ? getItemDescriptor(currentItemDescriptorRef.current)
3289
+ : undefined;
3290
+ if (!descriptor) {
3291
+ if (options?.clearOnMissing !== false) {
3292
+ setItemVersions([]);
3293
+ setItemLanguages([]);
3294
+ }
3244
3295
  setIsLoadingVersions(false);
3245
3296
  return;
3246
3297
  }
3298
+ const descriptorKey = [
3299
+ descriptor.database || "master",
3300
+ descriptor.id,
3301
+ descriptor.language,
3302
+ descriptor.version,
3303
+ ]
3304
+ .join(":")
3305
+ .toLowerCase();
3306
+ const requestId = ++versionLoadRequestRef.current;
3307
+ visibleVersionLoadRef.current = requestId;
3247
3308
  setIsLoadingVersions(true);
3248
3309
  try {
3249
- const result = await getLanguagesAndVersions(currentItemDescriptorRef.current, {
3250
- includePublishingRestrictions: true,
3251
- includePublishingTargets: true,
3252
- });
3253
- if (!result?.data) {
3254
- setItemVersions([]);
3255
- setItemLanguages([]);
3256
- showErrorToast({
3257
- summary: "Error",
3258
- details: "Failed to load item versions",
3310
+ let request = versionLoadsInFlightRef.current.get(descriptorKey);
3311
+ if (!request) {
3312
+ request = getLanguagesAndVersions(descriptor, {
3313
+ includePublishingRestrictions: true,
3314
+ includePublishingTargets: true,
3259
3315
  });
3316
+ versionLoadsInFlightRef.current.set(descriptorKey, request);
3317
+ const releaseRequest = () => {
3318
+ if (versionLoadsInFlightRef.current.get(descriptorKey) === request) {
3319
+ versionLoadsInFlightRef.current.delete(descriptorKey);
3320
+ }
3321
+ };
3322
+ void request.then(releaseRequest, releaseRequest);
3323
+ }
3324
+ const result = await request;
3325
+ const currentDescriptor = currentItemDescriptorRef.current;
3326
+ const currentDescriptorKey = currentDescriptor
3327
+ ? [
3328
+ currentDescriptor.database || "master",
3329
+ currentDescriptor.id,
3330
+ currentDescriptor.language,
3331
+ currentDescriptor.version,
3332
+ ]
3333
+ .join(":")
3334
+ .toLowerCase()
3335
+ : undefined;
3336
+ if (currentDescriptorKey !== descriptorKey)
3337
+ return;
3338
+ if (!result?.data) {
3339
+ if (!options?.preserveOnError) {
3340
+ setItemVersions([]);
3341
+ setItemLanguages([]);
3342
+ showErrorToast({
3343
+ summary: "Error",
3344
+ details: "Failed to load item versions",
3345
+ });
3346
+ }
3260
3347
  return;
3261
3348
  }
3262
3349
  const v = [...result.data.versions].reverse() || [];
@@ -3264,9 +3351,14 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3264
3351
  setItemLanguages(result.data.languages);
3265
3352
  }
3266
3353
  finally {
3267
- setIsLoadingVersions(false);
3354
+ // A superseded request must not hide the spinner for the descriptor
3355
+ // that is currently loading. Duplicate calls for the same descriptor
3356
+ // share one network request and settle together.
3357
+ if (visibleVersionLoadRef.current === requestId) {
3358
+ setIsLoadingVersions(false);
3359
+ }
3268
3360
  }
3269
- }, [currentItemDescriptorRef.current, setItemVersions, setItemLanguages]);
3361
+ }, [setItemVersions, setItemLanguages]);
3270
3362
  const showErrorToast = useCallback((error) => {
3271
3363
  showExpandableErrorToast(error);
3272
3364
  }, []);
@@ -3912,6 +4004,23 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3912
4004
  // workspace defaults are applied by the openSidebars state initializer, while
3913
4005
  // explicit sidebar URL state such as sidebar=none is still respected.
3914
4006
  const prevWorkspaceIdForDefaultsRef = useRef(null);
4007
+ // Next can retain this shell while hydrating or navigating within the same
4008
+ // route. Keep explicit sidebar URL state authoritative after the initializer
4009
+ // has run; the availability effect below still removes inaccessible panels.
4010
+ const sidebarParam = searchParams.get("sidebar");
4011
+ useEffect(() => {
4012
+ const requested = parseSidebarUrlValue(sidebarParam);
4013
+ if (requested === undefined)
4014
+ return;
4015
+ const current = openSidebarsRef.current;
4016
+ const unchanged = requested.length === current.length &&
4017
+ requested.every((id, index) => id === current[index]);
4018
+ if (unchanged)
4019
+ return;
4020
+ openSidebarsRef.current = requested;
4021
+ setOpenSidebars(requested);
4022
+ setSidebarStacks((prev) => normalizeSidebarStacks(requested, prev));
4023
+ }, [normalizeSidebarStacks, sidebarParam]);
3915
4024
  useEffect(() => {
3916
4025
  if (!currentWorkspace.supportsSidebars) {
3917
4026
  return;
@@ -3942,6 +4051,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3942
4051
  currentWorkspace,
3943
4052
  getSidebarsForWorkspace,
3944
4053
  normalizeSidebarStacks,
4054
+ sidebarParam,
3945
4055
  updateUrl,
3946
4056
  workspaceId,
3947
4057
  ]);
@@ -4794,21 +4904,24 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4794
4904
  getComponentCommands: async (components, providerContext) => {
4795
4905
  return await getComponentCommands(components, editContext, providerContext);
4796
4906
  },
4797
- dragStart: (dragObject) => {
4907
+ dragStart: (nextDragObject) => {
4798
4908
  // A drag supersedes any unresolved scroll request (e.g. a comment
4799
4909
  // target still waiting for geometry). Left pending, it would replay
4800
4910
  // against the post-drop refresh and yank the canvas to a stale spot.
4801
4911
  setScrollIntoView(undefined);
4802
- setDragObject(dragObject);
4912
+ dragObjectRef.current = nextDragObject;
4913
+ setDragObject(nextDragObject);
4803
4914
  },
4804
4915
  dragEnd: () => {
4916
+ dragObjectRef.current = undefined;
4805
4917
  setDragObject(undefined);
4806
4918
  },
4807
4919
  droppedInPlaceholder: async (placeholderKey, index, spotPositionElement, spotPositionAnchor, insertOption, spotPosition, color) => {
4808
- const droppedDragObject = dragObject;
4920
+ const droppedDragObject = dragObjectRef.current;
4809
4921
  if ((!droppedDragObject && !insertOption) || !page) {
4810
4922
  return { committed: false };
4811
4923
  }
4924
+ dragObjectRef.current = undefined;
4812
4925
  setDragObject(undefined);
4813
4926
  const placeholderKeyComponents = placeholderKey.split("_");
4814
4927
  const parentId = placeholderKeyComponents.length === 1
@@ -4819,8 +4932,11 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4819
4932
  // the drop target's parent here made the single-selection frame
4820
4933
  // FLIP-animate component -> parent -> component around every drop.
4821
4934
  let op;
4822
- if (!currentItemDescriptorRef.current)
4823
- return { committed: false };
4935
+ // A placeholder is rendered from this page model, so its insertion
4936
+ // must target the same item. The shell-level descriptor can briefly
4937
+ // lag while slots or a newly created page settle; using it here could
4938
+ // either discard a valid click or write the component to another page.
4939
+ const dropTargetDescriptor = page.item.descriptor;
4824
4940
  let insertionSequence;
4825
4941
  if ((spotPosition || spotPositionElement) && spotPositionAnchor) {
4826
4942
  insertionSequence = ++insertingSequenceRef.current;
@@ -4838,10 +4954,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4838
4954
  // can exit cleanly and the editor header updates from "Add Component"
4839
4955
  // to the actual component name after the operation completes.
4840
4956
  setSelectedForInsertion("");
4841
- operationPromise = operations.addComponent(insertOption.typeId, placeholderKey, index, currentItemDescriptorRef.current, { showIndicator: false });
4957
+ operationPromise = operations.addComponent(insertOption.typeId, placeholderKey, index, dropTargetDescriptor, { showIndicator: false });
4842
4958
  }
4843
4959
  else if (droppedDragObject?.type == "template") {
4844
- operationPromise = operations.addComponent(droppedDragObject.typeId, placeholderKey, index, currentItemDescriptorRef.current, { showIndicator: false });
4960
+ operationPromise = operations.addComponent(droppedDragObject.typeId, placeholderKey, index, dropTargetDescriptor, { showIndicator: false });
4845
4961
  }
4846
4962
  else if (droppedDragObject?.type == "component" ||
4847
4963
  (droppedDragObject?.type == "items" && droppedDragObject.items)) {