@parhelia/core 0.2.12782 → 0.2.12786

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/editor/ai/AgentImageCopyButton.d.ts +6 -0
  2. package/dist/editor/ai/AgentImageCopyButton.js +93 -0
  3. package/dist/editor/ai/AgentImageCopyButton.js.map +1 -0
  4. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.d.ts +24 -0
  5. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js +97 -0
  6. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js.map +1 -0
  7. package/dist/editor/ai/terminal/components/ValueDiff.d.ts +15 -0
  8. package/dist/editor/ai/terminal/components/ValueDiff.js +21 -0
  9. package/dist/editor/ai/terminal/components/ValueDiff.js.map +1 -0
  10. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +1 -0
  11. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +2 -0
  12. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -0
  13. package/dist/editor/ai/terminal/components/toolCallContentRenderers.d.ts +15 -0
  14. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +12 -0
  15. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -0
  16. package/dist/editor/bridge/protocol.d.ts +17 -0
  17. package/dist/editor/bridge/protocol.js.map +1 -1
  18. package/dist/editor/client/editContext.d.ts +10 -0
  19. package/dist/editor/client/editContext.js.map +1 -1
  20. package/dist/editor/client/hooks/activeSessionSnapshots.d.ts +2 -0
  21. package/dist/editor/client/hooks/activeSessionSnapshots.js +43 -0
  22. package/dist/editor/client/hooks/activeSessionSnapshots.js.map +1 -0
  23. package/dist/editor/client/hooks/operationRefreshDeduplication.d.ts +22 -0
  24. package/dist/editor/client/hooks/operationRefreshDeduplication.js +45 -0
  25. package/dist/editor/client/hooks/operationRefreshDeduplication.js.map +1 -0
  26. package/dist/editor/client/hooks/socketMessageRetention.d.ts +7 -0
  27. package/dist/editor/client/hooks/socketMessageRetention.js +11 -0
  28. package/dist/editor/client/hooks/socketMessageRetention.js.map +1 -0
  29. package/dist/editor/client/hooks/useClientInfoRegistration.d.ts +13 -0
  30. package/dist/editor/client/hooks/useClientInfoRegistration.js +38 -0
  31. package/dist/editor/client/hooks/useClientInfoRegistration.js.map +1 -0
  32. package/dist/editor/client/undoTargetResolution.d.ts +28 -0
  33. package/dist/editor/client/undoTargetResolution.js +69 -0
  34. package/dist/editor/client/undoTargetResolution.js.map +1 -0
  35. package/dist/editor/field-types/richtext/utils/conversion.d.ts +2 -1
  36. package/dist/editor/field-types/richtext/utils/conversion.js +3 -1
  37. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
  38. package/dist/editor/field-types/singleLineTextValue.d.ts +3 -0
  39. package/dist/editor/field-types/singleLineTextValue.js +9 -0
  40. package/dist/editor/field-types/singleLineTextValue.js.map +1 -0
  41. package/dist/editor/insertOptionCompatibility.d.ts +7 -0
  42. package/dist/editor/insertOptionCompatibility.js +15 -0
  43. package/dist/editor/insertOptionCompatibility.js.map +1 -0
  44. package/dist/editor/media-selector/mediaItemDrag.d.ts +28 -0
  45. package/dist/editor/media-selector/mediaItemDrag.js +42 -0
  46. package/dist/editor/media-selector/mediaItemDrag.js.map +1 -0
  47. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.d.ts +1 -0
  48. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +14 -0
  49. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -0
  50. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.d.ts +7 -0
  51. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js +44 -0
  52. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js.map +1 -0
  53. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +26 -12
  54. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  55. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +58 -0
  56. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +731 -0
  57. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -0
  58. package/dist/editor/page-editor-chrome/bridgeLinkValue.d.ts +10 -0
  59. package/dist/editor/page-editor-chrome/bridgeLinkValue.js +55 -0
  60. package/dist/editor/page-editor-chrome/bridgeLinkValue.js.map +1 -0
  61. package/dist/editor/page-viewer/bridgeInlineAiSelection.d.ts +17 -0
  62. package/dist/editor/page-viewer/bridgeInlineAiSelection.js +80 -0
  63. package/dist/editor/page-viewer/bridgeInlineAiSelection.js.map +1 -0
  64. package/dist/editor/page-viewer/bridgeInlineEditCommit.d.ts +18 -0
  65. package/dist/editor/page-viewer/bridgeInlineEditCommit.js +24 -0
  66. package/dist/editor/page-viewer/bridgeInlineEditCommit.js.map +1 -0
  67. package/dist/editor/page-viewer/bridgeItemChangeTarget.d.ts +9 -0
  68. package/dist/editor/page-viewer/bridgeItemChangeTarget.js +38 -0
  69. package/dist/editor/page-viewer/bridgeItemChangeTarget.js.map +1 -0
  70. package/dist/editor/page-viewer/bridgePointerDragRelease.d.ts +31 -0
  71. package/dist/editor/page-viewer/bridgePointerDragRelease.js +32 -0
  72. package/dist/editor/page-viewer/bridgePointerDragRelease.js.map +1 -0
  73. package/dist/editor/page-viewer/fullscreenPagePath.d.ts +1 -0
  74. package/dist/editor/page-viewer/fullscreenPagePath.js +11 -0
  75. package/dist/editor/page-viewer/fullscreenPagePath.js.map +1 -0
  76. package/dist/editor/page-viewer/internalLinkNavigation.d.ts +9 -0
  77. package/dist/editor/page-viewer/internalLinkNavigation.js +104 -0
  78. package/dist/editor/page-viewer/internalLinkNavigation.js.map +1 -0
  79. package/dist/editor/reviews/FeedbackFilters.d.ts +16 -0
  80. package/dist/editor/reviews/FeedbackFilters.js +45 -0
  81. package/dist/editor/reviews/FeedbackFilters.js.map +1 -0
  82. package/dist/editor/reviews/commentState.d.ts +4 -0
  83. package/dist/editor/reviews/commentState.js +15 -0
  84. package/dist/editor/reviews/commentState.js.map +1 -0
  85. package/dist/editor/settings/index/IndexGenerationsSection.d.ts +8 -0
  86. package/dist/editor/settings/index/IndexGenerationsSection.js +93 -0
  87. package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -0
  88. package/dist/editor/settings/panels/MemoriesPanel.d.ts +16 -0
  89. package/dist/editor/settings/panels/MemoriesPanel.js +292 -0
  90. package/dist/editor/settings/panels/MemoriesPanel.js.map +1 -0
  91. package/dist/editor/settings/panels/MemoryEntryDialog.d.ts +45 -0
  92. package/dist/editor/settings/panels/MemoryEntryDialog.js +167 -0
  93. package/dist/editor/settings/panels/MemoryEntryDialog.js.map +1 -0
  94. package/dist/editor/settings/panels/RenderingHostsPanel.d.ts +2 -0
  95. package/dist/editor/settings/panels/RenderingHostsPanel.js +63 -0
  96. package/dist/editor/settings/panels/RenderingHostsPanel.js.map +1 -0
  97. package/dist/editor/settings/panels/projectTemplateDuplication.d.ts +5 -0
  98. package/dist/editor/settings/panels/projectTemplateDuplication.js +57 -0
  99. package/dist/editor/settings/panels/projectTemplateDuplication.js.map +1 -0
  100. package/dist/editor/sidebar/WorkboxFilters.d.ts +11 -0
  101. package/dist/editor/sidebar/WorkboxFilters.js +61 -0
  102. package/dist/editor/sidebar/WorkboxFilters.js.map +1 -0
  103. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -0
  104. package/dist/editor/version-diff/versionDiffGeometryKeys.js +16 -0
  105. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -0
  106. package/dist/revision.d.ts +2 -2
  107. package/dist/revision.js +2 -2
  108. package/package.json +1 -1
  109. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +0 -5
  110. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +0 -12
  111. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +0 -1
  112. package/dist/editor/ai/terminal/components/AgentThinkingDots.d.ts +0 -5
  113. package/dist/editor/ai/terminal/components/AgentThinkingDots.js +0 -9
  114. package/dist/editor/ai/terminal/components/AgentThinkingDots.js.map +0 -1
  115. package/dist/editor/reviews/CommentsAndFeedback.d.ts +0 -8
  116. package/dist/editor/reviews/CommentsAndFeedback.js +0 -17
  117. package/dist/editor/reviews/CommentsAndFeedback.js.map +0 -1
  118. package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +0 -53
  119. package/dist/editor/reviews/CreateReviewDetailsStep.js +0 -77
  120. package/dist/editor/reviews/CreateReviewDetailsStep.js.map +0 -1
  121. package/dist/splash-screen/ParheliaAssistantChat.d.ts +0 -8
  122. package/dist/splash-screen/ParheliaAssistantChat.js +0 -507
  123. package/dist/splash-screen/ParheliaAssistantChat.js.map +0 -1
  124. package/dist/splash-screen/SplashScreenAgentContext.d.ts +0 -28
  125. package/dist/splash-screen/SplashScreenAgentContext.js +0 -51
  126. package/dist/splash-screen/SplashScreenAgentContext.js.map +0 -1
@@ -0,0 +1,167 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from "react";
3
+ import { Brain } from "lucide-react";
4
+ import { toast } from "sonner";
5
+ import { Button } from "../../../components/ui/button";
6
+ import { ActionButton } from "../../../components/ActionButton";
7
+ import { Input } from "../../../components/ui/input";
8
+ import { Textarea } from "../../../components/ui/textarea";
9
+ import { Dialog, DialogContent, DialogFooter, } from "../../../components/ui/dialog";
10
+ import { StyledDialogTitle } from "../../../components/ui/styled-dialog-title";
11
+ import { cn } from "../../../lib/utils";
12
+ import { LanguageSelectionGrid } from "../../../components/ui/LanguageSelectionGrid";
13
+ import { TreeItemPicker } from "../../personalization/TreeItemPicker";
14
+ import { saveAgentMemory, MEMORY_CONTENT_LIMITS, } from "../../services/agentService";
15
+ import { getLanguages } from "../../services/contentService";
16
+ export const CONTENT_ROOT_ID = "0de95ae4-41ab-4d01-9eb0-67441b7c2450"; // /sitecore/content
17
+ /**
18
+ * The one editor for memory entries in Settings - creating and editing, guidance and
19
+ * personal, all use this dialog so the fields, sizing and hints never diverge.
20
+ *
21
+ * (The chat tray deliberately does not use it: tray panels live inside a popover that
22
+ * unmounts on dismiss, so the tray keeps its small inline form.)
23
+ */
24
+ export function MemoryEntryDialog({ target, onClose, onSaved, }) {
25
+ const [scopeId, setScopeId] = useState("");
26
+ const [languages, setLanguages] = useState([]);
27
+ const [loadMode, setLoadMode] = useState("eager");
28
+ const [title, setTitle] = useState("");
29
+ const [content, setContent] = useState("");
30
+ const [saving, setSaving] = useState(false);
31
+ const [error, setError] = useState(null);
32
+ // The system-wide language list, not editContext.itemLanguages: this dialog edits scopes
33
+ // that have nothing to do with the loaded item, and Settings has no editor shell anyway.
34
+ const [availableLanguages, setAvailableLanguages] = useState([]);
35
+ const languagesRequestedRef = useRef(false);
36
+ // Render from the last non-null target so the labels don't flash to the
37
+ // fallback wording while the close animation plays after target goes null.
38
+ const lastTargetRef = useRef(null);
39
+ if (target)
40
+ lastTargetRef.current = target;
41
+ const view = target ?? lastTargetRef.current;
42
+ const isGuidance = view?.kind === "guidance";
43
+ const isEdit = !!view?.entry;
44
+ // Seed the drafts whenever a new target opens the dialog.
45
+ useEffect(() => {
46
+ if (!target)
47
+ return;
48
+ setScopeId(target.kind === "guidance"
49
+ ? (target.entry?.scopeId ?? target.scopeId ?? "")
50
+ : "");
51
+ setLanguages(target.kind === "guidance" ? (target.entry?.languages ?? []) : []);
52
+ setLoadMode(target.entry?.loadMode ?? "eager");
53
+ setTitle(target.entry?.title ?? "");
54
+ setContent(target.entry?.content ?? "");
55
+ setError(null);
56
+ }, [target]);
57
+ // Fetched once, the first time a guidance target opens. A failure just leaves the grid
58
+ // empty: saving still works and the entry stays unrestricted, which is the safe default.
59
+ useEffect(() => {
60
+ if (target?.kind !== "guidance" || languagesRequestedRef.current)
61
+ return;
62
+ languagesRequestedRef.current = true;
63
+ void (async () => {
64
+ try {
65
+ const result = await getLanguages();
66
+ const list = (result?.data ??
67
+ result ??
68
+ []);
69
+ setAvailableLanguages(Array.isArray(list) ? list : []);
70
+ }
71
+ catch (err) {
72
+ console.error("Failed to load languages for memory entry dialog", err);
73
+ }
74
+ })();
75
+ }, [target]);
76
+ const languageOptions = useMemo(() => availableLanguages.map((language) => ({
77
+ code: language.languageCode,
78
+ name: language.name,
79
+ icon: language.icon,
80
+ })), [availableLanguages]);
81
+ const maxContentLength = MEMORY_CONTENT_LIMITS[loadMode];
82
+ // maxLength does not truncate a value that is already in the field, so switching an
83
+ // over-long entry back to "Always apply" has to block saving rather than silently send
84
+ // something the server will reject.
85
+ const overContentLimit = content.trim().length > maxContentLength;
86
+ const missingOnDemandTitle = loadMode === "ondemand" && !title.trim();
87
+ const canSave = !!target &&
88
+ !!content.trim() &&
89
+ !overContentLimit &&
90
+ !missingOnDemandTitle &&
91
+ (target.kind !== "guidance" || !!scopeId) &&
92
+ !saving;
93
+ const handleSave = async () => {
94
+ if (!target || !canSave)
95
+ return;
96
+ try {
97
+ setSaving(true);
98
+ setError(null);
99
+ const result = await saveAgentMemory({
100
+ id: target.entry?.id,
101
+ ...(target.kind === "personal"
102
+ ? { profileId: target.profileId }
103
+ : // Always explicit: this dialog knows the full selection, so an empty array
104
+ // deliberately clears a restriction the editor just removed.
105
+ { scopeId, entryLanguages: languages }),
106
+ loadMode,
107
+ title: title.trim() || null,
108
+ content: content.trim(),
109
+ });
110
+ if (!result.success || !result.memory) {
111
+ setError(result.error || "Failed to save");
112
+ return;
113
+ }
114
+ toast.success(isGuidance
115
+ ? isEdit
116
+ ? "Content memory updated"
117
+ : "Content memory added"
118
+ : isEdit
119
+ ? "Memory updated"
120
+ : "Memory added");
121
+ await onSaved(result.memory, isGuidance ? scopeId : undefined);
122
+ onClose();
123
+ }
124
+ catch (err) {
125
+ console.error("Failed to save memory entry", err);
126
+ setError(err instanceof Error ? err.message : "Failed to save");
127
+ }
128
+ finally {
129
+ setSaving(false);
130
+ }
131
+ };
132
+ const dialogTitle = isGuidance
133
+ ? isEdit
134
+ ? "Edit content memory"
135
+ : "New content memory"
136
+ : isEdit
137
+ ? "Edit memory"
138
+ : "New memory";
139
+ const subtitle = isGuidance
140
+ ? "Tone of voice, terminology or style that AI should follow for a part of the content tree"
141
+ : "A durable fact or preference the agent keeps in mind when working with you";
142
+ const labelClass = "text-neutral-grey-100 block text-sm font-medium";
143
+ return (_jsx(Dialog, { open: !!target, onOpenChange: (open) => !open && onClose(), children: _jsxs(DialogContent, { className: "gap-0 p-0 sm:max-w-xl", "data-testid": "memory-entry-dialog", onKeyDown: (e) => {
144
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
145
+ e.preventDefault();
146
+ void handleSave();
147
+ }
148
+ }, children: [_jsx(StyledDialogTitle, { icon: _jsx(Brain, { strokeWidth: 1 }), title: dialogTitle, subtitle: subtitle }), _jsxs("div", { className: "space-y-4 overflow-y-auto px-8 pt-6 pb-6", children: [_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { htmlFor: "memory-entry-title", className: labelClass, children: ["Title", " ", _jsx("span", { className: "text-neutral-grey-50 font-normal", children: loadMode === "ondemand" ? "(required)" : "(optional)" })] }), _jsx(Input, { id: "memory-entry-title", value: title, onChange: (e) => setTitle(e.target.value), placeholder: isGuidance ? "Tone of voice" : "What this is about", maxLength: 200, "data-testid": "memory-entry-dialog-title" }), loadMode === "ondemand" && (_jsx("p", { className: "text-neutral-grey-50 text-xs", children: "The title is all the agent sees when deciding whether to load this memory, so make it descriptive." }))] }), _jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: labelClass, children: "When to apply" }), _jsx("div", { className: "border-border-default flex gap-1 rounded-[4px] border p-1", role: "radiogroup", "data-testid": "memory-entry-dialog-load-mode", children: [
149
+ ["eager", "Always apply"],
150
+ ["ondemand", "Load when relevant"],
151
+ ].map(([mode, label]) => (_jsx("button", { type: "button", role: "radio", "aria-checked": loadMode === mode, onClick: () => setLoadMode(mode), className: cn("flex-1 rounded-[3px] px-3 py-1.5 text-sm transition-colors", loadMode === mode
152
+ ? "bg-neutral-grey-10 text-neutral-grey-100 font-medium"
153
+ : "text-neutral-grey-50 hover:text-neutral-grey-100"), "data-testid": `memory-entry-dialog-load-mode-${mode}`, children: label }, mode))) }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: loadMode === "ondemand"
154
+ ? "Kept out of the everyday prompt. The agent sees the title and loads the text when it looks relevant - use this for glossaries and other long reference material."
155
+ : "Injected into every prompt, so it always applies." })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "memory-entry-content", className: labelClass, children: "Text" }), _jsx(Textarea, { id: "memory-entry-content", value: content, onChange: (e) => setContent(e.target.value), placeholder: isGuidance
156
+ ? "Address the reader as you. Keep sentences short. Never use exclamation marks."
157
+ : "What should the agent remember?", maxLength: maxContentLength, autoFocus: isEdit, className: "max-h-72 min-h-40 text-sm", "data-testid": "memory-entry-dialog-content" }), _jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx("p", { className: "text-neutral-grey-50 text-xs", children: isGuidance
158
+ ? "Applies to chat agents, inline AI edits, generators and autocomplete. Treated as a strong preference, not an enforced rule."
159
+ : "Injected into the agent's system prompt. The agent can also update its own memories as you work with it." }), _jsxs("span", { className: cn("shrink-0 text-[11px] tabular-nums", overContentLimit
160
+ ? "text-feedback-red"
161
+ : "text-neutral-grey-50"), children: [content.length, "/", maxContentLength] })] }), overContentLimit && (_jsxs("p", { className: "text-feedback-red text-xs", children: ["Shorten the text to ", maxContentLength, " characters, or keep it as a \"Load when relevant\" memory."] }))] }), view?.kind === "guidance" ? (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "memory-entry-scope", className: labelClass, children: "Applies to" }), _jsx(TreeItemPicker, { value: scopeId, rootItemId: CONTENT_ROOT_ID, placeholder: "Select content...", onChange: setScopeId }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: view.entry
162
+ ? "The item this memory is attached to. Picking a different item moves the memory there."
163
+ : "The item you pick and everything below it. Pick the root of a site for site-wide tone of voice." }), _jsxs("div", { className: "space-y-2 pt-2", children: [_jsxs("label", { className: labelClass, children: ["Languages", " ", _jsx("span", { className: "text-neutral-grey-50 font-normal", children: "(optional)" })] }), _jsx(LanguageSelectionGrid, { languages: languageOptions, selectedLanguageCodes: languages, onSelectedLanguageCodesChange: setLanguages, headerless: true, testId: "memory-entry-dialog-languages", bodyClassName: "max-h-40", emptyState: "No languages available." }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "Leave empty to apply in every language, or limit this memory to the selected language versions." })] })] })) : view?.kind === "personal" && view.profileName ? (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: labelClass, children: "Agent profile" }), _jsx("div", { className: "border-border-default bg-neutral-grey-5 rounded-[4px] border px-3 py-2", children: _jsx("span", { className: "text-neutral-grey-100 text-sm", children: view.profileName }) })] })) : null, error && (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red rounded border p-2 text-xs whitespace-pre-wrap", children: error }))] }), _jsxs(DialogFooter, { className: "border-border-default gap-2 border-t pt-5 sm:gap-3", children: [_jsx(Button, { variant: "outline", onClick: onClose, disabled: saving, children: "Cancel" }), _jsx(ActionButton, { onClick: () => void handleSave(), disabled: !canSave, isLoading: saving, loadingText: "Saving...",
164
+ // Cancel inherits "lg" from the DialogFooter's ButtonSizeProvider; match it.
165
+ size: "lg", "data-testid": "memory-entry-dialog-save", children: isEdit ? "Save changes" : "Add memory" })] })] }) }));
166
+ }
167
+ //# sourceMappingURL=MemoryEntryDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryEntryDialog.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/MemoryEntryDialog.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EACL,MAAM,EACN,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EACL,eAAe,EACf,qBAAqB,GAGtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,MAAM,CAAC,MAAM,eAAe,GAAG,sCAAsC,CAAC,CAAC,oBAAoB;AAuC3F;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAO,EACP,OAAO,GACgB;IACvB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,OAAO,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,yFAAyF;IACzF,yFAAyF;IACzF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;IAC7E,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5C,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,aAAa,GAAG,MAAM,CAAiC,IAAI,CAAC,CAAC;IACnE,IAAI,MAAM;QAAE,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC;IAE7C,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,KAAK,UAAU,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;IAE7B,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,UAAU,CACR,MAAM,CAAC,IAAI,KAAK,UAAU;YACxB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACjD,CAAC,CAAC,EAAE,CACP,CAAC;QACF,YAAY,CACV,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAClE,CAAC;QACF,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,OAAO,CAAC,CAAC;QAC/C,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACpC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,uFAAuF;IACvF,yFAAyF;IACzF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,IAAI,qBAAqB,CAAC,OAAO;YAAE,OAAO;QACzE,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QACrC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAE,MAAgC,EAAE,IAAI;oBACnD,MAAM;oBACN,EAAE,CAAe,CAAC;gBACpB,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CACH,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,QAAQ,CAAC,YAAY;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC,CAAC,EACL,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACzD,oFAAoF;IACpF,uFAAuF;IACvF,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC;IAClE,MAAM,oBAAoB,GAAG,QAAQ,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEtE,MAAM,OAAO,GACX,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;QAChB,CAAC,gBAAgB;QACjB,CAAC,oBAAoB;QACrB,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC;QACzC,CAAC,MAAM,CAAC;IAEV,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE;gBACpB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;oBAC5B,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;oBACjC,CAAC,CAAC,2EAA2E;wBAC3E,6DAA6D;wBAC7D,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;gBAC3C,QAAQ;gBACR,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI;gBAC3B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;aACxB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YACD,KAAK,CAAC,OAAO,CACX,UAAU;gBACR,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,wBAAwB;oBAC1B,CAAC,CAAC,sBAAsB;gBAC1B,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAC,cAAc,CACrB,CAAC;YACF,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/D,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAClE,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,UAAU;QAC5B,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,oBAAoB;QACxB,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,YAAY,CAAC;IAEnB,MAAM,QAAQ,GAAG,UAAU;QACzB,CAAC,CAAC,0FAA0F;QAC5F,CAAC,CAAC,4EAA4E,CAAC;IAEjF,MAAM,UAAU,GAAG,iDAAiD,CAAC;IAErE,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,YAChE,MAAC,aAAa,IACZ,SAAS,EAAC,uBAAuB,iBACrB,qBAAqB,EACjC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBACf,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oBAClD,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,KAAK,UAAU,EAAE,CAAC;gBACpB,CAAC;YACH,CAAC,aAED,KAAC,iBAAiB,IAChB,IAAI,EAAE,KAAC,KAAK,IAAC,WAAW,EAAE,CAAC,GAAI,EAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,QAAQ,GAClB,EAEF,eAAK,SAAS,EAAC,0CAA0C,aACvD,eAAK,SAAS,EAAC,WAAW,aACxB,iBAAO,OAAO,EAAC,oBAAoB,EAAC,SAAS,EAAE,UAAU,sBACjD,GAAG,EACT,eAAM,SAAS,EAAC,kCAAkC,YAC/C,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,GACjD,IACD,EACR,KAAC,KAAK,IACJ,EAAE,EAAC,oBAAoB,EACvB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB,EAChE,SAAS,EAAE,GAAG,iBACF,2BAA2B,GACvC,EACD,QAAQ,KAAK,UAAU,IAAI,CAC1B,YAAG,SAAS,EAAC,8BAA8B,mHAGvC,CACL,IACG,EAEN,eAAK,SAAS,EAAC,WAAW,aACxB,gBAAO,SAAS,EAAE,UAAU,8BAAuB,EACnD,cACE,SAAS,EAAC,2DAA2D,EACrE,IAAI,EAAC,YAAY,iBACL,+BAA+B,YAGzC;wCACE,CAAC,OAAO,EAAE,cAAc,CAAC;wCACzB,CAAC,UAAU,EAAE,oBAAoB,CAAC;qCAErC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACvB,iBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,OAAO,kBACE,QAAQ,KAAK,IAAI,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAChC,SAAS,EAAE,EAAE,CACX,4DAA4D,EAC5D,QAAQ,KAAK,IAAI;4CACf,CAAC,CAAC,sDAAsD;4CACxD,CAAC,CAAC,kDAAkD,CACvD,iBACY,iCAAiC,IAAI,EAAE,YAEnD,KAAK,IAbD,IAAI,CAcF,CACV,CAAC,GACE,EACN,YAAG,SAAS,EAAC,8BAA8B,YACxC,QAAQ,KAAK,UAAU;wCACtB,CAAC,CAAC,kKAAkK;wCACpK,CAAC,CAAC,mDAAmD,GACrD,IACA,EAEN,eAAK,SAAS,EAAC,WAAW,aACxB,gBAAO,OAAO,EAAC,sBAAsB,EAAC,SAAS,EAAE,UAAU,qBAEnD,EACR,KAAC,QAAQ,IACP,EAAE,EAAC,sBAAsB,EACzB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC3C,WAAW,EACT,UAAU;wCACR,CAAC,CAAC,+EAA+E;wCACjF,CAAC,CAAC,iCAAiC,EAEvC,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAC,2BAA2B,iBACzB,6BAA6B,GACzC,EACF,eAAK,SAAS,EAAC,2CAA2C,aACxD,YAAG,SAAS,EAAC,8BAA8B,YACxC,UAAU;gDACT,CAAC,CAAC,6HAA6H;gDAC/H,CAAC,CAAC,0GAA0G,GAC5G,EACJ,gBACE,SAAS,EAAE,EAAE,CACX,mCAAmC,EACnC,gBAAgB;gDACd,CAAC,CAAC,mBAAmB;gDACrB,CAAC,CAAC,sBAAsB,CAC3B,aAEA,OAAO,CAAC,MAAM,OAAG,gBAAgB,IAC7B,IACH,EACL,gBAAgB,IAAI,CACnB,aAAG,SAAS,EAAC,2BAA2B,qCACjB,gBAAgB,mEAEnC,CACL,IACG,EAEL,IAAI,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAC3B,eAAK,SAAS,EAAC,WAAW,aACxB,gBAAO,OAAO,EAAC,oBAAoB,EAAC,SAAS,EAAE,UAAU,2BAEjD,EACR,KAAC,cAAc,IACb,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAC,mBAAmB,EAC/B,QAAQ,EAAE,UAAU,GACpB,EACF,YAAG,SAAS,EAAC,8BAA8B,YACxC,IAAI,CAAC,KAAK;wCACT,CAAC,CAAC,uFAAuF;wCACzF,CAAC,CAAC,iGAAiG,GACnG,EAEJ,eAAK,SAAS,EAAC,gBAAgB,aAC7B,iBAAO,SAAS,EAAE,UAAU,0BAChB,GAAG,EACb,eAAM,SAAS,EAAC,kCAAkC,2BAE3C,IACD,EACR,KAAC,qBAAqB,IACpB,SAAS,EAAE,eAAe,EAC1B,qBAAqB,EAAE,SAAS,EAChC,6BAA6B,EAAE,YAAY,EAC3C,UAAU,QACV,MAAM,EAAC,+BAA+B,EACtC,aAAa,EAAC,UAAU,EACxB,UAAU,EAAC,yBAAyB,GACpC,EACF,YAAG,SAAS,EAAC,8BAA8B,gHAGvC,IACA,IACF,CACP,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClD,eAAK,SAAS,EAAC,WAAW,aACxB,gBAAO,SAAS,EAAE,UAAU,8BAAuB,EACnD,cAAK,SAAS,EAAC,wEAAwE,YACrF,eAAM,SAAS,EAAC,+BAA+B,YAC5C,IAAI,CAAC,WAAW,GACZ,GACH,IACF,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,4GAA4G,YACxH,KAAK,GACF,CACP,IACG,EAEN,MAAC,YAAY,IAAC,SAAS,EAAC,oDAAoD,aAC1E,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAEnD,EACT,KAAC,YAAY,IACX,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,EAAE,EAChC,QAAQ,EAAE,CAAC,OAAO,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAC,WAAW;4BACvB,6EAA6E;4BAC7E,IAAI,EAAC,IAAI,iBACG,0BAA0B,YAErC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,GAC1B,IACF,IACD,GACT,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function RenderingHostsPanel(): import("react").JSX.Element;
2
+ export default RenderingHostsPanel;
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState, } from "react";
3
+ import { CircleSlash, ExternalLink, FolderCode, RefreshCw, Server, } from "lucide-react";
4
+ import { Button } from "../../../components/ui/button";
5
+ import { SearchInput } from "../../../components/SearchInput";
6
+ import { SettingsPanelLayout } from "../SettingsPanelLayout";
7
+ import { LoadingState } from "../../ui/LoadingState";
8
+ import { getRenderingHosts, } from "../../services/systemService";
9
+ function configurationSourceLabel(source) {
10
+ return source === "environment"
11
+ ? "Environment variable"
12
+ : source === "connection-string"
13
+ ? "Connection strings"
14
+ : source;
15
+ }
16
+ export function RenderingHostsPanel() {
17
+ const [state, setState] = useState("idle");
18
+ const [error, setError] = useState();
19
+ const [hosts, setHosts] = useState([]);
20
+ const [query, setQuery] = useState("");
21
+ const load = useCallback(async () => {
22
+ setState("loading");
23
+ setError(undefined);
24
+ const result = await getRenderingHosts();
25
+ if (result.type !== "success" || !result.data) {
26
+ setState("error");
27
+ setError(result.details || result.summary || "Failed to load rendering hosts.");
28
+ return;
29
+ }
30
+ setHosts(result.data);
31
+ setState("success");
32
+ }, []);
33
+ useEffect(() => {
34
+ void load();
35
+ }, [load]);
36
+ const filteredHosts = useMemo(() => {
37
+ const normalizedQuery = query.trim().toLowerCase();
38
+ if (!normalizedQuery)
39
+ return hosts;
40
+ return hosts.filter((host) => [
41
+ host.name,
42
+ host.url,
43
+ host.mode,
44
+ ...host.sites,
45
+ host.sourcePath,
46
+ host.configurationSource,
47
+ host.configurationKey,
48
+ ]
49
+ .filter(Boolean)
50
+ .some((value) => value.toLowerCase().includes(normalizedQuery)));
51
+ }, [hosts, query]);
52
+ return (_jsxs(SettingsPanelLayout, { testId: "rendering-hosts-panel", contentClassName: "flex flex-col gap-4", children: [_jsx("div", { className: "rounded-lg bg-white p-4 md:p-6", children: _jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center", children: [_jsx("div", { className: "min-w-0 flex-1", children: _jsx(SearchInput, { value: query, onChange: setQuery, placeholder: "Search rendering hosts", size: "lg", background: "white", inputClassName: "border-border-default text-neutral-grey-100 placeholder:text-neutral-grey-50 focus:border-component-suggestions focus:ring-component-suggestions h-9 rounded-md text-sm transition-colors outline-none focus:ring-2" }) }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: () => void load(), disabled: state === "loading", children: [_jsx(RefreshCw, { className: state === "loading" ? "h-4 w-4 animate-spin" : "h-4 w-4", strokeWidth: 1 }), "Refresh"] })] }) }), state === "error" && (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red rounded-lg border p-4 text-sm", children: error })), state === "loading" && hosts.length === 0 && (_jsx(LoadingState, { variant: "inline", message: "Loading rendering hosts...", spinnerSize: "sm" })), state !== "loading" && filteredHosts.length === 0 && !error && (_jsxs("div", { className: "border-border-default bg-neutral-grey-5 rounded-lg border p-6 text-center", children: [_jsx(CircleSlash, { className: "text-neutral-grey-50 mx-auto mb-3 h-8 w-8", strokeWidth: 1 }), _jsx("p", { className: "text-neutral-grey-50 text-sm", children: hosts.length === 0
53
+ ? "No rendering hosts are configured."
54
+ : "No rendering hosts match the current search." })] })), filteredHosts.length > 0 && (_jsx("div", { className: "space-y-3", children: filteredHosts.map((host) => (_jsx(RenderingHostCard, { host: host }, host.name))) }))] }));
55
+ }
56
+ function RenderingHostCard({ host }) {
57
+ return (_jsx("article", { className: "border-border-default rounded-lg border bg-white p-5", "data-testid": `rendering-host-${host.name}`, children: _jsxs("div", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Server, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: host.name }), _jsx("span", { className: "rounded-badge bg-neutral-grey-5 badge-pad-sm text-2xs text-neutral-grey-100 font-medium", children: host.mode })] }), _jsxs("a", { href: host.url, target: "_blank", rel: "noreferrer", className: "text-feedback-blue mt-2 inline-flex max-w-full items-center gap-1 text-sm hover:underline", children: [_jsx("span", { className: "truncate", children: host.url }), _jsx(ExternalLink, { className: "h-3.5 w-3.5 shrink-0", strokeWidth: 1 })] }), _jsxs("div", { className: "mt-4 grid gap-4 md:grid-cols-2", children: [_jsxs(Detail, { label: "Configuration source", children: [_jsx("div", { className: "text-neutral-grey-100", children: configurationSourceLabel(host.configurationSource) }), host.configurationKey && (_jsx("div", { className: "text-neutral-grey-50 mt-1 font-mono text-[11px] break-all", children: host.configurationKey }))] }), _jsx(Detail, { label: "Source root", children: host.sourcePath ? (_jsxs("div", { className: "text-neutral-grey-100 flex items-start gap-1.5 font-mono text-[11px] break-all", children: [_jsx(FolderCode, { className: "mt-px h-3.5 w-3.5 shrink-0", strokeWidth: 1 }), host.sourcePath] })) : (_jsx("span", { className: "text-neutral-grey-50", children: "Not configured" })) })] })] }), _jsx(Detail, { label: "Mapped sites", className: "lg:w-80", children: host.sites.length > 0 ? (_jsx("div", { className: "flex flex-wrap gap-1.5", children: host.sites.map((site) => (_jsx("span", { className: "rounded-badge bg-neutral-grey-5 badge-pad-sm text-2xs text-neutral-grey-100 max-w-full font-medium break-all", children: site }, site))) })) : (_jsx("span", { className: "text-neutral-grey-50", children: "No site mappings" })) })] }) }));
58
+ }
59
+ function Detail({ label, children, className, }) {
60
+ return (_jsxs("div", { className: className, children: [_jsx("div", { className: "text-neutral-grey-50 mb-1 text-xs font-medium tracking-wide", children: label }), _jsx("div", { className: "text-sm", children: children })] }));
61
+ }
62
+ export default RenderingHostsPanel;
63
+ //# sourceMappingURL=RenderingHostsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderingHostsPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/RenderingHostsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProjectTemplate } from "../../../task-board/types";
2
+ type CreateId = () => string;
3
+ export declare function getDuplicateProjectTemplateName(sourceName: string, existingNames: Iterable<string>): string;
4
+ export declare function duplicateProjectTemplate(source: ProjectTemplate, name: string, createId?: CreateId): ProjectTemplate;
5
+ export {};
@@ -0,0 +1,57 @@
1
+ export function getDuplicateProjectTemplateName(sourceName, existingNames) {
2
+ const normalizedExistingNames = new Set(Array.from(existingNames, (name) => name.trim().toLowerCase()));
3
+ const baseName = `Copy of ${sourceName.trim() || "Untitled template"}`;
4
+ if (!normalizedExistingNames.has(baseName.toLowerCase())) {
5
+ return baseName;
6
+ }
7
+ let suffix = 2;
8
+ while (normalizedExistingNames.has(`${baseName} (${suffix})`.toLowerCase())) {
9
+ suffix += 1;
10
+ }
11
+ return `${baseName} (${suffix})`;
12
+ }
13
+ export function duplicateProjectTemplate(source, name, createId = () => crypto.randomUUID()) {
14
+ const projectTemplateId = createId();
15
+ const taskIdMap = new Map(source.taskTemplates.map((task) => [task.id, createId()]));
16
+ const todoIdMap = new Map(source.taskTemplates.flatMap((task) => (task.todos ?? []).map((todo) => [todo.id, createId()])));
17
+ const goalIdMap = new Map((source.goalTemplates ?? []).map((goal) => [goal.id, createId()]));
18
+ return {
19
+ ...source,
20
+ id: projectTemplateId,
21
+ name: name.trim(),
22
+ isSystem: false,
23
+ graphLayout: source.graphLayout
24
+ ? {
25
+ ...source.graphLayout,
26
+ projectTemplateId,
27
+ nodes: (source.graphLayout.nodes ?? []).flatMap((node) => {
28
+ const taskId = taskIdMap.get(node.taskId);
29
+ return taskId ? [{ ...node, taskId }] : [];
30
+ }),
31
+ viewport: source.graphLayout.viewport
32
+ ? { ...source.graphLayout.viewport }
33
+ : null,
34
+ }
35
+ : null,
36
+ taskTemplates: source.taskTemplates.map((task) => ({
37
+ ...task,
38
+ id: taskIdMap.get(task.id),
39
+ parentTaskId: task.parentTaskId
40
+ ? (taskIdMap.get(task.parentTaskId) ?? null)
41
+ : null,
42
+ dependencyIds: Array.from(new Set((task.dependencyIds ?? []).flatMap((dependencyId) => {
43
+ const duplicatedDependencyId = taskIdMap.get(dependencyId);
44
+ return duplicatedDependencyId ? [duplicatedDependencyId] : [];
45
+ }))),
46
+ todos: (task.todos ?? []).map((todo) => ({
47
+ ...todo,
48
+ id: todoIdMap.get(todo.id),
49
+ })),
50
+ })),
51
+ goalTemplates: (source.goalTemplates ?? []).map((goal) => ({
52
+ ...goal,
53
+ id: goalIdMap.get(goal.id),
54
+ })),
55
+ };
56
+ }
57
+ //# sourceMappingURL=projectTemplateDuplication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTemplateDuplication.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/projectTemplateDuplication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { WorkboxItem } from "../../types";
2
+ export declare function getWorkboxTemplateFilterValue(item: WorkboxItem): string;
3
+ export declare function getWorkboxWorkflowFilterValue(item: WorkboxItem): string;
4
+ export declare function filterWorkboxItems(items: WorkboxItem[], selectedTemplateIds: string[], selectedWorkflowIds: string[]): WorkboxItem[];
5
+ export declare function WorkboxFilters({ items, selectedTemplateIds, selectedWorkflowIds, onSelectedTemplateIdsChange, onSelectedWorkflowIdsChange, }: {
6
+ items: WorkboxItem[];
7
+ selectedTemplateIds: string[];
8
+ selectedWorkflowIds: string[];
9
+ onSelectedTemplateIdsChange: (ids: string[]) => void;
10
+ onSelectedWorkflowIdsChange: (ids: string[]) => void;
11
+ }): import("react").JSX.Element;
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ListFilter } from "lucide-react";
3
+ import { Button } from "../../components/ui/button";
4
+ import { Checkbox } from "../../components/ui/checkbox";
5
+ import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
6
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip";
7
+ import { SimpleIconButton } from "../ui/SimpleIconButton";
8
+ const noWorkflowFilterValue = "__no-workflow__";
9
+ export function getWorkboxTemplateFilterValue(item) {
10
+ return item.templateId || `name:${item.templateName}`;
11
+ }
12
+ export function getWorkboxWorkflowFilterValue(item) {
13
+ return item.workflowId || noWorkflowFilterValue;
14
+ }
15
+ export function filterWorkboxItems(items, selectedTemplateIds, selectedWorkflowIds) {
16
+ const templateIds = new Set(selectedTemplateIds);
17
+ const workflowIds = new Set(selectedWorkflowIds);
18
+ return items.filter((item) => (templateIds.size === 0 ||
19
+ templateIds.has(getWorkboxTemplateFilterValue(item))) &&
20
+ (workflowIds.size === 0 ||
21
+ workflowIds.has(getWorkboxWorkflowFilterValue(item))));
22
+ }
23
+ function buildFilterOptions(items, getValue, getLabel) {
24
+ const options = new Map();
25
+ items.forEach((item) => {
26
+ const value = getValue(item);
27
+ const existing = options.get(value);
28
+ if (existing) {
29
+ existing.count += 1;
30
+ return;
31
+ }
32
+ options.set(value, {
33
+ value,
34
+ label: getLabel(item),
35
+ count: 1,
36
+ });
37
+ });
38
+ return [...options.values()].sort((left, right) => left.label.localeCompare(right.label));
39
+ }
40
+ function FilterGroup({ label, emptyMessage, options, selectedValues, onSelectedValuesChange, }) {
41
+ const toggleValue = (value) => {
42
+ onSelectedValuesChange(selectedValues.includes(value)
43
+ ? selectedValues.filter((selectedValue) => selectedValue !== value)
44
+ : [...selectedValues, value]);
45
+ };
46
+ return (_jsxs("div", { className: "border-border-default border-t pt-3 first:border-t-0 first:pt-0", children: [_jsx("div", { className: "text-neutral-grey-50 mb-2 text-xs font-medium", children: label }), options.length > 0 ? (_jsx("div", { className: "space-y-0.5", children: options.map((option) => (_jsxs("label", { className: "hover:bg-neutral-grey-5 flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5", children: [_jsx(Checkbox, { checked: selectedValues.includes(option.value), onCheckedChange: () => toggleValue(option.value), "aria-label": `Filter by ${label.toLowerCase()} ${option.label}` }), _jsx("span", { className: "text-neutral-grey-100 min-w-0 flex-1 truncate text-xs", children: option.label }), _jsx("span", { className: "text-neutral-grey-50 text-xs tabular-nums", children: option.count })] }, option.value))) })) : (_jsx("div", { className: "text-neutral-grey-50 px-2 py-1 text-xs", children: emptyMessage }))] }));
47
+ }
48
+ export function WorkboxFilters({ items, selectedTemplateIds, selectedWorkflowIds, onSelectedTemplateIdsChange, onSelectedWorkflowIdsChange, }) {
49
+ const templateOptions = buildFilterOptions(items, getWorkboxTemplateFilterValue, (item) => item.templateName || item.templateId || "Unknown template");
50
+ const workflowOptions = buildFilterOptions(items, getWorkboxWorkflowFilterValue, (item) => item.workflowName || item.workflowId || "No workflow");
51
+ const activeFilterCount = selectedTemplateIds.length + selectedWorkflowIds.length;
52
+ const filterLabel = activeFilterCount > 0
53
+ ? `Filter workbox (${activeFilterCount} active filter${activeFilterCount === 1 ? "" : "s"})`
54
+ : "Filter workbox";
55
+ const clearFilters = () => {
56
+ onSelectedTemplateIdsChange([]);
57
+ onSelectedWorkflowIdsChange([]);
58
+ };
59
+ return (_jsxs(Tooltip, { delayDuration: 500, children: [_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(TooltipTrigger, { asChild: true, children: _jsx(SimpleIconButton, { "data-testid": "workbox-filter-button", showTooltip: false, selected: activeFilterCount > 0, icon: _jsx(ListFilter, { className: "h-4 w-4", strokeWidth: 1 }), label: filterLabel, className: "relative", onClick: () => { }, size: "small", children: activeFilterCount > 0 && (_jsx("span", { className: "bg-neutral-grey-100 absolute -top-1 -right-1 flex h-3 min-w-3 items-center justify-center rounded-full px-0.5 text-[8px] leading-none text-white", children: activeFilterCount })) }) }) }), _jsxs(PopoverContent, { className: "max-h-[min(70vh,32rem)] w-72 overflow-y-auto p-3", align: "start", "data-testid": "workbox-filter-popover", children: [_jsxs("div", { className: "mb-3 flex items-center justify-between gap-2", children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: "Filters" }), activeFilterCount > 0 && (_jsx(Button, { type: "button", size: "sm", variant: "ghost", className: "h-6 px-2 text-xs", onClick: clearFilters, children: "Clear all" }))] }), _jsxs("div", { className: "space-y-3", children: [_jsx(FilterGroup, { label: "Template", emptyMessage: "No templates in this workbox", options: templateOptions, selectedValues: selectedTemplateIds, onSelectedValuesChange: onSelectedTemplateIdsChange }), _jsx(FilterGroup, { label: "Workflow", emptyMessage: "No workflows in this workbox", options: workflowOptions, selectedValues: selectedWorkflowIds, onSelectedValuesChange: onSelectedWorkflowIdsChange })] })] })] }), _jsx(TooltipContent, { children: filterLabel })] }));
60
+ }
61
+ //# sourceMappingURL=WorkboxFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkboxFilters.js","sourceRoot":"","sources":["../../../src/editor/sidebar/WorkboxFilters.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type VersionDiffVariant = "default" | "minimap";
2
+ /**
3
+ * The default overlay and the minimap mount against the same pageViewContext,
4
+ * and requestBridgeGeometry keeps the latest text ranges per source — so each
5
+ * variant needs its own source (and range keys) or the instances clobber each
6
+ * other's contributions in the per-source union.
7
+ */
8
+ export declare function getVersionDiffBridgeSource(variant: VersionDiffVariant): string;
9
+ export declare function getVersionDiffTextRangeKey(variant: VersionDiffVariant, targetKey: string, rangeIndex: number): string;
10
+ export declare function getVersionDiffInnerRangeKey(variant: VersionDiffVariant, targetKey: string, rangeIndex: number, innerIndex: number): string;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The default overlay and the minimap mount against the same pageViewContext,
3
+ * and requestBridgeGeometry keeps the latest text ranges per source — so each
4
+ * variant needs its own source (and range keys) or the instances clobber each
5
+ * other's contributions in the per-source union.
6
+ */
7
+ export function getVersionDiffBridgeSource(variant) {
8
+ return `version-diff:${variant}`;
9
+ }
10
+ export function getVersionDiffTextRangeKey(variant, targetKey, rangeIndex) {
11
+ return `version-diff:${variant}:${targetKey}:r${rangeIndex}`;
12
+ }
13
+ export function getVersionDiffInnerRangeKey(variant, targetKey, rangeIndex, innerIndex) {
14
+ return `version-diff:${variant}:${targetKey}:r${rangeIndex}:c${innerIndex}`;
15
+ }
16
+ //# sourceMappingURL=versionDiffGeometryKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionDiffGeometryKeys.js","sourceRoot":"","sources":["../../../src/editor/version-diff/versionDiffGeometryKeys.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA2B;IACpE,OAAO,gBAAgB,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAA2B,EAC3B,SAAiB,EACjB,UAAkB;IAElB,OAAO,gBAAgB,OAAO,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAA2B,EAC3B,SAAiB,EACjB,UAAkB,EAClB,UAAkB;IAElB,OAAO,gBAAgB,OAAO,IAAI,SAAS,KAAK,UAAU,KAAK,UAAU,EAAE,CAAC;AAC9E,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const version = "0.2.12782";
2
- export declare const buildDate = "2026-07-27 17:11:17";
1
+ export declare const version = "0.2.12786";
2
+ export declare const buildDate = "2026-08-25 11:00:47";
package/dist/revision.js CHANGED
@@ -1,3 +1,3 @@
1
- export const version = "0.2.12782";
2
- export const buildDate = "2026-07-27 17:11:17";
1
+ export const version = "0.2.12786";
2
+ export const buildDate = "2026-08-25 11:00:47";
3
3
  //# sourceMappingURL=revision.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parhelia/core",
3
- "version": "0.2.12782",
3
+ "version": "0.2.12786",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,5 +0,0 @@
1
- import type { EditOperation } from "../../../../types";
2
- export interface AgentEditHistoryButtonProps {
3
- operations: EditOperation[];
4
- }
5
- export declare function AgentEditHistoryButton({ operations, }: AgentEditHistoryButtonProps): import("react").JSX.Element;
@@ -1,12 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { History } from "lucide-react";
4
- import { Button } from "../../../../components/ui/button";
5
- import { Popover, PopoverContent, PopoverTrigger, } from "../../../../components/ui/popover";
6
- import { AgentEditOperationsPanel } from "./EditOperationsPanel";
7
- export function AgentEditHistoryButton({ operations, }) {
8
- const [open, setOpen] = useState(false);
9
- const [actionsEl, setActionsEl] = useState(null);
10
- return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { size: "xs", variant: "ghost", className: "text-neutral-grey-100 hover:bg-neutral-grey-10! h-8 rounded-md bg-transparent! px-3 text-[12px] font-normal shadow-none! hover:shadow-none!", "data-testid": "agent-edit-history-trigger", children: [_jsx(History, { className: "mr-1.5 h-4 w-4", strokeWidth: 1 }), "Edit history"] }) }), _jsxs(PopoverContent, { align: "end", side: "top", sideOffset: 6, className: "w-[420px] max-w-[90vw] p-0", children: [_jsxs("div", { className: "border-border-default flex items-center justify-between gap-2 border-b px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(History, { className: "text-neutral-grey-50 h-3.5 w-3.5", strokeWidth: 1 }), _jsx("span", { className: "text-neutral-grey-100 text-xs font-medium", children: "Edit History" })] }), _jsx("div", { ref: setActionsEl, className: "flex items-center gap-1" })] }), _jsx("div", { className: "max-h-[60vh] overflow-y-auto", children: _jsx(AgentEditOperationsPanel, { operations: operations, headerless: true, headerActionsContainer: actionsEl }) })] })] }));
11
- }
12
- //# sourceMappingURL=AgentEditHistoryButton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentEditHistoryButton.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentEditHistoryButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAMjE,MAAM,UAAU,sBAAsB,CAAC,EACrC,UAAU,GACkB;IAC5B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAExE,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,6IAA6I,iBAC3I,4BAA4B,aAExC,KAAC,OAAO,IAAC,SAAS,EAAC,gBAAgB,EAAC,WAAW,EAAE,CAAC,GAAI,oBAE/C,GACM,EACjB,MAAC,cAAc,IACb,KAAK,EAAC,KAAK,EACX,IAAI,EAAC,KAAK,EACV,UAAU,EAAE,CAAC,EACb,SAAS,EAAC,4BAA4B,aAEtC,eAAK,SAAS,EAAC,kFAAkF,aAC/F,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,OAAO,IACN,SAAS,EAAC,kCAAkC,EAC5C,WAAW,EAAE,CAAC,GACd,EACF,eAAM,SAAS,EAAC,2CAA2C,6BAEpD,IACH,EACN,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,yBAAyB,GAAG,IAC1D,EACN,cAAK,SAAS,EAAC,8BAA8B,YAC3C,KAAC,wBAAwB,IACvB,UAAU,EAAE,UAAU,EACtB,UAAU,QACV,sBAAsB,EAAE,SAAS,GACjC,GACE,IACS,IACT,CACX,CAAC;AACJ,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { AiProfile } from "../../../services/aiService";
2
- export interface AgentThinkingDotsProps {
3
- profile?: Pick<AiProfile, "agentName" | "displayTitle" | "name">;
4
- }
5
- export declare function AgentThinkingDots({ profile }: AgentThinkingDotsProps): import("react").JSX.Element;
@@ -1,9 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { TimeWithTooltip } from "../../TimeWithTooltip";
3
- export function AgentThinkingDots({ profile }) {
4
- return (_jsx("div", { className: "px-4 py-3", "data-testid": "agent-thinking-dots", children: _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "mb-1 flex items-center gap-2", children: [_jsx("span", { className: "text-neutral-grey-100 text-xs font-medium", children: profile?.agentName ||
5
- profile?.displayTitle ||
6
- profile?.name ||
7
- "Agent" }), _jsx(TimeWithTooltip, { date: new Date(), className: "text-neutral-grey-50 text-xs" })] }), _jsxs("div", { className: "flex items-center gap-1 pt-2", children: [_jsx("div", { className: "bg-neutral-grey-50 h-1 w-1 animate-bounce rounded-full [animation-delay:-0.3s]" }), _jsx("div", { className: "bg-neutral-grey-50 h-1 w-1 animate-bounce rounded-full [animation-delay:-0.15s]" }), _jsx("div", { className: "bg-neutral-grey-50 h-1 w-1 animate-bounce rounded-full" })] })] }) }));
8
- }
9
- //# sourceMappingURL=AgentThinkingDots.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentThinkingDots.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentThinkingDots.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAA0B;IACnE,OAAO,CACL,cAAK,SAAS,EAAC,WAAW,iBAAa,qBAAqB,YAC1D,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAM,SAAS,EAAC,2CAA2C,YACxD,OAAO,EAAE,SAAS;gCACjB,OAAO,EAAE,YAAY;gCACrB,OAAO,EAAE,IAAI;gCACb,OAAO,GACJ,EACP,KAAC,eAAe,IACd,IAAI,EAAE,IAAI,IAAI,EAAE,EAChB,SAAS,EAAC,8BAA8B,GACxC,IACE,EACN,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,SAAS,EAAC,gFAAgF,GAAG,EAClG,cAAK,SAAS,EAAC,iFAAiF,GAAG,EACnG,cAAK,SAAS,EAAC,wDAAwD,GAAG,IACtE,IACF,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,8 +0,0 @@
1
- export declare function getFeedbackPanels(_isMobile: boolean): {
2
- name: string;
3
- title: string;
4
- content: import("react/jsx-runtime").JSX.Element;
5
- initialSize: number;
6
- noOverflow: boolean;
7
- }[];
8
- export declare function CommentsAndFeedback(): import("react/jsx-runtime").JSX.Element;
@@ -1,17 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Comments } from "./Comments";
3
- export function getFeedbackPanels(_isMobile) {
4
- return [
5
- {
6
- name: "comments",
7
- title: "Comments & Suggestions",
8
- content: _jsx(Comments, {}),
9
- initialSize: 100,
10
- noOverflow: true,
11
- },
12
- ];
13
- }
14
- export function CommentsAndFeedback() {
15
- return _jsx(Comments, {});
16
- }
17
- //# sourceMappingURL=CommentsAndFeedback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommentsAndFeedback.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentsAndFeedback.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,OAAO;QACL;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,KAAC,QAAQ,KAAG;YACrB,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,IAAI;SACjB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,KAAC,QAAQ,KAAG,CAAC;AACtB,CAAC"}