@parhelia/core 0.4.12800 → 0.4.12825

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 (620) hide show
  1. package/dist/agents-view/AgentsWorkspaceView.d.ts +2 -0
  2. package/dist/agents-view/AgentsWorkspaceView.js +12 -3
  3. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  4. package/dist/components/WorkspaceHomeView.d.ts +14 -3
  5. package/dist/components/WorkspaceHomeView.js +7 -4
  6. package/dist/components/WorkspaceHomeView.js.map +1 -1
  7. package/dist/components/ui/dialog.d.ts +7 -1
  8. package/dist/components/ui/dialog.js +6 -3
  9. package/dist/components/ui/dialog.js.map +1 -1
  10. package/dist/components/ui/popover.d.ts +8 -0
  11. package/dist/components/ui/popover.js +40 -6
  12. package/dist/components/ui/popover.js.map +1 -1
  13. package/dist/components/ui/tooltip.d.ts +2 -2
  14. package/dist/components/ui/tooltip.js +9 -4
  15. package/dist/components/ui/tooltip.js.map +1 -1
  16. package/dist/config/config.js +5 -2
  17. package/dist/config/config.js.map +1 -1
  18. package/dist/editor/ConfirmationDialog.d.ts +1 -0
  19. package/dist/editor/ConfirmationDialog.js +9 -2
  20. package/dist/editor/ConfirmationDialog.js.map +1 -1
  21. package/dist/editor/ContentTree.d.ts +9 -1
  22. package/dist/editor/ContentTree.js +50 -23
  23. package/dist/editor/ContentTree.js.map +1 -1
  24. package/dist/editor/FieldList.js +41 -4
  25. package/dist/editor/FieldList.js.map +1 -1
  26. package/dist/editor/FieldListField.js +156 -123
  27. package/dist/editor/FieldListField.js.map +1 -1
  28. package/dist/editor/LinkEditorDialog.d.ts +3 -0
  29. package/dist/editor/LinkEditorDialog.js +9 -4
  30. package/dist/editor/LinkEditorDialog.js.map +1 -1
  31. package/dist/editor/MainLayout.js +9 -2
  32. package/dist/editor/MainLayout.js.map +1 -1
  33. package/dist/editor/SetupWizard.js +1 -1
  34. package/dist/editor/SetupWizard.js.map +1 -1
  35. package/dist/editor/UsedBy.d.ts +2 -0
  36. package/dist/editor/UsedBy.js +50 -10
  37. package/dist/editor/UsedBy.js.map +1 -1
  38. package/dist/editor/agent-changes/agentChangeTargets.d.ts +58 -0
  39. package/dist/editor/agent-changes/agentChangeTargets.js +174 -0
  40. package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -0
  41. package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +57 -0
  42. package/dist/editor/agent-changes/agentChangeTextHighlight.js +109 -0
  43. package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -0
  44. package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
  45. package/dist/editor/ai/AgentImagePreview.js +41 -0
  46. package/dist/editor/ai/AgentImagePreview.js.map +1 -0
  47. package/dist/editor/ai/AgentStatusBadge.js +11 -9
  48. package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
  49. package/dist/editor/ai/Agents.js +2 -2
  50. package/dist/editor/ai/Agents.js.map +1 -1
  51. package/dist/editor/ai/ContentInspectorPopover.d.ts +2 -1
  52. package/dist/editor/ai/ContentInspectorPopover.js +3 -3
  53. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
  54. package/dist/editor/ai/MediaImage.js +2 -1
  55. package/dist/editor/ai/MediaImage.js.map +1 -1
  56. package/dist/editor/ai/activityRowNavigation.d.ts +28 -0
  57. package/dist/editor/ai/activityRowNavigation.js +53 -0
  58. package/dist/editor/ai/activityRowNavigation.js.map +1 -0
  59. package/dist/editor/ai/agentDiagnostics.d.ts +1 -1
  60. package/dist/editor/ai/agentDiagnostics.js +8 -0
  61. package/dist/editor/ai/agentDiagnostics.js.map +1 -1
  62. package/dist/editor/ai/agentMessageGrouping.d.ts +1 -1
  63. package/dist/editor/ai/agentMessageGrouping.js +2 -13
  64. package/dist/editor/ai/agentMessageGrouping.js.map +1 -1
  65. package/dist/editor/ai/agentMessageHelpers.js +21 -1
  66. package/dist/editor/ai/agentMessageHelpers.js.map +1 -1
  67. package/dist/editor/ai/terminal/agentSessionSelectors.js +0 -4
  68. package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
  69. package/dist/editor/ai/terminal/agentSessionSnapshot.d.ts +15 -0
  70. package/dist/editor/ai/terminal/agentSessionSnapshot.js +103 -3
  71. package/dist/editor/ai/terminal/agentSessionSnapshot.js.map +1 -1
  72. package/dist/editor/ai/terminal/agentSessionState.d.ts +0 -2
  73. package/dist/editor/ai/terminal/agentSessionState.js +13 -13
  74. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  75. package/dist/editor/ai/terminal/agentTurnTiming.d.ts +2 -0
  76. package/dist/editor/ai/terminal/agentTurnTiming.js +26 -1
  77. package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -1
  78. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.d.ts +3 -1
  79. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +53 -11
  80. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  81. package/dist/editor/ai/terminal/components/AgentBanners.d.ts +2 -1
  82. package/dist/editor/ai/terminal/components/AgentBanners.js +3 -2
  83. package/dist/editor/ai/terminal/components/AgentBanners.js.map +1 -1
  84. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +6 -5
  85. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  86. package/dist/editor/ai/terminal/components/AgentDocumentList.js +20 -10
  87. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  88. package/dist/editor/ai/terminal/components/AgentGreeting.js +1 -1
  89. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  90. package/dist/editor/ai/terminal/components/AgentMemoryPanel.d.ts +2 -1
  91. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +12 -9
  92. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  93. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.d.ts +9 -0
  94. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js +75 -0
  95. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js.map +1 -0
  96. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +1 -1
  97. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +4 -72
  98. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  99. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.d.ts +2 -1
  100. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js +2 -2
  101. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js.map +1 -1
  102. package/dist/editor/ai/terminal/components/AgentSettingsContent.js +2 -1
  103. package/dist/editor/ai/terminal/components/AgentSettingsContent.js.map +1 -1
  104. package/dist/editor/ai/terminal/components/AgentSettingsSections.d.ts +1 -0
  105. package/dist/editor/ai/terminal/components/AgentSettingsSections.js +1 -1
  106. package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
  107. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
  108. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
  109. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +2 -1
  110. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js +2 -2
  111. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
  112. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +2 -1
  113. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +9 -3
  114. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  115. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.d.ts +2 -1
  116. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -6
  117. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -1
  119. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +8 -2
  120. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  121. package/dist/editor/ai/terminal/components/AgentTerminalView.js +1 -1
  122. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  123. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.d.ts +6 -1
  124. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js +5 -3
  125. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js.map +1 -1
  126. package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +2 -1
  127. package/dist/editor/ai/terminal/components/AiResponseMessage.js +20 -16
  128. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  129. package/dist/editor/ai/terminal/components/ContextInfoBar.js +2 -2
  130. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  131. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.d.ts +3 -0
  132. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +47 -0
  133. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -0
  134. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +15 -4
  135. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
  136. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +2 -1
  137. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +22 -54
  138. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  139. package/dist/editor/ai/terminal/components/UserMessage.d.ts +6 -0
  140. package/dist/editor/ai/terminal/components/UserMessage.js +17 -4
  141. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  142. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +5 -0
  143. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +5 -0
  144. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -1
  145. package/dist/editor/ai/terminal/components/toolCallContentRenderers.d.ts +2 -0
  146. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +6 -0
  147. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -1
  148. package/dist/editor/ai/terminal/components/toolCallResultJson.d.ts +1 -0
  149. package/dist/editor/ai/terminal/components/toolCallResultJson.js +46 -0
  150. package/dist/editor/ai/terminal/components/toolCallResultJson.js.map +1 -0
  151. package/dist/editor/ai/terminal/types.d.ts +2 -0
  152. package/dist/editor/ai/terminal/useAgentDraftInitializer.d.ts +2 -0
  153. package/dist/editor/ai/terminal/useAgentDraftInitializer.js +51 -14
  154. package/dist/editor/ai/terminal/useAgentDraftInitializer.js.map +1 -1
  155. package/dist/editor/ai/terminal/useAgentEditorContext.js +13 -3
  156. package/dist/editor/ai/terminal/useAgentEditorContext.js.map +1 -1
  157. package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +2 -0
  158. package/dist/editor/ai/terminal/useAgentLoadPipeline.js +3 -1
  159. package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
  160. package/dist/editor/ai/terminal/useAgentOperationHistoryLoader.js +5 -1
  161. package/dist/editor/ai/terminal/useAgentOperationHistoryLoader.js.map +1 -1
  162. package/dist/editor/ai/terminal/useAgentOperationSocketHandler.js +33 -1
  163. package/dist/editor/ai/terminal/useAgentOperationSocketHandler.js.map +1 -1
  164. package/dist/editor/ai/terminal/useAgentProviderWait.d.ts +18 -0
  165. package/dist/editor/ai/terminal/useAgentProviderWait.js +23 -0
  166. package/dist/editor/ai/terminal/useAgentProviderWait.js.map +1 -0
  167. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.d.ts +1 -1
  168. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.js +3 -3
  169. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.js.map +1 -1
  170. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.d.ts +2 -2
  171. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.js +5 -5
  172. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.js.map +1 -1
  173. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js +14 -10
  174. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js.map +1 -1
  175. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.d.ts +6 -7
  176. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.js +5 -5
  177. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.js.map +1 -1
  178. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.d.ts +1 -1
  179. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +23 -16
  180. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  181. package/dist/editor/ai/terminal/useAgentServerReconciler.js +11 -0
  182. package/dist/editor/ai/terminal/useAgentServerReconciler.js.map +1 -1
  183. package/dist/editor/ai/terminal/useAgentSession.d.ts +0 -2
  184. package/dist/editor/ai/terminal/useAgentSession.js +8 -15
  185. package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
  186. package/dist/editor/ai/terminal/useAgentSessionFacade.d.ts +1 -0
  187. package/dist/editor/ai/terminal/useAgentSessionFacade.js +2 -0
  188. package/dist/editor/ai/terminal/useAgentSessionFacade.js.map +1 -1
  189. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.d.ts +1 -1
  190. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js +3 -3
  191. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js.map +1 -1
  192. package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +2 -2
  193. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +5 -5
  194. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  195. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.d.ts +0 -1
  196. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js +3 -12
  197. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js.map +1 -1
  198. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
  199. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +24 -7
  200. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  201. package/dist/editor/ai/terminal/useAgentSubmitResponseHandler.js +6 -1
  202. package/dist/editor/ai/terminal/useAgentSubmitResponseHandler.js.map +1 -1
  203. package/dist/editor/ai/terminal/useAgentTerminalController.js +13 -10
  204. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  205. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -1
  206. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  207. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +1 -1
  208. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  209. package/dist/editor/bridge/bridgeKeys.d.ts +5 -0
  210. package/dist/editor/bridge/bridgeKeys.js +8 -0
  211. package/dist/editor/bridge/bridgeKeys.js.map +1 -0
  212. package/dist/editor/bridge/linkDownload.d.ts +3 -0
  213. package/dist/editor/bridge/linkDownload.js +52 -0
  214. package/dist/editor/bridge/linkDownload.js.map +1 -0
  215. package/dist/editor/bridge/protocol.d.ts +39 -0
  216. package/dist/editor/bridge/protocol.js +3 -1
  217. package/dist/editor/bridge/protocol.js.map +1 -1
  218. package/dist/editor/client/EditorShell.js +34 -24
  219. package/dist/editor/client/EditorShell.js.map +1 -1
  220. package/dist/editor/client/OperationDialogContent.d.ts +10 -3
  221. package/dist/editor/client/OperationDialogContent.js +27 -4
  222. package/dist/editor/client/OperationDialogContent.js.map +1 -1
  223. package/dist/editor/client/agentLoadItemPolicy.d.ts +22 -0
  224. package/dist/editor/client/agentLoadItemPolicy.js +60 -0
  225. package/dist/editor/client/agentLoadItemPolicy.js.map +1 -0
  226. package/dist/editor/client/editContext.d.ts +16 -0
  227. package/dist/editor/client/editContext.js.map +1 -1
  228. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +5 -0
  229. package/dist/editor/client/hooks/useSocketMessageHandler.js +56 -14
  230. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  231. package/dist/editor/client/itemsRepository.js +26 -7
  232. package/dist/editor/client/itemsRepository.js.map +1 -1
  233. package/dist/editor/client/localUserEditActivity.d.ts +3 -0
  234. package/dist/editor/client/localUserEditActivity.js +12 -0
  235. package/dist/editor/client/localUserEditActivity.js.map +1 -0
  236. package/dist/editor/client/operations.js +60 -15
  237. package/dist/editor/client/operations.js.map +1 -1
  238. package/dist/editor/commands/commands.d.ts +6 -0
  239. package/dist/editor/commands/commands.js.map +1 -1
  240. package/dist/editor/commands/undo.js +8 -2
  241. package/dist/editor/commands/undo.js.map +1 -1
  242. package/dist/editor/componentVisualMode.d.ts +14 -0
  243. package/dist/editor/componentVisualMode.js +43 -0
  244. package/dist/editor/componentVisualMode.js.map +1 -0
  245. package/dist/editor/field-types/ImageFieldEditor.js +1 -1
  246. package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
  247. package/dist/editor/field-types/MultiLineText.js +29 -46
  248. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  249. package/dist/editor/field-types/PictureFieldEditor.js +1 -1
  250. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  251. package/dist/editor/field-types/RichTextEditorComponent.js +19 -3
  252. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  253. package/dist/editor/field-types/SingleLineText.js +28 -79
  254. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  255. package/dist/editor/field-types/richtext/components/ReactSlate.js +67 -10
  256. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  257. package/dist/editor/field-types/richtext/components/SimpleToolbarButton.js +4 -1
  258. package/dist/editor/field-types/richtext/components/SimpleToolbarButton.js.map +1 -1
  259. package/dist/editor/field-types/richtext/components/ToolbarButton.js +4 -1
  260. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
  261. package/dist/editor/field-types/richtext/types.d.ts +7 -0
  262. package/dist/editor/field-types/richtext/types.js.map +1 -1
  263. package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +18 -0
  264. package/dist/editor/field-types/richtext/utils/changeHighlight.js +57 -0
  265. package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -0
  266. package/dist/editor/field-types/useFormFieldCaretPresence.d.ts +11 -0
  267. package/dist/editor/field-types/useFormFieldCaretPresence.js +33 -16
  268. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
  269. package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +36 -0
  270. package/dist/editor/field-types/useFormFieldSelectionRange.js +123 -0
  271. package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
  272. package/dist/editor/field-types/useTextCompletion.js +13 -3
  273. package/dist/editor/field-types/useTextCompletion.js.map +1 -1
  274. package/dist/editor/find-replace/FindReplacePanel.d.ts +11 -0
  275. package/dist/editor/find-replace/FindReplacePanel.js +311 -0
  276. package/dist/editor/find-replace/FindReplacePanel.js.map +1 -0
  277. package/dist/editor/find-replace/findReplaceCommand.d.ts +8 -0
  278. package/dist/editor/find-replace/findReplaceCommand.js +25 -0
  279. package/dist/editor/find-replace/findReplaceCommand.js.map +1 -0
  280. package/dist/editor/find-replace/findReplaceMatches.d.ts +42 -0
  281. package/dist/editor/find-replace/findReplaceMatches.js +66 -0
  282. package/dist/editor/find-replace/findReplaceMatches.js.map +1 -0
  283. package/dist/editor/find-replace/findReplaceStore.d.ts +30 -0
  284. package/dist/editor/find-replace/findReplaceStore.js +61 -0
  285. package/dist/editor/find-replace/findReplaceStore.js.map +1 -0
  286. package/dist/editor/find-replace/findReplaceTargets.d.ts +49 -0
  287. package/dist/editor/find-replace/findReplaceTargets.js +110 -0
  288. package/dist/editor/find-replace/findReplaceTargets.js.map +1 -0
  289. package/dist/editor/find-replace/findReplaceText.d.ts +50 -0
  290. package/dist/editor/find-replace/findReplaceText.js +189 -0
  291. package/dist/editor/find-replace/findReplaceText.js.map +1 -0
  292. package/dist/editor/media-selector/AiImageSearchPrompt.d.ts +2 -1
  293. package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -2
  294. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  295. package/dist/editor/media-selector/Thumbnails.d.ts +2 -1
  296. package/dist/editor/media-selector/Thumbnails.js +2 -2
  297. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  298. package/dist/editor/media-selector/TreeSelector.js +142 -42
  299. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  300. package/dist/editor/media-selector/UploadZone.d.ts +6 -1
  301. package/dist/editor/media-selector/UploadZone.js +10 -7
  302. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  303. package/dist/editor/media-selector/mediaFileType.d.ts +2 -0
  304. package/dist/editor/media-selector/mediaFileType.js +37 -0
  305. package/dist/editor/media-selector/mediaFileType.js.map +1 -1
  306. package/dist/editor/menubar/ActiveUsers.js +1 -1
  307. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  308. package/dist/editor/menubar/GenericToolbar.d.ts +2 -1
  309. package/dist/editor/menubar/GenericToolbar.js +2 -2
  310. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  311. package/dist/editor/menubar/ToolbarFactory.js +10 -2
  312. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  313. package/dist/editor/menubar/VersionSelector.js +2 -2
  314. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  315. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +10 -3
  316. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
  317. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.d.ts +6 -0
  318. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js +31 -0
  319. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js.map +1 -0
  320. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +6 -1
  321. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  322. package/dist/editor/menubar/toolbar-sections/index.d.ts +1 -0
  323. package/dist/editor/menubar/toolbar-sections/index.js +1 -0
  324. package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
  325. package/dist/editor/notifications/WatchButton.js +11 -4
  326. package/dist/editor/notifications/WatchButton.js.map +1 -1
  327. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +20 -0
  328. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +31 -0
  329. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -0
  330. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
  331. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  332. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +33 -0
  333. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +290 -0
  334. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -0
  335. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +8 -4
  336. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  337. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +11 -0
  338. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +117 -0
  339. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -0
  340. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +27 -10
  341. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -1
  342. package/dist/editor/page-editor-chrome/InsertComponentMenu.d.ts +6 -1
  343. package/dist/editor/page-editor-chrome/InsertComponentMenu.js +53 -6
  344. package/dist/editor/page-editor-chrome/InsertComponentMenu.js.map +1 -1
  345. package/dist/editor/page-editor-chrome/PageEditorChrome.js +3 -1
  346. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  347. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +14 -2
  348. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  349. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +67 -14
  350. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  351. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +1 -1
  352. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +6 -271
  353. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  354. package/dist/editor/page-editor-chrome/diffRulerSegments.d.ts +18 -0
  355. package/dist/editor/page-editor-chrome/diffRulerSegments.js +37 -0
  356. package/dist/editor/page-editor-chrome/diffRulerSegments.js.map +1 -0
  357. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +15 -2
  358. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  359. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +2 -0
  360. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +58 -5
  361. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  362. package/dist/editor/page-viewer/DeviceToolbar.js +53 -10
  363. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  364. package/dist/editor/page-viewer/MiniMap.d.ts +6 -2
  365. package/dist/editor/page-viewer/MiniMap.js +152 -36
  366. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  367. package/dist/editor/page-viewer/PageViewerFrame.js +225 -32
  368. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  369. package/dist/editor/page-viewer/bridgeFieldPatch.js +1 -0
  370. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  371. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +6 -0
  372. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +19 -1
  373. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -1
  374. package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
  375. package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
  376. package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
  377. package/dist/editor/page-viewer/minimapViewport.d.ts +2 -0
  378. package/dist/editor/page-viewer/minimapViewport.js +31 -0
  379. package/dist/editor/page-viewer/minimapViewport.js.map +1 -0
  380. package/dist/editor/page-viewer/pageViewContext.d.ts +2 -1
  381. package/dist/editor/page-viewer/pageViewContext.js +10 -4
  382. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  383. package/dist/editor/pageModel.d.ts +2 -0
  384. package/dist/editor/reviews/Comment.js +13 -12
  385. package/dist/editor/reviews/Comment.js.map +1 -1
  386. package/dist/editor/reviews/CommentDisplayPopover.js +25 -29
  387. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  388. package/dist/editor/reviews/CommentEditor.js +58 -19
  389. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  390. package/dist/editor/reviews/CommentImageAttachments.d.ts +12 -0
  391. package/dist/editor/reviews/CommentImageAttachments.js +19 -0
  392. package/dist/editor/reviews/CommentImageAttachments.js.map +1 -0
  393. package/dist/editor/reviews/CommentQuote.d.ts +4 -0
  394. package/dist/editor/reviews/CommentQuote.js +30 -0
  395. package/dist/editor/reviews/CommentQuote.js.map +1 -0
  396. package/dist/editor/reviews/CommentThreadAgentLink.d.ts +23 -0
  397. package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
  398. package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
  399. package/dist/editor/reviews/CommentView.d.ts +2 -3
  400. package/dist/editor/reviews/CommentView.js +17 -14
  401. package/dist/editor/reviews/CommentView.js.map +1 -1
  402. package/dist/editor/reviews/Comments.js +14 -5
  403. package/dist/editor/reviews/Comments.js.map +1 -1
  404. package/dist/editor/reviews/MentionText.d.ts +5 -1
  405. package/dist/editor/reviews/MentionText.js +23 -0
  406. package/dist/editor/reviews/MentionText.js.map +1 -1
  407. package/dist/editor/reviews/ReviewCard.js +14 -8
  408. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  409. package/dist/editor/reviews/ReviewersPanel.js +7 -2
  410. package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
  411. package/dist/editor/reviews/SuggestedEdit.js +75 -15
  412. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  413. package/dist/editor/reviews/SuggestionCommentThread.js +5 -4
  414. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  415. package/dist/editor/reviews/SuggestionDisplayPopover.d.ts +3 -1
  416. package/dist/editor/reviews/SuggestionDisplayPopover.js +7 -2
  417. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  418. package/dist/editor/reviews/commentAgentAttachments.d.ts +5 -0
  419. package/dist/editor/reviews/commentAgentAttachments.js +51 -0
  420. package/dist/editor/reviews/commentAgentAttachments.js.map +1 -0
  421. package/dist/editor/reviews/commentAi.d.ts +29 -3
  422. package/dist/editor/reviews/commentAi.js +122 -34
  423. package/dist/editor/reviews/commentAi.js.map +1 -1
  424. package/dist/editor/reviews/commentImages.d.ts +49 -0
  425. package/dist/editor/reviews/commentImages.js +164 -0
  426. package/dist/editor/reviews/commentImages.js.map +1 -0
  427. package/dist/editor/reviews/feedbackAvatar.js +11 -5
  428. package/dist/editor/reviews/feedbackAvatar.js.map +1 -1
  429. package/dist/editor/reviews/feedbackCommentRules.d.ts +1 -1
  430. package/dist/editor/reviews/feedbackCommentRules.js +3 -9
  431. package/dist/editor/reviews/feedbackCommentRules.js.map +1 -1
  432. package/dist/editor/reviews/feedbackSelection.d.ts +13 -0
  433. package/dist/editor/reviews/feedbackSelection.js +37 -0
  434. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  435. package/dist/editor/reviews/suggestionDisplayValue.d.ts +24 -2
  436. package/dist/editor/reviews/suggestionDisplayValue.js +28 -4
  437. package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -1
  438. package/dist/editor/reviews/useCommentImagePaste.d.ts +72 -0
  439. package/dist/editor/reviews/useCommentImagePaste.js +188 -0
  440. package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
  441. package/dist/editor/services/agentErrorMessage.js +5 -1
  442. package/dist/editor/services/agentErrorMessage.js.map +1 -1
  443. package/dist/editor/services/agentService.d.ts +12 -0
  444. package/dist/editor/services/agentService.js.map +1 -1
  445. package/dist/editor/services/agentStatus.d.ts +1 -0
  446. package/dist/editor/services/agentStatus.js +14 -0
  447. package/dist/editor/services/agentStatus.js.map +1 -1
  448. package/dist/editor/services/contentService.d.ts +2 -0
  449. package/dist/editor/services/contentService.js.map +1 -1
  450. package/dist/editor/services/editService.d.ts +17 -2
  451. package/dist/editor/services/editService.js +7 -2
  452. package/dist/editor/services/editService.js.map +1 -1
  453. package/dist/editor/services/searchService.d.ts +2 -1
  454. package/dist/editor/services/searchService.js +2 -1
  455. package/dist/editor/services/searchService.js.map +1 -1
  456. package/dist/editor/services/userResolution.js +6 -5
  457. package/dist/editor/services/userResolution.js.map +1 -1
  458. package/dist/editor/settings/index/RecentBatchesList.js +2 -1
  459. package/dist/editor/settings/index/RecentBatchesList.js.map +1 -1
  460. package/dist/editor/sidebar/ComponentPalette.js +12 -4
  461. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  462. package/dist/editor/sidebar/ComponentTree.js +41 -22
  463. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  464. package/dist/editor/sidebar/EditHistory.js +2 -2
  465. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  466. package/dist/editor/sidebar/MainContentTree.js +1 -1
  467. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  468. package/dist/editor/sidebar/MorePanelsButton.js +2 -2
  469. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  470. package/dist/editor/sidebar/NavigationPanelMenuItem.js +2 -2
  471. package/dist/editor/sidebar/NavigationPanelMenuItem.js.map +1 -1
  472. package/dist/editor/sidebar/OperationItem.js +2 -1
  473. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  474. package/dist/editor/sidebar/Validation.js +38 -44
  475. package/dist/editor/sidebar/Validation.js.map +1 -1
  476. package/dist/editor/sidebar/liveComponentThumbnails.d.ts +66 -0
  477. package/dist/editor/sidebar/liveComponentThumbnails.js +220 -0
  478. package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -0
  479. package/dist/editor/ui/ItemCollectionEditor.d.ts +17 -1
  480. package/dist/editor/ui/ItemCollectionEditor.js +17 -5
  481. package/dist/editor/ui/ItemCollectionEditor.js.map +1 -1
  482. package/dist/editor/ui/ItemList.d.ts +5 -0
  483. package/dist/editor/ui/ItemList.js +10 -2
  484. package/dist/editor/ui/ItemList.js.map +1 -1
  485. package/dist/editor/ui/ItemSearch.d.ts +7 -0
  486. package/dist/editor/ui/ItemSearch.js +14 -6
  487. package/dist/editor/ui/ItemSearch.js.map +1 -1
  488. package/dist/editor/ui/ParheliaMark.d.ts +15 -0
  489. package/dist/editor/ui/ParheliaMark.js +12 -0
  490. package/dist/editor/ui/ParheliaMark.js.map +1 -0
  491. package/dist/editor/ui/PublishDialog.js +3 -2
  492. package/dist/editor/ui/PublishDialog.js.map +1 -1
  493. package/dist/editor/ui/SimpleTabs.js +58 -3
  494. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  495. package/dist/editor/ui/Splitter.d.ts +15 -0
  496. package/dist/editor/ui/Splitter.js +77 -100
  497. package/dist/editor/ui/Splitter.js.map +1 -1
  498. package/dist/editor/ui/TreeListSelector.d.ts +15 -1
  499. package/dist/editor/ui/TreeListSelector.js +2 -2
  500. package/dist/editor/ui/TreeListSelector.js.map +1 -1
  501. package/dist/editor/ui/WorkboxItemsTable.d.ts +6 -1
  502. package/dist/editor/ui/WorkboxItemsTable.js +44 -48
  503. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  504. package/dist/editor/ui/publishReadiness.d.ts +13 -0
  505. package/dist/editor/ui/publishReadiness.js +56 -0
  506. package/dist/editor/ui/publishReadiness.js.map +1 -1
  507. package/dist/editor/undoEligibility.d.ts +2 -0
  508. package/dist/editor/undoEligibility.js +8 -0
  509. package/dist/editor/undoEligibility.js.map +1 -0
  510. package/dist/editor/utils/keyboardNavigation.js +16 -0
  511. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  512. package/dist/editor/validation/ValidationIssuesPopover.d.ts +39 -0
  513. package/dist/editor/validation/ValidationIssuesPopover.js +51 -0
  514. package/dist/editor/validation/ValidationIssuesPopover.js.map +1 -0
  515. package/dist/editor/validation/navigateToValidationIssue.d.ts +13 -0
  516. package/dist/editor/validation/navigateToValidationIssue.js +43 -0
  517. package/dist/editor/validation/navigateToValidationIssue.js.map +1 -0
  518. package/dist/editor/validation/validationFixAgent.d.ts +26 -0
  519. package/dist/editor/validation/validationFixAgent.js +124 -0
  520. package/dist/editor/validation/validationFixAgent.js.map +1 -0
  521. package/dist/editor/validation/validationSeverity.d.ts +15 -0
  522. package/dist/editor/validation/validationSeverity.js +47 -0
  523. package/dist/editor/validation/validationSeverity.js.map +1 -0
  524. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -4
  525. package/dist/editor/version-diff/versionDiffGeometryKeys.js +21 -7
  526. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -1
  527. package/dist/editor/version-diff/versionDiffTargets.d.ts +6 -1
  528. package/dist/editor/version-diff/versionDiffTargets.js +5 -5
  529. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  530. package/dist/editor/views/editorSlotContext.d.ts +4 -0
  531. package/dist/editor/views/editorSlotContext.js +37 -1
  532. package/dist/editor/views/editorSlotContext.js.map +1 -1
  533. package/dist/index.d.ts +1 -0
  534. package/dist/index.js +1 -0
  535. package/dist/index.js.map +1 -1
  536. package/dist/lib/utils.d.ts +5 -0
  537. package/dist/lib/utils.js +7 -0
  538. package/dist/lib/utils.js.map +1 -1
  539. package/dist/revision.d.ts +2 -2
  540. package/dist/revision.js +2 -2
  541. package/dist/splash-screen/ModernSplashScreen.js +10 -8
  542. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  543. package/dist/splash-screen/RecentPages.js +35 -20
  544. package/dist/splash-screen/RecentPages.js.map +1 -1
  545. package/dist/task-board/TaskBoardWorkspace.js +243 -81
  546. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  547. package/dist/task-board/components/AttentionPromptDialog.d.ts +13 -0
  548. package/dist/task-board/components/AttentionPromptDialog.js +45 -0
  549. package/dist/task-board/components/AttentionPromptDialog.js.map +1 -0
  550. package/dist/task-board/components/CommentsList.js +11 -11
  551. package/dist/task-board/components/CommentsList.js.map +1 -1
  552. package/dist/task-board/components/GoalDataView.d.ts +53 -1
  553. package/dist/task-board/components/GoalDataView.js +164 -55
  554. package/dist/task-board/components/GoalDataView.js.map +1 -1
  555. package/dist/task-board/components/GoalFindingsTable.d.ts +43 -0
  556. package/dist/task-board/components/GoalFindingsTable.js +160 -0
  557. package/dist/task-board/components/GoalFindingsTable.js.map +1 -0
  558. package/dist/task-board/components/GoalsMatrix.js +33 -6
  559. package/dist/task-board/components/GoalsMatrix.js.map +1 -1
  560. package/dist/task-board/components/IssuePanel.d.ts +31 -0
  561. package/dist/task-board/components/IssuePanel.js +268 -0
  562. package/dist/task-board/components/IssuePanel.js.map +1 -0
  563. package/dist/task-board/components/ProjectDashboard.d.ts +2 -18
  564. package/dist/task-board/components/ProjectDashboard.js +2 -206
  565. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  566. package/dist/task-board/components/ProjectGoalsPanel.js +173 -15
  567. package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
  568. package/dist/task-board/components/ProjectProgressIndicator.d.ts +8 -0
  569. package/dist/task-board/components/ProjectProgressIndicator.js +17 -0
  570. package/dist/task-board/components/ProjectProgressIndicator.js.map +1 -0
  571. package/dist/task-board/components/SubgoalFindings.d.ts +40 -0
  572. package/dist/task-board/components/SubgoalFindings.js +88 -0
  573. package/dist/task-board/components/SubgoalFindings.js.map +1 -0
  574. package/dist/task-board/components/TaskAgentPanel.d.ts +2 -0
  575. package/dist/task-board/components/TaskAgentPanel.js +5 -4
  576. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  577. package/dist/task-board/components/TaskBoardHomeView.d.ts +11 -0
  578. package/dist/task-board/components/TaskBoardHomeView.js +40 -2
  579. package/dist/task-board/components/TaskBoardHomeView.js.map +1 -1
  580. package/dist/task-board/components/TaskBoardProjectListSidebar.js +2 -11
  581. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  582. package/dist/task-board/components/TaskDetailPanel.js +58 -23
  583. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  584. package/dist/task-board/components/WizardCommunicationCenter.d.ts +2 -0
  585. package/dist/task-board/components/WizardCommunicationCenter.js +5 -3
  586. package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
  587. package/dist/task-board/components/WizardCommunicationShared.js +2 -1
  588. package/dist/task-board/components/WizardCommunicationShared.js.map +1 -1
  589. package/dist/task-board/components/WizardTask.d.ts +2 -0
  590. package/dist/task-board/components/WizardTask.js +2 -2
  591. package/dist/task-board/components/WizardTask.js.map +1 -1
  592. package/dist/task-board/components/WizardTaskDetailsPanel.d.ts +4 -0
  593. package/dist/task-board/components/WizardTaskDetailsPanel.js +16 -3
  594. package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
  595. package/dist/task-board/components/commentAuthor.d.ts +14 -0
  596. package/dist/task-board/components/commentAuthor.js +25 -0
  597. package/dist/task-board/components/commentAuthor.js.map +1 -0
  598. package/dist/task-board/services/issueService.d.ts +193 -0
  599. package/dist/task-board/services/issueService.js +97 -0
  600. package/dist/task-board/services/issueService.js.map +1 -0
  601. package/dist/task-board/taskBoardNavStore.d.ts +6 -0
  602. package/dist/task-board/taskBoardNavStore.js +36 -1
  603. package/dist/task-board/taskBoardNavStore.js.map +1 -1
  604. package/dist/task-board/types.d.ts +28 -0
  605. package/dist/task-board/utils/projectDashboardModel.d.ts +68 -0
  606. package/dist/task-board/utils/projectDashboardModel.js +363 -0
  607. package/dist/task-board/utils/projectDashboardModel.js.map +1 -0
  608. package/dist/task-board/views/DependencyGraphView.d.ts +7 -1
  609. package/dist/task-board/views/DependencyGraphView.js +58 -19
  610. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  611. package/dist/task-board/views/ProjectDashboardView.d.ts +28 -0
  612. package/dist/task-board/views/ProjectDashboardView.js +316 -0
  613. package/dist/task-board/views/ProjectDashboardView.js.map +1 -0
  614. package/dist/tour/Tour.js +21 -2
  615. package/dist/tour/Tour.js.map +1 -1
  616. package/dist/types.d.ts +11 -0
  617. package/images/Parhelia-Onboarding-Beach.jpg +0 -0
  618. package/package.json +1 -1
  619. package/styles.css +57 -3
  620. package/images/Parhelia-Onboarding-BG.jpg +0 -0
@@ -0,0 +1,88 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils";
3
+ import { SEVERITIES, asRecord, asSeverityCounts, readGoalChecks, severityStyles, } from "./GoalDataView";
4
+ const EMPTY_SUMMARY = {
5
+ total: 0,
6
+ open: 0,
7
+ awaitingConfirmation: 0,
8
+ resolved: 0,
9
+ dismissed: 0,
10
+ needsHumanReview: 0,
11
+ subjectsWithUnresolvedIssues: 0,
12
+ unresolvedBySeverity: {},
13
+ };
14
+ /**
15
+ * Condenses a subgoal's findings into what a list row needs: how many findings
16
+ * each severity has and how many checks failed.
17
+ *
18
+ * The data source is an explicit choice, not a guess from the numbers: when the
19
+ * goal has Issues enabled the typed summary is authoritative, a missing summary
20
+ * meaning zero unresolved issues. Otherwise the legacy report data is read and
21
+ * null is returned when it carries neither severity counts nor checks, so
22
+ * callers can leave the row blank instead of claiming "no findings". When
23
+ * `issuesEnabled` is not given, the presence of a summary decides.
24
+ */
25
+ export function readSubgoalFindings(data, summary, issuesEnabled) {
26
+ const useIssues = issuesEnabled ?? summary !== undefined;
27
+ if (useIssues) {
28
+ const s = summary ?? EMPTY_SUMMARY;
29
+ return {
30
+ counts: SEVERITIES.flatMap((severity) => s.unresolvedBySeverity[severity]
31
+ ? [{ severity, count: s.unresolvedBySeverity[severity] }]
32
+ : []),
33
+ total: s.open + s.awaitingConfirmation,
34
+ failedChecks: 0,
35
+ source: "issues",
36
+ };
37
+ }
38
+ const record = asRecord(data);
39
+ if (!record)
40
+ return null;
41
+ const severityCounts = asSeverityCounts(record.severityCounts);
42
+ const checks = readGoalChecks(data);
43
+ if (!severityCounts && !checks)
44
+ return null;
45
+ const counts = SEVERITIES.flatMap((severity) => {
46
+ const count = severityCounts?.[severity] ?? 0;
47
+ return count > 0 ? [{ severity, count }] : [];
48
+ });
49
+ return {
50
+ counts,
51
+ total: counts.reduce((sum, entry) => sum + entry.count, 0),
52
+ failedChecks: checks?.filter((check) => check.status === "fail").length ?? 0,
53
+ source: "legacy",
54
+ };
55
+ }
56
+ export function describeSubgoalFindings(findings) {
57
+ if (findings.counts.length > 0) {
58
+ return findings.counts
59
+ .map((entry) => `${entry.count} ${entry.severity}`)
60
+ .join(", ");
61
+ }
62
+ if (findings.failedChecks > 0) {
63
+ return `${findings.failedChecks} ${findings.failedChecks === 1 ? "check" : "checks"} failed`;
64
+ }
65
+ return findings.source === "issues" ? "No unresolved issues" : "No findings";
66
+ }
67
+ /** Inline severity chips for a subgoal row; "No findings" when the data is clean. */
68
+ export function SubgoalFindingsChips({ data, summary, issuesEnabled, }) {
69
+ const findings = readSubgoalFindings(data, summary, issuesEnabled);
70
+ if (!findings)
71
+ return null;
72
+ const clean = findings.counts.length === 0 && findings.failedChecks === 0;
73
+ return (_jsxs("span", { "data-testid": "taskboard-subgoal-findings", "data-total": findings.total, "data-failed-checks": findings.failedChecks, "data-source": findings.source, className: "flex shrink-0 flex-wrap items-center gap-1", title: describeSubgoalFindings(findings), children: [findings.counts.map((entry) => (_jsxs("span", { className: cn("rounded px-1.5 py-0.5 text-[10px] leading-none font-medium tabular-nums", severityStyles[entry.severity].chip), children: [entry.count, " ", entry.severity] }, entry.severity))), findings.counts.length === 0 && findings.failedChecks > 0 ? (_jsxs("span", { className: "bg-feedback-red-light text-feedback-red rounded px-1.5 py-0.5 text-[10px] leading-none font-medium tabular-nums", children: [findings.failedChecks, " failed"] })) : null, clean ? (_jsx("span", { className: "text-neutral-grey-50 text-[10px] leading-none", children: describeSubgoalFindings(findings) })) : null] }));
74
+ }
75
+ /** Compact count for a matrix cell, coloured by the worst severity present. */
76
+ export function SubgoalFindingsBadge({ data, summary, issuesEnabled, }) {
77
+ const findings = readSubgoalFindings(data, summary, issuesEnabled);
78
+ if (!findings)
79
+ return null;
80
+ const worst = findings.counts[0]?.severity;
81
+ const count = findings.total > 0 ? findings.total : findings.failedChecks;
82
+ if (count === 0)
83
+ return null;
84
+ return (_jsx("span", { "data-testid": "taskboard-subgoal-findings-badge", className: cn("rounded px-1 py-0.5 text-[10px] leading-none font-medium tabular-nums", worst
85
+ ? severityStyles[worst].chip
86
+ : "bg-feedback-red-light text-feedback-red"), title: describeSubgoalFindings(findings), children: count }));
87
+ }
88
+ //# sourceMappingURL=SubgoalFindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubgoalFindings.js","sourceRoot":"","sources":["../../../src/task-board/components/SubgoalFindings.tsx"],"names":[],"mappings":"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"}
@@ -20,4 +20,6 @@ export declare function TaskAgentPanel(props: {
20
20
  onStartPlanning?: () => void | Promise<void>;
21
21
  assignedAgentStatus?: AgentStatus;
22
22
  onReopenTask?: () => void;
23
+ /** Shows a close button that clears the selected task. */
24
+ onClose?: () => void;
23
25
  }): import("react").JSX.Element;
@@ -3,6 +3,7 @@ import { useEffect, useMemo, useState } from "react";
3
3
  import { CheckCircle2, ClipboardList, Play, UserPlus } from "lucide-react";
4
4
  import { ParheliaAgentIcon } from "../../editor/ui/Icons";
5
5
  import { Button } from "../../components/ui/button";
6
+ import { CloseButton } from "../../components/ui/close-button";
6
7
  import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
7
8
  import { AgentTerminal } from "../../editor/ai/AgentTerminal";
8
9
  import { isAgentClosed as isClosedAgentStatus } from "../../editor/services/agentStatus";
@@ -12,11 +13,11 @@ function isAgentClosed(status) {
12
13
  return isClosedAgentStatus(status);
13
14
  }
14
15
  function TaskAgentHeader(props) {
15
- const { label, taskDetailsContent, taskDetailsPopoverOpen, onTaskDetailsPopoverOpenChange, } = props;
16
- return (_jsxs("div", { className: "flex items-center justify-between gap-2 border-b px-4 py-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(ParheliaAgentIcon, { className: "text-neutral-grey-100 h-5 w-5 shrink-0" }), _jsx("div", { className: "text-neutral-grey-100 truncate text-sm font-medium", children: label })] }), taskDetailsContent ? (_jsxs(Popover, { open: taskDetailsPopoverOpen, onOpenChange: onTaskDetailsPopoverOpenChange, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "iconSm", className: "text-neutral-grey-50 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 shrink-0", "aria-label": "Task details", title: "Task details", "data-testid": "taskboard-agent-task-details-button", children: _jsx(ClipboardList, { strokeWidth: 1, className: "h-4 w-4" }) }) }), _jsx(PopoverContent, { align: "end", side: "bottom", sideOffset: 8, className: "h-[720px] max-h-[calc(100vh-8rem)] w-[720px] max-w-[calc(100vw-2rem)] overflow-hidden p-0", children: _jsx("div", { className: "h-full min-h-0 overflow-hidden", children: taskDetailsContent }) })] })) : null] }));
16
+ const { label, taskDetailsContent, taskDetailsPopoverOpen, onTaskDetailsPopoverOpenChange, onClose, } = props;
17
+ return (_jsxs("div", { className: "flex items-center justify-between gap-2 border-b px-4 py-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(ParheliaAgentIcon, { className: "text-neutral-grey-100 h-5 w-5 shrink-0" }), _jsx("div", { className: "text-neutral-grey-100 truncate text-sm font-medium", children: label })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [taskDetailsContent ? (_jsxs(Popover, { open: taskDetailsPopoverOpen, onOpenChange: onTaskDetailsPopoverOpenChange, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "iconSm", className: "text-neutral-grey-50 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 shrink-0", "aria-label": "Task details", title: "Task details", "data-testid": "taskboard-agent-task-details-button", children: _jsx(ClipboardList, { strokeWidth: 1, className: "h-4 w-4" }) }) }), _jsx(PopoverContent, { align: "end", side: "bottom", sideOffset: 8, className: "h-[720px] max-h-[calc(100vh-8rem)] w-[720px] max-w-[calc(100vw-2rem)] overflow-hidden p-0", children: _jsx("div", { className: "h-full min-h-0 overflow-hidden", children: taskDetailsContent }) })] })) : null, onClose ? (_jsx(CloseButton, { label: "Close task agent", showTooltip: false, "data-testid": "taskboard-agent-panel-close", onClick: onClose })) : null] })] }));
17
18
  }
18
19
  export function TaskAgentPanel(props) {
19
- const { agentId, terminalKey, mode, label, taskDetailsContent, taskDetailsPopoverOpen, onTaskDetailsPopoverOpenChange, onAssignAgent, onRunAssignedAgent, hasAssignedAgentProfile = false, assignedAgentProfileName, canAssignAgent = true, assignAgentDisabledReason, canRunAssignedAgent = true, runAssignedAgentDisabledReason, onStartPlanning, assignedAgentStatus, onReopenTask, } = props;
20
+ const { agentId, terminalKey, mode, label, taskDetailsContent, taskDetailsPopoverOpen, onTaskDetailsPopoverOpenChange, onClose, onAssignAgent, onRunAssignedAgent, hasAssignedAgentProfile = false, assignedAgentProfileName, canAssignAgent = true, assignAgentDisabledReason, canRunAssignedAgent = true, runAssignedAgentDisabledReason, onStartPlanning, assignedAgentStatus, onReopenTask, } = props;
20
21
  const canUseAi = useFeature(LicenseFeatures.AI);
21
22
  const [profiles, setProfiles] = useState([]);
22
23
  const [profilesError, setProfilesError] = useState(null);
@@ -61,7 +62,7 @@ export function TaskAgentPanel(props) {
61
62
  ? runAssignedAgentDisabledReason
62
63
  : assignAgentDisabledReason;
63
64
  const agentClosed = isAgentClosed(assignedAgentStatus);
64
- const header = (_jsx(TaskAgentHeader, { label: label || "Agent", taskDetailsContent: taskDetailsContent, taskDetailsPopoverOpen: taskDetailsPopoverOpen, onTaskDetailsPopoverOpenChange: onTaskDetailsPopoverOpenChange }));
65
+ const header = (_jsx(TaskAgentHeader, { label: label || "Agent", taskDetailsContent: taskDetailsContent, taskDetailsPopoverOpen: taskDetailsPopoverOpen, onTaskDetailsPopoverOpenChange: onTaskDetailsPopoverOpenChange, onClose: onClose }));
65
66
  if (!canUseAi) {
66
67
  return (_jsxs("div", { className: "flex h-full flex-col border-l bg-white", "data-testid": "taskboard-agent-panel", children: [header, _jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-3 p-6 text-center", children: [_jsx(ParheliaAgentIcon, { className: "text-muted-foreground/40 h-10 w-10" }), _jsxs("div", { className: "grid gap-1", children: [_jsx("div", { className: "text-muted-foreground text-sm font-medium", children: "AI features are unavailable" }), _jsx("div", { className: "text-muted-foreground text-xs", children: "This license does not include task agents or planning." })] })] })] }));
67
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TaskAgentPanel.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskAgentPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskAgentPanel.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskAgentPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,17 @@
1
+ import type { TaskBoardProjectOption } from "../taskBoardNavStore";
1
2
  type TaskBoardHomeNav = {
3
+ projectOptions?: TaskBoardProjectOption[];
4
+ isProjectsLoading?: boolean;
5
+ onSelectProject?: (projectId: string | null) => void;
2
6
  onCreateProject?: () => void;
3
7
  };
8
+ export declare const TASKBOARD_HOME_RECENT_PROJECT_LIMIT = 6;
9
+ /**
10
+ * Top-level, non-archived projects ordered by most recent activity. This is
11
+ * what the home view offers when nothing is selected, so a user returning to
12
+ * the workspace can pick up a project without hunting through the sidebar.
13
+ */
14
+ export declare function getRecentHomeProjects(projectOptions: readonly TaskBoardProjectOption[] | undefined, limit?: number): TaskBoardProjectOption[];
4
15
  export declare function TaskBoardHomeView({ nav }: {
5
16
  nav: TaskBoardHomeNav;
6
17
  }): import("react").JSX.Element;
@@ -1,5 +1,8 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { Folder, Loader2 } from "lucide-react";
2
4
  import { WorkspaceHomeView } from "../../components/WorkspaceHomeView";
5
+ import { ProjectProgressIndicator } from "./ProjectProgressIndicator";
3
6
  const TASKBOARD_EMPTY_SLOGANS = [
4
7
  "A fresh board. Suspiciously clean.",
5
8
  "Backlog, meet destiny.",
@@ -12,7 +15,42 @@ const TASKBOARD_EMPTY_SLOGANS = [
12
15
  "New project smell, zero dependencies.",
13
16
  "Somewhere, a checklist is waiting.",
14
17
  ];
18
+ export const TASKBOARD_HOME_RECENT_PROJECT_LIMIT = 6;
19
+ /**
20
+ * Top-level, non-archived projects ordered by most recent activity. This is
21
+ * what the home view offers when nothing is selected, so a user returning to
22
+ * the workspace can pick up a project without hunting through the sidebar.
23
+ */
24
+ export function getRecentHomeProjects(projectOptions, limit = TASKBOARD_HOME_RECENT_PROJECT_LIMIT) {
25
+ if (!projectOptions?.length)
26
+ return [];
27
+ const timestamp = (value) => {
28
+ if (!value)
29
+ return Number.NEGATIVE_INFINITY;
30
+ const parsed = Date.parse(value);
31
+ return Number.isFinite(parsed) ? parsed : Number.NEGATIVE_INFINITY;
32
+ };
33
+ return projectOptions
34
+ .filter((project) => !project.parentProjectId &&
35
+ (project.depth ?? 0) === 0 &&
36
+ project.status?.toLowerCase() !== "archived")
37
+ .sort((a, b) => timestamp(b.updatedAt) - timestamp(a.updatedAt))
38
+ .slice(0, Math.max(0, limit));
39
+ }
15
40
  export function TaskBoardHomeView({ nav }) {
16
- return (_jsx(WorkspaceHomeView, { slogans: TASKBOARD_EMPTY_SLOGANS, actionLabel: "Start your next project", onAction: nav.onCreateProject, testId: "taskboard-home-view", actionTestId: "taskboard-home-create-project-card" }));
41
+ const recentProjects = useMemo(() => getRecentHomeProjects(nav.projectOptions), [nav.projectOptions]);
42
+ const hasAnyProject = (nav.projectOptions?.length ?? 0) > 0;
43
+ if (nav.isProjectsLoading && !hasAnyProject) {
44
+ // Don't greet with an "empty board" slogan while the project list is
45
+ // still on its way; it reads as "you have no projects".
46
+ return (_jsx("div", { className: "bg-neutral-grey-5 flex h-full min-h-[420px] w-full items-center justify-center px-6 py-10", "data-testid": "taskboard-home-view", children: _jsxs("div", { className: "text-neutral-grey-50 flex items-center gap-2 text-sm", "data-testid": "taskboard-home-loading", children: [_jsx(Loader2, { strokeWidth: 1, className: "h-4 w-4 animate-spin" }), "Loading projects..."] }) }));
47
+ }
48
+ if (recentProjects.length === 0) {
49
+ return (_jsx(WorkspaceHomeView, { slogans: TASKBOARD_EMPTY_SLOGANS, actionLabel: "Start your next project", onAction: nav.onCreateProject, testId: "taskboard-home-view", actionTestId: "taskboard-home-create-project-card" }));
50
+ }
51
+ return (_jsx(WorkspaceHomeView, { slogans: TASKBOARD_EMPTY_SLOGANS, headline: "Pick a project to continue", description: "Choose one of your recent projects below, or use the project list in the sidebar.", actionLabel: "Start a new project", onAction: nav.onCreateProject, testId: "taskboard-home-view", actionTestId: "taskboard-home-create-project-card", children: _jsx("div", { className: "border-border-default overflow-hidden rounded-md border bg-white text-left", "data-testid": "taskboard-home-project-list", children: recentProjects.map((project) => {
52
+ const counts = project.overview?.taskCounts;
53
+ return (_jsxs("button", { type: "button", className: "border-border-default hover:bg-neutral-grey-5/70 active:bg-neutral-grey-5 flex min-h-12 w-full items-center gap-3 border-b px-4 py-3 text-left transition-colors last:border-b-0", onClick: () => nav.onSelectProject?.(project.projectId), "data-testid": `taskboard-home-project-option-${project.projectId}`, children: [_jsx(Folder, { className: "text-neutral-grey-100 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-neutral-grey-100 block truncate text-sm font-medium", children: project.title }), project.description?.trim() ? (_jsx("span", { className: "text-neutral-grey-50 block truncate text-xs", children: project.description })) : null] }), _jsx(ProjectProgressIndicator, { done: counts?.done, total: counts?.total })] }, project.projectId));
54
+ }) }) }));
17
55
  }
18
56
  //# sourceMappingURL=TaskBoardHomeView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskBoardHomeView.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskBoardHomeView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAMvE,MAAM,uBAAuB,GAAG;IAC9B,oCAAoC;IACpC,wBAAwB;IACxB,wCAAwC;IACxC,4CAA4C;IAC5C,sCAAsC;IACtC,4BAA4B;IAC5B,gCAAgC;IAChC,oCAAoC;IACpC,uCAAuC;IACvC,oCAAoC;CACrC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,EAAE,GAAG,EAA6B;IAClE,OAAO,CACL,KAAC,iBAAiB,IAChB,OAAO,EAAE,uBAAuB,EAChC,WAAW,EAAC,yBAAyB,EACrC,QAAQ,EAAE,GAAG,CAAC,eAAe,EAC7B,MAAM,EAAC,qBAAqB,EAC5B,YAAY,EAAC,oCAAoC,GACjD,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"TaskBoardHomeView.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskBoardHomeView.tsx"],"names":[],"mappings":"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"}
@@ -1,22 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo, useState, useSyncExternalStore } from "react";
3
- import { Check, Folder, FolderOpen, Loader2, Plus } from "lucide-react";
3
+ import { Folder, FolderOpen, Loader2, Plus } from "lucide-react";
4
4
  import { Button } from "../../components/ui/button";
5
5
  import { Switch } from "../../components/ui/switch";
6
6
  import { SearchInput } from "../../components/SearchInput";
7
7
  import { cn } from "../../lib/utils";
8
8
  import { SimpleTabs } from "../../editor/ui/SimpleTabs";
9
9
  import { getTaskBoardNavSnapshot, subscribeTaskBoardNav, } from "../taskBoardNavStore";
10
- function ProjectProgressIndicator({ done, total, }) {
11
- if (!total || total <= 0) {
12
- return null;
13
- }
14
- const progress = Math.max(0, Math.min(100, Math.round(((done ?? 0) / total) * 100)));
15
- if (progress >= 100) {
16
- return (_jsx("span", { className: "bg-feedback-green flex size-4 shrink-0 items-center justify-center rounded-full text-white", title: "Completed", "aria-label": "Completed", children: _jsx(Check, { size: 10, strokeWidth: 1.5, absoluteStrokeWidth: true }) }));
17
- }
18
- return (_jsxs("span", { className: "text-neutral-grey-50 shrink-0 text-xs font-medium tabular-nums", children: [progress, "%"] }));
19
- }
10
+ import { ProjectProgressIndicator } from "./ProjectProgressIndicator";
20
11
  export function TaskBoardProjectListSidebar() {
21
12
  const nav = useSyncExternalStore(subscribeTaskBoardNav, getTaskBoardNavSnapshot, getTaskBoardNavSnapshot);
22
13
  const [search, setSearch] = useState("");
@@ -1 +1 @@
1
- {"version":3,"file":"TaskBoardProjectListSidebar.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskBoardProjectListSidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAY,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAI9B,SAAS,wBAAwB,CAAC,EAChC,IAAI,EACJ,KAAK,GAIN;IACC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CACvD,CAAC;IAEF,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACpB,OAAO,CACL,eACE,SAAS,EAAC,4FAA4F,EACtG,KAAK,EAAC,WAAW,gBACN,WAAW,YAEtB,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,mBAAmB,SAAG,GACpD,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,gBAAM,SAAS,EAAC,gEAAgE,aAC7E,QAAQ,SACJ,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,GAAG,oBAAoB,CAC9B,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,CACxB,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAoB,QAAQ,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAU,OAAO,CAC/B,GAAG,EAAE,CAAC;QACJ;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,sCAAsC;SAC/C;QACD;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,wCAAwC;SACjD;KACF,EACD,EAAE,CACH,CAAC;IAEF,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,iBAAiB;YAAE,OAAO,IAAI,GAAG,EAAU,CAAC;QAErD,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAClE,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,IAAI,gBAAgB,GAAkB,GAAG,CAAC,iBAAiB,CAAC;QAE5D,OAAO,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAE/B,MAAM,eAAe,GACnB,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,eAAe,IAAI,IAAI,CAAC;YAC7D,gBAAgB,GAAG,eAAe,CAAC;QACrC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAEhD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACxC,OAAO,GAAG,CAAC,cAAc,CAAC,MAAM,CAC9B,CAAC,OAAO,EAAE,EAAE,CACV,CAAC,OAAO,CAAC,eAAe;YACxB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;YAC1B,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAClD,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC;YAChE,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU;gBAAE,OAAO,KAAK,CAAC;YACxD,IAAI,UAAU,KAAK,UAAU,IAAI,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YAE3D,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAEnD,OAAO,CACL,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACrB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,UAAU,KAAK,UAAU;YAAE,OAAO,sBAAsB,CAAC;QAC7D,IAAI,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,sBAAsB,CAAC;QACjD,OAAO,mBAAmB,CAAC;IAC7B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,eACE,SAAS,EAAC,uCAAuC,iBACrC,gCAAgC,aAE5C,eAAK,SAAS,EAAC,wCAAwC,aACrD,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,2FAA2F,EACrG,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,iBAC1B,sCAAsC,aAElD,eAAM,SAAS,EAAC,UAAU,mCAA0B,EACpD,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,CAAC,GAAI,IACrC,EAET,KAAC,WAAW,IACV,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,EACnB,WAAW,EAAC,oBAAoB,EAChC,IAAI,EAAC,IAAI,EACT,kBAAkB,EAAC,MAAM,EACzB,MAAM,EAAC,+BAA+B,GACtC,EAEF,cAAK,SAAS,EAAC,gCAAgC,YAC7C,KAAC,UAAU,IACT,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5C,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CACtB,aAAa,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAEpD,WAAW,EAAE,IAAI,EACjB,SAAS,EAAC,cAAc,EACxB,YAAY,EAAC,8CAA8C,EAC3D,eAAe,EAAC,OAAO,EACvB,MAAM,EAAC,oCAAoC,GAC3C,GACE,EAEL,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CACrB,eAAK,SAAS,EAAC,qCAAqC,aAClD,iBAAO,SAAS,EAAC,0KAA0K,aACzL,eAAM,SAAS,EAAC,sBAAsB,kCAAyB,EAC/D,KAAC,MAAM,IACL,OAAO,EAAE,GAAG,CAAC,eAAe,EAC5B,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,GAAG,CAAC,uBAAuB,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,gBAEtC,mBAAmB,iBAClB,sCAAsC,EAClD,SAAS,EAAC,wOAAwO,GAClP,IACI,EACR,YACE,SAAS,EAAC,kDAAkD,iBAChD,kCAAkC,mEAG5C,IACA,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EAEN,cAAK,SAAS,EAAC,+CAA+C,YAC3D,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1D,eACE,SAAS,EAAC,+GAA+G,iBAC7G,gCAAgC,aAE5C,KAAC,OAAO,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,0BAA0B,GAAG,2BAE5D,CACP,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,cAAK,SAAS,EAAC,oFAAoF,YAChG,YAAY,GACT,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qBAAqB,YACjC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;wBACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,KAAK,GAAG,CAAC,iBAAiB,CAAC;wBAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAChE,CAAC;wBACF,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;wBACnD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;wBAC5C,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,QAAQ;gCACN,CAAC,CAAC,yCAAyC;gCAC3C,CAAC,CAAC,kDAAkD,CACvD,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,EAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,iBAC1C,iCAAiC,OAAO,CAAC,SAAS,EAAE,aAEjE,eAAM,SAAS,EAAC,mDAAmD,YACjE,KAAC,WAAW,IACV,SAAS,EAAC,wCAAwC,EAClD,WAAW,EAAE,CAAC,GACd,GACG,EACP,eACE,SAAS,EAAE,EAAE,CACX,yBAAyB,EACzB,qBAAqB,CACtB,YAEA,OAAO,CAAC,KAAK,GACT,EACP,KAAC,wBAAwB,IACvB,IAAI,EAAE,MAAM,EAAE,IAAI,EAClB,KAAK,EAAE,MAAM,EAAE,KAAK,GACpB,KA7BG,OAAO,CAAC,SAAS,CA8Bf,CACV,CAAC;oBACJ,CAAC,CAAC,GACE,CACP,GACG,IACF,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"TaskBoardProjectListSidebar.js","sourceRoot":"","sources":["../../../src/task-board/components/TaskBoardProjectListSidebar.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useMemo, useState, useEffect, } from "react";
2
+ import { useCallback, useMemo, useRef, useState, useEffect, } from "react";
3
3
  import { toast } from "sonner";
4
+ import { useCommentImagePaste } from "../../editor/reviews/useCommentImagePaste";
5
+ import { CommentImageAttachments } from "../../editor/reviews/CommentImageAttachments";
4
6
  import { cn } from "../../lib/utils";
5
7
  import { Button } from "../../components/ui/button";
6
8
  import { Badge } from "../../components/ui/badge";
@@ -155,6 +157,19 @@ export function TaskDetailPanel(props) {
155
157
  }, [allTasks, dependencies]);
156
158
  const compactPanel = variant === "panel";
157
159
  const decisionIsResolved = !!decisionPointData?.decidedAt;
160
+ const decisionIsSingleSelect = String(decisionPointData?.decisionMode ?? "").toLowerCase() ===
161
+ "singleselect";
162
+ const decisionDecidedAtLabel = useMemo(() => {
163
+ if (!decisionPointData?.decidedAt)
164
+ return "";
165
+ const decidedAt = new Date(decisionPointData.decidedAt);
166
+ if (Number.isNaN(decidedAt.getTime()))
167
+ return "";
168
+ return decidedAt.toLocaleString(undefined, {
169
+ dateStyle: "medium",
170
+ timeStyle: "short",
171
+ });
172
+ }, [decisionPointData?.decidedAt]);
158
173
  const materializedDecisionTasks = useMemo(() => {
159
174
  if (!decisionPointData?.selectedTemplateIds?.length)
160
175
  return [];
@@ -335,20 +350,38 @@ export function TaskDetailPanel(props) {
335
350
  setApplyingDecision(false);
336
351
  }
337
352
  }, [onTaskChanged, selectedDecisionTemplateIds, task]);
353
+ const commentImagePaste = useCommentImagePaste({
354
+ scope: "task",
355
+ scopeId: task?.taskId ?? null,
356
+ disabled: !canEdit,
357
+ });
358
+ const commentTextRef = useRef(commentText);
359
+ commentTextRef.current = commentText;
360
+ const currentTaskIdRef = useRef(task?.taskId ?? null);
361
+ currentTaskIdRef.current = task?.taskId ?? null;
338
362
  const submitComment = async () => {
339
363
  if (!task)
340
364
  return;
341
- if (!commentText.trim())
365
+ const taskId = task.taskId;
366
+ // Wait for a pasted screenshot to finish uploading so the comment carries it.
367
+ if (commentImagePaste.uploading)
368
+ await commentImagePaste.waitForUploads();
369
+ // The panel may have moved to another task meanwhile; never post there.
370
+ if (currentTaskIdRef.current !== taskId)
371
+ return;
372
+ const text = commentImagePaste.buildSubmitText(commentTextRef.current);
373
+ if (!text)
342
374
  return;
343
375
  const result = await addComment({
344
- taskId: task.taskId,
345
- text: commentText.trim(),
376
+ taskId,
377
+ text,
346
378
  });
347
379
  if (result.type !== "success") {
348
380
  toast.error(result.summary || "Failed to add comment");
349
381
  return;
350
382
  }
351
383
  setCommentText("");
384
+ commentImagePaste.clearAttachments();
352
385
  setCommentRefreshKey((k) => k + 1);
353
386
  toast.success("Comment added");
354
387
  await onTaskChanged();
@@ -478,27 +511,24 @@ export function TaskDetailPanel(props) {
478
511
  ? "min-h-0 flex-1 overflow-auto bg-white px-4 py-3"
479
512
  : compactPanel
480
513
  ? "min-h-0 flex-1 overflow-auto bg-white p-4"
481
- : "min-h-0 flex-1 overflow-auto bg-white p-6", children: !task ? (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm italic", children: "Select a task to view details." })) : isCollapsed ? (_jsxs("div", { className: "flex items-start gap-3", "data-testid": "taskboard-task-detail-collapsed-body", children: [_jsx("div", { className: "min-w-0 flex-1", children: task.description && task.description.trim().length > 0 ? (_jsx("p", { className: "text-neutral-grey-100 line-clamp-3 text-[13px] leading-relaxed", children: task.description })) : (_jsx("p", { className: "text-neutral-grey-50 text-[13px] italic", children: "No description" })) }), _jsx("div", { className: "shrink-0", children: _jsx(TaskboardPersistentLogPanel, { scope: "task", projectId: task.projectId, taskId: task.taskId, title: "Execution Log", emptyMessage: "No task-scoped log entries yet.", refreshKey: `${task.taskId}:${task.executionUpdatedAt ?? task.updatedAt ?? ""}:${task.executionState}:${task.status}`, testId: "taskboard-task-detail-log-panel" }) })] })) : (_jsxs("div", { className: compactPanel ? "grid gap-6" : "grid gap-8", children: [_jsxs("div", { className: "grid gap-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { className: sectionHeadingClass, children: "Description" }), _jsx(TaskboardPersistentLogPanel, { scope: "task", projectId: task.projectId, taskId: task.taskId, title: "Execution Log", emptyMessage: "No task-scoped log entries yet.", refreshKey: `${task.taskId}:${task.executionUpdatedAt ?? task.updatedAt ?? ""}:${task.executionState}:${task.status}`, testId: "taskboard-task-detail-log-panel" })] }), _jsx(Textarea, { "data-testid": "taskboard-task-detail-description", value: localDescription, onChange: (e) => setLocalDescription(e.target.value), onBlur: () => void saveDescription(), rows: compactPanel ? 2 : 3, placeholder: "Add a description\u2026", disabled: !canEdit, className: cn("resize-none text-[13px] leading-relaxed focus-visible:ring-1", inputBackgroundClass) })] }), isDecisionPointTask && (_jsxs("div", { className: "grid gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Label, { className: sectionHeadingClass, children: "Decision" }), _jsx(Badge, { variant: "outline", className: "text-2xs border-highlight-100 bg-highlight-10 text-highlight-100", children: String(decisionPointData?.decisionMode ?? "").toLowerCase() === "singleselect"
482
- ? "Single Select"
483
- : "Multi Select" })] }), !decisionPointData ? (_jsx("div", { className: "text-2xs border-feedback-orange bg-feedback-orange-light text-feedback-orange rounded-md border px-3 py-2", children: "Decision metadata is missing for this task." })) : decisionIsResolved ? (_jsxs("div", { className: "border-highlight-100 bg-highlight-10/70 grid gap-3 rounded-lg border p-3", "data-testid": "taskboard-decision-point-panel", children: [_jsx("div", { className: "text-highlight-100 text-sm font-medium", children: "Decision applied" }), _jsxs("div", { className: "text-highlight-100 text-xs", children: [decisionPointData.selectedTemplateIds?.length
484
- ? `Selected ${decisionPointData.selectedTemplateIds.length} option${decisionPointData.selectedTemplateIds.length === 1 ? "" : "s"}`
485
- : "No options were selected", decisionPointData.decidedBy
486
- ? ` by ${decisionPointData.decidedBy}`
487
- : "", decisionPointData.decidedAt
488
- ? ` at ${new Date(decisionPointData.decidedAt).toLocaleString()}`
489
- : "", "."] }), materializedDecisionTasks.length > 0 ? (_jsx("div", { className: "grid gap-1.5", children: materializedDecisionTasks.map((materializedTask) => (_jsxs("button", { type: "button", onClick: () => onSelectTask(materializedTask.taskId), className: "border-highlight-100 text-neutral-grey-100 hover:border-highlight-100 hover:bg-highlight-10 flex items-center gap-2 rounded-md border bg-white px-3 py-2 text-left text-xs", children: [_jsx(Badge, { variant: "outline", size: "sm", className: "text-2xs border-border-default bg-neutral-grey-5 text-neutral-grey-50 font-bold", children: materializedTask.taskKey ||
490
- materializedTask.taskId.slice(0, 4) }), _jsx("span", { className: "truncate font-medium", children: materializedTask.title })] }, materializedTask.taskId))) })) : null] })) : (_jsxs("div", { className: "border-highlight-100 bg-highlight-10/70 grid gap-4 rounded-lg border p-4", "data-testid": "taskboard-decision-point-panel", children: [_jsx("div", { className: "text-2xs text-highlight-100 leading-relaxed", children: "Choose which direct dependency branches should be materialized into the project." }), task?.assigneeType === "Agent" ? (_jsx("div", { className: "border-feedback-blue bg-feedback-blue-light text-feedback-blue rounded-lg border px-4 py-3 text-xs leading-relaxed", children: "This Decision Point is assigned to an agent profile and can be resolved automatically by the orchestrator." })) : null, _jsx("div", { className: "grid gap-3", children: (decisionPointData.optionRoots ?? []).map((option) => {
514
+ : "min-h-0 flex-1 overflow-auto bg-white p-6", children: !task ? (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm italic", children: "Select a task to view details." })) : isCollapsed ? (_jsxs("div", { className: "flex items-start gap-3", "data-testid": "taskboard-task-detail-collapsed-body", children: [_jsx("div", { className: "min-w-0 flex-1", children: task.description && task.description.trim().length > 0 ? (_jsx("p", { className: "text-neutral-grey-100 line-clamp-3 text-[13px] leading-relaxed", children: task.description })) : (_jsx("p", { className: "text-neutral-grey-50 text-[13px] italic", children: "No description" })) }), _jsx("div", { className: "shrink-0", children: _jsx(TaskboardPersistentLogPanel, { scope: "task", projectId: task.projectId, taskId: task.taskId, title: "Execution Log", emptyMessage: "No task-scoped log entries yet.", refreshKey: `${task.taskId}:${task.executionUpdatedAt ?? task.updatedAt ?? ""}:${task.executionState}:${task.status}`, testId: "taskboard-task-detail-log-panel" }) })] })) : (_jsxs("div", { className: compactPanel ? "grid gap-6" : "grid gap-8", children: [_jsxs("div", { className: "grid gap-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { className: sectionHeadingClass, children: "Description" }), _jsx(TaskboardPersistentLogPanel, { scope: "task", projectId: task.projectId, taskId: task.taskId, title: "Execution Log", emptyMessage: "No task-scoped log entries yet.", refreshKey: `${task.taskId}:${task.executionUpdatedAt ?? task.updatedAt ?? ""}:${task.executionState}:${task.status}`, testId: "taskboard-task-detail-log-panel" })] }), _jsx(Textarea, { "data-testid": "taskboard-task-detail-description", value: localDescription, onChange: (e) => setLocalDescription(e.target.value), onBlur: () => void saveDescription(), rows: compactPanel ? 2 : 3, placeholder: "Add a description\u2026", disabled: !canEdit, className: cn("resize-none text-[13px] leading-relaxed focus-visible:ring-1", inputBackgroundClass) })] }), isDecisionPointTask && (_jsxs("div", { className: "grid gap-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { className: sectionHeadingClass, children: "Decision" }), decisionPointData && !decisionIsResolved ? (_jsx("span", { className: "text-neutral-grey-50 text-[11px]", children: decisionIsSingleSelect
515
+ ? "Choose one option"
516
+ : "Choose one or more options" })) : null] }), !decisionPointData ? (_jsx("div", { className: "text-2xs border-feedback-orange bg-feedback-orange-light text-feedback-orange rounded-md border px-3 py-2", children: "Decision metadata is missing for this task." })) : decisionIsResolved ? (_jsxs("div", { className: "border-border-default grid gap-3 rounded-lg border bg-white p-3", "data-testid": "taskboard-decision-point-panel", children: [_jsxs("div", { className: "flex items-start gap-2.5", children: [_jsx(CheckCircle2, { strokeWidth: 1.25, className: "text-feedback-green mt-px h-4 w-4 shrink-0" }), _jsxs("div", { className: "grid min-w-0 gap-0.5", children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: "Decision applied" }), _jsxs("div", { className: "text-neutral-grey-50 text-[11px]", children: [decisionPointData.selectedTemplateIds?.length
517
+ ? `${decisionPointData.selectedTemplateIds.length} option${decisionPointData.selectedTemplateIds.length === 1 ? "" : "s"} selected`
518
+ : "No options selected", decisionPointData.decidedBy
519
+ ? ` by ${decisionPointData.decidedBy}`
520
+ : "", decisionDecidedAtLabel
521
+ ? ` · ${decisionDecidedAtLabel}`
522
+ : ""] })] })] }), materializedDecisionTasks.length > 0 ? (_jsxs("div", { className: "grid gap-1.5", children: [_jsx("div", { className: blockedSubsectionHeadingClass, children: "Created tasks" }), materializedDecisionTasks.map((materializedTask) => (_jsxs("button", { type: "button", onClick: () => onSelectTask(materializedTask.taskId), className: "border-border-default hover:bg-neutral-grey-5 flex items-center gap-2 rounded-md border bg-white px-3 py-2 text-left transition-colors", children: [_jsx(Badge, { variant: "outline", size: "sm", className: "text-2xs border-border-default bg-neutral-grey-5 text-neutral-grey-50 font-bold", children: materializedTask.taskKey ||
523
+ materializedTask.taskId.slice(0, 4) }), _jsx("span", { className: "text-neutral-grey-100 truncate text-xs font-medium", children: materializedTask.title }), materializedTask.status === "Done" && (_jsx(CheckCircle2, { strokeWidth: 1, className: "text-feedback-green ml-auto h-3.5 w-3.5 shrink-0" }))] }, materializedTask.taskId)))] })) : null] })) : (_jsxs("div", { className: "border-border-default grid gap-3 rounded-lg border bg-white p-3", "data-testid": "taskboard-decision-point-panel", children: [task?.assigneeType === "Agent" ? (_jsx("div", { className: "border-feedback-blue/25 bg-feedback-blue-light text-feedback-blue rounded-md border px-3 py-2 text-[11px] leading-relaxed", children: "This Decision Point is assigned to an agent profile and can be resolved automatically by the orchestrator." })) : null, _jsx("div", { className: "grid gap-1.5", children: (decisionPointData.optionRoots ?? []).map((option) => {
491
524
  const checked = selectedDecisionTemplateIds.includes(option.templateId);
492
- const inputType = String(decisionPointData.decisionMode ?? "").toLowerCase() === "singleselect"
493
- ? "radio"
494
- : "checkbox";
495
- return (_jsxs("label", { className: "border-highlight-100 hover:border-highlight-100 flex cursor-pointer items-start gap-3 rounded-lg border bg-white px-4 py-3 text-sm transition-colors", children: [_jsx("input", { type: inputType, name: `decision-point-${task.taskId}`, checked: checked, onChange: () => toggleDecisionSelection(option.templateId), disabled: applyingDecision || !canEdit, className: "mt-0.5 shrink-0", "data-testid": `taskboard-decision-option-${option.templateId}` }), _jsxs("span", { className: "grid min-w-0 gap-1", children: [_jsx("span", { className: "text-neutral-grey-100 leading-none font-medium", children: option.title || "Untitled option" }), option.description ? (_jsx("span", { className: "text-neutral-grey-50 text-xs leading-relaxed", children: option.description })) : null] })] }, option.templateId));
496
- }) }), _jsxs("div", { className: "border-highlight-100 flex items-center justify-between gap-3 border-t pt-3", children: [_jsxs("div", { className: "text-highlight-100 text-xs font-medium", children: [selectedDecisionTemplateIds.length, " option", selectedDecisionTemplateIds.length === 1
497
- ? ""
498
- : "s", " ", "selected"] }), _jsx(Button, { type: "button", onClick: () => void handleApplyDecision(), disabled: applyingDecision ||
525
+ return (_jsxs("label", { className: cn("border-border-default has-checked:border-highlight-100 has-checked:bg-highlight-10/60 hover:bg-neutral-grey-5 has-checked:hover:bg-highlight-10 flex items-start gap-2.5 rounded-md border bg-white px-3 py-2 transition-colors", applyingDecision || !canEdit
526
+ ? "cursor-default opacity-70"
527
+ : "cursor-pointer"), children: [_jsx("input", { type: decisionIsSingleSelect ? "radio" : "checkbox", name: `decision-point-${task.taskId}`, checked: checked, onChange: () => toggleDecisionSelection(option.templateId), disabled: applyingDecision || !canEdit, className: "accent-highlight-100 mt-0.5 size-3.5 shrink-0", "data-testid": `taskboard-decision-option-${option.templateId}` }), _jsxs("span", { className: "grid min-w-0 gap-0.5", children: [_jsx("span", { className: "text-neutral-grey-100 text-xs font-medium", children: option.title || "Untitled option" }), option.description ? (_jsx("span", { className: "text-neutral-grey-50 text-[11px] leading-relaxed", children: option.description })) : null] })] }, option.templateId));
528
+ }) }), _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "text-neutral-grey-50 text-[11px]", children: [selectedDecisionTemplateIds.length, " of", " ", decisionPointData.optionRoots?.length ?? 0, " selected"] }), _jsxs(Button, { type: "button", size: "sm", onClick: () => void handleApplyDecision(), disabled: applyingDecision ||
499
529
  !canEdit ||
500
530
  selectedDecisionTemplateIds.length === 0 ||
501
- task?.assigneeType === "Agent", "data-testid": "taskboard-apply-decision-button", className: "min-w-40", children: applyingDecision ? "Applying..." : "Apply decision" })] })] }))] })), isPlanTask && (_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { className: sectionHeadingClass, children: "Plan" }), _jsx(Textarea, { "data-testid": "taskboard-task-detail-plan", value: localResultData, onChange: (e) => setLocalResultData(e.target.value), onBlur: () => void saveResultData(), rows: compactPanel ? 6 : 10, placeholder: "Write the plan\u2026", disabled: !canEdit, className: cn("min-h-[200px] font-mono text-[12px] leading-relaxed focus-visible:ring-1", inputBackgroundClass) }), _jsxs("div", { className: "border-feedback-blue bg-feedback-blue-light/50 text-neutral-grey-50 rounded border px-2 py-1.5 text-[11px]", "data-testid": "taskboard-task-plan-approval-hint", children: [_jsx("span", { className: "text-feedback-blue font-medium", children: "Approval:" }), " ", "Move this plan task to", " ", _jsx("span", { className: "text-feedback-blue font-bold", children: "Done" }), " to approve."] })] })), compactPanel && (_jsxs("div", { className: "border-border-default/60 grid gap-6 border-t pt-6", children: [_jsxs("div", { className: "grid gap-2", children: [_jsxs(Label, { className: `flex items-center justify-between ${sectionHeadingClass}`, children: ["Subtasks ", childTasks.length > 0 && `(${childTasks.length})`, canEdit && (_jsx(Button, { variant: "ghost", size: "icon", className: "text-neutral-grey-50 hover:text-neutral-grey-50 h-6 w-6", onClick: () => setIsCreateSubtaskOpen(true), title: "Add subtask", children: _jsx(Plus, { strokeWidth: 1, className: "h-3 w-3" }) }))] }), childTasks.length > 0 ? (_jsx("div", { className: "grid gap-1.5", children: childTasks.map((child) => (_jsxs("button", { type: "button", onClick: () => onSelectTask(child.taskId), className: "group border-border-default hover:border-border-default hover:bg-neutral-grey-5 flex items-center gap-2 truncate rounded-md border bg-white px-3 py-2 text-left text-xs transition-colors", children: [_jsx(Badge, { variant: "outline", size: "sm", className: "text-2xs border-border-default bg-neutral-grey-5 text-neutral-grey-50 group-hover:border-border-default font-bold", children: child.taskKey || child.taskId.slice(0, 4) }), _jsx("span", { className: "text-neutral-grey-100 truncate font-medium", children: child.title })] }, child.taskId))) })) : (_jsx("div", { className: "text-neutral-grey-50 text-[11px] italic", children: "No subtasks." }))] }), _jsxs("div", { className: "grid gap-2", children: [_jsxs(Label, { className: `flex items-center justify-between ${sectionHeadingClass}`, children: ["Dependencies", canEdit && (_jsx(Button, { variant: "ghost", size: "icon", className: "text-neutral-grey-50 hover:text-neutral-grey-50 h-6 w-6", onClick: () => setIsAddDependencyOpen(true), title: "Add relationship", children: _jsx(Plus, { strokeWidth: 1, className: "h-3 w-3" }) }))] }), blockedByTasks.length > 0 && (_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: blockedSubsectionHeadingClass, children: "Blocked By" }), _jsx("div", { className: "grid gap-1.5", children: blockedByTasks.map((blocking) => (_jsx(RelationshipRow, { entry: blocking, compact: true, canEdit: canEdit, isRemoving: removingDependencyId ===
531
+ task?.assigneeType === "Agent", "data-testid": "taskboard-apply-decision-button", children: [applyingDecision ? (_jsx(Loader2, { strokeWidth: 1, className: "h-3.5 w-3.5 animate-spin" })) : null, applyingDecision ? "Applying" : "Apply decision"] })] })] }))] })), isPlanTask && (_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { className: sectionHeadingClass, children: "Plan" }), _jsx(Textarea, { "data-testid": "taskboard-task-detail-plan", value: localResultData, onChange: (e) => setLocalResultData(e.target.value), onBlur: () => void saveResultData(), rows: compactPanel ? 6 : 10, placeholder: "Write the plan\u2026", disabled: !canEdit, className: cn("min-h-[200px] font-mono text-[12px] leading-relaxed focus-visible:ring-1", inputBackgroundClass) }), _jsxs("div", { className: "border-feedback-blue bg-feedback-blue-light/50 text-neutral-grey-50 rounded border px-2 py-1.5 text-[11px]", "data-testid": "taskboard-task-plan-approval-hint", children: [_jsx("span", { className: "text-feedback-blue font-medium", children: "Approval:" }), " ", "Move this plan task to", " ", _jsx("span", { className: "text-feedback-blue font-bold", children: "Done" }), " to approve."] })] })), compactPanel && (_jsxs("div", { className: "border-border-default/60 grid gap-6 border-t pt-6", children: [_jsxs("div", { className: "grid gap-2", children: [_jsxs(Label, { className: `flex items-center justify-between ${sectionHeadingClass}`, children: ["Subtasks ", childTasks.length > 0 && `(${childTasks.length})`, canEdit && (_jsx(Button, { variant: "ghost", size: "icon", className: "text-neutral-grey-50 hover:text-neutral-grey-50 h-6 w-6", onClick: () => setIsCreateSubtaskOpen(true), title: "Add subtask", children: _jsx(Plus, { strokeWidth: 1, className: "h-3 w-3" }) }))] }), childTasks.length > 0 ? (_jsx("div", { className: "grid gap-1.5", children: childTasks.map((child) => (_jsxs("button", { type: "button", onClick: () => onSelectTask(child.taskId), className: "group border-border-default hover:border-border-default hover:bg-neutral-grey-5 flex items-center gap-2 truncate rounded-md border bg-white px-3 py-2 text-left text-xs transition-colors", children: [_jsx(Badge, { variant: "outline", size: "sm", className: "text-2xs border-border-default bg-neutral-grey-5 text-neutral-grey-50 group-hover:border-border-default font-bold", children: child.taskKey || child.taskId.slice(0, 4) }), _jsx("span", { className: "text-neutral-grey-100 truncate font-medium", children: child.title })] }, child.taskId))) })) : (_jsx("div", { className: "text-neutral-grey-50 text-[11px] italic", children: "No subtasks." }))] }), _jsxs("div", { className: "grid gap-2", children: [_jsxs(Label, { className: `flex items-center justify-between ${sectionHeadingClass}`, children: ["Dependencies", canEdit && (_jsx(Button, { variant: "ghost", size: "icon", className: "text-neutral-grey-50 hover:text-neutral-grey-50 h-6 w-6", onClick: () => setIsAddDependencyOpen(true), title: "Add relationship", children: _jsx(Plus, { strokeWidth: 1, className: "h-3 w-3" }) }))] }), blockedByTasks.length > 0 && (_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: blockedSubsectionHeadingClass, children: "Blocked By" }), _jsx("div", { className: "grid gap-1.5", children: blockedByTasks.map((blocking) => (_jsx(RelationshipRow, { entry: blocking, compact: true, canEdit: canEdit, isRemoving: removingDependencyId ===
502
532
  blocking.dependency.dependencyId, dependencyTaskIds: getDependencyTaskIds(blocking.task.taskId), onSelectTask: onSelectTask, onRemove: removeRelationship }, blocking.dependency.dependencyId))) })] })), blockedByProjects.length > 0 && (_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: blockedSubsectionHeadingClass, children: "Blocked By Project" }), _jsx("div", { className: "grid gap-1.5", children: blockedByProjects.map((blockingProject) => (_jsx("div", { className: "text-2xs border-border-default bg-neutral-grey-5 text-neutral-grey-100 rounded-md border px-3 py-2", children: blockingProject.title }, blockingProject.projectId))) })] })), blockingTasks.length > 0 && (_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: blockedSubsectionHeadingClass, children: "Blocks" }), _jsx("div", { className: "grid gap-1.5", children: blockingTasks.map((blocked) => (_jsx(RelationshipRow, { entry: blocked, compact: true, canEdit: canEdit, isRemoving: removingDependencyId ===
503
533
  blocked.dependency.dependencyId, dependencyTaskIds: getDependencyTaskIds(blocked.task.taskId), onSelectTask: onSelectTask, onRemove: removeRelationship }, blocked.dependency.dependencyId))) })] })), relatedTasks.length > 0 && (_jsxs("div", { className: "grid gap-2", children: [_jsx("div", { className: subsectionHeadingClass, children: "Related To" }), _jsx("div", { className: "grid gap-1.5", children: relatedTasks.map((related) => (_jsx(RelationshipRow, { entry: related, compact: true, canEdit: canEdit, isRemoving: removingDependencyId ===
504
534
  related.dependency.dependencyId, dependencyTaskIds: getDependencyTaskIds(related.task.taskId), onSelectTask: onSelectTask, onRemove: removeRelationship }, related.dependency.dependencyId))) })] })), blockedByTasks.length === 0 &&
@@ -510,6 +540,11 @@ export function TaskDetailPanel(props) {
510
540
  related.dependency.dependencyId, dependencyTaskIds: getDependencyTaskIds(related.task.taskId), onSelectTask: onSelectTask, onRemove: removeRelationship }, related.dependency.dependencyId))) })] })), blockedByTasks.length === 0 &&
511
541
  blockedByProjects.length === 0 &&
512
542
  blockingTasks.length === 0 &&
513
- relatedTasks.length === 0 && (_jsx("div", { className: "text-neutral-grey-50 text-[11px] italic", children: "No relationships defined." }))] })] })] })), _jsx(TaskAttachmentsSection, { task: task, canEdit: canEdit, onTaskChanged: onTaskChanged }), _jsxs("div", { className: "border-border-default/60 grid gap-4 border-t pt-6", children: [_jsx(CommentsList, { taskId: task.taskId, refreshKey: commentRefreshKey, currentUsername: editContext?.user?.name ?? null }), _jsxs("div", { className: "grid gap-3", children: [_jsx(MentionTextarea, { "aria-label": "Add comment", value: commentText, onValueChange: setCommentText, rows: 3, placeholder: COMMENT_INPUT_PLACEHOLDER, disabled: !canEdit, className: cn("focus-visible:ring-neutral-grey-50 resize-none text-[13px] leading-relaxed transition-all focus-visible:ring-1", inputBackgroundClass) }), _jsx("div", { className: "flex justify-end", children: _jsx(Button, { size: "sm", onClick: submitComment, disabled: !canEdit || !commentText.trim(), className: "h-8 px-4 text-xs font-medium", children: "Post comment" }) })] })] })] })) }), task && project && (_jsxs(_Fragment, { children: [_jsx(CreateTaskDialog, { open: isCreateSubtaskOpen, onOpenChange: setIsCreateSubtaskOpen, projectId: project.project.projectId, parentTaskId: task.taskId, availableParentTasks: allTasks, onCreated: onTaskChanged }), _jsx(AddDependencyDialog, { open: isAddDependencyOpen, onOpenChange: setIsAddDependencyOpen, task: task, allTasks: allTasks, onCreated: onTaskChanged })] }))] }));
543
+ relatedTasks.length === 0 && (_jsx("div", { className: "text-neutral-grey-50 text-[11px] italic", children: "No relationships defined." }))] })] })] })), _jsx(TaskAttachmentsSection, { task: task, canEdit: canEdit, onTaskChanged: onTaskChanged }), _jsxs("div", { className: "border-border-default/60 grid gap-4 border-t pt-6", children: [_jsx(CommentsList, { taskId: task.taskId, refreshKey: commentRefreshKey, currentUsername: editContext?.user?.name ?? null }), _jsxs("div", { className: "grid gap-3", children: [_jsx(CommentImageAttachments, { attachments: commentImagePaste.attachments, onRemove: commentImagePaste.removeAttachment, disabled: !canEdit }), _jsx(MentionTextarea, { "aria-label": "Add comment", value: commentText, onValueChange: setCommentText, onPaste: commentImagePaste.onPaste, onDragOver: commentImagePaste.onDragOver, onDrop: commentImagePaste.onDrop, rows: 3, placeholder: COMMENT_INPUT_PLACEHOLDER, disabled: !canEdit, className: cn("focus-visible:ring-neutral-grey-50 resize-none text-[13px] leading-relaxed transition-all focus-visible:ring-1", inputBackgroundClass) }), _jsx("div", { className: "flex justify-end", children: _jsx(Button, { size: "sm", onClick: submitComment, disabled: !canEdit ||
544
+ (!commentText.trim() &&
545
+ commentImagePaste.readyCount === 0) ||
546
+ commentImagePaste.uploading, title: commentImagePaste.uploading
547
+ ? "Waiting for image upload…"
548
+ : undefined, className: "h-8 px-4 text-xs font-medium", children: "Post comment" }) })] })] })] })) }), task && project && (_jsxs(_Fragment, { children: [_jsx(CreateTaskDialog, { open: isCreateSubtaskOpen, onOpenChange: setIsCreateSubtaskOpen, projectId: project.project.projectId, parentTaskId: task.taskId, availableParentTasks: allTasks, onCreated: onTaskChanged }), _jsx(AddDependencyDialog, { open: isAddDependencyOpen, onOpenChange: setIsAddDependencyOpen, task: task, allTasks: allTasks, onCreated: onTaskChanged })] }))] }));
514
549
  }
515
550
  //# sourceMappingURL=TaskDetailPanel.js.map