@vertesia/ui 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260725.083715Z
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filterBar.js +1 -1
- package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +2 -0
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/tabs.d.ts +12 -1
- package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/core/components/shadcn/tabs.js +12 -4
- package/lib/core/components/shadcn/tabs.js.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts +5 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js +2 -2
- package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.d.ts +5 -1
- package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.js +48 -11
- package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
- package/lib/features/agent/chat/DocumentEditingActionCard.d.ts +6 -0
- package/lib/features/agent/chat/DocumentEditingActionCard.d.ts.map +1 -0
- package/lib/features/agent/chat/DocumentEditingActionCard.js +129 -0
- package/lib/features/agent/chat/DocumentEditingActionCard.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentConversation.d.ts +19 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +125 -27
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts +45 -0
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js +40 -0
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +94 -49
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +9 -5
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts +25 -0
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js +33 -0
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +22 -24
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts +14 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js +21 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts +30 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +53 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +21 -2
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts +6 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js +29 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts +33 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js +129 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +7 -0
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.js +11 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.js +24 -9
- package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/features/agent/chat/index.d.ts +2 -1
- package/lib/features/agent/chat/index.d.ts.map +1 -1
- package/lib/features/agent/chat/index.js +3 -0
- package/lib/features/agent/chat/index.js.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.js +2 -2
- package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.d.ts +2 -1
- package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +86 -15
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts +16 -0
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js +116 -0
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts +7 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.js +13 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.js.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.d.ts +48 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.d.ts.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.js +720 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.js.map +1 -0
- package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
- package/lib/features/store/objects/components/TextEditorPanel.js +22 -9
- package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
- package/lib/features/store/objects/components/documentArtifactRefs.d.ts +26 -0
- package/lib/features/store/objects/components/documentArtifactRefs.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentArtifactRefs.js +52 -0
- package/lib/features/store/objects/components/documentArtifactRefs.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts +4 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.js +40 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingPrompts.d.ts +3 -0
- package/lib/features/store/objects/components/documentEditingPrompts.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingPrompts.js +13 -0
- package/lib/features/store/objects/components/documentEditingPrompts.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingRun.d.ts +27 -0
- package/lib/features/store/objects/components/documentEditingRun.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingRun.js +126 -0
- package/lib/features/store/objects/components/documentEditingRun.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingTarget.d.ts +20 -0
- package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingTarget.js +40 -0
- package/lib/features/store/objects/components/documentEditingTarget.js.map +1 -0
- package/lib/features/store/objects/components/index.d.ts +1 -0
- package/lib/features/store/objects/components/index.d.ts.map +1 -1
- package/lib/features/store/objects/components/index.js +1 -0
- package/lib/features/store/objects/components/index.js.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts +5 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.js +53 -29
- package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
- package/lib/features/store/objects/components/useDownloadFile.d.ts +2 -1
- package/lib/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
- package/lib/features/store/objects/components/useDownloadFile.js +3 -0
- package/lib/features/store/objects/components/useDownloadFile.js.map +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -1
- package/lib/i18n/locales/ar.json +118 -1
- package/lib/i18n/locales/de.json +118 -1
- package/lib/i18n/locales/en.json +118 -0
- package/lib/i18n/locales/es.json +118 -1
- package/lib/i18n/locales/fr.json +118 -1
- package/lib/i18n/locales/it.json +118 -1
- package/lib/i18n/locales/ja.json +118 -1
- package/lib/i18n/locales/ko.json +118 -1
- package/lib/i18n/locales/pt.json +118 -1
- package/lib/i18n/locales/ru.json +118 -1
- package/lib/i18n/locales/tr.json +118 -1
- package/lib/i18n/locales/zh-TW.json +118 -1
- package/lib/i18n/locales/zh.json +118 -1
- package/lib/rich-text/EditorToolbar.d.ts +37 -0
- package/lib/rich-text/EditorToolbar.d.ts.map +1 -0
- package/lib/rich-text/EditorToolbar.js +215 -0
- package/lib/rich-text/EditorToolbar.js.map +1 -0
- package/lib/rich-text/VertesiaRichTextEditor.d.ts +26 -0
- package/lib/rich-text/VertesiaRichTextEditor.d.ts.map +1 -0
- package/lib/rich-text/VertesiaRichTextEditor.js +67 -0
- package/lib/rich-text/VertesiaRichTextEditor.js.map +1 -0
- package/lib/rich-text/index.d.ts +2 -0
- package/lib/rich-text/index.d.ts.map +1 -0
- package/lib/rich-text/index.js +2 -0
- package/lib/rich-text/index.js.map +1 -0
- package/lib/vertesia-ui-core.js +2 -2
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +35 -30
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +14 -14
- package/lib/vertesia-ui-i18n.js.map +1 -1
- package/lib/vertesia-ui-rich-text.js +5 -0
- package/lib/vertesia-ui-rich-text.js.map +1 -0
- package/lib/vertesia-ui-widgets.js +25 -7
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/markdown/AgentResourceResolver.d.ts +31 -0
- package/lib/widgets/markdown/AgentResourceResolver.d.ts.map +1 -0
- package/lib/widgets/markdown/AgentResourceResolver.js +39 -0
- package/lib/widgets/markdown/AgentResourceResolver.js.map +1 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.d.ts +63 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.d.ts.map +1 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.js +582 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.js.map +1 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts +69 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts.map +1 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +374 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js.map +1 -0
- package/lib/widgets/markdown/MarkdownLink.d.ts +3 -1
- package/lib/widgets/markdown/MarkdownLink.d.ts.map +1 -1
- package/lib/widgets/markdown/MarkdownLink.js +41 -14
- package/lib/widgets/markdown/MarkdownLink.js.map +1 -1
- package/lib/widgets/markdown/MarkdownRenderer.d.ts +8 -1
- package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/lib/widgets/markdown/MarkdownRenderer.js +20 -4
- package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
- package/lib/widgets/markdown/index.d.ts +5 -1
- package/lib/widgets/markdown/index.d.ts.map +1 -1
- package/lib/widgets/markdown/index.js +5 -1
- package/lib/widgets/markdown/index.js.map +1 -1
- package/lib/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -1
- package/lib/widgets/markdown/normalizeCustomSchemeLinks.js +14 -2
- package/lib/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -1
- package/lib/widgets/markdown/textDiff.d.ts +52 -0
- package/lib/widgets/markdown/textDiff.d.ts.map +1 -0
- package/lib/widgets/markdown/textDiff.js +362 -0
- package/lib/widgets/markdown/textDiff.js.map +1 -0
- package/lib/widgets/markdown/useArtifactContent.d.ts +5 -3
- package/lib/widgets/markdown/useArtifactContent.d.ts.map +1 -1
- package/lib/widgets/markdown/useArtifactContent.js +6 -3
- package/lib/widgets/markdown/useArtifactContent.js.map +1 -1
- package/lib/widgets/markdown/useResolvedUrl.d.ts +1 -5
- package/lib/widgets/markdown/useResolvedUrl.d.ts.map +1 -1
- package/lib/widgets/markdown/useResolvedUrl.js +19 -31
- package/lib/widgets/markdown/useResolvedUrl.js.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
- package/package.json +13 -9
- package/src/__tests__/a11y.test.tsx +4 -1
- package/src/__tests__/axe-helper.ts +17 -7
- package/src/__tests__/setup.ts +25 -0
- package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
- package/src/core/components/shadcn/modal/dialog.tsx +3 -1
- package/src/core/components/shadcn/tabs.test.tsx +65 -0
- package/src/core/components/shadcn/tabs.tsx +25 -3
- package/src/features/agent/chat/AgentRightPanel.tsx +16 -1
- package/src/features/agent/chat/ArtifactsTab.test.tsx +55 -0
- package/src/features/agent/chat/ArtifactsTab.tsx +203 -52
- package/src/features/agent/chat/DocumentEditingActionCard.test.tsx +105 -0
- package/src/features/agent/chat/DocumentEditingActionCard.tsx +210 -0
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +237 -40
- package/src/features/agent/chat/ModernAgentConversation.tsx +247 -75
- package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.test.tsx +79 -0
- package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.tsx +94 -0
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +257 -34
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +217 -105
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +17 -0
- package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.test.tsx +44 -0
- package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.tsx +88 -0
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +30 -46
- package/src/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.tsx +40 -0
- package/src/features/agent/chat/ModernAgentOutput/ResourceChip.test.tsx +148 -0
- package/src/features/agent/chat/ModernAgentOutput/ResourceChip.tsx +141 -0
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +33 -1
- package/src/features/agent/chat/ModernAgentOutput/resourceLinks.tsx +43 -0
- package/src/features/agent/chat/ModernAgentOutput/resourceSummary.test.ts +229 -0
- package/src/features/agent/chat/ModernAgentOutput/resourceSummary.ts +152 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +17 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.ts +14 -1
- package/src/features/agent/chat/hooks/useAgentStream.test.tsx +188 -0
- package/src/features/agent/chat/hooks/useAgentStream.ts +28 -8
- package/src/features/agent/chat/index.ts +11 -0
- package/src/features/store/objects/DocumentSearchResults.tsx +2 -2
- package/src/features/store/objects/components/ContentOverview.tsx +216 -65
- package/src/features/store/objects/components/DocumentEditingConfigurationSelector.test.ts +34 -0
- package/src/features/store/objects/components/DocumentEditingConfigurationSelector.tsx +211 -0
- package/src/features/store/objects/components/DocumentEditingLockStatus.test.tsx +32 -0
- package/src/features/store/objects/components/DocumentEditingLockStatus.tsx +45 -0
- package/src/features/store/objects/components/DocumentEditingPanel.test.tsx +336 -0
- package/src/features/store/objects/components/DocumentEditingPanel.tsx +1236 -0
- package/src/features/store/objects/components/TextEditorPanel.test.tsx +48 -0
- package/src/features/store/objects/components/TextEditorPanel.tsx +41 -20
- package/src/features/store/objects/components/documentArtifactRefs.test.ts +65 -0
- package/src/features/store/objects/components/documentArtifactRefs.ts +72 -0
- package/src/features/store/objects/components/documentEditingAgentConfig.test.ts +28 -0
- package/src/features/store/objects/components/documentEditingAgentConfig.ts +41 -0
- package/src/features/store/objects/components/documentEditingPrompts.test.ts +26 -0
- package/src/features/store/objects/components/documentEditingPrompts.ts +12 -0
- package/src/features/store/objects/components/documentEditingRun.test.ts +176 -0
- package/src/features/store/objects/components/documentEditingRun.ts +184 -0
- package/src/features/store/objects/components/documentEditingTarget.test.ts +96 -0
- package/src/features/store/objects/components/documentEditingTarget.ts +63 -0
- package/src/features/store/objects/components/index.ts +1 -0
- package/src/features/store/objects/components/useContentPanelHooks.ts +52 -27
- package/src/features/store/objects/components/useDownloadFile.test.ts +20 -0
- package/src/features/store/objects/components/useDownloadFile.ts +5 -1
- package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +2 -2
- package/src/i18n/locales/ar.json +118 -1
- package/src/i18n/locales/de.json +118 -1
- package/src/i18n/locales/en.json +118 -0
- package/src/i18n/locales/es.json +118 -1
- package/src/i18n/locales/fr.json +118 -1
- package/src/i18n/locales/it.json +118 -1
- package/src/i18n/locales/ja.json +118 -1
- package/src/i18n/locales/ko.json +118 -1
- package/src/i18n/locales/pt.json +118 -1
- package/src/i18n/locales/ru.json +118 -1
- package/src/i18n/locales/tr.json +118 -1
- package/src/i18n/locales/zh-TW.json +118 -1
- package/src/i18n/locales/zh.json +118 -1
- package/src/rich-text/EditorToolbar.tsx +708 -0
- package/src/rich-text/VertesiaRichTextEditor.test.tsx +211 -0
- package/src/rich-text/VertesiaRichTextEditor.tsx +241 -0
- package/src/rich-text/index.ts +9 -0
- package/src/session/UserSession.test.ts +11 -11
- package/src/widgets/markdown/AgentResourceResolver.test.ts +24 -0
- package/src/widgets/markdown/AgentResourceResolver.tsx +70 -0
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +537 -0
- package/src/widgets/markdown/ArtifactEditingSurface.tsx +878 -0
- package/src/widgets/markdown/CollaborativeMarkdownRenderer.test.tsx +484 -0
- package/src/widgets/markdown/CollaborativeMarkdownRenderer.tsx +825 -0
- package/src/widgets/markdown/MarkdownLink.test.tsx +122 -0
- package/src/widgets/markdown/MarkdownLink.tsx +102 -17
- package/src/widgets/markdown/MarkdownRenderer.tsx +30 -3
- package/src/widgets/markdown/index.ts +39 -1
- package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +15 -2
- package/src/widgets/markdown/textDiff.test.ts +156 -0
- package/src/widgets/markdown/textDiff.ts +399 -0
- package/src/widgets/markdown/useArtifactContent.ts +9 -3
- package/src/widgets/markdown/useResolvedUrl.test.ts +29 -40
- package/src/widgets/markdown/useResolvedUrl.ts +33 -35
- package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
- package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +23 -18
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Element } from 'hast';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { Components } from 'react-markdown';
|
|
4
|
+
import { type MarkdownRendererProps } from './MarkdownRenderer';
|
|
5
|
+
export type MarkdownEditingResource = {
|
|
6
|
+
kind: 'store_document';
|
|
7
|
+
document_id: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'agent_artifact';
|
|
11
|
+
run_id: string;
|
|
12
|
+
path: string;
|
|
13
|
+
};
|
|
14
|
+
export type MarkdownBlockType = 'heading' | 'paragraph' | 'list'
|
|
15
|
+
/** Legacy anchors from before lists became the selectable unit. */
|
|
16
|
+
| 'list_item' | 'blockquote' | 'code_block' | 'table'
|
|
17
|
+
/** Thematic break / horizontal rule (`---`). */
|
|
18
|
+
| 'separator';
|
|
19
|
+
export interface MarkdownBlockAnchor {
|
|
20
|
+
block_id: string;
|
|
21
|
+
block_type: MarkdownBlockType;
|
|
22
|
+
heading_path?: string[];
|
|
23
|
+
source_range?: {
|
|
24
|
+
start: number;
|
|
25
|
+
end: number;
|
|
26
|
+
};
|
|
27
|
+
exact_text: string;
|
|
28
|
+
prefix?: string;
|
|
29
|
+
suffix?: string;
|
|
30
|
+
/** Zero-based occurrence among identical blocks under the same heading path. */
|
|
31
|
+
occurrence_index?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface MarkdownEditingAction {
|
|
34
|
+
operation_id: string;
|
|
35
|
+
resource: MarkdownEditingResource;
|
|
36
|
+
base_version?: string;
|
|
37
|
+
action: 'comment' | 'edit';
|
|
38
|
+
anchor: MarkdownBlockAnchor;
|
|
39
|
+
comment?: string;
|
|
40
|
+
user_change?: {
|
|
41
|
+
before: string;
|
|
42
|
+
after: string;
|
|
43
|
+
};
|
|
44
|
+
/** True when the client already committed this change to the resource. */
|
|
45
|
+
applied?: boolean;
|
|
46
|
+
/** Revision/document id produced by an applied change. */
|
|
47
|
+
updated_document_id?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface CollaborativeMarkdownRendererProps extends Omit<MarkdownRendererProps, 'children' | 'components'> {
|
|
50
|
+
children: string;
|
|
51
|
+
resource: MarkdownEditingResource;
|
|
52
|
+
baseVersion?: string;
|
|
53
|
+
components?: Components;
|
|
54
|
+
readOnly?: boolean;
|
|
55
|
+
/** Keep comments available when content mutations are read-only (for example while the agent is working). */
|
|
56
|
+
allowComments?: boolean;
|
|
57
|
+
highlightChangesFrom?: string;
|
|
58
|
+
highlightVersion?: number;
|
|
59
|
+
onAction: (action: MarkdownEditingAction) => void | Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
export declare function createMarkdownBlockAnchor(markdown: string, node: Element | undefined, blockType: MarkdownBlockType): MarkdownBlockAnchor;
|
|
62
|
+
/**
|
|
63
|
+
* Apply a user edit to the markdown source. Returns the updated markdown, or
|
|
64
|
+
* undefined when the anchored content cannot be located unambiguously.
|
|
65
|
+
*/
|
|
66
|
+
export declare function applyMarkdownEditingChange(markdown: string, action: MarkdownEditingAction): string | undefined;
|
|
67
|
+
export declare function formatMarkdownEditingAction(action: MarkdownEditingAction): string;
|
|
68
|
+
export declare function CollaborativeMarkdownRenderer({ children: markdown, resource, baseVersion, artifactRunId, components, readOnly, allowComments, highlightChangesFrom, highlightVersion, onAction, className, ...markdownProps }: CollaborativeMarkdownRendererProps): React.JSX.Element;
|
|
69
|
+
//# sourceMappingURL=CollaborativeMarkdownRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollaborativeMarkdownRenderer.d.ts","sourceRoot":"","sources":["../../../src/widgets/markdown/CollaborativeMarkdownRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Button, cn, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Textarea, VTooltip, } from '@vertesia/ui/core';
|
|
3
|
+
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
|
+
import { BarChart3, Code2, Heading2, Link, List, MessageSquare, Pencil, Pilcrow, Plus, Quote, Send, Table2, X, } from 'lucide-react';
|
|
5
|
+
import React, { createContext, lazy, Suspense, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
|
|
6
|
+
import { MarkdownRenderer } from './MarkdownRenderer';
|
|
7
|
+
/** Container blocks whose inner blocks must not offer their own selection controls. */
|
|
8
|
+
const CONTAINER_BLOCK_TYPES = new Set(['list', 'blockquote', 'table']);
|
|
9
|
+
const CollaborativeMarkdownContext = createContext(null);
|
|
10
|
+
/** True inside a selectable container block (list, blockquote, table). */
|
|
11
|
+
const NestedMarkdownBlockContext = createContext(false);
|
|
12
|
+
const MarkdownComponentEditor = lazy(() => import('@vertesia/ui/rich-text').then((module) => ({ default: module.VertesiaMarkdownComponentEditor })));
|
|
13
|
+
const CONTEXT_LENGTH = 80;
|
|
14
|
+
const ATX_HEADING = /^ {0,3}(#{1,6})[\t ]+(.+?)[\t ]*#*[\t ]*$/;
|
|
15
|
+
const FENCE = /^ {0,3}(`{3,}|~{3,})/;
|
|
16
|
+
function createOperationId() {
|
|
17
|
+
if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {
|
|
18
|
+
return crypto.randomUUID();
|
|
19
|
+
}
|
|
20
|
+
return `edit-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
21
|
+
}
|
|
22
|
+
function createMarkdownBlockLocator(markdown, node, blockType) {
|
|
23
|
+
const start = node?.position?.start.offset;
|
|
24
|
+
const end = node?.position?.end.offset;
|
|
25
|
+
const hasRange = typeof start === 'number' && typeof end === 'number' && start >= 0 && end >= start;
|
|
26
|
+
const exactText = hasRange ? markdown.slice(start, end) : '';
|
|
27
|
+
return {
|
|
28
|
+
block_id: hasRange ? `${blockType}:${start}:${end}` : `${blockType}:${createOperationId()}`,
|
|
29
|
+
block_type: blockType,
|
|
30
|
+
...(hasRange ? { source_range: { start, end } } : {}),
|
|
31
|
+
exact_text: exactText,
|
|
32
|
+
...(hasRange && start > 0 ? { prefix: markdown.slice(Math.max(0, start - CONTEXT_LENGTH), start) } : {}),
|
|
33
|
+
...(hasRange && end < markdown.length
|
|
34
|
+
? { suffix: markdown.slice(end, Math.min(markdown.length, end + CONTEXT_LENGTH)) }
|
|
35
|
+
: {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function enrichMarkdownBlockAnchor(markdown, anchor) {
|
|
39
|
+
const start = anchor.source_range?.start;
|
|
40
|
+
if (typeof start !== 'number')
|
|
41
|
+
return anchor;
|
|
42
|
+
const headingPath = getHeadingPath(markdown, start);
|
|
43
|
+
const occurrenceIndex = getOccurrenceIndex(markdown, anchor.exact_text, start, headingPath);
|
|
44
|
+
return {
|
|
45
|
+
...anchor,
|
|
46
|
+
...(headingPath.length > 0 ? { heading_path: headingPath } : {}),
|
|
47
|
+
occurrence_index: occurrenceIndex,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function createMarkdownBlockAnchor(markdown, node, blockType) {
|
|
51
|
+
return enrichMarkdownBlockAnchor(markdown, createMarkdownBlockLocator(markdown, node, blockType));
|
|
52
|
+
}
|
|
53
|
+
function getHeadingPath(markdown, offset) {
|
|
54
|
+
const headings = [];
|
|
55
|
+
let inFence = null;
|
|
56
|
+
let cursor = 0;
|
|
57
|
+
for (const line of markdown.slice(0, offset).split('\n')) {
|
|
58
|
+
const fenceMatch = FENCE.exec(line);
|
|
59
|
+
if (fenceMatch) {
|
|
60
|
+
const marker = fenceMatch[1]?.[0];
|
|
61
|
+
if (!inFence)
|
|
62
|
+
inFence = marker ?? null;
|
|
63
|
+
else if (marker === inFence)
|
|
64
|
+
inFence = null;
|
|
65
|
+
cursor += line.length + 1;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (!inFence) {
|
|
69
|
+
const headingMatch = ATX_HEADING.exec(line);
|
|
70
|
+
if (headingMatch) {
|
|
71
|
+
const level = headingMatch[1]?.length ?? 1;
|
|
72
|
+
const title = headingMatch[2]?.trim();
|
|
73
|
+
if (title) {
|
|
74
|
+
headings.length = level - 1;
|
|
75
|
+
headings[level - 1] = title;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
cursor += line.length + 1;
|
|
80
|
+
if (cursor > offset)
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
return headings.filter((heading) => Boolean(heading));
|
|
84
|
+
}
|
|
85
|
+
function getOccurrenceIndex(markdown, exactText, offset, headingPath) {
|
|
86
|
+
if (!exactText)
|
|
87
|
+
return 0;
|
|
88
|
+
let occurrenceIndex = 0;
|
|
89
|
+
let candidate = markdown.indexOf(exactText);
|
|
90
|
+
while (candidate >= 0 && candidate < offset) {
|
|
91
|
+
const candidateHeadingPath = getHeadingPath(markdown, candidate);
|
|
92
|
+
if (candidateHeadingPath.length === headingPath.length &&
|
|
93
|
+
candidateHeadingPath.every((heading, index) => heading === headingPath[index])) {
|
|
94
|
+
occurrenceIndex++;
|
|
95
|
+
}
|
|
96
|
+
candidate = markdown.indexOf(exactText, candidate + Math.max(1, exactText.length));
|
|
97
|
+
}
|
|
98
|
+
return occurrenceIndex;
|
|
99
|
+
}
|
|
100
|
+
function resourceReference(resource) {
|
|
101
|
+
if (resource.kind === 'store_document') {
|
|
102
|
+
return `store:${resource.document_id}`;
|
|
103
|
+
}
|
|
104
|
+
return `artifact:${resource.path} (run ${resource.run_id})`;
|
|
105
|
+
}
|
|
106
|
+
function markdownFence(...values) {
|
|
107
|
+
let longestRun = 0;
|
|
108
|
+
for (const value of values) {
|
|
109
|
+
for (const match of value.matchAll(/`+/g)) {
|
|
110
|
+
longestRun = Math.max(longestRun, match[0].length);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return '`'.repeat(Math.max(3, longestRun + 1));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Apply a user edit to the markdown source. Returns the updated markdown, or
|
|
117
|
+
* undefined when the anchored content cannot be located unambiguously.
|
|
118
|
+
*/
|
|
119
|
+
export function applyMarkdownEditingChange(markdown, action) {
|
|
120
|
+
const change = action.user_change;
|
|
121
|
+
if (!change)
|
|
122
|
+
return undefined;
|
|
123
|
+
const { before, after } = change;
|
|
124
|
+
const range = action.anchor.source_range;
|
|
125
|
+
if (range && markdown.slice(range.start, range.end) === before) {
|
|
126
|
+
return markdown.slice(0, range.start) + after + markdown.slice(range.end);
|
|
127
|
+
}
|
|
128
|
+
const prefix = action.anchor.prefix;
|
|
129
|
+
if (prefix) {
|
|
130
|
+
const anchored = markdown.indexOf(prefix + before);
|
|
131
|
+
if (anchored >= 0 && markdown.indexOf(prefix + before, anchored + 1) < 0) {
|
|
132
|
+
const start = anchored + prefix.length;
|
|
133
|
+
return markdown.slice(0, start) + after + markdown.slice(start + before.length);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const first = markdown.indexOf(before);
|
|
137
|
+
if (first < 0 || markdown.indexOf(before, first + 1) >= 0)
|
|
138
|
+
return undefined;
|
|
139
|
+
return markdown.slice(0, first) + after + markdown.slice(first + before.length);
|
|
140
|
+
}
|
|
141
|
+
export function formatMarkdownEditingAction(action) {
|
|
142
|
+
const reference = resourceReference(action.resource);
|
|
143
|
+
const location = action.anchor.block_type.replace('_', ' ');
|
|
144
|
+
if (action.action === 'edit' && action.user_change && action.applied) {
|
|
145
|
+
const fence = markdownFence(action.user_change.before, action.user_change.after);
|
|
146
|
+
return [
|
|
147
|
+
`I already edited the ${location} in ${reference} myself and the change is saved` +
|
|
148
|
+
`${action.updated_document_id ? ` as revision ${action.updated_document_id}` : ''}.`,
|
|
149
|
+
`Operation: ${action.operation_id}`,
|
|
150
|
+
'This is a notification only. Do not apply this change again and do not modify the document in ' +
|
|
151
|
+
'response; acknowledge briefly and use the latest content going forward.',
|
|
152
|
+
'',
|
|
153
|
+
'Before:',
|
|
154
|
+
`${fence}markdown`,
|
|
155
|
+
action.user_change.before,
|
|
156
|
+
fence,
|
|
157
|
+
'',
|
|
158
|
+
'After:',
|
|
159
|
+
`${fence}markdown`,
|
|
160
|
+
action.user_change.after,
|
|
161
|
+
fence,
|
|
162
|
+
].join('\n');
|
|
163
|
+
}
|
|
164
|
+
if (action.action === 'edit' && action.user_change) {
|
|
165
|
+
const fence = markdownFence(action.user_change.before, action.user_change.after);
|
|
166
|
+
return [
|
|
167
|
+
`Apply my edit to the ${location} in ${reference}, then update the resource.`,
|
|
168
|
+
`Operation: ${action.operation_id}`,
|
|
169
|
+
'Preserve all content outside the selected block exactly; do not regenerate unrelated sections.',
|
|
170
|
+
'',
|
|
171
|
+
'Before:',
|
|
172
|
+
`${fence}markdown`,
|
|
173
|
+
action.user_change.before,
|
|
174
|
+
fence,
|
|
175
|
+
'',
|
|
176
|
+
'After:',
|
|
177
|
+
`${fence}markdown`,
|
|
178
|
+
action.user_change.after,
|
|
179
|
+
fence,
|
|
180
|
+
].join('\n');
|
|
181
|
+
}
|
|
182
|
+
const fence = markdownFence(action.anchor.exact_text);
|
|
183
|
+
return [
|
|
184
|
+
`Update the ${location} in ${reference} based on this comment:`,
|
|
185
|
+
`Operation: ${action.operation_id}`,
|
|
186
|
+
'Preserve all content outside the selected block exactly; do not regenerate unrelated sections.',
|
|
187
|
+
'',
|
|
188
|
+
action.comment ?? '',
|
|
189
|
+
'',
|
|
190
|
+
'Selected content:',
|
|
191
|
+
`${fence}markdown`,
|
|
192
|
+
action.anchor.exact_text,
|
|
193
|
+
fence,
|
|
194
|
+
].join('\n');
|
|
195
|
+
}
|
|
196
|
+
function useCollaborativeMarkdownContext() {
|
|
197
|
+
const context = useContext(CollaborativeMarkdownContext);
|
|
198
|
+
if (!context) {
|
|
199
|
+
throw new Error('Collaborative Markdown blocks must be rendered inside CollaborativeMarkdownRenderer');
|
|
200
|
+
}
|
|
201
|
+
return context;
|
|
202
|
+
}
|
|
203
|
+
function CollaborativeBlockEditor({ anchor, mode, initialDraft }) {
|
|
204
|
+
const { t } = useUITranslation();
|
|
205
|
+
const { artifactRunId, readOnly, allowComments, cancelEditing, submit, updateDraft } = useCollaborativeMarkdownContext();
|
|
206
|
+
const [draft, setDraft] = useState(mode === 'edit' ? anchor.exact_text : mode === 'insert' ? (initialDraft ?? '') : '');
|
|
207
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
208
|
+
const isActionDisabled = mode === 'comment' ? !allowComments : readOnly;
|
|
209
|
+
const changeDraft = (nextDraft) => {
|
|
210
|
+
setDraft(nextDraft);
|
|
211
|
+
updateDraft(nextDraft);
|
|
212
|
+
};
|
|
213
|
+
const submitDraft = async () => {
|
|
214
|
+
if (!draft.trim() || isSubmitting)
|
|
215
|
+
return;
|
|
216
|
+
setIsSubmitting(true);
|
|
217
|
+
try {
|
|
218
|
+
await submit(anchor, mode, mode === 'comment' ? draft.trim() : draft);
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
setIsSubmitting(false);
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
return (_jsxs("div", { className: "mb-2 space-y-2", children: [mode === 'edit' || mode === 'insert' ? (_jsx(Suspense, { fallback: _jsx(Textarea, { value: draft, onChange: (event) => changeDraft(event.target.value), placeholder: t('agent.editSelectionPlaceholder'), rows: 6, autoFocus: true }), children: _jsx(MarkdownComponentEditor, { value: draft, onChange: changeDraft, artifactRunId: artifactRunId, editable: !readOnly, externalValueSync: "manual", autoFocus: true }) })) : (_jsx(Textarea, { value: draft, onChange: (event) => changeDraft(event.target.value), placeholder: t('agent.commentOnSelectionPlaceholder'), rows: 3, autoFocus: true, disabled: !allowComments })), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: cancelEditing, disabled: isSubmitting, children: [_jsx(X, { className: "me-1 size-4" }), t('store.cancelEdit')] }), _jsxs(Button, { size: "sm", onClick: () => void submitDraft(), disabled: isActionDisabled || !draft.trim() || isSubmitting, children: [_jsx(Send, { className: "me-1 size-4" }), t('agent.send')] })] })] }));
|
|
225
|
+
}
|
|
226
|
+
function createBlockComponent(tag, blockType, ExistingComponent) {
|
|
227
|
+
return function CollaborativeBlock({ node, children: blockChildren, ...props }) {
|
|
228
|
+
const { t } = useUITranslation();
|
|
229
|
+
const { markdown, readOnly, allowComments, activeEditing, highlightChangesFrom, flashChangedBlocks, beginEditing, } = useCollaborativeMarkdownContext();
|
|
230
|
+
const isNested = useContext(NestedMarkdownBlockContext);
|
|
231
|
+
const rendered = ExistingComponent
|
|
232
|
+
? React.createElement(ExistingComponent, { node, ...props }, blockChildren)
|
|
233
|
+
: React.createElement(tag, props, blockChildren);
|
|
234
|
+
// Blocks inside a selectable container (a bullet's paragraph, a nested list, a
|
|
235
|
+
// quoted paragraph) are edited through their container, not individually.
|
|
236
|
+
if (isNested)
|
|
237
|
+
return rendered;
|
|
238
|
+
const anchor = createMarkdownBlockLocator(markdown, node, blockType);
|
|
239
|
+
const hasAnchor = Boolean(anchor.source_range && anchor.exact_text);
|
|
240
|
+
const isEditable = !readOnly && hasAnchor;
|
|
241
|
+
const isCommentable = allowComments && hasAnchor;
|
|
242
|
+
const isSelected = activeEditing?.anchor.block_id === anchor.block_id;
|
|
243
|
+
// While editing a block's content, the editor replaces the rendered block. Comment/insert
|
|
244
|
+
// keep the rendered block visible as context.
|
|
245
|
+
const isEditingContent = isSelected && activeEditing?.mode === 'edit';
|
|
246
|
+
const isChanged = flashChangedBlocks &&
|
|
247
|
+
Boolean(anchor.exact_text) &&
|
|
248
|
+
Boolean(highlightChangesFrom) &&
|
|
249
|
+
!highlightChangesFrom?.includes(anchor.exact_text);
|
|
250
|
+
const containerClassName = cn('group/collab relative rounded-md border transition-colors duration-700',
|
|
251
|
+
// Negative margins keep the document's flow spacing while giving the hover/selection box
|
|
252
|
+
// padding on all sides — otherwise text (notably the first block, whose prose margin-top
|
|
253
|
+
// is 0) sits flush against the top of its highlight box.
|
|
254
|
+
'-mx-2 -my-1 px-2 py-1', isEditingContent
|
|
255
|
+
? 'border-transparent'
|
|
256
|
+
: isSelected
|
|
257
|
+
? 'border-info bg-mixer-info/5'
|
|
258
|
+
: isEditable || isCommentable
|
|
259
|
+
? 'border-transparent hover:border-mixer-info/30 hover:bg-mixer-muted/10'
|
|
260
|
+
: 'border-transparent', isChanged && 'border-mixer-success/50 bg-mixer-success/15 ring-1 ring-mixer-success/20');
|
|
261
|
+
const showControls = isEditable || isCommentable || isSelected;
|
|
262
|
+
const controls = showControls ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: cn('absolute end-1 top-1 z-10 flex items-center gap-0.5 rounded-md border bg-background p-0.5 shadow-sm', ((!isEditable && !isCommentable) || isEditingContent) && 'hidden', isSelected
|
|
263
|
+
? 'opacity-100'
|
|
264
|
+
: 'pointer-events-none opacity-0 group-hover/collab:pointer-events-auto group-hover/collab:opacity-100 group-focus-within/collab:pointer-events-auto group-focus-within/collab:opacity-100'), children: [isCommentable ? (_jsx(VTooltip, { description: t('agent.commentOnSelection'), asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", "aria-label": t('agent.commentOnSelection'), onClick: () => beginEditing(anchor, 'comment'), children: _jsx(MessageSquare, { className: "size-4" }) }) })) : null, isEditable ? (_jsx(VTooltip, { description: t('agent.editSelection'), asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", "aria-label": t('agent.editSelection'), onClick: () => beginEditing(anchor, 'edit'), children: _jsx(Pencil, { className: "size-4" }) }) })) : null, isEditable ? (_jsxs(DropdownMenu, { children: [_jsx(VTooltip, { description: t('agent.insertComponent'), asChild: true, children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", "aria-label": t('agent.insertComponent'), children: _jsx(Plus, { className: "size-4" }) }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-52", children: [_jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', t('richText.paragraph')), children: [_jsx(Pilcrow, {}), t('richText.paragraph')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `## ${t('richText.heading2')}`), children: [_jsx(Heading2, {}), t('richText.heading2')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `- ${t('richText.bulletList')}`), children: [_jsx(List, {}), t('richText.bulletList')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `> ${t('richText.blockquote')}`), children: [_jsx(Quote, {}), t('richText.blockquote')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', '```\nCode\n```'), children: [_jsx(Code2, {}), t('richText.codeBlock')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', '| Column | Value |\n| --- | --- |\n| A | 1 |'), children: [_jsx(Table2, {}), t('richText.table')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', `[${t('agent.insertLink')}](https://example.com)`), children: [_jsx(Link, {}), t('agent.insertLink')] }), _jsxs(DropdownMenuItem, { onClick: () => beginEditing(anchor, 'insert', '```chart\n{"$schema":"https://vega.github.io/schema/vega-lite/v5.json","data":{"values":[{"category":"A","value":1}]},"mark":"bar","encoding":{"x":{"field":"category","type":"nominal"},"y":{"field":"value","type":"quantitative"}}}\n```'), children: [_jsx(BarChart3, {}), t('agent.insertChart')] })] })] })) : null] }), isSelected && activeEditing ? (_jsx(CollaborativeBlockEditor, { anchor: activeEditing.anchor, mode: activeEditing.mode, initialDraft: activeEditing.initialDraft }, `${activeEditing.anchor.block_id}:${activeEditing.mode}:${activeEditing.initialDraft ?? ''}`)) : null] })) : null;
|
|
265
|
+
const content = CONTAINER_BLOCK_TYPES.has(blockType) ? (_jsx(NestedMarkdownBlockContext.Provider, { value: true, children: rendered })) : (rendered);
|
|
266
|
+
return (_jsxs("div", { className: containerClassName, "data-collaborative-block": anchor.block_id, children: [isEditingContent ? null : content, controls] }));
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
export function CollaborativeMarkdownRenderer({ children: markdown, resource, baseVersion, artifactRunId, components, readOnly = false, allowComments = !readOnly, highlightChangesFrom, highlightVersion = 0, onAction, className, ...markdownProps }) {
|
|
270
|
+
const { t } = useUITranslation();
|
|
271
|
+
const [activeEditing, setActiveEditing] = useState();
|
|
272
|
+
const [orphanedDraft, setOrphanedDraft] = useState();
|
|
273
|
+
const [flashChangedBlocks, setFlashChangedBlocks] = useState(false);
|
|
274
|
+
const draftRef = useRef('');
|
|
275
|
+
useEffect(() => {
|
|
276
|
+
if (!highlightChangesFrom || highlightVersion <= 0)
|
|
277
|
+
return;
|
|
278
|
+
setFlashChangedBlocks(true);
|
|
279
|
+
const timeoutId = window.setTimeout(() => setFlashChangedBlocks(false), 1800);
|
|
280
|
+
return () => window.clearTimeout(timeoutId);
|
|
281
|
+
}, [highlightChangesFrom, highlightVersion]);
|
|
282
|
+
useEffect(() => {
|
|
283
|
+
const range = activeEditing?.anchor.source_range;
|
|
284
|
+
if (!activeEditing || !range)
|
|
285
|
+
return;
|
|
286
|
+
if (markdown.slice(range.start, range.end) === activeEditing.anchor.exact_text)
|
|
287
|
+
return;
|
|
288
|
+
const draft = draftRef.current;
|
|
289
|
+
const initialDraft = activeEditing.mode === 'edit'
|
|
290
|
+
? activeEditing.anchor.exact_text
|
|
291
|
+
: activeEditing.mode === 'insert'
|
|
292
|
+
? (activeEditing.initialDraft ?? '')
|
|
293
|
+
: '';
|
|
294
|
+
if (draft.trim() && draft !== initialDraft) {
|
|
295
|
+
setOrphanedDraft({ ...activeEditing, draft });
|
|
296
|
+
}
|
|
297
|
+
setActiveEditing(undefined);
|
|
298
|
+
}, [activeEditing, markdown]);
|
|
299
|
+
const collaborativeComponents = useMemo(() => {
|
|
300
|
+
return {
|
|
301
|
+
...components,
|
|
302
|
+
p: createBlockComponent('p', 'paragraph', components?.p),
|
|
303
|
+
h1: createBlockComponent('h1', 'heading', components?.h1),
|
|
304
|
+
h2: createBlockComponent('h2', 'heading', components?.h2),
|
|
305
|
+
h3: createBlockComponent('h3', 'heading', components?.h3),
|
|
306
|
+
h4: createBlockComponent('h4', 'heading', components?.h4),
|
|
307
|
+
h5: createBlockComponent('h5', 'heading', components?.h5),
|
|
308
|
+
h6: createBlockComponent('h6', 'heading', components?.h6),
|
|
309
|
+
ul: createBlockComponent('ul', 'list', components?.ul),
|
|
310
|
+
ol: createBlockComponent('ol', 'list', components?.ol),
|
|
311
|
+
blockquote: createBlockComponent('blockquote', 'blockquote', components?.blockquote),
|
|
312
|
+
pre: createBlockComponent('pre', 'code_block', components?.pre),
|
|
313
|
+
table: createBlockComponent('table', 'table', components?.table),
|
|
314
|
+
hr: createBlockComponent('hr', 'separator', components?.hr),
|
|
315
|
+
};
|
|
316
|
+
}, [components]);
|
|
317
|
+
const beginEditing = useCallback((anchor, mode, initialDraft) => {
|
|
318
|
+
if ((mode === 'comment' && !allowComments) || (mode !== 'comment' && readOnly))
|
|
319
|
+
return;
|
|
320
|
+
const enrichedAnchor = enrichMarkdownBlockAnchor(markdown, anchor);
|
|
321
|
+
draftRef.current = mode === 'edit' ? enrichedAnchor.exact_text : (initialDraft ?? '');
|
|
322
|
+
setActiveEditing({ anchor: enrichedAnchor, mode, initialDraft });
|
|
323
|
+
}, [allowComments, markdown, readOnly]);
|
|
324
|
+
const cancelEditing = useCallback(() => {
|
|
325
|
+
draftRef.current = '';
|
|
326
|
+
setActiveEditing(undefined);
|
|
327
|
+
}, []);
|
|
328
|
+
const updateDraft = useCallback((draft) => {
|
|
329
|
+
draftRef.current = draft;
|
|
330
|
+
}, []);
|
|
331
|
+
const submit = useCallback(async (anchor, mode, draft) => {
|
|
332
|
+
if ((mode === 'comment' && !allowComments) || (mode !== 'comment' && readOnly))
|
|
333
|
+
return;
|
|
334
|
+
const after = mode === 'insert' ? `${anchor.exact_text.replace(/\s+$/, '')}\n\n${draft.trim()}` : draft;
|
|
335
|
+
const action = {
|
|
336
|
+
operation_id: createOperationId(),
|
|
337
|
+
resource,
|
|
338
|
+
base_version: baseVersion,
|
|
339
|
+
action: mode === 'insert' ? 'edit' : mode,
|
|
340
|
+
anchor,
|
|
341
|
+
...(mode === 'comment' ? { comment: draft } : { user_change: { before: anchor.exact_text, after } }),
|
|
342
|
+
};
|
|
343
|
+
await onAction(action);
|
|
344
|
+
draftRef.current = '';
|
|
345
|
+
setActiveEditing(undefined);
|
|
346
|
+
}, [allowComments, baseVersion, onAction, readOnly, resource]);
|
|
347
|
+
const contextValue = useMemo(() => ({
|
|
348
|
+
markdown,
|
|
349
|
+
artifactRunId,
|
|
350
|
+
readOnly,
|
|
351
|
+
allowComments,
|
|
352
|
+
activeEditing,
|
|
353
|
+
highlightChangesFrom,
|
|
354
|
+
flashChangedBlocks,
|
|
355
|
+
beginEditing,
|
|
356
|
+
cancelEditing,
|
|
357
|
+
updateDraft,
|
|
358
|
+
submit,
|
|
359
|
+
}), [
|
|
360
|
+
activeEditing,
|
|
361
|
+
allowComments,
|
|
362
|
+
artifactRunId,
|
|
363
|
+
beginEditing,
|
|
364
|
+
cancelEditing,
|
|
365
|
+
flashChangedBlocks,
|
|
366
|
+
highlightChangesFrom,
|
|
367
|
+
markdown,
|
|
368
|
+
readOnly,
|
|
369
|
+
submit,
|
|
370
|
+
updateDraft,
|
|
371
|
+
]);
|
|
372
|
+
return (_jsxs(CollaborativeMarkdownContext.Provider, { value: contextValue, children: [orphanedDraft ? (_jsxs("div", { className: "not-prose mb-3 rounded-md border border-mixer-attention/35 bg-mixer-attention/10 p-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: t('agent.documentEditingDraftPreserved') }), _jsx("div", { className: "mt-0.5 text-xs leading-4 text-muted", children: t('agent.documentEditingDraftPreservedDescription') })] }), _jsx(Button, { variant: "ghost", size: "sm", className: "h-7 w-7 shrink-0 p-0", onClick: () => setOrphanedDraft(undefined), "aria-label": t('agent.close'), children: _jsx(X, { className: "size-4" }) })] }), _jsx(Textarea, { className: "mt-2", value: orphanedDraft.draft, onChange: (event) => setOrphanedDraft((current) => current ? { ...current, draft: event.target.value } : current), rows: 4 })] })) : null, _jsx(MarkdownRenderer, { ...markdownProps, artifactRunId: artifactRunId, className: className, components: collaborativeComponents, preserveSourcePositions: true, children: markdown })] }));
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=CollaborativeMarkdownRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollaborativeMarkdownRenderer.js","sourceRoot":"","sources":["../../../src/widgets/markdown/CollaborativeMarkdownRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export interface MarkdownLinkProps {
|
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
className?: string;
|
|
8
8
|
artifactRunId?: string;
|
|
9
|
+
/** Open a Markdown artifact in the host artifact viewer instead of downloading it. */
|
|
10
|
+
onArtifactOpen?: (path: string) => void;
|
|
9
11
|
/** Existing link component to delegate to for standard URLs */
|
|
10
12
|
ExistingLink?: React.ComponentType<MarkdownLinkProps>;
|
|
11
13
|
}
|
|
@@ -13,5 +15,5 @@ export interface MarkdownLinkProps {
|
|
|
13
15
|
* Markdown link component with support for custom URL schemes.
|
|
14
16
|
* Handles artifact:, image:, store:, document://, and collection: URLs.
|
|
15
17
|
*/
|
|
16
|
-
export declare function MarkdownLink({ node, href, children, className, artifactRunId, ExistingLink, ...rest }: MarkdownLinkProps): React.JSX.Element;
|
|
18
|
+
export declare function MarkdownLink({ node, href, children, className, artifactRunId, onArtifactOpen, ExistingLink, ...rest }: MarkdownLinkProps): React.JSX.Element;
|
|
17
19
|
//# sourceMappingURL=MarkdownLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownLink.d.ts","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownLink.d.ts","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,GAAG,IAAI,EACV,EAAE,iBAAiB,qBAiDnB"}
|
|
@@ -1,35 +1,51 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@vertesia/ui/core';
|
|
3
|
+
import { parseAgentResourceHref, useAgentResourceResolver } from './AgentResourceResolver';
|
|
2
4
|
import { CodeBlockPlaceholder } from './CodeBlockPlaceholder';
|
|
3
|
-
import {
|
|
5
|
+
import { parseUrlScheme, useResolvedUrl } from './useResolvedUrl';
|
|
4
6
|
/**
|
|
5
7
|
* Markdown link component with support for custom URL schemes.
|
|
6
8
|
* Handles artifact:, image:, store:, document://, and collection: URLs.
|
|
7
9
|
*/
|
|
8
|
-
export function MarkdownLink({ node, href, children, className, artifactRunId, ExistingLink, ...rest }) {
|
|
10
|
+
export function MarkdownLink({ node, href, children, className, artifactRunId, onArtifactOpen, ExistingLink, ...rest }) {
|
|
9
11
|
const rawHref = href || '';
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (mappedRoute) {
|
|
14
|
-
if (typeof ExistingLink === 'function') {
|
|
15
|
-
return (_jsx(ExistingLink, { node: node, href: mappedRoute, ...rest, children: children }));
|
|
16
|
-
}
|
|
17
|
-
return (_jsx("a", { href: mappedRoute, ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
|
|
12
|
+
const resource = parseAgentResourceHref(rawHref);
|
|
13
|
+
if (resource) {
|
|
14
|
+
return (_jsx(AgentResourceMarkdownLink, { resource: resource, rawHref: rawHref, artifactRunId: artifactRunId, className: className, ExistingLink: ExistingLink, rest: rest, children: children }));
|
|
18
15
|
}
|
|
16
|
+
const { scheme, path } = parseUrlScheme(rawHref);
|
|
19
17
|
// For standard URLs, delegate to existing component or render directly
|
|
20
18
|
if (scheme === 'standard') {
|
|
21
19
|
if (typeof ExistingLink === 'function') {
|
|
22
|
-
return (_jsx(ExistingLink, { node: node, href: href, ...rest, children: children }));
|
|
20
|
+
return (_jsx(ExistingLink, { node: node, href: href, className: className, ...rest, children: children }));
|
|
23
21
|
}
|
|
24
22
|
return (_jsx("a", { href: href, ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
|
|
25
23
|
}
|
|
26
24
|
// For artifact: and image: URLs, use the resolver
|
|
27
|
-
return (_jsx(ResolvedLink, { rawHref: rawHref, artifactRunId: artifactRunId, className: className, rest: rest, children: children }));
|
|
25
|
+
return (_jsx(ResolvedLink, { rawHref: rawHref, artifactRunId: artifactRunId, artifactPath: scheme === 'artifact' ? path : undefined, onArtifactOpen: onArtifactOpen, className: className, rest: rest, children: children }));
|
|
26
|
+
}
|
|
27
|
+
function AgentResourceMarkdownLink({ resource, rawHref, artifactRunId, className, children, ExistingLink, rest, }) {
|
|
28
|
+
const resolve = useAgentResourceResolver();
|
|
29
|
+
const target = resolve(resource, {
|
|
30
|
+
workflowRunId: artifactRunId,
|
|
31
|
+
source: 'markdown',
|
|
32
|
+
rawHref,
|
|
33
|
+
});
|
|
34
|
+
if (target.kind === 'navigate') {
|
|
35
|
+
if (typeof ExistingLink === 'function') {
|
|
36
|
+
return (_jsx(ExistingLink, { href: target.href, className: className, ...rest, children: children }));
|
|
37
|
+
}
|
|
38
|
+
return (_jsx("a", { href: target.href, ...rest, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
|
|
39
|
+
}
|
|
40
|
+
if (target.kind === 'activate') {
|
|
41
|
+
return (_jsx(Button, { variant: "link", size: "none", className: className, onClick: target.onActivate, children: children }));
|
|
42
|
+
}
|
|
43
|
+
return _jsx("span", { className: className, children: children });
|
|
28
44
|
}
|
|
29
45
|
/**
|
|
30
46
|
* Internal component for links that need async URL resolution
|
|
31
47
|
*/
|
|
32
|
-
function ResolvedLink({ rawHref, artifactRunId, className, children, rest, }) {
|
|
48
|
+
function ResolvedLink({ rawHref, artifactRunId, artifactPath, onArtifactOpen, className, children, rest, }) {
|
|
33
49
|
const { url, isLoading, error, retry } = useResolvedUrl({
|
|
34
50
|
rawUrl: rawHref,
|
|
35
51
|
artifactRunId,
|
|
@@ -41,6 +57,17 @@ function ResolvedLink({ rawHref, artifactRunId, className, children, rest, }) {
|
|
|
41
57
|
if (error) {
|
|
42
58
|
return (_jsx("span", { className: "inline-flex items-center gap-1", children: _jsx(CodeBlockPlaceholder, { type: "link", error: error, onRetry: retry }) }));
|
|
43
59
|
}
|
|
44
|
-
return (_jsx("a", { href: url || '#', ...rest, className: className, target: "_blank", rel: "noopener noreferrer",
|
|
60
|
+
return (_jsx("a", { href: url || '#', ...rest, className: className, target: "_blank", rel: "noopener noreferrer", onClick: (event) => {
|
|
61
|
+
if (artifactPath &&
|
|
62
|
+
/\.md$/i.test(artifactPath) &&
|
|
63
|
+
onArtifactOpen &&
|
|
64
|
+
!event.metaKey &&
|
|
65
|
+
!event.ctrlKey &&
|
|
66
|
+
!event.shiftKey &&
|
|
67
|
+
event.button === 0) {
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
onArtifactOpen(artifactPath);
|
|
70
|
+
}
|
|
71
|
+
}, children: children }));
|
|
45
72
|
}
|
|
46
73
|
//# sourceMappingURL=MarkdownLink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownLink.js","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"MarkdownLink.js","sourceRoot":"","sources":["../../../src/widgets/markdown/MarkdownLink.tsx"],"names":[],"mappings":"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"}
|