@agent-native/toolkit 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -1
- package/dist/chat-history/ChatHistoryList.d.ts +103 -0
- package/dist/chat-history/ChatHistoryList.d.ts.map +1 -0
- package/dist/chat-history/ChatHistoryList.js +109 -0
- package/dist/chat-history/ChatHistoryList.js.map +1 -0
- package/dist/chat-history/ChatHistoryList.spec.d.ts +2 -0
- package/dist/chat-history/ChatHistoryList.spec.d.ts.map +1 -0
- package/dist/chat-history/ChatHistoryList.spec.js +283 -0
- package/dist/chat-history/ChatHistoryList.spec.js.map +1 -0
- package/dist/chat-history/index.d.ts +2 -0
- package/dist/chat-history/index.d.ts.map +1 -0
- package/dist/chat-history/index.js +2 -0
- package/dist/chat-history/index.js.map +1 -0
- package/dist/chat-history.css +314 -0
- package/dist/composer/AgentComposerFrame.d.ts +19 -0
- package/dist/composer/AgentComposerFrame.d.ts.map +1 -0
- package/dist/composer/AgentComposerFrame.js +14 -0
- package/dist/composer/AgentComposerFrame.js.map +1 -0
- package/dist/composer/ComposerPlusMenu.d.ts +17 -0
- package/dist/composer/ComposerPlusMenu.d.ts.map +1 -0
- package/dist/composer/ComposerPlusMenu.js +501 -0
- package/dist/composer/ComposerPlusMenu.js.map +1 -0
- package/dist/composer/MentionPopover.d.ts +29 -0
- package/dist/composer/MentionPopover.d.ts.map +1 -0
- package/dist/composer/MentionPopover.js +180 -0
- package/dist/composer/MentionPopover.js.map +1 -0
- package/dist/composer/PastedTextChip.d.ts +9 -0
- package/dist/composer/PastedTextChip.d.ts.map +1 -0
- package/dist/composer/PastedTextChip.js +47 -0
- package/dist/composer/PastedTextChip.js.map +1 -0
- package/dist/composer/PromptComposer.d.ts +114 -0
- package/dist/composer/PromptComposer.d.ts.map +1 -0
- package/dist/composer/PromptComposer.js +302 -0
- package/dist/composer/PromptComposer.js.map +1 -0
- package/dist/composer/PromptComposer.spec.d.ts +2 -0
- package/dist/composer/PromptComposer.spec.d.ts.map +1 -0
- package/dist/composer/PromptComposer.spec.js +64 -0
- package/dist/composer/PromptComposer.spec.js.map +1 -0
- package/dist/composer/RealtimeVoiceMode.d.ts +104 -0
- package/dist/composer/RealtimeVoiceMode.d.ts.map +1 -0
- package/dist/composer/RealtimeVoiceMode.js +245 -0
- package/dist/composer/RealtimeVoiceMode.js.map +1 -0
- package/dist/composer/RealtimeVoiceMode.spec.d.ts +2 -0
- package/dist/composer/RealtimeVoiceMode.spec.d.ts.map +1 -0
- package/dist/composer/RealtimeVoiceMode.spec.js +439 -0
- package/dist/composer/RealtimeVoiceMode.spec.js.map +1 -0
- package/dist/composer/TiptapComposer.d.ts +221 -0
- package/dist/composer/TiptapComposer.d.ts.map +1 -0
- package/dist/composer/TiptapComposer.js +1838 -0
- package/dist/composer/TiptapComposer.js.map +1 -0
- package/dist/composer/TiptapComposer.spec.d.ts +2 -0
- package/dist/composer/TiptapComposer.spec.d.ts.map +1 -0
- package/dist/composer/TiptapComposer.spec.js +277 -0
- package/dist/composer/TiptapComposer.spec.js.map +1 -0
- package/dist/composer/VoiceButton.d.ts +25 -0
- package/dist/composer/VoiceButton.d.ts.map +1 -0
- package/dist/composer/VoiceButton.js +100 -0
- package/dist/composer/VoiceButton.js.map +1 -0
- package/dist/composer/VoiceButton.spec.d.ts +2 -0
- package/dist/composer/VoiceButton.spec.d.ts.map +1 -0
- package/dist/composer/VoiceButton.spec.js +19 -0
- package/dist/composer/VoiceButton.spec.js.map +1 -0
- package/dist/composer/asset-picker-url.d.ts +16 -0
- package/dist/composer/asset-picker-url.d.ts.map +1 -0
- package/dist/composer/asset-picker-url.js +64 -0
- package/dist/composer/asset-picker-url.js.map +1 -0
- package/dist/composer/asset-picker-url.spec.d.ts +2 -0
- package/dist/composer/asset-picker-url.spec.d.ts.map +1 -0
- package/dist/composer/asset-picker-url.spec.js +23 -0
- package/dist/composer/asset-picker-url.spec.js.map +1 -0
- package/dist/composer/attachment-accept.d.ts +9 -0
- package/dist/composer/attachment-accept.d.ts.map +1 -0
- package/dist/composer/attachment-accept.js +65 -0
- package/dist/composer/attachment-accept.js.map +1 -0
- package/dist/composer/attachment-accept.spec.d.ts +2 -0
- package/dist/composer/attachment-accept.spec.d.ts.map +1 -0
- package/dist/composer/attachment-accept.spec.js +15 -0
- package/dist/composer/attachment-accept.spec.js.map +1 -0
- package/dist/composer/draft-key.d.ts +2 -0
- package/dist/composer/draft-key.d.ts.map +1 -0
- package/dist/composer/draft-key.js +8 -0
- package/dist/composer/draft-key.js.map +1 -0
- package/dist/composer/draft-key.spec.d.ts +2 -0
- package/dist/composer/draft-key.spec.d.ts.map +1 -0
- package/dist/composer/draft-key.spec.js +13 -0
- package/dist/composer/draft-key.spec.js.map +1 -0
- package/dist/composer/extensions/FileReference.d.ts +3 -0
- package/dist/composer/extensions/FileReference.d.ts.map +1 -0
- package/dist/composer/extensions/FileReference.js +36 -0
- package/dist/composer/extensions/FileReference.js.map +1 -0
- package/dist/composer/extensions/MentionReference.d.ts +3 -0
- package/dist/composer/extensions/MentionReference.d.ts.map +1 -0
- package/dist/composer/extensions/MentionReference.js +66 -0
- package/dist/composer/extensions/MentionReference.js.map +1 -0
- package/dist/composer/extensions/SkillReference.d.ts +3 -0
- package/dist/composer/extensions/SkillReference.d.ts.map +1 -0
- package/dist/composer/extensions/SkillReference.js +40 -0
- package/dist/composer/extensions/SkillReference.js.map +1 -0
- package/dist/composer/index.d.ts +14 -0
- package/dist/composer/index.d.ts.map +1 -0
- package/dist/composer/index.js +13 -0
- package/dist/composer/index.js.map +1 -0
- package/dist/composer/pasted-text.d.ts +31 -0
- package/dist/composer/pasted-text.d.ts.map +1 -0
- package/dist/composer/pasted-text.js +130 -0
- package/dist/composer/pasted-text.js.map +1 -0
- package/dist/composer/pasted-text.spec.d.ts +2 -0
- package/dist/composer/pasted-text.spec.d.ts.map +1 -0
- package/dist/composer/pasted-text.spec.js +107 -0
- package/dist/composer/pasted-text.spec.js.map +1 -0
- package/dist/composer/prompt-attachments.d.ts +18 -0
- package/dist/composer/prompt-attachments.d.ts.map +1 -0
- package/dist/composer/prompt-attachments.js +65 -0
- package/dist/composer/prompt-attachments.js.map +1 -0
- package/dist/composer/prompt-attachments.spec.d.ts +2 -0
- package/dist/composer/prompt-attachments.spec.d.ts.map +1 -0
- package/dist/composer/prompt-attachments.spec.js +63 -0
- package/dist/composer/prompt-attachments.spec.js.map +1 -0
- package/dist/composer/realtime-voice-audio-level.d.ts +14 -0
- package/dist/composer/realtime-voice-audio-level.d.ts.map +1 -0
- package/dist/composer/realtime-voice-audio-level.js +47 -0
- package/dist/composer/realtime-voice-audio-level.js.map +1 -0
- package/dist/composer/realtime-voice-audio-level.spec.d.ts +2 -0
- package/dist/composer/realtime-voice-audio-level.spec.d.ts.map +1 -0
- package/dist/composer/realtime-voice-audio-level.spec.js +25 -0
- package/dist/composer/realtime-voice-audio-level.spec.js.map +1 -0
- package/dist/composer/realtime-voice-transcript.d.ts +26 -0
- package/dist/composer/realtime-voice-transcript.d.ts.map +1 -0
- package/dist/composer/realtime-voice-transcript.js +103 -0
- package/dist/composer/realtime-voice-transcript.js.map +1 -0
- package/dist/composer/realtime-voice-transcript.spec.d.ts +2 -0
- package/dist/composer/realtime-voice-transcript.spec.d.ts.map +1 -0
- package/dist/composer/realtime-voice-transcript.spec.js +76 -0
- package/dist/composer/realtime-voice-transcript.spec.js.map +1 -0
- package/dist/composer/runtime-adapters.d.ts +163 -0
- package/dist/composer/runtime-adapters.d.ts.map +1 -0
- package/dist/composer/runtime-adapters.js +130 -0
- package/dist/composer/runtime-adapters.js.map +1 -0
- package/dist/composer/types.d.ts +60 -0
- package/dist/composer/types.d.ts.map +1 -0
- package/dist/composer/types.js +2 -0
- package/dist/composer/types.js.map +1 -0
- package/dist/composer/use-file-search.d.ts +6 -0
- package/dist/composer/use-file-search.d.ts.map +1 -0
- package/dist/composer/use-file-search.js +53 -0
- package/dist/composer/use-file-search.js.map +1 -0
- package/dist/composer/use-mention-search.d.ts +6 -0
- package/dist/composer/use-mention-search.d.ts.map +1 -0
- package/dist/composer/use-mention-search.js +75 -0
- package/dist/composer/use-mention-search.js.map +1 -0
- package/dist/composer/use-skills.d.ts +7 -0
- package/dist/composer/use-skills.d.ts.map +1 -0
- package/dist/composer/use-skills.js +40 -0
- package/dist/composer/use-skills.js.map +1 -0
- package/dist/composer/useRealtimeVoiceMode.d.ts +179 -0
- package/dist/composer/useRealtimeVoiceMode.d.ts.map +1 -0
- package/dist/composer/useRealtimeVoiceMode.js +1657 -0
- package/dist/composer/useRealtimeVoiceMode.js.map +1 -0
- package/dist/composer/useRealtimeVoiceMode.spec.d.ts +2 -0
- package/dist/composer/useRealtimeVoiceMode.spec.d.ts.map +1 -0
- package/dist/composer/useRealtimeVoiceMode.spec.js +618 -0
- package/dist/composer/useRealtimeVoiceMode.spec.js.map +1 -0
- package/dist/composer/useVoiceDictation.d.ts +57 -0
- package/dist/composer/useVoiceDictation.d.ts.map +1 -0
- package/dist/composer/useVoiceDictation.js +1004 -0
- package/dist/composer/useVoiceDictation.js.map +1 -0
- package/dist/composer/useVoiceDictation.spec.d.ts +2 -0
- package/dist/composer/useVoiceDictation.spec.d.ts.map +1 -0
- package/dist/composer/useVoiceDictation.spec.js +32 -0
- package/dist/composer/useVoiceDictation.spec.js.map +1 -0
- package/dist/editor/RegistryBlockContext.d.ts +68 -0
- package/dist/editor/RegistryBlockContext.d.ts.map +1 -0
- package/dist/editor/RegistryBlockContext.js +10 -0
- package/dist/editor/RegistryBlockContext.js.map +1 -0
- package/dist/editor/RegistryBlockNode.d.ts +66 -0
- package/dist/editor/RegistryBlockNode.d.ts.map +1 -0
- package/dist/editor/RegistryBlockNode.js +406 -0
- package/dist/editor/RegistryBlockNode.js.map +1 -0
- package/dist/editor/RegistryBlockNode.spec.d.ts +2 -0
- package/dist/editor/RegistryBlockNode.spec.d.ts.map +1 -0
- package/dist/editor/RegistryBlockNode.spec.js +215 -0
- package/dist/editor/RegistryBlockNode.spec.js.map +1 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js +2 -0
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/registrySlashCommands.d.ts +68 -0
- package/dist/editor/registrySlashCommands.d.ts.map +1 -0
- package/dist/editor/registrySlashCommands.js +51 -0
- package/dist/editor/registrySlashCommands.js.map +1 -0
- package/package.json +32 -1
- package/src/app-shell/header-actions.tsx +84 -0
- package/src/app-shell/index.ts +1 -0
- package/src/chat-history/ChatHistoryList.spec.tsx +453 -0
- package/src/chat-history/ChatHistoryList.tsx +469 -0
- package/src/chat-history/index.ts +7 -0
- package/src/chat-history.css +314 -0
- package/src/collab-ui/AgentPresenceChip.tsx +69 -0
- package/src/collab-ui/LiveCursorOverlay.tsx +241 -0
- package/src/collab-ui/PresenceBar.tsx +346 -0
- package/src/collab-ui/RecentEditHighlights.tsx +225 -0
- package/src/collab-ui/RemoteSelectionRings.tsx +227 -0
- package/src/collab-ui/agent-identity.ts +16 -0
- package/src/collab-ui/index.ts +39 -0
- package/src/collab-ui/lead-client.ts +32 -0
- package/src/collab-ui/types.spec.ts +18 -0
- package/src/collab-ui/types.ts +96 -0
- package/src/composer/AgentComposerFrame.tsx +59 -0
- package/src/composer/ComposerPlusMenu.tsx +983 -0
- package/src/composer/MentionPopover.tsx +412 -0
- package/src/composer/PastedTextChip.tsx +150 -0
- package/src/composer/PromptComposer.spec.ts +73 -0
- package/src/composer/PromptComposer.tsx +718 -0
- package/src/composer/RealtimeVoiceMode.spec.tsx +771 -0
- package/src/composer/RealtimeVoiceMode.tsx +856 -0
- package/src/composer/TiptapComposer.spec.ts +390 -0
- package/src/composer/TiptapComposer.tsx +2936 -0
- package/src/composer/VoiceButton.spec.ts +33 -0
- package/src/composer/VoiceButton.tsx +255 -0
- package/src/composer/asset-picker-url.spec.ts +56 -0
- package/src/composer/asset-picker-url.ts +80 -0
- package/src/composer/attachment-accept.spec.ts +22 -0
- package/src/composer/attachment-accept.ts +71 -0
- package/src/composer/draft-key.spec.ts +19 -0
- package/src/composer/draft-key.ts +7 -0
- package/src/composer/extensions/FileReference.tsx +55 -0
- package/src/composer/extensions/MentionReference.tsx +93 -0
- package/src/composer/extensions/SkillReference.tsx +56 -0
- package/src/composer/index.ts +79 -0
- package/src/composer/pasted-text.spec.ts +162 -0
- package/src/composer/pasted-text.ts +160 -0
- package/src/composer/prompt-attachments.spec.ts +80 -0
- package/src/composer/prompt-attachments.ts +93 -0
- package/src/composer/realtime-voice-audio-level.spec.ts +32 -0
- package/src/composer/realtime-voice-audio-level.ts +64 -0
- package/src/composer/realtime-voice-transcript.spec.ts +95 -0
- package/src/composer/realtime-voice-transcript.ts +134 -0
- package/src/composer/runtime-adapters.tsx +343 -0
- package/src/composer/types.ts +66 -0
- package/src/composer/use-file-search.ts +64 -0
- package/src/composer/use-mention-search.ts +90 -0
- package/src/composer/use-skills.ts +45 -0
- package/src/composer/useRealtimeVoiceMode.spec.ts +818 -0
- package/src/composer/useRealtimeVoiceMode.tsx +2117 -0
- package/src/composer/useVoiceDictation.spec.ts +45 -0
- package/src/composer/useVoiceDictation.ts +1191 -0
- package/src/context-ui/ContextMeter.tsx +101 -0
- package/src/context-ui/ContextSegmentRow.tsx +184 -0
- package/src/context-ui/ContextTreemap.tsx +125 -0
- package/src/context-ui/ContextXRayPanel.tsx +377 -0
- package/src/context-ui/format.ts +42 -0
- package/src/context-ui/index.ts +15 -0
- package/src/context-ui/types.ts +43 -0
- package/src/design-tweaks/index.ts +1 -0
- package/src/design-tweaks/visual-style-controls.tsx +1084 -0
- package/src/editor/BubbleToolbar.tsx +253 -0
- package/src/editor/CodeBlockNode.tsx +254 -0
- package/src/editor/DragHandle.spec.ts +588 -0
- package/src/editor/DragHandle.ts +1437 -0
- package/src/editor/ImageExtension.roundtrip.spec.ts +117 -0
- package/src/editor/ImageExtension.ts +306 -0
- package/src/editor/RegistryBlockContext.tsx +107 -0
- package/src/editor/RegistryBlockNode.spec.ts +279 -0
- package/src/editor/RegistryBlockNode.tsx +652 -0
- package/src/editor/RichMarkdownEditor.collab.spec.ts +79 -0
- package/src/editor/RichMarkdownEditor.roundtrip.spec.ts +226 -0
- package/src/editor/RichMarkdownEditor.tsx +81 -0
- package/src/editor/RunId.ts +61 -0
- package/src/editor/SharedRichEditor.tsx +321 -0
- package/src/editor/SlashCommandMenu.tsx +310 -0
- package/src/editor/disableHistory.spec.ts +85 -0
- package/src/editor/extensions.ts +402 -0
- package/src/editor/gfmDoc.spec.ts +230 -0
- package/src/editor/gfmDoc.ts +92 -0
- package/src/editor/index.ts +93 -0
- package/src/editor/registrySlashCommands.ts +131 -0
- package/src/editor/structuralReorderUndo.spec.ts +144 -0
- package/src/editor/surgical-apply.spec.ts +279 -0
- package/src/editor/surgical-apply.ts +192 -0
- package/src/editor/useCollabReconcile.concurrent.spec.ts +422 -0
- package/src/editor/useCollabReconcile.idempotent.spec.ts +324 -0
- package/src/editor/useCollabReconcile.ts +589 -0
- package/src/editor.css +510 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/use-mobile.tsx +21 -0
- package/src/hooks/use-toast.ts +188 -0
- package/src/index.ts +8 -0
- package/src/onboarding/index.ts +1 -0
- package/src/provider.tsx +47 -0
- package/src/sharing/VisibilityBadge.spec.ts +96 -0
- package/src/sharing/VisibilityBadge.tsx +37 -0
- package/src/sharing/index.ts +4 -0
- package/src/styles.css +21 -0
- package/src/ui/accordion.tsx +56 -0
- package/src/ui/alert-dialog.tsx +141 -0
- package/src/ui/alert.tsx +59 -0
- package/src/ui/aspect-ratio.tsx +5 -0
- package/src/ui/avatar.tsx +48 -0
- package/src/ui/badge.tsx +37 -0
- package/src/ui/breadcrumb.tsx +115 -0
- package/src/ui/button.tsx +78 -0
- package/src/ui/calendar.tsx +214 -0
- package/src/ui/card.tsx +86 -0
- package/src/ui/carousel.tsx +260 -0
- package/src/ui/chart.tsx +375 -0
- package/src/ui/checkbox.tsx +28 -0
- package/src/ui/collapsible.tsx +9 -0
- package/src/ui/command.spec.tsx +51 -0
- package/src/ui/command.tsx +174 -0
- package/src/ui/context-menu.tsx +202 -0
- package/src/ui/date-picker.tsx +64 -0
- package/src/ui/dialog.spec.tsx +43 -0
- package/src/ui/dialog.tsx +146 -0
- package/src/ui/drawer.tsx +126 -0
- package/src/ui/dropdown-menu.tsx +218 -0
- package/src/ui/form.tsx +177 -0
- package/src/ui/hover-card.tsx +27 -0
- package/src/ui/index.ts +52 -0
- package/src/ui/input-otp.tsx +69 -0
- package/src/ui/input.tsx +22 -0
- package/src/ui/label.tsx +24 -0
- package/src/ui/logo.tsx +36 -0
- package/src/ui/menubar.tsx +235 -0
- package/src/ui/navigation-menu.tsx +128 -0
- package/src/ui/pagination.tsx +121 -0
- package/src/ui/popover.tsx +44 -0
- package/src/ui/progress.tsx +26 -0
- package/src/ui/radio-group.tsx +42 -0
- package/src/ui/resizable.tsx +43 -0
- package/src/ui/scroll-area.tsx +46 -0
- package/src/ui/select.tsx +158 -0
- package/src/ui/separator.tsx +29 -0
- package/src/ui/sheet.tsx +160 -0
- package/src/ui/sidebar.tsx +777 -0
- package/src/ui/skeleton.tsx +18 -0
- package/src/ui/slider.tsx +26 -0
- package/src/ui/sonner.tsx +58 -0
- package/src/ui/spinner.tsx +17 -0
- package/src/ui/switch.tsx +27 -0
- package/src/ui/table.tsx +117 -0
- package/src/ui/tabs.tsx +53 -0
- package/src/ui/textarea.tsx +23 -0
- package/src/ui/toast.tsx +127 -0
- package/src/ui/toaster.tsx +33 -0
- package/src/ui/toggle-group.tsx +59 -0
- package/src/ui/toggle.tsx +43 -0
- package/src/ui/tooltip.tsx +53 -0
- package/src/ui/use-toast.ts +3 -0
- package/src/utils.ts +8 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IconFile, IconFolder, IconStack2, IconFileText, IconCheckbox, IconMail, IconUser, IconPresentation, IconMessageChatbot, IconTrash, IconPlus, IconHelp, IconHistory, IconTerminal2, IconClipboardList, IconPencil, } from "@tabler/icons-react";
|
|
3
|
+
import React, { useState, useEffect, useRef, useImperativeHandle, forwardRef, } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
const iconProps = { size: 14, className: "shrink-0 text-muted-foreground" };
|
|
6
|
+
function MentionItemIcon({ icon }) {
|
|
7
|
+
switch (icon) {
|
|
8
|
+
case "folder":
|
|
9
|
+
return _jsx(IconFolder, { ...iconProps });
|
|
10
|
+
case "document":
|
|
11
|
+
return _jsx(IconFileText, { ...iconProps });
|
|
12
|
+
case "form":
|
|
13
|
+
return _jsx(IconCheckbox, { ...iconProps });
|
|
14
|
+
case "email":
|
|
15
|
+
return _jsx(IconMail, { ...iconProps });
|
|
16
|
+
case "user":
|
|
17
|
+
return _jsx(IconUser, { ...iconProps });
|
|
18
|
+
case "deck":
|
|
19
|
+
return _jsx(IconPresentation, { ...iconProps });
|
|
20
|
+
case "agent":
|
|
21
|
+
return _jsx(IconMessageChatbot, { ...iconProps });
|
|
22
|
+
case "file":
|
|
23
|
+
return _jsx(IconFile, { ...iconProps });
|
|
24
|
+
default:
|
|
25
|
+
return _jsx(IconFile, { ...iconProps });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function CommandIcon({ icon }) {
|
|
29
|
+
switch (icon) {
|
|
30
|
+
case "clear":
|
|
31
|
+
return _jsx(IconTrash, { ...iconProps });
|
|
32
|
+
case "new":
|
|
33
|
+
return _jsx(IconPlus, { ...iconProps });
|
|
34
|
+
case "help":
|
|
35
|
+
return _jsx(IconHelp, { ...iconProps });
|
|
36
|
+
case "history":
|
|
37
|
+
return _jsx(IconHistory, { ...iconProps });
|
|
38
|
+
case "plan":
|
|
39
|
+
return _jsx(IconClipboardList, { ...iconProps });
|
|
40
|
+
case "act":
|
|
41
|
+
return _jsx(IconPencil, { ...iconProps });
|
|
42
|
+
default:
|
|
43
|
+
return _jsx(IconTerminal2, { ...iconProps });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function HintWithLink({ hint }) {
|
|
47
|
+
// If hint contains a URL, split it and render the URL as a link
|
|
48
|
+
const urlMatch = hint.match(/(https?:\/\/\S+)/);
|
|
49
|
+
if (!urlMatch)
|
|
50
|
+
return _jsx(_Fragment, { children: hint });
|
|
51
|
+
const before = hint.slice(0, urlMatch.index);
|
|
52
|
+
const url = urlMatch[1];
|
|
53
|
+
return (_jsxs(_Fragment, { children: [before, _jsx("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: "underline hover:text-foreground", children: "Learn more" })] }));
|
|
54
|
+
}
|
|
55
|
+
function LoadingSkeleton() {
|
|
56
|
+
return (_jsx("div", { className: "space-y-1 p-1", children: [1, 2, 3].map((i) => (_jsxs("div", { className: "flex items-center gap-2 rounded px-2 py-1.5", children: [_jsx("div", { className: "h-3.5 w-3.5 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-3 rounded bg-muted animate-pulse", style: { width: `${60 + i * 20}px` } })] }, i))) }));
|
|
57
|
+
}
|
|
58
|
+
function LoadingSkeletonRow() {
|
|
59
|
+
return (_jsxs("div", { className: "flex items-center gap-2 rounded px-2 py-1.5", children: [_jsx("div", { className: "h-3.5 w-3.5 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-3 w-24 rounded bg-muted animate-pulse" })] }));
|
|
60
|
+
}
|
|
61
|
+
export const MentionPopover = forwardRef(function MentionPopover(props, ref) {
|
|
62
|
+
const { type, position, mentionItems, skills, commands = [], hint, isLoading, query, onSelectMention, onSelectSkill, onSelectCommand, onClose, } = props;
|
|
63
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
64
|
+
const listRef = useRef(null);
|
|
65
|
+
const itemCount = type === "@" ? mentionItems.length : commands.length + skills.length;
|
|
66
|
+
// Group mention items by section for @ popover
|
|
67
|
+
const groupedMentions = React.useMemo(() => {
|
|
68
|
+
if (type !== "@")
|
|
69
|
+
return [];
|
|
70
|
+
const groups = new Map();
|
|
71
|
+
for (const item of mentionItems) {
|
|
72
|
+
const section = item.section || "Other";
|
|
73
|
+
if (!groups.has(section))
|
|
74
|
+
groups.set(section, []);
|
|
75
|
+
groups.get(section).push(item);
|
|
76
|
+
}
|
|
77
|
+
// Sort: Agents first, then Connected Agents, then template-specific,
|
|
78
|
+
// then Files, then Other
|
|
79
|
+
const sorted = [];
|
|
80
|
+
const knownSections = new Set([
|
|
81
|
+
"Agents",
|
|
82
|
+
"Connected Agents",
|
|
83
|
+
"Files",
|
|
84
|
+
"Other",
|
|
85
|
+
]);
|
|
86
|
+
// Agents first
|
|
87
|
+
if (groups.has("Agents")) {
|
|
88
|
+
sorted.push({ section: "Agents", items: groups.get("Agents") });
|
|
89
|
+
groups.delete("Agents");
|
|
90
|
+
}
|
|
91
|
+
if (groups.has("Connected Agents")) {
|
|
92
|
+
sorted.push({
|
|
93
|
+
section: "Connected Agents",
|
|
94
|
+
items: groups.get("Connected Agents"),
|
|
95
|
+
});
|
|
96
|
+
groups.delete("Connected Agents");
|
|
97
|
+
}
|
|
98
|
+
// Template-specific sections (anything not in knownSections)
|
|
99
|
+
for (const [section, items] of groups) {
|
|
100
|
+
if (!knownSections.has(section)) {
|
|
101
|
+
sorted.push({ section, items });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Files
|
|
105
|
+
if (groups.has("Files")) {
|
|
106
|
+
sorted.push({ section: "Files", items: groups.get("Files") });
|
|
107
|
+
}
|
|
108
|
+
// Other
|
|
109
|
+
if (groups.has("Other")) {
|
|
110
|
+
sorted.push({ section: "Other", items: groups.get("Other") });
|
|
111
|
+
}
|
|
112
|
+
return sorted;
|
|
113
|
+
}, [type, mentionItems]);
|
|
114
|
+
// Flat list of mention items in section order for keyboard index tracking
|
|
115
|
+
const flatMentionItems = React.useMemo(() => {
|
|
116
|
+
return groupedMentions.flatMap((g) => g.items);
|
|
117
|
+
}, [groupedMentions]);
|
|
118
|
+
// Reset selection when items change
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
setSelectedIndex(0);
|
|
121
|
+
}, [commands, mentionItems, skills, query]);
|
|
122
|
+
// Scroll selected item into view
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
const container = listRef.current;
|
|
125
|
+
if (!container)
|
|
126
|
+
return;
|
|
127
|
+
// Find the actual item element by data attribute
|
|
128
|
+
const selected = container.querySelector(`[data-mention-index="${selectedIndex}"]`);
|
|
129
|
+
if (selected) {
|
|
130
|
+
selected.scrollIntoView({ block: "nearest" });
|
|
131
|
+
}
|
|
132
|
+
}, [selectedIndex]);
|
|
133
|
+
useImperativeHandle(ref, () => ({
|
|
134
|
+
moveUp: () => {
|
|
135
|
+
setSelectedIndex((prev) => prev <= 0 ? Math.max(0, itemCount - 1) : prev - 1);
|
|
136
|
+
},
|
|
137
|
+
moveDown: () => {
|
|
138
|
+
setSelectedIndex((prev) => (prev >= itemCount - 1 ? 0 : prev + 1));
|
|
139
|
+
},
|
|
140
|
+
getSelectedIndex: () => selectedIndex,
|
|
141
|
+
getSelectedMention: () => flatMentionItems[selectedIndex] ?? null,
|
|
142
|
+
getSelectedCommand: () => {
|
|
143
|
+
if (type !== "/" || selectedIndex >= commands.length)
|
|
144
|
+
return null;
|
|
145
|
+
return commands[selectedIndex] ?? null;
|
|
146
|
+
},
|
|
147
|
+
}));
|
|
148
|
+
if (!position)
|
|
149
|
+
return null;
|
|
150
|
+
const content = (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-[9998]", onClick: onClose }), _jsx("div", { "data-agent-native-composer-popover": "true", className: "fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg", style: {
|
|
151
|
+
bottom: `calc(100vh - ${position.top}px + 4px)`,
|
|
152
|
+
left: Math.max(8, Math.min(position.left, window.innerWidth - 336)),
|
|
153
|
+
maxHeight: Math.min(320, position.top - 8),
|
|
154
|
+
}, children: isLoading && itemCount === 0 ? (_jsx(LoadingSkeleton, {})) : itemCount === 0 ? (_jsx("div", { className: "px-3 py-4 text-center text-xs text-muted-foreground", children: type === "@" ? (query ? ("No results found") : ("Type to search...")) : hint ? (_jsx(HintWithLink, { hint: hint })) : ("No skills available") })) : (_jsxs("div", { ref: listRef, className: "p-1", children: [isLoading && _jsx(LoadingSkeletonRow, {}), type === "@"
|
|
155
|
+
? (() => {
|
|
156
|
+
let flatIndex = 0;
|
|
157
|
+
return groupedMentions.map((group) => (_jsxs("div", { children: [_jsx("div", { className: "px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider", children: group.section }), group.items.map((item) => {
|
|
158
|
+
const idx = flatIndex++;
|
|
159
|
+
return (_jsxs("button", { "data-mention-index": idx, className: `flex w-full items-center gap-2 rounded px-2 py-1.5 text-start text-sm ${idx === selectedIndex
|
|
160
|
+
? "bg-accent text-accent-foreground"
|
|
161
|
+
: "hover:bg-accent/50"}`, onMouseEnter: () => setSelectedIndex(idx), onClick: () => onSelectMention(item), children: [_jsx(MentionItemIcon, { icon: item.icon }), _jsx("span", { className: "truncate text-sm", children: item.label }), item.description && (_jsx("span", { className: "ms-auto shrink-0 truncate max-w-[160px] text-xs text-muted-foreground", children: item.description }))] }, item.id));
|
|
162
|
+
})] }, group.section)));
|
|
163
|
+
})()
|
|
164
|
+
: (() => {
|
|
165
|
+
let idx = 0;
|
|
166
|
+
return (_jsxs(_Fragment, { children: [commands.length > 0 && (_jsxs("div", { children: [_jsx("div", { className: "px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider", children: "Commands" }), commands.map((cmd) => {
|
|
167
|
+
const i = idx++;
|
|
168
|
+
return (_jsxs("button", { "data-mention-index": i, className: `flex w-full items-center gap-2 rounded px-2 py-1.5 text-start text-sm ${i === selectedIndex
|
|
169
|
+
? "bg-accent text-accent-foreground"
|
|
170
|
+
: "hover:bg-accent/50"}`, onMouseEnter: () => setSelectedIndex(i), onClick: () => onSelectCommand?.(cmd), children: [_jsx(CommandIcon, { icon: cmd.icon }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsxs("span", { className: "block truncate text-sm", children: ["/", cmd.name] }), cmd.description && (_jsx("span", { className: "block truncate text-xs text-muted-foreground", children: cmd.description }))] })] }, cmd.name));
|
|
171
|
+
})] })), skills.length > 0 && (_jsxs("div", { children: [commands.length > 0 && (_jsx("div", { className: "px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider", children: "Skills" })), skills.map((skill) => {
|
|
172
|
+
const i = idx++;
|
|
173
|
+
return (_jsxs("button", { "data-mention-index": i, className: `flex w-full items-center gap-2 rounded px-2 py-1.5 text-start text-sm ${i === selectedIndex
|
|
174
|
+
? "bg-accent text-accent-foreground"
|
|
175
|
+
: "hover:bg-accent/50"}`, onMouseEnter: () => setSelectedIndex(i), onClick: () => onSelectSkill(skill), children: [_jsx(IconStack2, { ...iconProps }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate text-sm", children: skill.name }), skill.description && (_jsx("span", { className: "block truncate text-xs text-muted-foreground", children: skill.description }))] })] }, skill.path));
|
|
176
|
+
})] }))] }));
|
|
177
|
+
})()] })) })] }));
|
|
178
|
+
return createPortal(content, document.body);
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=MentionPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentionPopover.js","sourceRoot":"","sources":["../../src/composer/MentionPopover.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AA2BzC,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;AAE5E,SAAS,eAAe,CAAC,EAAE,IAAI,EAAqB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC,KAAK,UAAU;YACb,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,gBAAgB,OAAK,SAAS,GAAI,CAAC;QAC7C,KAAK,OAAO;YACV,OAAO,KAAC,kBAAkB,OAAK,SAAS,GAAI,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC;YACE,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAqB;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAC,SAAS,OAAK,SAAS,GAAI,CAAC;QACtC,KAAK,KAAK;YACR,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,KAAC,WAAW,OAAK,SAAS,GAAI,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,KAAC,iBAAiB,OAAK,SAAS,GAAI,CAAC;QAC9C,KAAK,KAAK;YACR,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC;YACE,OAAO,KAAC,aAAa,OAAK,SAAS,GAAI,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAoB;IAC9C,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CACL,8BACG,MAAM,EACP,YACE,IAAI,EAAE,GAAG,EACT,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,iCAAiC,2BAGzC,IACH,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,eAAa,SAAS,EAAC,6CAA6C,aAClE,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cACE,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GACpC,KALM,CAAC,CAML,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,6CAA6C,aAC1D,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cAAK,SAAS,EAAC,yCAAyC,GAAG,IACvD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG;IAClC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,IAAI,EACJ,SAAS,EACT,KAAK,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,OAAO,GACR,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7C,MAAM,SAAS,GACb,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvE,+CAA+C;IAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACzC,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,qEAAqE;QACrE,yBAAyB;QACzB,MAAM,MAAM,GAAgD,EAAE,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;YAC5B,QAAQ;YACR,kBAAkB;YAClB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QACH,eAAe;QACf,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,kBAAkB;gBAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAE;aACvC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QACD,6DAA6D;QAC7D,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzB,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,oCAAoC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5C,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CACtC,wBAAwB,aAAa,IAAI,CACf,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE;YACX,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAClD,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;QACrC,kBAAkB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,IAAI;QACjE,kBAAkB,EAAE,GAAG,EAAE;YACvB,IAAI,IAAI,KAAK,GAAG,IAAI,aAAa,IAAI,QAAQ,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAClE,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,CACd,8BAEE,cAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,OAAO,GAAI,EAC5D,oDACqC,MAAM,EACzC,SAAS,EAAC,+FAA+F,EACzG,KAAK,EAAE;oBACL,MAAM,EAAE,gBAAgB,QAAQ,CAAC,GAAG,WAAW;oBAC/C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;oBACnE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC3C,YAEA,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9B,KAAC,eAAe,KAAG,CACpB,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,qDAAqD,YACjE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CACd,KAAK,CAAC,CAAC,CAAC,CACN,kBAAkB,CACnB,CAAC,CAAC,CAAC,CACF,mBAAmB,CACpB,CACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAC7B,CAAC,CAAC,CAAC,CACF,qBAAqB,CACtB,GACG,CACP,CAAC,CAAC,CAAC,CACF,eAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,KAAK,aAC/B,SAAS,IAAI,KAAC,kBAAkB,KAAG,EACnC,IAAI,KAAK,GAAG;4BACX,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,SAAS,GAAG,CAAC,CAAC;gCAClB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpC,0BACE,cAAK,SAAS,EAAC,0FAA0F,YACtG,KAAK,CAAC,OAAO,GACV,EACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4CACxB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;4CACxB,OAAO,CACL,wCAEsB,GAAG,EACvB,SAAS,EAAE,yEACT,GAAG,KAAK,aAAa;oDACnB,CAAC,CAAC,kCAAkC;oDACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,aAEpC,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EACpC,eAAM,SAAS,EAAC,kBAAkB,YAC/B,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,uEAAuE,YACpF,IAAI,CAAC,WAAW,GACZ,CACR,KAlBI,IAAI,CAAC,EAAE,CAmBL,CACV,CAAC;wCACJ,CAAC,CAAC,KA7BM,KAAK,CAAC,OAAO,CA8BjB,CACP,CAAC,CAAC;4BACL,CAAC,CAAC,EAAE;4BACN,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,GAAG,GAAG,CAAC,CAAC;gCACZ,OAAO,CACL,8BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,0BACE,cAAK,SAAS,EAAC,0FAA0F,yBAEnG,EACL,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oDACpB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,yEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,aAErC,KAAC,WAAW,IAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAI,EAC/B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,gBAAM,SAAS,EAAC,wBAAwB,kBACpC,GAAG,CAAC,IAAI,IACL,EACN,GAAG,CAAC,WAAW,IAAI,CAClB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,GAAG,CAAC,WAAW,GACX,CACR,IACI,KApBF,GAAG,CAAC,IAAI,CAqBN,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,EACA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,0BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,0FAA0F,uBAEnG,CACP,EACC,MAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oDACvC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,yEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAEnC,KAAC,UAAU,OAAK,SAAS,GAAI,EAC7B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,wBAAwB,YACrC,KAAK,CAAC,IAAI,GACN,EACN,KAAK,CAAC,WAAW,IAAI,CACpB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,KAAK,CAAC,WAAW,GACb,CACR,IACI,KApBF,KAAK,CAAC,IAAI,CAqBR,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,IACA,CACJ,CAAC;4BACJ,CAAC,CAAC,EAAE,IACJ,CACP,GACG,IACL,CACJ,CAAC;IAEF,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Attachment } from "@assistant-ui/react";
|
|
2
|
+
export interface PastedTextChipProps {
|
|
3
|
+
attachment: Attachment;
|
|
4
|
+
onRemove?: (id: string) => void;
|
|
5
|
+
/** Compact variant rendered inside sent user messages. */
|
|
6
|
+
compact?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function PastedTextChip({ attachment, onRemove, compact, }: PastedTextChipProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=PastedTextChip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PastedTextChip.d.ts","sourceRoot":"","sources":["../../src/composer/PastedTextChip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA8CtD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,OAAe,GAChB,EAAE,mBAAmB,+BA4FrB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
3
|
+
import { IconClipboardText, IconX } from "@tabler/icons-react";
|
|
4
|
+
import { useCallback, useEffect, useState } from "react";
|
|
5
|
+
import { cn } from "../utils.js";
|
|
6
|
+
import { countLines, unwrapAttachmentEnvelope } from "./pasted-text.js";
|
|
7
|
+
function readAttachmentText(attachment) {
|
|
8
|
+
if ("file" in attachment && attachment.file instanceof File) {
|
|
9
|
+
return attachment.file.text();
|
|
10
|
+
}
|
|
11
|
+
const textPart = attachment.content?.find((p) => p.type === "text" && "text" in p && typeof p.text === "string");
|
|
12
|
+
return textPart ? unwrapAttachmentEnvelope(textPart.text) : "";
|
|
13
|
+
}
|
|
14
|
+
function usePastedAttachmentText(attachment) {
|
|
15
|
+
const [text, setText] = useState("");
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
let cancelled = false;
|
|
18
|
+
const result = readAttachmentText(attachment);
|
|
19
|
+
if (typeof result === "string") {
|
|
20
|
+
setText(result);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
result
|
|
24
|
+
.then((value) => {
|
|
25
|
+
if (!cancelled)
|
|
26
|
+
setText(value);
|
|
27
|
+
})
|
|
28
|
+
.catch(() => { });
|
|
29
|
+
return () => {
|
|
30
|
+
cancelled = true;
|
|
31
|
+
};
|
|
32
|
+
}, [attachment]);
|
|
33
|
+
return { text, lines: countLines(text), chars: text.length };
|
|
34
|
+
}
|
|
35
|
+
export function PastedTextChip({ attachment, onRemove, compact = false, }) {
|
|
36
|
+
const [open, setOpen] = useState(false);
|
|
37
|
+
const { text, lines, chars } = usePastedAttachmentText(attachment);
|
|
38
|
+
const handleRemove = useCallback((event) => {
|
|
39
|
+
event.stopPropagation();
|
|
40
|
+
onRemove?.(attachment.id);
|
|
41
|
+
}, [attachment.id, onRemove]);
|
|
42
|
+
const summary = lines > 0 ? `${lines} lines` : `${chars} chars`;
|
|
43
|
+
return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn("group relative inline-flex items-center gap-2 rounded-md border border-border/70 bg-muted/50 text-start text-foreground hover:bg-muted/70 cursor-pointer", compact
|
|
44
|
+
? "max-w-[220px] px-2 py-1.5 text-xs"
|
|
45
|
+
: "max-w-[260px] px-2.5 py-2 text-xs", onRemove && !compact && "pe-7"), "aria-label": "Preview pasted text", children: [_jsx("span", { className: cn("flex shrink-0 items-center justify-center rounded bg-background text-muted-foreground", compact ? "h-6 w-6" : "h-8 w-8"), children: _jsx(IconClipboardText, { className: compact ? "h-3.5 w-3.5" : "h-4 w-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate font-medium", children: "Pasted text" }), _jsx("span", { className: "block text-[11px] text-muted-foreground", children: summary })] }), onRemove && (_jsx("span", { role: "button", tabIndex: -1, onClick: handleRemove, "aria-label": "Remove pasted text", className: cn("flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground", compact ? "" : "absolute end-1.5 top-1.5"), children: _jsx(IconX, { className: "h-3 w-3" }) }))] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsxs(PopoverPrimitive.Content, { side: "top", align: "start", sideOffset: 6, collisionPadding: 12, className: "z-50 w-[min(560px,calc(100vw-32px))] rounded-lg border border-border bg-popover text-popover-foreground shadow-lg origin-[var(--radix-popover-content-transform-origin)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-border px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [_jsx(IconClipboardText, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), _jsx("span", { className: "text-sm font-medium truncate", children: "Pasted text" }), _jsxs("span", { className: "text-[11px] text-muted-foreground shrink-0", children: [lines, " lines \u00B7 ", chars, " chars"] })] }), _jsx("button", { type: "button", onClick: () => setOpen(false), "aria-label": "Close preview", className: "flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3.5 w-3.5" }) })] }), _jsx("pre", { className: "max-h-[60vh] overflow-auto px-3 py-2 text-[12px] leading-[1.5] whitespace-pre-wrap break-words font-mono text-foreground", children: text })] }) })] }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=PastedTextChip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PastedTextChip.js","sourceRoot":"","sources":["../../src/composer/PastedTextChip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { type CSSProperties, type Ref, type ReactNode } from "react";
|
|
2
|
+
import { type EngineModelGroup, type ReasoningEffort } from "./runtime-adapters.js";
|
|
3
|
+
import { type ComposerSubmitIntent, type TiptapComposerHandle } from "./TiptapComposer.js";
|
|
4
|
+
import type { AgentComposerLayoutVariant, Reference, SkillResult, SlashCommand } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Files the user attached via the "+" button in PromptComposer. The host owns
|
|
7
|
+
* what to do with them — typically POST to a per-app upload endpoint and pass
|
|
8
|
+
* the resulting URLs/paths into the prompt that gets sent to the agent.
|
|
9
|
+
*/
|
|
10
|
+
export type PromptComposerFile = File;
|
|
11
|
+
export interface PromptComposerSubmitOptions {
|
|
12
|
+
intent?: ComposerSubmitIntent;
|
|
13
|
+
model?: string;
|
|
14
|
+
engine?: string;
|
|
15
|
+
effort?: ReasoningEffort;
|
|
16
|
+
}
|
|
17
|
+
export interface PromptComposerProps {
|
|
18
|
+
/** Called when the user submits the composer. */
|
|
19
|
+
onSubmit: (text: string, files: PromptComposerFile[], references: Reference[], options: PromptComposerSubmitOptions) => void;
|
|
20
|
+
placeholder?: string;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
autoFocus?: boolean;
|
|
23
|
+
className?: string;
|
|
24
|
+
style?: CSSProperties;
|
|
25
|
+
rootClassName?: string;
|
|
26
|
+
rootStyle?: CSSProperties;
|
|
27
|
+
/** Forwarded to TiptapComposer for draft persistence. */
|
|
28
|
+
draftScope?: string;
|
|
29
|
+
/** Keep the submitted prompt in the editor. Default: false. */
|
|
30
|
+
preserveDraftOnSubmit?: boolean;
|
|
31
|
+
/** Show the model selector (default: true). */
|
|
32
|
+
showModelSelector?: boolean;
|
|
33
|
+
/** Show the voice dictation button. Defaults to DEFAULT_VOICE_DICTATION_ENABLED. */
|
|
34
|
+
voiceEnabled?: boolean;
|
|
35
|
+
/** Show file upload controls and pass submitted files to onSubmit (default: true). */
|
|
36
|
+
attachmentsEnabled?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Controls the shared "+" affordance. Defaults to upload-only for standalone
|
|
39
|
+
* prompt forms; chat surfaces can opt into the full sidebar menu.
|
|
40
|
+
*/
|
|
41
|
+
plusMenuMode?: "full" | "upload-only" | "hidden";
|
|
42
|
+
/** Programmatically seed the composer with plain text. */
|
|
43
|
+
initialText?: string;
|
|
44
|
+
/** Stable key used to re-apply `initialText` when the host picks a preset. */
|
|
45
|
+
initialTextKey?: string | number;
|
|
46
|
+
/** Optional host-owned control rendered directly after the "+" button. */
|
|
47
|
+
modeControl?: ReactNode;
|
|
48
|
+
/** Explicit host-owned toolbar slot rendered directly after the "+" button. */
|
|
49
|
+
toolbarSlot?: ReactNode;
|
|
50
|
+
/** Custom attachment button to render instead of the default "+" affordance. */
|
|
51
|
+
attachButton?: ReactNode;
|
|
52
|
+
/** Custom action button to render instead of the default send button. */
|
|
53
|
+
actionButton?: ReactNode;
|
|
54
|
+
/** Extra button rendered alongside the default send button. */
|
|
55
|
+
extraActionButton?: ReactNode;
|
|
56
|
+
/** Shared sizing/layout variant for host surfaces. Default keeps sidebar behavior. */
|
|
57
|
+
layoutVariant?: AgentComposerLayoutVariant;
|
|
58
|
+
/** Additional slash commands surfaced in the shared / menu. */
|
|
59
|
+
slashCommands?: SlashCommand[];
|
|
60
|
+
/** Additional slash skills surfaced in the shared / menu. */
|
|
61
|
+
slashSkills?: SkillResult[];
|
|
62
|
+
/** Include built-in sidebar slash commands like /clear and /help. Default true. */
|
|
63
|
+
includeDefaultSlashCommands?: boolean;
|
|
64
|
+
/** Include app-discovered skills from the default agent endpoint. Default true. */
|
|
65
|
+
includeDefaultSlashSkills?: boolean;
|
|
66
|
+
/** Called when a slash command from the shared / menu is executed. */
|
|
67
|
+
onSlashCommand?: (command: string) => void;
|
|
68
|
+
/** External model list for hosts that already resolve models outside the app. */
|
|
69
|
+
availableModels?: EngineModelGroup[];
|
|
70
|
+
/** Whether the external model list is still being resolved. */
|
|
71
|
+
modelListLoading?: boolean;
|
|
72
|
+
selectedModel?: string;
|
|
73
|
+
selectedEngine?: string;
|
|
74
|
+
selectedEffort?: ReasoningEffort;
|
|
75
|
+
onModelChange?: (model: string, engine: string) => void;
|
|
76
|
+
onEffortChange?: (effort: ReasoningEffort) => void;
|
|
77
|
+
/**
|
|
78
|
+
* Enable server-backed model/provider status checks. Defaults off when the
|
|
79
|
+
* host supplies model state and callbacks, otherwise on.
|
|
80
|
+
*/
|
|
81
|
+
modelStatusChecksEnabled?: boolean;
|
|
82
|
+
/** Called whenever the plain editor text changes. */
|
|
83
|
+
onTextChange?: (text: string) => void;
|
|
84
|
+
/**
|
|
85
|
+
* Override the Builder.io connect action in the model picker. When provided,
|
|
86
|
+
* clicking "Connect Builder.io" calls this instead of opening a browser popup.
|
|
87
|
+
* Used by the Electron desktop app to route through the native IPC handler.
|
|
88
|
+
*/
|
|
89
|
+
onConnectProvider?: () => void;
|
|
90
|
+
/** Called when a local runtime needs its native sign-in/setup flow. */
|
|
91
|
+
onConnectLocalRuntime?: (engine: string) => void;
|
|
92
|
+
/** Imperative handle for focusing the composer. */
|
|
93
|
+
composerRef?: Ref<TiptapComposerHandle>;
|
|
94
|
+
}
|
|
95
|
+
export declare function buildPromptComposerSubmission(options: {
|
|
96
|
+
text: string;
|
|
97
|
+
attachments?: ReadonlyArray<unknown>;
|
|
98
|
+
}): Promise<{
|
|
99
|
+
text: string;
|
|
100
|
+
files: File[];
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Standalone composer that mirrors the agent sidebar's input experience —
|
|
104
|
+
* voice dictation, file upload, model selector, submit-on-Enter — for use in
|
|
105
|
+
* popovers and inline prompt forms (create tool, create deck, create dashboard,
|
|
106
|
+
* the Dispatch new-app flow, etc.).
|
|
107
|
+
*
|
|
108
|
+
* The host owns submission: when the user presses Enter or clicks submit,
|
|
109
|
+
* `onSubmit(text, files, references, options)` is called. PromptComposer runs
|
|
110
|
+
* its own minimal assistant-ui runtime so it can be dropped into any subtree
|
|
111
|
+
* without needing the outer chat to be mounted.
|
|
112
|
+
*/
|
|
113
|
+
export declare function PromptComposer(props: PromptComposerProps): import("react").JSX.Element;
|
|
114
|
+
//# sourceMappingURL=PromptComposer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptComposer.d.ts","sourceRoot":"","sources":["../../src/composer/PromptComposer.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,GAAG,EACR,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAE1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,0BAA0B,EAC1B,SAAS,EACT,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,kBAAkB,EAAE,EAC3B,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,EAAE,2BAA2B,KACjC,IAAI,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;IACjD,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gFAAgF;IAChF,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,yEAAyE;IACzE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,sFAAsF;IACtF,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC3C,+DAA+D;IAC/D,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAC5B,mFAAmF;IACnF,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,mFAAmF;IACnF,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,sEAAsE;IACtE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,iFAAiF;IACjF,eAAe,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACrC,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,qDAAqD;IACrD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,uEAAuE;IACvE,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,mDAAmD;IACnD,WAAW,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;CACzC;AAwED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACtC,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAyC3C;AAyYD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,+BAsCxD"}
|